| 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 stock.bundle.js.LICENSE.txt */
(()=>{var t={48622:(t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default={computed:{thumbnail:function(){return"N/A"!==this.product.combination_thumbnail?""+this.product.combination_thumbnail:"N/A"!==this.product.product_thumbnail?""+this.product.product_thumbnail:null},combinationName:function(){var t=this.product.combination_name.split(","),n=this.product.attribute_name.split(","),e="";return t.forEach((function(t,r){var i=t.trim().slice(n[r].trim().length+" - ".length);e+=e.length?" - "+i:i})),e},hasCombination:function(){return!!this.product.combination_id}}}},60405:(t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default={methods:{trans:function(t){return this.$store.state.translations[t]}}}},95504:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r,i=s(e(72100)),o=s(e(78345)),a=s(e(81293)),u=s(e(57879));function s(t){return t&&t.__esModule?t:{default:t}}i.default.use(o.default),n.default=new o.default({mode:"history",base:(r=/(index\.php)/.exec(window.location.href),window.data.baseUrl+(r?"/index.php":"")+"/sell/stocks"),routes:[{path:"/",name:"overview",component:a.default},{path:"/movements",name:"movements",component:u.default}]})},4855:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.removeSelectedProduct=n.addSelectedProduct=n.removeProductToUpdate=n.addProductToUpdate=n.updateBulkEditQty=n.updateQtyByProductsId=n.updateQtyByProductId=n.updateProductQty=n.isLoading=n.updateKeywords=n.updatePageIndex=n.updateOrder=n.getMovementsTypes=n.getEmployees=n.getTranslations=n.getMovements=n.getCategories=n.getSuppliers=n.getStock=void 0;var r=s(e(72100)),i=s(e(74104)),o=function(t){if(t&&t.__esModule)return t;var n={};if(null!=t)for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(n[e]=t[e]);return n.default=t,n}(e(74007)),a=e(50066),u=e(60891);function s(t){return t&&t.__esModule?t:{default:t}}r.default.use(i.default),n.getStock=function(t,n){var e=t.commit,i=window.data.apiStockUrl;r.default.http.get(i,{params:{order:n.order,page_size:n.page_size,page_index:n.page_index,keywords:n.keywords?n.keywords:[],supplier_id:n.suppliers?n.suppliers:[],category_id:n.categories?n.categories:[],active:"null"!==n.active?n.active:[],low_stock:n.low_stock}}).then((function(t){e(o.LOADING_STATE,!1),e(o.SET_TOTAL_PAGES,t.headers.get("Total-Pages")),e(o.ADD_PRODUCTS,t.body)}),(function(t){(0,a.showGrowl)("error",t.statusText)}))},n.getSuppliers=function(t){var n=t.commit,e=window.data.suppliersUrl;r.default.http.get(e).then((function(t){n(o.SET_SUPPLIERS,t.body)}),(function(t){(0,a.showGrowl)("error",t.statusText)}))},n.getCategories=function(t){var n=t.commit,e=window.data.categoriesUrl;r.default.http.get(e).then((function(t){n(o.SET_CATEGORIES,t.body)}),(function(t){(0,a.showGrowl)("error",t.statusText)}))},n.getMovements=function(t,n){var e=t.commit,i=window.data.apiMovementsUrl;r.default.http.get(i,{params:{order:n.order,page_size:n.page_size,page_index:n.page_index,keywords:n.keywords?n.keywords:[],supplier_id:n.suppliers?n.suppliers:[],category_id:n.categories?n.categories:[],id_stock_mvt_reason:n.id_stock_mvt_reason?n.id_stock_mvt_reason:[],id_employee:n.id_employee?n.id_employee:[],date_add:n.date_add?n.date_add:[]}}).then((function(t){e(o.LOADING_STATE,!1),e(o.SET_TOTAL_PAGES,t.headers.get("Total-Pages")),e(o.SET_MOVEMENTS,t.body)}),(function(t){(0,a.showGrowl)("error",t.statusText)}))},n.getTranslations=function(t){var n=t.commit,e=window.data.translationUrl;r.default.http.get(e).then((function(t){n(o.SET_TRANSLATIONS,t.body),n(o.APP_IS_READY)}),(function(t){(0,a.showGrowl)("error",t.statusText)}))},n.getEmployees=function(t){var n=t.commit,e=window.data.employeesUrl;r.default.http.get(e).then((function(t){n(o.SET_EMPLOYEES_LIST,t.body)}),(function(t){(0,a.showGrowl)("error",t.statusText)}))},n.getMovementsTypes=function(t){var n=t.commit,e=window.data.movementsTypesUrl;r.default.http.get(e).then((function(t){n(o.SET_MOVEMENTS_TYPES,t.body)}),(function(t){(0,a.showGrowl)("error",t.statusText)}))},n.updateOrder=function(t,n){(0,t.commit)(o.UPDATE_ORDER,n)},n.updatePageIndex=function(t,n){(0,t.commit)(o.SET_PAGE_INDEX,n)},n.updateKeywords=function(t,n){(0,t.commit)(o.UPDATE_KEYWORDS,n)},n.isLoading=function(t){(0,t.commit)(o.LOADING_STATE,!0)},n.updateProductQty=function(t,n){(0,t.commit)(o.UPDATE_PRODUCT_QTY,n)},n.updateQtyByProductId=function(t,n){var e=t.commit,i=n.url,s=n.delta;r.default.http.post(i,{delta:s}).then((function(t){e(o.UPDATE_PRODUCT,t.body),u.EventBus.$emit("displayBulkAlert","success")}),(function(t){(0,a.showGrowl)("error",t.statusText)}))},n.updateQtyByProductsId=function(t){var n=t.commit,e=t.state,i=e.editBulkUrl,s=e.productsToUpdate;r.default.http.post(i,s).then((function(t){n(o.UPDATE_PRODUCTS_QTY,t.body),u.EventBus.$emit("displayBulkAlert","success")}),(function(t){(0,a.showGrowl)("error",t.statusText)}))},n.updateBulkEditQty=function(t,n){(0,t.commit)(o.UPDATE_BULK_EDIT_QTY,n)},n.addProductToUpdate=function(t,n){(0,t.commit)(o.ADD_PRODUCT_TO_UPDATE,n)},n.removeProductToUpdate=function(t,n){(0,t.commit)(o.REMOVE_PRODUCT_TO_UPDATE,n)},n.addSelectedProduct=function(t,n){(0,t.commit)(o.ADD_SELECTED_PRODUCT,n)},n.removeSelectedProduct=function(t,n){(0,t.commit)(o.REMOVE_SELECTED_PRODUCT,n)}},17701:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=s(e(72100)),i=s(e(20629)),o=s(e(96486)),a=function(t){if(t&&t.__esModule)return t;var n={};if(null!=t)for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(n[e]=t[e]);return n.default=t,n}(e(4855)),u=s(e(4088));function s(t){return t&&t.__esModule?t:{default:t}}r.default.use(i.default);var c={suppliers:function(t){return(n=t.suppliers.data).forEach((function(t){t.id=t.supplier_id})),n;var n},categories:function(t){return function n(e){return e.forEach((function(e){e.children=o.default.values(e.children),t.categoryList.push(e),e.id=e.id_parent+"-"+e.id_category,n(e.children)})),e}(t.categories)},selectedProductsLng:function(t){return t.selectedProducts.length}};n.default=new i.default.Store({state:{order:"",pageIndex:1,totalPages:0,productsPerPage:30,products:[],hasQty:!1,keywords:[],suppliers:{data:[]},categories:[],categoryList:[],movements:[],employees:[],movementsTypes:[],translations:{},isLoading:!1,isReady:!1,editBulkUrl:"",bulkEditQty:null,productsToUpdate:[],selectedProducts:[]},getters:c,actions:a,mutations:u.default})},74007:(t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.ADD_PRODUCTS="ADD_PRODUCTS",n.ADD_PRODUCT_TO_UPDATE="ADD_PRODUCT_TO_UPDATE",n.ADD_SELECTED_PRODUCT="ADD_SELECTED_PRODUCT",n.APP_IS_READY="APP_IS_READY",n.LOADING_STATE="LOADING_STATE",n.REMOVE_PRODUCT_TO_UPDATE="REMOVE_PRODUCT_TO_UPDATE",n.REMOVE_SELECTED_PRODUCT="REMOVE_SELECTED_PRODUCT",n.SET_CATEGORIES="SET_CATEGORIES",n.SET_EMPLOYEES_LIST="SET_EMPLOYEES_LIST",n.SET_MOVEMENTS="SET_MOVEMENTS",n.SET_MOVEMENTS_TYPES="SET_MOVEMENTS_TYPES",n.SET_PAGE_INDEX="SET_PAGE_INDEX",n.SET_SUPPLIERS="SET_SUPPLIERS",n.SET_TOTAL_PAGES="SET_TOTAL_PAGES",n.SET_TRANSLATIONS="SET_TRANSLATIONS",n.UPDATE_BULK_EDIT_QTY="UPDATE_BULK_EDIT_QTY",n.UPDATE_KEYWORDS="UPDATE_KEYWORDS",n.UPDATE_PRODUCT="UPDATE_PRODUCT",n.UPDATE_PRODUCT_QTY="UPDATE_PRODUCT_QTY",n.UPDATE_PRODUCTS_QTY="UPDATE_PRODUCTS_QTY",n.UPDATE_ORDER="UPDATE_ORDER"},4088:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r,i=u(e(88106)),o=u(e(96486)),a=function(t){if(t&&t.__esModule)return t;var n={};if(null!=t)for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(n[e]=t[e]);return n.default=t,n}(e(74007));function u(t){return t&&t.__esModule?t:{default:t}}n.default=(r={},(0,i.default)(r,a.UPDATE_ORDER,(function(t,n){t.order=n})),(0,i.default)(r,a.UPDATE_KEYWORDS,(function(t,n){t.keywords=n})),(0,i.default)(r,a.SET_TOTAL_PAGES,(function(t,n){t.totalPages=Number(n)})),(0,i.default)(r,a.SET_PAGE_INDEX,(function(t,n){t.pageIndex=n})),(0,i.default)(r,a.SET_SUPPLIERS,(function(t,n){t.suppliers=n})),(0,i.default)(r,a.SET_CATEGORIES,(function(t,n){t.categories=n.data.tree.children})),(0,i.default)(r,a.SET_MOVEMENTS,(function(t,n){t.movements=n.data})),(0,i.default)(r,a.SET_TRANSLATIONS,(function(t,n){n.data.forEach((function(n){t.translations[n.translation_id]=n.name}))})),(0,i.default)(r,a.LOADING_STATE,(function(t,n){t.isLoading=n})),(0,i.default)(r,a.APP_IS_READY,(function(t){t.isReady=!0})),(0,i.default)(r,a.SET_EMPLOYEES_LIST,(function(t,n){t.employees=n.data})),(0,i.default)(r,a.SET_MOVEMENTS_TYPES,(function(t,n){t.movementsTypes=n.data})),(0,i.default)(r,a.ADD_PRODUCTS,(function(t,n){t.productsToUpdate=[],t.selectedProducts=[],o.default.forEach(n.data.data,(function(t){t.qty=0})),t.editBulkUrl=n.data.info.edit_bulk_url,t.products=n.data.data})),(0,i.default)(r,a.UPDATE_PRODUCT,(function(t,n){var e=o.default.findIndex(t.products,{product_id:n.product_id,combination_id:n.combination_id}),r=o.default.findIndex(t.productsToUpdate,{product_id:n.product_id,combination_id:n.combination_id});n.qty=0,t.products.splice(e,1,n),t.productsToUpdate.splice(r,1)})),(0,i.default)(r,a.UPDATE_PRODUCTS_QTY,(function(t,n){t.productsToUpdate=[],t.selectedProducts=[],o.default.forEach(n,(function(n){var e=o.default.findIndex(t.products,{product_id:n.product_id,combination_id:n.combination_id});n.qty=0,t.products.splice(e,1,n)})),t.hasQty=!1})),(0,i.default)(r,a.UPDATE_PRODUCT_QTY,(function(t,n){var e=!1,r=o.default.find(t.products,{product_id:n.product_id,combination_id:n.combination_id});o.default.forEach(t.products,(function(t){r.qty=n.delta,t.qty&&(e=!0)})),t.hasQty=e})),(0,i.default)(r,a.ADD_PRODUCT_TO_UPDATE,(function(t,n){var e=o.default.findIndex(t.productsToUpdate,{product_id:n.product_id,combination_id:n.combination_id});-1!==e?t.productsToUpdate.splice(e,1,n):t.productsToUpdate.push(n)})),(0,i.default)(r,a.REMOVE_PRODUCT_TO_UPDATE,(function(t,n){var e=o.default.findIndex(t.productsToUpdate,{product_id:n.product_id,combination_id:n.combination_id});t.productsToUpdate.splice(e,1)})),(0,i.default)(r,a.UPDATE_BULK_EDIT_QTY,(function(t,n){t.bulkEditQty=n,n&&(o.default.forEach(t.selectedProducts,(function(e){var r=o.default.findIndex(t.productsToUpdate,{product_id:e.product_id,combination_id:e.combination_id});e.qty=n,e.delta=t.bulkEditQty,-1!==r?t.productsToUpdate.splice(r,1,e):t.productsToUpdate.push(e)})),t.hasQty=!0),null===n&&(o.default.forEach(t.selectedProducts,(function(t){t.qty=0})),t.productsToUpdate=[],t.selectedProducts=[],t.hasQty=!1)})),(0,i.default)(r,a.ADD_SELECTED_PRODUCT,(function(t,n){var e=o.default.findIndex(t.selectedProducts,{product_id:n.product_id,combination_id:n.combination_id});-1!==e?t.selectedProducts.splice(e,1,n):t.selectedProducts.push(n)})),(0,i.default)(r,a.REMOVE_SELECTED_PRODUCT,(function(t,n){var e=o.default.findIndex(t.selectedProducts,{product_id:n.product_id,combination_id:n.combination_id});-1!==e&&(t.selectedProducts[e].qty=0),t.selectedProducts.splice(e,1)})),r)},60891:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.EventBus=void 0;var r,i=(r=e(72100))&&r.__esModule?r:{default:r},o=n.EventBus=new i.default;n.default=o},50066:(t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var e=n.showGrowl=function(t,n,e){var r=void 0!==e?e:2e3;"success"===t?window.$.growl({title:"",size:"large",message:n,duration:r}):window.$.growl[t]({title:"",size:"large",message:n,duration:r})};n.default=e},73770:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r=s(e(88239)),i=s(e(86842)),o=s(e(38058)),a=s(e(59513)),u=s(e(90069));function s(t){return t&&t.__esModule?t:{default:t}}n.Z={name:"App",computed:{isReady:function(){return this.$store.state.isReady},pagesCount:function(){return this.$store.state.totalPages},currentPagination:function(){return this.$store.state.pageIndex},isOverview:function(){return"overview"===this.$route.name}},methods:{onPageChanged:function(t){this.$store.dispatch("updatePageIndex",t),this.fetch("asc")},fetch:function(t){var n="overview"===this.$route.name?"getStock":"getMovements",e="desc"===t?" desc":"";this.$store.dispatch("isLoading"),this.filters=(0,r.default)({},this.filters,{order:""+this.$store.state.order+e,page_size:this.$store.state.productsPerPage,page_index:this.$store.state.pageIndex,keywords:this.$store.state.keywords}),this.$store.dispatch(n,this.filters)},onSearch:function(t){this.$store.dispatch("updateKeywords",t),this.resetPagination(),this.fetch()},applyFilter:function(t){this.filters=t,this.resetPagination(),this.fetch()},resetFilters:function(){this.filters={}},resetPagination:function(){this.$store.dispatch("updatePageIndex",1)},onLowStockChecked:function(t){this.filters=(0,r.default)({},this.filters,{low_stock:t}),this.fetch()}},components:{StockHeader:o.default,Search:a.default,PSPagination:i.default,LowFilter:u.default},data:function(){return{filters:{}}}}},83827:(t,n)=>{"use strict";Object.defineProperty(n,"X",{value:!0}),n.Z={computed:{isOverview:function(){return"overview"===this.$route.name},catalogLink:function(){return window.data.catalogUrl},stockLink:function(){return window.data.stockUrl}}}},43657:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r=u(e(60445)),i=u(e(34455)),o=u(e(4596)),a=u(e(10598));function u(t){return t&&t.__esModule?t:{default:t}}n.Z={computed:{locale:function(){return window.data.locale},isOverview:function(){return"overview"===this.$route.name},employees:function(){return this.$store.state.employees},movementsTypes:function(){return this.$store.state.movementsTypes},categoriesList:function(){return this.$store.getters.categories}},methods:{onClear:function(t){delete this.date_add[t.dateType],this.applyFilter()},onClick:function(){this.applyFilter()},onFilterActive:function(t,n){"supplier"===n?this.suppliers=t:this.categories=t,this.disabled=!this.suppliers.length&&!this.categories.length,this.applyFilter()},applyFilter:function(){this.$store.dispatch("isLoading"),this.$emit("applyFilter",{suppliers:this.suppliers,categories:this.categories,id_stock_mvt_reason:this.id_stock_mvt_reason,id_employee:this.id_employee,date_add:this.date_add,active:this.active})},onChange:function(t){"id_stock_mvt_reason"===t.itemId?this.id_stock_mvt_reason="default"===t.value?[]:t.value:this.id_employee="default"===t.value?[]:t.value,this.applyFilter()},onDpChange:function(t){this.date_add[t.dateType]=t.date.unix(),t.oldDate&&this.applyFilter()},onRadioChange:function(t){this.active=t,this.applyFilter()}},components:{FilterComponent:a.default,PSSelect:r.default,PSDatePicker:i.default,PSRadio:o.default},mounted:function(){this.date_add={},this.$store.dispatch("getSuppliers"),this.$store.dispatch("getCategories")},data:function(){return{disabled:!0,suppliers:[],categories:[],id_stock_mvt_reason:[],id_employee:[],date_add:{},active:null}}}},62305:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r=u(e(75576)),i=u(e(37862)),o=u(e(76659)),a=e(60891);function u(t){return t&&t.__esModule?t:{default:t}}n.Z={props:{placeholder:{type:String,required:!1,default:""},itemId:{type:String,required:!0},label:{type:String,required:!0},list:{type:Array,required:!0}},computed:{isOverview:function(){return"overview"===this.$route.name},hasPlaceholder:function(){return!this.tags.length},PSTreeTranslations:function(){return{expand:this.trans("tree_expand"),reduce:this.trans("tree_reduce")}}},methods:{getItems:function(){var t=this,n=[];return this.list.filter((function(e){var r=e[t.label].toLowerCase();return e.visible=!1,r.match(t.currentVal)&&(e.visible=!0,n.push(e)),e.children&&(t.hasChildren=!0),e})),1===n.length?this.match=n[0]:this.match=null,this.list},onCheck:function(t){var n=t.item[this.label],e=this.hasChildren?"category":"supplier";if(t.checked)this.tags.push(n);else{var r=this.tags.indexOf(n);this.splice&&this.tags.splice(r,1),this.splice=!0}this.tags.length?this.$emit("active",this.filterList(this.tags),e):this.$emit("active",[],e)},onTyping:function(t){this.currentVal=t.toLowerCase()},onTagChanged:function(t){var n=t;-1!==this.tags.indexOf(this.currentVal)&&this.tags.pop(),this.splice=!1,this.match&&(n=this.match[this.label]),a.EventBus.$emit("toggleCheckbox",n),this.currentVal=""},filterList:function(t){var n=this,e=[],r=this.$store.state.categoryList;return(this.hasChildren?r:this.list).map((function(r){var i=-1===e.indexOf(Number(r[n.itemId]));return-1!==t.indexOf(r[n.label])&&i&&e.push(Number(r[n.itemId])),e})),e}},data:function(){return{currentVal:"",match:null,tags:[],splice:!0,hasChildren:!1}},components:{PSTags:r.default,PSTree:o.default,PSTreeItem:i.default}}},39596:(t,n,e)=>{"use strict";var r=e(73609);Object.defineProperty(n,"X",{value:!0});var i,o=(i=e(93331))&&i.__esModule?i:{default:i};n.Z={props:{filters:{type:Object,required:!1,default:function(){return{}}}},computed:{stockImportTitle:function(){return this.trans("title_import")},stockExportTitle:function(){return this.trans("title_export")},stockImportUrl:function(){return window.data.stockImportUrl},stockExportUrl:function(){var t=r.param(this.filters);return window.data.stockExportUrl+"&"+t}},methods:{onCheck:function(t){var n=t.checked?1:0;this.$emit("lowStockChecked",n)}},mounted:function(){r('[data-toggle="pstooltip"]').pstooltip()},components:{PSCheckbox:o.default}}},91705:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r=s(e(75576)),i=s(e(98382)),o=s(e(70695)),a=e(60891),u=s(e(66003));function s(t){return t&&t.__esModule?t:{default:t}}n.Z={components:{Filters:u.default,PSTags:r.default,PSButton:i.default,PSAlert:o.default},computed:{error:function(){return"ALERT_TYPE_DANGER"===this.alertType}},methods:{onClick:function(){var t=this.$refs.psTags.tag;this.$refs.psTags.add(t)},onSearch:function(){this.$emit("search",this.tags)},applyFilter:function(t){this.$emit("applyFilter",t)},onCloseAlert:function(){this.showAlert=!1}},watch:{$route:function(){this.tags=[]}},mounted:function(){var t=this;a.EventBus.$on("displayBulkAlert",(function(n){t.alertType="success"===n?"ALERT_TYPE_SUCCESS":"ALERT_TYPE_DANGER",t.showAlert=!0,setTimeout((function(){t.showAlert=!1}),5e3)}))},data:function(){return{tags:[],showAlert:!1,alertType:"ALERT_TYPE_DANGER",duration:!1}}}},28750:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r=o(e(25234)),i=o(e(59934));function o(t){return t&&t.__esModule?t:{default:t}}var a=window.$;n.Z={components:{Breadcrumb:r.default,Tabs:i.default},mounted:function(){a(".header-toolbar").first().find(".toolbar-icons").insertAfter(a(this.$el).find(".title-row > .title"));var t=a.Event("vueHeaderMounted",{name:"stock-header"});a(document).trigger(t)}}},48152:(t,n)=>{"use strict";Object.defineProperty(n,"X",{value:!0}),n.Z={computed:{isOverview:function(){return"overview"===this.$route.name},isMovements:function(){return"movements"===this.$route.name}}}},11077:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r=s(e(98793)),i=s(e(82753)),o=s(e(70695)),a=s(e(77221)),u=s(e(14315));function s(t){return t&&t.__esModule?t:{default:t}}n.Z={computed:{isLoading:function(){return this.$store.state.isLoading},movements:function(){return this.$store.state.movements},emptyMovements:function(){return!this.$store.state.movements.length},currentSort:function(){return this.$store.state.order}},methods:{sort:function(t,n){this.$store.dispatch("updateOrder",t),this.$emit("fetch","desc"===n?"desc":"asc")}},mounted:function(){this.$store.dispatch("updatePageIndex",1),this.$store.dispatch("updateKeywords",[]),this.$store.dispatch("getEmployees"),this.$store.dispatch("getMovementsTypes"),this.$store.dispatch("updateOrder","date_add"),this.$emit("resetFilters"),this.$emit("fetch","desc")},components:{PSTable:r.default,PSSort:i.default,PSAlert:o.default,PSLoader:a.default,MovementLine:u.default}}},39411:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r=o(e(14719)),i=o(e(48622));function o(t){return t&&t.__esModule?t:{default:t}}n.Z={props:{product:{type:Object,required:!0}},mixins:[i.default],computed:{qty:function(){return this.product.physical_quantity},employeeName:function(){return this.product.employee_firstname+" "+this.product.employee_lastname},isPositive:function(){return this.product.sign>0},orderLink:function(){return"N/A"!==this.product.order_link?this.product.order_link:null}},components:{PSMedia:r.default}}},80729:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r=o(e(5127)),i=o(e(49191));function o(t){return t&&t.__esModule?t:{default:t}}n.Z={computed:{isLoading:function(){return this.$store.state.isLoading}},methods:{sort:function(t){this.$emit("fetch",t)}},mounted:function(){this.$store.dispatch("updatePageIndex",1),this.$store.dispatch("updateKeywords",[]),this.$store.dispatch("updateOrder","product"),this.$store.dispatch("isLoading"),this.$emit("resetFilters"),this.$emit("fetch","asc")},components:{ProductsActions:r.default,ProductsTable:i.default}}},35407:(t,n,e)=>{"use strict";var r=e(73609);Object.defineProperty(n,"X",{value:!0});var i=c(e(93331)),o=c(e(14719)),a=c(e(48622)),u=e(60891),s=c(e(20931));function c(t){return t&&t.__esModule?t:{default:t}}n.Z={props:{product:{type:Object,required:!0}},mixins:[a.default],computed:{reference:function(){return"N/A"!==this.product.combination_reference?this.product.combination_reference:this.product.product_reference},updatedQty:function(){return!!this.product.qty},physicalQtyUpdated:function(){return Number(this.physical)+Number(this.product.qty)},availableQtyUpdated:function(){return Number(this.product.product_available_quantity)+Number(this.product.qty)},physical:function(){return Number(this.product.product_available_quantity)+Number(this.product.product_reserved_quantity)},lowStock:function(){return this.product.product_low_stock_alert},lowStockLevel:function(){return'<div class="text-sm-left">\n <p>'+this.trans("product_low_stock")+"</p>\n <p><strong>"+this.trans("product_low_stock_level")+" "+this.product.product_low_stock_threshold+"</strong></p>\n </div>"},lowStockAlert:function(){return'<div class="text-sm-left">\n <p><strong>'+this.trans("product_low_stock_alert")+" "+this.product.product_low_stock_alert+"</strong></p>\n </div>"},id:function(){return"product-"+this.product.product_id+this.product.combination_id}},methods:{productChecked:function(t){t.checked?this.$store.dispatch("addSelectedProduct",t.item):this.$store.dispatch("removeSelectedProduct",t.item)},updateProductQty:function(t){var n={product_id:t.product.product_id,combination_id:t.product.combination_id,delta:t.delta};this.$store.dispatch("updateProductQty",n),t.delta?this.$store.dispatch("addProductToUpdate",n):this.$store.dispatch("removeProductToUpdate",n)}},mounted:function(){var t=this;u.EventBus.$on("toggleProductsCheck",(function(n){var e=t.id;t.$refs[e]&&(t.$refs[e].checked=n)})),r('[data-toggle="pstooltip"]').pstooltip()},data:function(){return{bulkEdition:!1}},components:{Spinner:s.default,PSMedia:o.default,PSCheckbox:i.default}}},31027:(t,n,e)=>{"use strict";var r=e(73609);Object.defineProperty(n,"X",{value:!0});var i=s(e(47211)),o=s(e(93331)),a=s(e(98382)),u=e(60891);function s(t){return t&&t.__esModule?t:{default:t}}n.Z={computed:{disabled:function(){return!this.$store.state.hasQty},bulkEditQty:function(){return this.$store.state.bulkEditQty},selectedProductsLng:function(){return this.$store.getters.selectedProductsLng}},watch:{selectedProductsLng:function(t){0===t&&this.$refs["bulk-action"]&&(this.$refs["bulk-action"].checked=!1,this.isFocused=!1),1===t&&this.$refs["bulk-action"]&&(this.isFocused=!0)}},methods:{isIndeterminate:function(){var t=this.selectedProductsLng,n=this.$store.state.products.length,e=t>0&&t<n;return e&&(this.$refs["bulk-action"].checked=!0),e},focusIn:function(){this.danger=!this.selectedProductsLng,this.isFocused=!this.danger,this.danger&&u.EventBus.$emit("displayBulkAlert","error")},focusOut:function(t){this.isFocused=r(t.target).hasClass("ps-number"),this.danger=!1},bulkChecked:function(t){t.checked||this.$store.dispatch("updateBulkEditQty",null),this.isIndeterminate()||u.EventBus.$emit("toggleProductsCheck",t.checked)},sendQty:function(){this.$store.dispatch("updateQtyByProductsId")},onChange:function(t){this.$store.dispatch("updateBulkEditQty",t)},onKeyUp:function(t){this.isFocused=!0,this.$store.dispatch("updateBulkEditQty",t.target.value)}},data:function(){return{isFocused:!1,danger:!1}},components:{PSNumber:i.default,PSCheckbox:o.default,PSButton:a.default}}},34577:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r=s(e(70695)),i=s(e(98793)),o=s(e(82753)),a=s(e(77221)),u=s(e(50208));function s(t){return t&&t.__esModule?t:{default:t}}n.Z={props:{isLoading:{type:Boolean,required:!0}},components:{ProductLine:u.default,PSSort:o.default,PSAlert:r.default,PSTable:i.default,PSLoader:a.default},methods:{sort:function(t,n){this.$store.dispatch("updateOrder",t),this.$emit("sort","desc"===n?"desc":"asc")}},computed:{products:function(){return this.$store.state.products},emptyProducts:function(){return!this.$store.state.products.length},currentSort:function(){return this.$store.state.order}}}},52498:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r=o(e(65425)),i=o(e(47211));function o(t){return t&&t.__esModule?t:{default:t}}var a=window.$;n.Z={props:{product:{type:Object,required:!0}},computed:{id:function(){return"qty-"+this.product.product_id+"-"+this.product.combination_id},classObject:function(){return{active:this.isActive,disabled:!this.isEnabled}}},methods:{getQuantity:function(){return this.product.qty||(this.isEnabled=!1,this.value=0),parseInt(this.value,10)},onChange:function(t){this.value=t,this.isEnabled=!!t},deActivate:function(){this.isActive=!1,this.isEnabled=!1,this.value=null,this.product.qty=null},onKeyup:function(t){var n=t.target.value;0===n?this.deActivate():(this.isActive=!0,this.isEnabled=!0,this.value=n)},focusIn:function(){this.isActive=!0},focusOut:function(t){var n=parseInt(this.value,10);a(t.target).hasClass("ps-number")||!(0,r.default)(n)&&0!==n||(this.isActive=!1),this.isEnabled=!!this.value},sendQty:function(){var t=this.product.edit_url;0===parseInt(this.product.qty,10)||(0,r.default)(parseInt(this.value,10))||(this.$store.dispatch("updateQtyByProductId",{url:t,delta:this.value}),this.deActivate())}},watch:{value:function(t){this.$emit("updateProductQty",{product:this.product,delta:t})}},components:{PSNumber:i.default},data:function(){return{value:null,isActive:!1,isEnabled:!1}}}},22178:(t,n)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var e="ALERT_TYPE_INFO";n.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:(t,n)=>{"use strict";Object.defineProperty(n,"X",{value:!0}),n.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:(t,n)=>{"use strict";Object.defineProperty(n,"X",{value:!0}),n.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(t){this.$emit("checked",{checked:t,item:this.model})}},data:function(){return{checked:!1}}}},69557:(t,n,e)=>{"use strict";var r=e(73609);Object.defineProperty(n,"X",{value:!0}),n.Z={props:{locale:{type:String,required:!0,default:"en"},type:{type:String,required:!0}},mounted:function(){var t=this;r(this.$refs.datepicker).datetimepicker({format:"YYYY-MM-DD",showClear:!0}).on("dp.change",(function(n){n.dateType=t.type,t.$emit(n.date?"dpChange":"reset",n)}))}}},80393:(t,n)=>{"use strict";Object.defineProperty(n,"X",{value:!0}),n.Z={props:{thumbnail:{type:String,required:!0}},computed:{displayThumb:function(){return!!this.thumbnail}}}},70827:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r,i=(r=e(65425))&&r.__esModule?r:{default:r};n.Z={props:{value:{type:Number,default:0},danger:{type:Boolean,default:!1},buttons:{type:Boolean,default:!1},hoverButtons:{type:Boolean,default:!1}},methods:{onKeyup:function(t){this.$emit("keyup",t)},focusIn:function(){this.$emit("focus")},focusOut:function(t){this.$emit("blur",t)},increment:function(){var t=parseInt(""===this.value?0:this.value,10);this.$emit("change",(0,i.default)(t)?0:t+1)},decrement:function(){var t=parseInt(this.value,10);this.$emit("change",(0,i.default)(t)?-1:t-1)}}}},45260:(t,n)=>{"use strict";Object.defineProperty(n,"X",{value:!0}),n.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(t){return this.currentIndex===t},showIndex:function(t){var n=t<this.currentIndex+this.multiPagesToDisplay,e=t>this.currentIndex-this.multiPagesToDisplay,r=n&&e,i=t===this.pagesCount,o=1===t;return this.isMultiPagination?r||o||i:!this.isMultiPagination},changePage:function(t){this.$emit("pageChanged",t)},showFirstDots:function(t){var n=this.pagesCount-this.multiPagesToDisplay;return this.isMultiPagination?t===this.pagesCount&&this.currentIndex<=n:this.isMultiPagination},showLastDots:function(t){return this.isMultiPagination?1===t&&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}}}},63194:(t,n)=>{"use strict";Object.defineProperty(n,"X",{value:!0}),n.Z={props:{id:{type:String,required:!0},label:{type:String,required:!1,default:""},checked:{type:Boolean,required:!1},value:{type:String,required:!1,default:""}},methods:{onChange:function(){this.$emit("change",this.value)}}}},7448:(t,n)=>{"use strict";Object.defineProperty(n,"X",{value:!0}),n.Z={props:{items:{type:Array,required:!0},itemId:{type:String,required:!1,default:""},itemName:{type:String,required:!1,default:""}},methods:{onChange:function(){this.$emit("change",{value:this.selected,itemId:this.itemId})}},data:function(){return{selected:"default"}}}},40700:(t,n)=>{"use strict";Object.defineProperty(n,"X",{value:!0}),n.Z={props:{order:{type:String,required:!0},currentSort:{type:String,required:!0}},methods:{sortToggle:function(){this.sortDirection="asc"===this.sortDirection?"desc":"asc",this.$emit("sort",this.order,this.sortDirection)}},data:function(){return{sortDirection:"asc"}},computed:{isCurrent:function(){return this.currentSort===this.order}}}},60994:(t,n)=>{"use strict";Object.defineProperty(n,"X",{value:!0}),n.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(t){t&&(this.tags.push(t.trim()),this.tag="",this.focus(),this.$emit("tagChange",this.tag))},close:function(t){var n=this.tags[t];this.tags.splice(t,1),this.$emit("tagChange",n)},remove:function(){if(this.tags.length&&!this.tag.length){var t=this.tags[this.tags.length-1];this.tags.pop(),this.$emit("tagChange",t)}},focus:function(){this.$refs.tags.focus()}},data:function(){return{tag:null}}}},88513:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r,i=(r=e(93331))&&r.__esModule?r:{default:r},o=e(60891);n.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 t="";return this.model.extraLabel&&1===this.model.extraLabel?t=this.translations.extra_singular:this.model.extraLabel&&(t=this.translations.extra.replace("%d",this.model.extraLabel)),t},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(t){this.$refs[t]?(this.openTreeItemAction(),this.current=!0,this.parentElement(this.$parent)):this.current=!1},parentElement:function(t){t.clickElement&&(t.clickElement(),this.parentElement(t.$parent))},clickElement:function(){return!this.model.disable&&this.openTreeItemAction()},openTreeItemAction:function(){this.setCurrentElement(this.model.full_name),this.isFolder?this.open=!this.open:o.EventBus.$emit("lastTreeItemClick",{item:this.model})},onCheck:function(t){this.$emit("checked",t)}},mounted:function(){var t=this;o.EventBus.$on("toggleCheckbox",(function(n){var e=t.$refs[n];e&&(e.$data.checked=!e.$data.checked)})).$on("expand",(function(){t.open=!0})).$on("reduce",(function(){t.open=!1})).$on("setCurrentElement",(function(n){t.setCurrentElement(n)})),this.setCurrentElement(this.currentItem)},components:{PSCheckbox:i.default},data:function(){return{open:!1,current:!1}}}},41134:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r,i=e(60891),o=(r=e(37862))&&r.__esModule?r:{default:r};n.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(t){this.$emit("checked",t)},expand:function(){i.EventBus.$emit("expand")},reduce:function(){i.EventBus.$emit("reduce")},setCurrentElement:function(t){i.EventBus.$emit("setCurrentElement",t)}},components:{PSTreeItem:o.default}}},65425:(t,n,e)=>{t.exports={default:e(24334),__esModule:!0}},52945:(t,n,e)=>{t.exports={default:e(56981),__esModule:!0}},32242:(t,n,e)=>{t.exports={default:e(33391),__esModule:!0}},88106:(t,n,e)=>{"use strict";n.__esModule=!0;var r,i=(r=e(32242))&&r.__esModule?r:{default:r};n.default=function(t,n,e){return n in t?(0,i.default)(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}},88239:(t,n,e)=>{"use strict";n.__esModule=!0;var r,i=(r=e(52945))&&r.__esModule?r:{default:r};n.default=i.default||function(t){for(var n=1;n<arguments.length;n++){var e=arguments[n];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])}return t}},24334:(t,n,e)=>{e(22960),t.exports=e(34579).Number.isNaN},56981:(t,n,e)=>{e(72699),t.exports=e(34579).Object.assign},33391:(t,n,e)=>{e(31477);var r=e(34579).Object;t.exports=function(t,n,e){return r.defineProperty(t,n,e)}},85663:t=>{t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},12159:(t,n,e)=>{var r=e(36727);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},57428:(t,n,e)=>{var r=e(7932),i=e(78728),o=e(16531);t.exports=function(t){return function(n,e,a){var u,s=r(n),c=i(s.length),l=o(a,c);if(t&&e!=e){for(;c>l;)if((u=s[l++])!=u)return!0}else for(;c>l;l++)if((t||l in s)&&s[l]===e)return t||l||0;return!t&&-1}}},32894:t=>{var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},34579:t=>{var n=t.exports={version:"2.6.11"};"number"==typeof __e&&(__e=n)},19216:(t,n,e)=>{var r=e(85663);t.exports=function(t,n,e){if(r(t),void 0===n)return t;switch(e){case 1:return function(e){return t.call(n,e)};case 2:return function(e,r){return t.call(n,e,r)};case 3:return function(e,r,i){return t.call(n,e,r,i)}}return function(){return t.apply(n,arguments)}}},8333:t=>{t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},89666:(t,n,e)=>{t.exports=!e(7929)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},97467:(t,n,e)=>{var r=e(36727),i=e(33938).document,o=r(i)&&r(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},73338:t=>{t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},83856:(t,n,e)=>{var r=e(33938),i=e(34579),o=e(19216),a=e(41818),u=e(27069),s=function(t,n,e){var c,l,d,p=t&s.F,f=t&s.G,g=t&s.S,h=t&s.P,A=t&s.B,m=t&s.W,b=f?i:i[n]||(i[n]={}),v=b.prototype,$=f?r:g?r[n]:(r[n]||{}).prototype;for(c in f&&(e=n),e)(l=!p&&$&&void 0!==$[c])&&u(b,c)||(d=l?$[c]:e[c],b[c]=f&&"function"!=typeof $[c]?e[c]:A&&l?o(d,r):m&&$[c]==d?function(t){var n=function(n,e,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(n);case 2:return new t(n,e)}return new t(n,e,r)}return t.apply(this,arguments)};return n.prototype=t.prototype,n}(d):h&&"function"==typeof d?o(Function.call,d):d,h&&((b.virtual||(b.virtual={}))[c]=d,t&s.R&&v&&!v[c]&&a(v,c,d)))};s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,t.exports=s},7929:t=>{t.exports=function(t){try{return!!t()}catch(t){return!0}}},33938:t=>{var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},27069:t=>{var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},41818:(t,n,e)=>{var r=e(4743),i=e(83101);t.exports=e(89666)?function(t,n,e){return r.f(t,n,i(1,e))}:function(t,n,e){return t[n]=e,t}},33758:(t,n,e)=>{t.exports=!e(89666)&&!e(7929)((function(){return 7!=Object.defineProperty(e(97467)("div"),"a",{get:function(){return 7}}).a}))},50799:(t,n,e)=>{var r=e(32894);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},36727:t=>{t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},16227:t=>{t.exports=!0},88082:(t,n,e)=>{"use strict";var r=e(89666),i=e(46162),o=e(48195),a=e(86274),u=e(66530),s=e(50799),c=Object.assign;t.exports=!c||e(7929)((function(){var t={},n={},e=Symbol(),r="abcdefghijklmnopqrst";return t[e]=7,r.split("").forEach((function(t){n[t]=t})),7!=c({},t)[e]||Object.keys(c({},n)).join("")!=r}))?function(t,n){for(var e=u(t),c=arguments.length,l=1,d=o.f,p=a.f;c>l;)for(var f,g=s(arguments[l++]),h=d?i(g).concat(d(g)):i(g),A=h.length,m=0;A>m;)f=h[m++],r&&!p.call(g,f)||(e[f]=g[f]);return e}:c},4743:(t,n,e)=>{var r=e(12159),i=e(33758),o=e(33206),a=Object.defineProperty;n.f=e(89666)?Object.defineProperty:function(t,n,e){if(r(t),n=o(n,!0),r(e),i)try{return a(t,n,e)}catch(t){}if("get"in e||"set"in e)throw TypeError("Accessors not supported!");return"value"in e&&(t[n]=e.value),t}},48195:(t,n)=>{n.f=Object.getOwnPropertySymbols},12963:(t,n,e)=>{var r=e(27069),i=e(7932),o=e(57428)(!1),a=e(58989)("IE_PROTO");t.exports=function(t,n){var e,u=i(t),s=0,c=[];for(e in u)e!=a&&r(u,e)&&c.push(e);for(;n.length>s;)r(u,e=n[s++])&&(~o(c,e)||c.push(e));return c}},46162:(t,n,e)=>{var r=e(12963),i=e(73338);t.exports=Object.keys||function(t){return r(t,i)}},86274:(t,n)=>{n.f={}.propertyIsEnumerable},83101:t=>{t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},58989:(t,n,e)=>{var r=e(20250)("keys"),i=e(65730);t.exports=function(t){return r[t]||(r[t]=i(t))}},20250:(t,n,e)=>{var r=e(34579),i=e(33938),o="__core-js_shared__",a=i[o]||(i[o]={});(t.exports=function(t,n){return a[t]||(a[t]=void 0!==n?n:{})})("versions",[]).push({version:r.version,mode:e(16227)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},16531:(t,n,e)=>{var r=e(11052),i=Math.max,o=Math.min;t.exports=function(t,n){return(t=r(t))<0?i(t+n,0):o(t,n)}},11052:t=>{var n=Math.ceil,e=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?e:n)(t)}},7932:(t,n,e)=>{var r=e(50799),i=e(8333);t.exports=function(t){return r(i(t))}},78728:(t,n,e)=>{var r=e(11052),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},66530:(t,n,e)=>{var r=e(8333);t.exports=function(t){return Object(r(t))}},33206:(t,n,e)=>{var r=e(36727);t.exports=function(t,n){if(!r(t))return t;var e,i;if(n&&"function"==typeof(e=t.toString)&&!r(i=e.call(t)))return i;if("function"==typeof(e=t.valueOf)&&!r(i=e.call(t)))return i;if(!n&&"function"==typeof(e=t.toString)&&!r(i=e.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},65730:t=>{var n=0,e=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+e).toString(36))}},22960:(t,n,e)=>{var r=e(83856);r(r.S,"Number",{isNaN:function(t){return t!=t}})},72699:(t,n,e)=>{var r=e(83856);r(r.S+r.F,"Object",{assign:e(88082)})},31477:(t,n,e)=>{var r=e(83856);r(r.S+r.F*!e(89666),"Object",{defineProperty:e(4743).f})},422:(t,n,e)=>{"use strict";e.d(n,{Z:()=>y});var r=e(94015),i=e.n(r),o=e(23645),a=e.n(o),u=e(61667),s=e.n(u),c=e(62159),l=e(42745),d=e(30341),p=e(26157),f=e(42562),g=e(33554),h=a()(i()),A=s()(c.Z),m=s()(l.Z),b=s()(d.Z),v=s()(p.Z),$=s()(f.Z),C=s()(g.Z);h.push([t.id,'/*! jQuery UI - v1.12.1 - 2016-09-14\n* http://jqueryui.com\n* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css\n* To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden {\n\tdisplay: none;\n}\n.ui-helper-hidden-accessible {\n\tborder: 0;\n\tclip: rect(0 0 0 0);\n\theight: 1px;\n\tmargin: -1px;\n\toverflow: hidden;\n\tpadding: 0;\n\tposition: absolute;\n\twidth: 1px;\n}\n.ui-helper-reset {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\toutline: 0;\n\tline-height: 1.3;\n\ttext-decoration: none;\n\tfont-size: 100%;\n\tlist-style: none;\n}\n.ui-helper-clearfix:before,\n.ui-helper-clearfix:after {\n\tcontent: "";\n\tdisplay: table;\n\tborder-collapse: collapse;\n}\n.ui-helper-clearfix:after {\n\tclear: both;\n}\n.ui-helper-zfix {\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tleft: 0;\n\tposition: absolute;\n\topacity: 0;\n\tfilter:Alpha(Opacity=0); /* support: IE8 */\n}\n\n.ui-front {\n\tz-index: 100;\n}\n\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled {\n\tcursor: default !important;\n\tpointer-events: none;\n}\n\n\n/* Icons\n----------------------------------*/\n.ui-icon {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n\tmargin-top: -.25em;\n\tposition: relative;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n}\n\n.ui-widget-icon-block {\n\tleft: 50%;\n\tmargin-left: -8px;\n\tdisplay: block;\n}\n\n/* Misc visuals\n----------------------------------*/\n\n/* Overlays */\n.ui-widget-overlay {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n.ui-accordion .ui-accordion-header {\n\tdisplay: block;\n\tcursor: pointer;\n\tposition: relative;\n\tmargin: 2px 0 0 0;\n\tpadding: .5em .5em .5em .7em;\n\tfont-size: 100%;\n}\n.ui-accordion .ui-accordion-content {\n\tpadding: 1em 2.2em;\n\tborder-top: 0;\n\toverflow: auto;\n}\n.ui-autocomplete {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tcursor: default;\n}\n.ui-menu {\n\tlist-style: none;\n\tpadding: 0;\n\tmargin: 0;\n\tdisplay: block;\n\toutline: 0;\n}\n.ui-menu .ui-menu {\n\tposition: absolute;\n}\n.ui-menu .ui-menu-item {\n\tmargin: 0;\n\tcursor: pointer;\n\t/* support: IE10, see #8844 */\n\tlist-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");\n}\n.ui-menu .ui-menu-item-wrapper {\n\tposition: relative;\n\tpadding: 3px 1em 3px .4em;\n}\n.ui-menu .ui-menu-divider {\n\tmargin: 5px 0;\n\theight: 0;\n\tfont-size: 0;\n\tline-height: 0;\n\tborder-width: 1px 0 0 0;\n}\n.ui-menu .ui-state-focus,\n.ui-menu .ui-state-active {\n\tmargin: -1px;\n}\n\n/* icon support */\n.ui-menu-icons {\n\tposition: relative;\n}\n.ui-menu-icons .ui-menu-item-wrapper {\n\tpadding-left: 2em;\n}\n\n/* left-aligned */\n.ui-menu .ui-icon {\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: .2em;\n\tmargin: auto 0;\n}\n\n/* right-aligned */\n.ui-menu .ui-menu-icon {\n\tleft: auto;\n\tright: 0;\n}\n.ui-button {\n\tpadding: .4em 1em;\n\tdisplay: inline-block;\n\tposition: relative;\n\tline-height: normal;\n\tmargin-right: .1em;\n\tcursor: pointer;\n\tvertical-align: middle;\n\ttext-align: center;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\n\t/* Support: IE <= 11 */\n\toverflow: visible;\n}\n\n.ui-button,\n.ui-button:link,\n.ui-button:visited,\n.ui-button:hover,\n.ui-button:active {\n\ttext-decoration: none;\n}\n\n/* to make room for the icon, a width needs to be set here */\n.ui-button-icon-only {\n\twidth: 2em;\n\tbox-sizing: border-box;\n\ttext-indent: -9999px;\n\twhite-space: nowrap;\n}\n\n/* no icon support for input elements */\ninput.ui-button.ui-button-icon-only {\n\ttext-indent: 0;\n}\n\n/* button icon element(s) */\n.ui-button-icon-only .ui-icon {\n\tposition: absolute;\n\ttop: 50%;\n\tleft: 50%;\n\tmargin-top: -8px;\n\tmargin-left: -8px;\n}\n\n.ui-button.ui-icon-notext .ui-icon {\n\tpadding: 0;\n\twidth: 2.1em;\n\theight: 2.1em;\n\ttext-indent: -9999px;\n\twhite-space: nowrap;\n\n}\n\ninput.ui-button.ui-icon-notext .ui-icon {\n\twidth: auto;\n\theight: auto;\n\ttext-indent: 0;\n\twhite-space: normal;\n\tpadding: .4em 1em;\n}\n\n/* workarounds */\n/* Support: Firefox 5 - 40 */\ninput.ui-button::-moz-focus-inner,\nbutton.ui-button::-moz-focus-inner {\n\tborder: 0;\n\tpadding: 0;\n}\n.ui-controlgroup {\n\tvertical-align: middle;\n\tdisplay: inline-block;\n}\n.ui-controlgroup > .ui-controlgroup-item {\n\tfloat: left;\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n.ui-controlgroup > .ui-controlgroup-item:focus,\n.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {\n\tz-index: 9999;\n}\n.ui-controlgroup-vertical > .ui-controlgroup-item {\n\tdisplay: block;\n\tfloat: none;\n\twidth: 100%;\n\tmargin-top: 0;\n\tmargin-bottom: 0;\n\ttext-align: left;\n}\n.ui-controlgroup-vertical .ui-controlgroup-item {\n\tbox-sizing: border-box;\n}\n.ui-controlgroup .ui-controlgroup-label {\n\tpadding: .4em 1em;\n}\n.ui-controlgroup .ui-controlgroup-label span {\n\tfont-size: 80%;\n}\n.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {\n\tborder-left: none;\n}\n.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {\n\tborder-top: none;\n}\n.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {\n\tborder-right: none;\n}\n.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {\n\tborder-bottom: none;\n}\n\n/* Spinner specific style fixes */\n.ui-controlgroup-vertical .ui-spinner-input {\n\n\t/* Support: IE8 only, Android < 4.4 only */\n\twidth: 75%;\n\twidth: calc( 100% - 2.4em );\n}\n.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {\n\tborder-top-style: solid;\n}\n\n.ui-checkboxradio-label .ui-icon-background {\n\tbox-shadow: inset 1px 1px 1px #ccc;\n\tborder-radius: .12em;\n\tborder: none;\n}\n.ui-checkboxradio-radio-label .ui-icon-background {\n\twidth: 16px;\n\theight: 16px;\n\tborder-radius: 1em;\n\toverflow: visible;\n\tborder: none;\n}\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {\n\tbackground-image: none;\n\twidth: 8px;\n\theight: 8px;\n\tborder-width: 4px;\n\tborder-style: solid;\n}\n.ui-checkboxradio-disabled {\n\tpointer-events: none;\n}\n.ui-datepicker {\n\twidth: 17em;\n\tpadding: .2em .2em 0;\n\tdisplay: none;\n}\n.ui-datepicker .ui-datepicker-header {\n\tposition: relative;\n\tpadding: .2em 0;\n}\n.ui-datepicker .ui-datepicker-prev,\n.ui-datepicker .ui-datepicker-next {\n\tposition: absolute;\n\ttop: 2px;\n\twidth: 1.8em;\n\theight: 1.8em;\n}\n.ui-datepicker .ui-datepicker-prev-hover,\n.ui-datepicker .ui-datepicker-next-hover {\n\ttop: 1px;\n}\n.ui-datepicker .ui-datepicker-prev {\n\tleft: 2px;\n}\n.ui-datepicker .ui-datepicker-next {\n\tright: 2px;\n}\n.ui-datepicker .ui-datepicker-prev-hover {\n\tleft: 1px;\n}\n.ui-datepicker .ui-datepicker-next-hover {\n\tright: 1px;\n}\n.ui-datepicker .ui-datepicker-prev span,\n.ui-datepicker .ui-datepicker-next span {\n\tdisplay: block;\n\tposition: absolute;\n\tleft: 50%;\n\tmargin-left: -8px;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-datepicker .ui-datepicker-title {\n\tmargin: 0 2.3em;\n\tline-height: 1.8em;\n\ttext-align: center;\n}\n.ui-datepicker .ui-datepicker-title select {\n\tfont-size: 1em;\n\tmargin: 1px 0;\n}\n.ui-datepicker select.ui-datepicker-month,\n.ui-datepicker select.ui-datepicker-year {\n\twidth: 45%;\n}\n.ui-datepicker table {\n\twidth: 100%;\n\tfont-size: .9em;\n\tborder-collapse: collapse;\n\tmargin: 0 0 .4em;\n}\n.ui-datepicker th {\n\tpadding: .7em .3em;\n\ttext-align: center;\n\tfont-weight: bold;\n\tborder: 0;\n}\n.ui-datepicker td {\n\tborder: 0;\n\tpadding: 1px;\n}\n.ui-datepicker td span,\n.ui-datepicker td a {\n\tdisplay: block;\n\tpadding: .2em;\n\ttext-align: right;\n\ttext-decoration: none;\n}\n.ui-datepicker .ui-datepicker-buttonpane {\n\tbackground-image: none;\n\tmargin: .7em 0 0 0;\n\tpadding: 0 .2em;\n\tborder-left: 0;\n\tborder-right: 0;\n\tborder-bottom: 0;\n}\n.ui-datepicker .ui-datepicker-buttonpane button {\n\tfloat: right;\n\tmargin: .5em .2em .4em;\n\tcursor: pointer;\n\tpadding: .2em .6em .3em .6em;\n\twidth: auto;\n\toverflow: visible;\n}\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {\n\tfloat: left;\n}\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi {\n\twidth: auto;\n}\n.ui-datepicker-multi .ui-datepicker-group {\n\tfloat: left;\n}\n.ui-datepicker-multi .ui-datepicker-group table {\n\twidth: 95%;\n\tmargin: 0 auto .4em;\n}\n.ui-datepicker-multi-2 .ui-datepicker-group {\n\twidth: 50%;\n}\n.ui-datepicker-multi-3 .ui-datepicker-group {\n\twidth: 33.3%;\n}\n.ui-datepicker-multi-4 .ui-datepicker-group {\n\twidth: 25%;\n}\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-left-width: 0;\n}\n.ui-datepicker-multi .ui-datepicker-buttonpane {\n\tclear: left;\n}\n.ui-datepicker-row-break {\n\tclear: both;\n\twidth: 100%;\n\tfont-size: 0;\n}\n\n/* RTL support */\n.ui-datepicker-rtl {\n\tdirection: rtl;\n}\n.ui-datepicker-rtl .ui-datepicker-prev {\n\tright: 2px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next {\n\tleft: 2px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-prev:hover {\n\tright: 1px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next:hover {\n\tleft: 1px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane {\n\tclear: right;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button {\n\tfloat: left;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,\n.ui-datepicker-rtl .ui-datepicker-group {\n\tfloat: right;\n}\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-right-width: 0;\n\tborder-left-width: 1px;\n}\n\n/* Icons */\n.ui-datepicker .ui-icon {\n\tdisplay: block;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n\tleft: .5em;\n\ttop: .3em;\n}\n.ui-dialog {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tpadding: .2em;\n\toutline: 0;\n}\n.ui-dialog .ui-dialog-titlebar {\n\tpadding: .4em 1em;\n\tposition: relative;\n}\n.ui-dialog .ui-dialog-title {\n\tfloat: left;\n\tmargin: .1em 0;\n\twhite-space: nowrap;\n\twidth: 90%;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-dialog .ui-dialog-titlebar-close {\n\tposition: absolute;\n\tright: .3em;\n\ttop: 50%;\n\twidth: 20px;\n\tmargin: -10px 0 0 0;\n\tpadding: 1px;\n\theight: 20px;\n}\n.ui-dialog .ui-dialog-content {\n\tposition: relative;\n\tborder: 0;\n\tpadding: .5em 1em;\n\tbackground: none;\n\toverflow: auto;\n}\n.ui-dialog .ui-dialog-buttonpane {\n\ttext-align: left;\n\tborder-width: 1px 0 0 0;\n\tbackground-image: none;\n\tmargin-top: .5em;\n\tpadding: .3em 1em .5em .4em;\n}\n.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {\n\tfloat: right;\n}\n.ui-dialog .ui-dialog-buttonpane button {\n\tmargin: .5em .4em .5em 0;\n\tcursor: pointer;\n}\n.ui-dialog .ui-resizable-n {\n\theight: 2px;\n\ttop: 0;\n}\n.ui-dialog .ui-resizable-e {\n\twidth: 2px;\n\tright: 0;\n}\n.ui-dialog .ui-resizable-s {\n\theight: 2px;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-w {\n\twidth: 2px;\n\tleft: 0;\n}\n.ui-dialog .ui-resizable-se,\n.ui-dialog .ui-resizable-sw,\n.ui-dialog .ui-resizable-ne,\n.ui-dialog .ui-resizable-nw {\n\twidth: 7px;\n\theight: 7px;\n}\n.ui-dialog .ui-resizable-se {\n\tright: 0;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-sw {\n\tleft: 0;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-ne {\n\tright: 0;\n\ttop: 0;\n}\n.ui-dialog .ui-resizable-nw {\n\tleft: 0;\n\ttop: 0;\n}\n.ui-draggable .ui-dialog-titlebar {\n\tcursor: move;\n}\n.ui-draggable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-resizable {\n\tposition: relative;\n}\n.ui-resizable-handle {\n\tposition: absolute;\n\tfont-size: 0.1px;\n\tdisplay: block;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-resizable-disabled .ui-resizable-handle,\n.ui-resizable-autohide .ui-resizable-handle {\n\tdisplay: none;\n}\n.ui-resizable-n {\n\tcursor: n-resize;\n\theight: 7px;\n\twidth: 100%;\n\ttop: -5px;\n\tleft: 0;\n}\n.ui-resizable-s {\n\tcursor: s-resize;\n\theight: 7px;\n\twidth: 100%;\n\tbottom: -5px;\n\tleft: 0;\n}\n.ui-resizable-e {\n\tcursor: e-resize;\n\twidth: 7px;\n\tright: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-w {\n\tcursor: w-resize;\n\twidth: 7px;\n\tleft: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-se {\n\tcursor: se-resize;\n\twidth: 12px;\n\theight: 12px;\n\tright: 1px;\n\tbottom: 1px;\n}\n.ui-resizable-sw {\n\tcursor: sw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\tbottom: -5px;\n}\n.ui-resizable-nw {\n\tcursor: nw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\ttop: -5px;\n}\n.ui-resizable-ne {\n\tcursor: ne-resize;\n\twidth: 9px;\n\theight: 9px;\n\tright: -5px;\n\ttop: -5px;\n}\n.ui-progressbar {\n\theight: 2em;\n\ttext-align: left;\n\toverflow: hidden;\n}\n.ui-progressbar .ui-progressbar-value {\n\tmargin: -1px;\n\theight: 100%;\n}\n.ui-progressbar .ui-progressbar-overlay {\n\tbackground: url("data:image/gif;base64,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");\n\theight: 100%;\n\tfilter: alpha(opacity=25); /* support: IE8 */\n\topacity: 0.25;\n}\n.ui-progressbar-indeterminate .ui-progressbar-value {\n\tbackground-image: none;\n}\n.ui-selectable {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-selectable-helper {\n\tposition: absolute;\n\tz-index: 100;\n\tborder: 1px dotted black;\n}\n.ui-selectmenu-menu {\n\tpadding: 0;\n\tmargin: 0;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tdisplay: none;\n}\n.ui-selectmenu-menu .ui-menu {\n\toverflow: auto;\n\toverflow-x: hidden;\n\tpadding-bottom: 1px;\n}\n.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {\n\tfont-size: 1em;\n\tfont-weight: bold;\n\tline-height: 1.5;\n\tpadding: 2px 0.4em;\n\tmargin: 0.5em 0 0 0;\n\theight: auto;\n\tborder: 0;\n}\n.ui-selectmenu-open {\n\tdisplay: block;\n}\n.ui-selectmenu-text {\n\tdisplay: block;\n\tmargin-right: 20px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-selectmenu-button.ui-button {\n\ttext-align: left;\n\twhite-space: nowrap;\n\twidth: 14em;\n}\n.ui-selectmenu-icon.ui-icon {\n\tfloat: right;\n\tmargin-top: 0;\n}\n.ui-slider {\n\tposition: relative;\n\ttext-align: left;\n}\n.ui-slider .ui-slider-handle {\n\tposition: absolute;\n\tz-index: 2;\n\twidth: 1.2em;\n\theight: 1.2em;\n\tcursor: default;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-slider .ui-slider-range {\n\tposition: absolute;\n\tz-index: 1;\n\tfont-size: .7em;\n\tdisplay: block;\n\tborder: 0;\n\tbackground-position: 0 0;\n}\n\n/* support: IE8 - See #6727 */\n.ui-slider.ui-state-disabled .ui-slider-handle,\n.ui-slider.ui-state-disabled .ui-slider-range {\n\tfilter: inherit;\n}\n\n.ui-slider-horizontal {\n\theight: .8em;\n}\n.ui-slider-horizontal .ui-slider-handle {\n\ttop: -.3em;\n\tmargin-left: -.6em;\n}\n.ui-slider-horizontal .ui-slider-range {\n\ttop: 0;\n\theight: 100%;\n}\n.ui-slider-horizontal .ui-slider-range-min {\n\tleft: 0;\n}\n.ui-slider-horizontal .ui-slider-range-max {\n\tright: 0;\n}\n\n.ui-slider-vertical {\n\twidth: .8em;\n\theight: 100px;\n}\n.ui-slider-vertical .ui-slider-handle {\n\tleft: -.3em;\n\tmargin-left: 0;\n\tmargin-bottom: -.6em;\n}\n.ui-slider-vertical .ui-slider-range {\n\tleft: 0;\n\twidth: 100%;\n}\n.ui-slider-vertical .ui-slider-range-min {\n\tbottom: 0;\n}\n.ui-slider-vertical .ui-slider-range-max {\n\ttop: 0;\n}\n.ui-sortable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-spinner {\n\tposition: relative;\n\tdisplay: inline-block;\n\toverflow: hidden;\n\tpadding: 0;\n\tvertical-align: middle;\n}\n.ui-spinner-input {\n\tborder: none;\n\tbackground: none;\n\tcolor: inherit;\n\tpadding: .222em 0;\n\tmargin: .2em 0;\n\tvertical-align: middle;\n\tmargin-left: .4em;\n\tmargin-right: 2em;\n}\n.ui-spinner-button {\n\twidth: 1.6em;\n\theight: 50%;\n\tfont-size: .5em;\n\tpadding: 0;\n\tmargin: 0;\n\ttext-align: center;\n\tposition: absolute;\n\tcursor: default;\n\tdisplay: block;\n\toverflow: hidden;\n\tright: 0;\n}\n/* more specificity required here to override default borders */\n.ui-spinner a.ui-spinner-button {\n\tborder-top-style: none;\n\tborder-bottom-style: none;\n\tborder-right-style: none;\n}\n.ui-spinner-up {\n\ttop: 0;\n}\n.ui-spinner-down {\n\tbottom: 0;\n}\n.ui-tabs {\n\tposition: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */\n\tpadding: .2em;\n}\n.ui-tabs .ui-tabs-nav {\n\tmargin: 0;\n\tpadding: .2em .2em 0;\n}\n.ui-tabs .ui-tabs-nav li {\n\tlist-style: none;\n\tfloat: left;\n\tposition: relative;\n\ttop: 0;\n\tmargin: 1px .2em 0 0;\n\tborder-bottom-width: 0;\n\tpadding: 0;\n\twhite-space: nowrap;\n}\n.ui-tabs .ui-tabs-nav .ui-tabs-anchor {\n\tfloat: left;\n\tpadding: .5em 1em;\n\ttext-decoration: none;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active {\n\tmargin-bottom: -1px;\n\tpadding-bottom: 1px;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {\n\tcursor: text;\n}\n.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {\n\tcursor: pointer;\n}\n.ui-tabs .ui-tabs-panel {\n\tdisplay: block;\n\tborder-width: 0;\n\tpadding: 1em 1.4em;\n\tbackground: none;\n}\n.ui-tooltip {\n\tpadding: 8px;\n\tposition: absolute;\n\tz-index: 9999;\n\tmax-width: 300px;\n}\nbody .ui-tooltip {\n\tborder-width: 2px;\n}\n\n/* Component containers\n----------------------------------*/\n.ui-widget {\n\tfont-family: Arial,Helvetica,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget .ui-widget {\n\tfont-size: 1em;\n}\n.ui-widget input,\n.ui-widget select,\n.ui-widget textarea,\n.ui-widget button {\n\tfont-family: Arial,Helvetica,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget.ui-widget-content {\n\tborder: 1px solid #c5c5c5;\n}\n.ui-widget-content {\n\tborder: 1px solid #dddddd;\n\tbackground: #ffffff;\n\tcolor: #333333;\n}\n.ui-widget-content a {\n\tcolor: #333333;\n}\n.ui-widget-header {\n\tborder: 1px solid #dddddd;\n\tbackground: #e9e9e9;\n\tcolor: #333333;\n\tfont-weight: bold;\n}\n.ui-widget-header a {\n\tcolor: #333333;\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default,\n.ui-button,\n\n/* We use html here because we need a greater specificity to make sure disabled\nworks properly when clicked or hovered */\nhtml .ui-button.ui-state-disabled:hover,\nhtml .ui-button.ui-state-disabled:active {\n\tborder: 1px solid #c5c5c5;\n\tbackground: #f6f6f6;\n\tfont-weight: normal;\n\tcolor: #454545;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited,\na.ui-button,\na:link.ui-button,\na:visited.ui-button,\n.ui-button {\n\tcolor: #454545;\n\ttext-decoration: none;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus,\n.ui-button:hover,\n.ui-button:focus {\n\tborder: 1px solid #cccccc;\n\tbackground: #ededed;\n\tfont-weight: normal;\n\tcolor: #2b2b2b;\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited,\n.ui-state-focus a,\n.ui-state-focus a:hover,\n.ui-state-focus a:link,\n.ui-state-focus a:visited,\na.ui-button:hover,\na.ui-button:focus {\n\tcolor: #2b2b2b;\n\ttext-decoration: none;\n}\n\n.ui-visual-focus {\n\tbox-shadow: 0 0 3px 1px rgb(94, 158, 214);\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active,\na.ui-button:active,\n.ui-button:active,\n.ui-button.ui-state-active:hover {\n\tborder: 1px solid #003eff;\n\tbackground: #007fff;\n\tfont-weight: normal;\n\tcolor: #ffffff;\n}\n.ui-icon-background,\n.ui-state-active .ui-icon-background {\n\tborder: #003eff;\n\tbackground-color: #ffffff;\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: #ffffff;\n\ttext-decoration: none;\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid #dad55e;\n\tbackground: #fffa90;\n\tcolor: #777620;\n}\n.ui-state-checked {\n\tborder: 1px solid #dad55e;\n\tbackground: #fffa90;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: #777620;\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: 1px solid #f1a899;\n\tbackground: #fddfdf;\n\tcolor: #5f3f3f;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #5f3f3f;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #5f3f3f;\n}\n.ui-priority-primary,\n.ui-widget-content .ui-priority-primary,\n.ui-widget-header .ui-priority-primary {\n\tfont-weight: bold;\n}\n.ui-priority-secondary,\n.ui-widget-content .ui-priority-secondary,\n.ui-widget-header .ui-priority-secondary {\n\topacity: .7;\n\tfilter:Alpha(Opacity=70); /* support: IE8 */\n\tfont-weight: normal;\n}\n.ui-state-disabled,\n.ui-widget-content .ui-state-disabled,\n.ui-widget-header .ui-state-disabled {\n\topacity: .35;\n\tfilter:Alpha(Opacity=35); /* support: IE8 */\n\tbackground-image: none;\n}\n.ui-state-disabled .ui-icon {\n\tfilter:Alpha(Opacity=35); /* support: IE8 - See #6059 */\n}\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon {\n\twidth: 16px;\n\theight: 16px;\n}\n.ui-icon,\n.ui-widget-content .ui-icon {\n\tbackground-image: url('+A+");\n}\n.ui-widget-header .ui-icon {\n\tbackground-image: url("+A+");\n}\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon,\n.ui-button:hover .ui-icon,\n.ui-button:focus .ui-icon {\n\tbackground-image: url("+m+");\n}\n.ui-state-active .ui-icon,\n.ui-button:active .ui-icon {\n\tbackground-image: url("+b+");\n}\n.ui-state-highlight .ui-icon,\n.ui-button .ui-state-highlight.ui-icon {\n\tbackground-image: url("+v+");\n}\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n\tbackground-image: url("+$+");\n}\n.ui-button .ui-icon {\n\tbackground-image: url("+C+");\n}\n\n/* positioning */\n.ui-icon-blank { background-position: 16px 16px; }\n.ui-icon-caret-1-n { background-position: 0 0; }\n.ui-icon-caret-1-ne { background-position: -16px 0; }\n.ui-icon-caret-1-e { background-position: -32px 0; }\n.ui-icon-caret-1-se { background-position: -48px 0; }\n.ui-icon-caret-1-s { background-position: -65px 0; }\n.ui-icon-caret-1-sw { background-position: -80px 0; }\n.ui-icon-caret-1-w { background-position: -96px 0; }\n.ui-icon-caret-1-nw { background-position: -112px 0; }\n.ui-icon-caret-2-n-s { background-position: -128px 0; }\n.ui-icon-caret-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -65px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -65px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 1px -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-on { background-position: -96px -144px; }\n.ui-icon-radio-off { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-start { background-position: -80px -160px; }\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-left,\n.ui-corner-tl {\n\tborder-top-left-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-right,\n.ui-corner-tr {\n\tborder-top-right-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-left,\n.ui-corner-bl {\n\tborder-bottom-left-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-right,\n.ui-corner-br {\n\tborder-bottom-right-radius: 3px;\n}\n\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #aaaaaa;\n\topacity: .003;\n\tfilter: Alpha(Opacity=.3); /* support: IE8 */\n}\n.ui-widget-shadow {\n\t-webkit-box-shadow: 0px 0px 5px #666666;\n\tbox-shadow: 0px 0px 5px #666666;\n}\n","",{version:3,sources:["webpack://./node_modules/jquery-ui-dist/jquery-ui.css"],names:[],mappings:"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,YAAY;AACb;AACA;CACC,WAAW;CACX,YAAY;CACZ,kBAAkB;CAClB,iBAAiB;CACjB,YAAY;AACb;AACA;;CAEC,sBAAsB;CACtB,UAAU;CACV,WAAW;CACX,iBAAiB;CACjB,mBAAmB;AACpB;AACA;CACC,oBAAoB;AACrB;AACA;CACC,WAAW;CACX,oBAAoB;CACpB,aAAa;AACd;AACA;CACC,kBAAkB;CAClB,eAAe;AAChB;AACA;;CAEC,kBAAkB;CAClB,QAAQ;CACR,YAAY;CACZ,aAAa;AACd;AACA;;CAEC,QAAQ;AACT;AACA;CACC,SAAS;AACV;AACA;CACC,UAAU;AACX;AACA;CACC,SAAS;AACV;AACA;CACC,UAAU;AACX;AACA;;CAEC,cAAc;CACd,kBAAkB;CAClB,SAAS;CACT,iBAAiB;CACjB,QAAQ;CACR,gBAAgB;AACjB;AACA;CACC,eAAe;CACf,kBAAkB;CAClB,kBAAkB;AACnB;AACA;CACC,cAAc;CACd,aAAa;AACd;AACA;;CAEC,UAAU;AACX;AACA;CACC,WAAW;CACX,eAAe;CACf,yBAAyB;CACzB,gBAAgB;AACjB;AACA;CACC,kBAAkB;CAClB,kBAAkB;CAClB,iBAAiB;CACjB,SAAS;AACV;AACA;CACC,SAAS;CACT,YAAY;AACb;AACA;;CAEC,cAAc;CACd,aAAa;CACb,iBAAiB;CACjB,qBAAqB;AACtB;AACA;CACC,sBAAsB;CACtB,kBAAkB;CAClB,eAAe;CACf,cAAc;CACd,eAAe;CACf,gBAAgB;AACjB;AACA;CACC,YAAY;CACZ,sBAAsB;CACtB,eAAe;CACf,4BAA4B;CAC5B,WAAW;CACX,iBAAiB;AAClB;AACA;CACC,WAAW;AACZ;;AAEA,4BAA4B;AAC5B;CACC,WAAW;AACZ;AACA;CACC,WAAW;AACZ;AACA;CACC,UAAU;CACV,mBAAmB;AACpB;AACA;CACC,UAAU;AACX;AACA;CACC,YAAY;AACb;AACA;CACC,UAAU;AACX;AACA;;CAEC,oBAAoB;AACrB;AACA;CACC,WAAW;AACZ;AACA;CACC,WAAW;CACX,WAAW;CACX,YAAY;AACb;;AAEA,gBAAgB;AAChB;CACC,cAAc;AACf;AACA;CACC,UAAU;CACV,UAAU;AACX;AACA;CACC,SAAS;CACT,WAAW;AACZ;AACA;CACC,UAAU;CACV,UAAU;AACX;AACA;CACC,SAAS;CACT,WAAW;AACZ;AACA;CACC,YAAY;AACb;AACA;CACC,WAAW;AACZ;AACA;;CAEC,YAAY;AACb;AACA;;CAEC,qBAAqB;CACrB,sBAAsB;AACvB;;AAEA,UAAU;AACV;CACC,cAAc;CACd,qBAAqB;CACrB,gBAAgB;CAChB,4BAA4B;CAC5B,UAAU;CACV,SAAS;AACV;AACA;CACC,kBAAkB;CAClB,MAAM;CACN,OAAO;CACP,aAAa;CACb,UAAU;AACX;AACA;CACC,iBAAiB;CACjB,kBAAkB;AACnB;AACA;CACC,WAAW;CACX,cAAc;CACd,mBAAmB;CACnB,UAAU;CACV,gBAAgB;CAChB,uBAAuB;AACxB;AACA;CACC,kBAAkB;CAClB,WAAW;CACX,QAAQ;CACR,WAAW;CACX,mBAAmB;CACnB,YAAY;CACZ,YAAY;AACb;AACA;CACC,kBAAkB;CAClB,SAAS;CACT,iBAAiB;CACjB,gBAAgB;CAChB,cAAc;AACf;AACA;CACC,gBAAgB;CAChB,uBAAuB;CACvB,sBAAsB;CACtB,gBAAgB;CAChB,2BAA2B;AAC5B;AACA;CACC,YAAY;AACb;AACA;CACC,wBAAwB;CACxB,eAAe;AAChB;AACA;CACC,WAAW;CACX,MAAM;AACP;AACA;CACC,UAAU;CACV,QAAQ;AACT;AACA;CACC,WAAW;CACX,SAAS;AACV;AACA;CACC,UAAU;CACV,OAAO;AACR;AACA;;;;CAIC,UAAU;CACV,WAAW;AACZ;AACA;CACC,QAAQ;CACR,SAAS;AACV;AACA;CACC,OAAO;CACP,SAAS;AACV;AACA;CACC,QAAQ;CACR,MAAM;AACP;AACA;CACC,OAAO;CACP,MAAM;AACP;AACA;CACC,YAAY;AACb;AACA;CACC,sBAAsB;CACtB,kBAAkB;AACnB;AACA;CACC,kBAAkB;AACnB;AACA;CACC,kBAAkB;CAClB,gBAAgB;CAChB,cAAc;CACd,sBAAsB;CACtB,kBAAkB;AACnB;AACA;;CAEC,aAAa;AACd;AACA;CACC,gBAAgB;CAChB,WAAW;CACX,WAAW;CACX,SAAS;CACT,OAAO;AACR;AACA;CACC,gBAAgB;CAChB,WAAW;CACX,WAAW;CACX,YAAY;CACZ,OAAO;AACR;AACA;CACC,gBAAgB;CAChB,UAAU;CACV,WAAW;CACX,MAAM;CACN,YAAY;AACb;AACA;CACC,gBAAgB;CAChB,UAAU;CACV,UAAU;CACV,MAAM;CACN,YAAY;AACb;AACA;CACC,iBAAiB;CACjB,WAAW;CACX,YAAY;CACZ,UAAU;CACV,WAAW;AACZ;AACA;CACC,iBAAiB;CACjB,UAAU;CACV,WAAW;CACX,UAAU;CACV,YAAY;AACb;AACA;CACC,iBAAiB;CACjB,UAAU;CACV,WAAW;CACX,UAAU;CACV,SAAS;AACV;AACA;CACC,iBAAiB;CACjB,UAAU;CACV,WAAW;CACX,WAAW;CACX,SAAS;AACV;AACA;CACC,WAAW;CACX,gBAAgB;CAChB,gBAAgB;AACjB;AACA;CACC,YAAY;CACZ,YAAY;AACb;AACA;CACC,yzEAAyzE;CACzzE,YAAY;CACZ,yBAAyB,EAAE,iBAAiB;CAC5C,aAAa;AACd;AACA;CACC,sBAAsB;AACvB;AACA;CACC,sBAAsB;CACtB,kBAAkB;AACnB;AACA;CACC,kBAAkB;CAClB,YAAY;CACZ,wBAAwB;AACzB;AACA;CACC,UAAU;CACV,SAAS;CACT,kBAAkB;CAClB,MAAM;CACN,OAAO;CACP,aAAa;AACd;AACA;CACC,cAAc;CACd,kBAAkB;CAClB,mBAAmB;AACpB;AACA;CACC,cAAc;CACd,iBAAiB;CACjB,gBAAgB;CAChB,kBAAkB;CAClB,mBAAmB;CACnB,YAAY;CACZ,SAAS;AACV;AACA;CACC,cAAc;AACf;AACA;CACC,cAAc;CACd,kBAAkB;CAClB,gBAAgB;CAChB,uBAAuB;AACxB;AACA;CACC,gBAAgB;CAChB,mBAAmB;CACnB,WAAW;AACZ;AACA;CACC,YAAY;CACZ,aAAa;AACd;AACA;CACC,kBAAkB;CAClB,gBAAgB;AACjB;AACA;CACC,kBAAkB;CAClB,UAAU;CACV,YAAY;CACZ,aAAa;CACb,eAAe;CACf,sBAAsB;CACtB,kBAAkB;AACnB;AACA;CACC,kBAAkB;CAClB,UAAU;CACV,eAAe;CACf,cAAc;CACd,SAAS;CACT,wBAAwB;AACzB;;AAEA,6BAA6B;AAC7B;;CAEC,eAAe;AAChB;;AAEA;CACC,YAAY;AACb;AACA;CACC,UAAU;CACV,kBAAkB;AACnB;AACA;CACC,MAAM;CACN,YAAY;AACb;AACA;CACC,OAAO;AACR;AACA;CACC,QAAQ;AACT;;AAEA;CACC,WAAW;CACX,aAAa;AACd;AACA;CACC,WAAW;CACX,cAAc;CACd,oBAAoB;AACrB;AACA;CACC,OAAO;CACP,WAAW;AACZ;AACA;CACC,SAAS;AACV;AACA;CACC,MAAM;AACP;AACA;CACC,sBAAsB;CACtB,kBAAkB;AACnB;AACA;CACC,kBAAkB;CAClB,qBAAqB;CACrB,gBAAgB;CAChB,UAAU;CACV,sBAAsB;AACvB;AACA;CACC,YAAY;CACZ,gBAAgB;CAChB,cAAc;CACd,iBAAiB;CACjB,cAAc;CACd,sBAAsB;CACtB,iBAAiB;CACjB,iBAAiB;AAClB;AACA;CACC,YAAY;CACZ,WAAW;CACX,eAAe;CACf,UAAU;CACV,SAAS;CACT,kBAAkB;CAClB,kBAAkB;CAClB,eAAe;CACf,cAAc;CACd,gBAAgB;CAChB,QAAQ;AACT;AACA,+DAA+D;AAC/D;CACC,sBAAsB;CACtB,yBAAyB;CACzB,wBAAwB;AACzB;AACA;CACC,MAAM;AACP;AACA;CACC,SAAS;AACV;AACA;CACC,kBAAkB,CAAC,uIAAuI;CAC1J,aAAa;AACd;AACA;CACC,SAAS;CACT,oBAAoB;AACrB;AACA;CACC,gBAAgB;CAChB,WAAW;CACX,kBAAkB;CAClB,MAAM;CACN,oBAAoB;CACpB,sBAAsB;CACtB,UAAU;CACV,mBAAmB;AACpB;AACA;CACC,WAAW;CACX,iBAAiB;CACjB,qBAAqB;AACtB;AACA;CACC,mBAAmB;CACnB,mBAAmB;AACpB;AACA;;;CAGC,YAAY;AACb;AAC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",sourcesContent:['/*! jQuery UI - v1.12.1 - 2016-09-14\n* http://jqueryui.com\n* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css\n* To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden {\n\tdisplay: none;\n}\n.ui-helper-hidden-accessible {\n\tborder: 0;\n\tclip: rect(0 0 0 0);\n\theight: 1px;\n\tmargin: -1px;\n\toverflow: hidden;\n\tpadding: 0;\n\tposition: absolute;\n\twidth: 1px;\n}\n.ui-helper-reset {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\toutline: 0;\n\tline-height: 1.3;\n\ttext-decoration: none;\n\tfont-size: 100%;\n\tlist-style: none;\n}\n.ui-helper-clearfix:before,\n.ui-helper-clearfix:after {\n\tcontent: "";\n\tdisplay: table;\n\tborder-collapse: collapse;\n}\n.ui-helper-clearfix:after {\n\tclear: both;\n}\n.ui-helper-zfix {\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tleft: 0;\n\tposition: absolute;\n\topacity: 0;\n\tfilter:Alpha(Opacity=0); /* support: IE8 */\n}\n\n.ui-front {\n\tz-index: 100;\n}\n\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled {\n\tcursor: default !important;\n\tpointer-events: none;\n}\n\n\n/* Icons\n----------------------------------*/\n.ui-icon {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n\tmargin-top: -.25em;\n\tposition: relative;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n}\n\n.ui-widget-icon-block {\n\tleft: 50%;\n\tmargin-left: -8px;\n\tdisplay: block;\n}\n\n/* Misc visuals\n----------------------------------*/\n\n/* Overlays */\n.ui-widget-overlay {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n.ui-accordion .ui-accordion-header {\n\tdisplay: block;\n\tcursor: pointer;\n\tposition: relative;\n\tmargin: 2px 0 0 0;\n\tpadding: .5em .5em .5em .7em;\n\tfont-size: 100%;\n}\n.ui-accordion .ui-accordion-content {\n\tpadding: 1em 2.2em;\n\tborder-top: 0;\n\toverflow: auto;\n}\n.ui-autocomplete {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tcursor: default;\n}\n.ui-menu {\n\tlist-style: none;\n\tpadding: 0;\n\tmargin: 0;\n\tdisplay: block;\n\toutline: 0;\n}\n.ui-menu .ui-menu {\n\tposition: absolute;\n}\n.ui-menu .ui-menu-item {\n\tmargin: 0;\n\tcursor: pointer;\n\t/* support: IE10, see #8844 */\n\tlist-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");\n}\n.ui-menu .ui-menu-item-wrapper {\n\tposition: relative;\n\tpadding: 3px 1em 3px .4em;\n}\n.ui-menu .ui-menu-divider {\n\tmargin: 5px 0;\n\theight: 0;\n\tfont-size: 0;\n\tline-height: 0;\n\tborder-width: 1px 0 0 0;\n}\n.ui-menu .ui-state-focus,\n.ui-menu .ui-state-active {\n\tmargin: -1px;\n}\n\n/* icon support */\n.ui-menu-icons {\n\tposition: relative;\n}\n.ui-menu-icons .ui-menu-item-wrapper {\n\tpadding-left: 2em;\n}\n\n/* left-aligned */\n.ui-menu .ui-icon {\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: .2em;\n\tmargin: auto 0;\n}\n\n/* right-aligned */\n.ui-menu .ui-menu-icon {\n\tleft: auto;\n\tright: 0;\n}\n.ui-button {\n\tpadding: .4em 1em;\n\tdisplay: inline-block;\n\tposition: relative;\n\tline-height: normal;\n\tmargin-right: .1em;\n\tcursor: pointer;\n\tvertical-align: middle;\n\ttext-align: center;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\n\t/* Support: IE <= 11 */\n\toverflow: visible;\n}\n\n.ui-button,\n.ui-button:link,\n.ui-button:visited,\n.ui-button:hover,\n.ui-button:active {\n\ttext-decoration: none;\n}\n\n/* to make room for the icon, a width needs to be set here */\n.ui-button-icon-only {\n\twidth: 2em;\n\tbox-sizing: border-box;\n\ttext-indent: -9999px;\n\twhite-space: nowrap;\n}\n\n/* no icon support for input elements */\ninput.ui-button.ui-button-icon-only {\n\ttext-indent: 0;\n}\n\n/* button icon element(s) */\n.ui-button-icon-only .ui-icon {\n\tposition: absolute;\n\ttop: 50%;\n\tleft: 50%;\n\tmargin-top: -8px;\n\tmargin-left: -8px;\n}\n\n.ui-button.ui-icon-notext .ui-icon {\n\tpadding: 0;\n\twidth: 2.1em;\n\theight: 2.1em;\n\ttext-indent: -9999px;\n\twhite-space: nowrap;\n\n}\n\ninput.ui-button.ui-icon-notext .ui-icon {\n\twidth: auto;\n\theight: auto;\n\ttext-indent: 0;\n\twhite-space: normal;\n\tpadding: .4em 1em;\n}\n\n/* workarounds */\n/* Support: Firefox 5 - 40 */\ninput.ui-button::-moz-focus-inner,\nbutton.ui-button::-moz-focus-inner {\n\tborder: 0;\n\tpadding: 0;\n}\n.ui-controlgroup {\n\tvertical-align: middle;\n\tdisplay: inline-block;\n}\n.ui-controlgroup > .ui-controlgroup-item {\n\tfloat: left;\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n.ui-controlgroup > .ui-controlgroup-item:focus,\n.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {\n\tz-index: 9999;\n}\n.ui-controlgroup-vertical > .ui-controlgroup-item {\n\tdisplay: block;\n\tfloat: none;\n\twidth: 100%;\n\tmargin-top: 0;\n\tmargin-bottom: 0;\n\ttext-align: left;\n}\n.ui-controlgroup-vertical .ui-controlgroup-item {\n\tbox-sizing: border-box;\n}\n.ui-controlgroup .ui-controlgroup-label {\n\tpadding: .4em 1em;\n}\n.ui-controlgroup .ui-controlgroup-label span {\n\tfont-size: 80%;\n}\n.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {\n\tborder-left: none;\n}\n.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {\n\tborder-top: none;\n}\n.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {\n\tborder-right: none;\n}\n.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {\n\tborder-bottom: none;\n}\n\n/* Spinner specific style fixes */\n.ui-controlgroup-vertical .ui-spinner-input {\n\n\t/* Support: IE8 only, Android < 4.4 only */\n\twidth: 75%;\n\twidth: calc( 100% - 2.4em );\n}\n.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {\n\tborder-top-style: solid;\n}\n\n.ui-checkboxradio-label .ui-icon-background {\n\tbox-shadow: inset 1px 1px 1px #ccc;\n\tborder-radius: .12em;\n\tborder: none;\n}\n.ui-checkboxradio-radio-label .ui-icon-background {\n\twidth: 16px;\n\theight: 16px;\n\tborder-radius: 1em;\n\toverflow: visible;\n\tborder: none;\n}\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {\n\tbackground-image: none;\n\twidth: 8px;\n\theight: 8px;\n\tborder-width: 4px;\n\tborder-style: solid;\n}\n.ui-checkboxradio-disabled {\n\tpointer-events: none;\n}\n.ui-datepicker {\n\twidth: 17em;\n\tpadding: .2em .2em 0;\n\tdisplay: none;\n}\n.ui-datepicker .ui-datepicker-header {\n\tposition: relative;\n\tpadding: .2em 0;\n}\n.ui-datepicker .ui-datepicker-prev,\n.ui-datepicker .ui-datepicker-next {\n\tposition: absolute;\n\ttop: 2px;\n\twidth: 1.8em;\n\theight: 1.8em;\n}\n.ui-datepicker .ui-datepicker-prev-hover,\n.ui-datepicker .ui-datepicker-next-hover {\n\ttop: 1px;\n}\n.ui-datepicker .ui-datepicker-prev {\n\tleft: 2px;\n}\n.ui-datepicker .ui-datepicker-next {\n\tright: 2px;\n}\n.ui-datepicker .ui-datepicker-prev-hover {\n\tleft: 1px;\n}\n.ui-datepicker .ui-datepicker-next-hover {\n\tright: 1px;\n}\n.ui-datepicker .ui-datepicker-prev span,\n.ui-datepicker .ui-datepicker-next span {\n\tdisplay: block;\n\tposition: absolute;\n\tleft: 50%;\n\tmargin-left: -8px;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-datepicker .ui-datepicker-title {\n\tmargin: 0 2.3em;\n\tline-height: 1.8em;\n\ttext-align: center;\n}\n.ui-datepicker .ui-datepicker-title select {\n\tfont-size: 1em;\n\tmargin: 1px 0;\n}\n.ui-datepicker select.ui-datepicker-month,\n.ui-datepicker select.ui-datepicker-year {\n\twidth: 45%;\n}\n.ui-datepicker table {\n\twidth: 100%;\n\tfont-size: .9em;\n\tborder-collapse: collapse;\n\tmargin: 0 0 .4em;\n}\n.ui-datepicker th {\n\tpadding: .7em .3em;\n\ttext-align: center;\n\tfont-weight: bold;\n\tborder: 0;\n}\n.ui-datepicker td {\n\tborder: 0;\n\tpadding: 1px;\n}\n.ui-datepicker td span,\n.ui-datepicker td a {\n\tdisplay: block;\n\tpadding: .2em;\n\ttext-align: right;\n\ttext-decoration: none;\n}\n.ui-datepicker .ui-datepicker-buttonpane {\n\tbackground-image: none;\n\tmargin: .7em 0 0 0;\n\tpadding: 0 .2em;\n\tborder-left: 0;\n\tborder-right: 0;\n\tborder-bottom: 0;\n}\n.ui-datepicker .ui-datepicker-buttonpane button {\n\tfloat: right;\n\tmargin: .5em .2em .4em;\n\tcursor: pointer;\n\tpadding: .2em .6em .3em .6em;\n\twidth: auto;\n\toverflow: visible;\n}\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {\n\tfloat: left;\n}\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi {\n\twidth: auto;\n}\n.ui-datepicker-multi .ui-datepicker-group {\n\tfloat: left;\n}\n.ui-datepicker-multi .ui-datepicker-group table {\n\twidth: 95%;\n\tmargin: 0 auto .4em;\n}\n.ui-datepicker-multi-2 .ui-datepicker-group {\n\twidth: 50%;\n}\n.ui-datepicker-multi-3 .ui-datepicker-group {\n\twidth: 33.3%;\n}\n.ui-datepicker-multi-4 .ui-datepicker-group {\n\twidth: 25%;\n}\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-left-width: 0;\n}\n.ui-datepicker-multi .ui-datepicker-buttonpane {\n\tclear: left;\n}\n.ui-datepicker-row-break {\n\tclear: both;\n\twidth: 100%;\n\tfont-size: 0;\n}\n\n/* RTL support */\n.ui-datepicker-rtl {\n\tdirection: rtl;\n}\n.ui-datepicker-rtl .ui-datepicker-prev {\n\tright: 2px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next {\n\tleft: 2px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-prev:hover {\n\tright: 1px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next:hover {\n\tleft: 1px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane {\n\tclear: right;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button {\n\tfloat: left;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,\n.ui-datepicker-rtl .ui-datepicker-group {\n\tfloat: right;\n}\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-right-width: 0;\n\tborder-left-width: 1px;\n}\n\n/* Icons */\n.ui-datepicker .ui-icon {\n\tdisplay: block;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n\tleft: .5em;\n\ttop: .3em;\n}\n.ui-dialog {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tpadding: .2em;\n\toutline: 0;\n}\n.ui-dialog .ui-dialog-titlebar {\n\tpadding: .4em 1em;\n\tposition: relative;\n}\n.ui-dialog .ui-dialog-title {\n\tfloat: left;\n\tmargin: .1em 0;\n\twhite-space: nowrap;\n\twidth: 90%;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-dialog .ui-dialog-titlebar-close {\n\tposition: absolute;\n\tright: .3em;\n\ttop: 50%;\n\twidth: 20px;\n\tmargin: -10px 0 0 0;\n\tpadding: 1px;\n\theight: 20px;\n}\n.ui-dialog .ui-dialog-content {\n\tposition: relative;\n\tborder: 0;\n\tpadding: .5em 1em;\n\tbackground: none;\n\toverflow: auto;\n}\n.ui-dialog .ui-dialog-buttonpane {\n\ttext-align: left;\n\tborder-width: 1px 0 0 0;\n\tbackground-image: none;\n\tmargin-top: .5em;\n\tpadding: .3em 1em .5em .4em;\n}\n.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {\n\tfloat: right;\n}\n.ui-dialog .ui-dialog-buttonpane button {\n\tmargin: .5em .4em .5em 0;\n\tcursor: pointer;\n}\n.ui-dialog .ui-resizable-n {\n\theight: 2px;\n\ttop: 0;\n}\n.ui-dialog .ui-resizable-e {\n\twidth: 2px;\n\tright: 0;\n}\n.ui-dialog .ui-resizable-s {\n\theight: 2px;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-w {\n\twidth: 2px;\n\tleft: 0;\n}\n.ui-dialog .ui-resizable-se,\n.ui-dialog .ui-resizable-sw,\n.ui-dialog .ui-resizable-ne,\n.ui-dialog .ui-resizable-nw {\n\twidth: 7px;\n\theight: 7px;\n}\n.ui-dialog .ui-resizable-se {\n\tright: 0;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-sw {\n\tleft: 0;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-ne {\n\tright: 0;\n\ttop: 0;\n}\n.ui-dialog .ui-resizable-nw {\n\tleft: 0;\n\ttop: 0;\n}\n.ui-draggable .ui-dialog-titlebar {\n\tcursor: move;\n}\n.ui-draggable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-resizable {\n\tposition: relative;\n}\n.ui-resizable-handle {\n\tposition: absolute;\n\tfont-size: 0.1px;\n\tdisplay: block;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-resizable-disabled .ui-resizable-handle,\n.ui-resizable-autohide .ui-resizable-handle {\n\tdisplay: none;\n}\n.ui-resizable-n {\n\tcursor: n-resize;\n\theight: 7px;\n\twidth: 100%;\n\ttop: -5px;\n\tleft: 0;\n}\n.ui-resizable-s {\n\tcursor: s-resize;\n\theight: 7px;\n\twidth: 100%;\n\tbottom: -5px;\n\tleft: 0;\n}\n.ui-resizable-e {\n\tcursor: e-resize;\n\twidth: 7px;\n\tright: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-w {\n\tcursor: w-resize;\n\twidth: 7px;\n\tleft: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-se {\n\tcursor: se-resize;\n\twidth: 12px;\n\theight: 12px;\n\tright: 1px;\n\tbottom: 1px;\n}\n.ui-resizable-sw {\n\tcursor: sw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\tbottom: -5px;\n}\n.ui-resizable-nw {\n\tcursor: nw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\ttop: -5px;\n}\n.ui-resizable-ne {\n\tcursor: ne-resize;\n\twidth: 9px;\n\theight: 9px;\n\tright: -5px;\n\ttop: -5px;\n}\n.ui-progressbar {\n\theight: 2em;\n\ttext-align: left;\n\toverflow: hidden;\n}\n.ui-progressbar .ui-progressbar-value {\n\tmargin: -1px;\n\theight: 100%;\n}\n.ui-progressbar .ui-progressbar-overlay {\n\tbackground: url("data:image/gif;base64,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");\n\theight: 100%;\n\tfilter: alpha(opacity=25); /* support: IE8 */\n\topacity: 0.25;\n}\n.ui-progressbar-indeterminate .ui-progressbar-value {\n\tbackground-image: none;\n}\n.ui-selectable {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-selectable-helper {\n\tposition: absolute;\n\tz-index: 100;\n\tborder: 1px dotted black;\n}\n.ui-selectmenu-menu {\n\tpadding: 0;\n\tmargin: 0;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tdisplay: none;\n}\n.ui-selectmenu-menu .ui-menu {\n\toverflow: auto;\n\toverflow-x: hidden;\n\tpadding-bottom: 1px;\n}\n.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {\n\tfont-size: 1em;\n\tfont-weight: bold;\n\tline-height: 1.5;\n\tpadding: 2px 0.4em;\n\tmargin: 0.5em 0 0 0;\n\theight: auto;\n\tborder: 0;\n}\n.ui-selectmenu-open {\n\tdisplay: block;\n}\n.ui-selectmenu-text {\n\tdisplay: block;\n\tmargin-right: 20px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-selectmenu-button.ui-button {\n\ttext-align: left;\n\twhite-space: nowrap;\n\twidth: 14em;\n}\n.ui-selectmenu-icon.ui-icon {\n\tfloat: right;\n\tmargin-top: 0;\n}\n.ui-slider {\n\tposition: relative;\n\ttext-align: left;\n}\n.ui-slider .ui-slider-handle {\n\tposition: absolute;\n\tz-index: 2;\n\twidth: 1.2em;\n\theight: 1.2em;\n\tcursor: default;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-slider .ui-slider-range {\n\tposition: absolute;\n\tz-index: 1;\n\tfont-size: .7em;\n\tdisplay: block;\n\tborder: 0;\n\tbackground-position: 0 0;\n}\n\n/* support: IE8 - See #6727 */\n.ui-slider.ui-state-disabled .ui-slider-handle,\n.ui-slider.ui-state-disabled .ui-slider-range {\n\tfilter: inherit;\n}\n\n.ui-slider-horizontal {\n\theight: .8em;\n}\n.ui-slider-horizontal .ui-slider-handle {\n\ttop: -.3em;\n\tmargin-left: -.6em;\n}\n.ui-slider-horizontal .ui-slider-range {\n\ttop: 0;\n\theight: 100%;\n}\n.ui-slider-horizontal .ui-slider-range-min {\n\tleft: 0;\n}\n.ui-slider-horizontal .ui-slider-range-max {\n\tright: 0;\n}\n\n.ui-slider-vertical {\n\twidth: .8em;\n\theight: 100px;\n}\n.ui-slider-vertical .ui-slider-handle {\n\tleft: -.3em;\n\tmargin-left: 0;\n\tmargin-bottom: -.6em;\n}\n.ui-slider-vertical .ui-slider-range {\n\tleft: 0;\n\twidth: 100%;\n}\n.ui-slider-vertical .ui-slider-range-min {\n\tbottom: 0;\n}\n.ui-slider-vertical .ui-slider-range-max {\n\ttop: 0;\n}\n.ui-sortable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-spinner {\n\tposition: relative;\n\tdisplay: inline-block;\n\toverflow: hidden;\n\tpadding: 0;\n\tvertical-align: middle;\n}\n.ui-spinner-input {\n\tborder: none;\n\tbackground: none;\n\tcolor: inherit;\n\tpadding: .222em 0;\n\tmargin: .2em 0;\n\tvertical-align: middle;\n\tmargin-left: .4em;\n\tmargin-right: 2em;\n}\n.ui-spinner-button {\n\twidth: 1.6em;\n\theight: 50%;\n\tfont-size: .5em;\n\tpadding: 0;\n\tmargin: 0;\n\ttext-align: center;\n\tposition: absolute;\n\tcursor: default;\n\tdisplay: block;\n\toverflow: hidden;\n\tright: 0;\n}\n/* more specificity required here to override default borders */\n.ui-spinner a.ui-spinner-button {\n\tborder-top-style: none;\n\tborder-bottom-style: none;\n\tborder-right-style: none;\n}\n.ui-spinner-up {\n\ttop: 0;\n}\n.ui-spinner-down {\n\tbottom: 0;\n}\n.ui-tabs {\n\tposition: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */\n\tpadding: .2em;\n}\n.ui-tabs .ui-tabs-nav {\n\tmargin: 0;\n\tpadding: .2em .2em 0;\n}\n.ui-tabs .ui-tabs-nav li {\n\tlist-style: none;\n\tfloat: left;\n\tposition: relative;\n\ttop: 0;\n\tmargin: 1px .2em 0 0;\n\tborder-bottom-width: 0;\n\tpadding: 0;\n\twhite-space: nowrap;\n}\n.ui-tabs .ui-tabs-nav .ui-tabs-anchor {\n\tfloat: left;\n\tpadding: .5em 1em;\n\ttext-decoration: none;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active {\n\tmargin-bottom: -1px;\n\tpadding-bottom: 1px;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {\n\tcursor: text;\n}\n.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {\n\tcursor: pointer;\n}\n.ui-tabs .ui-tabs-panel {\n\tdisplay: block;\n\tborder-width: 0;\n\tpadding: 1em 1.4em;\n\tbackground: none;\n}\n.ui-tooltip {\n\tpadding: 8px;\n\tposition: absolute;\n\tz-index: 9999;\n\tmax-width: 300px;\n}\nbody .ui-tooltip {\n\tborder-width: 2px;\n}\n\n/* Component containers\n----------------------------------*/\n.ui-widget {\n\tfont-family: Arial,Helvetica,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget .ui-widget {\n\tfont-size: 1em;\n}\n.ui-widget input,\n.ui-widget select,\n.ui-widget textarea,\n.ui-widget button {\n\tfont-family: Arial,Helvetica,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget.ui-widget-content {\n\tborder: 1px solid #c5c5c5;\n}\n.ui-widget-content {\n\tborder: 1px solid #dddddd;\n\tbackground: #ffffff;\n\tcolor: #333333;\n}\n.ui-widget-content a {\n\tcolor: #333333;\n}\n.ui-widget-header {\n\tborder: 1px solid #dddddd;\n\tbackground: #e9e9e9;\n\tcolor: #333333;\n\tfont-weight: bold;\n}\n.ui-widget-header a {\n\tcolor: #333333;\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default,\n.ui-button,\n\n/* We use html here because we need a greater specificity to make sure disabled\nworks properly when clicked or hovered */\nhtml .ui-button.ui-state-disabled:hover,\nhtml .ui-button.ui-state-disabled:active {\n\tborder: 1px solid #c5c5c5;\n\tbackground: #f6f6f6;\n\tfont-weight: normal;\n\tcolor: #454545;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited,\na.ui-button,\na:link.ui-button,\na:visited.ui-button,\n.ui-button {\n\tcolor: #454545;\n\ttext-decoration: none;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus,\n.ui-button:hover,\n.ui-button:focus {\n\tborder: 1px solid #cccccc;\n\tbackground: #ededed;\n\tfont-weight: normal;\n\tcolor: #2b2b2b;\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited,\n.ui-state-focus a,\n.ui-state-focus a:hover,\n.ui-state-focus a:link,\n.ui-state-focus a:visited,\na.ui-button:hover,\na.ui-button:focus {\n\tcolor: #2b2b2b;\n\ttext-decoration: none;\n}\n\n.ui-visual-focus {\n\tbox-shadow: 0 0 3px 1px rgb(94, 158, 214);\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active,\na.ui-button:active,\n.ui-button:active,\n.ui-button.ui-state-active:hover {\n\tborder: 1px solid #003eff;\n\tbackground: #007fff;\n\tfont-weight: normal;\n\tcolor: #ffffff;\n}\n.ui-icon-background,\n.ui-state-active .ui-icon-background {\n\tborder: #003eff;\n\tbackground-color: #ffffff;\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: #ffffff;\n\ttext-decoration: none;\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid #dad55e;\n\tbackground: #fffa90;\n\tcolor: #777620;\n}\n.ui-state-checked {\n\tborder: 1px solid #dad55e;\n\tbackground: #fffa90;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: #777620;\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: 1px solid #f1a899;\n\tbackground: #fddfdf;\n\tcolor: #5f3f3f;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #5f3f3f;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #5f3f3f;\n}\n.ui-priority-primary,\n.ui-widget-content .ui-priority-primary,\n.ui-widget-header .ui-priority-primary {\n\tfont-weight: bold;\n}\n.ui-priority-secondary,\n.ui-widget-content .ui-priority-secondary,\n.ui-widget-header .ui-priority-secondary {\n\topacity: .7;\n\tfilter:Alpha(Opacity=70); /* support: IE8 */\n\tfont-weight: normal;\n}\n.ui-state-disabled,\n.ui-widget-content .ui-state-disabled,\n.ui-widget-header .ui-state-disabled {\n\topacity: .35;\n\tfilter:Alpha(Opacity=35); /* support: IE8 */\n\tbackground-image: none;\n}\n.ui-state-disabled .ui-icon {\n\tfilter:Alpha(Opacity=35); /* support: IE8 - See #6059 */\n}\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon {\n\twidth: 16px;\n\theight: 16px;\n}\n.ui-icon,\n.ui-widget-content .ui-icon {\n\tbackground-image: url("images/ui-icons_444444_256x240.png");\n}\n.ui-widget-header .ui-icon {\n\tbackground-image: url("images/ui-icons_444444_256x240.png");\n}\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon,\n.ui-button:hover .ui-icon,\n.ui-button:focus .ui-icon {\n\tbackground-image: url("images/ui-icons_555555_256x240.png");\n}\n.ui-state-active .ui-icon,\n.ui-button:active .ui-icon {\n\tbackground-image: url("images/ui-icons_ffffff_256x240.png");\n}\n.ui-state-highlight .ui-icon,\n.ui-button .ui-state-highlight.ui-icon {\n\tbackground-image: url("images/ui-icons_777620_256x240.png");\n}\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n\tbackground-image: url("images/ui-icons_cc0000_256x240.png");\n}\n.ui-button .ui-icon {\n\tbackground-image: url("images/ui-icons_777777_256x240.png");\n}\n\n/* positioning */\n.ui-icon-blank { background-position: 16px 16px; }\n.ui-icon-caret-1-n { background-position: 0 0; }\n.ui-icon-caret-1-ne { background-position: -16px 0; }\n.ui-icon-caret-1-e { background-position: -32px 0; }\n.ui-icon-caret-1-se { background-position: -48px 0; }\n.ui-icon-caret-1-s { background-position: -65px 0; }\n.ui-icon-caret-1-sw { background-position: -80px 0; }\n.ui-icon-caret-1-w { background-position: -96px 0; }\n.ui-icon-caret-1-nw { background-position: -112px 0; }\n.ui-icon-caret-2-n-s { background-position: -128px 0; }\n.ui-icon-caret-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -65px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -65px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 1px -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-on { background-position: -96px -144px; }\n.ui-icon-radio-off { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-start { background-position: -80px -160px; }\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-left,\n.ui-corner-tl {\n\tborder-top-left-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-right,\n.ui-corner-tr {\n\tborder-top-right-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-left,\n.ui-corner-bl {\n\tborder-bottom-left-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-right,\n.ui-corner-br {\n\tborder-bottom-right-radius: 3px;\n}\n\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #aaaaaa;\n\topacity: .003;\n\tfilter: Alpha(Opacity=.3); /* support: IE8 */\n}\n.ui-widget-shadow {\n\t-webkit-box-shadow: 0px 0px 5px #666666;\n\tbox-shadow: 0px 0px 5px #666666;\n}\n'],sourceRoot:""}]);const y=h},92061:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>u});var r=e(94015),i=e.n(r),o=e(23645),a=e.n(o)()(i());a.push([t.id,"#main-div>.header-toolbar{height:0;display:none}\n","",{version:3,sources:["webpack://./js/app/pages/stock/components/app.vue"],names:[],mappings:"AAsIA,0BACE,QAAS,CACT,YAAa",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// hide the layout header\n#main-div > .header-toolbar {\n height: 0;\n display: none;\n}\n"],sourceRoot:""}]);const u=a},14225:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>c});var r=e(94015),i=e.n(r),o=e(23645),a=e.n(o),u=e(422),s=a()(i());s.i(u.Z),s.push([t.id,"*[data-v-297793b2]{outline:none}.fade-enter-active[data-v-297793b2],.fade-leave-active[data-v-297793b2]{transition:opacity 0.2s ease}.fade-enter[data-v-297793b2],.fade-leave-to[data-v-297793b2]{opacity:0}\n","",{version:3,sources:["webpack://./js/app/pages/stock/components/overview/spinner.vue"],names:[],mappings:"AA+JA,mBACE,YAAa,CACd,wEAGC,4BAA6B,CAC9B,6DAGC,SAAU",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 "~jquery-ui-dist/jquery-ui.css";\n* {\n outline: none;\n}\n.fade-enter-active,\n.fade-leave-active {\n transition: opacity 0.2s ease;\n}\n.fade-enter,\n.fade-leave-to {\n opacity: 0;\n}\n'],sourceRoot:""}]);const c=s},86081:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>u});var r=e(94015),i=e.n(r),o=e(23645),a=e.n(o)()(i());a.push([t.id,".date a[data-action='clear']::before{font-family:'Material Icons';content:\"\\E14C\";font-size:20px;position:absolute;bottom:15px;left:50%;margin-left:-10px;color:#363a41;cursor:pointer}.date .bootstrap-datetimepicker-widget tr td span:hover{background-color:white}\n","",{version:3,sources:["webpack://./js/app/widgets/ps-datepicker.vue","webpack://./node_modules/prestakit/scss/_variables.scss"],names:[],mappings:"AAsEA,qCAEI,4BAA6B,CAC7B,eAAgB,CAChB,cAAe,CACf,iBAAkB,CAClB,WAAY,CACZ,QAAS,CACT,iBAAkB,CAClB,aCjEc,CDkEd,cAAc,CAVlB,wDAaI,sBAAuB",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@import '~@scss/config/_settings.scss';\n\n.date {\n a[data-action='clear']::before {\n font-family: 'Material Icons';\n content: \"\\E14C\";\n font-size: 20px;\n position: absolute;\n bottom: 15px;\n left: 50%;\n margin-left: -10px;\n color: $gray-dark;\n cursor:pointer;\n }\n .bootstrap-datetimepicker-widget tr td span:hover {\n background-color: white;\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 u=a},25924:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>u});var r=e(94015),i=e.n(r),o=e(23645),a=e.n(o)()(i());a.push([t.id,".ps-loader[data-v-0aa88fd2]{width:100%}.ps-loader .animated-background[data-v-0aa88fd2]{animation-duration:1s;animation-iteration-count:infinite;animation-name:loading-data-v-0aa88fd2;animation-timing-function:linear;background:#fafbfc;background:linear-gradient(to right, #fafbfc 8%, #ccc 18%, #fafbfc 33%);background-size:100%;height:40px;position:relative}.ps-loader .background-masker[data-v-0aa88fd2]{background:white;position:absolute}@keyframes loading-data-v-0aa88fd2{0%{background-position:-500px 0}100%{background-position:500px 0}}\n","",{version:3,sources:["webpack://./js/app/widgets/ps-loader.vue","webpack://./node_modules/prestakit/scss/_variables.scss"],names:[],mappings:"AAqCA,4BACE,UAAW,CADb,iDAGI,qBAAsB,CACtB,kCAAmC,CACnC,sCAAuB,CACvB,gCAAiC,CACjC,kBCtCc,CDuCd,uEAA8E,CAC9E,oBAAqB,CACrB,WAAY,CACZ,iBAAkB,CAXtB,+CAeI,gBAAiB,CACjB,iBAAkB,CACnB,mCAID,GACE,4BACF,CACA,KACE,2BACF,CAAA",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@import '~@scss/config/_settings.scss';\n\n.ps-loader {\n width: 100%;\n .animated-background {\n animation-duration: 1s;\n animation-iteration-count: infinite;\n animation-name: loading;\n animation-timing-function: linear;\n background: $gray-soft;\n background: linear-gradient(to right, $gray-soft 8%, #ccc 18%, $gray-soft 33%);\n background-size: 100%;\n height: 40px;\n position: relative;\n }\n\n .background-masker {\n background: white;\n position: absolute;\n }\n}\n\n@keyframes loading{\n 0%{\n background-position: -500px 0\n }\n 100%{\n background-position: 500px 0\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 u=a},99718:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>u});var r=e(94015),i=e.n(r),o=e(23645),a=e.n(o)()(i());a.push([t.id,".has-combination .product-title[data-v-1b3a27e0]{font-weight:600}.thumbnail[data-v-1b3a27e0],.no-img[data-v-1b3a27e0]{border:#bbcdd2 1px solid;max-width:47px}.no-img[data-v-1b3a27e0]{background:white;width:47px;height:47px;display:inline-block;vertical-align:middle}.desc[data-v-1b3a27e0]{white-space:normal}small[data-v-1b3a27e0]{color:#6c868e}\n","",{version:3,sources:["webpack://./js/app/widgets/ps-media.vue","webpack://./node_modules/prestakit/scss/_variables.scss"],names:[],mappings:"AA4DE,iDACE,eAAgB,CACjB,qDAGD,wBAA6B,CAC7B,cAAe,CAChB,yBAEC,gBAAiB,CACjB,UAAW,CACX,WAAY,CACZ,oBAAqB,CACrB,qBAAsB,CACvB,uBAEC,kBAAmB,CACpB,uBAEC,aCpEgB",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@import '~@scss/config/_settings.scss';\n\n.product-title {\n .has-combination & {\n font-weight: 600;\n }\n}\n.thumbnail, .no-img {\n border: $gray-light 1px solid;\n max-width: 47px;\n}\n.no-img {\n background: white;\n width: 47px;\n height: 47px;\n display: inline-block;\n vertical-align: middle;\n}\n.desc {\n white-space: normal;\n}\nsmall {\n color: $gray-medium;\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 u=a},5897:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>u});var r=e(94015),i=e.n(r),o=e(23645),a=e.n(o)()(i());a.push([t.id,".ps-select[data-v-f371bf00]{position:relative}.ps-select select[data-v-f371bf00]{appearance:none;border-radius:0}.ps-select[data-v-f371bf00]::after{content:\"\\E313\";font-family:'Material Icons';color:#6c868e;font-size:20px;position:absolute;right:5px;top:5px}\n","",{version:3,sources:["webpack://./js/app/widgets/ps-select.vue","webpack://./node_modules/prestakit/scss/_variables.scss"],names:[],mappings:"AAiFA,4BACE,iBAAkB,CADpB,mCAGI,eAAgB,CAChB,eAAgB,CAJpB,mCAOI,eAAgB,CAChB,4BAA6B,CAC7B,aC/Ec,CDgFd,cAAe,CACf,iBAAkB,CAClB,SAAU,CACV,OAAQ",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@import '~@scss/config/_settings.scss';\n\n.ps-select {\n position: relative;\n select {\n appearance: none;\n border-radius: 0;\n }\n &::after {\n content: \"\\E313\";\n font-family: 'Material Icons';\n color: $gray-medium;\n font-size: 20px;\n position: absolute;\n right: 5px;\n top: 5px;\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 u=a},23645:t=>{"use strict";t.exports=function(t){var n=[];return n.toString=function(){return this.map((function(n){var e=t(n);return n[2]?"@media ".concat(n[2]," {").concat(e,"}"):e})).join("")},n.i=function(t,e,r){"string"==typeof t&&(t=[[null,t,""]]);var i={};if(r)for(var o=0;o<this.length;o++){var a=this[o][0];null!=a&&(i[a]=!0)}for(var u=0;u<t.length;u++){var s=[].concat(t[u]);r&&i[s[0]]||(e&&(s[2]?s[2]="".concat(e," and ").concat(s[2]):s[2]=e),n.push(s))}},n}},94015:t=>{"use strict";function n(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,r=new Array(n);e<n;e++)r[e]=t[e];return r}t.exports=function(t){var e,r,i=(r=4,function(t){if(Array.isArray(t))return t}(e=t)||function(t,n){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t)){var e=[],r=!0,i=!1,o=void 0;try{for(var a,u=t[Symbol.iterator]();!(r=(a=u.next()).done)&&(e.push(a.value),!n||e.length!==n);r=!0);}catch(t){i=!0,o=t}finally{try{r||null==u.return||u.return()}finally{if(i)throw o}}return e}}(e,r)||function(t,e){if(t){if("string"==typeof t)return n(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(t,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.")}()),o=i[1],a=i[3];if("function"==typeof btoa){var u=btoa(unescape(encodeURIComponent(JSON.stringify(a)))),s="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(u),c="/*# ".concat(s," */"),l=a.sources.map((function(t){return"/*# sourceURL=".concat(a.sourceRoot||"").concat(t," */")}));return[o].concat(l).concat([c]).join("\n")}return[o].join("\n")}},61667:t=>{"use strict";t.exports=function(t,n){return n||(n={}),"string"!=typeof(t=t&&t.__esModule?t.default:t)?t:(/^['"].*['"]$/.test(t)&&(t=t.slice(1,-1)),n.hash&&(t+=n.hash),/["'() \t\n]/.test(t)||n.needQuotes?'"'.concat(t.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):t)}},62159:(t,n,e)=>{"use strict";e.d(n,{Z:()=>r});const r=e.p+"d10bc07005bb2d604f4905183690ac04.png"},42745:(t,n,e)=>{"use strict";e.d(n,{Z:()=>r});const r=e.p+"00dd0ec0a16a1085e714c7906ff8fb06.png"},26157:(t,n,e)=>{"use strict";e.d(n,{Z:()=>r});const r=e.p+"4e7e3e142f3939883cd0a7e00cabdaef.png"},33554:(t,n,e)=>{"use strict";e.d(n,{Z:()=>r});const r=e.p+"40bf25799e4fec8079c7775083de09df.png"},42562:(t,n,e)=>{"use strict";e.d(n,{Z:()=>r});const r=e.p+"093a819138276b446611d1d2a45b98a2.png"},30341:(t,n,e)=>{"use strict";e.d(n,{Z:()=>r});const r=e.p+"ea4ebe072be75fbbea002631916836de.png"},96486:function(t,n,e){var r;t=e.nmd(t),function(){var i,o="Expected a function",a="__lodash_hash_undefined__",u="__lodash_placeholder__",s=32,c=128,l=1/0,d=9007199254740991,p=NaN,f=4294967295,g=[["ary",c],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",s],["partialRight",64],["rearg",256]],h="[object Arguments]",A="[object Array]",m="[object Boolean]",b="[object Date]",v="[object Error]",$="[object Function]",C="[object GeneratorFunction]",y="[object Map]",x="[object Number]",w="[object Object]",k="[object Promise]",_="[object RegExp]",B="[object Set]",E="[object String]",S="[object Symbol]",O="[object WeakMap]",T="[object ArrayBuffer]",P="[object DataView]",D="[object Float32Array]",z="[object Float64Array]",j="[object Int8Array]",I="[object Int16Array]",M="[object Int32Array]",U="[object Uint8Array]",R="[object Uint8ClampedArray]",L="[object Uint16Array]",q="[object Uint32Array]",N=/\b__p \+= '';/g,W=/\b(__p \+=) '' \+/g,F=/(__e\(.*?\)|\b__t\)) \+\n'';/g,Z=/&(?:amp|lt|gt|quot|#39);/g,X=/[&<>"']/g,H=RegExp(Z.source),Y=RegExp(X.source),V=/<%-([\s\S]+?)%>/g,G=/<%([\s\S]+?)%>/g,Q=/<%=([\s\S]+?)%>/g,K=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,J=/^\w*$/,tt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,nt=/[\\^$.*+?()[\]{}|]/g,et=RegExp(nt.source),rt=/^\s+/,it=/\s/,ot=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,at=/\{\n\/\* \[wrapped with (.+)\] \*/,ut=/,? & /,st=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,ct=/[()=,{}\[\]\/\s]/,lt=/\\(\\)?/g,dt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,pt=/\w*$/,ft=/^[-+]0x[0-9a-f]+$/i,gt=/^0b[01]+$/i,ht=/^\[object .+?Constructor\]$/,At=/^0o[0-7]+$/i,mt=/^(?:0|[1-9]\d*)$/,bt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,vt=/($^)/,$t=/['\n\r\u2028\u2029\\]/g,Ct="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",yt="a-z\\xdf-\\xf6\\xf8-\\xff",xt="A-Z\\xc0-\\xd6\\xd8-\\xde",wt="\\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",kt="["+wt+"]",_t="["+Ct+"]",Bt="\\d+",Et="["+yt+"]",St="[^\\ud800-\\udfff"+wt+Bt+"\\u2700-\\u27bf"+yt+xt+"]",Ot="\\ud83c[\\udffb-\\udfff]",Tt="[^\\ud800-\\udfff]",Pt="(?:\\ud83c[\\udde6-\\uddff]){2}",Dt="[\\ud800-\\udbff][\\udc00-\\udfff]",zt="["+xt+"]",jt="(?:"+Et+"|"+St+")",It="(?:"+zt+"|"+St+")",Mt="(?:['’](?:d|ll|m|re|s|t|ve))?",Ut="(?:['’](?:D|LL|M|RE|S|T|VE))?",Rt="(?:"+_t+"|"+Ot+")?",Lt="[\\ufe0e\\ufe0f]?",qt=Lt+Rt+"(?:\\u200d(?:"+[Tt,Pt,Dt].join("|")+")"+Lt+Rt+")*",Nt="(?:"+["[\\u2700-\\u27bf]",Pt,Dt].join("|")+")"+qt,Wt="(?:"+[Tt+_t+"?",_t,Pt,Dt,"[\\ud800-\\udfff]"].join("|")+")",Ft=RegExp("['’]","g"),Zt=RegExp(_t,"g"),Xt=RegExp(Ot+"(?="+Ot+")|"+Wt+qt,"g"),Ht=RegExp([zt+"?"+Et+"+"+Mt+"(?="+[kt,zt,"$"].join("|")+")",It+"+"+Ut+"(?="+[kt,zt+jt,"$"].join("|")+")",zt+"?"+jt+"+"+Mt,zt+"+"+Ut,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Bt,Nt].join("|"),"g"),Yt=RegExp("[\\u200d\\ud800-\\udfff"+Ct+"\\ufe0e\\ufe0f]"),Vt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Gt=["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"],Qt=-1,Kt={};Kt[D]=Kt[z]=Kt[j]=Kt[I]=Kt[M]=Kt[U]=Kt[R]=Kt[L]=Kt[q]=!0,Kt[h]=Kt[A]=Kt[T]=Kt[m]=Kt[P]=Kt[b]=Kt[v]=Kt[$]=Kt[y]=Kt[x]=Kt[w]=Kt[_]=Kt[B]=Kt[E]=Kt[O]=!1;var Jt={};Jt[h]=Jt[A]=Jt[T]=Jt[P]=Jt[m]=Jt[b]=Jt[D]=Jt[z]=Jt[j]=Jt[I]=Jt[M]=Jt[y]=Jt[x]=Jt[w]=Jt[_]=Jt[B]=Jt[E]=Jt[S]=Jt[U]=Jt[R]=Jt[L]=Jt[q]=!0,Jt[v]=Jt[$]=Jt[O]=!1;var tn={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},nn=parseFloat,en=parseInt,rn="object"==typeof e.g&&e.g&&e.g.Object===Object&&e.g,on="object"==typeof self&&self&&self.Object===Object&&self,an=rn||on||Function("return this")(),un=n&&!n.nodeType&&n,sn=un&&t&&!t.nodeType&&t,cn=sn&&sn.exports===un,ln=cn&&rn.process,dn=function(){try{return sn&&sn.require&&sn.require("util").types||ln&&ln.binding&&ln.binding("util")}catch(t){}}(),pn=dn&&dn.isArrayBuffer,fn=dn&&dn.isDate,gn=dn&&dn.isMap,hn=dn&&dn.isRegExp,An=dn&&dn.isSet,mn=dn&&dn.isTypedArray;function bn(t,n,e){switch(e.length){case 0:return t.call(n);case 1:return t.call(n,e[0]);case 2:return t.call(n,e[0],e[1]);case 3:return t.call(n,e[0],e[1],e[2])}return t.apply(n,e)}function vn(t,n,e,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var a=t[i];n(r,a,e(a),t)}return r}function $n(t,n){for(var e=-1,r=null==t?0:t.length;++e<r&&!1!==n(t[e],e,t););return t}function Cn(t,n){for(var e=null==t?0:t.length;e--&&!1!==n(t[e],e,t););return t}function yn(t,n){for(var e=-1,r=null==t?0:t.length;++e<r;)if(!n(t[e],e,t))return!1;return!0}function xn(t,n){for(var e=-1,r=null==t?0:t.length,i=0,o=[];++e<r;){var a=t[e];n(a,e,t)&&(o[i++]=a)}return o}function wn(t,n){return!(null==t||!t.length)&&zn(t,n,0)>-1}function kn(t,n,e){for(var r=-1,i=null==t?0:t.length;++r<i;)if(e(n,t[r]))return!0;return!1}function _n(t,n){for(var e=-1,r=null==t?0:t.length,i=Array(r);++e<r;)i[e]=n(t[e],e,t);return i}function Bn(t,n){for(var e=-1,r=n.length,i=t.length;++e<r;)t[i+e]=n[e];return t}function En(t,n,e,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(e=t[++i]);++i<o;)e=n(e,t[i],i,t);return e}function Sn(t,n,e,r){var i=null==t?0:t.length;for(r&&i&&(e=t[--i]);i--;)e=n(e,t[i],i,t);return e}function On(t,n){for(var e=-1,r=null==t?0:t.length;++e<r;)if(n(t[e],e,t))return!0;return!1}var Tn=Un("length");function Pn(t,n,e){var r;return e(t,(function(t,e,i){if(n(t,e,i))return r=e,!1})),r}function Dn(t,n,e,r){for(var i=t.length,o=e+(r?1:-1);r?o--:++o<i;)if(n(t[o],o,t))return o;return-1}function zn(t,n,e){return n==n?function(t,n,e){for(var r=e-1,i=t.length;++r<i;)if(t[r]===n)return r;return-1}(t,n,e):Dn(t,In,e)}function jn(t,n,e,r){for(var i=e-1,o=t.length;++i<o;)if(r(t[i],n))return i;return-1}function In(t){return t!=t}function Mn(t,n){var e=null==t?0:t.length;return e?qn(t,n)/e:p}function Un(t){return function(n){return null==n?i:n[t]}}function Rn(t){return function(n){return null==t?i:t[n]}}function Ln(t,n,e,r,i){return i(t,(function(t,i,o){e=r?(r=!1,t):n(e,t,i,o)})),e}function qn(t,n){for(var e,r=-1,o=t.length;++r<o;){var a=n(t[r]);a!==i&&(e=e===i?a:e+a)}return e}function Nn(t,n){for(var e=-1,r=Array(t);++e<t;)r[e]=n(e);return r}function Wn(t){return t?t.slice(0,ue(t)+1).replace(rt,""):t}function Fn(t){return function(n){return t(n)}}function Zn(t,n){return _n(n,(function(n){return t[n]}))}function Xn(t,n){return t.has(n)}function Hn(t,n){for(var e=-1,r=t.length;++e<r&&zn(n,t[e],0)>-1;);return e}function Yn(t,n){for(var e=t.length;e--&&zn(n,t[e],0)>-1;);return e}function Vn(t,n){for(var e=t.length,r=0;e--;)t[e]===n&&++r;return r}var Gn=Rn({À:"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"}),Qn=Rn({"&":"&","<":"<",">":">",'"':""","'":"'"});function Kn(t){return"\\"+tn[t]}function Jn(t){return Yt.test(t)}function te(t){var n=-1,e=Array(t.size);return t.forEach((function(t,r){e[++n]=[r,t]})),e}function ne(t,n){return function(e){return t(n(e))}}function ee(t,n){for(var e=-1,r=t.length,i=0,o=[];++e<r;){var a=t[e];a!==n&&a!==u||(t[e]=u,o[i++]=e)}return o}function re(t){var n=-1,e=Array(t.size);return t.forEach((function(t){e[++n]=t})),e}function ie(t){var n=-1,e=Array(t.size);return t.forEach((function(t){e[++n]=[t,t]})),e}function oe(t){return Jn(t)?function(t){for(var n=Xt.lastIndex=0;Xt.test(t);)++n;return n}(t):Tn(t)}function ae(t){return Jn(t)?function(t){return t.match(Xt)||[]}(t):function(t){return t.split("")}(t)}function ue(t){for(var n=t.length;n--&&it.test(t.charAt(n)););return n}var se=Rn({"&":"&","<":"<",">":">",""":'"',"'":"'"}),ce=function t(n){var e,r=(n=null==n?an:ce.defaults(an.Object(),n,ce.pick(an,Gt))).Array,it=n.Date,Ct=n.Error,yt=n.Function,xt=n.Math,wt=n.Object,kt=n.RegExp,_t=n.String,Bt=n.TypeError,Et=r.prototype,St=yt.prototype,Ot=wt.prototype,Tt=n["__core-js_shared__"],Pt=St.toString,Dt=Ot.hasOwnProperty,zt=0,jt=(e=/[^.]+$/.exec(Tt&&Tt.keys&&Tt.keys.IE_PROTO||""))?"Symbol(src)_1."+e:"",It=Ot.toString,Mt=Pt.call(wt),Ut=an._,Rt=kt("^"+Pt.call(Dt).replace(nt,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Lt=cn?n.Buffer:i,qt=n.Symbol,Nt=n.Uint8Array,Wt=Lt?Lt.allocUnsafe:i,Xt=ne(wt.getPrototypeOf,wt),Yt=wt.create,tn=Ot.propertyIsEnumerable,rn=Et.splice,on=qt?qt.isConcatSpreadable:i,un=qt?qt.iterator:i,sn=qt?qt.toStringTag:i,ln=function(){try{var t=co(wt,"defineProperty");return t({},"",{}),t}catch(t){}}(),dn=n.clearTimeout!==an.clearTimeout&&n.clearTimeout,Tn=it&&it.now!==an.Date.now&&it.now,Rn=n.setTimeout!==an.setTimeout&&n.setTimeout,le=xt.ceil,de=xt.floor,pe=wt.getOwnPropertySymbols,fe=Lt?Lt.isBuffer:i,ge=n.isFinite,he=Et.join,Ae=ne(wt.keys,wt),me=xt.max,be=xt.min,ve=it.now,$e=n.parseInt,Ce=xt.random,ye=Et.reverse,xe=co(n,"DataView"),we=co(n,"Map"),ke=co(n,"Promise"),_e=co(n,"Set"),Be=co(n,"WeakMap"),Ee=co(wt,"create"),Se=Be&&new Be,Oe={},Te=Ro(xe),Pe=Ro(we),De=Ro(ke),ze=Ro(_e),je=Ro(Be),Ie=qt?qt.prototype:i,Me=Ie?Ie.valueOf:i,Ue=Ie?Ie.toString:i;function Re(t){if(eu(t)&&!Za(t)&&!(t instanceof We)){if(t instanceof Ne)return t;if(Dt.call(t,"__wrapped__"))return Lo(t)}return new Ne(t)}var Le=function(){function t(){}return function(n){if(!nu(n))return{};if(Yt)return Yt(n);t.prototype=n;var e=new t;return t.prototype=i,e}}();function qe(){}function Ne(t,n){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!n,this.__index__=0,this.__values__=i}function We(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=f,this.__views__=[]}function Fe(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function Ze(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function Xe(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function He(t){var n=-1,e=null==t?0:t.length;for(this.__data__=new Xe;++n<e;)this.add(t[n])}function Ye(t){var n=this.__data__=new Ze(t);this.size=n.size}function Ve(t,n){var e=Za(t),r=!e&&Fa(t),i=!e&&!r&&Va(t),o=!e&&!r&&!i&&lu(t),a=e||r||i||o,u=a?Nn(t.length,_t):[],s=u.length;for(var c in t)!n&&!Dt.call(t,c)||a&&("length"==c||i&&("offset"==c||"parent"==c)||o&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||mo(c,s))||u.push(c);return u}function Ge(t){var n=t.length;return n?t[Xr(0,n-1)]:i}function Qe(t,n){return zo(Bi(t),ar(n,0,t.length))}function Ke(t){return zo(Bi(t))}function Je(t,n,e){(e!==i&&!qa(t[n],e)||e===i&&!(n in t))&&ir(t,n,e)}function tr(t,n,e){var r=t[n];Dt.call(t,n)&&qa(r,e)&&(e!==i||n in t)||ir(t,n,e)}function nr(t,n){for(var e=t.length;e--;)if(qa(t[e][0],n))return e;return-1}function er(t,n,e,r){return dr(t,(function(t,i,o){n(r,t,e(t),o)})),r}function rr(t,n){return t&&Ei(n,Pu(n),t)}function ir(t,n,e){"__proto__"==n&&ln?ln(t,n,{configurable:!0,enumerable:!0,value:e,writable:!0}):t[n]=e}function or(t,n){for(var e=-1,o=n.length,a=r(o),u=null==t;++e<o;)a[e]=u?i:Bu(t,n[e]);return a}function ar(t,n,e){return t==t&&(e!==i&&(t=t<=e?t:e),n!==i&&(t=t>=n?t:n)),t}function ur(t,n,e,r,o,a){var u,s=1&n,c=2&n,l=4&n;if(e&&(u=o?e(t,r,o,a):e(t)),u!==i)return u;if(!nu(t))return t;var d=Za(t);if(d){if(u=function(t){var n=t.length,e=new t.constructor(n);return n&&"string"==typeof t[0]&&Dt.call(t,"index")&&(e.index=t.index,e.input=t.input),e}(t),!s)return Bi(t,u)}else{var p=fo(t),f=p==$||p==C;if(Va(t))return Ci(t,s);if(p==w||p==h||f&&!o){if(u=c||f?{}:ho(t),!s)return c?function(t,n){return Ei(t,po(t),n)}(t,function(t,n){return t&&Ei(n,Du(n),t)}(u,t)):function(t,n){return Ei(t,lo(t),n)}(t,rr(u,t))}else{if(!Jt[p])return o?t:{};u=function(t,n,e){var r,i=t.constructor;switch(n){case T:return yi(t);case m:case b:return new i(+t);case P:return function(t,n){var e=n?yi(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.byteLength)}(t,e);case D:case z:case j:case I:case M:case U:case R:case L:case q:return xi(t,e);case y:return new i;case x:case E:return new i(t);case _:return function(t){var n=new t.constructor(t.source,pt.exec(t));return n.lastIndex=t.lastIndex,n}(t);case B:return new i;case S:return r=t,Me?wt(Me.call(r)):{}}}(t,p,s)}}a||(a=new Ye);var g=a.get(t);if(g)return g;a.set(t,u),uu(t)?t.forEach((function(r){u.add(ur(r,n,e,r,t,a))})):ru(t)&&t.forEach((function(r,i){u.set(i,ur(r,n,e,i,t,a))}));var A=d?i:(l?c?eo:no:c?Du:Pu)(t);return $n(A||t,(function(r,i){A&&(r=t[i=r]),tr(u,i,ur(r,n,e,i,t,a))})),u}function sr(t,n,e){var r=e.length;if(null==t)return!r;for(t=wt(t);r--;){var o=e[r],a=n[o],u=t[o];if(u===i&&!(o in t)||!a(u))return!1}return!0}function cr(t,n,e){if("function"!=typeof t)throw new Bt(o);return Oo((function(){t.apply(i,e)}),n)}function lr(t,n,e,r){var i=-1,o=wn,a=!0,u=t.length,s=[],c=n.length;if(!u)return s;e&&(n=_n(n,Fn(e))),r?(o=kn,a=!1):n.length>=200&&(o=Xn,a=!1,n=new He(n));t:for(;++i<u;){var l=t[i],d=null==e?l:e(l);if(l=r||0!==l?l:0,a&&d==d){for(var p=c;p--;)if(n[p]===d)continue t;s.push(l)}else o(n,d,r)||s.push(l)}return s}Re.templateSettings={escape:V,evaluate:G,interpolate:Q,variable:"",imports:{_:Re}},Re.prototype=qe.prototype,Re.prototype.constructor=Re,Ne.prototype=Le(qe.prototype),Ne.prototype.constructor=Ne,We.prototype=Le(qe.prototype),We.prototype.constructor=We,Fe.prototype.clear=function(){this.__data__=Ee?Ee(null):{},this.size=0},Fe.prototype.delete=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n},Fe.prototype.get=function(t){var n=this.__data__;if(Ee){var e=n[t];return e===a?i:e}return Dt.call(n,t)?n[t]:i},Fe.prototype.has=function(t){var n=this.__data__;return Ee?n[t]!==i:Dt.call(n,t)},Fe.prototype.set=function(t,n){var e=this.__data__;return this.size+=this.has(t)?0:1,e[t]=Ee&&n===i?a:n,this},Ze.prototype.clear=function(){this.__data__=[],this.size=0},Ze.prototype.delete=function(t){var n=this.__data__,e=nr(n,t);return!(e<0||(e==n.length-1?n.pop():rn.call(n,e,1),--this.size,0))},Ze.prototype.get=function(t){var n=this.__data__,e=nr(n,t);return e<0?i:n[e][1]},Ze.prototype.has=function(t){return nr(this.__data__,t)>-1},Ze.prototype.set=function(t,n){var e=this.__data__,r=nr(e,t);return r<0?(++this.size,e.push([t,n])):e[r][1]=n,this},Xe.prototype.clear=function(){this.size=0,this.__data__={hash:new Fe,map:new(we||Ze),string:new Fe}},Xe.prototype.delete=function(t){var n=uo(this,t).delete(t);return this.size-=n?1:0,n},Xe.prototype.get=function(t){return uo(this,t).get(t)},Xe.prototype.has=function(t){return uo(this,t).has(t)},Xe.prototype.set=function(t,n){var e=uo(this,t),r=e.size;return e.set(t,n),this.size+=e.size==r?0:1,this},He.prototype.add=He.prototype.push=function(t){return this.__data__.set(t,a),this},He.prototype.has=function(t){return this.__data__.has(t)},Ye.prototype.clear=function(){this.__data__=new Ze,this.size=0},Ye.prototype.delete=function(t){var n=this.__data__,e=n.delete(t);return this.size=n.size,e},Ye.prototype.get=function(t){return this.__data__.get(t)},Ye.prototype.has=function(t){return this.__data__.has(t)},Ye.prototype.set=function(t,n){var e=this.__data__;if(e instanceof Ze){var r=e.__data__;if(!we||r.length<199)return r.push([t,n]),this.size=++e.size,this;e=this.__data__=new Xe(r)}return e.set(t,n),this.size=e.size,this};var dr=Ti(vr),pr=Ti($r,!0);function fr(t,n){var e=!0;return dr(t,(function(t,r,i){return e=!!n(t,r,i)})),e}function gr(t,n,e){for(var r=-1,o=t.length;++r<o;){var a=t[r],u=n(a);if(null!=u&&(s===i?u==u&&!cu(u):e(u,s)))var s=u,c=a}return c}function hr(t,n){var e=[];return dr(t,(function(t,r,i){n(t,r,i)&&e.push(t)})),e}function Ar(t,n,e,r,i){var o=-1,a=t.length;for(e||(e=Ao),i||(i=[]);++o<a;){var u=t[o];n>0&&e(u)?n>1?Ar(u,n-1,e,r,i):Bn(i,u):r||(i[i.length]=u)}return i}var mr=Pi(),br=Pi(!0);function vr(t,n){return t&&mr(t,n,Pu)}function $r(t,n){return t&&br(t,n,Pu)}function Cr(t,n){return xn(n,(function(n){return Ka(t[n])}))}function yr(t,n){for(var e=0,r=(n=mi(n,t)).length;null!=t&&e<r;)t=t[Uo(n[e++])];return e&&e==r?t:i}function xr(t,n,e){var r=n(t);return Za(t)?r:Bn(r,e(t))}function wr(t){return null==t?t===i?"[object Undefined]":"[object Null]":sn&&sn in wt(t)?function(t){var n=Dt.call(t,sn),e=t[sn];try{t[sn]=i;var r=!0}catch(t){}var o=It.call(t);return r&&(n?t[sn]=e:delete t[sn]),o}(t):function(t){return It.call(t)}(t)}function kr(t,n){return t>n}function _r(t,n){return null!=t&&Dt.call(t,n)}function Br(t,n){return null!=t&&n in wt(t)}function Er(t,n,e){for(var o=e?kn:wn,a=t[0].length,u=t.length,s=u,c=r(u),l=1/0,d=[];s--;){var p=t[s];s&&n&&(p=_n(p,Fn(n))),l=be(p.length,l),c[s]=!e&&(n||a>=120&&p.length>=120)?new He(s&&p):i}p=t[0];var f=-1,g=c[0];t:for(;++f<a&&d.length<l;){var h=p[f],A=n?n(h):h;if(h=e||0!==h?h:0,!(g?Xn(g,A):o(d,A,e))){for(s=u;--s;){var m=c[s];if(!(m?Xn(m,A):o(t[s],A,e)))continue t}g&&g.push(A),d.push(h)}}return d}function Sr(t,n,e){var r=null==(t=_o(t,n=mi(n,t)))?t:t[Uo(Qo(n))];return null==r?i:bn(r,t,e)}function Or(t){return eu(t)&&wr(t)==h}function Tr(t,n,e,r,o){return t===n||(null==t||null==n||!eu(t)&&!eu(n)?t!=t&&n!=n:function(t,n,e,r,o,a){var u=Za(t),s=Za(n),c=u?A:fo(t),l=s?A:fo(n),d=(c=c==h?w:c)==w,p=(l=l==h?w:l)==w,f=c==l;if(f&&Va(t)){if(!Va(n))return!1;u=!0,d=!1}if(f&&!d)return a||(a=new Ye),u||lu(t)?Ji(t,n,e,r,o,a):function(t,n,e,r,i,o,a){switch(e){case P:if(t.byteLength!=n.byteLength||t.byteOffset!=n.byteOffset)return!1;t=t.buffer,n=n.buffer;case T:return!(t.byteLength!=n.byteLength||!o(new Nt(t),new Nt(n)));case m:case b:case x:return qa(+t,+n);case v:return t.name==n.name&&t.message==n.message;case _:case E:return t==n+"";case y:var u=te;case B:var s=1&r;if(u||(u=re),t.size!=n.size&&!s)return!1;var c=a.get(t);if(c)return c==n;r|=2,a.set(t,n);var l=Ji(u(t),u(n),r,i,o,a);return a.delete(t),l;case S:if(Me)return Me.call(t)==Me.call(n)}return!1}(t,n,c,e,r,o,a);if(!(1&e)){var g=d&&Dt.call(t,"__wrapped__"),$=p&&Dt.call(n,"__wrapped__");if(g||$){var C=g?t.value():t,k=$?n.value():n;return a||(a=new Ye),o(C,k,e,r,a)}}return!!f&&(a||(a=new Ye),function(t,n,e,r,o,a){var u=1&e,s=no(t),c=s.length;if(c!=no(n).length&&!u)return!1;for(var l=c;l--;){var d=s[l];if(!(u?d in n:Dt.call(n,d)))return!1}var p=a.get(t),f=a.get(n);if(p&&f)return p==n&&f==t;var g=!0;a.set(t,n),a.set(n,t);for(var h=u;++l<c;){var A=t[d=s[l]],m=n[d];if(r)var b=u?r(m,A,d,n,t,a):r(A,m,d,t,n,a);if(!(b===i?A===m||o(A,m,e,r,a):b)){g=!1;break}h||(h="constructor"==d)}if(g&&!h){var v=t.constructor,$=n.constructor;v==$||!("constructor"in t)||!("constructor"in n)||"function"==typeof v&&v instanceof v&&"function"==typeof $&&$ instanceof $||(g=!1)}return a.delete(t),a.delete(n),g}(t,n,e,r,o,a))}(t,n,e,r,Tr,o))}function Pr(t,n,e,r){var o=e.length,a=o,u=!r;if(null==t)return!a;for(t=wt(t);o--;){var s=e[o];if(u&&s[2]?s[1]!==t[s[0]]:!(s[0]in t))return!1}for(;++o<a;){var c=(s=e[o])[0],l=t[c],d=s[1];if(u&&s[2]){if(l===i&&!(c in t))return!1}else{var p=new Ye;if(r)var f=r(l,d,c,t,n,p);if(!(f===i?Tr(d,l,3,r,p):f))return!1}}return!0}function Dr(t){return!(!nu(t)||(n=t,jt&&jt in n))&&(Ka(t)?Rt:ht).test(Ro(t));var n}function zr(t){return"function"==typeof t?t:null==t?is:"object"==typeof t?Za(t)?Rr(t[0],t[1]):Ur(t):fs(t)}function jr(t){if(!yo(t))return Ae(t);var n=[];for(var e in wt(t))Dt.call(t,e)&&"constructor"!=e&&n.push(e);return n}function Ir(t,n){return t<n}function Mr(t,n){var e=-1,i=Ha(t)?r(t.length):[];return dr(t,(function(t,r,o){i[++e]=n(t,r,o)})),i}function Ur(t){var n=so(t);return 1==n.length&&n[0][2]?wo(n[0][0],n[0][1]):function(e){return e===t||Pr(e,t,n)}}function Rr(t,n){return vo(t)&&xo(n)?wo(Uo(t),n):function(e){var r=Bu(e,t);return r===i&&r===n?Eu(e,t):Tr(n,r,3)}}function Lr(t,n,e,r,o){t!==n&&mr(n,(function(a,u){if(o||(o=new Ye),nu(a))!function(t,n,e,r,o,a,u){var s=Eo(t,e),c=Eo(n,e),l=u.get(c);if(l)Je(t,e,l);else{var d=a?a(s,c,e+"",t,n,u):i,p=d===i;if(p){var f=Za(c),g=!f&&Va(c),h=!f&&!g&&lu(c);d=c,f||g||h?Za(s)?d=s:Ya(s)?d=Bi(s):g?(p=!1,d=Ci(c,!0)):h?(p=!1,d=xi(c,!0)):d=[]:ou(c)||Fa(c)?(d=s,Fa(s)?d=bu(s):nu(s)&&!Ka(s)||(d=ho(c))):p=!1}p&&(u.set(c,d),o(d,c,r,a,u),u.delete(c)),Je(t,e,d)}}(t,n,u,e,Lr,r,o);else{var s=r?r(Eo(t,u),a,u+"",t,n,o):i;s===i&&(s=a),Je(t,u,s)}}),Du)}function qr(t,n){var e=t.length;if(e)return mo(n+=n<0?e:0,e)?t[n]:i}function Nr(t,n,e){n=n.length?_n(n,(function(t){return Za(t)?function(n){return yr(n,1===t.length?t[0]:t)}:t})):[is];var r=-1;return n=_n(n,Fn(ao())),function(t,n){var r=t.length;for(t.sort((function(t,n){return function(t,n,e){for(var r=-1,i=t.criteria,o=n.criteria,a=i.length,u=e.length;++r<a;){var s=wi(i[r],o[r]);if(s)return r>=u?s:s*("desc"==e[r]?-1:1)}return t.index-n.index}(t,n,e)}));r--;)t[r]=t[r].value;return t}(Mr(t,(function(t,e,i){return{criteria:_n(n,(function(n){return n(t)})),index:++r,value:t}})))}function Wr(t,n,e){for(var r=-1,i=n.length,o={};++r<i;){var a=n[r],u=yr(t,a);e(u,a)&&Qr(o,mi(a,t),u)}return o}function Fr(t,n,e,r){var i=r?jn:zn,o=-1,a=n.length,u=t;for(t===n&&(n=Bi(n)),e&&(u=_n(t,Fn(e)));++o<a;)for(var s=0,c=n[o],l=e?e(c):c;(s=i(u,l,s,r))>-1;)u!==t&&rn.call(u,s,1),rn.call(t,s,1);return t}function Zr(t,n){for(var e=t?n.length:0,r=e-1;e--;){var i=n[e];if(e==r||i!==o){var o=i;mo(i)?rn.call(t,i,1):ci(t,i)}}return t}function Xr(t,n){return t+de(Ce()*(n-t+1))}function Hr(t,n){var e="";if(!t||n<1||n>d)return e;do{n%2&&(e+=t),(n=de(n/2))&&(t+=t)}while(n);return e}function Yr(t,n){return To(ko(t,n,is),t+"")}function Vr(t){return Ge(qu(t))}function Gr(t,n){var e=qu(t);return zo(e,ar(n,0,e.length))}function Qr(t,n,e,r){if(!nu(t))return t;for(var o=-1,a=(n=mi(n,t)).length,u=a-1,s=t;null!=s&&++o<a;){var c=Uo(n[o]),l=e;if("__proto__"===c||"constructor"===c||"prototype"===c)return t;if(o!=u){var d=s[c];(l=r?r(d,c,s):i)===i&&(l=nu(d)?d:mo(n[o+1])?[]:{})}tr(s,c,l),s=s[c]}return t}var Kr=Se?function(t,n){return Se.set(t,n),t}:is,Jr=ln?function(t,n){return ln(t,"toString",{configurable:!0,enumerable:!1,value:ns(n),writable:!0})}:is;function ti(t){return zo(qu(t))}function ni(t,n,e){var i=-1,o=t.length;n<0&&(n=-n>o?0:o+n),(e=e>o?o:e)<0&&(e+=o),o=n>e?0:e-n>>>0,n>>>=0;for(var a=r(o);++i<o;)a[i]=t[i+n];return a}function ei(t,n){var e;return dr(t,(function(t,r,i){return!(e=n(t,r,i))})),!!e}function ri(t,n,e){var r=0,i=null==t?r:t.length;if("number"==typeof n&&n==n&&i<=2147483647){for(;r<i;){var o=r+i>>>1,a=t[o];null!==a&&!cu(a)&&(e?a<=n:a<n)?r=o+1:i=o}return i}return ii(t,n,is,e)}function ii(t,n,e,r){var o=0,a=null==t?0:t.length;if(0===a)return 0;for(var u=(n=e(n))!=n,s=null===n,c=cu(n),l=n===i;o<a;){var d=de((o+a)/2),p=e(t[d]),f=p!==i,g=null===p,h=p==p,A=cu(p);if(u)var m=r||h;else m=l?h&&(r||f):s?h&&f&&(r||!g):c?h&&f&&!g&&(r||!A):!g&&!A&&(r?p<=n:p<n);m?o=d+1:a=d}return be(a,4294967294)}function oi(t,n){for(var e=-1,r=t.length,i=0,o=[];++e<r;){var a=t[e],u=n?n(a):a;if(!e||!qa(u,s)){var s=u;o[i++]=0===a?0:a}}return o}function ai(t){return"number"==typeof t?t:cu(t)?p:+t}function ui(t){if("string"==typeof t)return t;if(Za(t))return _n(t,ui)+"";if(cu(t))return Ue?Ue.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}function si(t,n,e){var r=-1,i=wn,o=t.length,a=!0,u=[],s=u;if(e)a=!1,i=kn;else if(o>=200){var c=n?null:Hi(t);if(c)return re(c);a=!1,i=Xn,s=new He}else s=n?[]:u;t:for(;++r<o;){var l=t[r],d=n?n(l):l;if(l=e||0!==l?l:0,a&&d==d){for(var p=s.length;p--;)if(s[p]===d)continue t;n&&s.push(d),u.push(l)}else i(s,d,e)||(s!==u&&s.push(d),u.push(l))}return u}function ci(t,n){return null==(t=_o(t,n=mi(n,t)))||delete t[Uo(Qo(n))]}function li(t,n,e,r){return Qr(t,n,e(yr(t,n)),r)}function di(t,n,e,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&n(t[o],o,t););return e?ni(t,r?0:o,r?o+1:i):ni(t,r?o+1:0,r?i:o)}function pi(t,n){var e=t;return e instanceof We&&(e=e.value()),En(n,(function(t,n){return n.func.apply(n.thisArg,Bn([t],n.args))}),e)}function fi(t,n,e){var i=t.length;if(i<2)return i?si(t[0]):[];for(var o=-1,a=r(i);++o<i;)for(var u=t[o],s=-1;++s<i;)s!=o&&(a[o]=lr(a[o]||u,t[s],n,e));return si(Ar(a,1),n,e)}function gi(t,n,e){for(var r=-1,o=t.length,a=n.length,u={};++r<o;){var s=r<a?n[r]:i;e(u,t[r],s)}return u}function hi(t){return Ya(t)?t:[]}function Ai(t){return"function"==typeof t?t:is}function mi(t,n){return Za(t)?t:vo(t,n)?[t]:Mo(vu(t))}var bi=Yr;function vi(t,n,e){var r=t.length;return e=e===i?r:e,!n&&e>=r?t:ni(t,n,e)}var $i=dn||function(t){return an.clearTimeout(t)};function Ci(t,n){if(n)return t.slice();var e=t.length,r=Wt?Wt(e):new t.constructor(e);return t.copy(r),r}function yi(t){var n=new t.constructor(t.byteLength);return new Nt(n).set(new Nt(t)),n}function xi(t,n){var e=n?yi(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.length)}function wi(t,n){if(t!==n){var e=t!==i,r=null===t,o=t==t,a=cu(t),u=n!==i,s=null===n,c=n==n,l=cu(n);if(!s&&!l&&!a&&t>n||a&&u&&c&&!s&&!l||r&&u&&c||!e&&c||!o)return 1;if(!r&&!a&&!l&&t<n||l&&e&&o&&!r&&!a||s&&e&&o||!u&&o||!c)return-1}return 0}function ki(t,n,e,i){for(var o=-1,a=t.length,u=e.length,s=-1,c=n.length,l=me(a-u,0),d=r(c+l),p=!i;++s<c;)d[s]=n[s];for(;++o<u;)(p||o<a)&&(d[e[o]]=t[o]);for(;l--;)d[s++]=t[o++];return d}function _i(t,n,e,i){for(var o=-1,a=t.length,u=-1,s=e.length,c=-1,l=n.length,d=me(a-s,0),p=r(d+l),f=!i;++o<d;)p[o]=t[o];for(var g=o;++c<l;)p[g+c]=n[c];for(;++u<s;)(f||o<a)&&(p[g+e[u]]=t[o++]);return p}function Bi(t,n){var e=-1,i=t.length;for(n||(n=r(i));++e<i;)n[e]=t[e];return n}function Ei(t,n,e,r){var o=!e;e||(e={});for(var a=-1,u=n.length;++a<u;){var s=n[a],c=r?r(e[s],t[s],s,e,t):i;c===i&&(c=t[s]),o?ir(e,s,c):tr(e,s,c)}return e}function Si(t,n){return function(e,r){var i=Za(e)?vn:er,o=n?n():{};return i(e,t,ao(r,2),o)}}function Oi(t){return Yr((function(n,e){var r=-1,o=e.length,a=o>1?e[o-1]:i,u=o>2?e[2]:i;for(a=t.length>3&&"function"==typeof a?(o--,a):i,u&&bo(e[0],e[1],u)&&(a=o<3?i:a,o=1),n=wt(n);++r<o;){var s=e[r];s&&t(n,s,r,a)}return n}))}function Ti(t,n){return function(e,r){if(null==e)return e;if(!Ha(e))return t(e,r);for(var i=e.length,o=n?i:-1,a=wt(e);(n?o--:++o<i)&&!1!==r(a[o],o,a););return e}}function Pi(t){return function(n,e,r){for(var i=-1,o=wt(n),a=r(n),u=a.length;u--;){var s=a[t?u:++i];if(!1===e(o[s],s,o))break}return n}}function Di(t){return function(n){var e=Jn(n=vu(n))?ae(n):i,r=e?e[0]:n.charAt(0),o=e?vi(e,1).join(""):n.slice(1);return r[t]()+o}}function zi(t){return function(n){return En(Ku(Fu(n).replace(Ft,"")),t,"")}}function ji(t){return function(){var n=arguments;switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3]);case 5:return new t(n[0],n[1],n[2],n[3],n[4]);case 6:return new t(n[0],n[1],n[2],n[3],n[4],n[5]);case 7:return new t(n[0],n[1],n[2],n[3],n[4],n[5],n[6])}var e=Le(t.prototype),r=t.apply(e,n);return nu(r)?r:e}}function Ii(t){return function(n,e,r){var o=wt(n);if(!Ha(n)){var a=ao(e,3);n=Pu(n),e=function(t){return a(o[t],t,o)}}var u=t(n,e,r);return u>-1?o[a?n[u]:u]:i}}function Mi(t){return to((function(n){var e=n.length,r=e,a=Ne.prototype.thru;for(t&&n.reverse();r--;){var u=n[r];if("function"!=typeof u)throw new Bt(o);if(a&&!s&&"wrapper"==io(u))var s=new Ne([],!0)}for(r=s?r:e;++r<e;){var c=io(u=n[r]),l="wrapper"==c?ro(u):i;s=l&&$o(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?s[io(l[0])].apply(s,l[3]):1==u.length&&$o(u)?s[c]():s.thru(u)}return function(){var t=arguments,r=t[0];if(s&&1==t.length&&Za(r))return s.plant(r).value();for(var i=0,o=e?n[i].apply(this,t):r;++i<e;)o=n[i].call(this,o);return o}}))}function Ui(t,n,e,o,a,u,s,l,d,p){var f=n&c,g=1&n,h=2&n,A=24&n,m=512&n,b=h?i:ji(t);return function i(){for(var c=arguments.length,v=r(c),$=c;$--;)v[$]=arguments[$];if(A)var C=oo(i),y=Vn(v,C);if(o&&(v=ki(v,o,a,A)),u&&(v=_i(v,u,s,A)),c-=y,A&&c<p){var x=ee(v,C);return Zi(t,n,Ui,i.placeholder,e,v,x,l,d,p-c)}var w=g?e:this,k=h?w[t]:t;return c=v.length,l?v=Bo(v,l):m&&c>1&&v.reverse(),f&&d<c&&(v.length=d),this&&this!==an&&this instanceof i&&(k=b||ji(k)),k.apply(w,v)}}function Ri(t,n){return function(e,r){return function(t,n,e,r){return vr(t,(function(t,i,o){n(r,e(t),i,o)})),r}(e,t,n(r),{})}}function Li(t,n){return function(e,r){var o;if(e===i&&r===i)return n;if(e!==i&&(o=e),r!==i){if(o===i)return r;"string"==typeof e||"string"==typeof r?(e=ui(e),r=ui(r)):(e=ai(e),r=ai(r)),o=t(e,r)}return o}}function qi(t){return to((function(n){return n=_n(n,Fn(ao())),Yr((function(e){var r=this;return t(n,(function(t){return bn(t,r,e)}))}))}))}function Ni(t,n){var e=(n=n===i?" ":ui(n)).length;if(e<2)return e?Hr(n,t):n;var r=Hr(n,le(t/oe(n)));return Jn(n)?vi(ae(r),0,t).join(""):r.slice(0,t)}function Wi(t){return function(n,e,o){return o&&"number"!=typeof o&&bo(n,e,o)&&(e=o=i),n=gu(n),e===i?(e=n,n=0):e=gu(e),function(t,n,e,i){for(var o=-1,a=me(le((n-t)/(e||1)),0),u=r(a);a--;)u[i?a:++o]=t,t+=e;return u}(n,e,o=o===i?n<e?1:-1:gu(o),t)}}function Fi(t){return function(n,e){return"string"==typeof n&&"string"==typeof e||(n=mu(n),e=mu(e)),t(n,e)}}function Zi(t,n,e,r,o,a,u,c,l,d){var p=8&n;n|=p?s:64,4&(n&=~(p?64:s))||(n&=-4);var f=[t,n,o,p?a:i,p?u:i,p?i:a,p?i:u,c,l,d],g=e.apply(i,f);return $o(t)&&So(g,f),g.placeholder=r,Po(g,t,n)}function Xi(t){var n=xt[t];return function(t,e){if(t=mu(t),(e=null==e?0:be(hu(e),292))&&ge(t)){var r=(vu(t)+"e").split("e");return+((r=(vu(n(r[0]+"e"+(+r[1]+e)))+"e").split("e"))[0]+"e"+(+r[1]-e))}return n(t)}}var Hi=_e&&1/re(new _e([,-0]))[1]==l?function(t){return new _e(t)}:cs;function Yi(t){return function(n){var e=fo(n);return e==y?te(n):e==B?ie(n):function(t,n){return _n(n,(function(n){return[n,t[n]]}))}(n,t(n))}}function Vi(t,n,e,a,l,d,p,f){var g=2&n;if(!g&&"function"!=typeof t)throw new Bt(o);var h=a?a.length:0;if(h||(n&=-97,a=l=i),p=p===i?p:me(hu(p),0),f=f===i?f:hu(f),h-=l?l.length:0,64&n){var A=a,m=l;a=l=i}var b=g?i:ro(t),v=[t,n,e,a,l,A,m,d,p,f];if(b&&function(t,n){var e=t[1],r=n[1],i=e|r,o=i<131,a=r==c&&8==e||r==c&&256==e&&t[7].length<=n[8]||384==r&&n[7].length<=n[8]&&8==e;if(!o&&!a)return t;1&r&&(t[2]=n[2],i|=1&e?0:4);var s=n[3];if(s){var l=t[3];t[3]=l?ki(l,s,n[4]):s,t[4]=l?ee(t[3],u):n[4]}(s=n[5])&&(l=t[5],t[5]=l?_i(l,s,n[6]):s,t[6]=l?ee(t[5],u):n[6]),(s=n[7])&&(t[7]=s),r&c&&(t[8]=null==t[8]?n[8]:be(t[8],n[8])),null==t[9]&&(t[9]=n[9]),t[0]=n[0],t[1]=i}(v,b),t=v[0],n=v[1],e=v[2],a=v[3],l=v[4],!(f=v[9]=v[9]===i?g?0:t.length:me(v[9]-h,0))&&24&n&&(n&=-25),n&&1!=n)$=8==n||16==n?function(t,n,e){var o=ji(t);return function a(){for(var u=arguments.length,s=r(u),c=u,l=oo(a);c--;)s[c]=arguments[c];var d=u<3&&s[0]!==l&&s[u-1]!==l?[]:ee(s,l);return(u-=d.length)<e?Zi(t,n,Ui,a.placeholder,i,s,d,i,i,e-u):bn(this&&this!==an&&this instanceof a?o:t,this,s)}}(t,n,f):n!=s&&33!=n||l.length?Ui.apply(i,v):function(t,n,e,i){var o=1&n,a=ji(t);return function n(){for(var u=-1,s=arguments.length,c=-1,l=i.length,d=r(l+s),p=this&&this!==an&&this instanceof n?a:t;++c<l;)d[c]=i[c];for(;s--;)d[c++]=arguments[++u];return bn(p,o?e:this,d)}}(t,n,e,a);else var $=function(t,n,e){var r=1&n,i=ji(t);return function n(){return(this&&this!==an&&this instanceof n?i:t).apply(r?e:this,arguments)}}(t,n,e);return Po((b?Kr:So)($,v),t,n)}function Gi(t,n,e,r){return t===i||qa(t,Ot[e])&&!Dt.call(r,e)?n:t}function Qi(t,n,e,r,o,a){return nu(t)&&nu(n)&&(a.set(n,t),Lr(t,n,i,Qi,a),a.delete(n)),t}function Ki(t){return ou(t)?i:t}function Ji(t,n,e,r,o,a){var u=1&e,s=t.length,c=n.length;if(s!=c&&!(u&&c>s))return!1;var l=a.get(t),d=a.get(n);if(l&&d)return l==n&&d==t;var p=-1,f=!0,g=2&e?new He:i;for(a.set(t,n),a.set(n,t);++p<s;){var h=t[p],A=n[p];if(r)var m=u?r(A,h,p,n,t,a):r(h,A,p,t,n,a);if(m!==i){if(m)continue;f=!1;break}if(g){if(!On(n,(function(t,n){if(!Xn(g,n)&&(h===t||o(h,t,e,r,a)))return g.push(n)}))){f=!1;break}}else if(h!==A&&!o(h,A,e,r,a)){f=!1;break}}return a.delete(t),a.delete(n),f}function to(t){return To(ko(t,i,Xo),t+"")}function no(t){return xr(t,Pu,lo)}function eo(t){return xr(t,Du,po)}var ro=Se?function(t){return Se.get(t)}:cs;function io(t){for(var n=t.name+"",e=Oe[n],r=Dt.call(Oe,n)?e.length:0;r--;){var i=e[r],o=i.func;if(null==o||o==t)return i.name}return n}function oo(t){return(Dt.call(Re,"placeholder")?Re:t).placeholder}function ao(){var t=Re.iteratee||os;return t=t===os?zr:t,arguments.length?t(arguments[0],arguments[1]):t}function uo(t,n){var e,r,i=t.__data__;return("string"==(r=typeof(e=n))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==e:null===e)?i["string"==typeof n?"string":"hash"]:i.map}function so(t){for(var n=Pu(t),e=n.length;e--;){var r=n[e],i=t[r];n[e]=[r,i,xo(i)]}return n}function co(t,n){var e=function(t,n){return null==t?i:t[n]}(t,n);return Dr(e)?e:i}var lo=pe?function(t){return null==t?[]:(t=wt(t),xn(pe(t),(function(n){return tn.call(t,n)})))}:As,po=pe?function(t){for(var n=[];t;)Bn(n,lo(t)),t=Xt(t);return n}:As,fo=wr;function go(t,n,e){for(var r=-1,i=(n=mi(n,t)).length,o=!1;++r<i;){var a=Uo(n[r]);if(!(o=null!=t&&e(t,a)))break;t=t[a]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&tu(i)&&mo(a,i)&&(Za(t)||Fa(t))}function ho(t){return"function"!=typeof t.constructor||yo(t)?{}:Le(Xt(t))}function Ao(t){return Za(t)||Fa(t)||!!(on&&t&&t[on])}function mo(t,n){var e=typeof t;return!!(n=null==n?d:n)&&("number"==e||"symbol"!=e&&mt.test(t))&&t>-1&&t%1==0&&t<n}function bo(t,n,e){if(!nu(e))return!1;var r=typeof n;return!!("number"==r?Ha(e)&&mo(n,e.length):"string"==r&&n in e)&&qa(e[n],t)}function vo(t,n){if(Za(t))return!1;var e=typeof t;return!("number"!=e&&"symbol"!=e&&"boolean"!=e&&null!=t&&!cu(t))||J.test(t)||!K.test(t)||null!=n&&t in wt(n)}function $o(t){var n=io(t),e=Re[n];if("function"!=typeof e||!(n in We.prototype))return!1;if(t===e)return!0;var r=ro(e);return!!r&&t===r[0]}(xe&&fo(new xe(new ArrayBuffer(1)))!=P||we&&fo(new we)!=y||ke&&fo(ke.resolve())!=k||_e&&fo(new _e)!=B||Be&&fo(new Be)!=O)&&(fo=function(t){var n=wr(t),e=n==w?t.constructor:i,r=e?Ro(e):"";if(r)switch(r){case Te:return P;case Pe:return y;case De:return k;case ze:return B;case je:return O}return n});var Co=Tt?Ka:ms;function yo(t){var n=t&&t.constructor;return t===("function"==typeof n&&n.prototype||Ot)}function xo(t){return t==t&&!nu(t)}function wo(t,n){return function(e){return null!=e&&e[t]===n&&(n!==i||t in wt(e))}}function ko(t,n,e){return n=me(n===i?t.length-1:n,0),function(){for(var i=arguments,o=-1,a=me(i.length-n,0),u=r(a);++o<a;)u[o]=i[n+o];o=-1;for(var s=r(n+1);++o<n;)s[o]=i[o];return s[n]=e(u),bn(t,this,s)}}function _o(t,n){return n.length<2?t:yr(t,ni(n,0,-1))}function Bo(t,n){for(var e=t.length,r=be(n.length,e),o=Bi(t);r--;){var a=n[r];t[r]=mo(a,e)?o[a]:i}return t}function Eo(t,n){if(("constructor"!==n||"function"!=typeof t[n])&&"__proto__"!=n)return t[n]}var So=Do(Kr),Oo=Rn||function(t,n){return an.setTimeout(t,n)},To=Do(Jr);function Po(t,n,e){var r=n+"";return To(t,function(t,n){var e=n.length;if(!e)return t;var r=e-1;return n[r]=(e>1?"& ":"")+n[r],n=n.join(e>2?", ":" "),t.replace(ot,"{\n/* [wrapped with "+n+"] */\n")}(r,function(t,n){return $n(g,(function(e){var r="_."+e[0];n&e[1]&&!wn(t,r)&&t.push(r)})),t.sort()}(function(t){var n=t.match(at);return n?n[1].split(ut):[]}(r),e)))}function Do(t){var n=0,e=0;return function(){var r=ve(),o=16-(r-e);if(e=r,o>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(i,arguments)}}function zo(t,n){var e=-1,r=t.length,o=r-1;for(n=n===i?r:n;++e<n;){var a=Xr(e,o),u=t[a];t[a]=t[e],t[e]=u}return t.length=n,t}var jo,Io,Mo=(jo=ja((function(t){var n=[];return 46===t.charCodeAt(0)&&n.push(""),t.replace(tt,(function(t,e,r,i){n.push(r?i.replace(lt,"$1"):e||t)})),n}),(function(t){return 500===Io.size&&Io.clear(),t})),Io=jo.cache,jo);function Uo(t){if("string"==typeof t||cu(t))return t;var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}function Ro(t){if(null!=t){try{return Pt.call(t)}catch(t){}try{return t+""}catch(t){}}return""}function Lo(t){if(t instanceof We)return t.clone();var n=new Ne(t.__wrapped__,t.__chain__);return n.__actions__=Bi(t.__actions__),n.__index__=t.__index__,n.__values__=t.__values__,n}var qo=Yr((function(t,n){return Ya(t)?lr(t,Ar(n,1,Ya,!0)):[]})),No=Yr((function(t,n){var e=Qo(n);return Ya(e)&&(e=i),Ya(t)?lr(t,Ar(n,1,Ya,!0),ao(e,2)):[]})),Wo=Yr((function(t,n){var e=Qo(n);return Ya(e)&&(e=i),Ya(t)?lr(t,Ar(n,1,Ya,!0),i,e):[]}));function Fo(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=null==e?0:hu(e);return i<0&&(i=me(r+i,0)),Dn(t,ao(n,3),i)}function Zo(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var o=r-1;return e!==i&&(o=hu(e),o=e<0?me(r+o,0):be(o,r-1)),Dn(t,ao(n,3),o,!0)}function Xo(t){return null!=t&&t.length?Ar(t,1):[]}function Ho(t){return t&&t.length?t[0]:i}var Yo=Yr((function(t){var n=_n(t,hi);return n.length&&n[0]===t[0]?Er(n):[]})),Vo=Yr((function(t){var n=Qo(t),e=_n(t,hi);return n===Qo(e)?n=i:e.pop(),e.length&&e[0]===t[0]?Er(e,ao(n,2)):[]})),Go=Yr((function(t){var n=Qo(t),e=_n(t,hi);return(n="function"==typeof n?n:i)&&e.pop(),e.length&&e[0]===t[0]?Er(e,i,n):[]}));function Qo(t){var n=null==t?0:t.length;return n?t[n-1]:i}var Ko=Yr(Jo);function Jo(t,n){return t&&t.length&&n&&n.length?Fr(t,n):t}var ta=to((function(t,n){var e=null==t?0:t.length,r=or(t,n);return Zr(t,_n(n,(function(t){return mo(t,e)?+t:t})).sort(wi)),r}));function na(t){return null==t?t:ye.call(t)}var ea=Yr((function(t){return si(Ar(t,1,Ya,!0))})),ra=Yr((function(t){var n=Qo(t);return Ya(n)&&(n=i),si(Ar(t,1,Ya,!0),ao(n,2))})),ia=Yr((function(t){var n=Qo(t);return n="function"==typeof n?n:i,si(Ar(t,1,Ya,!0),i,n)}));function oa(t){if(!t||!t.length)return[];var n=0;return t=xn(t,(function(t){if(Ya(t))return n=me(t.length,n),!0})),Nn(n,(function(n){return _n(t,Un(n))}))}function aa(t,n){if(!t||!t.length)return[];var e=oa(t);return null==n?e:_n(e,(function(t){return bn(n,i,t)}))}var ua=Yr((function(t,n){return Ya(t)?lr(t,n):[]})),sa=Yr((function(t){return fi(xn(t,Ya))})),ca=Yr((function(t){var n=Qo(t);return Ya(n)&&(n=i),fi(xn(t,Ya),ao(n,2))})),la=Yr((function(t){var n=Qo(t);return n="function"==typeof n?n:i,fi(xn(t,Ya),i,n)})),da=Yr(oa),pa=Yr((function(t){var n=t.length,e=n>1?t[n-1]:i;return e="function"==typeof e?(t.pop(),e):i,aa(t,e)}));function fa(t){var n=Re(t);return n.__chain__=!0,n}function ga(t,n){return n(t)}var ha=to((function(t){var n=t.length,e=n?t[0]:0,r=this.__wrapped__,o=function(n){return or(n,t)};return!(n>1||this.__actions__.length)&&r instanceof We&&mo(e)?((r=r.slice(e,+e+(n?1:0))).__actions__.push({func:ga,args:[o],thisArg:i}),new Ne(r,this.__chain__).thru((function(t){return n&&!t.length&&t.push(i),t}))):this.thru(o)})),Aa=Si((function(t,n,e){Dt.call(t,e)?++t[e]:ir(t,e,1)})),ma=Ii(Fo),ba=Ii(Zo);function va(t,n){return(Za(t)?$n:dr)(t,ao(n,3))}function $a(t,n){return(Za(t)?Cn:pr)(t,ao(n,3))}var Ca=Si((function(t,n,e){Dt.call(t,e)?t[e].push(n):ir(t,e,[n])})),ya=Yr((function(t,n,e){var i=-1,o="function"==typeof n,a=Ha(t)?r(t.length):[];return dr(t,(function(t){a[++i]=o?bn(n,t,e):Sr(t,n,e)})),a})),xa=Si((function(t,n,e){ir(t,e,n)}));function wa(t,n){return(Za(t)?_n:Mr)(t,ao(n,3))}var ka=Si((function(t,n,e){t[e?0:1].push(n)}),(function(){return[[],[]]})),_a=Yr((function(t,n){if(null==t)return[];var e=n.length;return e>1&&bo(t,n[0],n[1])?n=[]:e>2&&bo(n[0],n[1],n[2])&&(n=[n[0]]),Nr(t,Ar(n,1),[])})),Ba=Tn||function(){return an.Date.now()};function Ea(t,n,e){return n=e?i:n,n=t&&null==n?t.length:n,Vi(t,c,i,i,i,i,n)}function Sa(t,n){var e;if("function"!=typeof n)throw new Bt(o);return t=hu(t),function(){return--t>0&&(e=n.apply(this,arguments)),t<=1&&(n=i),e}}var Oa=Yr((function(t,n,e){var r=1;if(e.length){var i=ee(e,oo(Oa));r|=s}return Vi(t,r,n,e,i)})),Ta=Yr((function(t,n,e){var r=3;if(e.length){var i=ee(e,oo(Ta));r|=s}return Vi(n,r,t,e,i)}));function Pa(t,n,e){var r,a,u,s,c,l,d=0,p=!1,f=!1,g=!0;if("function"!=typeof t)throw new Bt(o);function h(n){var e=r,o=a;return r=a=i,d=n,s=t.apply(o,e)}function A(t){return d=t,c=Oo(b,n),p?h(t):s}function m(t){var e=t-l;return l===i||e>=n||e<0||f&&t-d>=u}function b(){var t=Ba();if(m(t))return v(t);c=Oo(b,function(t){var e=n-(t-l);return f?be(e,u-(t-d)):e}(t))}function v(t){return c=i,g&&r?h(t):(r=a=i,s)}function $(){var t=Ba(),e=m(t);if(r=arguments,a=this,l=t,e){if(c===i)return A(l);if(f)return $i(c),c=Oo(b,n),h(l)}return c===i&&(c=Oo(b,n)),s}return n=mu(n)||0,nu(e)&&(p=!!e.leading,u=(f="maxWait"in e)?me(mu(e.maxWait)||0,n):u,g="trailing"in e?!!e.trailing:g),$.cancel=function(){c!==i&&$i(c),d=0,r=l=a=c=i},$.flush=function(){return c===i?s:v(Ba())},$}var Da=Yr((function(t,n){return cr(t,1,n)})),za=Yr((function(t,n,e){return cr(t,mu(n)||0,e)}));function ja(t,n){if("function"!=typeof t||null!=n&&"function"!=typeof n)throw new Bt(o);var e=function(){var r=arguments,i=n?n.apply(this,r):r[0],o=e.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return e.cache=o.set(i,a)||o,a};return e.cache=new(ja.Cache||Xe),e}function Ia(t){if("function"!=typeof t)throw new Bt(o);return function(){var n=arguments;switch(n.length){case 0:return!t.call(this);case 1:return!t.call(this,n[0]);case 2:return!t.call(this,n[0],n[1]);case 3:return!t.call(this,n[0],n[1],n[2])}return!t.apply(this,n)}}ja.Cache=Xe;var Ma=bi((function(t,n){var e=(n=1==n.length&&Za(n[0])?_n(n[0],Fn(ao())):_n(Ar(n,1),Fn(ao()))).length;return Yr((function(r){for(var i=-1,o=be(r.length,e);++i<o;)r[i]=n[i].call(this,r[i]);return bn(t,this,r)}))})),Ua=Yr((function(t,n){var e=ee(n,oo(Ua));return Vi(t,s,i,n,e)})),Ra=Yr((function(t,n){var e=ee(n,oo(Ra));return Vi(t,64,i,n,e)})),La=to((function(t,n){return Vi(t,256,i,i,i,n)}));function qa(t,n){return t===n||t!=t&&n!=n}var Na=Fi(kr),Wa=Fi((function(t,n){return t>=n})),Fa=Or(function(){return arguments}())?Or:function(t){return eu(t)&&Dt.call(t,"callee")&&!tn.call(t,"callee")},Za=r.isArray,Xa=pn?Fn(pn):function(t){return eu(t)&&wr(t)==T};function Ha(t){return null!=t&&tu(t.length)&&!Ka(t)}function Ya(t){return eu(t)&&Ha(t)}var Va=fe||ms,Ga=fn?Fn(fn):function(t){return eu(t)&&wr(t)==b};function Qa(t){if(!eu(t))return!1;var n=wr(t);return n==v||"[object DOMException]"==n||"string"==typeof t.message&&"string"==typeof t.name&&!ou(t)}function Ka(t){if(!nu(t))return!1;var n=wr(t);return n==$||n==C||"[object AsyncFunction]"==n||"[object Proxy]"==n}function Ja(t){return"number"==typeof t&&t==hu(t)}function tu(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=d}function nu(t){var n=typeof t;return null!=t&&("object"==n||"function"==n)}function eu(t){return null!=t&&"object"==typeof t}var ru=gn?Fn(gn):function(t){return eu(t)&&fo(t)==y};function iu(t){return"number"==typeof t||eu(t)&&wr(t)==x}function ou(t){if(!eu(t)||wr(t)!=w)return!1;var n=Xt(t);if(null===n)return!0;var e=Dt.call(n,"constructor")&&n.constructor;return"function"==typeof e&&e instanceof e&&Pt.call(e)==Mt}var au=hn?Fn(hn):function(t){return eu(t)&&wr(t)==_},uu=An?Fn(An):function(t){return eu(t)&&fo(t)==B};function su(t){return"string"==typeof t||!Za(t)&&eu(t)&&wr(t)==E}function cu(t){return"symbol"==typeof t||eu(t)&&wr(t)==S}var lu=mn?Fn(mn):function(t){return eu(t)&&tu(t.length)&&!!Kt[wr(t)]},du=Fi(Ir),pu=Fi((function(t,n){return t<=n}));function fu(t){if(!t)return[];if(Ha(t))return su(t)?ae(t):Bi(t);if(un&&t[un])return function(t){for(var n,e=[];!(n=t.next()).done;)e.push(n.value);return e}(t[un]());var n=fo(t);return(n==y?te:n==B?re:qu)(t)}function gu(t){return t?(t=mu(t))===l||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function hu(t){var n=gu(t),e=n%1;return n==n?e?n-e:n:0}function Au(t){return t?ar(hu(t),0,f):0}function mu(t){if("number"==typeof t)return t;if(cu(t))return p;if(nu(t)){var n="function"==typeof t.valueOf?t.valueOf():t;t=nu(n)?n+"":n}if("string"!=typeof t)return 0===t?t:+t;t=Wn(t);var e=gt.test(t);return e||At.test(t)?en(t.slice(2),e?2:8):ft.test(t)?p:+t}function bu(t){return Ei(t,Du(t))}function vu(t){return null==t?"":ui(t)}var $u=Oi((function(t,n){if(yo(n)||Ha(n))Ei(n,Pu(n),t);else for(var e in n)Dt.call(n,e)&&tr(t,e,n[e])})),Cu=Oi((function(t,n){Ei(n,Du(n),t)})),yu=Oi((function(t,n,e,r){Ei(n,Du(n),t,r)})),xu=Oi((function(t,n,e,r){Ei(n,Pu(n),t,r)})),wu=to(or),ku=Yr((function(t,n){t=wt(t);var e=-1,r=n.length,o=r>2?n[2]:i;for(o&&bo(n[0],n[1],o)&&(r=1);++e<r;)for(var a=n[e],u=Du(a),s=-1,c=u.length;++s<c;){var l=u[s],d=t[l];(d===i||qa(d,Ot[l])&&!Dt.call(t,l))&&(t[l]=a[l])}return t})),_u=Yr((function(t){return t.push(i,Qi),bn(ju,i,t)}));function Bu(t,n,e){var r=null==t?i:yr(t,n);return r===i?e:r}function Eu(t,n){return null!=t&&go(t,n,Br)}var Su=Ri((function(t,n,e){null!=n&&"function"!=typeof n.toString&&(n=It.call(n)),t[n]=e}),ns(is)),Ou=Ri((function(t,n,e){null!=n&&"function"!=typeof n.toString&&(n=It.call(n)),Dt.call(t,n)?t[n].push(e):t[n]=[e]}),ao),Tu=Yr(Sr);function Pu(t){return Ha(t)?Ve(t):jr(t)}function Du(t){return Ha(t)?Ve(t,!0):function(t){if(!nu(t))return function(t){var n=[];if(null!=t)for(var e in wt(t))n.push(e);return n}(t);var n=yo(t),e=[];for(var r in t)("constructor"!=r||!n&&Dt.call(t,r))&&e.push(r);return e}(t)}var zu=Oi((function(t,n,e){Lr(t,n,e)})),ju=Oi((function(t,n,e,r){Lr(t,n,e,r)})),Iu=to((function(t,n){var e={};if(null==t)return e;var r=!1;n=_n(n,(function(n){return n=mi(n,t),r||(r=n.length>1),n})),Ei(t,eo(t),e),r&&(e=ur(e,7,Ki));for(var i=n.length;i--;)ci(e,n[i]);return e})),Mu=to((function(t,n){return null==t?{}:function(t,n){return Wr(t,n,(function(n,e){return Eu(t,e)}))}(t,n)}));function Uu(t,n){if(null==t)return{};var e=_n(eo(t),(function(t){return[t]}));return n=ao(n),Wr(t,e,(function(t,e){return n(t,e[0])}))}var Ru=Yi(Pu),Lu=Yi(Du);function qu(t){return null==t?[]:Zn(t,Pu(t))}var Nu=zi((function(t,n,e){return n=n.toLowerCase(),t+(e?Wu(n):n)}));function Wu(t){return Qu(vu(t).toLowerCase())}function Fu(t){return(t=vu(t))&&t.replace(bt,Gn).replace(Zt,"")}var Zu=zi((function(t,n,e){return t+(e?"-":"")+n.toLowerCase()})),Xu=zi((function(t,n,e){return t+(e?" ":"")+n.toLowerCase()})),Hu=Di("toLowerCase"),Yu=zi((function(t,n,e){return t+(e?"_":"")+n.toLowerCase()})),Vu=zi((function(t,n,e){return t+(e?" ":"")+Qu(n)})),Gu=zi((function(t,n,e){return t+(e?" ":"")+n.toUpperCase()})),Qu=Di("toUpperCase");function Ku(t,n,e){return t=vu(t),(n=e?i:n)===i?function(t){return Vt.test(t)}(t)?function(t){return t.match(Ht)||[]}(t):function(t){return t.match(st)||[]}(t):t.match(n)||[]}var Ju=Yr((function(t,n){try{return bn(t,i,n)}catch(t){return Qa(t)?t:new Ct(t)}})),ts=to((function(t,n){return $n(n,(function(n){n=Uo(n),ir(t,n,Oa(t[n],t))})),t}));function ns(t){return function(){return t}}var es=Mi(),rs=Mi(!0);function is(t){return t}function os(t){return zr("function"==typeof t?t:ur(t,1))}var as=Yr((function(t,n){return function(e){return Sr(e,t,n)}})),us=Yr((function(t,n){return function(e){return Sr(t,e,n)}}));function ss(t,n,e){var r=Pu(n),i=Cr(n,r);null!=e||nu(n)&&(i.length||!r.length)||(e=n,n=t,t=this,i=Cr(n,Pu(n)));var o=!(nu(e)&&"chain"in e&&!e.chain),a=Ka(t);return $n(i,(function(e){var r=n[e];t[e]=r,a&&(t.prototype[e]=function(){var n=this.__chain__;if(o||n){var e=t(this.__wrapped__),i=e.__actions__=Bi(this.__actions__);return i.push({func:r,args:arguments,thisArg:t}),e.__chain__=n,e}return r.apply(t,Bn([this.value()],arguments))})})),t}function cs(){}var ls=qi(_n),ds=qi(yn),ps=qi(On);function fs(t){return vo(t)?Un(Uo(t)):function(t){return function(n){return yr(n,t)}}(t)}var gs=Wi(),hs=Wi(!0);function As(){return[]}function ms(){return!1}var bs,vs=Li((function(t,n){return t+n}),0),$s=Xi("ceil"),Cs=Li((function(t,n){return t/n}),1),ys=Xi("floor"),xs=Li((function(t,n){return t*n}),1),ws=Xi("round"),ks=Li((function(t,n){return t-n}),0);return Re.after=function(t,n){if("function"!=typeof n)throw new Bt(o);return t=hu(t),function(){if(--t<1)return n.apply(this,arguments)}},Re.ary=Ea,Re.assign=$u,Re.assignIn=Cu,Re.assignInWith=yu,Re.assignWith=xu,Re.at=wu,Re.before=Sa,Re.bind=Oa,Re.bindAll=ts,Re.bindKey=Ta,Re.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Za(t)?t:[t]},Re.chain=fa,Re.chunk=function(t,n,e){n=(e?bo(t,n,e):n===i)?1:me(hu(n),0);var o=null==t?0:t.length;if(!o||n<1)return[];for(var a=0,u=0,s=r(le(o/n));a<o;)s[u++]=ni(t,a,a+=n);return s},Re.compact=function(t){for(var n=-1,e=null==t?0:t.length,r=0,i=[];++n<e;){var o=t[n];o&&(i[r++]=o)}return i},Re.concat=function(){var t=arguments.length;if(!t)return[];for(var n=r(t-1),e=arguments[0],i=t;i--;)n[i-1]=arguments[i];return Bn(Za(e)?Bi(e):[e],Ar(n,1))},Re.cond=function(t){var n=null==t?0:t.length,e=ao();return t=n?_n(t,(function(t){if("function"!=typeof t[1])throw new Bt(o);return[e(t[0]),t[1]]})):[],Yr((function(e){for(var r=-1;++r<n;){var i=t[r];if(bn(i[0],this,e))return bn(i[1],this,e)}}))},Re.conforms=function(t){return function(t){var n=Pu(t);return function(e){return sr(e,t,n)}}(ur(t,1))},Re.constant=ns,Re.countBy=Aa,Re.create=function(t,n){var e=Le(t);return null==n?e:rr(e,n)},Re.curry=function t(n,e,r){var o=Vi(n,8,i,i,i,i,i,e=r?i:e);return o.placeholder=t.placeholder,o},Re.curryRight=function t(n,e,r){var o=Vi(n,16,i,i,i,i,i,e=r?i:e);return o.placeholder=t.placeholder,o},Re.debounce=Pa,Re.defaults=ku,Re.defaultsDeep=_u,Re.defer=Da,Re.delay=za,Re.difference=qo,Re.differenceBy=No,Re.differenceWith=Wo,Re.drop=function(t,n,e){var r=null==t?0:t.length;return r?ni(t,(n=e||n===i?1:hu(n))<0?0:n,r):[]},Re.dropRight=function(t,n,e){var r=null==t?0:t.length;return r?ni(t,0,(n=r-(n=e||n===i?1:hu(n)))<0?0:n):[]},Re.dropRightWhile=function(t,n){return t&&t.length?di(t,ao(n,3),!0,!0):[]},Re.dropWhile=function(t,n){return t&&t.length?di(t,ao(n,3),!0):[]},Re.fill=function(t,n,e,r){var o=null==t?0:t.length;return o?(e&&"number"!=typeof e&&bo(t,n,e)&&(e=0,r=o),function(t,n,e,r){var o=t.length;for((e=hu(e))<0&&(e=-e>o?0:o+e),(r=r===i||r>o?o:hu(r))<0&&(r+=o),r=e>r?0:Au(r);e<r;)t[e++]=n;return t}(t,n,e,r)):[]},Re.filter=function(t,n){return(Za(t)?xn:hr)(t,ao(n,3))},Re.flatMap=function(t,n){return Ar(wa(t,n),1)},Re.flatMapDeep=function(t,n){return Ar(wa(t,n),l)},Re.flatMapDepth=function(t,n,e){return e=e===i?1:hu(e),Ar(wa(t,n),e)},Re.flatten=Xo,Re.flattenDeep=function(t){return null!=t&&t.length?Ar(t,l):[]},Re.flattenDepth=function(t,n){return null!=t&&t.length?Ar(t,n=n===i?1:hu(n)):[]},Re.flip=function(t){return Vi(t,512)},Re.flow=es,Re.flowRight=rs,Re.fromPairs=function(t){for(var n=-1,e=null==t?0:t.length,r={};++n<e;){var i=t[n];r[i[0]]=i[1]}return r},Re.functions=function(t){return null==t?[]:Cr(t,Pu(t))},Re.functionsIn=function(t){return null==t?[]:Cr(t,Du(t))},Re.groupBy=Ca,Re.initial=function(t){return null!=t&&t.length?ni(t,0,-1):[]},Re.intersection=Yo,Re.intersectionBy=Vo,Re.intersectionWith=Go,Re.invert=Su,Re.invertBy=Ou,Re.invokeMap=ya,Re.iteratee=os,Re.keyBy=xa,Re.keys=Pu,Re.keysIn=Du,Re.map=wa,Re.mapKeys=function(t,n){var e={};return n=ao(n,3),vr(t,(function(t,r,i){ir(e,n(t,r,i),t)})),e},Re.mapValues=function(t,n){var e={};return n=ao(n,3),vr(t,(function(t,r,i){ir(e,r,n(t,r,i))})),e},Re.matches=function(t){return Ur(ur(t,1))},Re.matchesProperty=function(t,n){return Rr(t,ur(n,1))},Re.memoize=ja,Re.merge=zu,Re.mergeWith=ju,Re.method=as,Re.methodOf=us,Re.mixin=ss,Re.negate=Ia,Re.nthArg=function(t){return t=hu(t),Yr((function(n){return qr(n,t)}))},Re.omit=Iu,Re.omitBy=function(t,n){return Uu(t,Ia(ao(n)))},Re.once=function(t){return Sa(2,t)},Re.orderBy=function(t,n,e,r){return null==t?[]:(Za(n)||(n=null==n?[]:[n]),Za(e=r?i:e)||(e=null==e?[]:[e]),Nr(t,n,e))},Re.over=ls,Re.overArgs=Ma,Re.overEvery=ds,Re.overSome=ps,Re.partial=Ua,Re.partialRight=Ra,Re.partition=ka,Re.pick=Mu,Re.pickBy=Uu,Re.property=fs,Re.propertyOf=function(t){return function(n){return null==t?i:yr(t,n)}},Re.pull=Ko,Re.pullAll=Jo,Re.pullAllBy=function(t,n,e){return t&&t.length&&n&&n.length?Fr(t,n,ao(e,2)):t},Re.pullAllWith=function(t,n,e){return t&&t.length&&n&&n.length?Fr(t,n,i,e):t},Re.pullAt=ta,Re.range=gs,Re.rangeRight=hs,Re.rearg=La,Re.reject=function(t,n){return(Za(t)?xn:hr)(t,Ia(ao(n,3)))},Re.remove=function(t,n){var e=[];if(!t||!t.length)return e;var r=-1,i=[],o=t.length;for(n=ao(n,3);++r<o;){var a=t[r];n(a,r,t)&&(e.push(a),i.push(r))}return Zr(t,i),e},Re.rest=function(t,n){if("function"!=typeof t)throw new Bt(o);return Yr(t,n=n===i?n:hu(n))},Re.reverse=na,Re.sampleSize=function(t,n,e){return n=(e?bo(t,n,e):n===i)?1:hu(n),(Za(t)?Qe:Gr)(t,n)},Re.set=function(t,n,e){return null==t?t:Qr(t,n,e)},Re.setWith=function(t,n,e,r){return r="function"==typeof r?r:i,null==t?t:Qr(t,n,e,r)},Re.shuffle=function(t){return(Za(t)?Ke:ti)(t)},Re.slice=function(t,n,e){var r=null==t?0:t.length;return r?(e&&"number"!=typeof e&&bo(t,n,e)?(n=0,e=r):(n=null==n?0:hu(n),e=e===i?r:hu(e)),ni(t,n,e)):[]},Re.sortBy=_a,Re.sortedUniq=function(t){return t&&t.length?oi(t):[]},Re.sortedUniqBy=function(t,n){return t&&t.length?oi(t,ao(n,2)):[]},Re.split=function(t,n,e){return e&&"number"!=typeof e&&bo(t,n,e)&&(n=e=i),(e=e===i?f:e>>>0)?(t=vu(t))&&("string"==typeof n||null!=n&&!au(n))&&!(n=ui(n))&&Jn(t)?vi(ae(t),0,e):t.split(n,e):[]},Re.spread=function(t,n){if("function"!=typeof t)throw new Bt(o);return n=null==n?0:me(hu(n),0),Yr((function(e){var r=e[n],i=vi(e,0,n);return r&&Bn(i,r),bn(t,this,i)}))},Re.tail=function(t){var n=null==t?0:t.length;return n?ni(t,1,n):[]},Re.take=function(t,n,e){return t&&t.length?ni(t,0,(n=e||n===i?1:hu(n))<0?0:n):[]},Re.takeRight=function(t,n,e){var r=null==t?0:t.length;return r?ni(t,(n=r-(n=e||n===i?1:hu(n)))<0?0:n,r):[]},Re.takeRightWhile=function(t,n){return t&&t.length?di(t,ao(n,3),!1,!0):[]},Re.takeWhile=function(t,n){return t&&t.length?di(t,ao(n,3)):[]},Re.tap=function(t,n){return n(t),t},Re.throttle=function(t,n,e){var r=!0,i=!0;if("function"!=typeof t)throw new Bt(o);return nu(e)&&(r="leading"in e?!!e.leading:r,i="trailing"in e?!!e.trailing:i),Pa(t,n,{leading:r,maxWait:n,trailing:i})},Re.thru=ga,Re.toArray=fu,Re.toPairs=Ru,Re.toPairsIn=Lu,Re.toPath=function(t){return Za(t)?_n(t,Uo):cu(t)?[t]:Bi(Mo(vu(t)))},Re.toPlainObject=bu,Re.transform=function(t,n,e){var r=Za(t),i=r||Va(t)||lu(t);if(n=ao(n,4),null==e){var o=t&&t.constructor;e=i?r?new o:[]:nu(t)&&Ka(o)?Le(Xt(t)):{}}return(i?$n:vr)(t,(function(t,r,i){return n(e,t,r,i)})),e},Re.unary=function(t){return Ea(t,1)},Re.union=ea,Re.unionBy=ra,Re.unionWith=ia,Re.uniq=function(t){return t&&t.length?si(t):[]},Re.uniqBy=function(t,n){return t&&t.length?si(t,ao(n,2)):[]},Re.uniqWith=function(t,n){return n="function"==typeof n?n:i,t&&t.length?si(t,i,n):[]},Re.unset=function(t,n){return null==t||ci(t,n)},Re.unzip=oa,Re.unzipWith=aa,Re.update=function(t,n,e){return null==t?t:li(t,n,Ai(e))},Re.updateWith=function(t,n,e,r){return r="function"==typeof r?r:i,null==t?t:li(t,n,Ai(e),r)},Re.values=qu,Re.valuesIn=function(t){return null==t?[]:Zn(t,Du(t))},Re.without=ua,Re.words=Ku,Re.wrap=function(t,n){return Ua(Ai(n),t)},Re.xor=sa,Re.xorBy=ca,Re.xorWith=la,Re.zip=da,Re.zipObject=function(t,n){return gi(t||[],n||[],tr)},Re.zipObjectDeep=function(t,n){return gi(t||[],n||[],Qr)},Re.zipWith=pa,Re.entries=Ru,Re.entriesIn=Lu,Re.extend=Cu,Re.extendWith=yu,ss(Re,Re),Re.add=vs,Re.attempt=Ju,Re.camelCase=Nu,Re.capitalize=Wu,Re.ceil=$s,Re.clamp=function(t,n,e){return e===i&&(e=n,n=i),e!==i&&(e=(e=mu(e))==e?e:0),n!==i&&(n=(n=mu(n))==n?n:0),ar(mu(t),n,e)},Re.clone=function(t){return ur(t,4)},Re.cloneDeep=function(t){return ur(t,5)},Re.cloneDeepWith=function(t,n){return ur(t,5,n="function"==typeof n?n:i)},Re.cloneWith=function(t,n){return ur(t,4,n="function"==typeof n?n:i)},Re.conformsTo=function(t,n){return null==n||sr(t,n,Pu(n))},Re.deburr=Fu,Re.defaultTo=function(t,n){return null==t||t!=t?n:t},Re.divide=Cs,Re.endsWith=function(t,n,e){t=vu(t),n=ui(n);var r=t.length,o=e=e===i?r:ar(hu(e),0,r);return(e-=n.length)>=0&&t.slice(e,o)==n},Re.eq=qa,Re.escape=function(t){return(t=vu(t))&&Y.test(t)?t.replace(X,Qn):t},Re.escapeRegExp=function(t){return(t=vu(t))&&et.test(t)?t.replace(nt,"\\$&"):t},Re.every=function(t,n,e){var r=Za(t)?yn:fr;return e&&bo(t,n,e)&&(n=i),r(t,ao(n,3))},Re.find=ma,Re.findIndex=Fo,Re.findKey=function(t,n){return Pn(t,ao(n,3),vr)},Re.findLast=ba,Re.findLastIndex=Zo,Re.findLastKey=function(t,n){return Pn(t,ao(n,3),$r)},Re.floor=ys,Re.forEach=va,Re.forEachRight=$a,Re.forIn=function(t,n){return null==t?t:mr(t,ao(n,3),Du)},Re.forInRight=function(t,n){return null==t?t:br(t,ao(n,3),Du)},Re.forOwn=function(t,n){return t&&vr(t,ao(n,3))},Re.forOwnRight=function(t,n){return t&&$r(t,ao(n,3))},Re.get=Bu,Re.gt=Na,Re.gte=Wa,Re.has=function(t,n){return null!=t&&go(t,n,_r)},Re.hasIn=Eu,Re.head=Ho,Re.identity=is,Re.includes=function(t,n,e,r){t=Ha(t)?t:qu(t),e=e&&!r?hu(e):0;var i=t.length;return e<0&&(e=me(i+e,0)),su(t)?e<=i&&t.indexOf(n,e)>-1:!!i&&zn(t,n,e)>-1},Re.indexOf=function(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=null==e?0:hu(e);return i<0&&(i=me(r+i,0)),zn(t,n,i)},Re.inRange=function(t,n,e){return n=gu(n),e===i?(e=n,n=0):e=gu(e),function(t,n,e){return t>=be(n,e)&&t<me(n,e)}(t=mu(t),n,e)},Re.invoke=Tu,Re.isArguments=Fa,Re.isArray=Za,Re.isArrayBuffer=Xa,Re.isArrayLike=Ha,Re.isArrayLikeObject=Ya,Re.isBoolean=function(t){return!0===t||!1===t||eu(t)&&wr(t)==m},Re.isBuffer=Va,Re.isDate=Ga,Re.isElement=function(t){return eu(t)&&1===t.nodeType&&!ou(t)},Re.isEmpty=function(t){if(null==t)return!0;if(Ha(t)&&(Za(t)||"string"==typeof t||"function"==typeof t.splice||Va(t)||lu(t)||Fa(t)))return!t.length;var n=fo(t);if(n==y||n==B)return!t.size;if(yo(t))return!jr(t).length;for(var e in t)if(Dt.call(t,e))return!1;return!0},Re.isEqual=function(t,n){return Tr(t,n)},Re.isEqualWith=function(t,n,e){var r=(e="function"==typeof e?e:i)?e(t,n):i;return r===i?Tr(t,n,i,e):!!r},Re.isError=Qa,Re.isFinite=function(t){return"number"==typeof t&&ge(t)},Re.isFunction=Ka,Re.isInteger=Ja,Re.isLength=tu,Re.isMap=ru,Re.isMatch=function(t,n){return t===n||Pr(t,n,so(n))},Re.isMatchWith=function(t,n,e){return e="function"==typeof e?e:i,Pr(t,n,so(n),e)},Re.isNaN=function(t){return iu(t)&&t!=+t},Re.isNative=function(t){if(Co(t))throw new Ct("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return Dr(t)},Re.isNil=function(t){return null==t},Re.isNull=function(t){return null===t},Re.isNumber=iu,Re.isObject=nu,Re.isObjectLike=eu,Re.isPlainObject=ou,Re.isRegExp=au,Re.isSafeInteger=function(t){return Ja(t)&&t>=-9007199254740991&&t<=d},Re.isSet=uu,Re.isString=su,Re.isSymbol=cu,Re.isTypedArray=lu,Re.isUndefined=function(t){return t===i},Re.isWeakMap=function(t){return eu(t)&&fo(t)==O},Re.isWeakSet=function(t){return eu(t)&&"[object WeakSet]"==wr(t)},Re.join=function(t,n){return null==t?"":he.call(t,n)},Re.kebabCase=Zu,Re.last=Qo,Re.lastIndexOf=function(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var o=r;return e!==i&&(o=(o=hu(e))<0?me(r+o,0):be(o,r-1)),n==n?function(t,n,e){for(var r=e+1;r--;)if(t[r]===n)return r;return r}(t,n,o):Dn(t,In,o,!0)},Re.lowerCase=Xu,Re.lowerFirst=Hu,Re.lt=du,Re.lte=pu,Re.max=function(t){return t&&t.length?gr(t,is,kr):i},Re.maxBy=function(t,n){return t&&t.length?gr(t,ao(n,2),kr):i},Re.mean=function(t){return Mn(t,is)},Re.meanBy=function(t,n){return Mn(t,ao(n,2))},Re.min=function(t){return t&&t.length?gr(t,is,Ir):i},Re.minBy=function(t,n){return t&&t.length?gr(t,ao(n,2),Ir):i},Re.stubArray=As,Re.stubFalse=ms,Re.stubObject=function(){return{}},Re.stubString=function(){return""},Re.stubTrue=function(){return!0},Re.multiply=xs,Re.nth=function(t,n){return t&&t.length?qr(t,hu(n)):i},Re.noConflict=function(){return an._===this&&(an._=Ut),this},Re.noop=cs,Re.now=Ba,Re.pad=function(t,n,e){t=vu(t);var r=(n=hu(n))?oe(t):0;if(!n||r>=n)return t;var i=(n-r)/2;return Ni(de(i),e)+t+Ni(le(i),e)},Re.padEnd=function(t,n,e){t=vu(t);var r=(n=hu(n))?oe(t):0;return n&&r<n?t+Ni(n-r,e):t},Re.padStart=function(t,n,e){t=vu(t);var r=(n=hu(n))?oe(t):0;return n&&r<n?Ni(n-r,e)+t:t},Re.parseInt=function(t,n,e){return e||null==n?n=0:n&&(n=+n),$e(vu(t).replace(rt,""),n||0)},Re.random=function(t,n,e){if(e&&"boolean"!=typeof e&&bo(t,n,e)&&(n=e=i),e===i&&("boolean"==typeof n?(e=n,n=i):"boolean"==typeof t&&(e=t,t=i)),t===i&&n===i?(t=0,n=1):(t=gu(t),n===i?(n=t,t=0):n=gu(n)),t>n){var r=t;t=n,n=r}if(e||t%1||n%1){var o=Ce();return be(t+o*(n-t+nn("1e-"+((o+"").length-1))),n)}return Xr(t,n)},Re.reduce=function(t,n,e){var r=Za(t)?En:Ln,i=arguments.length<3;return r(t,ao(n,4),e,i,dr)},Re.reduceRight=function(t,n,e){var r=Za(t)?Sn:Ln,i=arguments.length<3;return r(t,ao(n,4),e,i,pr)},Re.repeat=function(t,n,e){return n=(e?bo(t,n,e):n===i)?1:hu(n),Hr(vu(t),n)},Re.replace=function(){var t=arguments,n=vu(t[0]);return t.length<3?n:n.replace(t[1],t[2])},Re.result=function(t,n,e){var r=-1,o=(n=mi(n,t)).length;for(o||(o=1,t=i);++r<o;){var a=null==t?i:t[Uo(n[r])];a===i&&(r=o,a=e),t=Ka(a)?a.call(t):a}return t},Re.round=ws,Re.runInContext=t,Re.sample=function(t){return(Za(t)?Ge:Vr)(t)},Re.size=function(t){if(null==t)return 0;if(Ha(t))return su(t)?oe(t):t.length;var n=fo(t);return n==y||n==B?t.size:jr(t).length},Re.snakeCase=Yu,Re.some=function(t,n,e){var r=Za(t)?On:ei;return e&&bo(t,n,e)&&(n=i),r(t,ao(n,3))},Re.sortedIndex=function(t,n){return ri(t,n)},Re.sortedIndexBy=function(t,n,e){return ii(t,n,ao(e,2))},Re.sortedIndexOf=function(t,n){var e=null==t?0:t.length;if(e){var r=ri(t,n);if(r<e&&qa(t[r],n))return r}return-1},Re.sortedLastIndex=function(t,n){return ri(t,n,!0)},Re.sortedLastIndexBy=function(t,n,e){return ii(t,n,ao(e,2),!0)},Re.sortedLastIndexOf=function(t,n){if(null!=t&&t.length){var e=ri(t,n,!0)-1;if(qa(t[e],n))return e}return-1},Re.startCase=Vu,Re.startsWith=function(t,n,e){return t=vu(t),e=null==e?0:ar(hu(e),0,t.length),n=ui(n),t.slice(e,e+n.length)==n},Re.subtract=ks,Re.sum=function(t){return t&&t.length?qn(t,is):0},Re.sumBy=function(t,n){return t&&t.length?qn(t,ao(n,2)):0},Re.template=function(t,n,e){var r=Re.templateSettings;e&&bo(t,n,e)&&(n=i),t=vu(t),n=yu({},n,r,Gi);var o,a,u=yu({},n.imports,r.imports,Gi),s=Pu(u),c=Zn(u,s),l=0,d=n.interpolate||vt,p="__p += '",f=kt((n.escape||vt).source+"|"+d.source+"|"+(d===Q?dt:vt).source+"|"+(n.evaluate||vt).source+"|$","g"),g="//# sourceURL="+(Dt.call(n,"sourceURL")?(n.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Qt+"]")+"\n";t.replace(f,(function(n,e,r,i,u,s){return r||(r=i),p+=t.slice(l,s).replace($t,Kn),e&&(o=!0,p+="' +\n__e("+e+") +\n'"),u&&(a=!0,p+="';\n"+u+";\n__p += '"),r&&(p+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),l=s+n.length,n})),p+="';\n";var h=Dt.call(n,"variable")&&n.variable;if(h){if(ct.test(h))throw new Ct("Invalid `variable` option passed into `_.template`")}else p="with (obj) {\n"+p+"\n}\n";p=(a?p.replace(N,""):p).replace(W,"$1").replace(F,"$1;"),p="function("+(h||"obj")+") {\n"+(h?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(o?", __e = _.escape":"")+(a?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+p+"return __p\n}";var A=Ju((function(){return yt(s,g+"return "+p).apply(i,c)}));if(A.source=p,Qa(A))throw A;return A},Re.times=function(t,n){if((t=hu(t))<1||t>d)return[];var e=f,r=be(t,f);n=ao(n),t-=f;for(var i=Nn(r,n);++e<t;)n(e);return i},Re.toFinite=gu,Re.toInteger=hu,Re.toLength=Au,Re.toLower=function(t){return vu(t).toLowerCase()},Re.toNumber=mu,Re.toSafeInteger=function(t){return t?ar(hu(t),-9007199254740991,d):0===t?t:0},Re.toString=vu,Re.toUpper=function(t){return vu(t).toUpperCase()},Re.trim=function(t,n,e){if((t=vu(t))&&(e||n===i))return Wn(t);if(!t||!(n=ui(n)))return t;var r=ae(t),o=ae(n);return vi(r,Hn(r,o),Yn(r,o)+1).join("")},Re.trimEnd=function(t,n,e){if((t=vu(t))&&(e||n===i))return t.slice(0,ue(t)+1);if(!t||!(n=ui(n)))return t;var r=ae(t);return vi(r,0,Yn(r,ae(n))+1).join("")},Re.trimStart=function(t,n,e){if((t=vu(t))&&(e||n===i))return t.replace(rt,"");if(!t||!(n=ui(n)))return t;var r=ae(t);return vi(r,Hn(r,ae(n))).join("")},Re.truncate=function(t,n){var e=30,r="...";if(nu(n)){var o="separator"in n?n.separator:o;e="length"in n?hu(n.length):e,r="omission"in n?ui(n.omission):r}var a=(t=vu(t)).length;if(Jn(t)){var u=ae(t);a=u.length}if(e>=a)return t;var s=e-oe(r);if(s<1)return r;var c=u?vi(u,0,s).join(""):t.slice(0,s);if(o===i)return c+r;if(u&&(s+=c.length-s),au(o)){if(t.slice(s).search(o)){var l,d=c;for(o.global||(o=kt(o.source,vu(pt.exec(o))+"g")),o.lastIndex=0;l=o.exec(d);)var p=l.index;c=c.slice(0,p===i?s:p)}}else if(t.indexOf(ui(o),s)!=s){var f=c.lastIndexOf(o);f>-1&&(c=c.slice(0,f))}return c+r},Re.unescape=function(t){return(t=vu(t))&&H.test(t)?t.replace(Z,se):t},Re.uniqueId=function(t){var n=++zt;return vu(t)+n},Re.upperCase=Gu,Re.upperFirst=Qu,Re.each=va,Re.eachRight=$a,Re.first=Ho,ss(Re,(bs={},vr(Re,(function(t,n){Dt.call(Re.prototype,n)||(bs[n]=t)})),bs),{chain:!1}),Re.VERSION="4.17.21",$n(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(t){Re[t].placeholder=Re})),$n(["drop","take"],(function(t,n){We.prototype[t]=function(e){e=e===i?1:me(hu(e),0);var r=this.__filtered__&&!n?new We(this):this.clone();return r.__filtered__?r.__takeCount__=be(e,r.__takeCount__):r.__views__.push({size:be(e,f),type:t+(r.__dir__<0?"Right":"")}),r},We.prototype[t+"Right"]=function(n){return this.reverse()[t](n).reverse()}})),$n(["filter","map","takeWhile"],(function(t,n){var e=n+1,r=1==e||3==e;We.prototype[t]=function(t){var n=this.clone();return n.__iteratees__.push({iteratee:ao(t,3),type:e}),n.__filtered__=n.__filtered__||r,n}})),$n(["head","last"],(function(t,n){var e="take"+(n?"Right":"");We.prototype[t]=function(){return this[e](1).value()[0]}})),$n(["initial","tail"],(function(t,n){var e="drop"+(n?"":"Right");We.prototype[t]=function(){return this.__filtered__?new We(this):this[e](1)}})),We.prototype.compact=function(){return this.filter(is)},We.prototype.find=function(t){return this.filter(t).head()},We.prototype.findLast=function(t){return this.reverse().find(t)},We.prototype.invokeMap=Yr((function(t,n){return"function"==typeof t?new We(this):this.map((function(e){return Sr(e,t,n)}))})),We.prototype.reject=function(t){return this.filter(Ia(ao(t)))},We.prototype.slice=function(t,n){t=hu(t);var e=this;return e.__filtered__&&(t>0||n<0)?new We(e):(t<0?e=e.takeRight(-t):t&&(e=e.drop(t)),n!==i&&(e=(n=hu(n))<0?e.dropRight(-n):e.take(n-t)),e)},We.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},We.prototype.toArray=function(){return this.take(f)},vr(We.prototype,(function(t,n){var e=/^(?:filter|find|map|reject)|While$/.test(n),r=/^(?:head|last)$/.test(n),o=Re[r?"take"+("last"==n?"Right":""):n],a=r||/^find/.test(n);o&&(Re.prototype[n]=function(){var n=this.__wrapped__,u=r?[1]:arguments,s=n instanceof We,c=u[0],l=s||Za(n),d=function(t){var n=o.apply(Re,Bn([t],u));return r&&p?n[0]:n};l&&e&&"function"==typeof c&&1!=c.length&&(s=l=!1);var p=this.__chain__,f=!!this.__actions__.length,g=a&&!p,h=s&&!f;if(!a&&l){n=h?n:new We(this);var A=t.apply(n,u);return A.__actions__.push({func:ga,args:[d],thisArg:i}),new Ne(A,p)}return g&&h?t.apply(this,u):(A=this.thru(d),g?r?A.value()[0]:A.value():A)})})),$n(["pop","push","shift","sort","splice","unshift"],(function(t){var n=Et[t],e=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);Re.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return n.apply(Za(i)?i:[],t)}return this[e]((function(e){return n.apply(Za(e)?e:[],t)}))}})),vr(We.prototype,(function(t,n){var e=Re[n];if(e){var r=e.name+"";Dt.call(Oe,r)||(Oe[r]=[]),Oe[r].push({name:n,func:e})}})),Oe[Ui(i,2).name]=[{name:"wrapper",func:i}],We.prototype.clone=function(){var t=new We(this.__wrapped__);return t.__actions__=Bi(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Bi(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Bi(this.__views__),t},We.prototype.reverse=function(){if(this.__filtered__){var t=new We(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},We.prototype.value=function(){var t=this.__wrapped__.value(),n=this.__dir__,e=Za(t),r=n<0,i=e?t.length:0,o=function(t,n,e){for(var r=-1,i=e.length;++r<i;){var o=e[r],a=o.size;switch(o.type){case"drop":t+=a;break;case"dropRight":n-=a;break;case"take":n=be(n,t+a);break;case"takeRight":t=me(t,n-a)}}return{start:t,end:n}}(0,i,this.__views__),a=o.start,u=o.end,s=u-a,c=r?u:a-1,l=this.__iteratees__,d=l.length,p=0,f=be(s,this.__takeCount__);if(!e||!r&&i==s&&f==s)return pi(t,this.__actions__);var g=[];t:for(;s--&&p<f;){for(var h=-1,A=t[c+=n];++h<d;){var m=l[h],b=m.iteratee,v=m.type,$=b(A);if(2==v)A=$;else if(!$){if(1==v)continue t;break t}}g[p++]=A}return g},Re.prototype.at=ha,Re.prototype.chain=function(){return fa(this)},Re.prototype.commit=function(){return new Ne(this.value(),this.__chain__)},Re.prototype.next=function(){this.__values__===i&&(this.__values__=fu(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?i:this.__values__[this.__index__++]}},Re.prototype.plant=function(t){for(var n,e=this;e instanceof qe;){var r=Lo(e);r.__index__=0,r.__values__=i,n?o.__wrapped__=r:n=r;var o=r;e=e.__wrapped__}return o.__wrapped__=t,n},Re.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof We){var n=t;return this.__actions__.length&&(n=new We(this)),(n=n.reverse()).__actions__.push({func:ga,args:[na],thisArg:i}),new Ne(n,this.__chain__)}return this.thru(na)},Re.prototype.toJSON=Re.prototype.valueOf=Re.prototype.value=function(){return pi(this.__wrapped__,this.__actions__)},Re.prototype.first=Re.prototype.head,un&&(Re.prototype[un]=function(){return this}),Re}();an._=ce,(r=function(){return ce}.call(n,e,n,t))===i||(t.exports=r)}.call(this)},26133:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return t.isReady?e("div",{staticClass:"stock-app container-fluid",attrs:{id:"app"}},[e("StockHeader"),t._v(" "),e("Search",{on:{search:t.onSearch,applyFilter:t.applyFilter}}),t._v(" "),t.isOverview?e("LowFilter",{attrs:{filters:t.filters},on:{lowStockChecked:t.onLowStockChecked}}):t._e(),t._v(" "),e("div",{staticClass:"card container-fluid pa-2 clearfix"},[e("router-view",{staticClass:"view",on:{resetFilters:t.resetFilters,fetch:t.fetch}}),t._v(" "),e("PSPagination",{attrs:{"current-index":t.currentPagination,"pages-count":t.pagesCount},on:{pageChanged:t.onPageChanged}})],1)],1):t._e()};r._withStripped=!0;var i=e(73770);const o=i.Z;e(83408);var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/pages/stock/components/app.vue";const u=a.exports},25234:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("nav",{attrs:{"aria-label":"Breadcrumb"}},[e("ol",{staticClass:"breadcrumb"},[e("li",{staticClass:"breadcrumb-item"},[e("a",{attrs:{href:t.catalogLink}},[t._v(t._s(t.trans("link_catalog")))])]),t._v(" "),e("li",{staticClass:"breadcrumb-item"},[e("a",{attrs:{href:t.stockLink}},[t._v(t._s(t.trans("link_stock")))])]),t._v(" "),e("li",{staticClass:"breadcrumb-item active"},[t.isOverview?e("span",[t._v(t._s(t.trans("link_overview")))]):e("span",[t._v(t._s(t.trans("link_movements")))])])])])};r._withStripped=!0;var i=e(83827);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/pages/stock/components/header/breadcrumb.vue";const u=a.exports},66003:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{attrs:{id:"filters-container"}},[e("button",{staticClass:"search-input collapse-button",attrs:{type:"button","data-toggle":"collapse","data-target":"#filters"}},[e("i",{staticClass:"material-icons mr-1"},[t._v("filter_list")]),t._v(" "),e("i",{staticClass:"material-icons float-right "},[t._v("keyboard_arrow_down")]),t._v("\n "+t._s(t.trans("button_advanced_filter"))+"\n ")]),t._v(" "),e("div",{staticClass:"container-fluid collapse",attrs:{id:"filters"}},[e("div",{staticClass:"row"},[e("div",{staticClass:"col-lg-4"},[t.isOverview?e("div",{staticClass:"py-3"},[e("h2",[t._v(t._s(t.trans("filter_suppliers")))]),t._v(" "),e("FilterComponent",{staticClass:"filter-suppliers",attrs:{placeholder:t.trans("filter_search_suppliers"),list:this.$store.getters.suppliers,"item-id":"supplier_id",label:"name"},on:{active:t.onFilterActive}})],1):e("div",{staticClass:"py-3"},[e("h2",[t._v(t._s(t.trans("filter_movements_type")))]),t._v(" "),e("PSSelect",{attrs:{items:t.movementsTypes,"item-id":"id_stock_mvt_reason","item-name":"name"},on:{change:t.onChange}},[t._v("\n "+t._s(t.trans("none"))+"\n ")]),t._v(" "),e("h2",{staticClass:"mt-4"},[t._v("\n "+t._s(t.trans("filter_movements_employee"))+"\n ")]),t._v(" "),e("PSSelect",{attrs:{items:t.employees,"item-id":"id_employee","item-name":"name"},on:{change:t.onChange}},[t._v("\n "+t._s(t.trans("none"))+"\n ")]),t._v(" "),e("h2",{staticClass:"mt-4"},[t._v("\n "+t._s(t.trans("filter_movements_period"))+"\n ")]),t._v(" "),e("form",{staticClass:"row"},[e("div",{staticClass:"col-md-6"},[e("label",[t._v(t._s(t.trans("filter_datepicker_from")))]),t._v(" "),e("PSDatePicker",{attrs:{locale:t.locale,type:"sup"},on:{dpChange:t.onDpChange,reset:t.onClear}})],1),t._v(" "),e("div",{staticClass:"col-md-6"},[e("label",[t._v(t._s(t.trans("filter_datepicker_to")))]),t._v(" "),e("PSDatePicker",{attrs:{locale:t.locale,type:"inf"},on:{dpChange:t.onDpChange,reset:t.onClear}})],1)])],1)]),t._v(" "),e("div",{staticClass:"col-lg-4"},[e("div",{staticClass:"py-3"},[e("h2",[t._v(t._s(t.trans("filter_categories")))]),t._v(" "),e("FilterComponent",{staticClass:"filter-categories",attrs:{placeholder:t.trans("filter_search_category"),list:t.categoriesList,"item-id":"id_category",label:"name"},on:{active:t.onFilterActive}})],1)]),t._v(" "),e("div",{staticClass:"col-lg-4"},[e("div",{staticClass:"py-3"},[e("h2",[t._v(t._s(t.trans("filter_status")))]),t._v(" "),e("PSRadio",{attrs:{id:"enable",label:t.trans("filter_status_enable"),checked:!1,value:"1"},on:{change:t.onRadioChange}}),t._v(" "),e("PSRadio",{attrs:{id:"disable",label:t.trans("filter_status_disable"),checked:!1,value:"0"},on:{change:t.onRadioChange}}),t._v(" "),e("PSRadio",{attrs:{id:"all",label:t.trans("filter_status_all"),checked:!0,value:"null"},on:{change:t.onRadioChange}})],1)])])])])};r._withStripped=!0;var i=e(43657);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/pages/stock/components/header/filters.vue";const u=a.exports},10598:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"filter-container"},[t.hasChildren?t._e():e("PSTags",{ref:"tags",staticClass:"form-control search search-input mb-2",attrs:{tags:t.tags,placeholder:t.hasPlaceholder?t.placeholder:"","has-icon":!0},on:{tagChange:t.onTagChanged,typing:t.onTyping}}),t._v(" "),t.hasChildren?e("div",[t.isOverview?t._m(0):e("PSTree",{ref:"tree",attrs:{"has-checkbox":!0,model:t.list,translations:t.PSTreeTranslations},on:{checked:t.onCheck}})],1):e("ul",{staticClass:"mt-1"},t._l(t.getItems(),(function(n,r){return e("li",{directives:[{name:"show",rawName:"v-show",value:n.visible,expression:"item.visible"}],key:r,staticClass:"item"},[e("PSTreeItem",{attrs:{label:n[t.label],model:n,"has-checkbox":!0},on:{checked:t.onCheck}})],1)})),0)],1)};r._withStripped=!0;var i=e(62305);const o=i.Z;var a=(0,e(51900).Z)(o,r,[function(){var t=this,n=t.$createElement;return(t._self._c||n)("PSTree",{ref:"tree",attrs:{"has-checkbox":!0,model:t.list,translations:t.PSTreeTranslations},on:{checked:t.onCheck}})}],!1,null,null,null);a.options.__file="js/app/pages/stock/components/header/filters/filter-component.vue";const u=a.exports},90069:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"content-topbar container-fluid"},[e("div",{staticClass:"row py-2"},[e("div",{staticClass:"col row ml-1"},[e("PSCheckbox",{ref:"low-filter",staticClass:"mt-1",attrs:{id:"low-filter"},on:{checked:t.onCheck}},[e("span",{staticClass:"ml-2",attrs:{slot:"label"},slot:"label"},[t._v(t._s(t.trans("filter_low_stock")))])])],1),t._v(" "),e("div",{staticClass:"content-topbar-right col mr-3 d-flex align-items-center justify-content-end"},[e("a",{attrs:{href:t.stockExportUrl}},[e("span",{attrs:{"data-toggle":"pstooltip",title:t.stockExportTitle,"data-html":"true","data-placement":"top"}},[e("i",{staticClass:"material-icons"},[t._v("cloud_upload")])])]),t._v(" "),e("a",{staticClass:"ml-2",attrs:{href:t.stockImportUrl,target:"_blank"}},[e("span",{attrs:{"data-toggle":"pstooltip",title:t.stockImportTitle,"data-html":"true","data-placement":"top"}},[e("i",{staticClass:"material-icons"},[t._v("cloud_download")])])])])])])};r._withStripped=!0;var i=e(39596);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/pages/stock/components/header/filters/low-filter.vue";const u=a.exports},59513:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"row mb-2",attrs:{id:"search"}},[e("div",{staticClass:"col-md-8"},[e("div",{staticClass:"mb-2"},[e("form",{staticClass:"search-form",on:{submit:function(t){t.preventDefault()}}},[e("label",[t._v(t._s(t.trans("product_search")))]),t._v(" "),e("div",{staticClass:"input-group"},[e("PSTags",{ref:"psTags",attrs:{tags:t.tags},on:{tagChange:t.onSearch}}),t._v(" "),e("div",{staticClass:"input-group-append"},[e("PSButton",{staticClass:"search-button",attrs:{primary:!0},on:{click:t.onClick}},[e("i",{staticClass:"material-icons"},[t._v("search")]),t._v("\n "+t._s(t.trans("button_search"))+"\n ")])],1)],1)])]),t._v(" "),e("Filters",{on:{applyFilter:t.applyFilter}})],1),t._v(" "),e("div",{staticClass:"col-md-4 alert-box"},[e("transition",{attrs:{name:"fade"}},[t.showAlert?e("PSAlert",{attrs:{"alert-type":t.alertType,"has-close":!0},on:{closeAlert:t.onCloseAlert}},[t.error?e("span",[t._v(t._s(t.trans("alert_bulk_edit")))]):e("span",[t._v(t._s(t.trans("notification_stock_updated")))])]):t._e()],1)],1)])};r._withStripped=!0;var i=e(91705);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/pages/stock/components/header/search.vue";const u=a.exports},38058:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"header-toolbar"},[e("div",{staticClass:"container-fluid"},[e("Breadcrumb"),t._v(" "),e("div",{staticClass:"title-row"},[e("h1",{staticClass:"title"},[t._v("\n "+t._s(t.trans("head_title"))+"\n ")])])],1),t._v(" "),e("Tabs")],1)};r._withStripped=!0;var i=e(28750);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/pages/stock/components/header/stock-header.vue";const u=a.exports},59934:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"page-head-tabs",attrs:{id:"head_tabs"}},[e("ul",{staticClass:"nav nav-pills"},[e("li",{staticClass:"nav-item"},[e("router-link",{staticClass:"nav-link",class:{active:t.isOverview},attrs:{"data-toggle":"tab",to:"/",role:"tab"}},[t._v("\n "+t._s(t.trans("menu_stock"))+"\n ")])],1),t._v(" "),e("li",{staticClass:"nav-item"},[e("router-link",{staticClass:"nav-link",class:{active:t.isMovements},attrs:{"data-toggle":"tab",to:"/movements",role:"tab"}},[t._v("\n "+t._s(t.trans("menu_movements"))+"\n ")])],1)])])};r._withStripped=!0;var i=e(48152);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/pages/stock/components/header/tabs.vue";const u=a.exports},57879:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("section",{staticClass:"stock-movements"},[e("PSTable",{staticClass:"mt-1"},[e("thead",[e("tr",[e("th",{attrs:{width:"30%"}},[e("PSSort",{attrs:{order:"product","current-sort":t.currentSort},on:{sort:t.sort}},[t._v("\n "+t._s(t.trans("title_product"))+"\n ")])],1),t._v(" "),e("th",[e("PSSort",{attrs:{order:"reference","current-sort":t.currentSort},on:{sort:t.sort}},[t._v("\n "+t._s(t.trans("title_reference"))+"\n ")])],1),t._v(" "),e("th",[t._v("\n "+t._s(t.trans("title_movements_type"))+"\n ")]),t._v(" "),e("th",{staticClass:"text-center"},[t._v("\n "+t._s(t.trans("title_quantity"))+"\n ")]),t._v(" "),e("th",{staticClass:"text-center"},[e("PSSort",{attrs:{order:"date_add","current-sort":t.currentSort},on:{sort:t.sort}},[t._v("\n "+t._s(t.trans("title_date"))+"\n ")])],1),t._v(" "),e("th",[t._v("\n "+t._s(t.trans("title_employee"))+"\n ")])])]),t._v(" "),e("tbody",[this.isLoading?e("tr",[e("td",{attrs:{colspan:"6"}},t._l(3,(function(n,r){return e("PSLoader",{key:r,staticClass:"mt-1"},[e("div",{staticClass:"background-masker header-top"}),t._v(" "),e("div",{staticClass:"background-masker header-left"}),t._v(" "),e("div",{staticClass:"background-masker header-bottom"}),t._v(" "),e("div",{staticClass:"background-masker subheader-left"}),t._v(" "),e("div",{staticClass:"background-masker subheader-bottom"})])})),1)]):t.emptyMovements?e("tr",[e("td",{attrs:{colspan:"6"}},[e("PSAlert",{attrs:{"alert-type":"ALERT_TYPE_WARNING","has-close":!1}},[t._v("\n "+t._s(t.trans("no_product"))+"\n ")])],1)]):t._l(t.movements,(function(t,n){return e("MovementLine",{key:n,attrs:{product:t}})}))],2)])],1)};r._withStripped=!0;var i=e(11077);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/pages/stock/components/movements/index.vue";const u=a.exports},14315:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("tr",[e("td",[e("div",{staticClass:"d-flex align-items-center"},[e("PSMedia",{staticClass:"d-flex align-items-center",attrs:{thumbnail:t.thumbnail}},[e("p",[t._v("\n "+t._s(t.product.product_name)+"\n "),t.hasCombination?e("small",[e("br"),t._v("\n "+t._s(t.combinationName)+"\n ")]):t._e()])])],1)]),t._v(" "),e("td",[t._v("\n "+t._s(t.product.product_reference)+"\n ")]),t._v(" "),e("td",[t.orderLink?e("a",{attrs:{href:t.orderLink,target:"_blank"}},[t._v("\n "+t._s(t.product.movement_reason)+"\n ")]):e("span",[t._v(t._s(t.product.movement_reason))])]),t._v(" "),e("td",{staticClass:"text-sm-center"},[e("span",{staticClass:"qty-number",class:{"is-positive":t.isPositive}},[t.isPositive?e("span",[t._v("+")]):e("span",[t._v("-")]),t._v("\n "+t._s(t.qty)+"\n ")])]),t._v(" "),e("td",{staticClass:"text-sm-center"},[t._v("\n "+t._s(t.product.date_add)+"\n ")]),t._v(" "),e("td",[t._v("\n "+t._s(t.employeeName)+"\n ")])])};r._withStripped=!0;var i=e(39411);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/pages/stock/components/movements/movement-line.vue";const u=a.exports},81293:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("section",{staticClass:"stock-overview"},[e("ProductsActions"),t._v(" "),e("ProductsTable",{attrs:{"is-loading":t.isLoading},on:{sort:t.sort}})],1)};r._withStripped=!0;var i=e(80729);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/pages/stock/components/overview/index.vue";const u=a.exports},50208:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("tr",{class:{"low-stock":t.lowStock}},[e("td",[e("div",{staticClass:"d-flex align-items-center"},[e("PSCheckbox",{ref:t.id,attrs:{id:t.id,model:t.product},on:{checked:t.productChecked}}),t._v(" "),e("PSMedia",{staticClass:"d-flex align-items-center ml-2",attrs:{thumbnail:t.thumbnail}},[e("p",[t._v("\n "+t._s(t.product.product_name)+"\n "),t.hasCombination?e("small",[e("br"),t._v("\n "+t._s(t.combinationName)+"\n ")]):t._e()])])],1)]),t._v(" "),e("td",[t._v("\n "+t._s(t.reference)+"\n ")]),t._v(" "),e("td",[t._v("\n "+t._s(t.product.supplier_name)+"\n ")]),t._v(" "),t.product.active?e("td",{staticClass:"text-sm-center"},[e("i",{staticClass:"material-icons enable"},[t._v("check")])]):e("td",{staticClass:"text-sm-center"},[e("i",{staticClass:"material-icons disable"},[t._v("close")])]),t._v(" "),e("td",{staticClass:"text-sm-center",class:{"stock-warning":t.lowStock}},[t._v("\n "+t._s(t.physical)+"\n "),t.updatedQty?e("span",{staticClass:"qty-update",class:{"stock-warning":t.lowStock}},[e("i",{staticClass:"material-icons"},[t._v("trending_flat")]),t._v("\n "+t._s(t.physicalQtyUpdated)+"\n ")]):t._e()]),t._v(" "),e("td",{staticClass:"text-sm-center",class:{"stock-warning":t.lowStock}},[t._v("\n "+t._s(t.product.product_reserved_quantity)+"\n ")]),t._v(" "),e("td",{staticClass:"text-sm-center",class:{"stock-warning":t.lowStock}},[t._v("\n "+t._s(t.product.product_available_quantity)+"\n "),t.updatedQty?e("span",{staticClass:"qty-update",class:{"stock-warning":t.lowStock}},[e("i",{staticClass:"material-icons"},[t._v("trending_flat")]),t._v("\n "+t._s(t.availableQtyUpdated)+"\n ")]):t._e(),t._v(" "),t.lowStock?e("span",{staticClass:"stock-warning ico ml-2",attrs:{"data-toggle":"pstooltip","data-placement":"top","data-html":"true",title:t.lowStockLevel}},[t._v("!")]):t._e()]),t._v(" "),e("td",{staticClass:"qty-spinner text-right"},[e("Spinner",{attrs:{product:t.product},on:{updateProductQty:t.updateProductQty}})],1)])};r._withStripped=!0;var i=e(35407);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/pages/stock/components/overview/product-line.vue";const u=a.exports},5127:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"row product-actions"},[e("div",{staticClass:"col-md-8 qty d-flex align-items-center",class:{active:t.isFocused}},[e("PSCheckbox",{ref:"bulk-action",staticClass:"mt-3",attrs:{id:"bulk-action","is-indeterminate":t.isIndeterminate()},on:{checked:t.bulkChecked}}),t._v(" "),e("div",{staticClass:"ml-2"},[e("small",[t._v(t._s(t.trans("title_bulk")))]),t._v(" "),e("PSNumber",{staticClass:"bulk-qty",attrs:{danger:t.danger,value:t.bulkEditQty,buttons:this.isFocused},on:{focus:t.focusIn,blur:function(n){return t.focusOut(n)},change:t.onChange,keyup:t.onKeyUp}})],1)],1),t._v(" "),e("div",{staticClass:"col-md-4"},[e("PSButton",{staticClass:"update-qty float-sm-right my-4 mr-2",class:{"btn-primary":t.disabled},attrs:{type:"button",disabled:t.disabled,primary:!0},on:{click:t.sendQty}},[e("i",{staticClass:"material-icons"},[t._v("edit")]),t._v("\n "+t._s(t.trans("button_movement_type"))+"\n ")])],1)])};r._withStripped=!0;var i=e(31027);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/pages/stock/components/overview/products-actions.vue";const u=a.exports},49191:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("PSTable",{staticClass:"mt-1"},[e("thead",[e("tr",{staticClass:"column-headers"},[e("th",{staticClass:"product-title",attrs:{scope:"col",width:"27%"}},[e("PSSort",{attrs:{order:"product","current-sort":t.currentSort},on:{sort:t.sort}},[t._v("\n "+t._s(t.trans("title_product"))+"\n ")])],1),t._v(" "),e("th",{attrs:{scope:"col"}},[e("PSSort",{attrs:{order:"reference","current-sort":t.currentSort},on:{sort:t.sort}},[t._v("\n "+t._s(t.trans("title_reference"))+"\n ")])],1),t._v(" "),e("th",[e("PSSort",{attrs:{order:"supplier","current-sort":t.currentSort},on:{sort:t.sort}},[t._v("\n "+t._s(t.trans("title_supplier"))+"\n ")])],1),t._v(" "),e("th",{staticClass:"text-center"},[t._v("\n "+t._s(t.trans("title_status"))+"\n ")]),t._v(" "),e("th",{staticClass:"text-center"},[e("PSSort",{attrs:{order:"physical_quantity","current-sort":t.currentSort},on:{sort:t.sort}},[t._v("\n "+t._s(t.trans("title_physical"))+"\n ")])],1),t._v(" "),e("th",{staticClass:"text-center"},[t._v("\n "+t._s(t.trans("title_reserved"))+"\n ")]),t._v(" "),e("th",{staticClass:"text-center"},[e("PSSort",{attrs:{order:"available_quantity","current-sort":t.currentSort},on:{sort:t.sort}},[t._v("\n "+t._s(t.trans("title_available"))+"\n ")])],1),t._v(" "),e("th",{attrs:{title:t.trans("title_edit_quantity")}},[e("i",{staticClass:"material-icons"},[t._v("edit")]),t._v("\n "+t._s(t.trans("title_edit_quantity"))+"\n ")])])]),t._v(" "),e("tbody",[this.isLoading?e("tr",[e("td",{attrs:{colspan:"8"}},t._l(3,(function(n,r){return e("PSLoader",{key:r,staticClass:"mt-1"},[e("div",{staticClass:"background-masker header-top"}),t._v(" "),e("div",{staticClass:"background-masker header-left"}),t._v(" "),e("div",{staticClass:"background-masker header-bottom"}),t._v(" "),e("div",{staticClass:"background-masker subheader-left"}),t._v(" "),e("div",{staticClass:"background-masker subheader-bottom"})])})),1)]):t.emptyProducts?e("tr",[e("td",{attrs:{colspan:"8"}},[e("PSAlert",{attrs:{"alert-type":"ALERT_TYPE_WARNING","has-close":!1}},[t._v("\n "+t._s(t.trans("no_product"))+"\n ")])],1)]):t._l(t.products,(function(t,n){return e("ProductLine",{key:n,attrs:{product:t}})}))],2)])};r._withStripped=!0;var i=e(34577);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/pages/stock/components/overview/products-table.vue";const u=a.exports},20931:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("form",{staticClass:"qty",class:t.classObject,on:{mouseover:t.focusIn,mouseleave:function(n){return t.focusOut(n)},submit:function(n){return n.preventDefault(),t.sendQty(n)}}},[e("PSNumber",{staticClass:"edit-qty",attrs:{name:"qty",placeholder:"0",pattern:"\\d*",step:"1",buttons:!0,"hover-buttons":!0,value:t.getQuantity()},on:{change:t.onChange,keyup:function(n){return t.onKeyup(n)},focus:t.focusIn,blur:function(n){return t.focusOut(n)}}}),t._v(" "),e("transition",{attrs:{name:"fade"}},[t.isActive?e("button",{staticClass:"check-button"},[e("i",{staticClass:"material-icons"},[t._v("check")])]):t._e()])],1)};r._withStripped=!0;var i=e(52498);const o=i.Z;e(95007);var a=(0,e(51900).Z)(o,r,[],!1,null,"297793b2",null);a.options.__file="js/app/pages/stock/components/overview/spinner.vue";const u=a.exports},70695:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"ps-alert alert",class:t.classObject,attrs:{role:"alert"}},[t.hasClose?e("button",{staticClass:"close",attrs:{type:"button","data-dismiss":"alert","aria-label":"Close"},on:{click:function(n){return n.stopPropagation(),t.onClick(n)}}},[e("span",{staticClass:"material-icons"},[t._v("close")])]):t._e(),t._v(" "),e("p",{staticClass:"alert-text"},[t._t("default")],2)])};r._withStripped=!0;var i=e(22178);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/widgets/ps-alert.vue";const u=a.exports},98382:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement;return(t._self._c||n)("button",{staticClass:"btn",class:t.classObject,attrs:{type:"button"},on:{click:t.onClick}},[t._t("default")],2)};r._withStripped=!0;var i=e(11138);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/widgets/ps-button.vue";const u=a.exports},93331:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"md-checkbox"},[e("label",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.checked,expression:"checked"}],class:{indeterminate:t.isIndeterminate},attrs:{type:"checkbox",id:t.id},domProps:{checked:Array.isArray(t.checked)?t._i(t.checked,null)>-1:t.checked},on:{change:function(n){var e=t.checked,r=n.target,i=!!r.checked;if(Array.isArray(e)){var o=t._i(e,null);r.checked?o<0&&(t.checked=e.concat([null])):o>-1&&(t.checked=e.slice(0,o).concat(e.slice(o+1)))}else t.checked=i}}}),t._v(" "),e("i",{staticClass:"md-checkbox-control"}),t._v(" "),t._t("label")],2)])};r._withStripped=!0;var i=e(14012);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/widgets/ps-checkbox.vue";const u=a.exports},34455:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"input-group date"},[e("input",{ref:"datepicker",staticClass:"form-control",attrs:{type:"text"}}),t._v(" "),t._m(0)])};r._withStripped=!0;var i=e(69557);const o=i.Z;e(66694);var a=(0,e(51900).Z)(o,r,[function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"input-group-append"},[e("span",{staticClass:"input-group-text"},[e("i",{staticClass:"material-icons"},[t._v("event")])])])}],!1,null,null,null);a.options.__file="js/app/widgets/ps-datepicker.vue";const u=a.exports},77221:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>o});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"ps-loader"},[e("div",{staticClass:"timeline-item"},[e("div",{staticClass:"animated-background"},[t._t("default")],2)])])};r._withStripped=!0,e(34278);var i=(0,e(51900).Z)({},r,[],!1,null,"0aa88fd2",null);i.options.__file="js/app/widgets/ps-loader.vue";const o=i.exports},14719:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"media"},[t.displayThumb?e("img",{staticClass:"thumbnail d-flex",attrs:{src:t.thumbnail}}):e("div",{staticClass:"no-img"}),t._v(" "),e("div",{staticClass:"ml-2 desc media-body"},[t._t("default")],2)])};r._withStripped=!0;var i=e(80393);const o=i.Z;e(56686);var a=(0,e(51900).Z)(o,r,[],!1,null,"1b3a27e0",null);a.options.__file="js/app/widgets/ps-media.vue";const u=a.exports},47211:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"ps-number",class:{"hover-buttons":t.hoverButtons}},[e("input",{staticClass:"form-control",class:{danger:t.danger},attrs:{type:"number",placeholder:"0"},domProps:{value:t.value},on:{keyup:function(n){return t.onKeyup(n)},focus:t.focusIn},nativeOn:{blur:function(n){return t.focusOut(n)}}}),t._v(" "),t.buttons?e("div",{staticClass:"ps-number-spinner d-flex"},[e("span",{staticClass:"ps-number-up",on:{click:t.increment}}),t._v(" "),e("span",{staticClass:"ps-number-down",on:{click:t.decrement}})]):t._e()])};r._withStripped=!0;var i=e(70827);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/widgets/ps-number.vue";const u=a.exports},86842:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return t.displayPagination?e("nav",{staticClass:"mt-1 mx-auto"},[e("ul",{staticClass:"pagination",class:{multi:t.isMultiPagination}},[t.isMultiPagination?e("li",{staticClass:"page-item previous"},[e("a",{directives:[{name:"show",rawName:"v-show",value:t.activeLeftArrow,expression:"activeLeftArrow"}],staticClass:"float-left page-link",attrs:{href:"#"},on:{click:function(n){return t.prev(n)}}},[e("span",{staticClass:"sr-only"},[t._v("Previous")])])]):t._e(),t._v(" "),t._l(t.pagesCount,(function(n){return e("li",{key:n,staticClass:"page-item",class:{active:t.checkCurrentIndex(n)}},[t.showIndex(n)?e("a",{staticClass:"page-link",class:{"pl-0":t.showFirstDots(n),"pr-0":t.showLastDots(n)},attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.changePage(n)}}},[t.isMultiPagination?e("span",{directives:[{name:"show",rawName:"v-show",value:t.showFirstDots(n),expression:"showFirstDots(index)"}]},[t._v("...")]):t._e(),t._v("\n "+t._s(n)+"\n "),t.isMultiPagination?e("span",{directives:[{name:"show",rawName:"v-show",value:t.showLastDots(n),expression:"showLastDots(index)"}]},[t._v("...")]):t._e()]):t._e()])})),t._v(" "),t.isMultiPagination?e("li",{staticClass:"page-item next"},[e("a",{directives:[{name:"show",rawName:"v-show",value:t.activeRightArrow,expression:"activeRightArrow"}],staticClass:"float-left page-link",attrs:{href:"#"},on:{click:function(n){return t.next(n)}}},[e("span",{staticClass:"sr-only"},[t._v("Next")])])]):t._e()],2)]):t._e()};r._withStripped=!0;var i=e(45260);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/widgets/ps-pagination.vue";const u=a.exports},4596:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"ps-radio"},[e("input",{attrs:{type:"radio",id:t.id,name:"radio-group"},domProps:{checked:t.checked},on:{change:t.onChange}}),t._v(" "),e("label",{attrs:{for:t.id}},[t._v(t._s(t.label))])])};r._withStripped=!0;var i=e(63194);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/widgets/ps-radio.vue";const u=a.exports},60445:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"ps-select"},[e("select",{directives:[{name:"model",rawName:"v-model",value:t.selected,expression:"selected"}],staticClass:"form-control",on:{change:[function(n){var e=Array.prototype.filter.call(n.target.options,(function(t){return t.selected})).map((function(t){return"_value"in t?t._value:t.value}));t.selected=n.target.multiple?e:e[0]},t.onChange]}},[e("option",{attrs:{value:"default",selected:""}},[t._t("default")],2),t._v(" "),t._l(t.items,(function(n,r){return e("option",{key:r,domProps:{value:n[t.itemId]}},[t._v("\n "+t._s(n[t.itemName])+"\n ")])}))],2)])};r._withStripped=!0;var i=e(7448);const o=i.Z;e(54155);var a=(0,e(51900).Z)(o,r,[],!1,null,"f371bf00",null);a.options.__file="js/app/widgets/ps-select.vue";const u=a.exports},82753:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"ps-sortable-column",attrs:{"data-sort-col-name":"id_product","data-sort-is-current":t.isCurrent,"data-sort-direction":t.sortDirection},on:{click:t.sortToggle}},[e("span",{attrs:{role:"columnheader"}},[t._t("default")],2),t._v(" "),e("span",{staticClass:"ps-sort",attrs:{role:"button","aria-label":"Tri"}})])};r._withStripped=!0;var i=e(40700);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/widgets/ps-table/ps-sort.vue";const u=a.exports},98793:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>o});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"table-responsive"},[e("table",{staticClass:"table"},[t._t("default")],2)])};r._withStripped=!0;var i=(0,e(51900).Z)({},r,[],!1,null,null,null);i.options.__file="js/app/widgets/ps-table/ps-table.vue";const o=i.exports},75576:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"tags-input search-input search d-flex flex-wrap",class:{"search-with-icon":t.hasIcon},on:{click:function(n){return t.focus()}}},[e("div",{staticClass:"tags-wrapper"},t._l(t.tags,(function(n,r){return e("span",{key:r,staticClass:"tag"},[t._v(t._s(n)),e("i",{staticClass:"material-icons",on:{click:function(n){return t.close(r)}}},[t._v("close")])])})),0),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.tag,expression:"tag"}],ref:"tags",staticClass:"form-control input",attrs:{placeholder:t.placeholderToDisplay,type:"text",size:t.inputSize},domProps:{value:t.tag},on:{keyup:t.onKeyUp,keydown:[function(n){return!n.type.indexOf("key")&&t._k(n.keyCode,"enter",13,n.key,"Enter")?null:t.add(t.tag)},function(n){return!n.type.indexOf("key")&&t._k(n.keyCode,"delete",[8,46],n.key,["Backspace","Delete","Del"])?null:(n.stopPropagation(),t.remove())}],input:function(n){n.target.composing||(t.tag=n.target.value)}}})])};r._withStripped=!0;var i=e(60994);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/widgets/ps-tags.vue";const u=a.exports},37862:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"ps-tree-items",class:{className:t.className}},[e("div",{staticClass:"d-flex tree-name",class:{active:t.active,disable:t.model.disable},on:{click:t.clickElement}},[e("button",{staticClass:"btn btn-text",class:[{hidden:t.isHidden},t.chevronStatus]},[t.translations?e("span",{staticClass:"sr-only"},[t._v(t._s(this.model.open?t.translations.reduce:t.translations.expand))]):t._e()]),t._v(" "),t.hasCheckbox?e("PSCheckbox",{ref:t.model.name,attrs:{id:t.id,model:t.model},on:{checked:t.onCheck}}):t._e(),t._v(" "),e("span",{staticClass:"tree-label",class:{warning:t.isWarning}},[t._v(t._s(t.model.name))]),t._v(" "),t.displayExtraLabel?e("span",{staticClass:"tree-extra-label d-sm-none d-xl-inline-block"},[t._v(t._s(t.getExtraLabel))]):t._e(),t._v(" "),t.displayExtraLabel?e("span",{staticClass:"tree-extra-label-mini d-xl-none"},[t._v(t._s(this.model.extraLabel))]):t._e()],1),t._v(" "),t.isFolder?e("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"tree"},t._l(t.model.children,(function(n,r){return e("li",{key:r,staticClass:"tree-item",class:{disable:t.model.disable}},[e("PSTreeItem",{ref:n.id,refInFor:!0,class:t.className,attrs:{"has-checkbox":t.hasCheckbox,model:n,label:n.name,translations:t.translations,"current-item":t.currentItem},on:{checked:t.onCheck,setCurrentElement:t.setCurrentElement}})],1)})),0):t._e()])};r._withStripped=!0;var i=e(88513);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/widgets/ps-tree/ps-tree-item.vue";const u=a.exports},76659:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>u});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"ps-tree"},[e("div",{staticClass:"mb-3 tree-header"},[e("button",{staticClass:"btn btn-text text-uppercase pointer",on:{click:t.expand}},[e("i",{staticClass:"material-icons"},[t._v("keyboard_arrow_down")]),t._v(" "),t.translations?e("span",[t._v(t._s(t.translations.expand))]):t._e()]),t._v(" "),e("button",{staticClass:"btn btn-text float-right text-uppercase pointer",on:{click:t.reduce}},[e("i",{staticClass:"material-icons"},[t._v("keyboard_arrow_up")]),t._v(" "),t.translations?e("span",[t._v(t._s(t.translations.reduce))]):t._e()])]),t._v(" "),e("ul",{staticClass:"tree",class:t.className},t._l(t.model,(function(n,r){return e("li",{key:r},[e("PSTreeItem",{ref:"item",refInFor:!0,attrs:{"has-checkbox":t.hasCheckbox,model:n,label:n.name,translations:t.translations,"current-item":t.currentItem},on:{checked:t.onCheck,setCurrentElement:t.setCurrentElement}})],1)})),0)])};r._withStripped=!0;var i=e(41134);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/app/widgets/ps-tree/ps-tree.vue";const u=a.exports},51900:(t,n,e)=>{"use strict";function r(t,n,e,r,i,o,a,u){var s,c="function"==typeof t?t.options:t;if(n&&(c.render=n,c.staticRenderFns=e,c._compiled=!0),r&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(s=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),i&&i.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(a)},c._ssrRegister=s):i&&(s=u?function(){i.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:i),s)if(c.functional){c._injectStyles=s;var l=c.render;c.render=function(t,n){return s.call(n),l(t,n)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,s):[s]}return{exports:t,options:c}}e.d(n,{Z:()=>r})},74104:(t,n,e)=>{"use strict";function r(t){this.state=2,this.value=void 0,this.deferred=[];var n=this;try{t((function(t){n.resolve(t)}),(function(t){n.reject(t)}))}catch(t){n.reject(t)}}e.r(n),e.d(n,{default:()=>X,Url:()=>S,Http:()=>N,Resource:()=>W}),r.reject=function(t){return new r((function(n,e){e(t)}))},r.resolve=function(t){return new r((function(n,e){n(t)}))},r.all=function(t){return new r((function(n,e){var i=0,o=[];function a(e){return function(r){o[e]=r,(i+=1)===t.length&&n(o)}}0===t.length&&n(o);for(var u=0;u<t.length;u+=1)r.resolve(t[u]).then(a(u),e)}))},r.race=function(t){return new r((function(n,e){for(var i=0;i<t.length;i+=1)r.resolve(t[i]).then(n,e)}))};var i=r.prototype;function o(t,n){this.promise=t instanceof Promise?t:new Promise(t.bind(n)),this.context=n}i.resolve=function(t){var n=this;if(2===n.state){if(t===n)throw new TypeError("Promise settled with itself.");var e=!1;try{var r=t&&t.then;if(null!==t&&"object"==typeof t&&"function"==typeof r)return void r.call(t,(function(t){e||n.resolve(t),e=!0}),(function(t){e||n.reject(t),e=!0}))}catch(t){return void(e||n.reject(t))}n.state=0,n.value=t,n.notify()}},i.reject=function(t){var n=this;if(2===n.state){if(t===n)throw new TypeError("Promise settled with itself.");n.state=1,n.value=t,n.notify()}},i.notify=function(){var t=this;u((function(){if(2!==t.state)for(;t.deferred.length;){var n=t.deferred.shift(),e=n[0],r=n[1],i=n[2],o=n[3];try{0===t.state?i("function"==typeof e?e.call(void 0,t.value):t.value):1===t.state&&("function"==typeof r?i(r.call(void 0,t.value)):o(t.value))}catch(t){o(t)}}}),undefined)},i.then=function(t,n){var e=this;return new r((function(r,i){e.deferred.push([t,n,r,i]),e.notify()}))},i.catch=function(t){return this.then(void 0,t)},"undefined"==typeof Promise&&(window.Promise=r),o.all=function(t,n){return new o(Promise.all(t),n)},o.resolve=function(t,n){return new o(Promise.resolve(t),n)},o.reject=function(t,n){return new o(Promise.reject(t),n)},o.race=function(t,n){return new o(Promise.race(t),n)};var a=o.prototype;a.bind=function(t){return this.context=t,this},a.then=function(t,n){return t&&t.bind&&this.context&&(t=t.bind(this.context)),n&&n.bind&&this.context&&(n=n.bind(this.context)),new o(this.promise.then(t,n),this.context)},a.catch=function(t){return t&&t.bind&&this.context&&(t=t.bind(this.context)),new o(this.promise.catch(t),this.context)},a.finally=function(t){return this.then((function(n){return t.call(this),n}),(function(n){return t.call(this),Promise.reject(n)}))};var u,s={}.hasOwnProperty,c=[].slice,l=!1,d="undefined"!=typeof window;function p(t){return t?t.replace(/^\s*|\s*$/g,""):""}function f(t){return t?t.toLowerCase():""}var g=Array.isArray;function h(t){return"string"==typeof t}function A(t){return"function"==typeof t}function m(t){return null!==t&&"object"==typeof t}function b(t){return m(t)&&Object.getPrototypeOf(t)==Object.prototype}function v(t,n,e){var r=o.resolve(t);return arguments.length<2?r:r.then(n,e)}function $(t,n,e){return A(e=e||{})&&(e=e.call(n)),x(t.bind({$vm:n,$options:e}),t,{$options:e})}function C(t,n){var e,r;if(g(t))for(e=0;e<t.length;e++)n.call(t[e],t[e],e);else if(m(t))for(r in t)s.call(t,r)&&n.call(t[r],t[r],r);return t}var y=Object.assign||function(t){var n=c.call(arguments,1);return n.forEach((function(n){w(t,n)})),t};function x(t){var n=c.call(arguments,1);return n.forEach((function(n){w(t,n,!0)})),t}function w(t,n,e){for(var r in n)e&&(b(n[r])||g(n[r]))?(b(n[r])&&!b(t[r])&&(t[r]={}),g(n[r])&&!g(t[r])&&(t[r]=[]),w(t[r],n[r],e)):void 0!==n[r]&&(t[r]=n[r])}function k(t){return null!=t}function _(t){return";"===t||"&"===t||"?"===t}function B(t,n,e){return n="+"===t||"#"===t?E(n):encodeURIComponent(n),e?encodeURIComponent(e)+"="+n:n}function E(t){return t.split(/(%[0-9A-Fa-f]{2})/g).map((function(t){return/%[0-9A-Fa-f]/.test(t)||(t=encodeURI(t)),t})).join("")}function S(t,n){var e,r=this||{},i=t;return h(t)&&(i={url:t,params:n}),i=x({},S.options,r.$options,i),S.transforms.forEach((function(t){h(t)&&(t=S.transform[t]),A(t)&&(e=function(t,n,e){return function(r){return t.call(e,r,n)}}(t,e,r.$vm))})),e(i)}function O(t,n,e){var r,i=g(n),o=b(n);C(n,(function(n,a){r=m(n)||g(n),e&&(a=e+"["+(o||r?a:"")+"]"),!e&&i?t.add(n.name,n.value):r?O(t,n,a):t.add(a,n)}))}function T(t){return new o((function(n){var e=new XDomainRequest,r=function(r){var i=r.type,o=0;"load"===i?o=200:"error"===i&&(o=500),n(t.respondWith(e.responseText,{status:o}))};t.abort=function(){return e.abort()},e.open(t.method,t.getUrl()),t.timeout&&(e.timeout=t.timeout),e.onload=r,e.onabort=r,e.onerror=r,e.ontimeout=r,e.onprogress=function(){},e.send(t.getBody())}))}S.options={url:"",root:null,params:{}},S.transform={template:function(t){var n=[],e=function(t,n,e){var r=function(t){var n=["+","#",".","/",";","?","&"],e=[];return{vars:e,expand:function(r){return t.replace(/\{([^{}]+)\}|([^{}]+)/g,(function(t,i,o){if(i){var a=null,u=[];if(-1!==n.indexOf(i.charAt(0))&&(a=i.charAt(0),i=i.substr(1)),i.split(/,/g).forEach((function(t){var n=/([^:*]*)(?::(\d+)|(\*))?/.exec(t);u.push.apply(u,function(t,n,e,r){var i=t[e],o=[];if(k(i)&&""!==i)if("string"==typeof i||"number"==typeof i||"boolean"==typeof i)i=i.toString(),r&&"*"!==r&&(i=i.substring(0,parseInt(r,10))),o.push(B(n,i,_(n)?e:null));else if("*"===r)Array.isArray(i)?i.filter(k).forEach((function(t){o.push(B(n,t,_(n)?e:null))})):Object.keys(i).forEach((function(t){k(i[t])&&o.push(B(n,i[t],t))}));else{var a=[];Array.isArray(i)?i.filter(k).forEach((function(t){a.push(B(n,t))})):Object.keys(i).forEach((function(t){k(i[t])&&(a.push(encodeURIComponent(t)),a.push(B(n,i[t].toString())))})),_(n)?o.push(encodeURIComponent(e)+"="+a.join(",")):0!==a.length&&o.push(a.join(","))}else";"===n?o.push(encodeURIComponent(e)):""!==i||"&"!==n&&"?"!==n?""===i&&o.push(""):o.push(encodeURIComponent(e)+"=");return o}(r,a,n[1],n[2]||n[3])),e.push(n[1])})),a&&"+"!==a){var s=",";return"?"===a?s="&":"#"!==a&&(s=a),(0!==u.length?a:"")+u.join(s)}return u.join(",")}return E(o)}))}}}(t),i=r.expand(n);return e&&e.push.apply(e,r.vars),i}(t.url,t.params,n);return n.forEach((function(n){delete t.params[n]})),e},query:function(t,n){var e=Object.keys(S.options.params),r={},i=n(t);return C(t.params,(function(t,n){-1===e.indexOf(n)&&(r[n]=t)})),(r=S.params(r))&&(i+=(-1==i.indexOf("?")?"?":"&")+r),i},root:function(t,n){var e,r=n(t);return h(t.root)&&!/^(https?:)?\//.test(r)&&("/",r=((e=t.root)?e.replace(new RegExp("[/]+$"),""):e)+"/"+r),r}},S.transforms=["template","query","root"],S.params=function(t){var n=[],e=encodeURIComponent;return n.add=function(t,n){A(n)&&(n=n()),null===n&&(n=""),this.push(e(t)+"="+e(n))},O(n,t),n.join("&").replace(/%20/g,"+")},S.parse=function(t){var n=document.createElement("a");return document.documentMode&&(n.href=t,t=n.href),n.href=t,{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",port:n.port,host:n.host,hostname:n.hostname,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):""}};var P=d&&"withCredentials"in new XMLHttpRequest;function D(t){return new o((function(n){var e,r,i=t.jsonp||"callback",o=t.jsonpCallback||"_jsonp"+Math.random().toString(36).substr(2),a=null;e=function(e){var i=e.type,u=0;"load"===i&&null!==a?u=200:"error"===i&&(u=500),u&&window[o]&&(delete window[o],document.body.removeChild(r)),n(t.respondWith(a,{status:u}))},window[o]=function(t){a=JSON.stringify(t)},t.abort=function(){e({type:"abort"})},t.params[i]=o,t.timeout&&setTimeout(t.abort,t.timeout),(r=document.createElement("script")).src=t.getUrl(),r.type="text/javascript",r.async=!0,r.onload=e,r.onerror=e,document.body.appendChild(r)}))}function z(t){return new o((function(n){var e=new XMLHttpRequest,r=function(r){var i=t.respondWith("response"in e?e.response:e.responseText,{status:1223===e.status?204:e.status,statusText:1223===e.status?"No Content":p(e.statusText)});C(p(e.getAllResponseHeaders()).split("\n"),(function(t){i.headers.append(t.slice(0,t.indexOf(":")),t.slice(t.indexOf(":")+1))})),n(i)};t.abort=function(){return e.abort()},e.open(t.method,t.getUrl(),!0),t.timeout&&(e.timeout=t.timeout),t.responseType&&"responseType"in e&&(e.responseType=t.responseType),(t.withCredentials||t.credentials)&&(e.withCredentials=!0),t.crossOrigin||t.headers.set("X-Requested-With","XMLHttpRequest"),A(t.progress)&&"GET"===t.method&&e.addEventListener("progress",t.progress),A(t.downloadProgress)&&e.addEventListener("progress",t.downloadProgress),A(t.progress)&&/^(POST|PUT)$/i.test(t.method)&&e.upload.addEventListener("progress",t.progress),A(t.uploadProgress)&&e.upload&&e.upload.addEventListener("progress",t.uploadProgress),t.headers.forEach((function(t,n){e.setRequestHeader(n,t)})),e.onload=r,e.onabort=r,e.onerror=r,e.ontimeout=r,e.send(t.getBody())}))}function j(t){var n=e(76608);return new o((function(e){var r,i=t.getUrl(),o=t.getBody(),a=t.method,u={};t.headers.forEach((function(t,n){u[n]=t})),n(i,{body:o,method:a,headers:u}).then(r=function(n){var r=t.respondWith(n.body,{status:n.statusCode,statusText:p(n.statusMessage)});C(n.headers,(function(t,n){r.headers.set(n,t)})),e(r)},(function(t){return r(t.response)}))}))}function I(t){return(t.client||(d?z:j))(t)}var M=function(t){var n=this;this.map={},C(t,(function(t,e){return n.append(e,t)}))};function U(t,n){return Object.keys(t).reduce((function(t,e){return f(n)===f(e)?e:t}),null)}M.prototype.has=function(t){return null!==U(this.map,t)},M.prototype.get=function(t){var n=this.map[U(this.map,t)];return n?n.join():null},M.prototype.getAll=function(t){return this.map[U(this.map,t)]||[]},M.prototype.set=function(t,n){this.map[function(t){if(/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(t))throw new TypeError("Invalid character in header field name");return p(t)}(U(this.map,t)||t)]=[p(n)]},M.prototype.append=function(t,n){var e=this.map[U(this.map,t)];e?e.push(p(n)):this.set(t,n)},M.prototype.delete=function(t){delete this.map[U(this.map,t)]},M.prototype.deleteAll=function(){this.map={}},M.prototype.forEach=function(t,n){var e=this;C(this.map,(function(r,i){C(r,(function(r){return t.call(n,r,i,e)}))}))};var R=function(t,n){var e=n.url,r=n.headers,i=n.status,a=n.statusText;this.url=e,this.ok=i>=200&&i<300,this.status=i||0,this.statusText=a||"",this.headers=new M(r),this.body=t,h(t)?this.bodyText=t:"undefined"!=typeof Blob&&t instanceof Blob&&(this.bodyBlob=t,function(t){return 0===t.type.indexOf("text")||-1!==t.type.indexOf("json")}(t)&&(this.bodyText=function(t){return new o((function(n){var e=new FileReader;e.readAsText(t),e.onload=function(){n(e.result)}}))}(t)))};R.prototype.blob=function(){return v(this.bodyBlob)},R.prototype.text=function(){return v(this.bodyText)},R.prototype.json=function(){return v(this.text(),(function(t){return JSON.parse(t)}))},Object.defineProperty(R.prototype,"data",{get:function(){return this.body},set:function(t){this.body=t}});var L=function(t){var n;this.body=null,this.params={},y(this,t,{method:(n=t.method||"GET",n?n.toUpperCase():"")}),this.headers instanceof M||(this.headers=new M(this.headers))};L.prototype.getUrl=function(){return S(this)},L.prototype.getBody=function(){return this.body},L.prototype.respondWith=function(t,n){return new R(t,y(n||{},{url:this.getUrl()}))};var q={"Content-Type":"application/json;charset=utf-8"};function N(t){var n=this||{},e=function(t){var n=[I],e=[];function r(r){for(;n.length;){var i=n.pop();if(A(i)){var a=void 0,u=void 0;if(m(a=i.call(t,r,(function(t){return u=t}))||u))return new o((function(n,r){e.forEach((function(n){a=v(a,(function(e){return n.call(t,e)||e}),r)})),v(a,n,r)}),t);A(a)&&e.unshift(a)}else s="Invalid interceptor of type "+typeof i+", must be a function","undefined"!=typeof console&&l&&console.warn("[VueResource warn]: "+s)}var s}return m(t)||(t=null),r.use=function(t){n.push(t)},r}(n.$vm);return function(t){c.call(arguments,1).forEach((function(n){for(var e in n)void 0===t[e]&&(t[e]=n[e])}))}(t||{},n.$options,N.options),N.interceptors.forEach((function(t){h(t)&&(t=N.interceptor[t]),A(t)&&e.use(t)})),e(new L(t)).then((function(t){return t.ok?t:o.reject(t)}),(function(t){var n;return t instanceof Error&&(n=t,"undefined"!=typeof console&&console.error(n)),o.reject(t)}))}function W(t,n,e,r){var i=this||{},o={};return C(e=y({},W.actions,e),(function(e,a){e=x({url:t,params:y({},n)},r,e),o[a]=function(){return(i.$http||N)(F(e,arguments))}})),o}function F(t,n){var e,r=y({},t),i={};switch(n.length){case 2:i=n[0],e=n[1];break;case 1:/^(POST|PUT|PATCH)$/i.test(r.method)?e=n[0]:i=n[0];break;case 0:break;default:throw"Expected up to 2 arguments [params, body], got "+n.length+" arguments"}return r.body=e,r.params=y({},r.params,i),r}function Z(t){var n,e,r;Z.installed||(e=(n=t).config,r=n.nextTick,u=r,l=e.debug||!e.silent,t.url=S,t.http=N,t.resource=W,t.Promise=o,Object.defineProperties(t.prototype,{$url:{get:function(){return $(t.url,this,this.$options.url)}},$http:{get:function(){return $(t.http,this,this.$options.http)}},$resource:{get:function(){return t.resource.bind(this)}},$promise:{get:function(){var n=this;return function(e){return new t.Promise(e,n)}}}}))}N.options={},N.headers={put:q,post:q,patch:q,delete:q,common:{Accept:"application/json, text/plain, */*"},custom:{}},N.interceptor={before:function(t){A(t.before)&&t.before.call(this,t)},method:function(t){t.emulateHTTP&&/^(PUT|PATCH|DELETE)$/i.test(t.method)&&(t.headers.set("X-HTTP-Method-Override",t.method),t.method="POST")},jsonp:function(t){"JSONP"==t.method&&(t.client=D)},json:function(t){var n=t.headers.get("Content-Type")||"";return m(t.body)&&0===n.indexOf("application/json")&&(t.body=JSON.stringify(t.body)),function(t){return t.bodyText?v(t.text(),(function(n){var e,r;if(0===(t.headers.get("Content-Type")||"").indexOf("application/json")||(r=(e=n).match(/^\s*(\[|\{)/))&&{"[":/]\s*$/,"{":/}\s*$/}[r[1]].test(e))try{t.body=JSON.parse(n)}catch(n){t.body=null}else t.body=n;return t})):t}},form:function(t){var n;n=t.body,"undefined"!=typeof FormData&&n instanceof FormData?t.headers.delete("Content-Type"):m(t.body)&&t.emulateJSON&&(t.body=S.params(t.body),t.headers.set("Content-Type","application/x-www-form-urlencoded"))},header:function(t){C(y({},N.headers.common,t.crossOrigin?{}:N.headers.custom,N.headers[f(t.method)]),(function(n,e){t.headers.has(e)||t.headers.set(e,n)}))},cors:function(t){if(d){var n=S.parse(location.href),e=S.parse(t.getUrl());e.protocol===n.protocol&&e.host===n.host||(t.crossOrigin=!0,t.emulateHTTP=!1,P||(t.client=T))}}},N.interceptors=["before","method","jsonp","json","form","header","cors"],["get","delete","head","jsonp"].forEach((function(t){N[t]=function(n,e){return this(y(e||{},{url:n,method:t}))}})),["post","put","patch"].forEach((function(t){N[t]=function(n,e,r){return this(y(r||{},{url:n,method:t,body:e}))}})),W.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(Z);const X=Z},78345:(t,n,e)=>{"use strict";function r(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}e.r(n),e.d(n,{default:()=>Dt});var i={name:"router-view",functional:!0,props:{name:{type:String,default:"default"}},render:function(t,n){var e=n.props,r=n.children,i=n.parent,o=n.data;o.routerView=!0;for(var a=i.$createElement,u=e.name,s=i.$route,c=i._routerViewCache||(i._routerViewCache={}),l=0,d=!1;i&&i._routerRoot!==i;)i.$vnode&&i.$vnode.data.routerView&&l++,i._inactive&&(d=!0),i=i.$parent;if(o.routerViewDepth=l,d)return a(c[u],o,r);var p=s.matched[l];if(!p)return c[u]=null,a();var f=c[u]=p.components[u];o.registerRouteInstance=function(t,n){var e=p.instances[u];(n&&e!==t||!n&&e===t)&&(p.instances[u]=n)},(o.hook||(o.hook={})).prepatch=function(t,n){p.instances[u]=n.componentInstance};var g=o.props=function(t,n){switch(typeof n){case"undefined":return;case"object":return n;case"function":return n(t);case"boolean":return n?t.params:void 0}}(s,p.props&&p.props[u]);if(g){g=o.props=function(t,n){for(var e in n)t[e]=n[e];return t}({},g);var h=o.attrs=o.attrs||{};for(var A in g)f.props&&A in f.props||(h[A]=g[A],delete g[A])}return a(f,o,r)}},o=/[!'()*]/g,a=function(t){return"%"+t.charCodeAt(0).toString(16)},u=/%2C/g,s=function(t){return encodeURIComponent(t).replace(o,a).replace(u,",")},c=decodeURIComponent;function l(t){var n={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach((function(t){var e=t.replace(/\+/g," ").split("="),r=c(e.shift()),i=e.length>0?c(e.join("=")):null;void 0===n[r]?n[r]=i:Array.isArray(n[r])?n[r].push(i):n[r]=[n[r],i]})),n):n}function d(t){var n=t?Object.keys(t).map((function(n){var e=t[n];if(void 0===e)return"";if(null===e)return s(n);if(Array.isArray(e)){var r=[];return e.forEach((function(t){void 0!==t&&(null===t?r.push(s(n)):r.push(s(n)+"="+s(t)))})),r.join("&")}return s(n)+"="+s(e)})).filter((function(t){return t.length>0})).join("&"):null;return n?"?"+n:""}var p=/\/?$/;function f(t,n,e,r){var i=r&&r.options.stringifyQuery,o=n.query||{};try{o=g(o)}catch(t){}var a={name:n.name||t&&t.name,meta:t&&t.meta||{},path:n.path||"/",hash:n.hash||"",query:o,params:n.params||{},fullPath:m(n,i),matched:t?A(t):[]};return e&&(a.redirectedFrom=m(e,i)),Object.freeze(a)}function g(t){if(Array.isArray(t))return t.map(g);if(t&&"object"==typeof t){var n={};for(var e in t)n[e]=g(t[e]);return n}return t}var h=f(null,{path:"/"});function A(t){for(var n=[];t;)n.unshift(t),t=t.parent;return n}function m(t,n){var e=t.path,r=t.query;void 0===r&&(r={});var i=t.hash;return void 0===i&&(i=""),(e||"/")+(n||d)(r)+i}function b(t,n){return n===h?t===n:!!n&&(t.path&&n.path?t.path.replace(p,"")===n.path.replace(p,"")&&t.hash===n.hash&&v(t.query,n.query):!(!t.name||!n.name)&&t.name===n.name&&t.hash===n.hash&&v(t.query,n.query)&&v(t.params,n.params))}function v(t,n){if(void 0===t&&(t={}),void 0===n&&(n={}),!t||!n)return t===n;var e=Object.keys(t),r=Object.keys(n);return e.length===r.length&&e.every((function(e){var r=t[e],i=n[e];return"object"==typeof r&&"object"==typeof i?v(r,i):String(r)===String(i)}))}var $,C={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(t){var n=this,e=this.$router,r=this.$route,i=e.resolve(this.to,r,this.append),o=i.location,a=i.route,u=i.href,s={},c=e.options.linkActiveClass,l=e.options.linkExactActiveClass,d=null==c?"router-link-active":c,g=null==l?"router-link-exact-active":l,h=null==this.activeClass?d:this.activeClass,A=null==this.exactActiveClass?g:this.exactActiveClass,m=o.path?f(null,o,null,e):a;s[A]=b(r,m),s[h]=this.exact?s[A]:function(t,n){return 0===t.path.replace(p,"/").indexOf(n.path.replace(p,"/"))&&(!n.hash||t.hash===n.hash)&&function(t,n){for(var e in n)if(!(e in t))return!1;return!0}(t.query,n.query)}(r,m);var v=function(t){y(t)&&(n.replace?e.replace(o):e.push(o))},C={click:y};Array.isArray(this.event)?this.event.forEach((function(t){C[t]=v})):C[this.event]=v;var w={class:s};if("a"===this.tag)w.on=C,w.attrs={href:u};else{var k=x(this.$slots.default);if(k){k.isStatic=!1;var _=$.util.extend;(k.data=_({},k.data)).on=C,(k.data.attrs=_({},k.data.attrs)).href=u}else w.on=C}return t(this.tag,w,this.$slots.default)}};function y(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey||t.defaultPrevented||void 0!==t.button&&0!==t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){var n=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(n))return}return t.preventDefault&&t.preventDefault(),!0}}function x(t){if(t)for(var n,e=0;e<t.length;e++){if("a"===(n=t[e]).tag)return n;if(n.children&&(n=x(n.children)))return n}}var w="undefined"!=typeof window;function k(t,n,e){var r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return n+t;var i=n.split("/");e&&i[i.length-1]||i.pop();for(var o=t.replace(/^\//,"").split("/"),a=0;a<o.length;a++){var u=o[a];".."===u?i.pop():"."!==u&&i.push(u)}return""!==i[0]&&i.unshift(""),i.join("/")}function _(t){return t.replace(/\/\//g,"/")}var B=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},E=function t(n,e,r){return B(e)||(r=e||r,e=[]),r=r||{},n instanceof RegExp?function(t,n){var e=t.source.match(/\((?!\?)/g);if(e)for(var r=0;r<e.length;r++)n.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return U(t,n)}(n,e):B(n)?function(n,e,r){for(var i=[],o=0;o<n.length;o++)i.push(t(n[o],e,r).source);return U(new RegExp("(?:"+i.join("|")+")",R(r)),e)}(n,e,r):function(t,n,e){return L(D(t,e),n,e)}(n,e,r)},S=D,O=j,T=L,P=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function D(t,n){for(var e,r=[],i=0,o=0,a="",u=n&&n.delimiter||"/";null!=(e=P.exec(t));){var s=e[0],c=e[1],l=e.index;if(a+=t.slice(o,l),o=l+s.length,c)a+=c[1];else{var d=t[o],p=e[2],f=e[3],g=e[4],h=e[5],A=e[6],m=e[7];a&&(r.push(a),a="");var b=null!=p&&null!=d&&d!==p,v="+"===A||"*"===A,$="?"===A||"*"===A,C=e[2]||u,y=g||h;r.push({name:f||i++,prefix:p||"",delimiter:C,optional:$,repeat:v,partial:b,asterisk:!!m,pattern:y?M(y):m?".*":"[^"+I(C)+"]+?"})}}return o<t.length&&(a+=t.substr(o)),a&&r.push(a),r}function z(t){return encodeURI(t).replace(/[\/?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()}))}function j(t){for(var n=new Array(t.length),e=0;e<t.length;e++)"object"==typeof t[e]&&(n[e]=new RegExp("^(?:"+t[e].pattern+")$"));return function(e,r){for(var i="",o=e||{},a=(r||{}).pretty?z:encodeURIComponent,u=0;u<t.length;u++){var s=t[u];if("string"!=typeof s){var c,l=o[s.name];if(null==l){if(s.optional){s.partial&&(i+=s.prefix);continue}throw new TypeError('Expected "'+s.name+'" to be defined')}if(B(l)){if(!s.repeat)throw new TypeError('Expected "'+s.name+'" to not repeat, but received `'+JSON.stringify(l)+"`");if(0===l.length){if(s.optional)continue;throw new TypeError('Expected "'+s.name+'" to not be empty')}for(var d=0;d<l.length;d++){if(c=a(l[d]),!n[u].test(c))throw new TypeError('Expected all "'+s.name+'" to match "'+s.pattern+'", but received `'+JSON.stringify(c)+"`");i+=(0===d?s.prefix:s.delimiter)+c}}else{if(c=s.asterisk?encodeURI(l).replace(/[?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()})):a(l),!n[u].test(c))throw new TypeError('Expected "'+s.name+'" to match "'+s.pattern+'", but received "'+c+'"');i+=s.prefix+c}}else i+=s}return i}}function I(t){return t.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function M(t){return t.replace(/([=!:$\/()])/g,"\\$1")}function U(t,n){return t.keys=n,t}function R(t){return t.sensitive?"":"i"}function L(t,n,e){B(n)||(e=n||e,n=[]);for(var r=(e=e||{}).strict,i=!1!==e.end,o="",a=0;a<t.length;a++){var u=t[a];if("string"==typeof u)o+=I(u);else{var s=I(u.prefix),c="(?:"+u.pattern+")";n.push(u),u.repeat&&(c+="(?:"+s+c+")*"),o+=c=u.optional?u.partial?s+"("+c+")?":"(?:"+s+"("+c+"))?":s+"("+c+")"}}var l=I(e.delimiter||"/"),d=o.slice(-l.length)===l;return r||(o=(d?o.slice(0,-l.length):o)+"(?:"+l+"(?=$))?"),o+=i?"$":r&&d?"":"(?="+l+"|$)",U(new RegExp("^"+o,R(e)),n)}E.parse=S,E.compile=function(t,n){return j(D(t,n))},E.tokensToFunction=O,E.tokensToRegExp=T;var q=Object.create(null);function N(t,n,e){try{return(q[t]||(q[t]=E.compile(t)))(n||{},{pretty:!0})}catch(t){return""}}function W(t,n,e,r){var i=n||[],o=e||Object.create(null),a=r||Object.create(null);t.forEach((function(t){F(i,o,a,t)}));for(var u=0,s=i.length;u<s;u++)"*"===i[u]&&(i.push(i.splice(u,1)[0]),s--,u--);return{pathList:i,pathMap:o,nameMap:a}}function F(t,n,e,r,i,o){var a=r.path,u=r.name,s=r.pathToRegexpOptions||{},c=function(t,n,e){return e||(t=t.replace(/\/$/,"")),"/"===t[0]||null==n?t:_(n.path+"/"+t)}(a,i,s.strict);"boolean"==typeof r.caseSensitive&&(s.sensitive=r.caseSensitive);var l={path:c,regex:Z(c,s),components:r.components||{default:r.component},instances:{},name:u,parent:i,matchAs:o,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 i=o?_(o+"/"+r.path):void 0;F(t,n,e,r,l,i)})),void 0!==r.alias&&(Array.isArray(r.alias)?r.alias:[r.alias]).forEach((function(o){var a={path:o,children:r.children};F(t,n,e,a,i,l.path||"/")})),n[l.path]||(t.push(l.path),n[l.path]=l),u&&(e[u]||(e[u]=l))}function Z(t,n){return E(t,[],n)}function X(t,n,e,r){var i="string"==typeof t?{path:t}:t;if(i.name||i._normalized)return i;if(!i.path&&i.params&&n){(i=H({},i))._normalized=!0;var o=H(H({},n.params),i.params);if(n.name)i.name=n.name,i.params=o;else if(n.matched.length){var a=n.matched[n.matched.length-1].path;i.path=N(a,o,n.path)}return i}var u=function(t){var n="",e="",r=t.indexOf("#");r>=0&&(n=t.slice(r),t=t.slice(0,r));var i=t.indexOf("?");return i>=0&&(e=t.slice(i+1),t=t.slice(0,i)),{path:t,query:e,hash:n}}(i.path||""),s=n&&n.path||"/",c=u.path?k(u.path,s,e||i.append):s,d=function(t,n,e){void 0===n&&(n={});var r,i=e||l;try{r=i(t||"")}catch(t){r={}}for(var o in n)r[o]=n[o];return r}(u.query,i.query,r&&r.options.parseQuery),p=i.hash||u.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:c,query:d,hash:p}}function H(t,n){for(var e in n)t[e]=n[e];return t}function Y(t,n){var e=W(t),r=e.pathList,i=e.pathMap,o=e.nameMap;function a(t,e,a){var s=X(t,e,!1,n),c=s.name;if(c){var l=o[c];if(!l)return u(null,s);var d=l.regex.keys.filter((function(t){return!t.optional})).map((function(t){return t.name}));if("object"!=typeof s.params&&(s.params={}),e&&"object"==typeof e.params)for(var p in e.params)!(p in s.params)&&d.indexOf(p)>-1&&(s.params[p]=e.params[p]);if(l)return s.path=N(l.path,s.params),u(l,s,a)}else if(s.path){s.params={};for(var f=0;f<r.length;f++){var g=r[f],h=i[g];if(V(h.regex,s.path,s.params))return u(h,s,a)}}return u(null,s)}function u(t,e,r){return t&&t.redirect?function(t,e){var r=t.redirect,i="function"==typeof r?r(f(t,e,null,n)):r;if("string"==typeof i&&(i={path:i}),!i||"object"!=typeof i)return u(null,e);var s=i,c=s.name,l=s.path,d=e.query,p=e.hash,g=e.params;return d=s.hasOwnProperty("query")?s.query:d,p=s.hasOwnProperty("hash")?s.hash:p,g=s.hasOwnProperty("params")?s.params:g,c?(o[c],a({_normalized:!0,name:c,query:d,hash:p,params:g},void 0,e)):l?a({_normalized:!0,path:N(function(t,n){return k(t,n.parent?n.parent.path:"/",!0)}(l,t),g),query:d,hash:p},void 0,e):u(null,e)}(t,r||e):t&&t.matchAs?function(t,n,e){var r=a({_normalized:!0,path:N(e,n.params)});if(r){var i=r.matched,o=i[i.length-1];return n.params=r.params,u(o,n)}return u(null,n)}(0,e,t.matchAs):f(t,e,r,n)}return{match:a,addRoutes:function(t){W(t,r,i,o)}}}function V(t,n,e){var r=n.match(t);if(!r)return!1;if(!e)return!0;for(var i=1,o=r.length;i<o;++i){var a=t.keys[i-1],u="string"==typeof r[i]?decodeURIComponent(r[i]):r[i];a&&(e[a.name]=u)}return!0}var G=Object.create(null);function Q(){window.history.replaceState({key:ct()},""),window.addEventListener("popstate",(function(t){var n;J(),t.state&&t.state.key&&(n=t.state.key,ut=n)}))}function K(t,n,e,r){if(t.app){var i=t.options.scrollBehavior;i&&t.app.$nextTick((function(){var t=function(){var t=ct();if(t)return G[t]}(),o=i(n,e,r?t:null);o&&("function"==typeof o.then?o.then((function(n){rt(n,t)})).catch((function(t){})):rt(o,t))}))}}function J(){var t=ct();t&&(G[t]={x:window.pageXOffset,y:window.pageYOffset})}function tt(t){return et(t.x)||et(t.y)}function nt(t){return{x:et(t.x)?t.x:window.pageXOffset,y:et(t.y)?t.y:window.pageYOffset}}function et(t){return"number"==typeof t}function rt(t,n){var e,r="object"==typeof t;if(r&&"string"==typeof t.selector){var i=document.querySelector(t.selector);if(i){var o=t.offset&&"object"==typeof t.offset?t.offset:{};n=function(t,n){var e=document.documentElement.getBoundingClientRect(),r=t.getBoundingClientRect();return{x:r.left-e.left-n.x,y:r.top-e.top-n.y}}(i,o={x:et((e=o).x)?e.x:0,y:et(e.y)?e.y:0})}else tt(t)&&(n=nt(t))}else r&&tt(t)&&(n=nt(t));n&&window.scrollTo(n.x,n.y)}var it,ot=w&&(-1===(it=window.navigator.userAgent).indexOf("Android 2.")&&-1===it.indexOf("Android 4.0")||-1===it.indexOf("Mobile Safari")||-1!==it.indexOf("Chrome")||-1!==it.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,at=w&&window.performance&&window.performance.now?window.performance:Date,ut=st();function st(){return at.now().toFixed(3)}function ct(){return ut}function lt(t,n){J();var e=window.history;try{n?e.replaceState({key:ut},"",t):(ut=st(),e.pushState({key:ut},"",t))}catch(e){window.location[n?"replace":"assign"](t)}}function dt(t){lt(t,!0)}function pt(t,n,e){var r=function(i){i>=t.length?e():t[i]?n(t[i],(function(){r(i+1)})):r(i+1)};r(0)}function ft(t,n){return gt(t.map((function(t){return Object.keys(t.components).map((function(e){return n(t.components[e],t.instances[e],t,e)}))})))}function gt(t){return Array.prototype.concat.apply([],t)}var ht="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function At(t){var n=!1;return function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];if(!n)return n=!0,t.apply(this,e)}}var mt=function(t,n){this.router=t,this.base=function(t){if(!t)if(w){var n=document.querySelector("base");t=(t=n&&n.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";return"/"!==t.charAt(0)&&(t="/"+t),t.replace(/\/$/,"")}(n),this.current=h,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[]};function bt(t,n,e,r){var i=ft(t,(function(t,r,i,o){var a=function(t,n){return"function"!=typeof t&&(t=$.extend(t)),t.options[n]}(t,n);if(a)return Array.isArray(a)?a.map((function(t){return e(t,r,i,o)})):e(a,r,i,o)}));return gt(r?i.reverse():i)}function vt(t,n){if(n)return function(){return t.apply(n,arguments)}}function $t(t,n,e,r){n[e]?t(n[e]):r()&&setTimeout((function(){$t(t,n,e,r)}),16)}mt.prototype.listen=function(t){this.cb=t},mt.prototype.onReady=function(t,n){this.ready?t():(this.readyCbs.push(t),n&&this.readyErrorCbs.push(n))},mt.prototype.onError=function(t){this.errorCbs.push(t)},mt.prototype.transitionTo=function(t,n,e){var r=this,i=this.router.match(t,this.current);this.confirmTransition(i,(function(){r.updateRoute(i),n&&n(i),r.ensureURL(),r.ready||(r.ready=!0,r.readyCbs.forEach((function(t){t(i)})))}),(function(t){e&&e(t),t&&!r.ready&&(r.ready=!0,r.readyErrorCbs.forEach((function(n){n(t)})))}))},mt.prototype.confirmTransition=function(t,n,e){var i=this,o=this.current,a=function(t){r(t)&&(i.errorCbs.length?i.errorCbs.forEach((function(n){n(t)})):console.error(t)),e&&e(t)};if(b(t,o)&&t.matched.length===o.matched.length)return this.ensureURL(),a();var u,s=function(t,n){var e,r=Math.max(t.length,n.length);for(e=0;e<r&&t[e]===n[e];e++);return{updated:n.slice(0,e),activated:n.slice(e),deactivated:t.slice(e)}}(this.current.matched,t.matched),c=s.updated,l=s.deactivated,d=s.activated,p=[].concat(function(t){return bt(t,"beforeRouteLeave",vt,!0)}(l),this.router.beforeHooks,function(t){return bt(t,"beforeRouteUpdate",vt)}(c),d.map((function(t){return t.beforeEnter})),(u=d,function(t,n,e){var i=!1,o=0,a=null;ft(u,(function(t,n,u,s){if("function"==typeof t&&void 0===t.cid){i=!0,o++;var c,l=At((function(n){var r;((r=n).__esModule||ht&&"Module"===r[Symbol.toStringTag])&&(n=n.default),t.resolved="function"==typeof n?n:$.extend(n),u.components[s]=n,--o<=0&&e()})),d=At((function(t){var n="Failed to resolve async component "+s+": "+t;a||(a=r(t)?t:new Error(n),e(a))}));try{c=t(l,d)}catch(t){d(t)}if(c)if("function"==typeof c.then)c.then(l,d);else{var p=c.component;p&&"function"==typeof p.then&&p.then(l,d)}}})),i||e()}));this.pending=t;var f=function(n,e){if(i.pending!==t)return a();try{n(t,o,(function(t){!1===t||r(t)?(i.ensureURL(!0),a(t)):"string"==typeof t||"object"==typeof t&&("string"==typeof t.path||"string"==typeof t.name)?(a(),"object"==typeof t&&t.replace?i.replace(t):i.push(t)):e(t)}))}catch(t){a(t)}};pt(p,f,(function(){var e=[];pt(function(t,n,e){return bt(t,"beforeRouteEnter",(function(t,r,i,o){return function(t,n,e,r,i){return function(o,a,u){return t(o,a,(function(t){u(t),"function"==typeof t&&r.push((function(){$t(t,n.instances,e,i)}))}))}}(t,i,o,n,e)}))}(d,e,(function(){return i.current===t})).concat(i.router.resolveHooks),f,(function(){if(i.pending!==t)return a();i.pending=null,n(t),i.router.app&&i.router.app.$nextTick((function(){e.forEach((function(t){t()}))}))}))}))},mt.prototype.updateRoute=function(t){var n=this.current;this.current=t,this.cb&&this.cb(t),this.router.afterHooks.forEach((function(e){e&&e(t,n)}))};var Ct=function(t){function n(n,e){var r=this;t.call(this,n,e);var i=n.options.scrollBehavior;i&&Q();var o=yt(this.base);window.addEventListener("popstate",(function(t){var e=r.current,a=yt(r.base);r.current===h&&a===o||r.transitionTo(a,(function(t){i&&K(n,t,e,!0)}))}))}return t&&(n.__proto__=t),n.prototype=Object.create(t&&t.prototype),n.prototype.constructor=n,n.prototype.go=function(t){window.history.go(t)},n.prototype.push=function(t,n,e){var r=this,i=this.current;this.transitionTo(t,(function(t){lt(_(r.base+t.fullPath)),K(r.router,t,i,!1),n&&n(t)}),e)},n.prototype.replace=function(t,n,e){var r=this,i=this.current;this.transitionTo(t,(function(t){dt(_(r.base+t.fullPath)),K(r.router,t,i,!1),n&&n(t)}),e)},n.prototype.ensureURL=function(t){if(yt(this.base)!==this.current.fullPath){var n=_(this.base+this.current.fullPath);t?lt(n):dt(n)}},n.prototype.getCurrentLocation=function(){return yt(this.base)},n}(mt);function yt(t){var n=window.location.pathname;return t&&0===n.indexOf(t)&&(n=n.slice(t.length)),(n||"/")+window.location.search+window.location.hash}var xt=function(t){function n(n,e,r){t.call(this,n,e),r&&function(t){var n=yt(t);if(!/^\/#/.test(n))return window.location.replace(_(t+"/#"+n)),!0}(this.base)||wt()}return t&&(n.__proto__=t),n.prototype=Object.create(t&&t.prototype),n.prototype.constructor=n,n.prototype.setupListeners=function(){var t=this,n=this.router.options.scrollBehavior,e=ot&&n;e&&Q(),window.addEventListener(ot?"popstate":"hashchange",(function(){var n=t.current;wt()&&t.transitionTo(kt(),(function(r){e&&K(t.router,r,n,!0),ot||Et(r.fullPath)}))}))},n.prototype.push=function(t,n,e){var r=this,i=this.current;this.transitionTo(t,(function(t){Bt(t.fullPath),K(r.router,t,i,!1),n&&n(t)}),e)},n.prototype.replace=function(t,n,e){var r=this,i=this.current;this.transitionTo(t,(function(t){Et(t.fullPath),K(r.router,t,i,!1),n&&n(t)}),e)},n.prototype.go=function(t){window.history.go(t)},n.prototype.ensureURL=function(t){var n=this.current.fullPath;kt()!==n&&(t?Bt(n):Et(n))},n.prototype.getCurrentLocation=function(){return kt()},n}(mt);function wt(){var t=kt();return"/"===t.charAt(0)||(Et("/"+t),!1)}function kt(){var t=window.location.href,n=t.indexOf("#");return-1===n?"":t.slice(n+1)}function _t(t){var n=window.location.href,e=n.indexOf("#");return(e>=0?n.slice(0,e):n)+"#"+t}function Bt(t){ot?lt(_t(t)):window.location.hash=t}function Et(t){ot?dt(_t(t)):window.location.replace(_t(t))}var St=function(t){function n(n,e){t.call(this,n,e),this.stack=[],this.index=-1}return t&&(n.__proto__=t),n.prototype=Object.create(t&&t.prototype),n.prototype.constructor=n,n.prototype.push=function(t,n,e){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,n&&n(t)}),e)},n.prototype.replace=function(t,n,e){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),n&&n(t)}),e)},n.prototype.go=function(t){var n=this,e=this.index+t;if(!(e<0||e>=this.stack.length)){var r=this.stack[e];this.confirmTransition(r,(function(){n.index=e,n.updateRoute(r)}))}},n.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},n.prototype.ensureURL=function(){},n}(mt),Ot=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Y(t.routes||[],this);var n=t.mode||"hash";switch(this.fallback="history"===n&&!ot&&!1!==t.fallback,this.fallback&&(n="hash"),w||(n="abstract"),this.mode=n,n){case"history":this.history=new Ct(this,t.base);break;case"hash":this.history=new xt(this,t.base,this.fallback);break;case"abstract":this.history=new St(this,t.base)}},Tt={currentRoute:{configurable:!0}};function Pt(t,n){return t.push(n),function(){var e=t.indexOf(n);e>-1&&t.splice(e,1)}}Ot.prototype.match=function(t,n,e){return this.matcher.match(t,n,e)},Tt.currentRoute.get=function(){return this.history&&this.history.current},Ot.prototype.init=function(t){var n=this;if(this.apps.push(t),!this.app){this.app=t;var e=this.history;if(e instanceof Ct)e.transitionTo(e.getCurrentLocation());else if(e instanceof xt){var r=function(){e.setupListeners()};e.transitionTo(e.getCurrentLocation(),r,r)}e.listen((function(t){n.apps.forEach((function(n){n._route=t}))}))}},Ot.prototype.beforeEach=function(t){return Pt(this.beforeHooks,t)},Ot.prototype.beforeResolve=function(t){return Pt(this.resolveHooks,t)},Ot.prototype.afterEach=function(t){return Pt(this.afterHooks,t)},Ot.prototype.onReady=function(t,n){this.history.onReady(t,n)},Ot.prototype.onError=function(t){this.history.onError(t)},Ot.prototype.push=function(t,n,e){this.history.push(t,n,e)},Ot.prototype.replace=function(t,n,e){this.history.replace(t,n,e)},Ot.prototype.go=function(t){this.history.go(t)},Ot.prototype.back=function(){this.go(-1)},Ot.prototype.forward=function(){this.go(1)},Ot.prototype.getMatchedComponents=function(t){var n=t?t.matched?t:this.resolve(t).route:this.currentRoute;return n?[].concat.apply([],n.matched.map((function(t){return Object.keys(t.components).map((function(n){return t.components[n]}))}))):[]},Ot.prototype.resolve=function(t,n,e){var r=X(t,n||this.history.current,e,this),i=this.match(r,n),o=i.redirectedFrom||i.fullPath;return{location:r,route:i,href:function(t,n,e){var r="hash"===e?"#"+n:n;return t?_(t+"/"+r):r}(this.history.base,o,this.mode),normalizedTo:r,resolved:i}},Ot.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==h&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Ot.prototype,Tt),Ot.install=function t(n){if(!t.installed||$!==n){t.installed=!0,$=n;var e=function(t){return void 0!==t},r=function(t,n){var r=t.$options._parentVnode;e(r)&&e(r=r.data)&&e(r=r.registerRouteInstance)&&r(t,n)};n.mixin({beforeCreate:function(){e(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),n.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(n.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(n.prototype,"$route",{get:function(){return this._routerRoot._route}}),n.component("router-view",i),n.component("router-link",C);var o=n.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Ot.version="2.8.1",w&&window.Vue&&window.Vue.use(Ot);const Dt=Ot},83408:(t,n,e)=>{var r=e(92061);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[t.id,r,""]]),r.locals&&(t.exports=r.locals),(0,e(45346).Z)("3e40d918",r,!1,{})},95007:(t,n,e)=>{var r=e(14225);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[t.id,r,""]]),r.locals&&(t.exports=r.locals),(0,e(45346).Z)("001ef0d4",r,!1,{})},66694:(t,n,e)=>{var r=e(86081);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[t.id,r,""]]),r.locals&&(t.exports=r.locals),(0,e(45346).Z)("75746c6e",r,!1,{})},34278:(t,n,e)=>{var r=e(25924);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[t.id,r,""]]),r.locals&&(t.exports=r.locals),(0,e(45346).Z)("209e4dfe",r,!1,{})},56686:(t,n,e)=>{var r=e(99718);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[t.id,r,""]]),r.locals&&(t.exports=r.locals),(0,e(45346).Z)("a720cb1a",r,!1,{})},54155:(t,n,e)=>{var r=e(5897);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[t.id,r,""]]),r.locals&&(t.exports=r.locals),(0,e(45346).Z)("e3bc7036",r,!1,{})},45346:(t,n,e)=>{"use strict";function r(t,n){for(var e=[],r={},i=0;i<n.length;i++){var o=n[i],a=o[0],u={id:t+":"+i,css:o[1],media:o[2],sourceMap:o[3]};r[a]?r[a].parts.push(u):e.push(r[a]={id:a,parts:[u]})}return e}e.d(n,{Z:()=>g});var i="undefined"!=typeof document;if("undefined"!=typeof DEBUG&&DEBUG&&!i)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 o={},a=i&&(document.head||document.getElementsByTagName("head")[0]),u=null,s=0,c=!1,l=function(){},d=null,p="data-vue-ssr-id",f="undefined"!=typeof navigator&&/msie [6-9]\b/.test(navigator.userAgent.toLowerCase());function g(t,n,e,i){c=e,d=i||{};var a=r(t,n);return h(a),function(n){for(var e=[],i=0;i<a.length;i++){var u=a[i];(s=o[u.id]).refs--,e.push(s)}for(n?h(a=r(t,n)):a=[],i=0;i<e.length;i++){var s;if(0===(s=e[i]).refs){for(var c=0;c<s.parts.length;c++)s.parts[c]();delete o[s.id]}}}}function h(t){for(var n=0;n<t.length;n++){var e=t[n],r=o[e.id];if(r){r.refs++;for(var i=0;i<r.parts.length;i++)r.parts[i](e.parts[i]);for(;i<e.parts.length;i++)r.parts.push(m(e.parts[i]));r.parts.length>e.parts.length&&(r.parts.length=e.parts.length)}else{var a=[];for(i=0;i<e.parts.length;i++)a.push(m(e.parts[i]));o[e.id]={id:e.id,refs:1,parts:a}}}}function A(){var t=document.createElement("style");return t.type="text/css",a.appendChild(t),t}function m(t){var n,e,r=document.querySelector("style["+p+'~="'+t.id+'"]');if(r){if(c)return l;r.parentNode.removeChild(r)}if(f){var i=s++;r=u||(u=A()),n=$.bind(null,r,i,!1),e=$.bind(null,r,i,!0)}else r=A(),n=C.bind(null,r),e=function(){r.parentNode.removeChild(r)};return n(t),function(r){if(r){if(r.css===t.css&&r.media===t.media&&r.sourceMap===t.sourceMap)return;n(t=r)}else e()}}var b,v=(b=[],function(t,n){return b[t]=n,b.filter(Boolean).join("\n")});function $(t,n,e,r){var i=e?"":r.css;if(t.styleSheet)t.styleSheet.cssText=v(n,i);else{var o=document.createTextNode(i),a=t.childNodes;a[n]&&t.removeChild(a[n]),a.length?t.insertBefore(o,a[n]):t.appendChild(o)}}function C(t,n){var e=n.css,r=n.media,i=n.sourceMap;if(r&&t.setAttribute("media",r),d.ssrId&&t.setAttribute(p,n.id),i&&(e+="\n/*# sourceURL="+i.sources[0]+" */",e+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(i))))+" */"),t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},72100:(t,n,e)=>{t.exports=e(91317)},91317:(t,n,e)=>{"use strict";var r=Object.freeze({});function i(t){return null==t}function o(t){return null!=t}function a(t){return!0===t}function u(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function s(t){return null!==t&&"object"==typeof t}var c=Object.prototype.toString;function l(t){return"[object Object]"===c.call(t)}function d(t){var n=parseFloat(String(t));return n>=0&&Math.floor(n)===n&&isFinite(t)}function p(t){return o(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function f(t){return null==t?"":Array.isArray(t)||l(t)&&t.toString===c?JSON.stringify(t,null,2):String(t)}function g(t){var n=parseFloat(t);return isNaN(n)?t:n}function h(t,n){for(var e=Object.create(null),r=t.split(","),i=0;i<r.length;i++)e[r[i]]=!0;return n?function(t){return e[t.toLowerCase()]}:function(t){return e[t]}}var A=h("slot,component",!0),m=h("key,ref,slot,slot-scope,is");function b(t,n){if(t.length){var e=t.indexOf(n);if(e>-1)return t.splice(e,1)}}var v=Object.prototype.hasOwnProperty;function $(t,n){return v.call(t,n)}function C(t){var n=Object.create(null);return function(e){return n[e]||(n[e]=t(e))}}var y=/-(\w)/g,x=C((function(t){return t.replace(y,(function(t,n){return n?n.toUpperCase():""}))})),w=C((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),k=/\B([A-Z])/g,_=C((function(t){return t.replace(k,"-$1").toLowerCase()})),B=Function.prototype.bind?function(t,n){return t.bind(n)}:function(t,n){function e(e){var r=arguments.length;return r?r>1?t.apply(n,arguments):t.call(n,e):t.call(n)}return e._length=t.length,e};function E(t,n){n=n||0;for(var e=t.length-n,r=new Array(e);e--;)r[e]=t[e+n];return r}function S(t,n){for(var e in n)t[e]=n[e];return t}function O(t){for(var n={},e=0;e<t.length;e++)t[e]&&S(n,t[e]);return n}function T(t,n,e){}var P=function(t,n,e){return!1},D=function(t){return t};function z(t,n){if(t===n)return!0;var e=s(t),r=s(n);if(!e||!r)return!e&&!r&&String(t)===String(n);try{var i=Array.isArray(t),o=Array.isArray(n);if(i&&o)return t.length===n.length&&t.every((function(t,e){return z(t,n[e])}));if(t instanceof Date&&n instanceof Date)return t.getTime()===n.getTime();if(i||o)return!1;var a=Object.keys(t),u=Object.keys(n);return a.length===u.length&&a.every((function(e){return z(t[e],n[e])}))}catch(t){return!1}}function j(t,n){for(var e=0;e<t.length;e++)if(z(t[e],n))return e;return-1}function I(t){var n=!1;return function(){n||(n=!0,t.apply(this,arguments))}}var M="data-server-rendered",U=["component","directive","filter"],R=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch"],L={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:P,isReservedAttr:P,isUnknownElement:P,getTagNamespace:T,parsePlatformTagName:D,mustUseProp:P,async:!0,_lifecycleHooks:R},q=/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 N(t,n,e,r){Object.defineProperty(t,n,{value:e,enumerable:!!r,writable:!0,configurable:!0})}var W,F=new RegExp("[^"+q.source+".$_\\d]"),Z="__proto__"in{},X="undefined"!=typeof window,H="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,Y=H&&WXEnvironment.platform.toLowerCase(),V=X&&window.navigator.userAgent.toLowerCase(),G=V&&/msie|trident/.test(V),Q=V&&V.indexOf("msie 9.0")>0,K=V&&V.indexOf("edge/")>0,J=(V&&V.indexOf("android"),V&&/iphone|ipad|ipod|ios/.test(V)||"ios"===Y),tt=(V&&/chrome\/\d+/.test(V),V&&/phantomjs/.test(V),V&&V.match(/firefox\/(\d+)/)),nt={}.watch,et=!1;if(X)try{var rt={};Object.defineProperty(rt,"passive",{get:function(){et=!0}}),window.addEventListener("test-passive",null,rt)}catch(r){}var it=function(){return void 0===W&&(W=!X&&!H&&void 0!==e.g&&e.g.process&&"server"===e.g.process.env.VUE_ENV),W},ot=X&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function at(t){return"function"==typeof t&&/native code/.test(t.toString())}var ut,st="undefined"!=typeof Symbol&&at(Symbol)&&"undefined"!=typeof Reflect&&at(Reflect.ownKeys);ut="undefined"!=typeof Set&&at(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ct=T,lt=0,dt=function(){this.id=lt++,this.subs=[]};dt.prototype.addSub=function(t){this.subs.push(t)},dt.prototype.removeSub=function(t){b(this.subs,t)},dt.prototype.depend=function(){dt.target&&dt.target.addDep(this)},dt.prototype.notify=function(){for(var t=this.subs.slice(),n=0,e=t.length;n<e;n++)t[n].update()},dt.target=null;var pt=[];function ft(t){pt.push(t),dt.target=t}function gt(){pt.pop(),dt.target=pt[pt.length-1]}var ht=function(t,n,e,r,i,o,a,u){this.tag=t,this.data=n,this.children=e,this.text=r,this.elm=i,this.ns=void 0,this.context=o,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=n&&n.key,this.componentOptions=a,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=u,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},At={child:{configurable:!0}};At.child.get=function(){return this.componentInstance},Object.defineProperties(ht.prototype,At);var mt=function(t){void 0===t&&(t="");var n=new ht;return n.text=t,n.isComment=!0,n};function bt(t){return new ht(void 0,void 0,void 0,String(t))}function vt(t){var n=new ht(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return n.ns=t.ns,n.isStatic=t.isStatic,n.key=t.key,n.isComment=t.isComment,n.fnContext=t.fnContext,n.fnOptions=t.fnOptions,n.fnScopeId=t.fnScopeId,n.asyncMeta=t.asyncMeta,n.isCloned=!0,n}var $t=Array.prototype,Ct=Object.create($t);["push","pop","shift","unshift","splice","sort","reverse"].forEach((function(t){var n=$t[t];N(Ct,t,(function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];var i,o=n.apply(this,e),a=this.__ob__;switch(t){case"push":case"unshift":i=e;break;case"splice":i=e.slice(2)}return i&&a.observeArray(i),a.dep.notify(),o}))}));var yt=Object.getOwnPropertyNames(Ct),xt=!0;function wt(t){xt=t}var kt=function(t){var n;this.value=t,this.dep=new dt,this.vmCount=0,N(t,"__ob__",this),Array.isArray(t)?(Z?(n=Ct,t.__proto__=n):function(t,n,e){for(var r=0,i=e.length;r<i;r++){var o=e[r];N(t,o,n[o])}}(t,Ct,yt),this.observeArray(t)):this.walk(t)};function _t(t,n){var e;if(s(t)&&!(t instanceof ht))return $(t,"__ob__")&&t.__ob__ instanceof kt?e=t.__ob__:xt&&!it()&&(Array.isArray(t)||l(t))&&Object.isExtensible(t)&&!t._isVue&&(e=new kt(t)),n&&e&&e.vmCount++,e}function Bt(t,n,e,r,i){var o=new dt,a=Object.getOwnPropertyDescriptor(t,n);if(!a||!1!==a.configurable){var u=a&&a.get,s=a&&a.set;u&&!s||2!==arguments.length||(e=t[n]);var c=!i&&_t(e);Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:function(){var n=u?u.call(t):e;return dt.target&&(o.depend(),c&&(c.dep.depend(),Array.isArray(n)&&function t(n){for(var e=void 0,r=0,i=n.length;r<i;r++)(e=n[r])&&e.__ob__&&e.__ob__.dep.depend(),Array.isArray(e)&&t(e)}(n))),n},set:function(n){var r=u?u.call(t):e;n===r||n!=n&&r!=r||u&&!s||(s?s.call(t,n):e=n,c=!i&&_t(n),o.notify())}})}}function Et(t,n,e){if(Array.isArray(t)&&d(n))return t.length=Math.max(t.length,n),t.splice(n,1,e),e;if(n in t&&!(n in Object.prototype))return t[n]=e,e;var r=t.__ob__;return t._isVue||r&&r.vmCount?e:r?(Bt(r.value,n,e),r.dep.notify(),e):(t[n]=e,e)}function St(t,n){if(Array.isArray(t)&&d(n))t.splice(n,1);else{var e=t.__ob__;t._isVue||e&&e.vmCount||$(t,n)&&(delete t[n],e&&e.dep.notify())}}kt.prototype.walk=function(t){for(var n=Object.keys(t),e=0;e<n.length;e++)Bt(t,n[e])},kt.prototype.observeArray=function(t){for(var n=0,e=t.length;n<e;n++)_t(t[n])};var Ot=L.optionMergeStrategies;function Tt(t,n){if(!n)return t;for(var e,r,i,o=st?Reflect.ownKeys(n):Object.keys(n),a=0;a<o.length;a++)"__ob__"!==(e=o[a])&&(r=t[e],i=n[e],$(t,e)?r!==i&&l(r)&&l(i)&&Tt(r,i):Et(t,e,i));return t}function Pt(t,n,e){return e?function(){var r="function"==typeof n?n.call(e,e):n,i="function"==typeof t?t.call(e,e):t;return r?Tt(r,i):i}:n?t?function(){return Tt("function"==typeof n?n.call(this,this):n,"function"==typeof t?t.call(this,this):t)}:n:t}function Dt(t,n){var e=n?t?t.concat(n):Array.isArray(n)?n:[n]:t;return e?function(t){for(var n=[],e=0;e<t.length;e++)-1===n.indexOf(t[e])&&n.push(t[e]);return n}(e):e}function zt(t,n,e,r){var i=Object.create(t||null);return n?S(i,n):i}Ot.data=function(t,n,e){return e?Pt(t,n,e):n&&"function"!=typeof n?t:Pt(t,n)},R.forEach((function(t){Ot[t]=Dt})),U.forEach((function(t){Ot[t+"s"]=zt})),Ot.watch=function(t,n,e,r){if(t===nt&&(t=void 0),n===nt&&(n=void 0),!n)return Object.create(t||null);if(!t)return n;var i={};for(var o in S(i,t),n){var a=i[o],u=n[o];a&&!Array.isArray(a)&&(a=[a]),i[o]=a?a.concat(u):Array.isArray(u)?u:[u]}return i},Ot.props=Ot.methods=Ot.inject=Ot.computed=function(t,n,e,r){if(!t)return n;var i=Object.create(null);return S(i,t),n&&S(i,n),i},Ot.provide=Pt;var jt=function(t,n){return void 0===n?t:n};function It(t,n,e){if("function"==typeof n&&(n=n.options),function(t,n){var e=t.props;if(e){var r,i,o={};if(Array.isArray(e))for(r=e.length;r--;)"string"==typeof(i=e[r])&&(o[x(i)]={type:null});else if(l(e))for(var a in e)i=e[a],o[x(a)]=l(i)?i:{type:i};t.props=o}}(n),function(t,n){var e=t.inject;if(e){var r=t.inject={};if(Array.isArray(e))for(var i=0;i<e.length;i++)r[e[i]]={from:e[i]};else if(l(e))for(var o in e){var a=e[o];r[o]=l(a)?S({from:o},a):{from:a}}}}(n),function(t){var n=t.directives;if(n)for(var e in n){var r=n[e];"function"==typeof r&&(n[e]={bind:r,update:r})}}(n),!n._base&&(n.extends&&(t=It(t,n.extends,e)),n.mixins))for(var r=0,i=n.mixins.length;r<i;r++)t=It(t,n.mixins[r],e);var o,a={};for(o in t)u(o);for(o in n)$(t,o)||u(o);function u(r){var i=Ot[r]||jt;a[r]=i(t[r],n[r],e,r)}return a}function Mt(t,n,e,r){if("string"==typeof e){var i=t[n];if($(i,e))return i[e];var o=x(e);if($(i,o))return i[o];var a=w(o);return $(i,a)?i[a]:i[e]||i[o]||i[a]}}function Ut(t,n,e,r){var i=n[t],o=!$(e,t),a=e[t],u=qt(Boolean,i.type);if(u>-1)if(o&&!$(i,"default"))a=!1;else if(""===a||a===_(t)){var s=qt(String,i.type);(s<0||u<s)&&(a=!0)}if(void 0===a){a=function(t,n,e){if($(n,"default")){var r=n.default;return t&&t.$options.propsData&&void 0===t.$options.propsData[e]&&void 0!==t._props[e]?t._props[e]:"function"==typeof r&&"Function"!==Rt(n.type)?r.call(t):r}}(r,i,t);var c=xt;wt(!0),_t(a),wt(c)}return a}function Rt(t){var n=t&&t.toString().match(/^\s*function (\w+)/);return n?n[1]:""}function Lt(t,n){return Rt(t)===Rt(n)}function qt(t,n){if(!Array.isArray(n))return Lt(n,t)?0:-1;for(var e=0,r=n.length;e<r;e++)if(Lt(n[e],t))return e;return-1}function Nt(t,n,e){ft();try{if(n)for(var r=n;r=r.$parent;){var i=r.$options.errorCaptured;if(i)for(var o=0;o<i.length;o++)try{if(!1===i[o].call(r,t,n,e))return}catch(t){Ft(t,r,"errorCaptured hook")}}Ft(t,n,e)}finally{gt()}}function Wt(t,n,e,r,i){var o;try{(o=e?t.apply(n,e):t.call(n))&&!o._isVue&&p(o)&&!o._handled&&(o.catch((function(t){return Nt(t,r,i+" (Promise/async)")})),o._handled=!0)}catch(t){Nt(t,r,i)}return o}function Ft(t,n,e){if(L.errorHandler)try{return L.errorHandler.call(null,t,n,e)}catch(n){n!==t&&Zt(n)}Zt(t)}function Zt(t,n,e){if(!X&&!H||"undefined"==typeof console)throw t;console.error(t)}var Xt,Ht=!1,Yt=[],Vt=!1;function Gt(){Vt=!1;var t=Yt.slice(0);Yt.length=0;for(var n=0;n<t.length;n++)t[n]()}if("undefined"!=typeof Promise&&at(Promise)){var Qt=Promise.resolve();Xt=function(){Qt.then(Gt),J&&setTimeout(T)},Ht=!0}else if(G||"undefined"==typeof MutationObserver||!at(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())Xt="undefined"!=typeof setImmediate&&at(setImmediate)?function(){setImmediate(Gt)}:function(){setTimeout(Gt,0)};else{var Kt=1,Jt=new MutationObserver(Gt),tn=document.createTextNode(String(Kt));Jt.observe(tn,{characterData:!0}),Xt=function(){Kt=(Kt+1)%2,tn.data=String(Kt)},Ht=!0}function nn(t,n){var e;if(Yt.push((function(){if(t)try{t.call(n)}catch(t){Nt(t,n,"nextTick")}else e&&e(n)})),Vt||(Vt=!0,Xt()),!t&&"undefined"!=typeof Promise)return new Promise((function(t){e=t}))}var en=new ut;function rn(t){!function t(n,e){var r,i,o=Array.isArray(n);if(!(!o&&!s(n)||Object.isFrozen(n)||n instanceof ht)){if(n.__ob__){var a=n.__ob__.dep.id;if(e.has(a))return;e.add(a)}if(o)for(r=n.length;r--;)t(n[r],e);else for(r=(i=Object.keys(n)).length;r--;)t(n[i[r]],e)}}(t,en),en.clear()}var on=C((function(t){var n="&"===t.charAt(0),e="~"===(t=n?t.slice(1):t).charAt(0),r="!"===(t=e?t.slice(1):t).charAt(0);return{name:t=r?t.slice(1):t,once:e,capture:r,passive:n}}));function an(t,n){function e(){var t=arguments,r=e.fns;if(!Array.isArray(r))return Wt(r,null,arguments,n,"v-on handler");for(var i=r.slice(),o=0;o<i.length;o++)Wt(i[o],null,t,n,"v-on handler")}return e.fns=t,e}function un(t,n,e,r,o,u){var s,c,l,d;for(s in t)c=t[s],l=n[s],d=on(s),i(c)||(i(l)?(i(c.fns)&&(c=t[s]=an(c,u)),a(d.once)&&(c=t[s]=o(d.name,c,d.capture)),e(d.name,c,d.capture,d.passive,d.params)):c!==l&&(l.fns=c,t[s]=l));for(s in n)i(t[s])&&r((d=on(s)).name,n[s],d.capture)}function sn(t,n,e){var r;t instanceof ht&&(t=t.data.hook||(t.data.hook={}));var u=t[n];function s(){e.apply(this,arguments),b(r.fns,s)}i(u)?r=an([s]):o(u.fns)&&a(u.merged)?(r=u).fns.push(s):r=an([u,s]),r.merged=!0,t[n]=r}function cn(t,n,e,r,i){if(o(n)){if($(n,e))return t[e]=n[e],i||delete n[e],!0;if($(n,r))return t[e]=n[r],i||delete n[r],!0}return!1}function ln(t){return u(t)?[bt(t)]:Array.isArray(t)?function t(n,e){var r,s,c,l,d=[];for(r=0;r<n.length;r++)i(s=n[r])||"boolean"==typeof s||(l=d[c=d.length-1],Array.isArray(s)?s.length>0&&(dn((s=t(s,(e||"")+"_"+r))[0])&&dn(l)&&(d[c]=bt(l.text+s[0].text),s.shift()),d.push.apply(d,s)):u(s)?dn(l)?d[c]=bt(l.text+s):""!==s&&d.push(bt(s)):dn(s)&&dn(l)?d[c]=bt(l.text+s.text):(a(n._isVList)&&o(s.tag)&&i(s.key)&&o(e)&&(s.key="__vlist"+e+"_"+r+"__"),d.push(s)));return d}(t):void 0}function dn(t){return o(t)&&o(t.text)&&!1===t.isComment}function pn(t,n){if(t){for(var e=Object.create(null),r=st?Reflect.ownKeys(t):Object.keys(t),i=0;i<r.length;i++){var o=r[i];if("__ob__"!==o){for(var a=t[o].from,u=n;u;){if(u._provided&&$(u._provided,a)){e[o]=u._provided[a];break}u=u.$parent}if(!u&&"default"in t[o]){var s=t[o].default;e[o]="function"==typeof s?s.call(n):s}}}return e}}function fn(t,n){if(!t||!t.length)return{};for(var e={},r=0,i=t.length;r<i;r++){var o=t[r],a=o.data;if(a&&a.attrs&&a.attrs.slot&&delete a.attrs.slot,o.context!==n&&o.fnContext!==n||!a||null==a.slot)(e.default||(e.default=[])).push(o);else{var u=a.slot,s=e[u]||(e[u]=[]);"template"===o.tag?s.push.apply(s,o.children||[]):s.push(o)}}for(var c in e)e[c].every(gn)&&delete e[c];return e}function gn(t){return t.isComment&&!t.asyncFactory||" "===t.text}function hn(t,n,e){var i,o=Object.keys(n).length>0,a=t?!!t.$stable:!o,u=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&e&&e!==r&&u===e.$key&&!o&&!e.$hasNormal)return e;for(var s in i={},t)t[s]&&"$"!==s[0]&&(i[s]=An(n,s,t[s]))}else i={};for(var c in n)c in i||(i[c]=mn(n,c));return t&&Object.isExtensible(t)&&(t._normalized=i),N(i,"$stable",a),N(i,"$key",u),N(i,"$hasNormal",o),i}function An(t,n,e){var r=function(){var t=arguments.length?e.apply(null,arguments):e({});return(t=t&&"object"==typeof t&&!Array.isArray(t)?[t]:ln(t))&&(0===t.length||1===t.length&&t[0].isComment)?void 0:t};return e.proxy&&Object.defineProperty(t,n,{get:r,enumerable:!0,configurable:!0}),r}function mn(t,n){return function(){return t[n]}}function bn(t,n){var e,r,i,a,u;if(Array.isArray(t)||"string"==typeof t)for(e=new Array(t.length),r=0,i=t.length;r<i;r++)e[r]=n(t[r],r);else if("number"==typeof t)for(e=new Array(t),r=0;r<t;r++)e[r]=n(r+1,r);else if(s(t))if(st&&t[Symbol.iterator]){e=[];for(var c=t[Symbol.iterator](),l=c.next();!l.done;)e.push(n(l.value,e.length)),l=c.next()}else for(a=Object.keys(t),e=new Array(a.length),r=0,i=a.length;r<i;r++)u=a[r],e[r]=n(t[u],u,r);return o(e)||(e=[]),e._isVList=!0,e}function vn(t,n,e,r){var i,o=this.$scopedSlots[t];o?(e=e||{},r&&(e=S(S({},r),e)),i=o(e)||n):i=this.$slots[t]||n;var a=e&&e.slot;return a?this.$createElement("template",{slot:a},i):i}function $n(t){return Mt(this.$options,"filters",t)||D}function Cn(t,n){return Array.isArray(t)?-1===t.indexOf(n):t!==n}function yn(t,n,e,r,i){var o=L.keyCodes[n]||e;return i&&r&&!L.keyCodes[n]?Cn(i,r):o?Cn(o,t):r?_(r)!==n:void 0}function xn(t,n,e,r,i){if(e&&s(e)){var o;Array.isArray(e)&&(e=O(e));var a=function(a){if("class"===a||"style"===a||m(a))o=t;else{var u=t.attrs&&t.attrs.type;o=r||L.mustUseProp(n,u,a)?t.domProps||(t.domProps={}):t.attrs||(t.attrs={})}var s=x(a),c=_(a);s in o||c in o||(o[a]=e[a],i&&((t.on||(t.on={}))["update:"+a]=function(t){e[a]=t}))};for(var u in e)a(u)}return t}function wn(t,n){var e=this._staticTrees||(this._staticTrees=[]),r=e[t];return r&&!n||_n(r=e[t]=this.$options.staticRenderFns[t].call(this._renderProxy,null,this),"__static__"+t,!1),r}function kn(t,n,e){return _n(t,"__once__"+n+(e?"_"+e:""),!0),t}function _n(t,n,e){if(Array.isArray(t))for(var r=0;r<t.length;r++)t[r]&&"string"!=typeof t[r]&&Bn(t[r],n+"_"+r,e);else Bn(t,n,e)}function Bn(t,n,e){t.isStatic=!0,t.key=n,t.isOnce=e}function En(t,n){if(n&&l(n)){var e=t.on=t.on?S({},t.on):{};for(var r in n){var i=e[r],o=n[r];e[r]=i?[].concat(i,o):o}}return t}function Sn(t,n,e,r){n=n||{$stable:!e};for(var i=0;i<t.length;i++){var o=t[i];Array.isArray(o)?Sn(o,n,e):o&&(o.proxy&&(o.fn.proxy=!0),n[o.key]=o.fn)}return r&&(n.$key=r),n}function On(t,n){for(var e=0;e<n.length;e+=2){var r=n[e];"string"==typeof r&&r&&(t[n[e]]=n[e+1])}return t}function Tn(t,n){return"string"==typeof t?n+t:t}function Pn(t){t._o=kn,t._n=g,t._s=f,t._l=bn,t._t=vn,t._q=z,t._i=j,t._m=wn,t._f=$n,t._k=yn,t._b=xn,t._v=bt,t._e=mt,t._u=Sn,t._g=En,t._d=On,t._p=Tn}function Dn(t,n,e,i,o){var u,s=this,c=o.options;$(i,"_uid")?(u=Object.create(i))._original=i:(u=i,i=i._original);var l=a(c._compiled),d=!l;this.data=t,this.props=n,this.children=e,this.parent=i,this.listeners=t.on||r,this.injections=pn(c.inject,i),this.slots=function(){return s.$slots||hn(t.scopedSlots,s.$slots=fn(e,i)),s.$slots},Object.defineProperty(this,"scopedSlots",{enumerable:!0,get:function(){return hn(t.scopedSlots,this.slots())}}),l&&(this.$options=c,this.$slots=this.slots(),this.$scopedSlots=hn(t.scopedSlots,this.$slots)),c._scopeId?this._c=function(t,n,e,r){var o=Ln(u,t,n,e,r,d);return o&&!Array.isArray(o)&&(o.fnScopeId=c._scopeId,o.fnContext=i),o}:this._c=function(t,n,e,r){return Ln(u,t,n,e,r,d)}}function zn(t,n,e,r,i){var o=vt(t);return o.fnContext=e,o.fnOptions=r,n.slot&&((o.data||(o.data={})).slot=n.slot),o}function jn(t,n){for(var e in n)t[x(e)]=n[e]}Pn(Dn.prototype);var In={init:function(t,n){if(t.componentInstance&&!t.componentInstance._isDestroyed&&t.data.keepAlive){var e=t;In.prepatch(e,e)}else(t.componentInstance=function(t,n){var e={_isComponent:!0,_parentVnode:t,parent:n},r=t.data.inlineTemplate;return o(r)&&(e.render=r.render,e.staticRenderFns=r.staticRenderFns),new t.componentOptions.Ctor(e)}(t,Gn)).$mount(n?t.elm:void 0,n)},prepatch:function(t,n){var e=n.componentOptions;!function(t,n,e,i,o){var a=i.data.scopedSlots,u=t.$scopedSlots,s=!!(a&&!a.$stable||u!==r&&!u.$stable||a&&t.$scopedSlots.$key!==a.$key),c=!!(o||t.$options._renderChildren||s);if(t.$options._parentVnode=i,t.$vnode=i,t._vnode&&(t._vnode.parent=i),t.$options._renderChildren=o,t.$attrs=i.data.attrs||r,t.$listeners=e||r,n&&t.$options.props){wt(!1);for(var l=t._props,d=t.$options._propKeys||[],p=0;p<d.length;p++){var f=d[p],g=t.$options.props;l[f]=Ut(f,g,n,t)}wt(!0),t.$options.propsData=n}e=e||r;var h=t.$options._parentListeners;t.$options._parentListeners=e,Vn(t,e,h),c&&(t.$slots=fn(o,i.context),t.$forceUpdate())}(n.componentInstance=t.componentInstance,e.propsData,e.listeners,n,e.children)},insert:function(t){var n,e=t.context,r=t.componentInstance;r._isMounted||(r._isMounted=!0,te(r,"mounted")),t.data.keepAlive&&(e._isMounted?((n=r)._inactive=!1,ee.push(n)):Jn(r,!0))},destroy:function(t){var n=t.componentInstance;n._isDestroyed||(t.data.keepAlive?function t(n,e){if(!(e&&(n._directInactive=!0,Kn(n))||n._inactive)){n._inactive=!0;for(var r=0;r<n.$children.length;r++)t(n.$children[r]);te(n,"deactivated")}}(n,!0):n.$destroy())}},Mn=Object.keys(In);function Un(t,n,e,u,c){if(!i(t)){var l=e.$options._base;if(s(t)&&(t=l.extend(t)),"function"==typeof t){var d;if(i(t.cid)&&void 0===(t=function(t,n){if(a(t.error)&&o(t.errorComp))return t.errorComp;if(o(t.resolved))return t.resolved;var e=Nn;if(e&&o(t.owners)&&-1===t.owners.indexOf(e)&&t.owners.push(e),a(t.loading)&&o(t.loadingComp))return t.loadingComp;if(e&&!o(t.owners)){var r=t.owners=[e],u=!0,c=null,l=null;e.$on("hook:destroyed",(function(){return b(r,e)}));var d=function(t){for(var n=0,e=r.length;n<e;n++)r[n].$forceUpdate();t&&(r.length=0,null!==c&&(clearTimeout(c),c=null),null!==l&&(clearTimeout(l),l=null))},f=I((function(e){t.resolved=Wn(e,n),u?r.length=0:d(!0)})),g=I((function(n){o(t.errorComp)&&(t.error=!0,d(!0))})),h=t(f,g);return s(h)&&(p(h)?i(t.resolved)&&h.then(f,g):p(h.component)&&(h.component.then(f,g),o(h.error)&&(t.errorComp=Wn(h.error,n)),o(h.loading)&&(t.loadingComp=Wn(h.loading,n),0===h.delay?t.loading=!0:c=setTimeout((function(){c=null,i(t.resolved)&&i(t.error)&&(t.loading=!0,d(!1))}),h.delay||200)),o(h.timeout)&&(l=setTimeout((function(){l=null,i(t.resolved)&&g(null)}),h.timeout)))),u=!1,t.loading?t.loadingComp:t.resolved}}(d=t,l)))return function(t,n,e,r,i){var o=mt();return o.asyncFactory=t,o.asyncMeta={data:n,context:e,children:r,tag:i},o}(d,n,e,u,c);n=n||{},Ce(t),o(n.model)&&function(t,n){var e=t.model&&t.model.prop||"value",r=t.model&&t.model.event||"input";(n.attrs||(n.attrs={}))[e]=n.model.value;var i=n.on||(n.on={}),a=i[r],u=n.model.callback;o(a)?(Array.isArray(a)?-1===a.indexOf(u):a!==u)&&(i[r]=[u].concat(a)):i[r]=u}(t.options,n);var f=function(t,n,e){var r=n.options.props;if(!i(r)){var a={},u=t.attrs,s=t.props;if(o(u)||o(s))for(var c in r){var l=_(c);cn(a,s,c,l,!0)||cn(a,u,c,l,!1)}return a}}(n,t);if(a(t.options.functional))return function(t,n,e,i,a){var u=t.options,s={},c=u.props;if(o(c))for(var l in c)s[l]=Ut(l,c,n||r);else o(e.attrs)&&jn(s,e.attrs),o(e.props)&&jn(s,e.props);var d=new Dn(e,s,a,i,t),p=u.render.call(null,d._c,d);if(p instanceof ht)return zn(p,e,d.parent,u);if(Array.isArray(p)){for(var f=ln(p)||[],g=new Array(f.length),h=0;h<f.length;h++)g[h]=zn(f[h],e,d.parent,u);return g}}(t,f,n,e,u);var g=n.on;if(n.on=n.nativeOn,a(t.options.abstract)){var h=n.slot;n={},h&&(n.slot=h)}!function(t){for(var n=t.hook||(t.hook={}),e=0;e<Mn.length;e++){var r=Mn[e],i=n[r],o=In[r];i===o||i&&i._merged||(n[r]=i?Rn(o,i):o)}}(n);var A=t.options.name||c;return new ht("vue-component-"+t.cid+(A?"-"+A:""),n,void 0,void 0,void 0,e,{Ctor:t,propsData:f,listeners:g,tag:c,children:u},d)}}}function Rn(t,n){var e=function(e,r){t(e,r),n(e,r)};return e._merged=!0,e}function Ln(t,n,e,r,c,l){return(Array.isArray(e)||u(e))&&(c=r,r=e,e=void 0),a(l)&&(c=2),function(t,n,e,r,u){return o(e)&&o(e.__ob__)?mt():(o(e)&&o(e.is)&&(n=e.is),n?(Array.isArray(r)&&"function"==typeof r[0]&&((e=e||{}).scopedSlots={default:r[0]},r.length=0),2===u?r=ln(r):1===u&&(r=function(t){for(var n=0;n<t.length;n++)if(Array.isArray(t[n]))return Array.prototype.concat.apply([],t);return t}(r)),"string"==typeof n?(l=t.$vnode&&t.$vnode.ns||L.getTagNamespace(n),c=L.isReservedTag(n)?new ht(L.parsePlatformTagName(n),e,r,void 0,void 0,t):e&&e.pre||!o(d=Mt(t.$options,"components",n))?new ht(n,e,r,void 0,void 0,t):Un(d,e,t,r,n)):c=Un(n,e,t,r),Array.isArray(c)?c:o(c)?(o(l)&&function t(n,e,r){if(n.ns=e,"foreignObject"===n.tag&&(e=void 0,r=!0),o(n.children))for(var u=0,s=n.children.length;u<s;u++){var c=n.children[u];o(c.tag)&&(i(c.ns)||a(r)&&"svg"!==c.tag)&&t(c,e,r)}}(c,l),o(e)&&function(t){s(t.style)&&rn(t.style),s(t.class)&&rn(t.class)}(e),c):mt()):mt());var c,l,d}(t,n,e,r,c)}var qn,Nn=null;function Wn(t,n){return(t.__esModule||st&&"Module"===t[Symbol.toStringTag])&&(t=t.default),s(t)?n.extend(t):t}function Fn(t){return t.isComment&&t.asyncFactory}function Zn(t){if(Array.isArray(t))for(var n=0;n<t.length;n++){var e=t[n];if(o(e)&&(o(e.componentOptions)||Fn(e)))return e}}function Xn(t,n){qn.$on(t,n)}function Hn(t,n){qn.$off(t,n)}function Yn(t,n){var e=qn;return function r(){null!==n.apply(null,arguments)&&e.$off(t,r)}}function Vn(t,n,e){qn=t,un(n,e||{},Xn,Hn,Yn,t),qn=void 0}var Gn=null;function Qn(t){var n=Gn;return Gn=t,function(){Gn=n}}function Kn(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}function Jn(t,n){if(n){if(t._directInactive=!1,Kn(t))return}else if(t._directInactive)return;if(t._inactive||null===t._inactive){t._inactive=!1;for(var e=0;e<t.$children.length;e++)Jn(t.$children[e]);te(t,"activated")}}function te(t,n){ft();var e=t.$options[n],r=n+" hook";if(e)for(var i=0,o=e.length;i<o;i++)Wt(e[i],t,null,t,r);t._hasHookEvent&&t.$emit("hook:"+n),gt()}var ne=[],ee=[],re={},ie=!1,oe=!1,ae=0,ue=0,se=Date.now;if(X&&!G){var ce=window.performance;ce&&"function"==typeof ce.now&&se()>document.createEvent("Event").timeStamp&&(se=function(){return ce.now()})}function le(){var t,n;for(ue=se(),oe=!0,ne.sort((function(t,n){return t.id-n.id})),ae=0;ae<ne.length;ae++)(t=ne[ae]).before&&t.before(),n=t.id,re[n]=null,t.run();var e=ee.slice(),r=ne.slice();ae=ne.length=ee.length=0,re={},ie=oe=!1,function(t){for(var n=0;n<t.length;n++)t[n]._inactive=!0,Jn(t[n],!0)}(e),function(t){for(var n=t.length;n--;){var e=t[n],r=e.vm;r._watcher===e&&r._isMounted&&!r._isDestroyed&&te(r,"updated")}}(r),ot&&L.devtools&&ot.emit("flush")}var de=0,pe=function(t,n,e,r,i){this.vm=t,i&&(t._watcher=this),t._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 ut,this.newDepIds=new ut,this.expression="","function"==typeof n?this.getter=n:(this.getter=function(t){if(!F.test(t)){var n=t.split(".");return function(t){for(var e=0;e<n.length;e++){if(!t)return;t=t[n[e]]}return t}}}(n),this.getter||(this.getter=T)),this.value=this.lazy?void 0:this.get()};pe.prototype.get=function(){var t;ft(this);var n=this.vm;try{t=this.getter.call(n,n)}catch(t){if(!this.user)throw t;Nt(t,n,'getter for watcher "'+this.expression+'"')}finally{this.deep&&rn(t),gt(),this.cleanupDeps()}return t},pe.prototype.addDep=function(t){var n=t.id;this.newDepIds.has(n)||(this.newDepIds.add(n),this.newDeps.push(t),this.depIds.has(n)||t.addSub(this))},pe.prototype.cleanupDeps=function(){for(var t=this.deps.length;t--;){var n=this.deps[t];this.newDepIds.has(n.id)||n.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},pe.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():function(t){var n=t.id;if(null==re[n]){if(re[n]=!0,oe){for(var e=ne.length-1;e>ae&&ne[e].id>t.id;)e--;ne.splice(e+1,0,t)}else ne.push(t);ie||(ie=!0,nn(le))}}(this)},pe.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||s(t)||this.deep){var n=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,n)}catch(t){Nt(t,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,t,n)}}},pe.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},pe.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},pe.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||b(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var fe={enumerable:!0,configurable:!0,get:T,set:T};function ge(t,n,e){fe.get=function(){return this[n][e]},fe.set=function(t){this[n][e]=t},Object.defineProperty(t,e,fe)}var he={lazy:!0};function Ae(t,n,e){var r=!it();"function"==typeof e?(fe.get=r?me(n):be(e),fe.set=T):(fe.get=e.get?r&&!1!==e.cache?me(n):be(e.get):T,fe.set=e.set||T),Object.defineProperty(t,n,fe)}function me(t){return function(){var n=this._computedWatchers&&this._computedWatchers[t];if(n)return n.dirty&&n.evaluate(),dt.target&&n.depend(),n.value}}function be(t){return function(){return t.call(this,this)}}function ve(t,n,e,r){return l(e)&&(r=e,e=e.handler),"string"==typeof e&&(e=t[e]),t.$watch(n,e,r)}var $e=0;function Ce(t){var n=t.options;if(t.super){var e=Ce(t.super);if(e!==t.superOptions){t.superOptions=e;var r=function(t){var n,e=t.options,r=t.sealedOptions;for(var i in e)e[i]!==r[i]&&(n||(n={}),n[i]=e[i]);return n}(t);r&&S(t.extendOptions,r),(n=t.options=It(e,t.extendOptions)).name&&(n.components[n.name]=t)}}return n}function ye(t){this._init(t)}function xe(t){return t&&(t.Ctor.options.name||t.tag)}function we(t,n){return Array.isArray(t)?t.indexOf(n)>-1:"string"==typeof t?t.split(",").indexOf(n)>-1:(e=t,"[object RegExp]"===c.call(e)&&t.test(n));var e}function ke(t,n){var e=t.cache,r=t.keys,i=t._vnode;for(var o in e){var a=e[o];if(a){var u=xe(a.componentOptions);u&&!n(u)&&_e(e,o,r,i)}}}function _e(t,n,e,r){var i=t[n];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),t[n]=null,b(e,n)}!function(t){t.prototype._init=function(t){var n=this;n._uid=$e++,n._isVue=!0,t&&t._isComponent?function(t,n){var e=t.$options=Object.create(t.constructor.options),r=n._parentVnode;e.parent=n.parent,e._parentVnode=r;var i=r.componentOptions;e.propsData=i.propsData,e._parentListeners=i.listeners,e._renderChildren=i.children,e._componentTag=i.tag,n.render&&(e.render=n.render,e.staticRenderFns=n.staticRenderFns)}(n,t):n.$options=It(Ce(n.constructor),t||{},n),n._renderProxy=n,n._self=n,function(t){var n=t.$options,e=n.parent;if(e&&!n.abstract){for(;e.$options.abstract&&e.$parent;)e=e.$parent;e.$children.push(t)}t.$parent=e,t.$root=e?e.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(n),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var n=t.$options._parentListeners;n&&Vn(t,n)}(n),function(t){t._vnode=null,t._staticTrees=null;var n=t.$options,e=t.$vnode=n._parentVnode,i=e&&e.context;t.$slots=fn(n._renderChildren,i),t.$scopedSlots=r,t._c=function(n,e,r,i){return Ln(t,n,e,r,i,!1)},t.$createElement=function(n,e,r,i){return Ln(t,n,e,r,i,!0)};var o=e&&e.data;Bt(t,"$attrs",o&&o.attrs||r,null,!0),Bt(t,"$listeners",n._parentListeners||r,null,!0)}(n),te(n,"beforeCreate"),function(t){var n=pn(t.$options.inject,t);n&&(wt(!1),Object.keys(n).forEach((function(e){Bt(t,e,n[e])})),wt(!0))}(n),function(t){t._watchers=[];var n=t.$options;n.props&&function(t,n){var e=t.$options.propsData||{},r=t._props={},i=t.$options._propKeys=[];t.$parent&&wt(!1);var o=function(o){i.push(o);var a=Ut(o,n,e,t);Bt(r,o,a),o in t||ge(t,"_props",o)};for(var a in n)o(a);wt(!0)}(t,n.props),n.methods&&function(t,n){for(var e in t.$options.props,n)t[e]="function"!=typeof n[e]?T:B(n[e],t)}(t,n.methods),n.data?function(t){var n=t.$options.data;l(n=t._data="function"==typeof n?function(t,n){ft();try{return t.call(n,n)}catch(t){return Nt(t,n,"data()"),{}}finally{gt()}}(n,t):n||{})||(n={});for(var e,r=Object.keys(n),i=t.$options.props,o=(t.$options.methods,r.length);o--;){var a=r[o];i&&$(i,a)||36!==(e=(a+"").charCodeAt(0))&&95!==e&&ge(t,"_data",a)}_t(n,!0)}(t):_t(t._data={},!0),n.computed&&function(t,n){var e=t._computedWatchers=Object.create(null),r=it();for(var i in n){var o=n[i],a="function"==typeof o?o:o.get;r||(e[i]=new pe(t,a||T,T,he)),i in t||Ae(t,i,o)}}(t,n.computed),n.watch&&n.watch!==nt&&function(t,n){for(var e in n){var r=n[e];if(Array.isArray(r))for(var i=0;i<r.length;i++)ve(t,e,r[i]);else ve(t,e,r)}}(t,n.watch)}(n),function(t){var n=t.$options.provide;n&&(t._provided="function"==typeof n?n.call(t):n)}(n),te(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(ye),function(t){Object.defineProperty(t.prototype,"$data",{get:function(){return this._data}}),Object.defineProperty(t.prototype,"$props",{get:function(){return this._props}}),t.prototype.$set=Et,t.prototype.$delete=St,t.prototype.$watch=function(t,n,e){if(l(n))return ve(this,t,n,e);(e=e||{}).user=!0;var r=new pe(this,t,n,e);if(e.immediate)try{n.call(this,r.value)}catch(t){Nt(t,this,'callback for immediate watcher "'+r.expression+'"')}return function(){r.teardown()}}}(ye),function(t){var n=/^hook:/;t.prototype.$on=function(t,e){var r=this;if(Array.isArray(t))for(var i=0,o=t.length;i<o;i++)r.$on(t[i],e);else(r._events[t]||(r._events[t]=[])).push(e),n.test(t)&&(r._hasHookEvent=!0);return r},t.prototype.$once=function(t,n){var e=this;function r(){e.$off(t,r),n.apply(e,arguments)}return r.fn=n,e.$on(t,r),e},t.prototype.$off=function(t,n){var e=this;if(!arguments.length)return e._events=Object.create(null),e;if(Array.isArray(t)){for(var r=0,i=t.length;r<i;r++)e.$off(t[r],n);return e}var o,a=e._events[t];if(!a)return e;if(!n)return e._events[t]=null,e;for(var u=a.length;u--;)if((o=a[u])===n||o.fn===n){a.splice(u,1);break}return e},t.prototype.$emit=function(t){var n=this._events[t];if(n){n=n.length>1?E(n):n;for(var e=E(arguments,1),r='event handler for "'+t+'"',i=0,o=n.length;i<o;i++)Wt(n[i],this,e,this,r)}return this}}(ye),function(t){t.prototype._update=function(t,n){var e=this,r=e.$el,i=e._vnode,o=Qn(e);e._vnode=t,e.$el=i?e.__patch__(i,t):e.__patch__(e.$el,t,n,!1),o(),r&&(r.__vue__=null),e.$el&&(e.$el.__vue__=e),e.$vnode&&e.$parent&&e.$vnode===e.$parent._vnode&&(e.$parent.$el=e.$el)},t.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},t.prototype.$destroy=function(){var t=this;if(!t._isBeingDestroyed){te(t,"beforeDestroy"),t._isBeingDestroyed=!0;var n=t.$parent;!n||n._isBeingDestroyed||t.$options.abstract||b(n.$children,t),t._watcher&&t._watcher.teardown();for(var e=t._watchers.length;e--;)t._watchers[e].teardown();t._data.__ob__&&t._data.__ob__.vmCount--,t._isDestroyed=!0,t.__patch__(t._vnode,null),te(t,"destroyed"),t.$off(),t.$el&&(t.$el.__vue__=null),t.$vnode&&(t.$vnode.parent=null)}}}(ye),function(t){Pn(t.prototype),t.prototype.$nextTick=function(t){return nn(t,this)},t.prototype._render=function(){var t,n=this,e=n.$options,r=e.render,i=e._parentVnode;i&&(n.$scopedSlots=hn(i.data.scopedSlots,n.$slots,n.$scopedSlots)),n.$vnode=i;try{Nn=n,t=r.call(n._renderProxy,n.$createElement)}catch(e){Nt(e,n,"render"),t=n._vnode}finally{Nn=null}return Array.isArray(t)&&1===t.length&&(t=t[0]),t instanceof ht||(t=mt()),t.parent=i,t}}(ye);var Be=[String,RegExp,Array],Ee={KeepAlive:{name:"keep-alive",abstract:!0,props:{include:Be,exclude:Be,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)_e(this.cache,t,this.keys)},mounted:function(){var t=this;this.$watch("include",(function(n){ke(t,(function(t){return we(n,t)}))})),this.$watch("exclude",(function(n){ke(t,(function(t){return!we(n,t)}))}))},render:function(){var t=this.$slots.default,n=Zn(t),e=n&&n.componentOptions;if(e){var r=xe(e),i=this.include,o=this.exclude;if(i&&(!r||!we(i,r))||o&&r&&we(o,r))return n;var a=this.cache,u=this.keys,s=null==n.key?e.Ctor.cid+(e.tag?"::"+e.tag:""):n.key;a[s]?(n.componentInstance=a[s].componentInstance,b(u,s),u.push(s)):(a[s]=n,u.push(s),this.max&&u.length>parseInt(this.max)&&_e(a,u[0],u,this._vnode)),n.data.keepAlive=!0}return n||t&&t[0]}}};!function(t){var n={get:function(){return L}};Object.defineProperty(t,"config",n),t.util={warn:ct,extend:S,mergeOptions:It,defineReactive:Bt},t.set=Et,t.delete=St,t.nextTick=nn,t.observable=function(t){return _t(t),t},t.options=Object.create(null),U.forEach((function(n){t.options[n+"s"]=Object.create(null)})),t.options._base=t,S(t.options.components,Ee),function(t){t.use=function(t){var n=this._installedPlugins||(this._installedPlugins=[]);if(n.indexOf(t)>-1)return this;var e=E(arguments,1);return e.unshift(this),"function"==typeof t.install?t.install.apply(t,e):"function"==typeof t&&t.apply(null,e),n.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=It(this.options,t),this}}(t),function(t){t.cid=0;var n=1;t.extend=function(t){t=t||{};var e=this,r=e.cid,i=t._Ctor||(t._Ctor={});if(i[r])return i[r];var o=t.name||e.options.name,a=function(t){this._init(t)};return(a.prototype=Object.create(e.prototype)).constructor=a,a.cid=n++,a.options=It(e.options,t),a.super=e,a.options.props&&function(t){var n=t.options.props;for(var e in n)ge(t.prototype,"_props",e)}(a),a.options.computed&&function(t){var n=t.options.computed;for(var e in n)Ae(t.prototype,e,n[e])}(a),a.extend=e.extend,a.mixin=e.mixin,a.use=e.use,U.forEach((function(t){a[t]=e[t]})),o&&(a.options.components[o]=a),a.superOptions=e.options,a.extendOptions=t,a.sealedOptions=S({},a.options),i[r]=a,a}}(t),function(t){U.forEach((function(n){t[n]=function(t,e){return e?("component"===n&&l(e)&&(e.name=e.name||t,e=this.options._base.extend(e)),"directive"===n&&"function"==typeof e&&(e={bind:e,update:e}),this.options[n+"s"][t]=e,e):this.options[n+"s"][t]}}))}(t)}(ye),Object.defineProperty(ye.prototype,"$isServer",{get:it}),Object.defineProperty(ye.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(ye,"FunctionalRenderContext",{value:Dn}),ye.version="2.6.12";var Se=h("style,class"),Oe=h("input,textarea,option,select,progress"),Te=function(t,n,e){return"value"===e&&Oe(t)&&"button"!==n||"selected"===e&&"option"===t||"checked"===e&&"input"===t||"muted"===e&&"video"===t},Pe=h("contenteditable,draggable,spellcheck"),De=h("events,caret,typing,plaintext-only"),ze=h("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"),je="http://www.w3.org/1999/xlink",Ie=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},Me=function(t){return Ie(t)?t.slice(6,t.length):""},Ue=function(t){return null==t||!1===t};function Re(t,n){return{staticClass:Le(t.staticClass,n.staticClass),class:o(t.class)?[t.class,n.class]:n.class}}function Le(t,n){return t?n?t+" "+n:t:n||""}function qe(t){return Array.isArray(t)?function(t){for(var n,e="",r=0,i=t.length;r<i;r++)o(n=qe(t[r]))&&""!==n&&(e&&(e+=" "),e+=n);return e}(t):s(t)?function(t){var n="";for(var e in t)t[e]&&(n&&(n+=" "),n+=e);return n}(t):"string"==typeof t?t:""}var Ne={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},We=h("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"),Fe=h("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),Ze=function(t){return We(t)||Fe(t)};function Xe(t){return Fe(t)?"svg":"math"===t?"math":void 0}var He=Object.create(null),Ye=h("text,number,password,search,email,tel,url");function Ve(t){return"string"==typeof t?document.querySelector(t)||document.createElement("div"):t}var Ge=Object.freeze({createElement:function(t,n){var e=document.createElement(t);return"select"!==t||n.data&&n.data.attrs&&void 0!==n.data.attrs.multiple&&e.setAttribute("multiple","multiple"),e},createElementNS:function(t,n){return document.createElementNS(Ne[t],n)},createTextNode:function(t){return document.createTextNode(t)},createComment:function(t){return document.createComment(t)},insertBefore:function(t,n,e){t.insertBefore(n,e)},removeChild:function(t,n){t.removeChild(n)},appendChild:function(t,n){t.appendChild(n)},parentNode:function(t){return t.parentNode},nextSibling:function(t){return t.nextSibling},tagName:function(t){return t.tagName},setTextContent:function(t,n){t.textContent=n},setStyleScope:function(t,n){t.setAttribute(n,"")}}),Qe={create:function(t,n){Ke(n)},update:function(t,n){t.data.ref!==n.data.ref&&(Ke(t,!0),Ke(n))},destroy:function(t){Ke(t,!0)}};function Ke(t,n){var e=t.data.ref;if(o(e)){var r=t.context,i=t.componentInstance||t.elm,a=r.$refs;n?Array.isArray(a[e])?b(a[e],i):a[e]===i&&(a[e]=void 0):t.data.refInFor?Array.isArray(a[e])?a[e].indexOf(i)<0&&a[e].push(i):a[e]=[i]:a[e]=i}}var Je=new ht("",{},[]),tr=["create","activate","update","remove","destroy"];function nr(t,n){return t.key===n.key&&(t.tag===n.tag&&t.isComment===n.isComment&&o(t.data)===o(n.data)&&function(t,n){if("input"!==t.tag)return!0;var e,r=o(e=t.data)&&o(e=e.attrs)&&e.type,i=o(e=n.data)&&o(e=e.attrs)&&e.type;return r===i||Ye(r)&&Ye(i)}(t,n)||a(t.isAsyncPlaceholder)&&t.asyncFactory===n.asyncFactory&&i(n.asyncFactory.error))}function er(t,n,e){var r,i,a={};for(r=n;r<=e;++r)o(i=t[r].key)&&(a[i]=r);return a}var rr={create:ir,update:ir,destroy:function(t){ir(t,Je)}};function ir(t,n){(t.data.directives||n.data.directives)&&function(t,n){var e,r,i,o=t===Je,a=n===Je,u=ar(t.data.directives,t.context),s=ar(n.data.directives,n.context),c=[],l=[];for(e in s)r=u[e],i=s[e],r?(i.oldValue=r.value,i.oldArg=r.arg,sr(i,"update",n,t),i.def&&i.def.componentUpdated&&l.push(i)):(sr(i,"bind",n,t),i.def&&i.def.inserted&&c.push(i));if(c.length){var d=function(){for(var e=0;e<c.length;e++)sr(c[e],"inserted",n,t)};o?sn(n,"insert",d):d()}if(l.length&&sn(n,"postpatch",(function(){for(var e=0;e<l.length;e++)sr(l[e],"componentUpdated",n,t)})),!o)for(e in u)s[e]||sr(u[e],"unbind",t,t,a)}(t,n)}var or=Object.create(null);function ar(t,n){var e,r,i=Object.create(null);if(!t)return i;for(e=0;e<t.length;e++)(r=t[e]).modifiers||(r.modifiers=or),i[ur(r)]=r,r.def=Mt(n.$options,"directives",r.name);return i}function ur(t){return t.rawName||t.name+"."+Object.keys(t.modifiers||{}).join(".")}function sr(t,n,e,r,i){var o=t.def&&t.def[n];if(o)try{o(e.elm,t,e,r,i)}catch(r){Nt(r,e.context,"directive "+t.name+" "+n+" hook")}}var cr=[Qe,rr];function lr(t,n){var e=n.componentOptions;if(!(o(e)&&!1===e.Ctor.options.inheritAttrs||i(t.data.attrs)&&i(n.data.attrs))){var r,a,u=n.elm,s=t.data.attrs||{},c=n.data.attrs||{};for(r in o(c.__ob__)&&(c=n.data.attrs=S({},c)),c)a=c[r],s[r]!==a&&dr(u,r,a);for(r in(G||K)&&c.value!==s.value&&dr(u,"value",c.value),s)i(c[r])&&(Ie(r)?u.removeAttributeNS(je,Me(r)):Pe(r)||u.removeAttribute(r))}}function dr(t,n,e){t.tagName.indexOf("-")>-1?pr(t,n,e):ze(n)?Ue(e)?t.removeAttribute(n):(e="allowfullscreen"===n&&"EMBED"===t.tagName?"true":n,t.setAttribute(n,e)):Pe(n)?t.setAttribute(n,function(t,n){return Ue(n)||"false"===n?"false":"contenteditable"===t&&De(n)?n:"true"}(n,e)):Ie(n)?Ue(e)?t.removeAttributeNS(je,Me(n)):t.setAttributeNS(je,n,e):pr(t,n,e)}function pr(t,n,e){if(Ue(e))t.removeAttribute(n);else{if(G&&!Q&&"TEXTAREA"===t.tagName&&"placeholder"===n&&""!==e&&!t.__ieph){var r=function(n){n.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(n,e)}}var fr={create:lr,update:lr};function gr(t,n){var e=n.elm,r=n.data,a=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(a)||i(a.staticClass)&&i(a.class)))){var u=function(t){for(var n=t.data,e=t,r=t;o(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(n=Re(r.data,n));for(;o(e=e.parent);)e&&e.data&&(n=Re(n,e.data));return function(t,n){return o(t)||o(n)?Le(t,qe(n)):""}(n.staticClass,n.class)}(n),s=e._transitionClasses;o(s)&&(u=Le(u,qe(s))),u!==e._prevClass&&(e.setAttribute("class",u),e._prevClass=u)}}var hr,Ar,mr,br,vr,$r,Cr={create:gr,update:gr},yr=/[\w).+\-_$\]]/;function xr(t){var n,e,r,i,o,a=!1,u=!1,s=!1,c=!1,l=0,d=0,p=0,f=0;for(r=0;r<t.length;r++)if(e=n,n=t.charCodeAt(r),a)39===n&&92!==e&&(a=!1);else if(u)34===n&&92!==e&&(u=!1);else if(s)96===n&&92!==e&&(s=!1);else if(c)47===n&&92!==e&&(c=!1);else if(124!==n||124===t.charCodeAt(r+1)||124===t.charCodeAt(r-1)||l||d||p){switch(n){case 34:u=!0;break;case 39:a=!0;break;case 96:s=!0;break;case 40:p++;break;case 41:p--;break;case 91:d++;break;case 93:d--;break;case 123:l++;break;case 125:l--}if(47===n){for(var g=r-1,h=void 0;g>=0&&" "===(h=t.charAt(g));g--);h&&yr.test(h)||(c=!0)}}else void 0===i?(f=r+1,i=t.slice(0,r).trim()):A();function A(){(o||(o=[])).push(t.slice(f,r).trim()),f=r+1}if(void 0===i?i=t.slice(0,r).trim():0!==f&&A(),o)for(r=0;r<o.length;r++)i=wr(i,o[r]);return i}function wr(t,n){var e=n.indexOf("(");if(e<0)return'_f("'+n+'")('+t+")";var r=n.slice(0,e),i=n.slice(e+1);return'_f("'+r+'")('+t+(")"!==i?","+i:i)}function kr(t,n){console.error("[Vue compiler]: "+t)}function _r(t,n){return t?t.map((function(t){return t[n]})).filter((function(t){return t})):[]}function Br(t,n,e,r,i){(t.props||(t.props=[])).push(Ir({name:n,value:e,dynamic:i},r)),t.plain=!1}function Er(t,n,e,r,i){(i?t.dynamicAttrs||(t.dynamicAttrs=[]):t.attrs||(t.attrs=[])).push(Ir({name:n,value:e,dynamic:i},r)),t.plain=!1}function Sr(t,n,e,r){t.attrsMap[n]=e,t.attrsList.push(Ir({name:n,value:e},r))}function Or(t,n,e,r,i,o,a,u){(t.directives||(t.directives=[])).push(Ir({name:n,rawName:e,value:r,arg:i,isDynamicArg:o,modifiers:a},u)),t.plain=!1}function Tr(t,n,e){return e?"_p("+n+',"'+t+'")':t+n}function Pr(t,n,e,i,o,a,u,s){var c;(i=i||r).right?s?n="("+n+")==='click'?'contextmenu':("+n+")":"click"===n&&(n="contextmenu",delete i.right):i.middle&&(s?n="("+n+")==='click'?'mouseup':("+n+")":"click"===n&&(n="mouseup")),i.capture&&(delete i.capture,n=Tr("!",n,s)),i.once&&(delete i.once,n=Tr("~",n,s)),i.passive&&(delete i.passive,n=Tr("&",n,s)),i.native?(delete i.native,c=t.nativeEvents||(t.nativeEvents={})):c=t.events||(t.events={});var l=Ir({value:e.trim(),dynamic:s},u);i!==r&&(l.modifiers=i);var d=c[n];Array.isArray(d)?o?d.unshift(l):d.push(l):c[n]=d?o?[l,d]:[d,l]:l,t.plain=!1}function Dr(t,n,e){var r=zr(t,":"+n)||zr(t,"v-bind:"+n);if(null!=r)return xr(r);if(!1!==e){var i=zr(t,n);if(null!=i)return JSON.stringify(i)}}function zr(t,n,e){var r;if(null!=(r=t.attrsMap[n]))for(var i=t.attrsList,o=0,a=i.length;o<a;o++)if(i[o].name===n){i.splice(o,1);break}return e&&delete t.attrsMap[n],r}function jr(t,n){for(var e=t.attrsList,r=0,i=e.length;r<i;r++){var o=e[r];if(n.test(o.name))return e.splice(r,1),o}}function Ir(t,n){return n&&(null!=n.start&&(t.start=n.start),null!=n.end&&(t.end=n.end)),t}function Mr(t,n,e){var r=e||{},i=r.number,o="$$v";r.trim&&(o="(typeof $$v === 'string'? $$v.trim(): $$v)"),i&&(o="_n("+o+")");var a=Ur(n,o);t.model={value:"("+n+")",expression:JSON.stringify(n),callback:"function ($$v) {"+a+"}"}}function Ur(t,n){var e=function(t){if(t=t.trim(),hr=t.length,t.indexOf("[")<0||t.lastIndexOf("]")<hr-1)return(br=t.lastIndexOf("."))>-1?{exp:t.slice(0,br),key:'"'+t.slice(br+1)+'"'}:{exp:t,key:null};for(Ar=t,br=vr=$r=0;!Lr();)qr(mr=Rr())?Wr(mr):91===mr&&Nr(mr);return{exp:t.slice(0,vr),key:t.slice(vr+1,$r)}}(t);return null===e.key?t+"="+n:"$set("+e.exp+", "+e.key+", "+n+")"}function Rr(){return Ar.charCodeAt(++br)}function Lr(){return br>=hr}function qr(t){return 34===t||39===t}function Nr(t){var n=1;for(vr=br;!Lr();)if(qr(t=Rr()))Wr(t);else if(91===t&&n++,93===t&&n--,0===n){$r=br;break}}function Wr(t){for(var n=t;!Lr()&&(t=Rr())!==n;);}var Fr;function Zr(t,n,e){var r=Fr;return function i(){null!==n.apply(null,arguments)&&Yr(t,i,e,r)}}var Xr=Ht&&!(tt&&Number(tt[1])<=53);function Hr(t,n,e,r){if(Xr){var i=ue,o=n;n=o._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=i||t.timeStamp<=0||t.target.ownerDocument!==document)return o.apply(this,arguments)}}Fr.addEventListener(t,n,et?{capture:e,passive:r}:e)}function Yr(t,n,e,r){(r||Fr).removeEventListener(t,n._wrapper||n,e)}function Vr(t,n){if(!i(t.data.on)||!i(n.data.on)){var e=n.data.on||{},r=t.data.on||{};Fr=n.elm,function(t){if(o(t.__r)){var n=G?"change":"input";t[n]=[].concat(t.__r,t[n]||[]),delete t.__r}o(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(e),un(e,r,Hr,Yr,Zr,n.context),Fr=void 0}}var Gr,Qr={create:Vr,update:Vr};function Kr(t,n){if(!i(t.data.domProps)||!i(n.data.domProps)){var e,r,a=n.elm,u=t.data.domProps||{},s=n.data.domProps||{};for(e in o(s.__ob__)&&(s=n.data.domProps=S({},s)),u)e in s||(a[e]="");for(e in s){if(r=s[e],"textContent"===e||"innerHTML"===e){if(n.children&&(n.children.length=0),r===u[e])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===e&&"PROGRESS"!==a.tagName){a._value=r;var c=i(r)?"":String(r);Jr(a,c)&&(a.value=c)}else if("innerHTML"===e&&Fe(a.tagName)&&i(a.innerHTML)){(Gr=Gr||document.createElement("div")).innerHTML="<svg>"+r+"</svg>";for(var l=Gr.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}else if(r!==u[e])try{a[e]=r}catch(t){}}}}function Jr(t,n){return!t.composing&&("OPTION"===t.tagName||function(t,n){var e=!0;try{e=document.activeElement!==t}catch(t){}return e&&t.value!==n}(t,n)||function(t,n){var e=t.value,r=t._vModifiers;if(o(r)){if(r.number)return g(e)!==g(n);if(r.trim)return e.trim()!==n.trim()}return e!==n}(t,n))}var ti={create:Kr,update:Kr},ni=C((function(t){var n={},e=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(e);r.length>1&&(n[r[0].trim()]=r[1].trim())}})),n}));function ei(t){var n=ri(t.style);return t.staticStyle?S(t.staticStyle,n):n}function ri(t){return Array.isArray(t)?O(t):"string"==typeof t?ni(t):t}var ii,oi=/^--/,ai=/\s*!important$/,ui=function(t,n,e){if(oi.test(n))t.style.setProperty(n,e);else if(ai.test(e))t.style.setProperty(_(n),e.replace(ai,""),"important");else{var r=ci(n);if(Array.isArray(e))for(var i=0,o=e.length;i<o;i++)t.style[r]=e[i];else t.style[r]=e}},si=["Webkit","Moz","ms"],ci=C((function(t){if(ii=ii||document.createElement("div").style,"filter"!==(t=x(t))&&t in ii)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),e=0;e<si.length;e++){var r=si[e]+n;if(r in ii)return r}}));function li(t,n){var e=n.data,r=t.data;if(!(i(e.staticStyle)&&i(e.style)&&i(r.staticStyle)&&i(r.style))){var a,u,s=n.elm,c=r.staticStyle,l=r.normalizedStyle||r.style||{},d=c||l,p=ri(n.data.style)||{};n.data.normalizedStyle=o(p.__ob__)?S({},p):p;var f=function(t,n){for(var e,r={},i=t;i.componentInstance;)(i=i.componentInstance._vnode)&&i.data&&(e=ei(i.data))&&S(r,e);(e=ei(t.data))&&S(r,e);for(var o=t;o=o.parent;)o.data&&(e=ei(o.data))&&S(r,e);return r}(n);for(u in d)i(f[u])&&ui(s,u,"");for(u in f)(a=f[u])!==d[u]&&ui(s,u,null==a?"":a)}}var di={create:li,update:li},pi=/\s+/;function fi(t,n){if(n&&(n=n.trim()))if(t.classList)n.indexOf(" ")>-1?n.split(pi).forEach((function(n){return t.classList.add(n)})):t.classList.add(n);else{var e=" "+(t.getAttribute("class")||"")+" ";e.indexOf(" "+n+" ")<0&&t.setAttribute("class",(e+n).trim())}}function gi(t,n){if(n&&(n=n.trim()))if(t.classList)n.indexOf(" ")>-1?n.split(pi).forEach((function(n){return t.classList.remove(n)})):t.classList.remove(n),t.classList.length||t.removeAttribute("class");else{for(var e=" "+(t.getAttribute("class")||"")+" ",r=" "+n+" ";e.indexOf(r)>=0;)e=e.replace(r," ");(e=e.trim())?t.setAttribute("class",e):t.removeAttribute("class")}}function hi(t){if(t){if("object"==typeof t){var n={};return!1!==t.css&&S(n,Ai(t.name||"v")),S(n,t),n}return"string"==typeof t?Ai(t):void 0}}var Ai=C((function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}})),mi=X&&!Q,bi="transition",vi="animation",$i="transition",Ci="transitionend",yi="animation",xi="animationend";mi&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&($i="WebkitTransition",Ci="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(yi="WebkitAnimation",xi="webkitAnimationEnd"));var wi=X?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function ki(t){wi((function(){wi(t)}))}function _i(t,n){var e=t._transitionClasses||(t._transitionClasses=[]);e.indexOf(n)<0&&(e.push(n),fi(t,n))}function Bi(t,n){t._transitionClasses&&b(t._transitionClasses,n),gi(t,n)}function Ei(t,n,e){var r=Oi(t,n),i=r.type,o=r.timeout,a=r.propCount;if(!i)return e();var u=i===bi?Ci:xi,s=0,c=function(){t.removeEventListener(u,l),e()},l=function(n){n.target===t&&++s>=a&&c()};setTimeout((function(){s<a&&c()}),o+1),t.addEventListener(u,l)}var Si=/\b(transform|all)(,|$)/;function Oi(t,n){var e,r=window.getComputedStyle(t),i=(r[$i+"Delay"]||"").split(", "),o=(r[$i+"Duration"]||"").split(", "),a=Ti(i,o),u=(r[yi+"Delay"]||"").split(", "),s=(r[yi+"Duration"]||"").split(", "),c=Ti(u,s),l=0,d=0;return n===bi?a>0&&(e=bi,l=a,d=o.length):n===vi?c>0&&(e=vi,l=c,d=s.length):d=(e=(l=Math.max(a,c))>0?a>c?bi:vi:null)?e===bi?o.length:s.length:0,{type:e,timeout:l,propCount:d,hasTransform:e===bi&&Si.test(r[$i+"Property"])}}function Ti(t,n){for(;t.length<n.length;)t=t.concat(t);return Math.max.apply(null,n.map((function(n,e){return Pi(n)+Pi(t[e])})))}function Pi(t){return 1e3*Number(t.slice(0,-1).replace(",","."))}function Di(t,n){var e=t.elm;o(e._leaveCb)&&(e._leaveCb.cancelled=!0,e._leaveCb());var r=hi(t.data.transition);if(!i(r)&&!o(e._enterCb)&&1===e.nodeType){for(var a=r.css,u=r.type,c=r.enterClass,l=r.enterToClass,d=r.enterActiveClass,p=r.appearClass,f=r.appearToClass,h=r.appearActiveClass,A=r.beforeEnter,m=r.enter,b=r.afterEnter,v=r.enterCancelled,$=r.beforeAppear,C=r.appear,y=r.afterAppear,x=r.appearCancelled,w=r.duration,k=Gn,_=Gn.$vnode;_&&_.parent;)k=_.context,_=_.parent;var B=!k._isMounted||!t.isRootInsert;if(!B||C||""===C){var E=B&&p?p:c,S=B&&h?h:d,O=B&&f?f:l,T=B&&$||A,P=B&&"function"==typeof C?C:m,D=B&&y||b,z=B&&x||v,j=g(s(w)?w.enter:w),M=!1!==a&&!Q,U=Ii(P),R=e._enterCb=I((function(){M&&(Bi(e,O),Bi(e,S)),R.cancelled?(M&&Bi(e,E),z&&z(e)):D&&D(e),e._enterCb=null}));t.data.show||sn(t,"insert",(function(){var n=e.parentNode,r=n&&n._pending&&n._pending[t.key];r&&r.tag===t.tag&&r.elm._leaveCb&&r.elm._leaveCb(),P&&P(e,R)})),T&&T(e),M&&(_i(e,E),_i(e,S),ki((function(){Bi(e,E),R.cancelled||(_i(e,O),U||(ji(j)?setTimeout(R,j):Ei(e,u,R)))}))),t.data.show&&(n&&n(),P&&P(e,R)),M||U||R()}}}function zi(t,n){var e=t.elm;o(e._enterCb)&&(e._enterCb.cancelled=!0,e._enterCb());var r=hi(t.data.transition);if(i(r)||1!==e.nodeType)return n();if(!o(e._leaveCb)){var a=r.css,u=r.type,c=r.leaveClass,l=r.leaveToClass,d=r.leaveActiveClass,p=r.beforeLeave,f=r.leave,h=r.afterLeave,A=r.leaveCancelled,m=r.delayLeave,b=r.duration,v=!1!==a&&!Q,$=Ii(f),C=g(s(b)?b.leave:b),y=e._leaveCb=I((function(){e.parentNode&&e.parentNode._pending&&(e.parentNode._pending[t.key]=null),v&&(Bi(e,l),Bi(e,d)),y.cancelled?(v&&Bi(e,c),A&&A(e)):(n(),h&&h(e)),e._leaveCb=null}));m?m(x):x()}function x(){y.cancelled||(!t.data.show&&e.parentNode&&((e.parentNode._pending||(e.parentNode._pending={}))[t.key]=t),p&&p(e),v&&(_i(e,c),_i(e,d),ki((function(){Bi(e,c),y.cancelled||(_i(e,l),$||(ji(C)?setTimeout(y,C):Ei(e,u,y)))}))),f&&f(e,y),v||$||y())}}function ji(t){return"number"==typeof t&&!isNaN(t)}function Ii(t){if(i(t))return!1;var n=t.fns;return o(n)?Ii(Array.isArray(n)?n[0]:n):(t._length||t.length)>1}function Mi(t,n){!0!==n.data.show&&Di(n)}var Ui=function(t){var n,e,r={},s=t.modules,c=t.nodeOps;for(n=0;n<tr.length;++n)for(r[tr[n]]=[],e=0;e<s.length;++e)o(s[e][tr[n]])&&r[tr[n]].push(s[e][tr[n]]);function l(t){var n=c.parentNode(t);o(n)&&c.removeChild(n,t)}function d(t,n,e,i,u,s,l){if(o(t.elm)&&o(s)&&(t=s[l]=vt(t)),t.isRootInsert=!u,!function(t,n,e,i){var u=t.data;if(o(u)){var s=o(t.componentInstance)&&u.keepAlive;if(o(u=u.hook)&&o(u=u.init)&&u(t,!1),o(t.componentInstance))return p(t,n),f(e,t.elm,i),a(s)&&function(t,n,e,i){for(var a,u=t;u.componentInstance;)if(o(a=(u=u.componentInstance._vnode).data)&&o(a=a.transition)){for(a=0;a<r.activate.length;++a)r.activate[a](Je,u);n.push(u);break}f(e,t.elm,i)}(t,n,e,i),!0}}(t,n,e,i)){var d=t.data,h=t.children,A=t.tag;o(A)?(t.elm=t.ns?c.createElementNS(t.ns,A):c.createElement(A,t),b(t),g(t,h,n),o(d)&&m(t,n),f(e,t.elm,i)):a(t.isComment)?(t.elm=c.createComment(t.text),f(e,t.elm,i)):(t.elm=c.createTextNode(t.text),f(e,t.elm,i))}}function p(t,n){o(t.data.pendingInsert)&&(n.push.apply(n,t.data.pendingInsert),t.data.pendingInsert=null),t.elm=t.componentInstance.$el,A(t)?(m(t,n),b(t)):(Ke(t),n.push(t))}function f(t,n,e){o(t)&&(o(e)?c.parentNode(e)===t&&c.insertBefore(t,n,e):c.appendChild(t,n))}function g(t,n,e){if(Array.isArray(n))for(var r=0;r<n.length;++r)d(n[r],e,t.elm,null,!0,n,r);else u(t.text)&&c.appendChild(t.elm,c.createTextNode(String(t.text)))}function A(t){for(;t.componentInstance;)t=t.componentInstance._vnode;return o(t.tag)}function m(t,e){for(var i=0;i<r.create.length;++i)r.create[i](Je,t);o(n=t.data.hook)&&(o(n.create)&&n.create(Je,t),o(n.insert)&&e.push(t))}function b(t){var n;if(o(n=t.fnScopeId))c.setStyleScope(t.elm,n);else for(var e=t;e;)o(n=e.context)&&o(n=n.$options._scopeId)&&c.setStyleScope(t.elm,n),e=e.parent;o(n=Gn)&&n!==t.context&&n!==t.fnContext&&o(n=n.$options._scopeId)&&c.setStyleScope(t.elm,n)}function v(t,n,e,r,i,o){for(;r<=i;++r)d(e[r],o,t,n,!1,e,r)}function $(t){var n,e,i=t.data;if(o(i))for(o(n=i.hook)&&o(n=n.destroy)&&n(t),n=0;n<r.destroy.length;++n)r.destroy[n](t);if(o(n=t.children))for(e=0;e<t.children.length;++e)$(t.children[e])}function C(t,n,e){for(;n<=e;++n){var r=t[n];o(r)&&(o(r.tag)?(y(r),$(r)):l(r.elm))}}function y(t,n){if(o(n)||o(t.data)){var e,i=r.remove.length+1;for(o(n)?n.listeners+=i:n=function(t,n){function e(){0==--e.listeners&&l(t)}return e.listeners=n,e}(t.elm,i),o(e=t.componentInstance)&&o(e=e._vnode)&&o(e.data)&&y(e,n),e=0;e<r.remove.length;++e)r.remove[e](t,n);o(e=t.data.hook)&&o(e=e.remove)?e(t,n):n()}else l(t.elm)}function x(t,n,e,r){for(var i=e;i<r;i++){var a=n[i];if(o(a)&&nr(t,a))return i}}function w(t,n,e,u,s,l){if(t!==n){o(n.elm)&&o(u)&&(n=u[s]=vt(n));var p=n.elm=t.elm;if(a(t.isAsyncPlaceholder))o(n.asyncFactory.resolved)?B(t.elm,n,e):n.isAsyncPlaceholder=!0;else if(a(n.isStatic)&&a(t.isStatic)&&n.key===t.key&&(a(n.isCloned)||a(n.isOnce)))n.componentInstance=t.componentInstance;else{var f,g=n.data;o(g)&&o(f=g.hook)&&o(f=f.prepatch)&&f(t,n);var h=t.children,m=n.children;if(o(g)&&A(n)){for(f=0;f<r.update.length;++f)r.update[f](t,n);o(f=g.hook)&&o(f=f.update)&&f(t,n)}i(n.text)?o(h)&&o(m)?h!==m&&function(t,n,e,r,a){for(var u,s,l,p=0,f=0,g=n.length-1,h=n[0],A=n[g],m=e.length-1,b=e[0],$=e[m],y=!a;p<=g&&f<=m;)i(h)?h=n[++p]:i(A)?A=n[--g]:nr(h,b)?(w(h,b,r,e,f),h=n[++p],b=e[++f]):nr(A,$)?(w(A,$,r,e,m),A=n[--g],$=e[--m]):nr(h,$)?(w(h,$,r,e,m),y&&c.insertBefore(t,h.elm,c.nextSibling(A.elm)),h=n[++p],$=e[--m]):nr(A,b)?(w(A,b,r,e,f),y&&c.insertBefore(t,A.elm,h.elm),A=n[--g],b=e[++f]):(i(u)&&(u=er(n,p,g)),i(s=o(b.key)?u[b.key]:x(b,n,p,g))?d(b,r,t,h.elm,!1,e,f):nr(l=n[s],b)?(w(l,b,r,e,f),n[s]=void 0,y&&c.insertBefore(t,l.elm,h.elm)):d(b,r,t,h.elm,!1,e,f),b=e[++f]);p>g?v(t,i(e[m+1])?null:e[m+1].elm,e,f,m,r):f>m&&C(n,p,g)}(p,h,m,e,l):o(m)?(o(t.text)&&c.setTextContent(p,""),v(p,null,m,0,m.length-1,e)):o(h)?C(h,0,h.length-1):o(t.text)&&c.setTextContent(p,""):t.text!==n.text&&c.setTextContent(p,n.text),o(g)&&o(f=g.hook)&&o(f=f.postpatch)&&f(t,n)}}}function k(t,n,e){if(a(e)&&o(t.parent))t.parent.data.pendingInsert=n;else for(var r=0;r<n.length;++r)n[r].data.hook.insert(n[r])}var _=h("attrs,class,staticClass,staticStyle,key");function B(t,n,e,r){var i,u=n.tag,s=n.data,c=n.children;if(r=r||s&&s.pre,n.elm=t,a(n.isComment)&&o(n.asyncFactory))return n.isAsyncPlaceholder=!0,!0;if(o(s)&&(o(i=s.hook)&&o(i=i.init)&&i(n,!0),o(i=n.componentInstance)))return p(n,e),!0;if(o(u)){if(o(c))if(t.hasChildNodes())if(o(i=s)&&o(i=i.domProps)&&o(i=i.innerHTML)){if(i!==t.innerHTML)return!1}else{for(var l=!0,d=t.firstChild,f=0;f<c.length;f++){if(!d||!B(d,c[f],e,r)){l=!1;break}d=d.nextSibling}if(!l||d)return!1}else g(n,c,e);if(o(s)){var h=!1;for(var A in s)if(!_(A)){h=!0,m(n,e);break}!h&&s.class&&rn(s.class)}}else t.data!==n.text&&(t.data=n.text);return!0}return function(t,n,e,u){if(!i(n)){var s,l=!1,p=[];if(i(t))l=!0,d(n,p);else{var f=o(t.nodeType);if(!f&&nr(t,n))w(t,n,p,null,null,u);else{if(f){if(1===t.nodeType&&t.hasAttribute(M)&&(t.removeAttribute(M),e=!0),a(e)&&B(t,n,p))return k(n,p,!0),t;s=t,t=new ht(c.tagName(s).toLowerCase(),{},[],void 0,s)}var g=t.elm,h=c.parentNode(g);if(d(n,p,g._leaveCb?null:h,c.nextSibling(g)),o(n.parent))for(var m=n.parent,b=A(n);m;){for(var v=0;v<r.destroy.length;++v)r.destroy[v](m);if(m.elm=n.elm,b){for(var y=0;y<r.create.length;++y)r.create[y](Je,m);var x=m.data.hook.insert;if(x.merged)for(var _=1;_<x.fns.length;_++)x.fns[_]()}else Ke(m);m=m.parent}o(h)?C([t],0,0):o(t.tag)&&$(t)}}return k(n,p,l),n.elm}o(t)&&$(t)}}({nodeOps:Ge,modules:[fr,Cr,Qr,ti,di,X?{create:Mi,activate:Mi,remove:function(t,n){!0!==t.data.show?zi(t,n):n()}}:{}].concat(cr)});Q&&document.addEventListener("selectionchange",(function(){var t=document.activeElement;t&&t.vmodel&&Xi(t,"input")}));var Ri={inserted:function(t,n,e,r){"select"===e.tag?(r.elm&&!r.elm._vOptions?sn(e,"postpatch",(function(){Ri.componentUpdated(t,n,e)})):Li(t,n,e.context),t._vOptions=[].map.call(t.options,Wi)):("textarea"===e.tag||Ye(t.type))&&(t._vModifiers=n.modifiers,n.modifiers.lazy||(t.addEventListener("compositionstart",Fi),t.addEventListener("compositionend",Zi),t.addEventListener("change",Zi),Q&&(t.vmodel=!0)))},componentUpdated:function(t,n,e){if("select"===e.tag){Li(t,n,e.context);var r=t._vOptions,i=t._vOptions=[].map.call(t.options,Wi);i.some((function(t,n){return!z(t,r[n])}))&&(t.multiple?n.value.some((function(t){return Ni(t,i)})):n.value!==n.oldValue&&Ni(n.value,i))&&Xi(t,"change")}}};function Li(t,n,e){qi(t,n),(G||K)&&setTimeout((function(){qi(t,n)}),0)}function qi(t,n,e){var r=n.value,i=t.multiple;if(!i||Array.isArray(r)){for(var o,a,u=0,s=t.options.length;u<s;u++)if(a=t.options[u],i)o=j(r,Wi(a))>-1,a.selected!==o&&(a.selected=o);else if(z(Wi(a),r))return void(t.selectedIndex!==u&&(t.selectedIndex=u));i||(t.selectedIndex=-1)}}function Ni(t,n){return n.every((function(n){return!z(n,t)}))}function Wi(t){return"_value"in t?t._value:t.value}function Fi(t){t.target.composing=!0}function Zi(t){t.target.composing&&(t.target.composing=!1,Xi(t.target,"input"))}function Xi(t,n){var e=document.createEvent("HTMLEvents");e.initEvent(n,!0,!0),t.dispatchEvent(e)}function Hi(t){return!t.componentInstance||t.data&&t.data.transition?t:Hi(t.componentInstance._vnode)}var Yi={model:Ri,show:{bind:function(t,n,e){var r=n.value,i=(e=Hi(e)).data&&e.data.transition,o=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&i?(e.data.show=!0,Di(e,(function(){t.style.display=o}))):t.style.display=r?o:"none"},update:function(t,n,e){var r=n.value;!r!=!n.oldValue&&((e=Hi(e)).data&&e.data.transition?(e.data.show=!0,r?Di(e,(function(){t.style.display=t.__vOriginalDisplay})):zi(e,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,n,e,r,i){i||(t.style.display=t.__vOriginalDisplay)}}},Vi={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 Gi(t){var n=t&&t.componentOptions;return n&&n.Ctor.options.abstract?Gi(Zn(n.children)):t}function Qi(t){var n={},e=t.$options;for(var r in e.propsData)n[r]=t[r];var i=e._parentListeners;for(var o in i)n[x(o)]=i[o];return n}function Ki(t,n){if(/\d-keep-alive$/.test(n.tag))return t("keep-alive",{props:n.componentOptions.propsData})}var Ji=function(t){return t.tag||Fn(t)},to=function(t){return"show"===t.name},no={name:"transition",props:Vi,abstract:!0,render:function(t){var n=this,e=this.$slots.default;if(e&&(e=e.filter(Ji)).length){var r=this.mode,i=e[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return i;var o=Gi(i);if(!o)return i;if(this._leaving)return Ki(t,i);var a="__transition-"+this._uid+"-";o.key=null==o.key?o.isComment?a+"comment":a+o.tag:u(o.key)?0===String(o.key).indexOf(a)?o.key:a+o.key:o.key;var s=(o.data||(o.data={})).transition=Qi(this),c=this._vnode,l=Gi(c);if(o.data.directives&&o.data.directives.some(to)&&(o.data.show=!0),l&&l.data&&!function(t,n){return n.key===t.key&&n.tag===t.tag}(o,l)&&!Fn(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var d=l.data.transition=S({},s);if("out-in"===r)return this._leaving=!0,sn(d,"afterLeave",(function(){n._leaving=!1,n.$forceUpdate()})),Ki(t,i);if("in-out"===r){if(Fn(o))return c;var p,f=function(){p()};sn(s,"afterEnter",f),sn(s,"enterCancelled",f),sn(d,"delayLeave",(function(t){p=t}))}}return i}}},eo=S({tag:String,moveClass:String},Vi);function ro(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function io(t){t.data.newPos=t.elm.getBoundingClientRect()}function oo(t){var n=t.data.pos,e=t.data.newPos,r=n.left-e.left,i=n.top-e.top;if(r||i){t.data.moved=!0;var o=t.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}delete eo.mode;var ao={Transition:no,TransitionGroup:{props:eo,beforeMount:function(){var t=this,n=this._update;this._update=function(e,r){var i=Qn(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,i(),n.call(t,e,r)}},render:function(t){for(var n=this.tag||this.$vnode.data.tag||"span",e=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=Qi(this),u=0;u<i.length;u++){var s=i[u];s.tag&&null!=s.key&&0!==String(s.key).indexOf("__vlist")&&(o.push(s),e[s.key]=s,(s.data||(s.data={})).transition=a)}if(r){for(var c=[],l=[],d=0;d<r.length;d++){var p=r[d];p.data.transition=a,p.data.pos=p.elm.getBoundingClientRect(),e[p.key]?c.push(p):l.push(p)}this.kept=t(n,null,c),this.removed=l}return t(n,null,o)},updated:function(){var t=this.prevChildren,n=this.moveClass||(this.name||"v")+"-move";t.length&&this.hasMove(t[0].elm,n)&&(t.forEach(ro),t.forEach(io),t.forEach(oo),this._reflow=document.body.offsetHeight,t.forEach((function(t){if(t.data.moved){var e=t.elm,r=e.style;_i(e,n),r.transform=r.WebkitTransform=r.transitionDuration="",e.addEventListener(Ci,e._moveCb=function t(r){r&&r.target!==e||r&&!/transform$/.test(r.propertyName)||(e.removeEventListener(Ci,t),e._moveCb=null,Bi(e,n))})}})))},methods:{hasMove:function(t,n){if(!mi)return!1;if(this._hasMove)return this._hasMove;var e=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach((function(t){gi(e,t)})),fi(e,n),e.style.display="none",this.$el.appendChild(e);var r=Oi(e);return this.$el.removeChild(e),this._hasMove=r.hasTransform}}}};ye.config.mustUseProp=Te,ye.config.isReservedTag=Ze,ye.config.isReservedAttr=Se,ye.config.getTagNamespace=Xe,ye.config.isUnknownElement=function(t){if(!X)return!0;if(Ze(t))return!1;if(t=t.toLowerCase(),null!=He[t])return He[t];var n=document.createElement(t);return t.indexOf("-")>-1?He[t]=n.constructor===window.HTMLUnknownElement||n.constructor===window.HTMLElement:He[t]=/HTMLUnknownElement/.test(n.toString())},S(ye.options.directives,Yi),S(ye.options.components,ao),ye.prototype.__patch__=X?Ui:T,ye.prototype.$mount=function(t,n){return function(t,n,e){var r;return t.$el=n,t.$options.render||(t.$options.render=mt),te(t,"beforeMount"),r=function(){t._update(t._render(),e)},new pe(t,r,T,{before:function(){t._isMounted&&!t._isDestroyed&&te(t,"beforeUpdate")}},!0),e=!1,null==t.$vnode&&(t._isMounted=!0,te(t,"mounted")),t}(this,t=t&&X?Ve(t):void 0,n)},X&&setTimeout((function(){L.devtools&&ot&&ot.emit("init",ye)}),0);var uo,so=/\{\{((?:.|\r?\n)+?)\}\}/g,co=/[-.*+?^${}()|[\]\/\\]/g,lo=C((function(t){var n=t[0].replace(co,"\\$&"),e=t[1].replace(co,"\\$&");return new RegExp(n+"((?:.|\\n)+?)"+e,"g")})),po={staticKeys:["staticClass"],transformNode:function(t,n){n.warn;var e=zr(t,"class");e&&(t.staticClass=JSON.stringify(e));var r=Dr(t,"class",!1);r&&(t.classBinding=r)},genData:function(t){var n="";return t.staticClass&&(n+="staticClass:"+t.staticClass+","),t.classBinding&&(n+="class:"+t.classBinding+","),n}},fo={staticKeys:["staticStyle"],transformNode:function(t,n){n.warn;var e=zr(t,"style");e&&(t.staticStyle=JSON.stringify(ni(e)));var r=Dr(t,"style",!1);r&&(t.styleBinding=r)},genData:function(t){var n="";return t.staticStyle&&(n+="staticStyle:"+t.staticStyle+","),t.styleBinding&&(n+="style:("+t.styleBinding+"),"),n}},go=h("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),ho=h("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),Ao=h("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"),mo=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,bo=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,vo="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+q.source+"]*",$o="((?:"+vo+"\\:)?"+vo+")",Co=new RegExp("^<"+$o),yo=/^\s*(\/?)>/,xo=new RegExp("^<\\/"+$o+"[^>]*>"),wo=/^<!DOCTYPE [^>]+>/i,ko=/^<!\--/,_o=/^<!\[/,Bo=h("script,style,textarea",!0),Eo={},So={"<":"<",">":">",""":'"',"&":"&"," ":"\n","	":"\t","'":"'"},Oo=/&(?:lt|gt|quot|amp|#39);/g,To=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Po=h("pre,textarea",!0),Do=function(t,n){return t&&Po(t)&&"\n"===n[0]};function zo(t,n){var e=n?To:Oo;return t.replace(e,(function(t){return So[t]}))}var jo,Io,Mo,Uo,Ro,Lo,qo,No,Wo=/^@|^v-on:/,Fo=/^v-|^@|^:|^#/,Zo=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Xo=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Ho=/^\(|\)$/g,Yo=/^\[.*\]$/,Vo=/:(.*)$/,Go=/^:|^\.|^v-bind:/,Qo=/\.[^.\]]+(?=[^\]]*$)/g,Ko=/^v-slot(:|$)|^#/,Jo=/[\r\n]/,ta=/\s+/g,na=C((function(t){return(uo=uo||document.createElement("div")).innerHTML=t,uo.textContent})),ea="_empty_";function ra(t,n,e){return{type:1,tag:t,attrsList:n,attrsMap:ca(n),rawAttrsMap:{},parent:e,children:[]}}function ia(t,n){var e,r;(r=Dr(e=t,"key"))&&(e.key=r),t.plain=!t.key&&!t.scopedSlots&&!t.attrsList.length,function(t){var n=Dr(t,"ref");n&&(t.ref=n,t.refInFor=function(t){for(var n=t;n;){if(void 0!==n.for)return!0;n=n.parent}return!1}(t))}(t),function(t){var n;"template"===t.tag?(n=zr(t,"scope"),t.slotScope=n||zr(t,"slot-scope")):(n=zr(t,"slot-scope"))&&(t.slotScope=n);var e=Dr(t,"slot");if(e&&(t.slotTarget='""'===e?'"default"':e,t.slotTargetDynamic=!(!t.attrsMap[":slot"]&&!t.attrsMap["v-bind:slot"]),"template"===t.tag||t.slotScope||Er(t,"slot",e,function(t,n){return t.rawAttrsMap[":"+n]||t.rawAttrsMap["v-bind:"+n]||t.rawAttrsMap[n]}(t,"slot"))),"template"===t.tag){var r=jr(t,Ko);if(r){var i=ua(r),o=i.name,a=i.dynamic;t.slotTarget=o,t.slotTargetDynamic=a,t.slotScope=r.value||ea}}else{var u=jr(t,Ko);if(u){var s=t.scopedSlots||(t.scopedSlots={}),c=ua(u),l=c.name,d=c.dynamic,p=s[l]=ra("template",[],t);p.slotTarget=l,p.slotTargetDynamic=d,p.children=t.children.filter((function(t){if(!t.slotScope)return t.parent=p,!0})),p.slotScope=u.value||ea,t.children=[],t.plain=!1}}}(t),function(t){"slot"===t.tag&&(t.slotName=Dr(t,"name"))}(t),function(t){var n;(n=Dr(t,"is"))&&(t.component=n),null!=zr(t,"inline-template")&&(t.inlineTemplate=!0)}(t);for(var i=0;i<Mo.length;i++)t=Mo[i](t,n)||t;return function(t){var n,e,r,i,o,a,u,s,c=t.attrsList;for(n=0,e=c.length;n<e;n++)if(r=i=c[n].name,o=c[n].value,Fo.test(r))if(t.hasBindings=!0,(a=sa(r.replace(Fo,"")))&&(r=r.replace(Qo,"")),Go.test(r))r=r.replace(Go,""),o=xr(o),(s=Yo.test(r))&&(r=r.slice(1,-1)),a&&(a.prop&&!s&&"innerHtml"===(r=x(r))&&(r="innerHTML"),a.camel&&!s&&(r=x(r)),a.sync&&(u=Ur(o,"$event"),s?Pr(t,'"update:"+('+r+")",u,null,!1,0,c[n],!0):(Pr(t,"update:"+x(r),u,null,!1,0,c[n]),_(r)!==x(r)&&Pr(t,"update:"+_(r),u,null,!1,0,c[n])))),a&&a.prop||!t.component&&qo(t.tag,t.attrsMap.type,r)?Br(t,r,o,c[n],s):Er(t,r,o,c[n],s);else if(Wo.test(r))r=r.replace(Wo,""),(s=Yo.test(r))&&(r=r.slice(1,-1)),Pr(t,r,o,a,!1,0,c[n],s);else{var l=(r=r.replace(Fo,"")).match(Vo),d=l&&l[1];s=!1,d&&(r=r.slice(0,-(d.length+1)),Yo.test(d)&&(d=d.slice(1,-1),s=!0)),Or(t,r,i,o,d,s,a,c[n])}else Er(t,r,JSON.stringify(o),c[n]),!t.component&&"muted"===r&&qo(t.tag,t.attrsMap.type,r)&&Br(t,r,"true",c[n])}(t),t}function oa(t){var n;if(n=zr(t,"v-for")){var e=function(t){var n=t.match(Zo);if(n){var e={};e.for=n[2].trim();var r=n[1].trim().replace(Ho,""),i=r.match(Xo);return i?(e.alias=r.replace(Xo,"").trim(),e.iterator1=i[1].trim(),i[2]&&(e.iterator2=i[2].trim())):e.alias=r,e}}(n);e&&S(t,e)}}function aa(t,n){t.ifConditions||(t.ifConditions=[]),t.ifConditions.push(n)}function ua(t){var n=t.name.replace(Ko,"");return n||"#"!==t.name[0]&&(n="default"),Yo.test(n)?{name:n.slice(1,-1),dynamic:!0}:{name:'"'+n+'"',dynamic:!1}}function sa(t){var n=t.match(Qo);if(n){var e={};return n.forEach((function(t){e[t.slice(1)]=!0})),e}}function ca(t){for(var n={},e=0,r=t.length;e<r;e++)n[t[e].name]=t[e].value;return n}var la=/^xmlns:NS\d+/,da=/^NS\d+:/;function pa(t){return ra(t.tag,t.attrsList.slice(),t.parent)}var fa,ga,ha=[po,fo,{preTransformNode:function(t,n){if("input"===t.tag){var e,r=t.attrsMap;if(!r["v-model"])return;if((r[":type"]||r["v-bind:type"])&&(e=Dr(t,"type")),r.type||e||!r["v-bind"]||(e="("+r["v-bind"]+").type"),e){var i=zr(t,"v-if",!0),o=i?"&&("+i+")":"",a=null!=zr(t,"v-else",!0),u=zr(t,"v-else-if",!0),s=pa(t);oa(s),Sr(s,"type","checkbox"),ia(s,n),s.processed=!0,s.if="("+e+")==='checkbox'"+o,aa(s,{exp:s.if,block:s});var c=pa(t);zr(c,"v-for",!0),Sr(c,"type","radio"),ia(c,n),aa(s,{exp:"("+e+")==='radio'"+o,block:c});var l=pa(t);return zr(l,"v-for",!0),Sr(l,":type",e),ia(l,n),aa(s,{exp:i,block:l}),a?s.else=!0:u&&(s.elseif=u),s}}}}],Aa={expectHTML:!0,modules:ha,directives:{model:function(t,n,e){var r=n.value,i=n.modifiers,o=t.tag,a=t.attrsMap.type;if(t.component)return Mr(t,r,i),!1;if("select"===o)!function(t,n,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")+"});";Pr(t,"change",r=r+" "+Ur(n,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]"),null,!0)}(t,r,i);else if("input"===o&&"checkbox"===a)!function(t,n,e){var r=e&&e.number,i=Dr(t,"value")||"null",o=Dr(t,"true-value")||"true",a=Dr(t,"false-value")||"false";Br(t,"checked","Array.isArray("+n+")?_i("+n+","+i+")>-1"+("true"===o?":("+n+")":":_q("+n+","+o+")")),Pr(t,"change","var $$a="+n+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Ur(n,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Ur(n,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Ur(n,"$$c")+"}",null,!0)}(t,r,i);else if("input"===o&&"radio"===a)!function(t,n,e){var r=e&&e.number,i=Dr(t,"value")||"null";Br(t,"checked","_q("+n+","+(i=r?"_n("+i+")":i)+")"),Pr(t,"change",Ur(n,i),null,!0)}(t,r,i);else if("input"===o||"textarea"===o)!function(t,n,e){var r=t.attrsMap.type,i=e||{},o=i.lazy,a=i.number,u=i.trim,s=!o&&"range"!==r,c=o?"change":"range"===r?"__r":"input",l="$event.target.value";u&&(l="$event.target.value.trim()"),a&&(l="_n("+l+")");var d=Ur(n,l);s&&(d="if($event.target.composing)return;"+d),Br(t,"value","("+n+")"),Pr(t,c,d,null,!0),(u||a)&&Pr(t,"blur","$forceUpdate()")}(t,r,i);else if(!L.isReservedTag(o))return Mr(t,r,i),!1;return!0},text:function(t,n){n.value&&Br(t,"textContent","_s("+n.value+")",n)},html:function(t,n){n.value&&Br(t,"innerHTML","_s("+n.value+")",n)}},isPreTag:function(t){return"pre"===t},isUnaryTag:go,mustUseProp:Te,canBeLeftOpenTag:ho,isReservedTag:Ze,getTagNamespace:Xe,staticKeys:function(t){return t.reduce((function(t,n){return t.concat(n.staticKeys||[])}),[]).join(",")}(ha)},ma=C((function(t){return h("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(t?","+t:""))})),ba=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,va=/\([^)]*?\);*$/,$a=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Ca={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},ya={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"]},xa=function(t){return"if("+t+")return null;"},wa={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:xa("$event.target !== $event.currentTarget"),ctrl:xa("!$event.ctrlKey"),shift:xa("!$event.shiftKey"),alt:xa("!$event.altKey"),meta:xa("!$event.metaKey"),left:xa("'button' in $event && $event.button !== 0"),middle:xa("'button' in $event && $event.button !== 1"),right:xa("'button' in $event && $event.button !== 2")};function ka(t,n){var e=n?"nativeOn:":"on:",r="",i="";for(var o in t){var a=_a(t[o]);t[o]&&t[o].dynamic?i+=o+","+a+",":r+='"'+o+'":'+a+","}return r="{"+r.slice(0,-1)+"}",i?e+"_d("+r+",["+i.slice(0,-1)+"])":e+r}function _a(t){if(!t)return"function(){}";if(Array.isArray(t))return"["+t.map((function(t){return _a(t)})).join(",")+"]";var n=$a.test(t.value),e=ba.test(t.value),r=$a.test(t.value.replace(va,""));if(t.modifiers){var i="",o="",a=[];for(var u in t.modifiers)if(wa[u])o+=wa[u],Ca[u]&&a.push(u);else if("exact"===u){var s=t.modifiers;o+=xa(["ctrl","shift","alt","meta"].filter((function(t){return!s[t]})).map((function(t){return"$event."+t+"Key"})).join("||"))}else a.push(u);return a.length&&(i+=function(t){return"if(!$event.type.indexOf('key')&&"+t.map(Ba).join("&&")+")return null;"}(a)),o&&(i+=o),"function($event){"+i+(n?"return "+t.value+"($event)":e?"return ("+t.value+")($event)":r?"return "+t.value:t.value)+"}"}return n||e?t.value:"function($event){"+(r?"return "+t.value:t.value)+"}"}function Ba(t){var n=parseInt(t,10);if(n)return"$event.keyCode!=="+n;var e=Ca[t],r=ya[t];return"_k($event.keyCode,"+JSON.stringify(t)+","+JSON.stringify(e)+",$event.key,"+JSON.stringify(r)+")"}var Ea={on:function(t,n){t.wrapListeners=function(t){return"_g("+t+","+n.value+")"}},bind:function(t,n){t.wrapData=function(e){return"_b("+e+",'"+t.tag+"',"+n.value+","+(n.modifiers&&n.modifiers.prop?"true":"false")+(n.modifiers&&n.modifiers.sync?",true":"")+")"}},cloak:T},Sa=function(t){this.options=t,this.warn=t.warn||kr,this.transforms=_r(t.modules,"transformCode"),this.dataGenFns=_r(t.modules,"genData"),this.directives=S(S({},Ea),t.directives);var n=t.isReservedTag||P;this.maybeComponent=function(t){return!!t.component||!n(t.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Oa(t,n){var e=new Sa(n);return{render:"with(this){return "+(t?Ta(t,e):'_c("div")')+"}",staticRenderFns:e.staticRenderFns}}function Ta(t,n){if(t.parent&&(t.pre=t.pre||t.parent.pre),t.staticRoot&&!t.staticProcessed)return Pa(t,n);if(t.once&&!t.onceProcessed)return Da(t,n);if(t.for&&!t.forProcessed)return ja(t,n);if(t.if&&!t.ifProcessed)return za(t,n);if("template"!==t.tag||t.slotTarget||n.pre){if("slot"===t.tag)return function(t,n){var e=t.slotName||'"default"',r=Ra(t,n),i="_t("+e+(r?","+r:""),o=t.attrs||t.dynamicAttrs?Na((t.attrs||[]).concat(t.dynamicAttrs||[]).map((function(t){return{name:x(t.name),value:t.value,dynamic:t.dynamic}}))):null,a=t.attrsMap["v-bind"];return!o&&!a||r||(i+=",null"),o&&(i+=","+o),a&&(i+=(o?"":",null")+","+a),i+")"}(t,n);var e;if(t.component)e=function(t,n,e){var r=n.inlineTemplate?null:Ra(n,e,!0);return"_c("+t+","+Ia(n,e)+(r?","+r:"")+")"}(t.component,t,n);else{var r;(!t.plain||t.pre&&n.maybeComponent(t))&&(r=Ia(t,n));var i=t.inlineTemplate?null:Ra(t,n,!0);e="_c('"+t.tag+"'"+(r?","+r:"")+(i?","+i:"")+")"}for(var o=0;o<n.transforms.length;o++)e=n.transforms[o](t,e);return e}return Ra(t,n)||"void 0"}function Pa(t,n){t.staticProcessed=!0;var e=n.pre;return t.pre&&(n.pre=t.pre),n.staticRenderFns.push("with(this){return "+Ta(t,n)+"}"),n.pre=e,"_m("+(n.staticRenderFns.length-1)+(t.staticInFor?",true":"")+")"}function Da(t,n){if(t.onceProcessed=!0,t.if&&!t.ifProcessed)return za(t,n);if(t.staticInFor){for(var e="",r=t.parent;r;){if(r.for){e=r.key;break}r=r.parent}return e?"_o("+Ta(t,n)+","+n.onceId+++","+e+")":Ta(t,n)}return Pa(t,n)}function za(t,n,e,r){return t.ifProcessed=!0,function t(n,e,r,i){if(!n.length)return i||"_e()";var o=n.shift();return o.exp?"("+o.exp+")?"+a(o.block)+":"+t(n,e,r,i):""+a(o.block);function a(t){return r?r(t,e):t.once?Da(t,e):Ta(t,e)}}(t.ifConditions.slice(),n,e,r)}function ja(t,n,e,r){var i=t.for,o=t.alias,a=t.iterator1?","+t.iterator1:"",u=t.iterator2?","+t.iterator2:"";return t.forProcessed=!0,(r||"_l")+"(("+i+"),function("+o+a+u+"){return "+(e||Ta)(t,n)+"})"}function Ia(t,n){var e="{",r=function(t,n){var e=t.directives;if(e){var r,i,o,a,u="directives:[",s=!1;for(r=0,i=e.length;r<i;r++){o=e[r],a=!0;var c=n.directives[o.name];c&&(a=!!c(t,o,n.warn)),a&&(s=!0,u+='{name:"'+o.name+'",rawName:"'+o.rawName+'"'+(o.value?",value:("+o.value+"),expression:"+JSON.stringify(o.value):"")+(o.arg?",arg:"+(o.isDynamicArg?o.arg:'"'+o.arg+'"'):"")+(o.modifiers?",modifiers:"+JSON.stringify(o.modifiers):"")+"},")}return s?u.slice(0,-1)+"]":void 0}}(t,n);r&&(e+=r+","),t.key&&(e+="key:"+t.key+","),t.ref&&(e+="ref:"+t.ref+","),t.refInFor&&(e+="refInFor:true,"),t.pre&&(e+="pre:true,"),t.component&&(e+='tag:"'+t.tag+'",');for(var i=0;i<n.dataGenFns.length;i++)e+=n.dataGenFns[i](t);if(t.attrs&&(e+="attrs:"+Na(t.attrs)+","),t.props&&(e+="domProps:"+Na(t.props)+","),t.events&&(e+=ka(t.events,!1)+","),t.nativeEvents&&(e+=ka(t.nativeEvents,!0)+","),t.slotTarget&&!t.slotScope&&(e+="slot:"+t.slotTarget+","),t.scopedSlots&&(e+=function(t,n,e){var r=t.for||Object.keys(n).some((function(t){var e=n[t];return e.slotTargetDynamic||e.if||e.for||Ma(e)})),i=!!t.if;if(!r)for(var o=t.parent;o;){if(o.slotScope&&o.slotScope!==ea||o.for){r=!0;break}o.if&&(i=!0),o=o.parent}var a=Object.keys(n).map((function(t){return Ua(n[t],e)})).join(",");return"scopedSlots:_u(["+a+"]"+(r?",null,true":"")+(!r&&i?",null,false,"+function(t){for(var n=5381,e=t.length;e;)n=33*n^t.charCodeAt(--e);return n>>>0}(a):"")+")"}(t,t.scopedSlots,n)+","),t.model&&(e+="model:{value:"+t.model.value+",callback:"+t.model.callback+",expression:"+t.model.expression+"},"),t.inlineTemplate){var o=function(t,n){var e=t.children[0];if(e&&1===e.type){var r=Oa(e,n.options);return"inlineTemplate:{render:function(){"+r.render+"},staticRenderFns:["+r.staticRenderFns.map((function(t){return"function(){"+t+"}"})).join(",")+"]}"}}(t,n);o&&(e+=o+",")}return e=e.replace(/,$/,"")+"}",t.dynamicAttrs&&(e="_b("+e+',"'+t.tag+'",'+Na(t.dynamicAttrs)+")"),t.wrapData&&(e=t.wrapData(e)),t.wrapListeners&&(e=t.wrapListeners(e)),e}function Ma(t){return 1===t.type&&("slot"===t.tag||t.children.some(Ma))}function Ua(t,n){var e=t.attrsMap["slot-scope"];if(t.if&&!t.ifProcessed&&!e)return za(t,n,Ua,"null");if(t.for&&!t.forProcessed)return ja(t,n,Ua);var r=t.slotScope===ea?"":String(t.slotScope),i="function("+r+"){return "+("template"===t.tag?t.if&&e?"("+t.if+")?"+(Ra(t,n)||"undefined")+":undefined":Ra(t,n)||"undefined":Ta(t,n))+"}",o=r?"":",proxy:true";return"{key:"+(t.slotTarget||'"default"')+",fn:"+i+o+"}"}function Ra(t,n,e,r,i){var o=t.children;if(o.length){var a=o[0];if(1===o.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var u=e?n.maybeComponent(a)?",1":",0":"";return""+(r||Ta)(a,n)+u}var s=e?function(t,n){for(var e=0,r=0;r<t.length;r++){var i=t[r];if(1===i.type){if(La(i)||i.ifConditions&&i.ifConditions.some((function(t){return La(t.block)}))){e=2;break}(n(i)||i.ifConditions&&i.ifConditions.some((function(t){return n(t.block)})))&&(e=1)}}return e}(o,n.maybeComponent):0,c=i||qa;return"["+o.map((function(t){return c(t,n)})).join(",")+"]"+(s?","+s:"")}}function La(t){return void 0!==t.for||"template"===t.tag||"slot"===t.tag}function qa(t,n){return 1===t.type?Ta(t,n):3===t.type&&t.isComment?(r=t,"_e("+JSON.stringify(r.text)+")"):"_v("+(2===(e=t).type?e.expression:Wa(JSON.stringify(e.text)))+")";var e,r}function Na(t){for(var n="",e="",r=0;r<t.length;r++){var i=t[r],o=Wa(i.value);i.dynamic?e+=i.name+","+o+",":n+='"'+i.name+'":'+o+","}return n="{"+n.slice(0,-1)+"}",e?"_d("+n+",["+e.slice(0,-1)+"])":n}function Wa(t){return t.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function Fa(t,n){try{return new Function(t)}catch(e){return n.push({err:e,code:t}),T}}function Za(t){var n=Object.create(null);return function(e,r,i){(r=S({},r)).warn,delete r.warn;var o=r.delimiters?String(r.delimiters)+e:e;if(n[o])return n[o];var a=t(e,r),u={},s=[];return u.render=Fa(a.render,s),u.staticRenderFns=a.staticRenderFns.map((function(t){return Fa(t,s)})),n[o]=u}}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 Xa,Ha,Ya=(Xa=function(t,n){var e=function(t,n){jo=n.warn||kr,Lo=n.isPreTag||P,qo=n.mustUseProp||P,No=n.getTagNamespace||P,n.isReservedTag,Mo=_r(n.modules,"transformNode"),Uo=_r(n.modules,"preTransformNode"),Ro=_r(n.modules,"postTransformNode"),Io=n.delimiters;var e,r,i=[],o=!1!==n.preserveWhitespace,a=n.whitespace,u=!1,s=!1;function c(t){if(l(t),u||t.processed||(t=ia(t,n)),i.length||t===e||e.if&&(t.elseif||t.else)&&aa(e,{exp:t.elseif,block:t}),r&&!t.forbidden)if(t.elseif||t.else)a=t,(c=function(t){for(var n=t.length;n--;){if(1===t[n].type)return t[n];t.pop()}}(r.children))&&c.if&&aa(c,{exp:a.elseif,block:a});else{if(t.slotScope){var o=t.slotTarget||'"default"';(r.scopedSlots||(r.scopedSlots={}))[o]=t}r.children.push(t),t.parent=r}var a,c;t.children=t.children.filter((function(t){return!t.slotScope})),l(t),t.pre&&(u=!1),Lo(t.tag)&&(s=!1);for(var d=0;d<Ro.length;d++)Ro[d](t,n)}function l(t){if(!s)for(var n;(n=t.children[t.children.length-1])&&3===n.type&&" "===n.text;)t.children.pop()}return function(t,n){for(var e,r,i=[],o=n.expectHTML,a=n.isUnaryTag||P,u=n.canBeLeftOpenTag||P,s=0;t;){if(e=t,r&&Bo(r)){var c=0,l=r.toLowerCase(),d=Eo[l]||(Eo[l]=new RegExp("([\\s\\S]*?)(</"+l+"[^>]*>)","i")),p=t.replace(d,(function(t,e,r){return c=r.length,Bo(l)||"noscript"===l||(e=e.replace(/<!\--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g,"$1")),Do(l,e)&&(e=e.slice(1)),n.chars&&n.chars(e),""}));s+=t.length-p.length,t=p,_(l,s-c,s)}else{var f=t.indexOf("<");if(0===f){if(ko.test(t)){var g=t.indexOf("--\x3e");if(g>=0){n.shouldKeepComment&&n.comment(t.substring(4,g),s,s+g+3),x(g+3);continue}}if(_o.test(t)){var h=t.indexOf("]>");if(h>=0){x(h+2);continue}}var A=t.match(wo);if(A){x(A[0].length);continue}var m=t.match(xo);if(m){var b=s;x(m[0].length),_(m[1],b,s);continue}var v=w();if(v){k(v),Do(v.tagName,t)&&x(1);continue}}var $=void 0,C=void 0,y=void 0;if(f>=0){for(C=t.slice(f);!(xo.test(C)||Co.test(C)||ko.test(C)||_o.test(C)||(y=C.indexOf("<",1))<0);)f+=y,C=t.slice(f);$=t.substring(0,f)}f<0&&($=t),$&&x($.length),n.chars&&$&&n.chars($,s-$.length,s)}if(t===e){n.chars&&n.chars(t);break}}function x(n){s+=n,t=t.substring(n)}function w(){var n=t.match(Co);if(n){var e,r,i={tagName:n[1],attrs:[],start:s};for(x(n[0].length);!(e=t.match(yo))&&(r=t.match(bo)||t.match(mo));)r.start=s,x(r[0].length),r.end=s,i.attrs.push(r);if(e)return i.unarySlash=e[1],x(e[0].length),i.end=s,i}}function k(t){var e=t.tagName,s=t.unarySlash;o&&("p"===r&&Ao(e)&&_(r),u(e)&&r===e&&_(e));for(var c=a(e)||!!s,l=t.attrs.length,d=new Array(l),p=0;p<l;p++){var f=t.attrs[p],g=f[3]||f[4]||f[5]||"",h="a"===e&&"href"===f[1]?n.shouldDecodeNewlinesForHref:n.shouldDecodeNewlines;d[p]={name:f[1],value:zo(g,h)}}c||(i.push({tag:e,lowerCasedTag:e.toLowerCase(),attrs:d,start:t.start,end:t.end}),r=e),n.start&&n.start(e,d,c,t.start,t.end)}function _(t,e,o){var a,u;if(null==e&&(e=s),null==o&&(o=s),t)for(u=t.toLowerCase(),a=i.length-1;a>=0&&i[a].lowerCasedTag!==u;a--);else a=0;if(a>=0){for(var c=i.length-1;c>=a;c--)n.end&&n.end(i[c].tag,e,o);i.length=a,r=a&&i[a-1].tag}else"br"===u?n.start&&n.start(t,[],!0,e,o):"p"===u&&(n.start&&n.start(t,[],!1,e,o),n.end&&n.end(t,e,o))}_()}(t,{warn:jo,expectHTML:n.expectHTML,isUnaryTag:n.isUnaryTag,canBeLeftOpenTag:n.canBeLeftOpenTag,shouldDecodeNewlines:n.shouldDecodeNewlines,shouldDecodeNewlinesForHref:n.shouldDecodeNewlinesForHref,shouldKeepComment:n.comments,outputSourceRange:n.outputSourceRange,start:function(t,o,a,l,d){var p=r&&r.ns||No(t);G&&"svg"===p&&(o=function(t){for(var n=[],e=0;e<t.length;e++){var r=t[e];la.test(r.name)||(r.name=r.name.replace(da,""),n.push(r))}return n}(o));var f,g=ra(t,o,r);p&&(g.ns=p),"style"!==(f=g).tag&&("script"!==f.tag||f.attrsMap.type&&"text/javascript"!==f.attrsMap.type)||it()||(g.forbidden=!0);for(var h=0;h<Uo.length;h++)g=Uo[h](g,n)||g;u||(function(t){null!=zr(t,"v-pre")&&(t.pre=!0)}(g),g.pre&&(u=!0)),Lo(g.tag)&&(s=!0),u?function(t){var n=t.attrsList,e=n.length;if(e)for(var r=t.attrs=new Array(e),i=0;i<e;i++)r[i]={name:n[i].name,value:JSON.stringify(n[i].value)},null!=n[i].start&&(r[i].start=n[i].start,r[i].end=n[i].end);else t.pre||(t.plain=!0)}(g):g.processed||(oa(g),function(t){var n=zr(t,"v-if");if(n)t.if=n,aa(t,{exp:n,block:t});else{null!=zr(t,"v-else")&&(t.else=!0);var e=zr(t,"v-else-if");e&&(t.elseif=e)}}(g),function(t){null!=zr(t,"v-once")&&(t.once=!0)}(g)),e||(e=g),a?c(g):(r=g,i.push(g))},end:function(t,n,e){var o=i[i.length-1];i.length-=1,r=i[i.length-1],c(o)},chars:function(t,n,e){if(r&&(!G||"textarea"!==r.tag||r.attrsMap.placeholder!==t)){var i,c,l,d=r.children;(t=s||t.trim()?"script"===(i=r).tag||"style"===i.tag?t:na(t):d.length?a?"condense"===a&&Jo.test(t)?"":" ":o?" ":"":"")&&(s||"condense"!==a||(t=t.replace(ta," ")),!u&&" "!==t&&(c=function(t,n){var e=n?lo(n):so;if(e.test(t)){for(var r,i,o,a=[],u=[],s=e.lastIndex=0;r=e.exec(t);){(i=r.index)>s&&(u.push(o=t.slice(s,i)),a.push(JSON.stringify(o)));var c=xr(r[1].trim());a.push("_s("+c+")"),u.push({"@binding":c}),s=i+r[0].length}return s<t.length&&(u.push(o=t.slice(s)),a.push(JSON.stringify(o))),{expression:a.join("+"),tokens:u}}}(t,Io))?l={type:2,expression:c.expression,tokens:c.tokens,text:t}:" "===t&&d.length&&" "===d[d.length-1].text||(l={type:3,text:t}),l&&d.push(l))}},comment:function(t,n,e){if(r){var i={type:3,text:t,isComment:!0};r.children.push(i)}}}),e}(t.trim(),n);!1!==n.optimize&&function(t,n){t&&(fa=ma(n.staticKeys||""),ga=n.isReservedTag||P,function t(n){if(n.static=function(t){return 2!==t.type&&(3===t.type||!(!t.pre&&(t.hasBindings||t.if||t.for||A(t.tag)||!ga(t.tag)||function(t){for(;t.parent;){if("template"!==(t=t.parent).tag)return!1;if(t.for)return!0}return!1}(t)||!Object.keys(t).every(fa))))}(n),1===n.type){if(!ga(n.tag)&&"slot"!==n.tag&&null==n.attrsMap["inline-template"])return;for(var e=0,r=n.children.length;e<r;e++){var i=n.children[e];t(i),i.static||(n.static=!1)}if(n.ifConditions)for(var o=1,a=n.ifConditions.length;o<a;o++){var u=n.ifConditions[o].block;t(u),u.static||(n.static=!1)}}}(t),function t(n,e){if(1===n.type){if((n.static||n.once)&&(n.staticInFor=e),n.static&&n.children.length&&(1!==n.children.length||3!==n.children[0].type))return void(n.staticRoot=!0);if(n.staticRoot=!1,n.children)for(var r=0,i=n.children.length;r<i;r++)t(n.children[r],e||!!n.for);if(n.ifConditions)for(var o=1,a=n.ifConditions.length;o<a;o++)t(n.ifConditions[o].block,e)}}(t,!1))}(e,n);var r=Oa(e,n);return{ast:e,render:r.render,staticRenderFns:r.staticRenderFns}},function(t){function n(n,e){var r=Object.create(t),i=[],o=[];if(e)for(var a in e.modules&&(r.modules=(t.modules||[]).concat(e.modules)),e.directives&&(r.directives=S(Object.create(t.directives||null),e.directives)),e)"modules"!==a&&"directives"!==a&&(r[a]=e[a]);r.warn=function(t,n,e){(e?o:i).push(t)};var u=Xa(n.trim(),r);return u.errors=i,u.tips=o,u}return{compile:n,compileToFunctions:Za(n)}})(Aa),Va=(Ya.compile,Ya.compileToFunctions);function Ga(t){return(Ha=Ha||document.createElement("div")).innerHTML=t?'<a href="\n"/>':'<div a="\n"/>',Ha.innerHTML.indexOf(" ")>0}var Qa=!!X&&Ga(!1),Ka=!!X&&Ga(!0),Ja=C((function(t){var n=Ve(t);return n&&n.innerHTML})),tu=ye.prototype.$mount;ye.prototype.$mount=function(t,n){if((t=t&&Ve(t))===document.body||t===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=Ja(r));else{if(!r.nodeType)return this;r=r.innerHTML}else t&&(r=function(t){if(t.outerHTML)return t.outerHTML;var n=document.createElement("div");return n.appendChild(t.cloneNode(!0)),n.innerHTML}(t));if(r){var i=Va(r,{outputSourceRange:!1,shouldDecodeNewlines:Qa,shouldDecodeNewlinesForHref:Ka,delimiters:e.delimiters,comments:e.comments},this),o=i.render,a=i.staticRenderFns;e.render=o,e.staticRenderFns=a}}return tu.call(this,t,n)},ye.compile=Va,t.exports=ye},20629:(t,n,e)=>{"use strict";e.r(n),e.d(n,{Store:()=>l,install:()=>b,mapState:()=>v,mapMutations:()=>$,mapGetters:()=>C,mapActions:()=>y,createNamespacedHelpers:()=>x,default:()=>B});var r="undefined"!=typeof window&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function i(t,n){Object.keys(t).forEach((function(e){return n(t[e],e)}))}var o=function(t,n){this.runtime=n,this._children=Object.create(null),this._rawModule=t;var e=t.state;this.state=("function"==typeof e?e():e)||{}},a={namespaced:{configurable:!0}};a.namespaced.get=function(){return!!this._rawModule.namespaced},o.prototype.addChild=function(t,n){this._children[t]=n},o.prototype.removeChild=function(t){delete this._children[t]},o.prototype.getChild=function(t){return this._children[t]},o.prototype.update=function(t){this._rawModule.namespaced=t.namespaced,t.actions&&(this._rawModule.actions=t.actions),t.mutations&&(this._rawModule.mutations=t.mutations),t.getters&&(this._rawModule.getters=t.getters)},o.prototype.forEachChild=function(t){i(this._children,t)},o.prototype.forEachGetter=function(t){this._rawModule.getters&&i(this._rawModule.getters,t)},o.prototype.forEachAction=function(t){this._rawModule.actions&&i(this._rawModule.actions,t)},o.prototype.forEachMutation=function(t){this._rawModule.mutations&&i(this._rawModule.mutations,t)},Object.defineProperties(o.prototype,a);var u,s=function(t){this.register([],t,!1)};function c(t,n,e){if(n.update(e),e.modules)for(var r in e.modules){if(!n.getChild(r))return;c(t.concat(r),n.getChild(r),e.modules[r])}}s.prototype.get=function(t){return t.reduce((function(t,n){return t.getChild(n)}),this.root)},s.prototype.getNamespace=function(t){var n=this.root;return t.reduce((function(t,e){return t+((n=n.getChild(e)).namespaced?e+"/":"")}),"")},s.prototype.update=function(t){c([],this.root,t)},s.prototype.register=function(t,n,e){var r=this;void 0===e&&(e=!0);var a=new o(n,e);0===t.length?this.root=a:this.get(t.slice(0,-1)).addChild(t[t.length-1],a),n.modules&&i(n.modules,(function(n,i){r.register(t.concat(i),n,e)}))},s.prototype.unregister=function(t){var n=this.get(t.slice(0,-1)),e=t[t.length-1];n.getChild(e).runtime&&n.removeChild(e)};var l=function(t){var n=this;void 0===t&&(t={}),!u&&"undefined"!=typeof window&&window.Vue&&b(window.Vue);var e=t.plugins;void 0===e&&(e=[]);var i=t.strict;void 0===i&&(i=!1);var o=t.state;void 0===o&&(o={}),"function"==typeof o&&(o=o()||{}),this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new s(t),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new u;var a=this,c=this.dispatch,l=this.commit;this.dispatch=function(t,n){return c.call(a,t,n)},this.commit=function(t,n,e){return l.call(a,t,n,e)},this.strict=i,h(this,o,[],this._modules.root),g(this,o),e.forEach((function(t){return t(n)})),u.config.devtools&&function(t){r&&(t._devtoolHook=r,r.emit("vuex:init",t),r.on("vuex:travel-to-state",(function(n){t.replaceState(n)})),t.subscribe((function(t,n){r.emit("vuex:mutation",t,n)})))}(this)},d={state:{configurable:!0}};function p(t,n){return n.indexOf(t)<0&&n.push(t),function(){var e=n.indexOf(t);e>-1&&n.splice(e,1)}}function f(t,n){t._actions=Object.create(null),t._mutations=Object.create(null),t._wrappedGetters=Object.create(null),t._modulesNamespaceMap=Object.create(null);var e=t.state;h(t,e,[],t._modules.root,!0),g(t,e,n)}function g(t,n,e){var r=t._vm;t.getters={};var o=t._wrappedGetters,a={};i(o,(function(n,e){a[e]=function(){return n(t)},Object.defineProperty(t.getters,e,{get:function(){return t._vm[e]},enumerable:!0})}));var s=u.config.silent;u.config.silent=!0,t._vm=new u({data:{$$state:n},computed:a}),u.config.silent=s,t.strict&&function(t){t._vm.$watch((function(){return this._data.$$state}),(function(){}),{deep:!0,sync:!0})}(t),r&&(e&&t._withCommit((function(){r._data.$$state=null})),u.nextTick((function(){return r.$destroy()})))}function h(t,n,e,r,i){var o=!e.length,a=t._modules.getNamespace(e);if(r.namespaced&&(t._modulesNamespaceMap[a]=r),!o&&!i){var s=A(n,e.slice(0,-1)),c=e[e.length-1];t._withCommit((function(){u.set(s,c,r.state)}))}var l=r.context=function(t,n,e){var r=""===n,i={dispatch:r?t.dispatch:function(e,r,i){var o=m(e,r,i),a=o.payload,u=o.options,s=o.type;return u&&u.root||(s=n+s),t.dispatch(s,a)},commit:r?t.commit:function(e,r,i){var o=m(e,r,i),a=o.payload,u=o.options,s=o.type;u&&u.root||(s=n+s),t.commit(s,a,u)}};return Object.defineProperties(i,{getters:{get:r?function(){return t.getters}:function(){return function(t,n){var e={},r=n.length;return Object.keys(t.getters).forEach((function(i){if(i.slice(0,r)===n){var o=i.slice(r);Object.defineProperty(e,o,{get:function(){return t.getters[i]},enumerable:!0})}})),e}(t,n)}},state:{get:function(){return A(t.state,e)}}}),i}(t,a,e);r.forEachMutation((function(n,e){!function(t,n,e,r){(t._mutations[n]||(t._mutations[n]=[])).push((function(n){e.call(t,r.state,n)}))}(t,a+e,n,l)})),r.forEachAction((function(n,e){var r=n.root?e:a+e,i=n.handler||n;!function(t,n,e,r){(t._actions[n]||(t._actions[n]=[])).push((function(n,i){var o,a=e.call(t,{dispatch:r.dispatch,commit:r.commit,getters:r.getters,state:r.state,rootGetters:t.getters,rootState:t.state},n,i);return(o=a)&&"function"==typeof o.then||(a=Promise.resolve(a)),t._devtoolHook?a.catch((function(n){throw t._devtoolHook.emit("vuex:error",n),n})):a}))}(t,r,i,l)})),r.forEachGetter((function(n,e){!function(t,n,e,r){t._wrappedGetters[n]||(t._wrappedGetters[n]=function(t){return e(r.state,r.getters,t.state,t.getters)})}(t,a+e,n,l)})),r.forEachChild((function(r,o){h(t,n,e.concat(o),r,i)}))}function A(t,n){return n.length?n.reduce((function(t,n){return t[n]}),t):t}function m(t,n,e){var r;return null!==(r=t)&&"object"==typeof r&&t.type&&(e=n,n=t,t=t.type),{type:t,payload:n,options:e}}function b(t){u&&t===u||function(t){if(Number(t.version.split(".")[0])>=2)t.mixin({beforeCreate:e});else{var n=t.prototype._init;t.prototype._init=function(t){void 0===t&&(t={}),t.init=t.init?[e].concat(t.init):e,n.call(this,t)}}function e(){var t=this.$options;t.store?this.$store="function"==typeof t.store?t.store():t.store:t.parent&&t.parent.$store&&(this.$store=t.parent.$store)}}(u=t)}d.state.get=function(){return this._vm._data.$$state},d.state.set=function(t){},l.prototype.commit=function(t,n,e){var r=this,i=m(t,n,e),o=i.type,a=i.payload,u=(i.options,{type:o,payload:a}),s=this._mutations[o];s&&(this._withCommit((function(){s.forEach((function(t){t(a)}))})),this._subscribers.forEach((function(t){return t(u,r.state)})))},l.prototype.dispatch=function(t,n){var e=this,r=m(t,n),i=r.type,o=r.payload,a={type:i,payload:o},u=this._actions[i];if(u)return this._actionSubscribers.forEach((function(t){return t(a,e.state)})),u.length>1?Promise.all(u.map((function(t){return t(o)}))):u[0](o)},l.prototype.subscribe=function(t){return p(t,this._subscribers)},l.prototype.subscribeAction=function(t){return p(t,this._actionSubscribers)},l.prototype.watch=function(t,n,e){var r=this;return this._watcherVM.$watch((function(){return t(r.state,r.getters)}),n,e)},l.prototype.replaceState=function(t){var n=this;this._withCommit((function(){n._vm._data.$$state=t}))},l.prototype.registerModule=function(t,n,e){void 0===e&&(e={}),"string"==typeof t&&(t=[t]),this._modules.register(t,n),h(this,this.state,t,this._modules.get(t),e.preserveState),g(this,this.state)},l.prototype.unregisterModule=function(t){var n=this;"string"==typeof t&&(t=[t]),this._modules.unregister(t),this._withCommit((function(){var e=A(n.state,t.slice(0,-1));u.delete(e,t[t.length-1])})),f(this)},l.prototype.hotUpdate=function(t){this._modules.update(t),f(this,!0)},l.prototype._withCommit=function(t){var n=this._committing;this._committing=!0,t(),this._committing=n},Object.defineProperties(l.prototype,d);var v=k((function(t,n){var e={};return w(n).forEach((function(n){var r=n.key,i=n.val;e[r]=function(){var n=this.$store.state,e=this.$store.getters;if(t){var r=_(this.$store,0,t);if(!r)return;n=r.context.state,e=r.context.getters}return"function"==typeof i?i.call(this,n,e):n[i]},e[r].vuex=!0})),e})),$=k((function(t,n){var e={};return w(n).forEach((function(n){var r=n.key,i=n.val;e[r]=function(){for(var n=[],e=arguments.length;e--;)n[e]=arguments[e];var r=this.$store.commit;if(t){var o=_(this.$store,0,t);if(!o)return;r=o.context.commit}return"function"==typeof i?i.apply(this,[r].concat(n)):r.apply(this.$store,[i].concat(n))}})),e})),C=k((function(t,n){var e={};return w(n).forEach((function(n){var r=n.key,i=n.val;i=t+i,e[r]=function(){if(!t||_(this.$store,0,t))return this.$store.getters[i]},e[r].vuex=!0})),e})),y=k((function(t,n){var e={};return w(n).forEach((function(n){var r=n.key,i=n.val;e[r]=function(){for(var n=[],e=arguments.length;e--;)n[e]=arguments[e];var r=this.$store.dispatch;if(t){var o=_(this.$store,0,t);if(!o)return;r=o.context.dispatch}return"function"==typeof i?i.apply(this,[r].concat(n)):r.apply(this.$store,[i].concat(n))}})),e})),x=function(t){return{mapState:v.bind(null,t),mapGetters:C.bind(null,t),mapMutations:$.bind(null,t),mapActions:y.bind(null,t)}};function w(t){return Array.isArray(t)?t.map((function(t){return{key:t,val:t}})):Object.keys(t).map((function(n){return{key:n,val:t[n]}}))}function k(t){return function(n,e){return"string"!=typeof n?(e=n,n=""):"/"!==n.charAt(n.length-1)&&(n+="/"),t(n,e)}}function _(t,n,e){return t._modulesNamespaceMap[e]}const B={Store:l,install:b,version:"2.5.0",mapState:v,mapMutations:$,mapGetters:C,mapActions:y,createNamespacedHelpers:x}},73609:t=>{"use strict";t.exports=window.jQuery},76608:()=>{}},n={};function e(r){var i=n[r];if(void 0!==i)return i.exports;var o=n[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}e.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},e.d=(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var r=n.getElementsByTagName("script");r.length&&(t=r[r.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),(()=>{"use strict";var t=a(e(72100)),n=a(e(26133)),r=a(e(17701)),i=a(e(95504)),o=a(e(60405));function a(t){return t&&t.__esModule?t:{default:t}}t.default.mixin(o.default),new t.default({router:i.default,store:r.default,el:"#stock-app",template:"<app />",components:{app:n.default},beforeMount:function(){this.$store.dispatch("getTranslations")}})})(),window.stock={}})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvc3RvY2svbWl4aW5zL3Byb2R1Y3QtZGVzYy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvc3RvY2svbWl4aW5zL3RyYW5zbGF0ZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvc3RvY2svcm91dGVyL2luZGV4LmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9zdG9yZS9hY3Rpb25zLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9zdG9yZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvc3RvY2svc3RvcmUvbXV0YXRpb24tdHlwZXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3N0b2NrL3N0b3JlL211dGF0aW9ucy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvdXRpbHMvZXZlbnQtYnVzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC91dGlscy9ncm93bC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vanMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvYXBwLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vanMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvaGVhZGVyL2JyZWFkY3J1bWIudnVlIiwid2VicGFjazovL1tuYW1lXS9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9oZWFkZXIvZmlsdGVycy52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL2hlYWRlci9maWx0ZXJzL2ZpbHRlci1jb21wb25lbnQudnVlIiwid2VicGFjazovL1tuYW1lXS9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9oZWFkZXIvZmlsdGVycy9sb3ctZmlsdGVyLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vanMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvaGVhZGVyL3NlYXJjaC52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL2hlYWRlci9zdG9jay1oZWFkZXIudnVlIiwid2VicGFjazovL1tuYW1lXS9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9oZWFkZXIvdGFicy52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL21vdmVtZW50cy9pbmRleC52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL21vdmVtZW50cy9tb3ZlbWVudC1saW5lLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vanMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvb3ZlcnZpZXcvaW5kZXgudnVlIiwid2VicGFjazovL1tuYW1lXS9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9vdmVydmlldy9wcm9kdWN0LWxpbmUudnVlIiwid2VicGFjazovL1tuYW1lXS9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9vdmVydmlldy9wcm9kdWN0cy1hY3Rpb25zLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vanMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvb3ZlcnZpZXcvcHJvZHVjdHMtdGFibGUudnVlIiwid2VicGFjazovL1tuYW1lXS9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9vdmVydmlldy9zcGlubmVyLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vanMvYXBwL3dpZGdldHMvcHMtYWxlcnQudnVlIiwid2VicGFjazovL1tuYW1lXS9qcy9hcHAvd2lkZ2V0cy9wcy1idXR0b24udnVlIiwid2VicGFjazovL1tuYW1lXS9qcy9hcHAvd2lkZ2V0cy9wcy1jaGVja2JveC52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL2FwcC93aWRnZXRzL3BzLWRhdGVwaWNrZXIudnVlIiwid2VicGFjazovL1tuYW1lXS9qcy9hcHAvd2lkZ2V0cy9wcy1tZWRpYS52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL2FwcC93aWRnZXRzL3BzLW51bWJlci52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL2FwcC93aWRnZXRzL3BzLXBhZ2luYXRpb24udnVlIiwid2VicGFjazovL1tuYW1lXS9qcy9hcHAvd2lkZ2V0cy9wcy1yYWRpby52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL2FwcC93aWRnZXRzL3BzLXNlbGVjdC52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL2FwcC93aWRnZXRzL3BzLXRhYmxlL3BzLXNvcnQudnVlIiwid2VicGFjazovL1tuYW1lXS9qcy9hcHAvd2lkZ2V0cy9wcy10YWdzLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vanMvYXBwL3dpZGdldHMvcHMtdHJlZS9wcy10cmVlLWl0ZW0udnVlIiwid2VicGFjazovL1tuYW1lXS9qcy9hcHAvd2lkZ2V0cy9wcy10cmVlL3BzLXRyZWUudnVlIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvbnVtYmVyL2lzLW5hbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vbnVtYmVyL2lzLW5hbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RlZmluZWQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oYXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbGlicmFyeS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1hYnNvbHV0ZS1pbmRleC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdWlkLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9qcXVlcnktdWktZGlzdC9qcXVlcnktdWkuY3NzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL2FwcC52dWU/ZDRkOCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9vdmVydmlldy9zcGlubmVyLnZ1ZT9mMjk3Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLWRhdGVwaWNrZXIudnVlP2UyZDQiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtbG9hZGVyLnZ1ZT9kM2QzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLW1lZGlhLnZ1ZT9kOWUwIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLXNlbGVjdC52dWU/NjQ1ZiIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9nZXRVcmwuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2pxdWVyeS11aS1kaXN0L2ltYWdlcy91aS1pY29uc180NDQ0NDRfMjU2eDI0MC5wbmciLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2pxdWVyeS11aS1kaXN0L2ltYWdlcy91aS1pY29uc181NTU1NTVfMjU2eDI0MC5wbmciLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2pxdWVyeS11aS1kaXN0L2ltYWdlcy91aS1pY29uc183Nzc2MjBfMjU2eDI0MC5wbmciLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2pxdWVyeS11aS1kaXN0L2ltYWdlcy91aS1pY29uc183Nzc3NzdfMjU2eDI0MC5wbmciLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2pxdWVyeS11aS1kaXN0L2ltYWdlcy91aS1pY29uc19jYzAwMDBfMjU2eDI0MC5wbmciLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2pxdWVyeS11aS1kaXN0L2ltYWdlcy91aS1pY29uc19mZmZmZmZfMjU2eDI0MC5wbmciLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9sb2Rhc2guanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvYXBwLnZ1ZT9jZWM2Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL2FwcC52dWU/NDFhZiIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9hcHAudnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL2hlYWRlci9icmVhZGNydW1iLnZ1ZT81OTAyIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL2hlYWRlci9icmVhZGNydW1iLnZ1ZT9jNjgxIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL2hlYWRlci9icmVhZGNydW1iLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9oZWFkZXIvZmlsdGVycy52dWU/NjliMiIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9oZWFkZXIvZmlsdGVycy52dWU/NmI3YyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9oZWFkZXIvZmlsdGVycy52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvaGVhZGVyL2ZpbHRlcnMvZmlsdGVyLWNvbXBvbmVudC52dWU/ZGI0NyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9oZWFkZXIvZmlsdGVycy9maWx0ZXItY29tcG9uZW50LnZ1ZT83NzJhIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL2hlYWRlci9maWx0ZXJzL2ZpbHRlci1jb21wb25lbnQudnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL2hlYWRlci9maWx0ZXJzL2xvdy1maWx0ZXIudnVlP2ExOTEiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvaGVhZGVyL2ZpbHRlcnMvbG93LWZpbHRlci52dWU/YzQ5YyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9oZWFkZXIvZmlsdGVycy9sb3ctZmlsdGVyLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9oZWFkZXIvc2VhcmNoLnZ1ZT9mNDEzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL2hlYWRlci9zZWFyY2gudnVlPzk3ZjAiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvaGVhZGVyL3NlYXJjaC52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvaGVhZGVyL3N0b2NrLWhlYWRlci52dWU/NDQ0YSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9oZWFkZXIvc3RvY2staGVhZGVyLnZ1ZT80MWNjIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL2hlYWRlci9zdG9jay1oZWFkZXIudnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL2hlYWRlci90YWJzLnZ1ZT8xMzM5Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL2hlYWRlci90YWJzLnZ1ZT9kYWQzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL2hlYWRlci90YWJzLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9tb3ZlbWVudHMvaW5kZXgudnVlPzFlZjgiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvbW92ZW1lbnRzL2luZGV4LnZ1ZT9kMjI2Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL21vdmVtZW50cy9pbmRleC52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvbW92ZW1lbnRzL21vdmVtZW50LWxpbmUudnVlP2U0MTgiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvbW92ZW1lbnRzL21vdmVtZW50LWxpbmUudnVlPzg4YmYiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvbW92ZW1lbnRzL21vdmVtZW50LWxpbmUudnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL292ZXJ2aWV3L2luZGV4LnZ1ZT9iODliIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL292ZXJ2aWV3L2luZGV4LnZ1ZT8yYmZjIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL292ZXJ2aWV3L2luZGV4LnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9vdmVydmlldy9wcm9kdWN0LWxpbmUudnVlPzViZGEiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvb3ZlcnZpZXcvcHJvZHVjdC1saW5lLnZ1ZT8yMjk1Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL292ZXJ2aWV3L3Byb2R1Y3QtbGluZS52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvb3ZlcnZpZXcvcHJvZHVjdHMtYWN0aW9ucy52dWU/NWM4OCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9vdmVydmlldy9wcm9kdWN0cy1hY3Rpb25zLnZ1ZT82ZTJlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL292ZXJ2aWV3L3Byb2R1Y3RzLWFjdGlvbnMudnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL292ZXJ2aWV3L3Byb2R1Y3RzLXRhYmxlLnZ1ZT85NGU3Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL292ZXJ2aWV3L3Byb2R1Y3RzLXRhYmxlLnZ1ZT80NTU3Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL292ZXJ2aWV3L3Byb2R1Y3RzLXRhYmxlLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9vdmVydmlldy9zcGlubmVyLnZ1ZT82N2ExIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL292ZXJ2aWV3L3NwaW5uZXIudnVlP2YzNmYiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvb3ZlcnZpZXcvc3Bpbm5lci52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtYWxlcnQudnVlPzdlMDIiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtYWxlcnQudnVlPzgyZTAiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtYWxlcnQudnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLWJ1dHRvbi52dWU/YWUyMSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy1idXR0b24udnVlPzI1YzMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtYnV0dG9uLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy1jaGVja2JveC52dWU/NGU3NiIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy1jaGVja2JveC52dWU/NDMyYSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy1jaGVja2JveC52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtZGF0ZXBpY2tlci52dWU/MzM5ZiIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy1kYXRlcGlja2VyLnZ1ZT9iYWRmIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLWRhdGVwaWNrZXIudnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLWxvYWRlci52dWU/OTU2NSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy1sb2FkZXIudnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLW1lZGlhLnZ1ZT9lMGU4Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLW1lZGlhLnZ1ZT84ZDk5Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLW1lZGlhLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy1udW1iZXIudnVlPzU0NTMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtbnVtYmVyLnZ1ZT80NDM1Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLW51bWJlci52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtcGFnaW5hdGlvbi52dWU/ZDQ2ZiIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy1wYWdpbmF0aW9uLnZ1ZT85Yjc4Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLXBhZ2luYXRpb24udnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLXJhZGlvLnZ1ZT82NWM4Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLXJhZGlvLnZ1ZT83YTQ0Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLXJhZGlvLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy1zZWxlY3QudnVlPzI5OGEiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtc2VsZWN0LnZ1ZT9kMDhlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLXNlbGVjdC52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtdGFibGUvcHMtc29ydC52dWU/MWU1MyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy10YWJsZS9wcy1zb3J0LnZ1ZT82ODQ3Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLXRhYmxlL3BzLXNvcnQudnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLXRhYmxlL3BzLXRhYmxlLnZ1ZT83YzQ4Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLXRhYmxlL3BzLXRhYmxlLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy10YWdzLnZ1ZT82YmIxIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLXRhZ3MudnVlPzMyNmUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtdGFncy52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtdHJlZS9wcy10cmVlLWl0ZW0udnVlPzkyMWIiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtdHJlZS9wcy10cmVlLWl0ZW0udnVlP2MyY2UiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtdHJlZS9wcy10cmVlLWl0ZW0udnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC93aWRnZXRzL3BzLXRyZWUvcHMtdHJlZS52dWU/NWE2YiIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy10cmVlL3BzLXRyZWUudnVlPzFmYzgiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtdHJlZS9wcy10cmVlLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy92dWUtcmVzb3VyY2UvZGlzdC92dWUtcmVzb3VyY2UuZXNtLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy92dWUtcm91dGVyL2Rpc3QvdnVlLXJvdXRlci5lc20uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvYXBwLnZ1ZT9iZjMzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL292ZXJ2aWV3L3NwaW5uZXIudnVlP2NiODEiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtZGF0ZXBpY2tlci52dWU/M2NkMCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvd2lkZ2V0cy9wcy1sb2FkZXIudnVlPzUzNjgiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtbWVkaWEudnVlP2M5ODEiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3dpZGdldHMvcHMtc2VsZWN0LnZ1ZT85ZWM3Iiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9saXN0VG9TdHlsZXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLmNvbW1vbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLmNvbW1vbi5wcm9kLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy92dWV4L2Rpc3QvdnVleC5lc20uanMiLCJ3ZWJwYWNrOi8vW25hbWVdL2V4dGVybmFsIFwialF1ZXJ5XCIiLCJ3ZWJwYWNrOi8vW25hbWVdL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9bbmFtZV0vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL3J1bnRpbWUvbm9kZSBtb2R1bGUgZGVjb3JhdG9yIiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvcGFnZXMvc3RvY2svaW5kZXguanMiXSwibmFtZXMiOlsiY29tcHV0ZWQiLCJ0aHVtYm5haWwiLCJ0aGlzIiwicHJvZHVjdCIsImNvbWJpbmF0aW9uX3RodW1ibmFpbCIsInByb2R1Y3RfdGh1bWJuYWlsIiwiY29tYmluYXRpb25OYW1lIiwiY29tYmluYXRpb25zIiwiY29tYmluYXRpb25fbmFtZSIsInNwbGl0IiwiYXR0cmlidXRlcyIsImF0dHJpYnV0ZV9uYW1lIiwiYXR0ciIsImZvckVhY2giLCJhdHRyaWJ1dGUiLCJpbmRleCIsInZhbHVlIiwidHJpbSIsInNsaWNlIiwibGVuZ3RoIiwiaGFzQ29tYmluYXRpb24iLCJjb21iaW5hdGlvbl9pZCIsIm1ldGhvZHMiLCJ0cmFucyIsImtleSIsIiRzdG9yZSIsInN0YXRlIiwidHJhbnNsYXRpb25zIiwiaGFzSW5kZXgiLCJWdWUiLCJ1c2UiLCJWdWVSb3V0ZXIiLCJtb2RlIiwiYmFzZSIsImV4ZWMiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJkYXRhIiwiYmFzZVVybCIsInJvdXRlcyIsInBhdGgiLCJuYW1lIiwiY29tcG9uZW50IiwiT3ZlcnZpZXciLCJNb3ZlbWVudHMiLCJ0eXBlcyIsIlZ1ZVJlc291cmNlIiwiZ2V0U3RvY2siLCJwYXlsb2FkIiwiY29tbWl0IiwidXJsIiwiYXBpU3RvY2tVcmwiLCJodHRwIiwiZ2V0IiwicGFyYW1zIiwib3JkZXIiLCJwYWdlX3NpemUiLCJwYWdlX2luZGV4Iiwia2V5d29yZHMiLCJzdXBwbGllcl9pZCIsInN1cHBsaWVycyIsImNhdGVnb3J5X2lkIiwiY2F0ZWdvcmllcyIsImFjdGl2ZSIsImxvd19zdG9jayIsInRoZW4iLCJyZXNwb25zZSIsIkxPQURJTkdfU1RBVEUiLCJTRVRfVE9UQUxfUEFHRVMiLCJoZWFkZXJzIiwiQUREX1BST0RVQ1RTIiwiYm9keSIsImVycm9yIiwic2hvd0dyb3dsIiwic3RhdHVzVGV4dCIsImdldFN1cHBsaWVycyIsInN1cHBsaWVyc1VybCIsIlNFVF9TVVBQTElFUlMiLCJnZXRDYXRlZ29yaWVzIiwiY2F0ZWdvcmllc1VybCIsIlNFVF9DQVRFR09SSUVTIiwiZ2V0TW92ZW1lbnRzIiwiYXBpTW92ZW1lbnRzVXJsIiwiaWRfc3RvY2tfbXZ0X3JlYXNvbiIsImlkX2VtcGxveWVlIiwiZGF0ZV9hZGQiLCJTRVRfTU9WRU1FTlRTIiwiZ2V0VHJhbnNsYXRpb25zIiwidHJhbnNsYXRpb25VcmwiLCJTRVRfVFJBTlNMQVRJT05TIiwiQVBQX0lTX1JFQURZIiwiZ2V0RW1wbG95ZWVzIiwiZW1wbG95ZWVzVXJsIiwiU0VUX0VNUExPWUVFU19MSVNUIiwiZ2V0TW92ZW1lbnRzVHlwZXMiLCJtb3ZlbWVudHNUeXBlc1VybCIsIlNFVF9NT1ZFTUVOVFNfVFlQRVMiLCJ1cGRhdGVPcmRlciIsIlVQREFURV9PUkRFUiIsInVwZGF0ZVBhZ2VJbmRleCIsInBhZ2VJbmRleCIsIlNFVF9QQUdFX0lOREVYIiwidXBkYXRlS2V5d29yZHMiLCJVUERBVEVfS0VZV09SRFMiLCJpc0xvYWRpbmciLCJ1cGRhdGVQcm9kdWN0UXR5IiwiVVBEQVRFX1BST0RVQ1RfUVRZIiwidXBkYXRlUXR5QnlQcm9kdWN0SWQiLCJkZWx0YSIsInBvc3QiLCJyZXMiLCJVUERBVEVfUFJPRFVDVCIsIkV2ZW50QnVzIiwiJGVtaXQiLCJ1cGRhdGVRdHlCeVByb2R1Y3RzSWQiLCJlZGl0QnVsa1VybCIsInByb2R1Y3RzUXR5IiwicHJvZHVjdHNUb1VwZGF0ZSIsIlVQREFURV9QUk9EVUNUU19RVFkiLCJ1cGRhdGVCdWxrRWRpdFF0eSIsIlVQREFURV9CVUxLX0VESVRfUVRZIiwiYWRkUHJvZHVjdFRvVXBkYXRlIiwiQUREX1BST0RVQ1RfVE9fVVBEQVRFIiwicmVtb3ZlUHJvZHVjdFRvVXBkYXRlIiwiUkVNT1ZFX1BST0RVQ1RfVE9fVVBEQVRFIiwiYWRkU2VsZWN0ZWRQcm9kdWN0IiwiQUREX1NFTEVDVEVEX1BST0RVQ1QiLCJyZW1vdmVTZWxlY3RlZFByb2R1Y3QiLCJSRU1PVkVfU0VMRUNURURfUFJPRFVDVCIsImFjdGlvbnMiLCJWdWV4IiwiZ2V0dGVycyIsInJvb3RTdGF0ZSIsInN1cHBsaWVyIiwiaWQiLCJjb252ZXJ0IiwiY2F0ZWdvcnkiLCJjaGlsZHJlbiIsIl8iLCJ2YWx1ZXMiLCJjYXRlZ29yeUxpc3QiLCJwdXNoIiwiaWRfcGFyZW50IiwiaWRfY2F0ZWdvcnkiLCJzZWxlY3RlZFByb2R1Y3RzTG5nIiwic2VsZWN0ZWRQcm9kdWN0cyIsIlN0b3JlIiwidG90YWxQYWdlcyIsInByb2R1Y3RzUGVyUGFnZSIsInByb2R1Y3RzIiwiaGFzUXR5IiwibW92ZW1lbnRzIiwiZW1wbG95ZWVzIiwibW92ZW1lbnRzVHlwZXMiLCJpc1JlYWR5IiwiYnVsa0VkaXRRdHkiLCJtdXRhdGlvbnMiLCJOdW1iZXIiLCJ0cmVlIiwidCIsInRyYW5zbGF0aW9uX2lkIiwicXR5IiwiaW5mbyIsImVkaXRfYnVsa191cmwiLCJ1cGRhdGVkUHJvZHVjdCIsImZpbmRJbmRleCIsInByb2R1Y3RfaWQiLCJ1cGRhdGVkSW5kZXgiLCJzcGxpY2UiLCJ1cGRhdGVkUHJvZHVjdHMiLCJwcm9kdWN0VG9VcGRhdGUiLCJmaW5kIiwidHlwZSIsIm1lc3NhZ2UiLCJkdXJhdGlvblRpbWUiLCJkdXJhdGlvbiIsInVuZGVmaW5lZCIsIiQiLCJncm93bCIsInRpdGxlIiwic2l6ZSIsImZpbHRlcnMiLCJkaXNhYmxlZCIsInRhZ3MiLCJzaG93QWxlcnQiLCJhbGVydFR5cGUiLCJidWxrRWRpdGlvbiIsImlzRm9jdXNlZCIsImRhbmdlciIsImlzQWN0aXZlIiwiaXNFbmFibGVkIiwiY2hlY2tlZCIsIm11bHRpUGFnZXNUb0Rpc3BsYXkiLCJtdWx0aVBhZ2VzQWN0aXZhdGlvbkxpbWl0Iiwic29ydERpcmVjdGlvbiIsIm9wZW4iLCJjdXJyZW50IiwibW9kdWxlIiwiZXhwb3J0cyIsIl9fZXNNb2R1bGUiLCJvYmoiLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9hc3NpZ24yIiwidGFyZ2V0IiwiaSIsImFyZ3VtZW50cyIsInNvdXJjZSIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIiRPYmplY3QiLCJpdCIsImRlc2MiLCJkZWZpbmVQcm9wZXJ0eSIsIlR5cGVFcnJvciIsImlzT2JqZWN0IiwidG9JT2JqZWN0IiwidG9MZW5ndGgiLCJ0b0Fic29sdXRlSW5kZXgiLCJJU19JTkNMVURFUyIsIiR0aGlzIiwiZWwiLCJmcm9tSW5kZXgiLCJPIiwidG9TdHJpbmciLCJjb3JlIiwidmVyc2lvbiIsIl9fZSIsImFGdW5jdGlvbiIsImZuIiwidGhhdCIsImEiLCJiIiwiYyIsImFwcGx5IiwiZG9jdW1lbnQiLCJpcyIsImNyZWF0ZUVsZW1lbnQiLCJnbG9iYWwiLCJjdHgiLCJoaWRlIiwiaGFzIiwiJGV4cG9ydCIsIm93biIsIm91dCIsIklTX0ZPUkNFRCIsIkYiLCJJU19HTE9CQUwiLCJHIiwiSVNfU1RBVElDIiwiUyIsIklTX1BST1RPIiwiUCIsIklTX0JJTkQiLCJCIiwiSVNfV1JBUCIsIlciLCJleHBQcm90byIsIkMiLCJGdW5jdGlvbiIsInZpcnR1YWwiLCJSIiwiVSIsImUiLCJNYXRoIiwic2VsZiIsIl9fZyIsImRQIiwiY3JlYXRlRGVzYyIsIm9iamVjdCIsImYiLCJjb2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIkRFU0NSSVBUT1JTIiwiZ2V0S2V5cyIsImdPUFMiLCJwSUUiLCJ0b09iamVjdCIsIklPYmplY3QiLCIkYXNzaWduIiwiYXNzaWduIiwiQSIsIlN5bWJvbCIsIksiLCJrIiwia2V5cyIsImpvaW4iLCJUIiwiYUxlbiIsImdldFN5bWJvbHMiLCJpc0VudW0iLCJjb25jYXQiLCJqIiwiYW5PYmplY3QiLCJJRThfRE9NX0RFRklORSIsInRvUHJpbWl0aXZlIiwiQXR0cmlidXRlcyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImFycmF5SW5kZXhPZiIsIklFX1BST1RPIiwibmFtZXMiLCJyZXN1bHQiLCIka2V5cyIsImVudW1CdWdLZXlzIiwiYml0bWFwIiwic2hhcmVkIiwidWlkIiwiU0hBUkVEIiwic3RvcmUiLCJjb3B5cmlnaHQiLCJ0b0ludGVnZXIiLCJtYXgiLCJtaW4iLCJjZWlsIiwiZmxvb3IiLCJpc05hTiIsImRlZmluZWQiLCJ2YWwiLCJ2YWx1ZU9mIiwicHgiLCJyYW5kb20iLCJudW1iZXIiLCJfX19DU1NfTE9BREVSX0VYUE9SVF9fXyIsIl9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzBfX18iLCJfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fIiwiX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMl9fXyIsIl9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzNfX18iLCJfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF80X19fIiwiX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNV9fXyIsImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJsaXN0IiwibWFwIiwiaXRlbSIsImNvbnRlbnQiLCJtb2R1bGVzIiwibWVkaWFRdWVyeSIsImRlZHVwZSIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJfaSIsIl9hcnJheUxpa2VUb0FycmF5IiwiYXJyIiwibGVuIiwiYXJyMiIsIkFycmF5IiwiX2l0ZW0iLCJpc0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiaXRlcmF0b3IiLCJfYXJyIiwiX24iLCJfZCIsIl9lIiwiX3MiLCJuZXh0IiwiZG9uZSIsImVyciIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIm8iLCJtaW5MZW4iLCJuIiwiY29uc3RydWN0b3IiLCJmcm9tIiwidGVzdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJjc3NNYXBwaW5nIiwiYnRvYSIsImJhc2U2NCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsInNvdXJjZU1hcHBpbmciLCJzb3VyY2VVUkxzIiwic291cmNlcyIsInNvdXJjZVJvb3QiLCJvcHRpb25zIiwiaGFzaCIsIm5lZWRRdW90ZXMiLCJyZXBsYWNlIiwiRlVOQ19FUlJPUl9URVhUIiwiSEFTSF9VTkRFRklORUQiLCJQTEFDRUhPTERFUiIsIldSQVBfUEFSVElBTF9GTEFHIiwiV1JBUF9BUllfRkxBRyIsIklORklOSVRZIiwiTUFYX1NBRkVfSU5URUdFUiIsIk5BTiIsIk1BWF9BUlJBWV9MRU5HVEgiLCJ3cmFwRmxhZ3MiLCJhcmdzVGFnIiwiYXJyYXlUYWciLCJib29sVGFnIiwiZGF0ZVRhZyIsImVycm9yVGFnIiwiZnVuY1RhZyIsImdlblRhZyIsIm1hcFRhZyIsIm51bWJlclRhZyIsIm9iamVjdFRhZyIsInByb21pc2VUYWciLCJyZWdleHBUYWciLCJzZXRUYWciLCJzdHJpbmdUYWciLCJzeW1ib2xUYWciLCJ3ZWFrTWFwVGFnIiwiYXJyYXlCdWZmZXJUYWciLCJkYXRhVmlld1RhZyIsImZsb2F0MzJUYWciLCJmbG9hdDY0VGFnIiwiaW50OFRhZyIsImludDE2VGFnIiwiaW50MzJUYWciLCJ1aW50OFRhZyIsInVpbnQ4Q2xhbXBlZFRhZyIsInVpbnQxNlRhZyIsInVpbnQzMlRhZyIsInJlRW1wdHlTdHJpbmdMZWFkaW5nIiwicmVFbXB0eVN0cmluZ01pZGRsZSIsInJlRW1wdHlTdHJpbmdUcmFpbGluZyIsInJlRXNjYXBlZEh0bWwiLCJyZVVuZXNjYXBlZEh0bWwiLCJyZUhhc0VzY2FwZWRIdG1sIiwiUmVnRXhwIiwicmVIYXNVbmVzY2FwZWRIdG1sIiwicmVFc2NhcGUiLCJyZUV2YWx1YXRlIiwicmVJbnRlcnBvbGF0ZSIsInJlSXNEZWVwUHJvcCIsInJlSXNQbGFpblByb3AiLCJyZVByb3BOYW1lIiwicmVSZWdFeHBDaGFyIiwicmVIYXNSZWdFeHBDaGFyIiwicmVUcmltU3RhcnQiLCJyZVdoaXRlc3BhY2UiLCJyZVdyYXBDb21tZW50IiwicmVXcmFwRGV0YWlscyIsInJlU3BsaXREZXRhaWxzIiwicmVBc2NpaVdvcmQiLCJyZUZvcmJpZGRlbklkZW50aWZpZXJDaGFycyIsInJlRXNjYXBlQ2hhciIsInJlRXNUZW1wbGF0ZSIsInJlRmxhZ3MiLCJyZUlzQmFkSGV4IiwicmVJc0JpbmFyeSIsInJlSXNIb3N0Q3RvciIsInJlSXNPY3RhbCIsInJlSXNVaW50IiwicmVMYXRpbiIsInJlTm9NYXRjaCIsInJlVW5lc2NhcGVkU3RyaW5nIiwicnNDb21ib1JhbmdlIiwicnNDb21ib01hcmtzUmFuZ2UiLCJyc0xvd2VyUmFuZ2UiLCJyc1VwcGVyUmFuZ2UiLCJyc0JyZWFrUmFuZ2UiLCJyc01hdGhPcFJhbmdlIiwicnNCcmVhayIsInJzQ29tYm8iLCJyc0RpZ2l0cyIsInJzTG93ZXIiLCJyc01pc2MiLCJyc0ZpdHoiLCJyc05vbkFzdHJhbCIsInJzUmVnaW9uYWwiLCJyc1N1cnJQYWlyIiwicnNVcHBlciIsInJzTWlzY0xvd2VyIiwicnNNaXNjVXBwZXIiLCJyc09wdENvbnRyTG93ZXIiLCJyc09wdENvbnRyVXBwZXIiLCJyZU9wdE1vZCIsInJzTW9kaWZpZXIiLCJyc09wdFZhciIsInJzU2VxIiwicnNFbW9qaSIsInJzU3ltYm9sIiwicmVBcG9zIiwicmVDb21ib01hcmsiLCJyZVVuaWNvZGUiLCJyZVVuaWNvZGVXb3JkIiwicmVIYXNVbmljb2RlIiwicmVIYXNVbmljb2RlV29yZCIsImNvbnRleHRQcm9wcyIsInRlbXBsYXRlQ291bnRlciIsInR5cGVkQXJyYXlUYWdzIiwiY2xvbmVhYmxlVGFncyIsInN0cmluZ0VzY2FwZXMiLCJmcmVlUGFyc2VGbG9hdCIsInBhcnNlRmxvYXQiLCJmcmVlUGFyc2VJbnQiLCJwYXJzZUludCIsImZyZWVHbG9iYWwiLCJnIiwiZnJlZVNlbGYiLCJyb290IiwiZnJlZUV4cG9ydHMiLCJub2RlVHlwZSIsImZyZWVNb2R1bGUiLCJtb2R1bGVFeHBvcnRzIiwiZnJlZVByb2Nlc3MiLCJwcm9jZXNzIiwibm9kZVV0aWwiLCJyZXF1aXJlIiwiYmluZGluZyIsIm5vZGVJc0FycmF5QnVmZmVyIiwiaXNBcnJheUJ1ZmZlciIsIm5vZGVJc0RhdGUiLCJpc0RhdGUiLCJub2RlSXNNYXAiLCJpc01hcCIsIm5vZGVJc1JlZ0V4cCIsImlzUmVnRXhwIiwibm9kZUlzU2V0IiwiaXNTZXQiLCJub2RlSXNUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5IiwiZnVuYyIsInRoaXNBcmciLCJhcmdzIiwiYXJyYXlBZ2dyZWdhdG9yIiwiYXJyYXkiLCJzZXR0ZXIiLCJpdGVyYXRlZSIsImFjY3VtdWxhdG9yIiwiYXJyYXlFYWNoIiwiYXJyYXlFYWNoUmlnaHQiLCJhcnJheUV2ZXJ5IiwicHJlZGljYXRlIiwiYXJyYXlGaWx0ZXIiLCJyZXNJbmRleCIsImFycmF5SW5jbHVkZXMiLCJiYXNlSW5kZXhPZiIsImFycmF5SW5jbHVkZXNXaXRoIiwiY29tcGFyYXRvciIsImFycmF5TWFwIiwiYXJyYXlQdXNoIiwib2Zmc2V0IiwiYXJyYXlSZWR1Y2UiLCJpbml0QWNjdW0iLCJhcnJheVJlZHVjZVJpZ2h0IiwiYXJyYXlTb21lIiwiYXNjaWlTaXplIiwiYmFzZVByb3BlcnR5IiwiYmFzZUZpbmRLZXkiLCJjb2xsZWN0aW9uIiwiZWFjaEZ1bmMiLCJiYXNlRmluZEluZGV4IiwiZnJvbVJpZ2h0Iiwic3RyaWN0SW5kZXhPZiIsImJhc2VJc05hTiIsImJhc2VJbmRleE9mV2l0aCIsImJhc2VNZWFuIiwiYmFzZVN1bSIsImJhc2VQcm9wZXJ0eU9mIiwiYmFzZVJlZHVjZSIsImJhc2VUaW1lcyIsImJhc2VUcmltIiwic3RyaW5nIiwidHJpbW1lZEVuZEluZGV4IiwiYmFzZVVuYXJ5IiwiYmFzZVZhbHVlcyIsInByb3BzIiwiY2FjaGVIYXMiLCJjYWNoZSIsImNoYXJzU3RhcnRJbmRleCIsInN0clN5bWJvbHMiLCJjaHJTeW1ib2xzIiwiY2hhcnNFbmRJbmRleCIsImNvdW50SG9sZGVycyIsInBsYWNlaG9sZGVyIiwiZGVidXJyTGV0dGVyIiwiZXNjYXBlSHRtbENoYXIiLCJlc2NhcGVTdHJpbmdDaGFyIiwiY2hyIiwiaGFzVW5pY29kZSIsIm1hcFRvQXJyYXkiLCJvdmVyQXJnIiwidHJhbnNmb3JtIiwiYXJnIiwicmVwbGFjZUhvbGRlcnMiLCJzZXRUb0FycmF5Iiwic2V0Iiwic2V0VG9QYWlycyIsInN0cmluZ1NpemUiLCJsYXN0SW5kZXgiLCJ1bmljb2RlU2l6ZSIsInN0cmluZ1RvQXJyYXkiLCJtYXRjaCIsInVuaWNvZGVUb0FycmF5IiwiYXNjaWlUb0FycmF5IiwiY2hhckF0IiwidW5lc2NhcGVIdG1sQ2hhciIsInJ1bkluQ29udGV4dCIsImNvbnRleHQiLCJkZWZhdWx0cyIsInBpY2siLCJEYXRlIiwiRXJyb3IiLCJTdHJpbmciLCJhcnJheVByb3RvIiwiZnVuY1Byb3RvIiwib2JqZWN0UHJvdG8iLCJjb3JlSnNEYXRhIiwiZnVuY1RvU3RyaW5nIiwiaWRDb3VudGVyIiwibWFza1NyY0tleSIsIm5hdGl2ZU9iamVjdFRvU3RyaW5nIiwib2JqZWN0Q3RvclN0cmluZyIsIm9sZERhc2giLCJyZUlzTmF0aXZlIiwiQnVmZmVyIiwiVWludDhBcnJheSIsImFsbG9jVW5zYWZlIiwiZ2V0UHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJvYmplY3RDcmVhdGUiLCJjcmVhdGUiLCJzcHJlYWRhYmxlU3ltYm9sIiwiaXNDb25jYXRTcHJlYWRhYmxlIiwic3ltSXRlcmF0b3IiLCJzeW1Ub1N0cmluZ1RhZyIsInRvU3RyaW5nVGFnIiwiZ2V0TmF0aXZlIiwiY3R4Q2xlYXJUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiY3R4Tm93Iiwibm93IiwiY3R4U2V0VGltZW91dCIsInNldFRpbWVvdXQiLCJuYXRpdmVDZWlsIiwibmF0aXZlRmxvb3IiLCJuYXRpdmVHZXRTeW1ib2xzIiwibmF0aXZlSXNCdWZmZXIiLCJpc0J1ZmZlciIsIm5hdGl2ZUlzRmluaXRlIiwiaXNGaW5pdGUiLCJuYXRpdmVKb2luIiwibmF0aXZlS2V5cyIsIm5hdGl2ZU1heCIsIm5hdGl2ZU1pbiIsIm5hdGl2ZU5vdyIsIm5hdGl2ZVBhcnNlSW50IiwibmF0aXZlUmFuZG9tIiwibmF0aXZlUmV2ZXJzZSIsInJldmVyc2UiLCJEYXRhVmlldyIsIk1hcCIsIlByb21pc2UiLCJTZXQiLCJXZWFrTWFwIiwibmF0aXZlQ3JlYXRlIiwibWV0YU1hcCIsInJlYWxOYW1lcyIsImRhdGFWaWV3Q3RvclN0cmluZyIsInRvU291cmNlIiwibWFwQ3RvclN0cmluZyIsInByb21pc2VDdG9yU3RyaW5nIiwic2V0Q3RvclN0cmluZyIsIndlYWtNYXBDdG9yU3RyaW5nIiwic3ltYm9sUHJvdG8iLCJzeW1ib2xWYWx1ZU9mIiwic3ltYm9sVG9TdHJpbmciLCJsb2Rhc2giLCJpc09iamVjdExpa2UiLCJMYXp5V3JhcHBlciIsIkxvZGFzaFdyYXBwZXIiLCJ3cmFwcGVyQ2xvbmUiLCJiYXNlQ3JlYXRlIiwicHJvdG8iLCJiYXNlTG9kYXNoIiwiY2hhaW5BbGwiLCJfX3dyYXBwZWRfXyIsIl9fYWN0aW9uc19fIiwiX19jaGFpbl9fIiwiX19pbmRleF9fIiwiX192YWx1ZXNfXyIsIl9fZGlyX18iLCJfX2ZpbHRlcmVkX18iLCJfX2l0ZXJhdGVlc19fIiwiX190YWtlQ291bnRfXyIsIl9fdmlld3NfXyIsIkhhc2giLCJlbnRyaWVzIiwiY2xlYXIiLCJlbnRyeSIsIkxpc3RDYWNoZSIsIk1hcENhY2hlIiwiU2V0Q2FjaGUiLCJfX2RhdGFfXyIsImFkZCIsIlN0YWNrIiwiYXJyYXlMaWtlS2V5cyIsImluaGVyaXRlZCIsImlzQXJyIiwiaXNBcmciLCJpc0FyZ3VtZW50cyIsImlzQnVmZiIsImlzVHlwZSIsInNraXBJbmRleGVzIiwiaXNJbmRleCIsImFycmF5U2FtcGxlIiwiYmFzZVJhbmRvbSIsImFycmF5U2FtcGxlU2l6ZSIsInNodWZmbGVTZWxmIiwiY29weUFycmF5IiwiYmFzZUNsYW1wIiwiYXJyYXlTaHVmZmxlIiwiYXNzaWduTWVyZ2VWYWx1ZSIsImVxIiwiYmFzZUFzc2lnblZhbHVlIiwiYXNzaWduVmFsdWUiLCJvYmpWYWx1ZSIsImFzc29jSW5kZXhPZiIsImJhc2VBZ2dyZWdhdG9yIiwiYmFzZUVhY2giLCJiYXNlQXNzaWduIiwiY29weU9iamVjdCIsImJhc2VBdCIsInBhdGhzIiwic2tpcCIsImxvd2VyIiwidXBwZXIiLCJiYXNlQ2xvbmUiLCJiaXRtYXNrIiwiY3VzdG9taXplciIsInN0YWNrIiwiaXNEZWVwIiwiaXNGbGF0IiwiaXNGdWxsIiwiaW5wdXQiLCJpbml0Q2xvbmVBcnJheSIsInRhZyIsImdldFRhZyIsImlzRnVuYyIsImNsb25lQnVmZmVyIiwiaW5pdENsb25lT2JqZWN0IiwiZ2V0U3ltYm9sc0luIiwiY29weVN5bWJvbHNJbiIsImtleXNJbiIsImJhc2VBc3NpZ25JbiIsImNvcHlTeW1ib2xzIiwic3ltYm9sIiwiQ3RvciIsImNsb25lQXJyYXlCdWZmZXIiLCJkYXRhVmlldyIsImJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJieXRlTGVuZ3RoIiwiY2xvbmVEYXRhVmlldyIsImNsb25lVHlwZWRBcnJheSIsInJlZ2V4cCIsImNsb25lUmVnRXhwIiwiaW5pdENsb25lQnlUYWciLCJzdGFja2VkIiwic3ViVmFsdWUiLCJnZXRBbGxLZXlzSW4iLCJnZXRBbGxLZXlzIiwiYmFzZUNvbmZvcm1zVG8iLCJiYXNlRGVsYXkiLCJ3YWl0IiwiYmFzZURpZmZlcmVuY2UiLCJpbmNsdWRlcyIsImlzQ29tbW9uIiwidmFsdWVzTGVuZ3RoIiwib3V0ZXIiLCJ2YWx1ZXNJbmRleCIsInRlbXBsYXRlU2V0dGluZ3MiLCJwb3AiLCJnZXRNYXBEYXRhIiwicGFpcnMiLCJMQVJHRV9BUlJBWV9TSVpFIiwiY3JlYXRlQmFzZUVhY2giLCJiYXNlRm9yT3duIiwiYmFzZUVhY2hSaWdodCIsImJhc2VGb3JPd25SaWdodCIsImJhc2VFdmVyeSIsImJhc2VFeHRyZW11bSIsImlzU3ltYm9sIiwiYmFzZUZpbHRlciIsImJhc2VGbGF0dGVuIiwiZGVwdGgiLCJpc1N0cmljdCIsImlzRmxhdHRlbmFibGUiLCJiYXNlRm9yIiwiY3JlYXRlQmFzZUZvciIsImJhc2VGb3JSaWdodCIsImJhc2VGdW5jdGlvbnMiLCJpc0Z1bmN0aW9uIiwiYmFzZUdldCIsImNhc3RQYXRoIiwidG9LZXkiLCJiYXNlR2V0QWxsS2V5cyIsImtleXNGdW5jIiwic3ltYm9sc0Z1bmMiLCJiYXNlR2V0VGFnIiwiaXNPd24iLCJ1bm1hc2tlZCIsImdldFJhd1RhZyIsIm9iamVjdFRvU3RyaW5nIiwiYmFzZUd0Iiwib3RoZXIiLCJiYXNlSGFzIiwiYmFzZUhhc0luIiwiYmFzZUludGVyc2VjdGlvbiIsImFycmF5cyIsIm90aExlbmd0aCIsIm90aEluZGV4IiwiY2FjaGVzIiwibWF4TGVuZ3RoIiwiSW5maW5pdHkiLCJzZWVuIiwiYmFzZUludm9rZSIsInBhcmVudCIsImxhc3QiLCJiYXNlSXNBcmd1bWVudHMiLCJiYXNlSXNFcXVhbCIsImVxdWFsRnVuYyIsIm9iaklzQXJyIiwib3RoSXNBcnIiLCJvYmpUYWciLCJvdGhUYWciLCJvYmpJc09iaiIsIm90aElzT2JqIiwiaXNTYW1lVGFnIiwiZXF1YWxBcnJheXMiLCJpc1BhcnRpYWwiLCJlcXVhbEJ5VGFnIiwib2JqSXNXcmFwcGVkIiwib3RoSXNXcmFwcGVkIiwib2JqVW53cmFwcGVkIiwib3RoVW53cmFwcGVkIiwib2JqUHJvcHMiLCJvYmpMZW5ndGgiLCJvYmpTdGFja2VkIiwib3RoU3RhY2tlZCIsInNraXBDdG9yIiwib3RoVmFsdWUiLCJjb21wYXJlZCIsIm9iakN0b3IiLCJvdGhDdG9yIiwiZXF1YWxPYmplY3RzIiwiYmFzZUlzRXF1YWxEZWVwIiwiYmFzZUlzTWF0Y2giLCJtYXRjaERhdGEiLCJub0N1c3RvbWl6ZXIiLCJzcmNWYWx1ZSIsIkNPTVBBUkVfUEFSVElBTF9GTEFHIiwiYmFzZUlzTmF0aXZlIiwiYmFzZUl0ZXJhdGVlIiwiaWRlbnRpdHkiLCJiYXNlTWF0Y2hlc1Byb3BlcnR5IiwiYmFzZU1hdGNoZXMiLCJwcm9wZXJ0eSIsImJhc2VLZXlzIiwiaXNQcm90b3R5cGUiLCJiYXNlTHQiLCJiYXNlTWFwIiwiaXNBcnJheUxpa2UiLCJnZXRNYXRjaERhdGEiLCJtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSIsImlzS2V5IiwiaXNTdHJpY3RDb21wYXJhYmxlIiwiaGFzSW4iLCJiYXNlTWVyZ2UiLCJzcmNJbmRleCIsIm1lcmdlRnVuYyIsInNhZmVHZXQiLCJuZXdWYWx1ZSIsImlzVHlwZWQiLCJpc0FycmF5TGlrZU9iamVjdCIsImlzUGxhaW5PYmplY3QiLCJ0b1BsYWluT2JqZWN0IiwiYmFzZU1lcmdlRGVlcCIsImJhc2VOdGgiLCJiYXNlT3JkZXJCeSIsIml0ZXJhdGVlcyIsIm9yZGVycyIsImdldEl0ZXJhdGVlIiwiY29tcGFyZXIiLCJzb3J0Iiwib2JqQ3JpdGVyaWEiLCJjcml0ZXJpYSIsIm90aENyaXRlcmlhIiwib3JkZXJzTGVuZ3RoIiwiY29tcGFyZUFzY2VuZGluZyIsImNvbXBhcmVNdWx0aXBsZSIsImJhc2VTb3J0QnkiLCJiYXNlUGlja0J5IiwiYmFzZVNldCIsImJhc2VQdWxsQWxsIiwiaW5kZXhPZiIsImJhc2VQdWxsQXQiLCJpbmRleGVzIiwicHJldmlvdXMiLCJiYXNlVW5zZXQiLCJiYXNlUmVwZWF0IiwiYmFzZVJlc3QiLCJzdGFydCIsInNldFRvU3RyaW5nIiwib3ZlclJlc3QiLCJiYXNlU2FtcGxlIiwiYmFzZVNhbXBsZVNpemUiLCJuZXN0ZWQiLCJiYXNlU2V0RGF0YSIsImJhc2VTZXRUb1N0cmluZyIsImNvbnN0YW50IiwiYmFzZVNodWZmbGUiLCJiYXNlU2xpY2UiLCJlbmQiLCJiYXNlU29tZSIsImJhc2VTb3J0ZWRJbmRleCIsInJldEhpZ2hlc3QiLCJsb3ciLCJoaWdoIiwibWlkIiwiYmFzZVNvcnRlZEluZGV4QnkiLCJ2YWxJc05hTiIsInZhbElzTnVsbCIsInZhbElzU3ltYm9sIiwidmFsSXNVbmRlZmluZWQiLCJvdGhJc0RlZmluZWQiLCJvdGhJc051bGwiLCJvdGhJc1JlZmxleGl2ZSIsIm90aElzU3ltYm9sIiwic2V0TG93IiwiYmFzZVNvcnRlZFVuaXEiLCJiYXNlVG9OdW1iZXIiLCJiYXNlVG9TdHJpbmciLCJiYXNlVW5pcSIsImNyZWF0ZVNldCIsInNlZW5JbmRleCIsImJhc2VVcGRhdGUiLCJ1cGRhdGVyIiwiYmFzZVdoaWxlIiwiaXNEcm9wIiwiYmFzZVdyYXBwZXJWYWx1ZSIsImFjdGlvbiIsImJhc2VYb3IiLCJiYXNlWmlwT2JqZWN0IiwiYXNzaWduRnVuYyIsInZhbHNMZW5ndGgiLCJjYXN0QXJyYXlMaWtlT2JqZWN0IiwiY2FzdEZ1bmN0aW9uIiwic3RyaW5nVG9QYXRoIiwiY2FzdFJlc3QiLCJjYXN0U2xpY2UiLCJjb3B5IiwiYXJyYXlCdWZmZXIiLCJ0eXBlZEFycmF5IiwidmFsSXNEZWZpbmVkIiwidmFsSXNSZWZsZXhpdmUiLCJjb21wb3NlQXJncyIsInBhcnRpYWxzIiwiaG9sZGVycyIsImlzQ3VycmllZCIsImFyZ3NJbmRleCIsImFyZ3NMZW5ndGgiLCJob2xkZXJzTGVuZ3RoIiwibGVmdEluZGV4IiwibGVmdExlbmd0aCIsInJhbmdlTGVuZ3RoIiwiaXNVbmN1cnJpZWQiLCJjb21wb3NlQXJnc1JpZ2h0IiwiaG9sZGVyc0luZGV4IiwicmlnaHRJbmRleCIsInJpZ2h0TGVuZ3RoIiwiaXNOZXciLCJjcmVhdGVBZ2dyZWdhdG9yIiwiaW5pdGlhbGl6ZXIiLCJjcmVhdGVBc3NpZ25lciIsImFzc2lnbmVyIiwiZ3VhcmQiLCJpc0l0ZXJhdGVlQ2FsbCIsIml0ZXJhYmxlIiwiY3JlYXRlQ2FzZUZpcnN0IiwibWV0aG9kTmFtZSIsInRyYWlsaW5nIiwiY3JlYXRlQ29tcG91bmRlciIsImNhbGxiYWNrIiwid29yZHMiLCJkZWJ1cnIiLCJjcmVhdGVDdG9yIiwidGhpc0JpbmRpbmciLCJjcmVhdGVGaW5kIiwiZmluZEluZGV4RnVuYyIsImNyZWF0ZUZsb3ciLCJmbGF0UmVzdCIsImZ1bmNzIiwicHJlcmVxIiwidGhydSIsIndyYXBwZXIiLCJnZXRGdW5jTmFtZSIsImZ1bmNOYW1lIiwiZ2V0RGF0YSIsImlzTGF6aWFibGUiLCJwbGFudCIsImNyZWF0ZUh5YnJpZCIsInBhcnRpYWxzUmlnaHQiLCJob2xkZXJzUmlnaHQiLCJhcmdQb3MiLCJhcnkiLCJhcml0eSIsImlzQXJ5IiwiaXNCaW5kIiwiaXNCaW5kS2V5IiwiaXNGbGlwIiwiZ2V0SG9sZGVyIiwiaG9sZGVyc0NvdW50IiwibmV3SG9sZGVycyIsImNyZWF0ZVJlY3VycnkiLCJyZW9yZGVyIiwiY3JlYXRlSW52ZXJ0ZXIiLCJ0b0l0ZXJhdGVlIiwiYmFzZUludmVydGVyIiwiY3JlYXRlTWF0aE9wZXJhdGlvbiIsIm9wZXJhdG9yIiwiZGVmYXVsdFZhbHVlIiwiY3JlYXRlT3ZlciIsImFycmF5RnVuYyIsImNyZWF0ZVBhZGRpbmciLCJjaGFycyIsImNoYXJzTGVuZ3RoIiwiY3JlYXRlUmFuZ2UiLCJzdGVwIiwidG9GaW5pdGUiLCJiYXNlUmFuZ2UiLCJjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uIiwidG9OdW1iZXIiLCJ3cmFwRnVuYyIsImlzQ3VycnkiLCJuZXdEYXRhIiwic2V0RGF0YSIsInNldFdyYXBUb1N0cmluZyIsImNyZWF0ZVJvdW5kIiwicHJlY2lzaW9uIiwicGFpciIsIm5vb3AiLCJjcmVhdGVUb1BhaXJzIiwiYmFzZVRvUGFpcnMiLCJjcmVhdGVXcmFwIiwic3JjQml0bWFzayIsIm5ld0JpdG1hc2siLCJpc0NvbWJvIiwibWVyZ2VEYXRhIiwiY3JlYXRlQ3VycnkiLCJjcmVhdGVQYXJ0aWFsIiwiY3JlYXRlQmluZCIsImN1c3RvbURlZmF1bHRzQXNzaWduSW4iLCJjdXN0b21EZWZhdWx0c01lcmdlIiwiY3VzdG9tT21pdENsb25lIiwiYXJyTGVuZ3RoIiwiYXJyU3RhY2tlZCIsImFyclZhbHVlIiwiZmxhdHRlbiIsIm90aGVyRnVuYyIsImdldFZhbHVlIiwic3R1YkFycmF5IiwiaGFzUGF0aCIsImhhc0Z1bmMiLCJpc0xlbmd0aCIsIkFycmF5QnVmZmVyIiwicmVzb2x2ZSIsImN0b3JTdHJpbmciLCJpc01hc2thYmxlIiwic3R1YkZhbHNlIiwib3RoZXJBcmdzIiwib2xkQXJyYXkiLCJzaG9ydE91dCIsInJlZmVyZW5jZSIsImRldGFpbHMiLCJpbnNlcnRXcmFwRGV0YWlscyIsInVwZGF0ZVdyYXBEZXRhaWxzIiwiZ2V0V3JhcERldGFpbHMiLCJjb3VudCIsImxhc3RDYWxsZWQiLCJzdGFtcCIsInJlbWFpbmluZyIsInJhbmQiLCJtZW1vaXplIiwiY2hhckNvZGVBdCIsInF1b3RlIiwic3ViU3RyaW5nIiwiY2xvbmUiLCJkaWZmZXJlbmNlIiwiZGlmZmVyZW5jZUJ5IiwiZGlmZmVyZW5jZVdpdGgiLCJmaW5kTGFzdEluZGV4IiwiaGVhZCIsImludGVyc2VjdGlvbiIsIm1hcHBlZCIsImludGVyc2VjdGlvbkJ5IiwiaW50ZXJzZWN0aW9uV2l0aCIsInB1bGwiLCJwdWxsQWxsIiwicHVsbEF0IiwidW5pb24iLCJ1bmlvbkJ5IiwidW5pb25XaXRoIiwidW56aXAiLCJncm91cCIsInVuemlwV2l0aCIsIndpdGhvdXQiLCJ4b3IiLCJ4b3JCeSIsInhvcldpdGgiLCJ6aXAiLCJ6aXBXaXRoIiwiY2hhaW4iLCJpbnRlcmNlcHRvciIsIndyYXBwZXJBdCIsImNvdW50QnkiLCJmaW5kTGFzdCIsImZvckVhY2hSaWdodCIsImdyb3VwQnkiLCJpbnZva2VNYXAiLCJrZXlCeSIsInBhcnRpdGlvbiIsInNvcnRCeSIsImJlZm9yZSIsImJpbmQiLCJiaW5kS2V5IiwiV1JBUF9CSU5EX0ZMQUciLCJkZWJvdW5jZSIsImxhc3RBcmdzIiwibGFzdFRoaXMiLCJtYXhXYWl0IiwidGltZXJJZCIsImxhc3RDYWxsVGltZSIsImxhc3RJbnZva2VUaW1lIiwibGVhZGluZyIsIm1heGluZyIsImludm9rZUZ1bmMiLCJ0aW1lIiwibGVhZGluZ0VkZ2UiLCJ0aW1lckV4cGlyZWQiLCJzaG91bGRJbnZva2UiLCJ0aW1lU2luY2VMYXN0Q2FsbCIsInRyYWlsaW5nRWRnZSIsInRpbWVXYWl0aW5nIiwicmVtYWluaW5nV2FpdCIsImRlYm91bmNlZCIsImlzSW52b2tpbmciLCJjYW5jZWwiLCJmbHVzaCIsImRlZmVyIiwiZGVsYXkiLCJyZXNvbHZlciIsIm1lbW9pemVkIiwiQ2FjaGUiLCJuZWdhdGUiLCJvdmVyQXJncyIsInRyYW5zZm9ybXMiLCJmdW5jc0xlbmd0aCIsInBhcnRpYWwiLCJwYXJ0aWFsUmlnaHQiLCJyZWFyZyIsImd0IiwiZ3RlIiwiaXNFcnJvciIsImlzSW50ZWdlciIsImlzTnVtYmVyIiwiaXNTdHJpbmciLCJsdCIsImx0ZSIsInRvQXJyYXkiLCJpdGVyYXRvclRvQXJyYXkiLCJyZW1haW5kZXIiLCJpc0JpbmFyeSIsImFzc2lnbkluIiwiYXNzaWduSW5XaXRoIiwiYXNzaWduV2l0aCIsImF0IiwicHJvcHNJbmRleCIsInByb3BzTGVuZ3RoIiwiZGVmYXVsdHNEZWVwIiwibWVyZ2VXaXRoIiwiaW52ZXJ0IiwiaW52ZXJ0QnkiLCJpbnZva2UiLCJuYXRpdmVLZXlzSW4iLCJpc1Byb3RvIiwiYmFzZUtleXNJbiIsIm1lcmdlIiwib21pdCIsIkNMT05FX0RFRVBfRkxBRyIsImJhc2VQaWNrIiwicGlja0J5IiwicHJvcCIsInRvUGFpcnMiLCJ0b1BhaXJzSW4iLCJjYW1lbENhc2UiLCJ3b3JkIiwidG9Mb3dlckNhc2UiLCJjYXBpdGFsaXplIiwidXBwZXJGaXJzdCIsImtlYmFiQ2FzZSIsImxvd2VyQ2FzZSIsImxvd2VyRmlyc3QiLCJzbmFrZUNhc2UiLCJzdGFydENhc2UiLCJ1cHBlckNhc2UiLCJ0b1VwcGVyQ2FzZSIsInBhdHRlcm4iLCJoYXNVbmljb2RlV29yZCIsInVuaWNvZGVXb3JkcyIsImFzY2lpV29yZHMiLCJhdHRlbXB0IiwiYmluZEFsbCIsIm1ldGhvZE5hbWVzIiwiZmxvdyIsImZsb3dSaWdodCIsIm1ldGhvZCIsIm1ldGhvZE9mIiwibWl4aW4iLCJvdmVyIiwib3ZlckV2ZXJ5Iiwib3ZlclNvbWUiLCJiYXNlUHJvcGVydHlEZWVwIiwicmFuZ2UiLCJyYW5nZVJpZ2h0IiwiYXVnZW5kIiwiYWRkZW5kIiwiZGl2aWRlIiwiZGl2aWRlbmQiLCJkaXZpc29yIiwibXVsdGlwbHkiLCJtdWx0aXBsaWVyIiwibXVsdGlwbGljYW5kIiwicm91bmQiLCJzdWJ0cmFjdCIsIm1pbnVlbmQiLCJzdWJ0cmFoZW5kIiwiYWZ0ZXIiLCJjYXN0QXJyYXkiLCJjaHVuayIsImNvbXBhY3QiLCJjb25kIiwiY29uZm9ybXMiLCJiYXNlQ29uZm9ybXMiLCJwcm9wZXJ0aWVzIiwiY3VycnkiLCJjdXJyeVJpZ2h0IiwiZHJvcCIsImRyb3BSaWdodCIsImRyb3BSaWdodFdoaWxlIiwiZHJvcFdoaWxlIiwiZmlsbCIsImJhc2VGaWxsIiwiZmlsdGVyIiwiZmxhdE1hcCIsImZsYXRNYXBEZWVwIiwiZmxhdE1hcERlcHRoIiwiZmxhdHRlbkRlZXAiLCJmbGF0dGVuRGVwdGgiLCJmbGlwIiwiZnJvbVBhaXJzIiwiZnVuY3Rpb25zIiwiZnVuY3Rpb25zSW4iLCJpbml0aWFsIiwibWFwS2V5cyIsIm1hcFZhbHVlcyIsIm1hdGNoZXMiLCJtYXRjaGVzUHJvcGVydHkiLCJudGhBcmciLCJvbWl0QnkiLCJvbmNlIiwib3JkZXJCeSIsInByb3BlcnR5T2YiLCJwdWxsQWxsQnkiLCJwdWxsQWxsV2l0aCIsInJlamVjdCIsInJlbW92ZSIsInJlc3QiLCJzYW1wbGVTaXplIiwic2V0V2l0aCIsInNodWZmbGUiLCJzb3J0ZWRVbmlxIiwic29ydGVkVW5pcUJ5Iiwic2VwYXJhdG9yIiwibGltaXQiLCJzcHJlYWQiLCJ0YWlsIiwidGFrZSIsInRha2VSaWdodCIsInRha2VSaWdodFdoaWxlIiwidGFrZVdoaWxlIiwidGFwIiwidGhyb3R0bGUiLCJ0b1BhdGgiLCJpc0Fyckxpa2UiLCJ1bmFyeSIsInVuaXEiLCJ1bmlxQnkiLCJ1bmlxV2l0aCIsInVuc2V0IiwidXBkYXRlIiwidXBkYXRlV2l0aCIsInZhbHVlc0luIiwid3JhcCIsInppcE9iamVjdCIsInppcE9iamVjdERlZXAiLCJlbnRyaWVzSW4iLCJleHRlbmQiLCJleHRlbmRXaXRoIiwiY2xhbXAiLCJjbG9uZURlZXAiLCJjbG9uZURlZXBXaXRoIiwiY2xvbmVXaXRoIiwiY29uZm9ybXNUbyIsImRlZmF1bHRUbyIsImVuZHNXaXRoIiwicG9zaXRpb24iLCJlc2NhcGUiLCJlc2NhcGVSZWdFeHAiLCJldmVyeSIsImZpbmRLZXkiLCJmaW5kTGFzdEtleSIsImZvckluIiwiZm9ySW5SaWdodCIsImZvck93biIsImZvck93blJpZ2h0IiwiaW5SYW5nZSIsImJhc2VJblJhbmdlIiwiaXNCb29sZWFuIiwiaXNFbGVtZW50IiwiaXNFbXB0eSIsImlzRXF1YWwiLCJpc0VxdWFsV2l0aCIsImlzTWF0Y2giLCJpc01hdGNoV2l0aCIsImlzTmF0aXZlIiwiaXNOaWwiLCJpc051bGwiLCJpc1NhZmVJbnRlZ2VyIiwiaXNVbmRlZmluZWQiLCJpc1dlYWtNYXAiLCJpc1dlYWtTZXQiLCJsYXN0SW5kZXhPZiIsInN0cmljdExhc3RJbmRleE9mIiwibWF4QnkiLCJtZWFuIiwibWVhbkJ5IiwibWluQnkiLCJzdHViT2JqZWN0Iiwic3R1YlN0cmluZyIsInN0dWJUcnVlIiwibnRoIiwibm9Db25mbGljdCIsInBhZCIsInN0ckxlbmd0aCIsInBhZEVuZCIsInBhZFN0YXJ0IiwicmFkaXgiLCJmbG9hdGluZyIsInRlbXAiLCJyZWR1Y2UiLCJyZWR1Y2VSaWdodCIsInJlcGVhdCIsInNhbXBsZSIsInNvbWUiLCJzb3J0ZWRJbmRleCIsInNvcnRlZEluZGV4QnkiLCJzb3J0ZWRJbmRleE9mIiwic29ydGVkTGFzdEluZGV4Iiwic29ydGVkTGFzdEluZGV4QnkiLCJzb3J0ZWRMYXN0SW5kZXhPZiIsInN0YXJ0c1dpdGgiLCJzdW0iLCJzdW1CeSIsInRlbXBsYXRlIiwic2V0dGluZ3MiLCJpc0VzY2FwaW5nIiwiaXNFdmFsdWF0aW5nIiwiaW1wb3J0cyIsImltcG9ydHNLZXlzIiwiaW1wb3J0c1ZhbHVlcyIsImludGVycG9sYXRlIiwicmVEZWxpbWl0ZXJzIiwiZXZhbHVhdGUiLCJzb3VyY2VVUkwiLCJlc2NhcGVWYWx1ZSIsImludGVycG9sYXRlVmFsdWUiLCJlc1RlbXBsYXRlVmFsdWUiLCJldmFsdWF0ZVZhbHVlIiwidmFyaWFibGUiLCJ0aW1lcyIsInRvTG93ZXIiLCJ0b1NhZmVJbnRlZ2VyIiwidG9VcHBlciIsInRyaW1FbmQiLCJ0cmltU3RhcnQiLCJ0cnVuY2F0ZSIsIm9taXNzaW9uIiwic2VhcmNoIiwic3Vic3RyaW5nIiwibmV3RW5kIiwidW5pcXVlSWQiLCJwcmVmaXgiLCJlYWNoIiwiZWFjaFJpZ2h0IiwiZmlyc3QiLCJWRVJTSU9OIiwiaXNGaWx0ZXIiLCJ0YWtlTmFtZSIsImRyb3BOYW1lIiwiY2hlY2tJdGVyYXRlZSIsImlzVGFrZXIiLCJsb2Rhc2hGdW5jIiwicmV0VW53cmFwcGVkIiwiaXNMYXp5IiwidXNlTGF6eSIsImlzSHlicmlkIiwiaXNVbndyYXBwZWQiLCJvbmx5TGF6eSIsImNoYWluTmFtZSIsImRpciIsImlzUmlnaHQiLCJ2aWV3IiwiZ2V0VmlldyIsIml0ZXJMZW5ndGgiLCJ0YWtlQ291bnQiLCJpdGVySW5kZXgiLCJ3cmFwcGVkIiwidG9KU09OIiwicmVuZGVyIiwiX3ZtIiwiX2giLCIkY3JlYXRlRWxlbWVudCIsIl9jIiwiX3NlbGYiLCJzdGF0aWNDbGFzcyIsImF0dHJzIiwiX3YiLCJvbiIsIm9uU2VhcmNoIiwiYXBwbHlGaWx0ZXIiLCJpc092ZXJ2aWV3IiwibG93U3RvY2tDaGVja2VkIiwib25Mb3dTdG9ja0NoZWNrZWQiLCJyZXNldEZpbHRlcnMiLCJmZXRjaCIsImN1cnJlbnRQYWdpbmF0aW9uIiwicGFnZXNDb3VudCIsInBhZ2VDaGFuZ2VkIiwib25QYWdlQ2hhbmdlZCIsIl93aXRoU3RyaXBwZWQiLCJfX2ZpbGUiLCJjYXRhbG9nTGluayIsInN0b2NrTGluayIsImxhYmVsIiwib25GaWx0ZXJBY3RpdmUiLCJpdGVtcyIsImNoYW5nZSIsIm9uQ2hhbmdlIiwibG9jYWxlIiwiZHBDaGFuZ2UiLCJvbkRwQ2hhbmdlIiwicmVzZXQiLCJvbkNsZWFyIiwiY2F0ZWdvcmllc0xpc3QiLCJvblJhZGlvQ2hhbmdlIiwiaGFzQ2hpbGRyZW4iLCJyZWYiLCJoYXNQbGFjZWhvbGRlciIsInRhZ0NoYW5nZSIsIm9uVGFnQ2hhbmdlZCIsInR5cGluZyIsIm9uVHlwaW5nIiwiX20iLCJtb2RlbCIsIlBTVHJlZVRyYW5zbGF0aW9ucyIsIm9uQ2hlY2siLCJfbCIsImdldEl0ZW1zIiwiZGlyZWN0aXZlcyIsInJhd05hbWUiLCJ2aXNpYmxlIiwiZXhwcmVzc2lvbiIsInNsb3QiLCJzdG9ja0V4cG9ydFVybCIsInN0b2NrRXhwb3J0VGl0bGUiLCJzdG9ja0ltcG9ydFVybCIsInN0b2NrSW1wb3J0VGl0bGUiLCJzdWJtaXQiLCIkZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInByaW1hcnkiLCJjbGljayIsIm9uQ2xpY2siLCJjbG9zZUFsZXJ0Iiwib25DbG9zZUFsZXJ0IiwiY2xhc3MiLCJ0byIsInJvbGUiLCJpc01vdmVtZW50cyIsIndpZHRoIiwiY3VycmVudFNvcnQiLCJjb2xzcGFuIiwiZW1wdHlNb3ZlbWVudHMiLCJwcm9kdWN0X25hbWUiLCJwcm9kdWN0X3JlZmVyZW5jZSIsIm9yZGVyTGluayIsIm1vdmVtZW50X3JlYXNvbiIsImlzUG9zaXRpdmUiLCJlbXBsb3llZU5hbWUiLCJsb3dTdG9jayIsInByb2R1Y3RDaGVja2VkIiwic3VwcGxpZXJfbmFtZSIsInBoeXNpY2FsIiwidXBkYXRlZFF0eSIsInBoeXNpY2FsUXR5VXBkYXRlZCIsInByb2R1Y3RfcmVzZXJ2ZWRfcXVhbnRpdHkiLCJwcm9kdWN0X2F2YWlsYWJsZV9xdWFudGl0eSIsImF2YWlsYWJsZVF0eVVwZGF0ZWQiLCJsb3dTdG9ja0xldmVsIiwiaXNJbmRldGVybWluYXRlIiwiYnVsa0NoZWNrZWQiLCJidXR0b25zIiwiZm9jdXMiLCJmb2N1c0luIiwiYmx1ciIsImZvY3VzT3V0Iiwia2V5dXAiLCJvbktleVVwIiwic2VuZFF0eSIsInNjb3BlIiwiZW1wdHlQcm9kdWN0cyIsImNsYXNzT2JqZWN0IiwibW91c2VvdmVyIiwibW91c2VsZWF2ZSIsImdldFF1YW50aXR5Iiwib25LZXl1cCIsImhhc0Nsb3NlIiwic3RvcFByb3BhZ2F0aW9uIiwiX3QiLCJpbmRldGVybWluYXRlIiwiZG9tUHJvcHMiLCIkJGEiLCIkJGVsIiwiJCRjIiwiJCRpIiwiZGlzcGxheVRodW1iIiwic3JjIiwiaG92ZXJCdXR0b25zIiwibmF0aXZlT24iLCJpbmNyZW1lbnQiLCJkZWNyZW1lbnQiLCJkaXNwbGF5UGFnaW5hdGlvbiIsIm11bHRpIiwiaXNNdWx0aVBhZ2luYXRpb24iLCJhY3RpdmVMZWZ0QXJyb3ciLCJwcmV2IiwiY2hlY2tDdXJyZW50SW5kZXgiLCJzaG93SW5kZXgiLCJzaG93Rmlyc3REb3RzIiwic2hvd0xhc3REb3RzIiwiY2hhbmdlUGFnZSIsImFjdGl2ZVJpZ2h0QXJyb3ciLCJmb3IiLCJzZWxlY3RlZCIsIiQkc2VsZWN0ZWRWYWwiLCJfdmFsdWUiLCJtdWx0aXBsZSIsIml0ZW1JZCIsIml0ZW1OYW1lIiwiaXNDdXJyZW50Iiwic29ydFRvZ2dsZSIsImhhc0ljb24iLCJjbG9zZSIsInBsYWNlaG9sZGVyVG9EaXNwbGF5IiwiaW5wdXRTaXplIiwia2V5ZG93biIsIl9rIiwia2V5Q29kZSIsImNvbXBvc2luZyIsImNsYXNzTmFtZSIsImRpc2FibGUiLCJjbGlja0VsZW1lbnQiLCJoaWRkZW4iLCJpc0hpZGRlbiIsImNoZXZyb25TdGF0dXMiLCJleHBhbmQiLCJoYXNDaGVja2JveCIsIndhcm5pbmciLCJpc1dhcm5pbmciLCJkaXNwbGF5RXh0cmFMYWJlbCIsImdldEV4dHJhTGFiZWwiLCJleHRyYUxhYmVsIiwiaXNGb2xkZXIiLCJlbGVtZW50IiwicmVmSW5Gb3IiLCJjdXJyZW50SXRlbSIsInNldEN1cnJlbnRFbGVtZW50Iiwibm9ybWFsaXplQ29tcG9uZW50Iiwic2NyaXB0RXhwb3J0cyIsInN0YXRpY1JlbmRlckZucyIsImZ1bmN0aW9uYWxUZW1wbGF0ZSIsImluamVjdFN0eWxlcyIsInNjb3BlSWQiLCJtb2R1bGVJZGVudGlmaWVyIiwic2hhZG93TW9kZSIsImhvb2siLCJfY29tcGlsZWQiLCJmdW5jdGlvbmFsIiwiX3Njb3BlSWQiLCIkdm5vZGUiLCJzc3JDb250ZXh0IiwiX19WVUVfU1NSX0NPTlRFWFRfXyIsIl9yZWdpc3RlcmVkQ29tcG9uZW50cyIsIl9zc3JSZWdpc3RlciIsIiRyb290IiwiJG9wdGlvbnMiLCJzaGFkb3dSb290IiwiX2luamVjdFN0eWxlcyIsIm9yaWdpbmFsUmVuZGVyIiwiaCIsImV4aXN0aW5nIiwiYmVmb3JlQ3JlYXRlIiwiUHJvbWlzZSQxIiwiZXhlY3V0b3IiLCJkZWZlcnJlZCIsInByb21pc2UiLCJ4IiwiciIsImFsbCIsInJhY2UiLCJwIiwiUHJvbWlzZU9iaiIsImNhbGxlZCIsIm5vdGlmeSIsInJlYXNvbiIsIm50aWNrIiwic2hpZnQiLCJvblJlc29sdmVkIiwib25SZWplY3RlZCIsImNhdGNoIiwicCQxIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJmaW5hbGx5IiwiZGVidWciLCJpbkJyb3dzZXIiLCJzdHIiLCJ3aGVuIiwib3B0cyIsIiR2bSIsIl9tZXJnZSIsImRlZXAiLCJpc0RlZmluZWQiLCJpc0tleU9wZXJhdG9yIiwiZW5jb2RlVmFsdWUiLCJlbmNvZGVSZXNlcnZlZCIsInBhcnQiLCJlbmNvZGVVUkkiLCJVcmwiLCJvcHRpb25zJCQxIiwiaGFuZGxlciIsInZtIiwiZmFjdG9yeSIsInNlcmlhbGl6ZSIsInBsYWluIiwieGRyQ2xpZW50IiwicmVxdWVzdCIsInhkciIsIlhEb21haW5SZXF1ZXN0Iiwic3RhdHVzIiwicmVzcG9uZFdpdGgiLCJyZXNwb25zZVRleHQiLCJhYm9ydCIsImdldFVybCIsInRpbWVvdXQiLCJvbmxvYWQiLCJvbmFib3J0Iiwib25lcnJvciIsIm9udGltZW91dCIsIm9ucHJvZ3Jlc3MiLCJzZW5kIiwiZ2V0Qm9keSIsInZhcmlhYmxlcyIsInRtcGwiLCJvcGVyYXRvcnMiLCJ2YXJzIiwibGl0ZXJhbCIsInN1YnN0ciIsInRtcCIsIm1vZGlmaWVyIiwiZ2V0VmFsdWVzIiwicGFyc2UiLCJleHBhbmRlZCIsInF1ZXJ5IiwidXJsUGFyYW1zIiwiZG9jdW1lbnRNb2RlIiwicHJvdG9jb2wiLCJwb3J0IiwiaG9zdCIsImhvc3RuYW1lIiwicGF0aG5hbWUiLCJTVVBQT1JUU19DT1JTIiwiWE1MSHR0cFJlcXVlc3QiLCJqc29ucENsaWVudCIsInNjcmlwdCIsImpzb25wIiwianNvbnBDYWxsYmFjayIsInJlbW92ZUNoaWxkIiwiYXN5bmMiLCJhcHBlbmRDaGlsZCIsInhockNsaWVudCIsInhociIsImV2ZW50IiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicm93IiwiYXBwZW5kIiwicmVzcG9uc2VUeXBlIiwid2l0aENyZWRlbnRpYWxzIiwiY3JlZGVudGlhbHMiLCJjcm9zc09yaWdpbiIsInByb2dyZXNzIiwiYWRkRXZlbnRMaXN0ZW5lciIsImRvd25sb2FkUHJvZ3Jlc3MiLCJ1cGxvYWQiLCJ1cGxvYWRQcm9ncmVzcyIsInNldFJlcXVlc3RIZWFkZXIiLCJub2RlQ2xpZW50IiwiY2xpZW50IiwicmVzcCIsInN0YXR1c0NvZGUiLCJzdGF0dXNNZXNzYWdlIiwiZXJyb3IkJDEiLCJzZW5kUmVxdWVzdCIsIkhlYWRlcnMiLCJ0aGlzJDEiLCJnZXROYW1lIiwiY3VyciIsImdldEFsbCIsIm5vcm1hbGl6ZU5hbWUiLCJkZWxldGUiLCJkZWxldGVBbGwiLCJSZXNwb25zZSIsIm9rIiwiYm9keVRleHQiLCJCbG9iIiwiYm9keUJsb2IiLCJpc0Jsb2JUZXh0IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsInJlYWRBc1RleHQiLCJibG9iVGV4dCIsImJsb2IiLCJ0ZXh0IiwianNvbiIsIlJlcXVlc3QiLCJKU09OX0NPTlRFTlRfVFlQRSIsIkh0dHAiLCJyZXFIYW5kbGVycyIsInJlc0hhbmRsZXJzIiwiQ2xpZW50IiwidW5zaGlmdCIsIm1zZyIsImNvbnNvbGUiLCJ3YXJuIiwiaW50ZXJjZXB0b3JzIiwiUmVzb3VyY2UiLCJyZXNvdXJjZSIsIiRodHRwIiwicGx1Z2luIiwiY29uZmlnIiwibmV4dFRpY2siLCJpbnN0YWxsZWQiLCJzaWxlbnQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiJHVybCIsIiRyZXNvdXJjZSIsIiRwcm9taXNlIiwicHV0IiwicGF0Y2giLCJjb21tb24iLCJjdXN0b20iLCJlbXVsYXRlSFRUUCIsImZvcm0iLCJGb3JtRGF0YSIsImVtdWxhdGVKU09OIiwiaGVhZGVyIiwiY29ycyIsIm9yZ1VybCIsInJlcVVybCIsIm1ldGhvZCQkMSIsInNhdmUiLCJWaWV3Iiwicm91dGVyVmlldyIsInJvdXRlIiwiJHJvdXRlIiwiX3JvdXRlclZpZXdDYWNoZSIsImluYWN0aXZlIiwiX3JvdXRlclJvb3QiLCJfaW5hY3RpdmUiLCIkcGFyZW50Iiwicm91dGVyVmlld0RlcHRoIiwibWF0Y2hlZCIsImNvbXBvbmVudHMiLCJyZWdpc3RlclJvdXRlSW5zdGFuY2UiLCJpbnN0YW5jZXMiLCJwcmVwYXRjaCIsInZub2RlIiwiY29tcG9uZW50SW5zdGFuY2UiLCJwcm9wc1RvUGFzcyIsInJlc29sdmVQcm9wcyIsImVuY29kZVJlc2VydmVSRSIsImVuY29kZVJlc2VydmVSZXBsYWNlciIsImNvbW1hUkUiLCJlbmNvZGUiLCJkZWNvZGUiLCJkZWNvZGVVUklDb21wb25lbnQiLCJwYXJzZVF1ZXJ5IiwicGFyYW0iLCJwYXJ0cyIsInN0cmluZ2lmeVF1ZXJ5IiwidmFsMiIsInRyYWlsaW5nU2xhc2hSRSIsImNyZWF0ZVJvdXRlIiwicmVjb3JkIiwicmVkaXJlY3RlZEZyb20iLCJyb3V0ZXIiLCJzdHJpbmdpZnlRdWVyeSQkMSIsIm1ldGEiLCJmdWxsUGF0aCIsImdldEZ1bGxQYXRoIiwiZm9ybWF0TWF0Y2giLCJmcmVlemUiLCJTVEFSVCIsIl9zdHJpbmdpZnlRdWVyeSIsImlzU2FtZVJvdXRlIiwiaXNPYmplY3RFcXVhbCIsImFLZXlzIiwiYktleXMiLCJhVmFsIiwiYlZhbCIsIl9WdWUiLCJMaW5rIiwicmVxdWlyZWQiLCJleGFjdCIsIkJvb2xlYW4iLCJhY3RpdmVDbGFzcyIsImV4YWN0QWN0aXZlQ2xhc3MiLCIkcm91dGVyIiwiY2xhc3NlcyIsImdsb2JhbEFjdGl2ZUNsYXNzIiwibGlua0FjdGl2ZUNsYXNzIiwiZ2xvYmFsRXhhY3RBY3RpdmVDbGFzcyIsImxpbmtFeGFjdEFjdGl2ZUNsYXNzIiwiYWN0aXZlQ2xhc3NGYWxsYmFjayIsImV4YWN0QWN0aXZlQ2xhc3NGYWxsYmFjayIsImNvbXBhcmVUYXJnZXQiLCJxdWVyeUluY2x1ZGVzIiwiaXNJbmNsdWRlZFJvdXRlIiwiZ3VhcmRFdmVudCIsImZpbmRBbmNob3IiLCIkc2xvdHMiLCJpc1N0YXRpYyIsInV0aWwiLCJtZXRhS2V5IiwiYWx0S2V5IiwiY3RybEtleSIsInNoaWZ0S2V5IiwiZGVmYXVsdFByZXZlbnRlZCIsImJ1dHRvbiIsImN1cnJlbnRUYXJnZXQiLCJnZXRBdHRyaWJ1dGUiLCJjaGlsZCIsInJlc29sdmVQYXRoIiwicmVsYXRpdmUiLCJmaXJzdENoYXIiLCJzZWdtZW50cyIsInNlZ21lbnQiLCJjbGVhblBhdGgiLCJpc2FycmF5IiwicGF0aFRvUmVnZXhwXzEiLCJwYXRoVG9SZWdleHAiLCJncm91cHMiLCJkZWxpbWl0ZXIiLCJvcHRpb25hbCIsImFzdGVyaXNrIiwiYXR0YWNoS2V5cyIsInJlZ2V4cFRvUmVnZXhwIiwiZmxhZ3MiLCJhcnJheVRvUmVnZXhwIiwidG9rZW5zVG9SZWdFeHAiLCJzdHJpbmdUb1JlZ2V4cCIsInBhcnNlXzEiLCJ0b2tlbnNUb0Z1bmN0aW9uXzEiLCJ0b2tlbnNUb0Z1bmN0aW9uIiwidG9rZW5zVG9SZWdFeHBfMSIsIlBBVEhfUkVHRVhQIiwidG9rZW5zIiwiZGVmYXVsdERlbGltaXRlciIsIm0iLCJlc2NhcGVkIiwiY2FwdHVyZSIsImVzY2FwZUdyb3VwIiwiZXNjYXBlU3RyaW5nIiwiZW5jb2RlVVJJQ29tcG9uZW50UHJldHR5IiwicHJldHR5IiwidG9rZW4iLCJyZSIsInNlbnNpdGl2ZSIsInN0cmljdCIsImVuZHNXaXRoRGVsaW1pdGVyIiwiY29tcGlsZSIsInJlZ2V4cENvbXBpbGVDYWNoZSIsImZpbGxQYXJhbXMiLCJyb3V0ZU1zZyIsImNyZWF0ZVJvdXRlTWFwIiwib2xkUGF0aExpc3QiLCJvbGRQYXRoTWFwIiwib2xkTmFtZU1hcCIsInBhdGhMaXN0IiwicGF0aE1hcCIsIm5hbWVNYXAiLCJhZGRSb3V0ZVJlY29yZCIsImwiLCJtYXRjaEFzIiwicGF0aFRvUmVnZXhwT3B0aW9ucyIsIm5vcm1hbGl6ZWRQYXRoIiwibm9ybWFsaXplUGF0aCIsImNhc2VTZW5zaXRpdmUiLCJyZWdleCIsImNvbXBpbGVSb3V0ZVJlZ2V4IiwicmVkaXJlY3QiLCJiZWZvcmVFbnRlciIsImNoaWxkTWF0Y2hBcyIsImFsaWFzIiwiYWxpYXNSb3V0ZSIsIm5vcm1hbGl6ZUxvY2F0aW9uIiwicmF3IiwiX25vcm1hbGl6ZWQiLCJyYXdQYXRoIiwicGFyc2VkUGF0aCIsImhhc2hJbmRleCIsInF1ZXJ5SW5kZXgiLCJwYXJzZVBhdGgiLCJiYXNlUGF0aCIsImV4dHJhUXVlcnkiLCJfcGFyc2VRdWVyeSIsInBhcnNlZFF1ZXJ5IiwicmVzb2x2ZVF1ZXJ5IiwiY3JlYXRlTWF0Y2hlciIsImN1cnJlbnRSb3V0ZSIsIl9jcmVhdGVSb3V0ZSIsInBhcmFtTmFtZXMiLCJyZWNvcmQkMSIsIm1hdGNoUm91dGUiLCJvcmlnaW5hbFJlZGlyZWN0IiwicmVzb2x2ZVJlY29yZFBhdGgiLCJhbGlhc2VkTWF0Y2giLCJhbGlhc2VkUmVjb3JkIiwiYWRkUm91dGVzIiwicG9zaXRpb25TdG9yZSIsInNldHVwU2Nyb2xsIiwiaGlzdG9yeSIsInJlcGxhY2VTdGF0ZSIsImdldFN0YXRlS2V5Iiwic2F2ZVNjcm9sbFBvc2l0aW9uIiwiX2tleSIsImhhbmRsZVNjcm9sbCIsImlzUG9wIiwiYXBwIiwiYmVoYXZpb3IiLCJzY3JvbGxCZWhhdmlvciIsIiRuZXh0VGljayIsImdldFNjcm9sbFBvc2l0aW9uIiwic2hvdWxkU2Nyb2xsIiwic2Nyb2xsVG9Qb3NpdGlvbiIsInBhZ2VYT2Zmc2V0IiwieSIsInBhZ2VZT2Zmc2V0IiwiaXNWYWxpZFBvc2l0aW9uIiwibm9ybWFsaXplUG9zaXRpb24iLCJ2Iiwic2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yIiwiZG9jUmVjdCIsImRvY3VtZW50RWxlbWVudCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImVsUmVjdCIsImxlZnQiLCJ0b3AiLCJnZXRFbGVtZW50UG9zaXRpb24iLCJzY3JvbGxUbyIsInVhIiwic3VwcG9ydHNQdXNoU3RhdGUiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJUaW1lIiwicGVyZm9ybWFuY2UiLCJnZW5LZXkiLCJ0b0ZpeGVkIiwicHVzaFN0YXRlIiwicnVuUXVldWUiLCJxdWV1ZSIsImNiIiwiZmxhdE1hcENvbXBvbmVudHMiLCJoYXNTeW1ib2wiLCJIaXN0b3J5IiwiYmFzZUVsIiwibm9ybWFsaXplQmFzZSIsInBlbmRpbmciLCJyZWFkeSIsInJlYWR5Q2JzIiwicmVhZHlFcnJvckNicyIsImVycm9yQ2JzIiwiZXh0cmFjdEd1YXJkcyIsInJlY29yZHMiLCJndWFyZHMiLCJkZWYiLCJpbnN0YW5jZSIsImV4dHJhY3RHdWFyZCIsImJpbmRHdWFyZCIsInBvbGwiLCJpc1ZhbGlkIiwibGlzdGVuIiwib25SZWFkeSIsImVycm9yQ2IiLCJvbkVycm9yIiwidHJhbnNpdGlvblRvIiwib25Db21wbGV0ZSIsIm9uQWJvcnQiLCJjb25maXJtVHJhbnNpdGlvbiIsInVwZGF0ZVJvdXRlIiwiZW5zdXJlVVJMIiwidXBkYXRlZCIsImFjdGl2YXRlZCIsImRlYWN0aXZhdGVkIiwicmVzb2x2ZVF1ZXVlIiwiZXh0cmFjdExlYXZlR3VhcmRzIiwiYmVmb3JlSG9va3MiLCJleHRyYWN0VXBkYXRlSG9va3MiLCJoYXNBc3luYyIsImNpZCIsInJlc29sdmVkRGVmIiwicmVzb2x2ZWQiLCJjb21wIiwicG9zdEVudGVyQ2JzIiwiY2JzIiwiYmluZEVudGVyR3VhcmQiLCJleHRyYWN0RW50ZXJHdWFyZHMiLCJyZXNvbHZlSG9va3MiLCJhZnRlckhvb2tzIiwiSFRNTDVIaXN0b3J5IiwiSGlzdG9yeSQkMSIsImV4cGVjdFNjcm9sbCIsImluaXRMb2NhdGlvbiIsImdldExvY2F0aW9uIiwiX19wcm90b19fIiwiZ28iLCJmcm9tUm91dGUiLCJnZXRDdXJyZW50TG9jYXRpb24iLCJIYXNoSGlzdG9yeSIsImZhbGxiYWNrIiwiY2hlY2tGYWxsYmFjayIsImVuc3VyZVNsYXNoIiwic2V0dXBMaXN0ZW5lcnMiLCJzdXBwb3J0c1Njcm9sbCIsImdldEhhc2giLCJyZXBsYWNlSGFzaCIsInB1c2hIYXNoIiwiQWJzdHJhY3RIaXN0b3J5IiwidGFyZ2V0SW5kZXgiLCJhcHBzIiwibWF0Y2hlciIsInByb3RvdHlwZUFjY2Vzc29ycyIsInJlZ2lzdGVySG9vayIsImluaXQiLCJzZXR1cEhhc2hMaXN0ZW5lciIsIl9yb3V0ZSIsImJlZm9yZUVhY2giLCJiZWZvcmVSZXNvbHZlIiwiYWZ0ZXJFYWNoIiwiYmFjayIsImZvcndhcmQiLCJnZXRNYXRjaGVkQ29tcG9uZW50cyIsImNyZWF0ZUhyZWYiLCJub3JtYWxpemVkVG8iLCJpbnN0YWxsIiwiaXNEZWYiLCJyZWdpc3Rlckluc3RhbmNlIiwiY2FsbFZhbCIsIl9wYXJlbnRWbm9kZSIsIl9yb3V0ZXIiLCJkZWZpbmVSZWFjdGl2ZSIsImRlc3Ryb3llZCIsInN0cmF0cyIsIm9wdGlvbk1lcmdlU3RyYXRlZ2llcyIsImJlZm9yZVJvdXRlRW50ZXIiLCJiZWZvcmVSb3V0ZUxlYXZlIiwiYmVmb3JlUm91dGVVcGRhdGUiLCJjcmVhdGVkIiwibG9jYWxzIiwibGlzdFRvU3R5bGVzIiwicGFyZW50SWQiLCJzdHlsZXMiLCJuZXdTdHlsZXMiLCJjc3MiLCJtZWRpYSIsInNvdXJjZU1hcCIsImhhc0RvY3VtZW50IiwiREVCVUciLCJzdHlsZXNJbkRvbSIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwic2luZ2xldG9uRWxlbWVudCIsInNpbmdsZXRvbkNvdW50ZXIiLCJpc1Byb2R1Y3Rpb24iLCJzc3JJZEtleSIsImlzT2xkSUUiLCJhZGRTdHlsZXNDbGllbnQiLCJfaXNQcm9kdWN0aW9uIiwiX29wdGlvbnMiLCJhZGRTdHlsZXNUb0RvbSIsIm5ld0xpc3QiLCJtYXlSZW1vdmUiLCJkb21TdHlsZSIsInJlZnMiLCJhZGRTdHlsZSIsImNyZWF0ZVN0eWxlRWxlbWVudCIsInN0eWxlRWxlbWVudCIsInBhcmVudE5vZGUiLCJzdHlsZUluZGV4IiwiYXBwbHlUb1NpbmdsZXRvblRhZyIsImFwcGx5VG9UYWciLCJuZXdPYmoiLCJ0ZXh0U3RvcmUiLCJyZXBsYWNlVGV4dCIsInJlcGxhY2VtZW50Iiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjc3NOb2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJjaGlsZE5vZGVzIiwiaW5zZXJ0QmVmb3JlIiwic2V0QXR0cmlidXRlIiwic3NySWQiLCJmaXJzdENoaWxkIiwicyIsInUiLCJkIiwidyIsIl9sZW5ndGgiLCJFIiwiTiIsImdldFRpbWUiLCJEIiwiTCIsIk0iLCJJIiwicHJvZHVjdGlvblRpcCIsImRldnRvb2xzIiwiZXJyb3JIYW5kbGVyIiwid2FybkhhbmRsZXIiLCJpZ25vcmVkRWxlbWVudHMiLCJrZXlDb2RlcyIsImlzUmVzZXJ2ZWRUYWciLCJpc1Jlc2VydmVkQXR0ciIsImlzVW5rbm93bkVsZW1lbnQiLCJnZXRUYWdOYW1lc3BhY2UiLCJwYXJzZVBsYXRmb3JtVGFnTmFtZSIsIm11c3RVc2VQcm9wIiwiX2xpZmVjeWNsZUhvb2tzIiwiSCIsInoiLCJWIiwiV1hFbnZpcm9ubWVudCIsInBsYXRmb3JtIiwiSiIsInEiLCJaIiwiWCIsIlkiLCJ3YXRjaCIsIlEiLCJlZSIsInRlIiwiZW52IiwiVlVFX0VOViIsIm5lIiwiX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyIsImllIiwib2UiLCJSZWZsZWN0Iiwib3duS2V5cyIsImFlIiwic2UiLCJjZSIsInN1YnMiLCJhZGRTdWIiLCJyZW1vdmVTdWIiLCJkZXBlbmQiLCJhZGREZXAiLCJ1ZSIsImxlIiwiZmUiLCJwZSIsImVsbSIsIm5zIiwiZm5Db250ZXh0IiwiZm5PcHRpb25zIiwiZm5TY29wZUlkIiwiY29tcG9uZW50T3B0aW9ucyIsImlzUm9vdEluc2VydCIsImlzQ29tbWVudCIsImlzQ2xvbmVkIiwiaXNPbmNlIiwiYXN5bmNGYWN0b3J5IiwiYXN5bmNNZXRhIiwiaXNBc3luY1BsYWNlaG9sZGVyIiwiZGUiLCJ2ZSIsImhlIiwibWUiLCJ5ZSIsImdlIiwiX19vYl9fIiwib2JzZXJ2ZUFycmF5IiwiZGVwIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImJlIiwiJGUiLCJ3ZSIsInZtQ291bnQiLCJ3YWxrIiwiQ2UiLCJpc0V4dGVuc2libGUiLCJfaXNWdWUiLCJ4ZSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtlIiwiQWUiLCJPZSIsIlNlIiwiVGUiLCJFZSIsIk5lIiwiaW5qZWN0IiwicHJvdmlkZSIsImplIiwiRGUiLCJfYmFzZSIsImV4dGVuZHMiLCJtaXhpbnMiLCJMZSIsIk1lIiwiUGUiLCJwcm9wc0RhdGEiLCJfcHJvcHMiLCJJZSIsIkZlIiwiUmUiLCJlcnJvckNhcHR1cmVkIiwiQmUiLCJIZSIsIl9oYW5kbGVkIiwiVWUiLCJ6ZSIsIlZlIiwiS2UiLCJKZSIsInFlIiwiV2UiLCJNdXRhdGlvbk9ic2VydmVyIiwic2V0SW1tZWRpYXRlIiwiWmUiLCJHZSIsIlhlIiwib2JzZXJ2ZSIsImNoYXJhY3RlckRhdGEiLCJZZSIsIlFlIiwiZXQiLCJpc0Zyb3plbiIsInR0IiwicGFzc2l2ZSIsIm50IiwiZm5zIiwicnQiLCJtZXJnZWQiLCJvdCIsInN0IiwiX2lzVkxpc3QiLCJjdCIsIl9wcm92aWRlZCIsInV0IiwiZnQiLCIkc3RhYmxlIiwiJGtleSIsIiRoYXNOb3JtYWwiLCJwdCIsImR0IiwicHJveHkiLCJ2dCIsImh0IiwiJHNjb3BlZFNsb3RzIiwibXQiLCJ5dCIsImJ0IiwiX3N0YXRpY1RyZWVzIiwid3QiLCJfcmVuZGVyUHJveHkiLCIkdCIsIkN0IiwieHQiLCJrdCIsIkF0IiwiT3QiLCJTdCIsIl9vIiwiX3EiLCJfZiIsIl9iIiwiX3UiLCJfZyIsIl9wIiwiVHQiLCJfb3JpZ2luYWwiLCJsaXN0ZW5lcnMiLCJpbmplY3Rpb25zIiwic2xvdHMiLCJzY29wZWRTbG90cyIsIlB0IiwiRXQiLCJOdCIsImp0IiwiX2lzRGVzdHJveWVkIiwia2VlcEFsaXZlIiwiX2lzQ29tcG9uZW50IiwiaW5saW5lVGVtcGxhdGUiLCJXdCIsIiRtb3VudCIsIl9yZW5kZXJDaGlsZHJlbiIsIl92bm9kZSIsIiRhdHRycyIsIiRsaXN0ZW5lcnMiLCJfcHJvcEtleXMiLCJfcGFyZW50TGlzdGVuZXJzIiwicXQiLCIkZm9yY2VVcGRhdGUiLCJpbnNlcnQiLCJfaXNNb3VudGVkIiwiWXQiLCJlbiIsIlh0IiwiZGVzdHJveSIsIl9kaXJlY3RJbmFjdGl2ZSIsIkd0IiwiJGNoaWxkcmVuIiwiJGRlc3Ryb3kiLCJEdCIsIkx0IiwiZXJyb3JDb21wIiwiSHQiLCJvd25lcnMiLCJsb2FkaW5nIiwibG9hZGluZ0NvbXAiLCIkb24iLCJCdCIsIiRuIiwiYWJzdHJhY3QiLCJfbWVyZ2VkIiwiTXQiLCJwcmUiLCJzdHlsZSIsIlJ0IiwiVXQiLCJ6dCIsIlZ0IiwiS3QiLCIkb2ZmIiwiSnQiLCJadCIsIl9oYXNIb29rRXZlbnQiLCJRdCIsInRuIiwibm4iLCJybiIsImFuIiwic24iLCJjbiIsImNyZWF0ZUV2ZW50IiwidGltZVN0YW1wIiwidW4iLCJydW4iLCJfd2F0Y2hlciIsImVtaXQiLCJsbiIsIl93YXRjaGVycyIsInVzZXIiLCJsYXp5Iiwic3luYyIsImRpcnR5IiwiZGVwcyIsIm5ld0RlcHMiLCJkZXBJZHMiLCJuZXdEZXBJZHMiLCJnZXR0ZXIiLCJjbGVhbnVwRGVwcyIsInRlYXJkb3duIiwiX2lzQmVpbmdEZXN0cm95ZWQiLCJwbiIsImRuIiwiaG4iLCJtbiIsInluIiwiZ24iLCJfY29tcHV0ZWRXYXRjaGVycyIsIiR3YXRjaCIsImJuIiwic3VwZXIiLCJzdXBlck9wdGlvbnMiLCJzZWFsZWRPcHRpb25zIiwiZXh0ZW5kT3B0aW9ucyIsInduIiwiX2luaXQiLCJ4biIsImtuIiwiQW4iLCJPbiIsIl91aWQiLCJfY29tcG9uZW50VGFnIiwiJHJlZnMiLCJfZXZlbnRzIiwiX2RhdGEiLCJ2biIsIiRzZXQiLCIkZGVsZXRlIiwiaW1tZWRpYXRlIiwiJG9uY2UiLCJfdXBkYXRlIiwiJGVsIiwiX19wYXRjaF9fIiwiX192dWVfXyIsIl9yZW5kZXIiLCJTbiIsIlRuIiwiS2VlcEFsaXZlIiwiaW5jbHVkZSIsImV4Y2x1ZGUiLCJtb3VudGVkIiwibWVyZ2VPcHRpb25zIiwib2JzZXJ2YWJsZSIsIl9pbnN0YWxsZWRQbHVnaW5zIiwiX0N0b3IiLCJDbiIsIkVuIiwiTm4iLCJqbiIsIkRuIiwiTG4iLCJJbiIsIkZuIiwiUG4iLCJSbiIsIkhuIiwiVW4iLCJ6biIsIlZuIiwiS24iLCJzdmciLCJtYXRoIiwiSm4iLCJxbiIsIlduIiwiWm4iLCJHbiIsIlhuIiwiWW4iLCJRbiIsImNyZWF0ZUVsZW1lbnROUyIsImNyZWF0ZUNvbW1lbnQiLCJuZXh0U2libGluZyIsInRhZ05hbWUiLCJzZXRUZXh0Q29udGVudCIsInRleHRDb250ZW50Iiwic2V0U3R5bGVTY29wZSIsImVyIiwidHIiLCJuciIsInJyIiwiaXIiLCJvciIsImFyIiwic3IiLCJ1ciIsIm9sZFZhbHVlIiwib2xkQXJnIiwiZnIiLCJjb21wb25lbnRVcGRhdGVkIiwiaW5zZXJ0ZWQiLCJjciIsIm1vZGlmaWVycyIsImxyIiwicHIiLCJkciIsImluaGVyaXRBdHRycyIsInZyIiwicmVtb3ZlQXR0cmlidXRlTlMiLCJyZW1vdmVBdHRyaWJ1dGUiLCJociIsIk1uIiwic2V0QXR0cmlidXRlTlMiLCJfX2llcGgiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibXIiLCJ5ciIsIkJuIiwiX3RyYW5zaXRpb25DbGFzc2VzIiwiX3ByZXZDbGFzcyIsImdyIiwiX3IiLCJiciIsIiRyIiwid3IiLCJDciIsInhyIiwia3IiLCJBciIsIk9yIiwiU3IiLCJUciIsIkVyIiwiUnIiLCJkeW5hbWljIiwiTnIiLCJkeW5hbWljQXR0cnMiLCJqciIsImF0dHJzTWFwIiwiYXR0cnNMaXN0IiwiRHIiLCJpc0R5bmFtaWNBcmciLCJMciIsIk1yIiwicmlnaHQiLCJtaWRkbGUiLCJuYXRpdmUiLCJuYXRpdmVFdmVudHMiLCJldmVudHMiLCJJciIsIkZyIiwiUHIiLCJIciIsIkJyIiwiZXhwIiwienIiLCJWciIsIlVyIiwiSnIiLCJLciIsInFyIiwiR3IiLCJRciIsIlhyIiwiWXIiLCJfd3JhcHBlciIsIm93bmVyRG9jdW1lbnQiLCJlaSIsInRpIiwibmkiLCJyaSIsImlpIiwiaW5uZXJIVE1MIiwiYWN0aXZlRWxlbWVudCIsIl92TW9kaWZpZXJzIiwib2kiLCJhaSIsInNpIiwiY2kiLCJzdGF0aWNTdHlsZSIsInVpIiwibGkiLCJmaSIsInBpIiwic2V0UHJvcGVydHkiLCJ2aSIsImRpIiwiaGkiLCJub3JtYWxpemVkU3R5bGUiLCJtaSIsInlpIiwiZ2kiLCJjbGFzc0xpc3QiLCJiaSIsIiRpIiwiZW50ZXJDbGFzcyIsImVudGVyVG9DbGFzcyIsImVudGVyQWN0aXZlQ2xhc3MiLCJsZWF2ZUNsYXNzIiwibGVhdmVUb0NsYXNzIiwibGVhdmVBY3RpdmVDbGFzcyIsIndpIiwiQ2kiLCJ4aSIsImtpIiwiQWkiLCJPaSIsIlNpIiwib250cmFuc2l0aW9uZW5kIiwib253ZWJraXR0cmFuc2l0aW9uZW5kIiwib25hbmltYXRpb25lbmQiLCJvbndlYmtpdGFuaW1hdGlvbmVuZCIsIlRpIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiRWkiLCJOaSIsImppIiwiRGkiLCJNaSIsInByb3BDb3VudCIsIkxpIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsIklpIiwiaGFzVHJhbnNmb3JtIiwiRmkiLCJQaSIsIl9sZWF2ZUNiIiwiY2FuY2VsbGVkIiwidHJhbnNpdGlvbiIsIl9lbnRlckNiIiwiYXBwZWFyQ2xhc3MiLCJhcHBlYXJUb0NsYXNzIiwiYXBwZWFyQWN0aXZlQ2xhc3MiLCJlbnRlciIsImFmdGVyRW50ZXIiLCJlbnRlckNhbmNlbGxlZCIsImJlZm9yZUFwcGVhciIsImFwcGVhciIsImFmdGVyQXBwZWFyIiwiYXBwZWFyQ2FuY2VsbGVkIiwiQmkiLCJzaG93IiwiX3BlbmRpbmciLCJIaSIsIlJpIiwiYmVmb3JlTGVhdmUiLCJsZWF2ZSIsImFmdGVyTGVhdmUiLCJsZWF2ZUNhbmNlbGxlZCIsImRlbGF5TGVhdmUiLCJVaSIsInppIiwibm9kZU9wcyIsImFjdGl2YXRlIiwicGVuZGluZ0luc2VydCIsInBvc3RwYXRjaCIsImhhc0NoaWxkTm9kZXMiLCJoYXNBdHRyaWJ1dGUiLCJ2bW9kZWwiLCJYaSIsIlZpIiwiX3ZPcHRpb25zIiwiS2kiLCJXaSIsIlppIiwiR2kiLCJxaSIsIkppIiwic2VsZWN0ZWRJbmRleCIsImluaXRFdmVudCIsImRpc3BhdGNoRXZlbnQiLCJZaSIsIlFpIiwiX192T3JpZ2luYWxEaXNwbGF5IiwiZGlzcGxheSIsInVuYmluZCIsImVvIiwibm8iLCJybyIsImlvIiwib28iLCJhbyIsIl9sZWF2aW5nIiwic28iLCJtb3ZlQ2xhc3MiLCJjbyIsIl9tb3ZlQ2IiLCJ1byIsIm5ld1BvcyIsImxvIiwicG9zIiwibW92ZWQiLCJXZWJraXRUcmFuc2Zvcm0iLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJmbyIsIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uR3JvdXAiLCJiZWZvcmVNb3VudCIsImtlcHQiLCJwcmV2Q2hpbGRyZW4iLCJyZW1vdmVkIiwiaGFzTW92ZSIsIl9yZWZsb3ciLCJvZmZzZXRIZWlnaHQiLCJwcm9wZXJ0eU5hbWUiLCJfaGFzTW92ZSIsImNsb25lTm9kZSIsIkhUTUxVbmtub3duRWxlbWVudCIsIkhUTUxFbGVtZW50IiwieW8iLCJwbyIsInZvIiwiaG8iLCJtbyIsInN0YXRpY0tleXMiLCJ0cmFuc2Zvcm1Ob2RlIiwiY2xhc3NCaW5kaW5nIiwiZ2VuRGF0YSIsInN0eWxlQmluZGluZyIsImJvIiwiJG8iLCJ3byIsIkNvIiwieG8iLCJrbyIsIkFvIiwiT28iLCJTbyIsIlRvIiwiRW8iLCJObyIsImpvIiwiRG8iLCJMbyIsIk1vIiwiSW8iLCJGbyIsIlBvIiwiUm8iLCJIbyIsIkJvIiwiVW8iLCJ6byIsIlZvIiwiS28iLCJKbyIsInFvIiwiV28iLCJabyIsIkdvIiwiWG8iLCJZbyIsIlFvIiwiZWEiLCJ0YSIsIm5hIiwicmEiLCJpYSIsIm9hIiwiYWEiLCJzYSIsImNhIiwibWEiLCJyYXdBdHRyc01hcCIsImZhIiwic2xvdFNjb3BlIiwic2xvdFRhcmdldCIsInNsb3RUYXJnZXREeW5hbWljIiwidmEiLCJzbG90TmFtZSIsImhhc0JpbmRpbmdzIiwiaGEiLCJjYW1lbCIsInBhIiwiaXRlcmF0b3IxIiwiaXRlcmF0b3IyIiwiZGEiLCJpZkNvbmRpdGlvbnMiLCJ5YSIsImdhIiwiX2EiLCIkYSIsIndhIiwiYmEiLCJwcmVUcmFuc2Zvcm1Ob2RlIiwicHJvY2Vzc2VkIiwiaWYiLCJibG9jayIsImVsc2UiLCJlbHNlaWYiLCJDYSIsImV4cGVjdEhUTUwiLCJodG1sIiwiaXNQcmVUYWciLCJpc1VuYXJ5VGFnIiwiY2FuQmVMZWZ0T3BlblRhZyIsInhhIiwiQWEiLCJPYSIsIlNhIiwiVGEiLCJlc2MiLCJ0YWIiLCJzcGFjZSIsInVwIiwiZG93biIsIkVhIiwiTmEiLCJqYSIsInN0b3AiLCJwcmV2ZW50IiwiY3RybCIsImFsdCIsIkRhIiwiTGEiLCJNYSIsIklhIiwid3JhcExpc3RlbmVycyIsIndyYXBEYXRhIiwiY2xvYWsiLCJGYSIsImRhdGFHZW5GbnMiLCJtYXliZUNvbXBvbmVudCIsIm9uY2VJZCIsIlBhIiwiUmEiLCJzdGF0aWNSb290Iiwic3RhdGljUHJvY2Vzc2VkIiwiSGEiLCJvbmNlUHJvY2Vzc2VkIiwiQmEiLCJmb3JQcm9jZXNzZWQiLCJ6YSIsImlmUHJvY2Vzc2VkIiwiVWEiLCJxYSIsIkdhIiwiVmEiLCJzdGF0aWNJbkZvciIsIkthIiwiSmEiLCJXYSIsIlphIiwiWGEiLCJZYSIsImNvZGUiLCJRYSIsImRlbGltaXRlcnMiLCJlcyIsInRzIiwicHJlc2VydmVXaGl0ZXNwYWNlIiwid2hpdGVzcGFjZSIsImZvcmJpZGRlbiIsInNob3VsZEtlZXBDb21tZW50IiwiY29tbWVudCIsInVuYXJ5U2xhc2giLCJzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYiLCJzaG91bGREZWNvZGVOZXdsaW5lcyIsImxvd2VyQ2FzZWRUYWciLCJjb21tZW50cyIsIm91dHB1dFNvdXJjZVJhbmdlIiwibGEiLCJvcHRpbWl6ZSIsInN0YXRpYyIsImthIiwiYXN0IiwiZXJyb3JzIiwidGlwcyIsImNvbXBpbGVUb0Z1bmN0aW9ucyIsInJzIiwib3MiLCJhcyIsInNzIiwiY3MiLCJvdXRlckhUTUwiLCJkZXZ0b29sSG9vayIsImZvckVhY2hWYWx1ZSIsIk1vZHVsZSIsInJhd01vZHVsZSIsInJ1bnRpbWUiLCJfY2hpbGRyZW4iLCJfcmF3TW9kdWxlIiwicmF3U3RhdGUiLCJwcm90b3R5cGVBY2Nlc3NvcnMkMSIsIm5hbWVzcGFjZWQiLCJhZGRDaGlsZCIsImdldENoaWxkIiwiZm9yRWFjaENoaWxkIiwiZm9yRWFjaEdldHRlciIsImZvckVhY2hBY3Rpb24iLCJmb3JFYWNoTXV0YXRpb24iLCJNb2R1bGVDb2xsZWN0aW9uIiwicmF3Um9vdE1vZHVsZSIsInJlZ2lzdGVyIiwidGFyZ2V0TW9kdWxlIiwibmV3TW9kdWxlIiwiZ2V0TmFtZXNwYWNlIiwibmFtZXNwYWNlIiwicmF3Q2hpbGRNb2R1bGUiLCJ1bnJlZ2lzdGVyIiwicGx1Z2lucyIsIl9jb21taXR0aW5nIiwiX2FjdGlvbnMiLCJfYWN0aW9uU3Vic2NyaWJlcnMiLCJfbXV0YXRpb25zIiwiX3dyYXBwZWRHZXR0ZXJzIiwiX21vZHVsZXMiLCJfbW9kdWxlc05hbWVzcGFjZU1hcCIsIl9zdWJzY3JpYmVycyIsIl93YXRjaGVyVk0iLCJkaXNwYXRjaCIsImluc3RhbGxNb2R1bGUiLCJyZXNldFN0b3JlVk0iLCJfZGV2dG9vbEhvb2siLCJ0YXJnZXRTdGF0ZSIsInN1YnNjcmliZSIsIm11dGF0aW9uIiwiZGV2dG9vbFBsdWdpbiIsImdlbmVyaWNTdWJzY3JpYmUiLCJyZXNldFN0b3JlIiwiaG90Iiwib2xkVm0iLCJ3cmFwcGVkR2V0dGVycyIsIiQkc3RhdGUiLCJlbmFibGVTdHJpY3RNb2RlIiwiX3dpdGhDb21taXQiLCJpc1Jvb3QiLCJwYXJlbnRTdGF0ZSIsImdldE5lc3RlZFN0YXRlIiwibW9kdWxlTmFtZSIsImxvY2FsIiwibm9OYW1lc3BhY2UiLCJfdHlwZSIsIl9wYXlsb2FkIiwidW5pZnlPYmplY3RTdHlsZSIsImdldHRlcnNQcm94eSIsInNwbGl0UG9zIiwibG9jYWxUeXBlIiwibWFrZUxvY2FsR2V0dGVycyIsIm1ha2VMb2NhbENvbnRleHQiLCJyZWdpc3Rlck11dGF0aW9uIiwicm9vdEdldHRlcnMiLCJyZWdpc3RlckFjdGlvbiIsInJhd0dldHRlciIsInJlZ2lzdGVyR2V0dGVyIiwidnVleEluaXQiLCJhcHBseU1peGluIiwic3ViIiwic3Vic2NyaWJlQWN0aW9uIiwicmVnaXN0ZXJNb2R1bGUiLCJwcmVzZXJ2ZVN0YXRlIiwidW5yZWdpc3Rlck1vZHVsZSIsImhvdFVwZGF0ZSIsIm5ld09wdGlvbnMiLCJjb21taXR0aW5nIiwibWFwU3RhdGUiLCJub3JtYWxpemVOYW1lc3BhY2UiLCJzdGF0ZXMiLCJub3JtYWxpemVNYXAiLCJnZXRNb2R1bGVCeU5hbWVzcGFjZSIsInZ1ZXgiLCJtYXBNdXRhdGlvbnMiLCJtYXBHZXR0ZXJzIiwibWFwQWN0aW9ucyIsImNyZWF0ZU5hbWVzcGFjZWRIZWxwZXJzIiwiaGVscGVyIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwibG9hZGVkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImRlZmluaXRpb24iLCJnbG9iYWxUaGlzIiwibm1kIiwic2NyaXB0VXJsIiwiaW1wb3J0U2NyaXB0cyIsImN1cnJlbnRTY3JpcHQiLCJzY3JpcHRzIiwiVHJhbnNsYXRpb24iXSwibWFwcGluZ3MiOiI7bUdBd0JlLENBQ2JBLFNBQVUsQ0FDUkMsVUFEUSxXQUVOLE1BQTJDLFFBQXZDQyxLQUFLQyxRQUFRQyxzQkFDZixHQUFVRixLQUFLQyxRQUFRQyxzQkFHYyxRQUFuQ0YsS0FBS0MsUUFBUUUsa0JBQ2YsR0FBVUgsS0FBS0MsUUFBUUUsa0JBR2xCLE1BRVRDLGdCQVpRLFdBYU4sSUFBTUMsRUFBZUwsS0FBS0MsUUFBUUssaUJBQWlCQyxNQUFNLEtBQ25EQyxFQUFhUixLQUFLQyxRQUFRUSxlQUFlRixNQUFNLEtBRWpERyxFQUFPLEdBS1gsT0FKQUwsRUFBYU0sU0FBUSxTQUFDQyxFQUFXQyxHQUMvQixJQUFNQyxFQUFRRixFQUFVRyxPQUFPQyxNQUFNUixFQUFXSyxHQUFPRSxPQUFPRSxPQUg5QyxNQUdpRUEsUUFDakZQLEdBQVFBLEVBQUtPLE9BQUwsTUFBb0JILEVBQVVBLEtBRWpDSixHQUVUUSxlQXZCUSxXQXdCTixRQUFTbEIsS0FBS0MsUUFBUWtCLG1CLHNGQ3pCYixDQUNiQyxRQUFTLENBQ1BDLE1BRE8sU0FDREMsR0FDSixPQUFPdEIsS0FBS3VCLE9BQU9DLE1BQU1DLGFBQWFILE8sOEVDSDVDLElBVVVJLEUs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QVEsSUFBSyxFQUFRLElBQUssRUFBUSxJQUFLLEVBQVEsSUFBSyxFQUFRLElBQzFFLEVBQVEsSUFBTSxFQUFRLElBQUssRUFBUSxJQUFLLEVBQVEsSUFBSyxFQUFRLElBQUssRUFBUSxJQUMxRSxFQUFRLElBQU0sRUFBUSxJQUN0QixFQUFRLElBQU0sRUFBUSxJQUN0QixFQUFRLElBQU0sRUFBUSxJQUFLLEVBQVEsSUFBSyxFQUFRLElBQ2hELEVBQVEsSUFBTSxFQUFRLElBQUssRUFBUSxJQUFLLEVBQVEsSUFDaEQsRUFBUSxJQUFNLEVBQVEsSUFBSyxFQUFRLElBQUssRUFBUSxJQUNoRCxFQUFRLElBQU0sRUFBUSxJQUFLLEVBQVEsSUFBSyxFQUFRLElBQ2hELEVBQVEsSUFBTSxFQUFRLElBQ3RCLEVBQVEsSUFBTSxFQUFRLElBQUssRUFBUSxJQUFLLEVBQVEsSUFBSyxFQUFRLElBQUssRUFBUSxJQUMxRSxFQUFRLElBQU0sRUFBUSxJQUFLLEVBQVEsSUFBSyxFQUFRLElBQUssRUFBUSxJQUFLLEVBQVEsSUFDMUUsRUFBUSxJQUFNLEVBQVEsSUFBSyxFQUFRLElBQUssRUFBUSxJQUNoRCxFQUFRLElBQU0sRUFBUSxJQUFLLEVBQVEsSUFBSyxFQUFRLElBQ2hELEVBQVEsSUFBTSxFQUFRLElBQUssRUFBUSxJQUNuQyxFQUFRLEtBQU0sRUFBUSxLQUN0QixFQUFRLEtBQU0sRUFBUSxLQUN0QixFQUFRLEtBRVIsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQ3pDLEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUN6QyxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQ3hELEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDeEQsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN4RCxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN2RSxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN2RSxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQ3hELEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDeEQsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN4RCxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN2RSxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN2RSxFQUFVLElBQU0sRUFBVSxJQUMxQixFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFDekMsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDdkUsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDdkUsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN4RCxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQ3hELEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUN6QyxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFDekMsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQ3pDLEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUN6QyxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQ3hELEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDeEQsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQ3pDLEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUN6QyxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDdEYsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQ3RGLEVBQVUsSUFBTSxFQUFVLElBQzFCLEVBQVUsSUFBTSxFQUFVLElB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Q3JDLElBQUs4cUYsR0FBYTlxRixJQUNiQSxFQUFTZ3JGLGdCQUNaRixFQUFZOXFGLEVBQVNnckYsY0FBY3A1QyxNQUMvQms1QyxHQUFXLENBQ2YsSUFBSUcsRUFBVWpyRixFQUFTZzFELHFCQUFxQixVQUN6Q2kyQixFQUFRLzRGLFNBQVE0NEYsRUFBWUcsRUFBUUEsRUFBUS80RixPQUFTLEdBQUcwL0MsS0FLN0QsSUFBS2s1QyxFQUFXLE1BQU0sSUFBSW4wRSxNQUFNLHlEQUNoQ20wRSxFQUFZQSxFQUFVOWhGLFFBQVEsT0FBUSxJQUFJQSxRQUFRLFFBQVMsSUFBSUEsUUFBUSxZQUFhLEtBQ3BGc2hGLEVBQW9CdHpDLEVBQUk4ekMsRyxzQkNTeEIsSSxJQUFBLFUsSUFDQSxVLElBQ0EsVSxJQUNBLFUsSUFDQSxVLG1EQUVBbDRGLFVBQUl1cUMsTUFBTSt0RCxXQUVWLElBQUl0NEYsVUFBSSxDQUNOdXdELGlCQUNBMStDLGdCQUNBdkYsR0FBSSxhQUNKNm5DLFNBQVUsVUFDVjZhLFdBQVksQ0FBQ3NLLGVBQ2JzdEIsWUFOTSxXQU9Kdm9GLEtBQUt1QixPQUFPcTBGLFNBQVMsdUIiLCJmaWxlIjoic3RvY2suYnVuZGxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wdXRlZDoge1xuICAgIHRodW1ibmFpbCgpIHtcbiAgICAgIGlmICh0aGlzLnByb2R1Y3QuY29tYmluYXRpb25fdGh1bWJuYWlsICE9PSAnTi9BJykge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5wcm9kdWN0LmNvbWJpbmF0aW9uX3RodW1ibmFpbH1gO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wcm9kdWN0LnByb2R1Y3RfdGh1bWJuYWlsICE9PSAnTi9BJykge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5wcm9kdWN0LnByb2R1Y3RfdGh1bWJuYWlsfWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgY29tYmluYXRpb25OYW1lKCkge1xuICAgICAgY29uc3QgY29tYmluYXRpb25zID0gdGhpcy5wcm9kdWN0LmNvbWJpbmF0aW9uX25hbWUuc3BsaXQoJywnKTtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB0aGlzLnByb2R1Y3QuYXR0cmlidXRlX25hbWUuc3BsaXQoJywnKTtcbiAgICAgIGNvbnN0IHNlcGFyYXRvciA9ICcgLSAnO1xuICAgICAgbGV0IGF0dHIgPSAnJztcbiAgICAgIGNvbWJpbmF0aW9ucy5mb3JFYWNoKChhdHRyaWJ1dGUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXR0cmlidXRlLnRyaW0oKS5zbGljZShhdHRyaWJ1dGVzW2luZGV4XS50cmltKCkubGVuZ3RoICsgc2VwYXJhdG9yLmxlbmd0aCk7XG4gICAgICAgIGF0dHIgKz0gYXR0ci5sZW5ndGggPyBgIC0gJHt2YWx1ZX1gIDogdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhdHRyO1xuICAgIH0sXG4gICAgaGFzQ29tYmluYXRpb24oKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnByb2R1Y3QuY29tYmluYXRpb25faWQ7XG4gICAgfSxcbiAgfSxcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5leHBvcnQgZGVmYXVsdCB7XG4gIG1ldGhvZHM6IHtcbiAgICB0cmFucyhrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS50cmFuc2xhdGlvbnNba2V5XTtcbiAgICB9LFxuICB9LFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbmltcG9ydCBWdWUgZnJvbSAndnVlJztcbmltcG9ydCBWdWVSb3V0ZXIgZnJvbSAndnVlLXJvdXRlcic7XG5pbXBvcnQgT3ZlcnZpZXcgZnJvbSAnQGFwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL292ZXJ2aWV3L2luZGV4JztcbmltcG9ydCBNb3ZlbWVudHMgZnJvbSAnQGFwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL21vdmVtZW50cy9pbmRleCc7XG5cblZ1ZS51c2UoVnVlUm91dGVyKTtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IFZ1ZVJvdXRlcih7XG4gIG1vZGU6ICdoaXN0b3J5JyxcbiAgYmFzZTogKCgpID0+IHtcbiAgICBjb25zdCBoYXNJbmRleCA9IC8oaW5kZXhcXC5waHApLy5leGVjKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIHJldHVybiBgJHt3aW5kb3cuZGF0YS5iYXNlVXJsfSR7aGFzSW5kZXggPyAnL2luZGV4LnBocCcgOiAnJ30vc2VsbC9zdG9ja3NgO1xuICB9KSgpLFxuICByb3V0ZXM6IFtcbiAgICB7XG4gICAgICBwYXRoOiAnLycsXG4gICAgICBuYW1lOiAnb3ZlcnZpZXcnLFxuICAgICAgY29tcG9uZW50OiBPdmVydmlldyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHBhdGg6ICcvbW92ZW1lbnRzJyxcbiAgICAgIG5hbWU6ICdtb3ZlbWVudHMnLFxuICAgICAgY29tcG9uZW50OiBNb3ZlbWVudHMsXG4gICAgfSxcbiAgXSxcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IFZ1ZVJlc291cmNlIGZyb20gJ3Z1ZS1yZXNvdXJjZSc7XG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICdAYXBwL3BhZ2VzL3N0b2NrL3N0b3JlL211dGF0aW9uLXR5cGVzJztcbmltcG9ydCB7c2hvd0dyb3dsfSBmcm9tICdAYXBwL3V0aWxzL2dyb3dsJztcbmltcG9ydCB7RXZlbnRCdXN9IGZyb20gJ0BhcHAvdXRpbHMvZXZlbnQtYnVzJztcblxuVnVlLnVzZShWdWVSZXNvdXJjZSk7XG5cbmV4cG9ydCBjb25zdCBnZXRTdG9jayA9ICh7Y29tbWl0fSwgcGF5bG9hZCkgPT4ge1xuICBjb25zdCB1cmwgPSB3aW5kb3cuZGF0YS5hcGlTdG9ja1VybDtcbiAgVnVlLmh0dHAuZ2V0KHVybCwge1xuICAgIHBhcmFtczoge1xuICAgICAgb3JkZXI6IHBheWxvYWQub3JkZXIsXG4gICAgICBwYWdlX3NpemU6IHBheWxvYWQucGFnZV9zaXplLFxuICAgICAgcGFnZV9pbmRleDogcGF5bG9hZC5wYWdlX2luZGV4LFxuICAgICAga2V5d29yZHM6IHBheWxvYWQua2V5d29yZHMgPyBwYXlsb2FkLmtleXdvcmRzIDogW10sXG4gICAgICBzdXBwbGllcl9pZDogcGF5bG9hZC5zdXBwbGllcnMgPyBwYXlsb2FkLnN1cHBsaWVycyA6IFtdLFxuICAgICAgY2F0ZWdvcnlfaWQ6IHBheWxvYWQuY2F0ZWdvcmllcyA/IHBheWxvYWQuY2F0ZWdvcmllcyA6IFtdLFxuICAgICAgYWN0aXZlOiBwYXlsb2FkLmFjdGl2ZSAhPT0gJ251bGwnID8gcGF5bG9hZC5hY3RpdmUgOiBbXSxcbiAgICAgIGxvd19zdG9jazogcGF5bG9hZC5sb3dfc3RvY2ssXG4gICAgfSxcbiAgfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICBjb21taXQodHlwZXMuTE9BRElOR19TVEFURSwgZmFsc2UpO1xuICAgIGNvbW1pdCh0eXBlcy5TRVRfVE9UQUxfUEFHRVMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdUb3RhbC1QYWdlcycpKTtcbiAgICBjb21taXQodHlwZXMuQUREX1BST0RVQ1RTLCByZXNwb25zZS5ib2R5KTtcbiAgfSwgKGVycm9yKSA9PiB7XG4gICAgc2hvd0dyb3dsKCdlcnJvcicsIGVycm9yLnN0YXR1c1RleHQpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdXBwbGllcnMgPSAoe2NvbW1pdH0pID0+IHtcbiAgY29uc3QgdXJsID0gd2luZG93LmRhdGEuc3VwcGxpZXJzVXJsO1xuICBWdWUuaHR0cC5nZXQodXJsKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgIGNvbW1pdCh0eXBlcy5TRVRfU1VQUExJRVJTLCByZXNwb25zZS5ib2R5KTtcbiAgfSwgKGVycm9yKSA9PiB7XG4gICAgc2hvd0dyb3dsKCdlcnJvcicsIGVycm9yLnN0YXR1c1RleHQpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDYXRlZ29yaWVzID0gKHtjb21taXR9KSA9PiB7XG4gIGNvbnN0IHVybCA9IHdpbmRvdy5kYXRhLmNhdGVnb3JpZXNVcmw7XG4gIFZ1ZS5odHRwLmdldCh1cmwpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgY29tbWl0KHR5cGVzLlNFVF9DQVRFR09SSUVTLCByZXNwb25zZS5ib2R5KTtcbiAgfSwgKGVycm9yKSA9PiB7XG4gICAgc2hvd0dyb3dsKCdlcnJvcicsIGVycm9yLnN0YXR1c1RleHQpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNb3ZlbWVudHMgPSAoe2NvbW1pdH0sIHBheWxvYWQpID0+IHtcbiAgY29uc3QgdXJsID0gd2luZG93LmRhdGEuYXBpTW92ZW1lbnRzVXJsO1xuXG4gIFZ1ZS5odHRwLmdldCh1cmwsIHtcbiAgICBwYXJhbXM6IHtcbiAgICAgIG9yZGVyOiBwYXlsb2FkLm9yZGVyLFxuICAgICAgcGFnZV9zaXplOiBwYXlsb2FkLnBhZ2Vfc2l6ZSxcbiAgICAgIHBhZ2VfaW5kZXg6IHBheWxvYWQucGFnZV9pbmRleCxcbiAgICAgIGtleXdvcmRzOiBwYXlsb2FkLmtleXdvcmRzID8gcGF5bG9hZC5rZXl3b3JkcyA6IFtdLFxuICAgICAgc3VwcGxpZXJfaWQ6IHBheWxvYWQuc3VwcGxpZXJzID8gcGF5bG9hZC5zdXBwbGllcnMgOiBbXSxcbiAgICAgIGNhdGVnb3J5X2lkOiBwYXlsb2FkLmNhdGVnb3JpZXMgPyBwYXlsb2FkLmNhdGVnb3JpZXMgOiBbXSxcbiAgICAgIGlkX3N0b2NrX212dF9yZWFzb246IHBheWxvYWQuaWRfc3RvY2tfbXZ0X3JlYXNvbiA/IHBheWxvYWQuaWRfc3RvY2tfbXZ0X3JlYXNvbiA6IFtdLFxuICAgICAgaWRfZW1wbG95ZWU6IHBheWxvYWQuaWRfZW1wbG95ZWUgPyBwYXlsb2FkLmlkX2VtcGxveWVlIDogW10sXG4gICAgICBkYXRlX2FkZDogcGF5bG9hZC5kYXRlX2FkZCA/IHBheWxvYWQuZGF0ZV9hZGQgOiBbXSxcbiAgICB9LFxuICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgIGNvbW1pdCh0eXBlcy5MT0FESU5HX1NUQVRFLCBmYWxzZSk7XG4gICAgY29tbWl0KHR5cGVzLlNFVF9UT1RBTF9QQUdFUywgcmVzcG9uc2UuaGVhZGVycy5nZXQoJ1RvdGFsLVBhZ2VzJykpO1xuICAgIGNvbW1pdCh0eXBlcy5TRVRfTU9WRU1FTlRTLCByZXNwb25zZS5ib2R5KTtcbiAgfSwgKGVycm9yKSA9PiB7XG4gICAgc2hvd0dyb3dsKCdlcnJvcicsIGVycm9yLnN0YXR1c1RleHQpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUcmFuc2xhdGlvbnMgPSAoe2NvbW1pdH0pID0+IHtcbiAgY29uc3QgdXJsID0gd2luZG93LmRhdGEudHJhbnNsYXRpb25Vcmw7XG4gIFZ1ZS5odHRwLmdldCh1cmwpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgY29tbWl0KHR5cGVzLlNFVF9UUkFOU0xBVElPTlMsIHJlc3BvbnNlLmJvZHkpO1xuICAgIGNvbW1pdCh0eXBlcy5BUFBfSVNfUkVBRFkpO1xuICB9LCAoZXJyb3IpID0+IHtcbiAgICBzaG93R3Jvd2woJ2Vycm9yJywgZXJyb3Iuc3RhdHVzVGV4dCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVtcGxveWVlcyA9ICh7Y29tbWl0fSkgPT4ge1xuICBjb25zdCB1cmwgPSB3aW5kb3cuZGF0YS5lbXBsb3llZXNVcmw7XG4gIFZ1ZS5odHRwLmdldCh1cmwpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgY29tbWl0KHR5cGVzLlNFVF9FTVBMT1lFRVNfTElTVCwgcmVzcG9uc2UuYm9keSk7XG4gIH0sIChlcnJvcikgPT4ge1xuICAgIHNob3dHcm93bCgnZXJyb3InLCBlcnJvci5zdGF0dXNUZXh0KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TW92ZW1lbnRzVHlwZXMgPSAoe2NvbW1pdH0pID0+IHtcbiAgY29uc3QgdXJsID0gd2luZG93LmRhdGEubW92ZW1lbnRzVHlwZXNVcmw7XG4gIFZ1ZS5odHRwLmdldCh1cmwpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgY29tbWl0KHR5cGVzLlNFVF9NT1ZFTUVOVFNfVFlQRVMsIHJlc3BvbnNlLmJvZHkpO1xuICB9LCAoZXJyb3IpID0+IHtcbiAgICBzaG93R3Jvd2woJ2Vycm9yJywgZXJyb3Iuc3RhdHVzVGV4dCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZU9yZGVyID0gKHtjb21taXR9LCBvcmRlcikgPT4ge1xuICBjb21taXQodHlwZXMuVVBEQVRFX09SREVSLCBvcmRlcik7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlUGFnZUluZGV4ID0gKHtjb21taXR9LCBwYWdlSW5kZXgpID0+IHtcbiAgY29tbWl0KHR5cGVzLlNFVF9QQUdFX0lOREVYLCBwYWdlSW5kZXgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUtleXdvcmRzID0gKHtjb21taXR9LCBrZXl3b3JkcykgPT4ge1xuICBjb21taXQodHlwZXMuVVBEQVRFX0tFWVdPUkRTLCBrZXl3b3Jkcyk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNMb2FkaW5nID0gKHtjb21taXR9KSA9PiB7XG4gIGNvbW1pdCh0eXBlcy5MT0FESU5HX1NUQVRFLCB0cnVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVQcm9kdWN0UXR5ID0gKHtjb21taXR9LCBwYXlsb2FkKSA9PiB7XG4gIGNvbW1pdCh0eXBlcy5VUERBVEVfUFJPRFVDVF9RVFksIHBheWxvYWQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVF0eUJ5UHJvZHVjdElkID0gKHtjb21taXR9LCBwYXlsb2FkKSA9PiB7XG4gIGNvbnN0IHt1cmx9ID0gcGF5bG9hZDtcbiAgY29uc3Qge2RlbHRhfSA9IHBheWxvYWQ7XG5cbiAgVnVlLmh0dHAucG9zdCh1cmwsIHtcbiAgICBkZWx0YSxcbiAgfSkudGhlbigocmVzKSA9PiB7XG4gICAgY29tbWl0KHR5cGVzLlVQREFURV9QUk9EVUNULCByZXMuYm9keSk7XG4gICAgRXZlbnRCdXMuJGVtaXQoJ2Rpc3BsYXlCdWxrQWxlcnQnLCAnc3VjY2VzcycpO1xuICB9LCAoZXJyb3IpID0+IHtcbiAgICBzaG93R3Jvd2woJ2Vycm9yJywgZXJyb3Iuc3RhdHVzVGV4dCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVF0eUJ5UHJvZHVjdHNJZCA9ICh7Y29tbWl0LCBzdGF0ZX0pID0+IHtcbiAgY29uc3QgdXJsID0gc3RhdGUuZWRpdEJ1bGtVcmw7XG4gIGNvbnN0IHByb2R1Y3RzUXR5ID0gc3RhdGUucHJvZHVjdHNUb1VwZGF0ZTtcblxuICBWdWUuaHR0cC5wb3N0KHVybCwgcHJvZHVjdHNRdHkpLnRoZW4oKHJlcykgPT4ge1xuICAgIGNvbW1pdCh0eXBlcy5VUERBVEVfUFJPRFVDVFNfUVRZLCByZXMuYm9keSk7XG4gICAgRXZlbnRCdXMuJGVtaXQoJ2Rpc3BsYXlCdWxrQWxlcnQnLCAnc3VjY2VzcycpO1xuICB9LCAoZXJyb3IpID0+IHtcbiAgICBzaG93R3Jvd2woJ2Vycm9yJywgZXJyb3Iuc3RhdHVzVGV4dCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUJ1bGtFZGl0UXR5ID0gKHtjb21taXR9LCB2YWx1ZSkgPT4ge1xuICBjb21taXQodHlwZXMuVVBEQVRFX0JVTEtfRURJVF9RVFksIHZhbHVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRQcm9kdWN0VG9VcGRhdGUgPSAoe2NvbW1pdH0sIHByb2R1Y3QpID0+IHtcbiAgY29tbWl0KHR5cGVzLkFERF9QUk9EVUNUX1RPX1VQREFURSwgcHJvZHVjdCk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlUHJvZHVjdFRvVXBkYXRlID0gKHtjb21taXR9LCBwcm9kdWN0KSA9PiB7XG4gIGNvbW1pdCh0eXBlcy5SRU1PVkVfUFJPRFVDVF9UT19VUERBVEUsIHByb2R1Y3QpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFNlbGVjdGVkUHJvZHVjdCA9ICh7Y29tbWl0fSwgcHJvZHVjdCkgPT4ge1xuICBjb21taXQodHlwZXMuQUREX1NFTEVDVEVEX1BST0RVQ1QsIHByb2R1Y3QpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZVNlbGVjdGVkUHJvZHVjdCA9ICh7Y29tbWl0fSwgcHJvZHVjdCkgPT4ge1xuICBjb21taXQodHlwZXMuUkVNT1ZFX1NFTEVDVEVEX1BST0RVQ1QsIHByb2R1Y3QpO1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbmltcG9ydCBWdWUgZnJvbSAndnVlJztcbmltcG9ydCBWdWV4IGZyb20gJ3Z1ZXgnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIGFjdGlvbnMgZnJvbSAnLi9hY3Rpb25zJztcbmltcG9ydCBtdXRhdGlvbnMgZnJvbSAnLi9tdXRhdGlvbnMnO1xuXG5WdWUudXNlKFZ1ZXgpO1xuXG4vLyByb290IHN0YXRlIG9iamVjdC5cblxuY29uc3Qgc3RhdGUgPSB7XG4gIG9yZGVyOiAnJyxcbiAgcGFnZUluZGV4OiAxLFxuICB0b3RhbFBhZ2VzOiAwLFxuICBwcm9kdWN0c1BlclBhZ2U6IDMwLFxuICBwcm9kdWN0czogW10sXG4gIGhhc1F0eTogZmFsc2UsXG4gIGtleXdvcmRzOiBbXSxcbiAgc3VwcGxpZXJzOiB7XG4gICAgZGF0YTogW10sXG4gIH0sXG4gIGNhdGVnb3JpZXM6IFtdLFxuICBjYXRlZ29yeUxpc3Q6IFtdLFxuICBtb3ZlbWVudHM6IFtdLFxuICBlbXBsb3llZXM6IFtdLFxuICBtb3ZlbWVudHNUeXBlczogW10sXG4gIHRyYW5zbGF0aW9uczoge30sXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIGlzUmVhZHk6IGZhbHNlLFxuICBlZGl0QnVsa1VybDogJycsXG4gIGJ1bGtFZGl0UXR5OiBudWxsLFxuICBwcm9kdWN0c1RvVXBkYXRlOiBbXSxcbiAgc2VsZWN0ZWRQcm9kdWN0czogW10sXG59O1xuXG4vLyBnZXR0ZXJzIGFyZSBmdW5jdGlvbnNcbmNvbnN0IGdldHRlcnMgPSB7XG4gIHN1cHBsaWVycyhyb290U3RhdGUpIHtcbiAgICBmdW5jdGlvbiBjb252ZXJ0KHN1cHBsaWVycykge1xuICAgICAgc3VwcGxpZXJzLmZvckVhY2goKHN1cHBsaWVyKSA9PiB7XG4gICAgICAgIHN1cHBsaWVyLmlkID0gc3VwcGxpZXIuc3VwcGxpZXJfaWQ7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzdXBwbGllcnM7XG4gICAgfVxuICAgIHJldHVybiBjb252ZXJ0KHJvb3RTdGF0ZS5zdXBwbGllcnMuZGF0YSk7XG4gIH0sXG4gIGNhdGVnb3JpZXMocm9vdFN0YXRlKSB7XG4gICAgZnVuY3Rpb24gY29udmVydChjYXRlZ29yaWVzKSB7XG4gICAgICBjYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5KSA9PiB7XG4gICAgICAgIGNhdGVnb3J5LmNoaWxkcmVuID0gXy52YWx1ZXMoY2F0ZWdvcnkuY2hpbGRyZW4pO1xuICAgICAgICByb290U3RhdGUuY2F0ZWdvcnlMaXN0LnB1c2goY2F0ZWdvcnkpO1xuICAgICAgICBjYXRlZ29yeS5pZCA9IGAke2NhdGVnb3J5LmlkX3BhcmVudH0tJHtjYXRlZ29yeS5pZF9jYXRlZ29yeX1gO1xuICAgICAgICBjb252ZXJ0KGNhdGVnb3J5LmNoaWxkcmVuKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNhdGVnb3JpZXM7XG4gICAgfVxuICAgIHJldHVybiBjb252ZXJ0KHJvb3RTdGF0ZS5jYXRlZ29yaWVzKTtcbiAgfSxcbiAgc2VsZWN0ZWRQcm9kdWN0c0xuZyhyb290U3RhdGUpIHtcbiAgICByZXR1cm4gcm9vdFN0YXRlLnNlbGVjdGVkUHJvZHVjdHMubGVuZ3RoO1xuICB9LFxufTtcblxuLy8gQSBWdWV4IGluc3RhbmNlIGlzIGNyZWF0ZWQgYnkgY29tYmluaW5nIHRoZSBzdGF0ZSwgbXV0YXRpb25zLCBhY3Rpb25zLFxuLy8gYW5kIGdldHRlcnMuXG5leHBvcnQgZGVmYXVsdCBuZXcgVnVleC5TdG9yZSh7XG4gIHN0YXRlLFxuICBnZXR0ZXJzLFxuICBhY3Rpb25zLFxuICBtdXRhdGlvbnMsXG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbmV4cG9ydCBjb25zdCBBRERfUFJPRFVDVFMgPSAnQUREX1BST0RVQ1RTJztcbmV4cG9ydCBjb25zdCBBRERfUFJPRFVDVF9UT19VUERBVEUgPSAnQUREX1BST0RVQ1RfVE9fVVBEQVRFJztcbmV4cG9ydCBjb25zdCBBRERfU0VMRUNURURfUFJPRFVDVCA9ICdBRERfU0VMRUNURURfUFJPRFVDVCc7XG5leHBvcnQgY29uc3QgQVBQX0lTX1JFQURZID0gJ0FQUF9JU19SRUFEWSc7XG5leHBvcnQgY29uc3QgTE9BRElOR19TVEFURSA9ICdMT0FESU5HX1NUQVRFJztcbmV4cG9ydCBjb25zdCBSRU1PVkVfUFJPRFVDVF9UT19VUERBVEUgPSAnUkVNT1ZFX1BST0RVQ1RfVE9fVVBEQVRFJztcbmV4cG9ydCBjb25zdCBSRU1PVkVfU0VMRUNURURfUFJPRFVDVCA9ICdSRU1PVkVfU0VMRUNURURfUFJPRFVDVCc7XG5leHBvcnQgY29uc3QgU0VUX0NBVEVHT1JJRVMgPSAnU0VUX0NBVEVHT1JJRVMnO1xuZXhwb3J0IGNvbnN0IFNFVF9FTVBMT1lFRVNfTElTVCA9ICdTRVRfRU1QTE9ZRUVTX0xJU1QnO1xuZXhwb3J0IGNvbnN0IFNFVF9NT1ZFTUVOVFMgPSAnU0VUX01PVkVNRU5UUyc7XG5leHBvcnQgY29uc3QgU0VUX01PVkVNRU5UU19UWVBFUyA9ICdTRVRfTU9WRU1FTlRTX1RZUEVTJztcbmV4cG9ydCBjb25zdCBTRVRfUEFHRV9JTkRFWCA9ICdTRVRfUEFHRV9JTkRFWCc7XG5leHBvcnQgY29uc3QgU0VUX1NVUFBMSUVSUyA9ICdTRVRfU1VQUExJRVJTJztcbmV4cG9ydCBjb25zdCBTRVRfVE9UQUxfUEFHRVMgPSAnU0VUX1RPVEFMX1BBR0VTJztcbmV4cG9ydCBjb25zdCBTRVRfVFJBTlNMQVRJT05TID0gJ1NFVF9UUkFOU0xBVElPTlMnO1xuZXhwb3J0IGNvbnN0IFVQREFURV9CVUxLX0VESVRfUVRZID0gJ1VQREFURV9CVUxLX0VESVRfUVRZJztcbmV4cG9ydCBjb25zdCBVUERBVEVfS0VZV09SRFMgPSAnVVBEQVRFX0tFWVdPUkRTJztcbmV4cG9ydCBjb25zdCBVUERBVEVfUFJPRFVDVCA9ICdVUERBVEVfUFJPRFVDVCc7XG5leHBvcnQgY29uc3QgVVBEQVRFX1BST0RVQ1RfUVRZID0gJ1VQREFURV9QUk9EVUNUX1FUWSc7XG5leHBvcnQgY29uc3QgVVBEQVRFX1BST0RVQ1RTX1FUWSA9ICdVUERBVEVfUFJPRFVDVFNfUVRZJztcbmV4cG9ydCBjb25zdCBVUERBVEVfT1JERVIgPSAnVVBEQVRFX09SREVSJztcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gJy4vbXV0YXRpb24tdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFt0eXBlcy5VUERBVEVfT1JERVJdKHN0YXRlLCBvcmRlcikge1xuICAgIHN0YXRlLm9yZGVyID0gb3JkZXI7XG4gIH0sXG4gIFt0eXBlcy5VUERBVEVfS0VZV09SRFNdKHN0YXRlLCBrZXl3b3Jkcykge1xuICAgIHN0YXRlLmtleXdvcmRzID0ga2V5d29yZHM7XG4gIH0sXG4gIFt0eXBlcy5TRVRfVE9UQUxfUEFHRVNdKHN0YXRlLCB0b3RhbFBhZ2VzKSB7XG4gICAgc3RhdGUudG90YWxQYWdlcyA9IE51bWJlcih0b3RhbFBhZ2VzKTtcbiAgfSxcbiAgW3R5cGVzLlNFVF9QQUdFX0lOREVYXShzdGF0ZSwgcGFnZUluZGV4KSB7XG4gICAgc3RhdGUucGFnZUluZGV4ID0gcGFnZUluZGV4O1xuICB9LFxuICBbdHlwZXMuU0VUX1NVUFBMSUVSU10oc3RhdGUsIHN1cHBsaWVycykge1xuICAgIHN0YXRlLnN1cHBsaWVycyA9IHN1cHBsaWVycztcbiAgfSxcbiAgW3R5cGVzLlNFVF9DQVRFR09SSUVTXShzdGF0ZSwgY2F0ZWdvcmllcykge1xuICAgIHN0YXRlLmNhdGVnb3JpZXMgPSBjYXRlZ29yaWVzLmRhdGEudHJlZS5jaGlsZHJlbjtcbiAgfSxcbiAgW3R5cGVzLlNFVF9NT1ZFTUVOVFNdKHN0YXRlLCBtb3ZlbWVudHMpIHtcbiAgICBzdGF0ZS5tb3ZlbWVudHMgPSBtb3ZlbWVudHMuZGF0YTtcbiAgfSxcbiAgW3R5cGVzLlNFVF9UUkFOU0xBVElPTlNdKHN0YXRlLCB0cmFuc2xhdGlvbnMpIHtcbiAgICB0cmFuc2xhdGlvbnMuZGF0YS5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICBzdGF0ZS50cmFuc2xhdGlvbnNbdC50cmFuc2xhdGlvbl9pZF0gPSB0Lm5hbWU7XG4gICAgfSk7XG4gIH0sXG4gIFt0eXBlcy5MT0FESU5HX1NUQVRFXShzdGF0ZSwgaXNMb2FkaW5nKSB7XG4gICAgc3RhdGUuaXNMb2FkaW5nID0gaXNMb2FkaW5nO1xuICB9LFxuICBbdHlwZXMuQVBQX0lTX1JFQURZXShzdGF0ZSkge1xuICAgIHN0YXRlLmlzUmVhZHkgPSB0cnVlO1xuICB9LFxuICBbdHlwZXMuU0VUX0VNUExPWUVFU19MSVNUXShzdGF0ZSwgZW1wbG95ZWVzKSB7XG4gICAgc3RhdGUuZW1wbG95ZWVzID0gZW1wbG95ZWVzLmRhdGE7XG4gIH0sXG4gIFt0eXBlcy5TRVRfTU9WRU1FTlRTX1RZUEVTXShzdGF0ZSwgbW92ZW1lbnRzVHlwZXMpIHtcbiAgICBzdGF0ZS5tb3ZlbWVudHNUeXBlcyA9IG1vdmVtZW50c1R5cGVzLmRhdGE7XG4gIH0sXG4gIFt0eXBlcy5BRERfUFJPRFVDVFNdKHN0YXRlLCBwcm9kdWN0cykge1xuICAgIHN0YXRlLnByb2R1Y3RzVG9VcGRhdGUgPSBbXTtcbiAgICBzdGF0ZS5zZWxlY3RlZFByb2R1Y3RzID0gW107XG4gICAgXy5mb3JFYWNoKHByb2R1Y3RzLmRhdGEuZGF0YSwgKHByb2R1Y3QpID0+IHtcbiAgICAgIHByb2R1Y3QucXR5ID0gMDtcbiAgICB9KTtcbiAgICBzdGF0ZS5lZGl0QnVsa1VybCA9IHByb2R1Y3RzLmRhdGEuaW5mby5lZGl0X2J1bGtfdXJsO1xuICAgIHN0YXRlLnByb2R1Y3RzID0gcHJvZHVjdHMuZGF0YS5kYXRhO1xuICB9LFxuICBbdHlwZXMuVVBEQVRFX1BST0RVQ1RdKHN0YXRlLCB1cGRhdGVkUHJvZHVjdCkge1xuICAgIGNvbnN0IGluZGV4ID0gXy5maW5kSW5kZXgoc3RhdGUucHJvZHVjdHMsIHtcbiAgICAgIHByb2R1Y3RfaWQ6IHVwZGF0ZWRQcm9kdWN0LnByb2R1Y3RfaWQsXG4gICAgICBjb21iaW5hdGlvbl9pZDogdXBkYXRlZFByb2R1Y3QuY29tYmluYXRpb25faWQsXG4gICAgfSk7XG4gICAgY29uc3QgdXBkYXRlZEluZGV4ID0gXy5maW5kSW5kZXgoc3RhdGUucHJvZHVjdHNUb1VwZGF0ZSwge1xuICAgICAgcHJvZHVjdF9pZDogdXBkYXRlZFByb2R1Y3QucHJvZHVjdF9pZCxcbiAgICAgIGNvbWJpbmF0aW9uX2lkOiB1cGRhdGVkUHJvZHVjdC5jb21iaW5hdGlvbl9pZCxcbiAgICB9KTtcbiAgICB1cGRhdGVkUHJvZHVjdC5xdHkgPSAwO1xuICAgIHN0YXRlLnByb2R1Y3RzLnNwbGljZShpbmRleCwgMSwgdXBkYXRlZFByb2R1Y3QpO1xuICAgIHN0YXRlLnByb2R1Y3RzVG9VcGRhdGUuc3BsaWNlKHVwZGF0ZWRJbmRleCwgMSk7XG4gIH0sXG4gIFt0eXBlcy5VUERBVEVfUFJPRFVDVFNfUVRZXShzdGF0ZSwgdXBkYXRlZFByb2R1Y3RzKSB7XG4gICAgc3RhdGUucHJvZHVjdHNUb1VwZGF0ZSA9IFtdO1xuICAgIHN0YXRlLnNlbGVjdGVkUHJvZHVjdHMgPSBbXTtcbiAgICBfLmZvckVhY2godXBkYXRlZFByb2R1Y3RzLCAocHJvZHVjdCkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSBfLmZpbmRJbmRleChzdGF0ZS5wcm9kdWN0cywge1xuICAgICAgICBwcm9kdWN0X2lkOiBwcm9kdWN0LnByb2R1Y3RfaWQsXG4gICAgICAgIGNvbWJpbmF0aW9uX2lkOiBwcm9kdWN0LmNvbWJpbmF0aW9uX2lkLFxuICAgICAgfSk7XG4gICAgICBwcm9kdWN0LnF0eSA9IDA7XG4gICAgICBzdGF0ZS5wcm9kdWN0cy5zcGxpY2UoaW5kZXgsIDEsIHByb2R1Y3QpO1xuICAgIH0pO1xuICAgIHN0YXRlLmhhc1F0eSA9IGZhbHNlO1xuICB9LFxuICBbdHlwZXMuVVBEQVRFX1BST0RVQ1RfUVRZXShzdGF0ZSwgdXBkYXRlZFByb2R1Y3QpIHtcbiAgICBsZXQgaGFzUXR5ID0gZmFsc2U7XG5cbiAgICBjb25zdCBwcm9kdWN0VG9VcGRhdGUgPSBfLmZpbmQoc3RhdGUucHJvZHVjdHMsIHtcbiAgICAgIHByb2R1Y3RfaWQ6IHVwZGF0ZWRQcm9kdWN0LnByb2R1Y3RfaWQsXG4gICAgICBjb21iaW5hdGlvbl9pZDogdXBkYXRlZFByb2R1Y3QuY29tYmluYXRpb25faWQsXG4gICAgfSk7XG5cbiAgICBfLmZvckVhY2goc3RhdGUucHJvZHVjdHMsIChwcm9kdWN0KSA9PiB7XG4gICAgICBwcm9kdWN0VG9VcGRhdGUucXR5ID0gdXBkYXRlZFByb2R1Y3QuZGVsdGE7XG4gICAgICBpZiAocHJvZHVjdC5xdHkpIHtcbiAgICAgICAgaGFzUXR5ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YXRlLmhhc1F0eSA9IGhhc1F0eTtcbiAgfSxcbiAgW3R5cGVzLkFERF9QUk9EVUNUX1RPX1VQREFURV0oc3RhdGUsIHVwZGF0ZWRQcm9kdWN0KSB7XG4gICAgY29uc3QgaW5kZXggPSBfLmZpbmRJbmRleChzdGF0ZS5wcm9kdWN0c1RvVXBkYXRlLCB7XG4gICAgICBwcm9kdWN0X2lkOiB1cGRhdGVkUHJvZHVjdC5wcm9kdWN0X2lkLFxuICAgICAgY29tYmluYXRpb25faWQ6IHVwZGF0ZWRQcm9kdWN0LmNvbWJpbmF0aW9uX2lkLFxuICAgIH0pO1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgc3RhdGUucHJvZHVjdHNUb1VwZGF0ZS5zcGxpY2UoaW5kZXgsIDEsIHVwZGF0ZWRQcm9kdWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUucHJvZHVjdHNUb1VwZGF0ZS5wdXNoKHVwZGF0ZWRQcm9kdWN0KTtcbiAgICB9XG4gIH0sXG4gIFt0eXBlcy5SRU1PVkVfUFJPRFVDVF9UT19VUERBVEVdKHN0YXRlLCB1cGRhdGVkUHJvZHVjdCkge1xuICAgIGNvbnN0IGluZGV4ID0gXy5maW5kSW5kZXgoc3RhdGUucHJvZHVjdHNUb1VwZGF0ZSwge1xuICAgICAgcHJvZHVjdF9pZDogdXBkYXRlZFByb2R1Y3QucHJvZHVjdF9pZCxcbiAgICAgIGNvbWJpbmF0aW9uX2lkOiB1cGRhdGVkUHJvZHVjdC5jb21iaW5hdGlvbl9pZCxcbiAgICB9KTtcbiAgICBzdGF0ZS5wcm9kdWN0c1RvVXBkYXRlLnNwbGljZShpbmRleCwgMSk7XG4gIH0sXG4gIFt0eXBlcy5VUERBVEVfQlVMS19FRElUX1FUWV0oc3RhdGUsIHZhbHVlKSB7XG4gICAgc3RhdGUuYnVsa0VkaXRRdHkgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIF8uZm9yRWFjaChzdGF0ZS5zZWxlY3RlZFByb2R1Y3RzLCAocHJvZHVjdCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IF8uZmluZEluZGV4KHN0YXRlLnByb2R1Y3RzVG9VcGRhdGUsIHtcbiAgICAgICAgICBwcm9kdWN0X2lkOiBwcm9kdWN0LnByb2R1Y3RfaWQsXG4gICAgICAgICAgY29tYmluYXRpb25faWQ6IHByb2R1Y3QuY29tYmluYXRpb25faWQsXG4gICAgICAgIH0pO1xuICAgICAgICBwcm9kdWN0LnF0eSA9IHZhbHVlO1xuICAgICAgICBwcm9kdWN0LmRlbHRhID0gc3RhdGUuYnVsa0VkaXRRdHk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBzdGF0ZS5wcm9kdWN0c1RvVXBkYXRlLnNwbGljZShpbmRleCwgMSwgcHJvZHVjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUucHJvZHVjdHNUb1VwZGF0ZS5wdXNoKHByb2R1Y3QpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHN0YXRlLmhhc1F0eSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgXy5mb3JFYWNoKHN0YXRlLnNlbGVjdGVkUHJvZHVjdHMsIChwcm9kdWN0KSA9PiB7XG4gICAgICAgIHByb2R1Y3QucXR5ID0gMDtcbiAgICAgIH0pO1xuICAgICAgc3RhdGUucHJvZHVjdHNUb1VwZGF0ZSA9IFtdO1xuICAgICAgc3RhdGUuc2VsZWN0ZWRQcm9kdWN0cyA9IFtdO1xuICAgICAgc3RhdGUuaGFzUXR5ID0gZmFsc2U7XG4gICAgfVxuICB9LFxuICBbdHlwZXMuQUREX1NFTEVDVEVEX1BST0RVQ1RdKHN0YXRlLCBwcm9kdWN0KSB7XG4gICAgY29uc3QgaW5kZXggPSBfLmZpbmRJbmRleChzdGF0ZS5zZWxlY3RlZFByb2R1Y3RzLCB7XG4gICAgICBwcm9kdWN0X2lkOiBwcm9kdWN0LnByb2R1Y3RfaWQsXG4gICAgICBjb21iaW5hdGlvbl9pZDogcHJvZHVjdC5jb21iaW5hdGlvbl9pZCxcbiAgICB9KTtcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHN0YXRlLnNlbGVjdGVkUHJvZHVjdHMuc3BsaWNlKGluZGV4LCAxLCBwcm9kdWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuc2VsZWN0ZWRQcm9kdWN0cy5wdXNoKHByb2R1Y3QpO1xuICAgIH1cbiAgfSxcbiAgW3R5cGVzLlJFTU9WRV9TRUxFQ1RFRF9QUk9EVUNUXShzdGF0ZSwgcHJvZHVjdCkge1xuICAgIGNvbnN0IGluZGV4ID0gXy5maW5kSW5kZXgoc3RhdGUuc2VsZWN0ZWRQcm9kdWN0cywge1xuICAgICAgcHJvZHVjdF9pZDogcHJvZHVjdC5wcm9kdWN0X2lkLFxuICAgICAgY29tYmluYXRpb25faWQ6IHByb2R1Y3QuY29tYmluYXRpb25faWQsXG4gICAgfSk7XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBzdGF0ZS5zZWxlY3RlZFByb2R1Y3RzW2luZGV4XS5xdHkgPSAwO1xuICAgIH1cbiAgICBzdGF0ZS5zZWxlY3RlZFByb2R1Y3RzLnNwbGljZShpbmRleCwgMSk7XG4gIH0sXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuXG5leHBvcnQgY29uc3QgRXZlbnRCdXMgPSBuZXcgVnVlKCk7XG5cbmV4cG9ydCBkZWZhdWx0IEV2ZW50QnVzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dHcm93bCA9ICh0eXBlLCBtZXNzYWdlLCBkdXJhdGlvblRpbWUpID0+IHtcbiAgY29uc3QgZHVyYXRpb24gPSB1bmRlZmluZWQgIT09IGR1cmF0aW9uVGltZSA/IGR1cmF0aW9uVGltZSA6IDIwMDA7XG5cbiAgaWYgKHR5cGUgPT09ICdzdWNjZXNzJykge1xuICAgIHdpbmRvdy4kLmdyb3dsKHtcbiAgICAgIHRpdGxlOiAnJyxcbiAgICAgIHNpemU6ICdsYXJnZScsXG4gICAgICBtZXNzYWdlLFxuICAgICAgZHVyYXRpb24sXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgd2luZG93LiQuZ3Jvd2xbdHlwZV0oe1xuICAgICAgdGl0bGU6ICcnLFxuICAgICAgc2l6ZTogJ2xhcmdlJyxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBkdXJhdGlvbixcbiAgICB9KTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgc2hvd0dyb3dsO1xuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICB2LWlmPVwiaXNSZWFkeVwiXG4gICAgaWQ9XCJhcHBcIlxuICAgIGNsYXNzPVwic3RvY2stYXBwIGNvbnRhaW5lci1mbHVpZFwiXG4gID5cbiAgICA8U3RvY2tIZWFkZXIgLz5cbiAgICA8U2VhcmNoXG4gICAgICBAc2VhcmNoPVwib25TZWFyY2hcIlxuICAgICAgQGFwcGx5RmlsdGVyPVwiYXBwbHlGaWx0ZXJcIlxuICAgIC8+XG4gICAgPExvd0ZpbHRlclxuICAgICAgdi1pZj1cImlzT3ZlcnZpZXdcIlxuICAgICAgOmZpbHRlcnM9XCJmaWx0ZXJzXCJcbiAgICAgIEBsb3dTdG9ja0NoZWNrZWQ9XCJvbkxvd1N0b2NrQ2hlY2tlZFwiXG4gICAgLz5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjb250YWluZXItZmx1aWQgcGEtMiBjbGVhcmZpeFwiPlxuICAgICAgPHJvdXRlci12aWV3XG4gICAgICAgIGNsYXNzPVwidmlld1wiXG4gICAgICAgIEByZXNldEZpbHRlcnM9XCJyZXNldEZpbHRlcnNcIlxuICAgICAgICBAZmV0Y2g9XCJmZXRjaFwiXG4gICAgICAvPlxuICAgICAgPFBTUGFnaW5hdGlvblxuICAgICAgICA6Y3VycmVudC1pbmRleD1cImN1cnJlbnRQYWdpbmF0aW9uXCJcbiAgICAgICAgOnBhZ2VzLWNvdW50PVwicGFnZXNDb3VudFwiXG4gICAgICAgIEBwYWdlQ2hhbmdlZD1cIm9uUGFnZUNoYW5nZWRcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgUFNQYWdpbmF0aW9uIGZyb20gJ0BhcHAvd2lkZ2V0cy9wcy1wYWdpbmF0aW9uJztcbiAgaW1wb3J0IFN0b2NrSGVhZGVyIGZyb20gJy4vaGVhZGVyL3N0b2NrLWhlYWRlcic7XG4gIGltcG9ydCBTZWFyY2ggZnJvbSAnLi9oZWFkZXIvc2VhcmNoJztcbiAgaW1wb3J0IExvd0ZpbHRlciBmcm9tICcuL2hlYWRlci9maWx0ZXJzL2xvdy1maWx0ZXInO1xuXG4gIGNvbnN0IEZJUlNUX1BBR0UgPSAxO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnQXBwJyxcbiAgICBjb21wdXRlZDoge1xuICAgICAgaXNSZWFkeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLmlzUmVhZHk7XG4gICAgICB9LFxuICAgICAgcGFnZXNDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLnRvdGFsUGFnZXM7XG4gICAgICB9LFxuICAgICAgY3VycmVudFBhZ2luYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5wYWdlSW5kZXg7XG4gICAgICB9LFxuICAgICAgaXNPdmVydmlldygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLm5hbWUgPT09ICdvdmVydmlldyc7XG4gICAgICB9LFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgb25QYWdlQ2hhbmdlZChwYWdlSW5kZXgpIHtcbiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZVBhZ2VJbmRleCcsIHBhZ2VJbmRleCk7XG4gICAgICAgIHRoaXMuZmV0Y2goJ2FzYycpO1xuICAgICAgfSxcbiAgICAgIGZldGNoKHNvcnREaXJlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy4kcm91dGUubmFtZSA9PT0gJ292ZXJ2aWV3JyA/ICdnZXRTdG9jaycgOiAnZ2V0TW92ZW1lbnRzJztcbiAgICAgICAgY29uc3Qgc29ydGluZyA9IChzb3J0RGlyZWN0aW9uID09PSAnZGVzYycpID8gJyBkZXNjJyA6ICcnO1xuICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnaXNMb2FkaW5nJyk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJzID0ge1xuICAgICAgICAgIC4uLnRoaXMuZmlsdGVycyxcbiAgICAgICAgICBvcmRlcjogYCR7dGhpcy4kc3RvcmUuc3RhdGUub3JkZXJ9JHtzb3J0aW5nfWAsXG4gICAgICAgICAgcGFnZV9zaXplOiB0aGlzLiRzdG9yZS5zdGF0ZS5wcm9kdWN0c1BlclBhZ2UsXG4gICAgICAgICAgcGFnZV9pbmRleDogdGhpcy4kc3RvcmUuc3RhdGUucGFnZUluZGV4LFxuICAgICAgICAgIGtleXdvcmRzOiB0aGlzLiRzdG9yZS5zdGF0ZS5rZXl3b3JkcyxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaChhY3Rpb24sIHRoaXMuZmlsdGVycyk7XG4gICAgICB9LFxuICAgICAgb25TZWFyY2goa2V5d29yZHMpIHtcbiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZUtleXdvcmRzJywga2V5d29yZHMpO1xuICAgICAgICB0aGlzLnJlc2V0UGFnaW5hdGlvbigpO1xuICAgICAgICB0aGlzLmZldGNoKCk7XG4gICAgICB9LFxuICAgICAgYXBwbHlGaWx0ZXIoZmlsdGVycykge1xuICAgICAgICB0aGlzLmZpbHRlcnMgPSBmaWx0ZXJzO1xuICAgICAgICB0aGlzLnJlc2V0UGFnaW5hdGlvbigpO1xuICAgICAgICB0aGlzLmZldGNoKCk7XG4gICAgICB9LFxuICAgICAgcmVzZXRGaWx0ZXJzKCkge1xuICAgICAgICB0aGlzLmZpbHRlcnMgPSB7fTtcbiAgICAgIH0sXG4gICAgICByZXNldFBhZ2luYXRpb24oKSB7XG4gICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCd1cGRhdGVQYWdlSW5kZXgnLCBGSVJTVF9QQUdFKTtcbiAgICAgIH0sXG4gICAgICBvbkxvd1N0b2NrQ2hlY2tlZChpc0NoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gey4uLnRoaXMuZmlsdGVycywgbG93X3N0b2NrOiBpc0NoZWNrZWR9O1xuICAgICAgICB0aGlzLmZldGNoKCk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgY29tcG9uZW50czoge1xuICAgICAgU3RvY2tIZWFkZXIsXG4gICAgICBTZWFyY2gsXG4gICAgICBQU1BhZ2luYXRpb24sXG4gICAgICBMb3dGaWx0ZXIsXG4gICAgfSxcbiAgICBkYXRhOiAoKSA9PiAoe1xuICAgICAgZmlsdGVyczoge30sXG4gICAgfSksXG4gIH07XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgdHlwZT1cInRleHQvc2Nzc1wiPlxuICAvLyBoaWRlIHRoZSBsYXlvdXQgaGVhZGVyXG4gICNtYWluLWRpdiA+IC5oZWFkZXItdG9vbGJhciB7XG4gICAgaGVpZ2h0OiAwO1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbjwvc3R5bGU+XG4iLCI8IS0tKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICotLT5cbjx0ZW1wbGF0ZT5cbiAgPG5hdiBhcmlhLWxhYmVsPVwiQnJlYWRjcnVtYlwiPlxuICAgIDxvbCBjbGFzcz1cImJyZWFkY3J1bWJcIj5cbiAgICAgIDxsaSBjbGFzcz1cImJyZWFkY3J1bWItaXRlbVwiPlxuICAgICAgICA8YSA6aHJlZj1cImNhdGFsb2dMaW5rXCI+e3sgdHJhbnMoJ2xpbmtfY2F0YWxvZycpIH19PC9hPlxuICAgICAgPC9saT5cbiAgICAgIDxsaSBjbGFzcz1cImJyZWFkY3J1bWItaXRlbVwiPlxuICAgICAgICA8YSA6aHJlZj1cInN0b2NrTGlua1wiPnt7IHRyYW5zKCdsaW5rX3N0b2NrJykgfX08L2E+XG4gICAgICA8L2xpPlxuICAgICAgPGxpIGNsYXNzPVwiYnJlYWRjcnVtYi1pdGVtIGFjdGl2ZVwiPlxuICAgICAgICA8c3BhbiB2LWlmPVwiaXNPdmVydmlld1wiPnt7IHRyYW5zKCdsaW5rX292ZXJ2aWV3JykgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuIHYtZWxzZT57eyB0cmFucygnbGlua19tb3ZlbWVudHMnKSB9fTwvc3Bhbj5cbiAgICAgIDwvbGk+XG4gICAgPC9vbD5cbiAgPC9uYXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGlzT3ZlcnZpZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5uYW1lID09PSAnb3ZlcnZpZXcnO1xuICAgICAgfSxcbiAgICAgIGNhdGFsb2dMaW5rKCkge1xuICAgICAgICByZXR1cm4gd2luZG93LmRhdGEuY2F0YWxvZ1VybDtcbiAgICAgIH0sXG4gICAgICBzdG9ja0xpbmsoKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuZGF0YS5zdG9ja1VybDtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG48dGVtcGxhdGU+XG4gIDxkaXYgaWQ9XCJmaWx0ZXJzLWNvbnRhaW5lclwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwic2VhcmNoLWlucHV0IGNvbGxhcHNlLWJ1dHRvblwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIlxuICAgICAgZGF0YS10YXJnZXQ9XCIjZmlsdGVyc1wiXG4gICAgPlxuICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBtci0xXCI+ZmlsdGVyX2xpc3Q8L2k+XG4gICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGZsb2F0LXJpZ2h0IFwiPmtleWJvYXJkX2Fycm93X2Rvd248L2k+XG4gICAgICB7eyB0cmFucygnYnV0dG9uX2FkdmFuY2VkX2ZpbHRlcicpIH19XG4gICAgPC9idXR0b24+XG4gICAgPGRpdlxuICAgICAgaWQ9XCJmaWx0ZXJzXCJcbiAgICAgIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIGNvbGxhcHNlXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHYtaWY9XCJpc092ZXJ2aWV3XCJcbiAgICAgICAgICAgIGNsYXNzPVwicHktM1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGgyPnt7IHRyYW5zKCdmaWx0ZXJfc3VwcGxpZXJzJykgfX08L2gyPlxuICAgICAgICAgICAgPEZpbHRlckNvbXBvbmVudFxuICAgICAgICAgICAgICA6cGxhY2Vob2xkZXI9XCJ0cmFucygnZmlsdGVyX3NlYXJjaF9zdXBwbGllcnMnKVwiXG4gICAgICAgICAgICAgIDpsaXN0PVwidGhpcy4kc3RvcmUuZ2V0dGVycy5zdXBwbGllcnNcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZpbHRlci1zdXBwbGllcnNcIlxuICAgICAgICAgICAgICBpdGVtLWlkPVwic3VwcGxpZXJfaWRcIlxuICAgICAgICAgICAgICBsYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICBAYWN0aXZlPVwib25GaWx0ZXJBY3RpdmVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgIGNsYXNzPVwicHktM1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGgyPnt7IHRyYW5zKCdmaWx0ZXJfbW92ZW1lbnRzX3R5cGUnKSB9fTwvaDI+XG4gICAgICAgICAgICA8UFNTZWxlY3RcbiAgICAgICAgICAgICAgOml0ZW1zPVwibW92ZW1lbnRzVHlwZXNcIlxuICAgICAgICAgICAgICBpdGVtLWlkPVwiaWRfc3RvY2tfbXZ0X3JlYXNvblwiXG4gICAgICAgICAgICAgIGl0ZW0tbmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgICBAY2hhbmdlPVwib25DaGFuZ2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyB0cmFucygnbm9uZScpIH19XG4gICAgICAgICAgICA8L1BTU2VsZWN0PlxuICAgICAgICAgICAgPGgyIGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgICB7eyB0cmFucygnZmlsdGVyX21vdmVtZW50c19lbXBsb3llZScpIH19XG4gICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgPFBTU2VsZWN0XG4gICAgICAgICAgICAgIDppdGVtcz1cImVtcGxveWVlc1wiXG4gICAgICAgICAgICAgIGl0ZW0taWQ9XCJpZF9lbXBsb3llZVwiXG4gICAgICAgICAgICAgIGl0ZW0tbmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgICBAY2hhbmdlPVwib25DaGFuZ2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyB0cmFucygnbm9uZScpIH19XG4gICAgICAgICAgICA8L1BTU2VsZWN0PlxuICAgICAgICAgICAgPGgyIGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgICB7eyB0cmFucygnZmlsdGVyX21vdmVtZW50c19wZXJpb2QnKSB9fVxuICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbD57eyB0cmFucygnZmlsdGVyX2RhdGVwaWNrZXJfZnJvbScpIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8UFNEYXRlUGlja2VyXG4gICAgICAgICAgICAgICAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICAgICAgICAgICAgICAgIEBkcENoYW5nZT1cIm9uRHBDaGFuZ2VcIlxuICAgICAgICAgICAgICAgICAgQHJlc2V0PVwib25DbGVhclwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwic3VwXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsPnt7IHRyYW5zKCdmaWx0ZXJfZGF0ZXBpY2tlcl90bycpIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8UFNEYXRlUGlja2VyXG4gICAgICAgICAgICAgICAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICAgICAgICAgICAgICAgIEBkcENoYW5nZT1cIm9uRHBDaGFuZ2VcIlxuICAgICAgICAgICAgICAgICAgQHJlc2V0PVwib25DbGVhclwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiaW5mXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0zXCI+XG4gICAgICAgICAgICA8aDI+e3sgdHJhbnMoJ2ZpbHRlcl9jYXRlZ29yaWVzJykgfX08L2gyPlxuICAgICAgICAgICAgPEZpbHRlckNvbXBvbmVudFxuICAgICAgICAgICAgICA6cGxhY2Vob2xkZXI9XCJ0cmFucygnZmlsdGVyX3NlYXJjaF9jYXRlZ29yeScpXCJcbiAgICAgICAgICAgICAgOmxpc3Q9XCJjYXRlZ29yaWVzTGlzdFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWNhdGVnb3JpZXNcIlxuICAgICAgICAgICAgICBpdGVtLWlkPVwiaWRfY2F0ZWdvcnlcIlxuICAgICAgICAgICAgICBsYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICBAYWN0aXZlPVwib25GaWx0ZXJBY3RpdmVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0zXCI+XG4gICAgICAgICAgICA8aDI+e3sgdHJhbnMoJ2ZpbHRlcl9zdGF0dXMnKSB9fTwvaDI+XG4gICAgICAgICAgICA8UFNSYWRpb1xuICAgICAgICAgICAgICBpZD1cImVuYWJsZVwiXG4gICAgICAgICAgICAgIDpsYWJlbD1cInRyYW5zKCdmaWx0ZXJfc3RhdHVzX2VuYWJsZScpXCJcbiAgICAgICAgICAgICAgOmNoZWNrZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIHZhbHVlPVwiMVwiXG4gICAgICAgICAgICAgIEBjaGFuZ2U9XCJvblJhZGlvQ2hhbmdlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8UFNSYWRpb1xuICAgICAgICAgICAgICBpZD1cImRpc2FibGVcIlxuICAgICAgICAgICAgICA6bGFiZWw9XCJ0cmFucygnZmlsdGVyX3N0YXR1c19kaXNhYmxlJylcIlxuICAgICAgICAgICAgICA6Y2hlY2tlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCIwXCJcbiAgICAgICAgICAgICAgQGNoYW5nZT1cIm9uUmFkaW9DaGFuZ2VcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxQU1JhZGlvXG4gICAgICAgICAgICAgIGlkPVwiYWxsXCJcbiAgICAgICAgICAgICAgOmxhYmVsPVwidHJhbnMoJ2ZpbHRlcl9zdGF0dXNfYWxsJylcIlxuICAgICAgICAgICAgICA6Y2hlY2tlZD1cInRydWVcIlxuICAgICAgICAgICAgICB2YWx1ZT1cIm51bGxcIlxuICAgICAgICAgICAgICBAY2hhbmdlPVwib25SYWRpb0NoYW5nZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCBQU1NlbGVjdCBmcm9tICdAYXBwL3dpZGdldHMvcHMtc2VsZWN0JztcbiAgaW1wb3J0IFBTRGF0ZVBpY2tlciBmcm9tICdAYXBwL3dpZGdldHMvcHMtZGF0ZXBpY2tlcic7XG4gIGltcG9ydCBQU1JhZGlvIGZyb20gJ0BhcHAvd2lkZ2V0cy9wcy1yYWRpbyc7XG4gIGltcG9ydCBGaWx0ZXJDb21wb25lbnQgZnJvbSAnLi9maWx0ZXJzL2ZpbHRlci1jb21wb25lbnQnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBjb21wdXRlZDoge1xuICAgICAgbG9jYWxlKCkge1xuICAgICAgICByZXR1cm4gd2luZG93LmRhdGEubG9jYWxlO1xuICAgICAgfSxcbiAgICAgIGlzT3ZlcnZpZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5uYW1lID09PSAnb3ZlcnZpZXcnO1xuICAgICAgfSxcbiAgICAgIGVtcGxveWVlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLmVtcGxveWVlcztcbiAgICAgIH0sXG4gICAgICBtb3ZlbWVudHNUeXBlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLm1vdmVtZW50c1R5cGVzO1xuICAgICAgfSxcbiAgICAgIGNhdGVnb3JpZXNMaXN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVycy5jYXRlZ29yaWVzO1xuICAgICAgfSxcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIG9uQ2xlYXIoZXZlbnQpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuZGF0ZV9hZGRbZXZlbnQuZGF0ZVR5cGVdO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XG4gICAgICB9LFxuICAgICAgb25DbGljaygpIHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcigpO1xuICAgICAgfSxcbiAgICAgIG9uRmlsdGVyQWN0aXZlKGxpc3QsIHR5cGUpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzdXBwbGllcicpIHtcbiAgICAgICAgICB0aGlzLnN1cHBsaWVycyA9IGxpc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jYXRlZ29yaWVzID0gbGlzdDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc2FibGVkID0gIXRoaXMuc3VwcGxpZXJzLmxlbmd0aCAmJiAhdGhpcy5jYXRlZ29yaWVzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcigpO1xuICAgICAgfSxcbiAgICAgIGFwcGx5RmlsdGVyKCkge1xuICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnaXNMb2FkaW5nJyk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2FwcGx5RmlsdGVyJywge1xuICAgICAgICAgIHN1cHBsaWVyczogdGhpcy5zdXBwbGllcnMsXG4gICAgICAgICAgY2F0ZWdvcmllczogdGhpcy5jYXRlZ29yaWVzLFxuICAgICAgICAgIGlkX3N0b2NrX212dF9yZWFzb246IHRoaXMuaWRfc3RvY2tfbXZ0X3JlYXNvbixcbiAgICAgICAgICBpZF9lbXBsb3llZTogdGhpcy5pZF9lbXBsb3llZSxcbiAgICAgICAgICBkYXRlX2FkZDogdGhpcy5kYXRlX2FkZCxcbiAgICAgICAgICBhY3RpdmU6IHRoaXMuYWN0aXZlLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvbkNoYW5nZShpdGVtKSB7XG4gICAgICAgIGlmIChpdGVtLml0ZW1JZCA9PT0gJ2lkX3N0b2NrX212dF9yZWFzb24nKSB7XG4gICAgICAgICAgdGhpcy5pZF9zdG9ja19tdnRfcmVhc29uID0gaXRlbS52YWx1ZSA9PT0gJ2RlZmF1bHQnID8gW10gOiBpdGVtLnZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaWRfZW1wbG95ZWUgPSBpdGVtLnZhbHVlID09PSAnZGVmYXVsdCcgPyBbXSA6IGl0ZW0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcigpO1xuICAgICAgfSxcbiAgICAgIG9uRHBDaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5kYXRlX2FkZFtldmVudC5kYXRlVHlwZV0gPSBldmVudC5kYXRlLnVuaXgoKTtcbiAgICAgICAgaWYgKGV2ZW50Lm9sZERhdGUpIHtcbiAgICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvblJhZGlvQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICBGaWx0ZXJDb21wb25lbnQsXG4gICAgICBQU1NlbGVjdCxcbiAgICAgIFBTRGF0ZVBpY2tlcixcbiAgICAgIFBTUmFkaW8sXG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgdGhpcy5kYXRlX2FkZCA9IHt9O1xuICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldFN1cHBsaWVycycpO1xuICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldENhdGVnb3JpZXMnKTtcbiAgICB9LFxuICAgIGRhdGE6ICgpID0+ICh7XG4gICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgIHN1cHBsaWVyczogW10sXG4gICAgICBjYXRlZ29yaWVzOiBbXSxcbiAgICAgIGlkX3N0b2NrX212dF9yZWFzb246IFtdLFxuICAgICAgaWRfZW1wbG95ZWU6IFtdLFxuICAgICAgZGF0ZV9hZGQ6IHt9LFxuICAgICAgYWN0aXZlOiBudWxsLFxuICAgIH0pLFxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8IS0tKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICotLT5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImZpbHRlci1jb250YWluZXJcIj5cbiAgICA8UFNUYWdzXG4gICAgICB2LWlmPVwiIWhhc0NoaWxkcmVuXCJcbiAgICAgIHJlZj1cInRhZ3NcIlxuICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VhcmNoIHNlYXJjaC1pbnB1dCBtYi0yXCJcbiAgICAgIDp0YWdzPVwidGFnc1wiXG4gICAgICA6cGxhY2Vob2xkZXI9XCJoYXNQbGFjZWhvbGRlcj9wbGFjZWhvbGRlcjonJ1wiXG4gICAgICA6aGFzLWljb249XCJ0cnVlXCJcbiAgICAgIEB0YWdDaGFuZ2U9XCJvblRhZ0NoYW5nZWRcIlxuICAgICAgQHR5cGluZz1cIm9uVHlwaW5nXCJcbiAgICAvPlxuICAgIDxkaXYgdi1pZj1cImhhc0NoaWxkcmVuXCI+XG4gICAgICA8UFNUcmVlXG4gICAgICAgIHYtaWY9XCJpc092ZXJ2aWV3XCJcbiAgICAgICAgdi1vbmNlXG4gICAgICAgIHJlZj1cInRyZWVcIlxuICAgICAgICA6aGFzLWNoZWNrYm94PVwidHJ1ZVwiXG4gICAgICAgIDptb2RlbD1cImxpc3RcIlxuICAgICAgICBAY2hlY2tlZD1cIm9uQ2hlY2tcIlxuICAgICAgICA6dHJhbnNsYXRpb25zPVwiUFNUcmVlVHJhbnNsYXRpb25zXCJcbiAgICAgIC8+XG4gICAgICA8UFNUcmVlXG4gICAgICAgIHYtZWxzZVxuICAgICAgICByZWY9XCJ0cmVlXCJcbiAgICAgICAgOmhhcy1jaGVja2JveD1cInRydWVcIlxuICAgICAgICA6bW9kZWw9XCJsaXN0XCJcbiAgICAgICAgQGNoZWNrZWQ9XCJvbkNoZWNrXCJcbiAgICAgICAgOnRyYW5zbGF0aW9ucz1cIlBTVHJlZVRyYW5zbGF0aW9uc1wiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICAgIDx1bFxuICAgICAgY2xhc3M9XCJtdC0xXCJcbiAgICAgIHYtZWxzZVxuICAgID5cbiAgICAgIDxsaVxuICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gZ2V0SXRlbXMoKVwiXG4gICAgICAgIDprZXk9XCJpbmRleFwiXG4gICAgICAgIHYtc2hvdz1cIml0ZW0udmlzaWJsZVwiXG4gICAgICAgIGNsYXNzPVwiaXRlbVwiXG4gICAgICA+XG4gICAgICAgIDxQU1RyZWVJdGVtXG4gICAgICAgICAgOmxhYmVsPVwiaXRlbVtsYWJlbF1cIlxuICAgICAgICAgIDptb2RlbD1cIml0ZW1cIlxuICAgICAgICAgIEBjaGVja2VkPVwib25DaGVja1wiXG4gICAgICAgICAgOmhhcy1jaGVja2JveD1cInRydWVcIlxuICAgICAgICAvPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCBQU1RhZ3MgZnJvbSAnQGFwcC93aWRnZXRzL3BzLXRhZ3MnO1xuICBpbXBvcnQgUFNUcmVlSXRlbSBmcm9tICdAYXBwL3dpZGdldHMvcHMtdHJlZS9wcy10cmVlLWl0ZW0nO1xuICBpbXBvcnQgUFNUcmVlIGZyb20gJ0BhcHAvd2lkZ2V0cy9wcy10cmVlL3BzLXRyZWUnO1xuICBpbXBvcnQge0V2ZW50QnVzfSBmcm9tICdAYXBwL3V0aWxzL2V2ZW50LWJ1cyc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIHByb3BzOiB7XG4gICAgICBwbGFjZWhvbGRlcjoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICB9LFxuICAgICAgaXRlbUlkOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgbGFiZWw6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBsaXN0OiB7XG4gICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgaXNPdmVydmlldygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLm5hbWUgPT09ICdvdmVydmlldyc7XG4gICAgICB9LFxuICAgICAgaGFzUGxhY2Vob2xkZXIoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy50YWdzLmxlbmd0aDtcbiAgICAgIH0sXG4gICAgICBQU1RyZWVUcmFuc2xhdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXhwYW5kOiB0aGlzLnRyYW5zKCd0cmVlX2V4cGFuZCcpLFxuICAgICAgICAgIHJlZHVjZTogdGhpcy50cmFucygndHJlZV9yZWR1Y2UnKSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBnZXRJdGVtcygpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hMaXN0ID0gW107XG4gICAgICAgIHRoaXMubGlzdC5maWx0ZXIoKGRhdGEpID0+IHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGRhdGFbdGhpcy5sYWJlbF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBkYXRhLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICBpZiAobGFiZWwubWF0Y2godGhpcy5jdXJyZW50VmFsKSkge1xuICAgICAgICAgICAgZGF0YS52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hdGNoTGlzdC5wdXNoKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGF0YS5jaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5oYXNDaGlsZHJlbiA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAobWF0Y2hMaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRoaXMubWF0Y2ggPSBtYXRjaExpc3RbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tYXRjaCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdDtcbiAgICAgIH0sXG4gICAgICBvbkNoZWNrKG9iaikge1xuICAgICAgICBjb25zdCBpdGVtTGFiZWwgPSBvYmouaXRlbVt0aGlzLmxhYmVsXTtcbiAgICAgICAgY29uc3QgZmlsdGVyVHlwZSA9IHRoaXMuaGFzQ2hpbGRyZW4gPyAnY2F0ZWdvcnknIDogJ3N1cHBsaWVyJztcblxuICAgICAgICBpZiAob2JqLmNoZWNrZWQpIHtcbiAgICAgICAgICB0aGlzLnRhZ3MucHVzaChpdGVtTGFiZWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50YWdzLmluZGV4T2YoaXRlbUxhYmVsKTtcblxuICAgICAgICAgIGlmICh0aGlzLnNwbGljZSkge1xuICAgICAgICAgICAgdGhpcy50YWdzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc3BsaWNlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YWdzLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ2FjdGl2ZScsIHRoaXMuZmlsdGVyTGlzdCh0aGlzLnRhZ3MpLCBmaWx0ZXJUeXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdhY3RpdmUnLCBbXSwgZmlsdGVyVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvblR5cGluZyh2YWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsID0gdmFsLnRvTG93ZXJDYXNlKCk7XG4gICAgICB9LFxuICAgICAgb25UYWdDaGFuZ2VkKHRhZykge1xuICAgICAgICBsZXQgY2hlY2tlZFRhZyA9IHRhZztcblxuICAgICAgICBpZiAodGhpcy50YWdzLmluZGV4T2YodGhpcy5jdXJyZW50VmFsKSAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzLnRhZ3MucG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zcGxpY2UgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMubWF0Y2gpIHtcbiAgICAgICAgICBjaGVja2VkVGFnID0gdGhpcy5tYXRjaFt0aGlzLmxhYmVsXTtcbiAgICAgICAgfVxuICAgICAgICBFdmVudEJ1cy4kZW1pdCgndG9nZ2xlQ2hlY2tib3gnLCBjaGVja2VkVGFnKTtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsID0gJyc7XG4gICAgICB9LFxuICAgICAgZmlsdGVyTGlzdCh0YWdzKSB7XG4gICAgICAgIGNvbnN0IGlkTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCB7Y2F0ZWdvcnlMaXN0fSA9IHRoaXMuJHN0b3JlLnN0YXRlO1xuICAgICAgICBjb25zdCBsaXN0ID0gdGhpcy5oYXNDaGlsZHJlbiA/IGNhdGVnb3J5TGlzdCA6IHRoaXMubGlzdDtcblxuICAgICAgICBsaXN0Lm1hcCgoZGF0YSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzSW5JZExpc3QgPSBpZExpc3QuaW5kZXhPZihOdW1iZXIoZGF0YVt0aGlzLml0ZW1JZF0pKSA9PT0gLTE7XG5cbiAgICAgICAgICBpZiAodGFncy5pbmRleE9mKGRhdGFbdGhpcy5sYWJlbF0pICE9PSAtMSAmJiBpc0luSWRMaXN0KSB7XG4gICAgICAgICAgICBpZExpc3QucHVzaChOdW1iZXIoZGF0YVt0aGlzLml0ZW1JZF0pKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGlkTGlzdDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpZExpc3Q7XG4gICAgICB9LFxuICAgIH0sXG4gICAgZGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnRWYWw6ICcnLFxuICAgICAgICBtYXRjaDogbnVsbCxcbiAgICAgICAgdGFnczogW10sXG4gICAgICAgIHNwbGljZTogdHJ1ZSxcbiAgICAgICAgaGFzQ2hpbGRyZW46IGZhbHNlLFxuICAgICAgfTtcbiAgICB9LFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIFBTVGFncyxcbiAgICAgIFBTVHJlZSxcbiAgICAgIFBTVHJlZUl0ZW0sXG4gICAgfSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImNvbnRlbnQtdG9wYmFyIGNvbnRhaW5lci1mbHVpZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgcHktMlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbCByb3cgbWwtMVwiPlxuICAgICAgICA8UFNDaGVja2JveFxuICAgICAgICAgIHJlZj1cImxvdy1maWx0ZXJcIlxuICAgICAgICAgIGlkPVwibG93LWZpbHRlclwiXG4gICAgICAgICAgY2xhc3M9XCJtdC0xXCJcbiAgICAgICAgICBAY2hlY2tlZD1cIm9uQ2hlY2tcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIHNsb3Q9XCJsYWJlbFwiXG4gICAgICAgICAgICBjbGFzcz1cIm1sLTJcIlxuICAgICAgICAgID57eyB0cmFucygnZmlsdGVyX2xvd19zdG9jaycpIH19PC9zcGFuPlxuICAgICAgICA8L1BTQ2hlY2tib3g+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LXRvcGJhci1yaWdodCBjb2wgbXItMyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgPGEgOmhyZWY9XCJzdG9ja0V4cG9ydFVybFwiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBkYXRhLXRvZ2dsZT1cInBzdG9vbHRpcFwiXG4gICAgICAgICAgICA6dGl0bGU9XCJzdG9ja0V4cG9ydFRpdGxlXCJcbiAgICAgICAgICAgIGRhdGEtaHRtbD1cInRydWVcIlxuICAgICAgICAgICAgZGF0YS1wbGFjZW1lbnQ9XCJ0b3BcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5jbG91ZF91cGxvYWQ8L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxhXG4gICAgICAgICAgY2xhc3M9XCJtbC0yXCJcbiAgICAgICAgICA6aHJlZj1cInN0b2NrSW1wb3J0VXJsXCJcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwicHN0b29sdGlwXCJcbiAgICAgICAgICAgIDp0aXRsZT1cInN0b2NrSW1wb3J0VGl0bGVcIlxuICAgICAgICAgICAgZGF0YS1odG1sPVwidHJ1ZVwiXG4gICAgICAgICAgICBkYXRhLXBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmNsb3VkX2Rvd25sb2FkPC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0IFBTQ2hlY2tib3ggZnJvbSAnQGFwcC93aWRnZXRzL3BzLWNoZWNrYm94JztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSksXG4gICAgICB9LFxuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHN0b2NrSW1wb3J0VGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zKCd0aXRsZV9pbXBvcnQnKTtcbiAgICAgIH0sXG4gICAgICBzdG9ja0V4cG9ydFRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFucygndGl0bGVfZXhwb3J0Jyk7XG4gICAgICB9LFxuICAgICAgc3RvY2tJbXBvcnRVcmwoKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuZGF0YS5zdG9ja0ltcG9ydFVybDtcbiAgICAgIH0sXG4gICAgICBzdG9ja0V4cG9ydFVybCgpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gJC5wYXJhbSh0aGlzLmZpbHRlcnMpO1xuXG4gICAgICAgIHJldHVybiBgJHt3aW5kb3cuZGF0YS5zdG9ja0V4cG9ydFVybH0mJHtwYXJhbXN9YDtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBvbkNoZWNrKGNoZWNrYm94KSB7XG4gICAgICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGNoZWNrYm94LmNoZWNrZWQgPyAxIDogMDtcbiAgICAgICAgdGhpcy4kZW1pdCgnbG93U3RvY2tDaGVja2VkJywgaXNDaGVja2VkKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgJCgnW2RhdGEtdG9nZ2xlPVwicHN0b29sdGlwXCJdJykucHN0b29sdGlwKCk7XG4gICAgfSxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICBQU0NoZWNrYm94LFxuICAgIH0sXG4gIH07XG48L3NjcmlwdD5cbiIsIjwhLS0qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi0tPlxuPHRlbXBsYXRlPlxuICA8ZGl2XG4gICAgaWQ9XCJzZWFyY2hcIlxuICAgIGNsYXNzPVwicm93IG1iLTJcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICA8Zm9ybVxuICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWZvcm1cIlxuICAgICAgICAgIEBzdWJtaXQucHJldmVudFxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsPnt7IHRyYW5zKCdwcm9kdWN0X3NlYXJjaCcpIH19PC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgIDxQU1RhZ3NcbiAgICAgICAgICAgICAgcmVmPVwicHNUYWdzXCJcbiAgICAgICAgICAgICAgOnRhZ3M9XCJ0YWdzXCJcbiAgICAgICAgICAgICAgQHRhZ0NoYW5nZT1cIm9uU2VhcmNoXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgIDxQU0J1dHRvblxuICAgICAgICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgOnByaW1hcnk9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5zZWFyY2g8L2k+XG4gICAgICAgICAgICAgICAge3sgdHJhbnMoJ2J1dHRvbl9zZWFyY2gnKSB9fVxuICAgICAgICAgICAgICA8L1BTQnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgICAgPEZpbHRlcnMgQGFwcGx5RmlsdGVyPVwiYXBwbHlGaWx0ZXJcIiAvPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBhbGVydC1ib3hcIj5cbiAgICAgIDx0cmFuc2l0aW9uIG5hbWU9XCJmYWRlXCI+XG4gICAgICAgIDxQU0FsZXJ0XG4gICAgICAgICAgdi1pZj1cInNob3dBbGVydFwiXG4gICAgICAgICAgOmFsZXJ0LXR5cGU9XCJhbGVydFR5cGVcIlxuICAgICAgICAgIDpoYXMtY2xvc2U9XCJ0cnVlXCJcbiAgICAgICAgICBAY2xvc2VBbGVydD1cIm9uQ2xvc2VBbGVydFwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiB2LWlmPVwiZXJyb3JcIj57eyB0cmFucygnYWxlcnRfYnVsa19lZGl0JykgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gdi1lbHNlPnt7IHRyYW5zKCdub3RpZmljYXRpb25fc3RvY2tfdXBkYXRlZCcpIH19PC9zcGFuPlxuICAgICAgICA8L1BTQWxlcnQ+XG4gICAgICA8L3RyYW5zaXRpb24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0IFBTVGFncyBmcm9tICdAYXBwL3dpZGdldHMvcHMtdGFncyc7XG4gIGltcG9ydCBQU0J1dHRvbiBmcm9tICdAYXBwL3dpZGdldHMvcHMtYnV0dG9uJztcbiAgaW1wb3J0IFBTQWxlcnQgZnJvbSAnQGFwcC93aWRnZXRzL3BzLWFsZXJ0JztcbiAgaW1wb3J0IHtFdmVudEJ1c30gZnJvbSAnQGFwcC91dGlscy9ldmVudC1idXMnO1xuICBpbXBvcnQgRmlsdGVycyBmcm9tICcuL2ZpbHRlcnMnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICBGaWx0ZXJzLFxuICAgICAgUFNUYWdzLFxuICAgICAgUFNCdXR0b24sXG4gICAgICBQU0FsZXJ0LFxuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGVycm9yKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuYWxlcnRUeXBlID09PSAnQUxFUlRfVFlQRV9EQU5HRVInKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBvbkNsaWNrKCkge1xuICAgICAgICBjb25zdCB7dGFnfSA9IHRoaXMuJHJlZnMucHNUYWdzO1xuICAgICAgICB0aGlzLiRyZWZzLnBzVGFncy5hZGQodGFnKTtcbiAgICAgIH0sXG4gICAgICBvblNlYXJjaCgpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnc2VhcmNoJywgdGhpcy50YWdzKTtcbiAgICAgIH0sXG4gICAgICBhcHBseUZpbHRlcihmaWx0ZXJzKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2FwcGx5RmlsdGVyJywgZmlsdGVycyk7XG4gICAgICB9LFxuICAgICAgb25DbG9zZUFsZXJ0KCkge1xuICAgICAgICB0aGlzLnNob3dBbGVydCA9IGZhbHNlO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHdhdGNoOiB7XG4gICAgICAkcm91dGUoKSB7XG4gICAgICAgIHRoaXMudGFncyA9IFtdO1xuICAgICAgfSxcbiAgICB9LFxuICAgIG1vdW50ZWQoKSB7XG4gICAgICBFdmVudEJ1cy4kb24oJ2Rpc3BsYXlCdWxrQWxlcnQnLCAodHlwZSkgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0VHlwZSA9IHR5cGUgPT09ICdzdWNjZXNzJyA/ICdBTEVSVF9UWVBFX1NVQ0NFU1MnIDogJ0FMRVJUX1RZUEVfREFOR0VSJztcbiAgICAgICAgdGhpcy5zaG93QWxlcnQgPSB0cnVlO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dBbGVydCA9IGZhbHNlO1xuICAgICAgICB9LCA1MDAwKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZGF0YTogKCkgPT4gKHtcbiAgICAgIHRhZ3M6IFtdLFxuICAgICAgc2hvd0FsZXJ0OiBmYWxzZSxcbiAgICAgIGFsZXJ0VHlwZTogJ0FMRVJUX1RZUEVfREFOR0VSJyxcbiAgICAgIGR1cmF0aW9uOiBmYWxzZSxcbiAgICB9KSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImhlYWRlci10b29sYmFyXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxuICAgICAgPEJyZWFkY3J1bWIgLz5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yb3dcIj5cbiAgICAgICAgPGgxIGNsYXNzPVwidGl0bGVcIj5cbiAgICAgICAgICB7eyB0cmFucygnaGVhZF90aXRsZScpIH19XG4gICAgICAgIDwvaDE+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8VGFicyAvPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCBCcmVhZGNydW1iIGZyb20gJy4vYnJlYWRjcnVtYic7XG4gIGltcG9ydCBUYWJzIGZyb20gJy4vdGFicyc7XG5cbiAgY29uc3QgeyR9ID0gd2luZG93O1xuXG4gIGZ1bmN0aW9uIGdldE9sZEhlYWRlclRvb2xiYXJCdXR0b25zKCkge1xuICAgIHJldHVybiAkKCcuaGVhZGVyLXRvb2xiYXInKVxuICAgICAgLmZpcnN0KClcbiAgICAgIC5maW5kKCcudG9vbGJhci1pY29ucycpO1xuICB9XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIEJyZWFkY3J1bWIsXG4gICAgICBUYWJzLFxuICAgIH0sXG4gICAgbW91bnRlZCgpIHtcbiAgICAgIC8vIG1vdmUgdGhlIHRvb2xiYXIgYnV0dG9ucyB0byB0aGlzIGhlYWRlclxuICAgICAgY29uc3QgdG9vbGJhckJ1dHRvbnMgPSBnZXRPbGRIZWFkZXJUb29sYmFyQnV0dG9ucygpO1xuICAgICAgdG9vbGJhckJ1dHRvbnMuaW5zZXJ0QWZ0ZXIoJCh0aGlzLiRlbCkuZmluZCgnLnRpdGxlLXJvdyA+IC50aXRsZScpKTtcblxuICAgICAgLy8gc2lnbmFsIGhlYWRlciBjaGFuZ2UgKHNvIHNpemUgY2FuIGJlIHVwZGF0ZWQpXG4gICAgICBjb25zdCBldmVudCA9ICQuRXZlbnQoJ3Z1ZUhlYWRlck1vdW50ZWQnLCB7XG4gICAgICAgIG5hbWU6ICdzdG9jay1oZWFkZXInLFxuICAgICAgfSk7XG4gICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKGV2ZW50KTtcbiAgICB9LFxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8IS0tKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICotLT5cbjx0ZW1wbGF0ZT5cbiAgPGRpdlxuICAgIGNsYXNzPVwicGFnZS1oZWFkLXRhYnNcIlxuICAgIGlkPVwiaGVhZF90YWJzXCJcbiAgPlxuICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtcGlsbHNcIj5cbiAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgIDxyb3V0ZXItbGlua1xuICAgICAgICAgIGRhdGEtdG9nZ2xlPVwidGFiXCJcbiAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7YWN0aXZlIDogaXNPdmVydmlld31cIlxuICAgICAgICAgIHRvPVwiL1wiXG4gICAgICAgICAgcm9sZT1cInRhYlwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyB0cmFucygnbWVudV9zdG9jaycpIH19XG4gICAgICAgIDwvcm91dGVyLWxpbms+XG4gICAgICA8L2xpPlxuICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cbiAgICAgICAgPHJvdXRlci1saW5rXG4gICAgICAgICAgZGF0YS10b2dnbGU9XCJ0YWJcIlxuICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmtcIlxuICAgICAgICAgIDpjbGFzcz1cInthY3RpdmUgOiBpc01vdmVtZW50c31cIlxuICAgICAgICAgIHRvPVwiL21vdmVtZW50c1wiXG4gICAgICAgICAgcm9sZT1cInRhYlwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyB0cmFucygnbWVudV9tb3ZlbWVudHMnKSB9fVxuICAgICAgICA8L3JvdXRlci1saW5rPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBjb21wdXRlZDoge1xuICAgICAgaXNPdmVydmlldygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLm5hbWUgPT09ICdvdmVydmlldyc7XG4gICAgICB9LFxuICAgICAgaXNNb3ZlbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5uYW1lID09PSAnbW92ZW1lbnRzJztcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG48dGVtcGxhdGU+XG4gIDxzZWN0aW9uIGNsYXNzPVwic3RvY2stbW92ZW1lbnRzXCI+XG4gICAgPFBTVGFibGUgY2xhc3M9XCJtdC0xXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGggd2lkdGg9XCIzMCVcIj5cbiAgICAgICAgICAgIDxQU1NvcnRcbiAgICAgICAgICAgICAgb3JkZXI9XCJwcm9kdWN0XCJcbiAgICAgICAgICAgICAgQHNvcnQ9XCJzb3J0XCJcbiAgICAgICAgICAgICAgOmN1cnJlbnQtc29ydD1cImN1cnJlbnRTb3J0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgdHJhbnMoJ3RpdGxlX3Byb2R1Y3QnKSB9fVxuICAgICAgICAgICAgPC9QU1NvcnQ+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGg+XG4gICAgICAgICAgICA8UFNTb3J0XG4gICAgICAgICAgICAgIG9yZGVyPVwicmVmZXJlbmNlXCJcbiAgICAgICAgICAgICAgQHNvcnQ9XCJzb3J0XCJcbiAgICAgICAgICAgICAgOmN1cnJlbnQtc29ydD1cImN1cnJlbnRTb3J0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgdHJhbnMoJ3RpdGxlX3JlZmVyZW5jZScpIH19XG4gICAgICAgICAgICA8L1BTU29ydD5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgIHt7IHRyYW5zKCd0aXRsZV9tb3ZlbWVudHNfdHlwZScpIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAge3sgdHJhbnMoJ3RpdGxlX3F1YW50aXR5JykgfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8UFNTb3J0XG4gICAgICAgICAgICAgIG9yZGVyPVwiZGF0ZV9hZGRcIlxuICAgICAgICAgICAgICBAc29ydD1cInNvcnRcIlxuICAgICAgICAgICAgICA6Y3VycmVudC1zb3J0PVwiY3VycmVudFNvcnRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyB0cmFucygndGl0bGVfZGF0ZScpIH19XG4gICAgICAgICAgICA8L1BTU29ydD5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgIHt7IHRyYW5zKCd0aXRsZV9lbXBsb3llZScpIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHk+XG4gICAgICAgIDx0ciB2LWlmPVwidGhpcy5pc0xvYWRpbmdcIj5cbiAgICAgICAgICA8dGQgY29sc3Bhbj1cIjZcIj5cbiAgICAgICAgICAgIDxQU0xvYWRlclxuICAgICAgICAgICAgICB2LWZvcj1cIihuLCBpbmRleCkgaW4gM1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwibXQtMVwiXG4gICAgICAgICAgICAgIDprZXk9XCJpbmRleFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYWNrZ3JvdW5kLW1hc2tlciBoZWFkZXItdG9wXCIgLz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhY2tncm91bmQtbWFza2VyIGhlYWRlci1sZWZ0XCIgLz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhY2tncm91bmQtbWFza2VyIGhlYWRlci1ib3R0b21cIiAvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFja2dyb3VuZC1tYXNrZXIgc3ViaGVhZGVyLWxlZnRcIiAvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFja2dyb3VuZC1tYXNrZXIgc3ViaGVhZGVyLWJvdHRvbVwiIC8+XG4gICAgICAgICAgICA8L1BTTG9hZGVyPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciB2LWVsc2UtaWY9XCJlbXB0eU1vdmVtZW50c1wiPlxuICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNlwiPlxuICAgICAgICAgICAgPFBTQWxlcnRcbiAgICAgICAgICAgICAgYWxlcnQtdHlwZT1cIkFMRVJUX1RZUEVfV0FSTklOR1wiXG4gICAgICAgICAgICAgIDpoYXMtY2xvc2U9XCJmYWxzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IHRyYW5zKCdub19wcm9kdWN0JykgfX1cbiAgICAgICAgICAgIDwvUFNBbGVydD5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8TW92ZW1lbnRMaW5lXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgdi1mb3I9XCIocHJvZHVjdCwgaW5kZXgpIGluIG1vdmVtZW50c1wiXG4gICAgICAgICAgOmtleT1cImluZGV4XCJcbiAgICAgICAgICA6cHJvZHVjdD1cInByb2R1Y3RcIlxuICAgICAgICAvPlxuICAgICAgPC90Ym9keT5cbiAgICA8L1BTVGFibGU+XG4gIDwvc2VjdGlvbj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCBQU1RhYmxlIGZyb20gJ0BhcHAvd2lkZ2V0cy9wcy10YWJsZS9wcy10YWJsZSc7XG4gIGltcG9ydCBQU1NvcnQgZnJvbSAnQGFwcC93aWRnZXRzL3BzLXRhYmxlL3BzLXNvcnQnO1xuICBpbXBvcnQgUFNBbGVydCBmcm9tICdAYXBwL3dpZGdldHMvcHMtYWxlcnQnO1xuICBpbXBvcnQgUFNMb2FkZXIgZnJvbSAnQGFwcC93aWRnZXRzL3BzLWxvYWRlcic7XG4gIGltcG9ydCBNb3ZlbWVudExpbmUgZnJvbSAnLi9tb3ZlbWVudC1saW5lJztcblxuICBjb25zdCBERUZBVUxUX1NPUlQgPSAnZGVzYyc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIGNvbXB1dGVkOiB7XG4gICAgICBpc0xvYWRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5pc0xvYWRpbmc7XG4gICAgICB9LFxuICAgICAgbW92ZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUubW92ZW1lbnRzO1xuICAgICAgfSxcbiAgICAgIGVtcHR5TW92ZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuJHN0b3JlLnN0YXRlLm1vdmVtZW50cy5sZW5ndGg7XG4gICAgICB9LFxuICAgICAgY3VycmVudFNvcnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5vcmRlcjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBzb3J0KG9yZGVyLCBzb3J0RGlyZWN0aW9uKSB7XG4gICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCd1cGRhdGVPcmRlcicsIG9yZGVyKTtcbiAgICAgICAgdGhpcy4kZW1pdCgnZmV0Y2gnLCBzb3J0RGlyZWN0aW9uID09PSAnZGVzYycgPyAnZGVzYycgOiAnYXNjJyk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgbW91bnRlZCgpIHtcbiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCd1cGRhdGVQYWdlSW5kZXgnLCAxKTtcbiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCd1cGRhdGVLZXl3b3JkcycsIFtdKTtcbiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRFbXBsb3llZXMnKTtcbiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRNb3ZlbWVudHNUeXBlcycpO1xuICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZU9yZGVyJywgJ2RhdGVfYWRkJyk7XG4gICAgICB0aGlzLiRlbWl0KCdyZXNldEZpbHRlcnMnKTtcbiAgICAgIHRoaXMuJGVtaXQoJ2ZldGNoJywgREVGQVVMVF9TT1JUKTtcbiAgICB9LFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIFBTVGFibGUsXG4gICAgICBQU1NvcnQsXG4gICAgICBQU0FsZXJ0LFxuICAgICAgUFNMb2FkZXIsXG4gICAgICBNb3ZlbWVudExpbmUsXG4gICAgfSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG48dGVtcGxhdGU+XG4gIDx0cj5cbiAgICA8dGQ+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8UFNNZWRpYVxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgOnRodW1ibmFpbD1cInRodW1ibmFpbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8cD5cbiAgICAgICAgICAgIHt7IHByb2R1Y3QucHJvZHVjdF9uYW1lIH19XG4gICAgICAgICAgICA8c21hbGwgdi1pZj1cImhhc0NvbWJpbmF0aW9uXCI+PGJyPlxuICAgICAgICAgICAgICB7eyBjb21iaW5hdGlvbk5hbWUgfX1cbiAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L1BTTWVkaWE+XG4gICAgICA8L2Rpdj5cbiAgICA8L3RkPlxuICAgIDx0ZD5cbiAgICAgIHt7IHByb2R1Y3QucHJvZHVjdF9yZWZlcmVuY2UgfX1cbiAgICA8L3RkPlxuICAgIDx0ZD5cbiAgICAgIDxhXG4gICAgICAgIHYtaWY9XCJvcmRlckxpbmtcIlxuICAgICAgICA6aHJlZj1cIm9yZGVyTGlua1wiXG4gICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICA+XG4gICAgICAgIHt7IHByb2R1Y3QubW92ZW1lbnRfcmVhc29uIH19XG4gICAgICA8L2E+XG4gICAgICA8c3BhbiB2LWVsc2U+e3sgcHJvZHVjdC5tb3ZlbWVudF9yZWFzb24gfX08L3NwYW4+XG4gICAgPC90ZD5cbiAgICA8dGQgY2xhc3M9XCJ0ZXh0LXNtLWNlbnRlclwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJxdHktbnVtYmVyXCJcbiAgICAgICAgOmNsYXNzPVwieydpcy1wb3NpdGl2ZScgOiBpc1Bvc2l0aXZlfVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIHYtaWY9XCJpc1Bvc2l0aXZlXCI+Kzwvc3Bhbj5cbiAgICAgICAgPHNwYW4gdi1lbHNlPi08L3NwYW4+XG4gICAgICAgIHt7IHF0eSB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvdGQ+XG4gICAgPHRkIGNsYXNzPVwidGV4dC1zbS1jZW50ZXJcIj5cbiAgICAgIHt7IHByb2R1Y3QuZGF0ZV9hZGQgfX1cbiAgICA8L3RkPlxuICAgIDx0ZD5cbiAgICAgIHt7IGVtcGxveWVlTmFtZSB9fVxuICAgIDwvdGQ+XG4gIDwvdHI+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgUFNNZWRpYSBmcm9tICdAYXBwL3dpZGdldHMvcHMtbWVkaWEnO1xuICBpbXBvcnQgcHJvZHVjdERlc2MgZnJvbSAnQGFwcC9wYWdlcy9zdG9jay9taXhpbnMvcHJvZHVjdC1kZXNjJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgIHByb2R1Y3Q6IHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtaXhpbnM6IFtwcm9kdWN0RGVzY10sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHF0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZHVjdC5waHlzaWNhbF9xdWFudGl0eTtcbiAgICAgIH0sXG4gICAgICBlbXBsb3llZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnByb2R1Y3QuZW1wbG95ZWVfZmlyc3RuYW1lfSAke3RoaXMucHJvZHVjdC5lbXBsb3llZV9sYXN0bmFtZX1gO1xuICAgICAgfSxcbiAgICAgIGlzUG9zaXRpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2R1Y3Quc2lnbiA+IDA7XG4gICAgICB9LFxuICAgICAgb3JkZXJMaW5rKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9kdWN0Lm9yZGVyX2xpbmsgIT09ICdOL0EnID8gdGhpcy5wcm9kdWN0Lm9yZGVyX2xpbmsgOiBudWxsO1xuICAgICAgfSxcbiAgICB9LFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIFBTTWVkaWEsXG4gICAgfSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG48dGVtcGxhdGU+XG4gIDxzZWN0aW9uIGNsYXNzPVwic3RvY2stb3ZlcnZpZXdcIj5cbiAgICA8UHJvZHVjdHNBY3Rpb25zIC8+XG4gICAgPFByb2R1Y3RzVGFibGVcbiAgICAgIDppcy1sb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICAgIEBzb3J0PVwic29ydFwiXG4gICAgLz5cbiAgPC9zZWN0aW9uPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0IFByb2R1Y3RzQWN0aW9ucyBmcm9tICcuL3Byb2R1Y3RzLWFjdGlvbnMnO1xuICBpbXBvcnQgUHJvZHVjdHNUYWJsZSBmcm9tICcuL3Byb2R1Y3RzLXRhYmxlJztcblxuICBjb25zdCBERUZBVUxUX1NPUlQgPSAnYXNjJztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGlzTG9hZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLmlzTG9hZGluZztcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBzb3J0KHNvcnREaXJlY3Rpb24pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnZmV0Y2gnLCBzb3J0RGlyZWN0aW9uKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZVBhZ2VJbmRleCcsIDEpO1xuICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZUtleXdvcmRzJywgW10pO1xuICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZU9yZGVyJywgJ3Byb2R1Y3QnKTtcbiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdpc0xvYWRpbmcnKTtcbiAgICAgIHRoaXMuJGVtaXQoJ3Jlc2V0RmlsdGVycycpO1xuICAgICAgdGhpcy4kZW1pdCgnZmV0Y2gnLCBERUZBVUxUX1NPUlQpO1xuICAgIH0sXG4gICAgY29tcG9uZW50czoge1xuICAgICAgUHJvZHVjdHNBY3Rpb25zLFxuICAgICAgUHJvZHVjdHNUYWJsZSxcbiAgICB9LFxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8IS0tKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICotLT5cbjx0ZW1wbGF0ZT5cbiAgPHRyIDpjbGFzcz1cInsnbG93LXN0b2NrJzpsb3dTdG9ja31cIj5cbiAgICA8dGQ+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8UFNDaGVja2JveFxuICAgICAgICAgIDppZD1cImlkXCJcbiAgICAgICAgICA6cmVmPVwiaWRcIlxuICAgICAgICAgIDptb2RlbD1cInByb2R1Y3RcIlxuICAgICAgICAgIEBjaGVja2VkPVwicHJvZHVjdENoZWNrZWRcIlxuICAgICAgICAvPlxuICAgICAgICA8UFNNZWRpYVxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtbC0yXCJcbiAgICAgICAgICA6dGh1bWJuYWlsPVwidGh1bWJuYWlsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAge3sgcHJvZHVjdC5wcm9kdWN0X25hbWUgfX1cbiAgICAgICAgICAgIDxzbWFsbCB2LWlmPVwiaGFzQ29tYmluYXRpb25cIj48YnI+XG4gICAgICAgICAgICAgIHt7IGNvbWJpbmF0aW9uTmFtZSB9fVxuICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvUFNNZWRpYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvdGQ+XG4gICAgPHRkPlxuICAgICAge3sgcmVmZXJlbmNlIH19XG4gICAgPC90ZD5cbiAgICA8dGQ+XG4gICAgICB7eyBwcm9kdWN0LnN1cHBsaWVyX25hbWUgfX1cbiAgICA8L3RkPlxuICAgIDx0ZFxuICAgICAgdi1pZj1cInByb2R1Y3QuYWN0aXZlXCJcbiAgICAgIGNsYXNzPVwidGV4dC1zbS1jZW50ZXJcIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgZW5hYmxlXCI+Y2hlY2s8L2k+XG4gICAgPC90ZD5cbiAgICA8dGRcbiAgICAgIHYtZWxzZVxuICAgICAgY2xhc3M9XCJ0ZXh0LXNtLWNlbnRlclwiXG4gICAgPlxuICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBkaXNhYmxlXCI+Y2xvc2U8L2k+XG4gICAgPC90ZD5cbiAgICA8dGRcbiAgICAgIGNsYXNzPVwidGV4dC1zbS1jZW50ZXJcIlxuICAgICAgOmNsYXNzPVwieydzdG9jay13YXJuaW5nJzpsb3dTdG9ja31cIlxuICAgID5cbiAgICAgIHt7IHBoeXNpY2FsIH19XG4gICAgICA8c3BhblxuICAgICAgICB2LWlmPVwidXBkYXRlZFF0eVwiXG4gICAgICAgIGNsYXNzPVwicXR5LXVwZGF0ZVwiXG4gICAgICAgIDpjbGFzcz1cInsnc3RvY2std2FybmluZyc6bG93U3RvY2t9XCJcbiAgICAgID5cbiAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPnRyZW5kaW5nX2ZsYXQ8L2k+XG4gICAgICAgIHt7IHBoeXNpY2FsUXR5VXBkYXRlZCB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvdGQ+XG4gICAgPHRkXG4gICAgICBjbGFzcz1cInRleHQtc20tY2VudGVyXCJcbiAgICAgIDpjbGFzcz1cInsnc3RvY2std2FybmluZyc6bG93U3RvY2t9XCJcbiAgICA+XG4gICAgICB7eyBwcm9kdWN0LnByb2R1Y3RfcmVzZXJ2ZWRfcXVhbnRpdHkgfX1cbiAgICA8L3RkPlxuICAgIDx0ZFxuICAgICAgY2xhc3M9XCJ0ZXh0LXNtLWNlbnRlclwiXG4gICAgICA6Y2xhc3M9XCJ7J3N0b2NrLXdhcm5pbmcnOmxvd1N0b2NrfVwiXG4gICAgPlxuICAgICAge3sgcHJvZHVjdC5wcm9kdWN0X2F2YWlsYWJsZV9xdWFudGl0eSB9fVxuICAgICAgPHNwYW5cbiAgICAgICAgdi1pZj1cInVwZGF0ZWRRdHlcIlxuICAgICAgICBjbGFzcz1cInF0eS11cGRhdGVcIlxuICAgICAgICA6Y2xhc3M9XCJ7J3N0b2NrLXdhcm5pbmcnOmxvd1N0b2NrfVwiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj50cmVuZGluZ19mbGF0PC9pPlxuICAgICAgICB7eyBhdmFpbGFibGVRdHlVcGRhdGVkIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICB2LWlmPVwibG93U3RvY2tcIlxuICAgICAgICBjbGFzcz1cInN0b2NrLXdhcm5pbmcgaWNvIG1sLTJcIlxuICAgICAgICBkYXRhLXRvZ2dsZT1cInBzdG9vbHRpcFwiXG4gICAgICAgIGRhdGEtcGxhY2VtZW50PVwidG9wXCJcbiAgICAgICAgZGF0YS1odG1sPVwidHJ1ZVwiXG4gICAgICAgIDp0aXRsZT1cImxvd1N0b2NrTGV2ZWxcIlxuICAgICAgPiE8L3NwYW4+XG4gICAgPC90ZD5cbiAgICA8dGQgY2xhc3M9XCJxdHktc3Bpbm5lciB0ZXh0LXJpZ2h0XCI+XG4gICAgICA8U3Bpbm5lclxuICAgICAgICA6cHJvZHVjdD1cInByb2R1Y3RcIlxuICAgICAgICBAdXBkYXRlUHJvZHVjdFF0eT1cInVwZGF0ZVByb2R1Y3RRdHlcIlxuICAgICAgLz5cbiAgICA8L3RkPlxuICA8L3RyPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0IFBTQ2hlY2tib3ggZnJvbSAnQGFwcC93aWRnZXRzL3BzLWNoZWNrYm94JztcbiAgaW1wb3J0IFBTTWVkaWEgZnJvbSAnQGFwcC93aWRnZXRzL3BzLW1lZGlhJztcbiAgaW1wb3J0IFByb2R1Y3REZXNjIGZyb20gJ0BhcHAvcGFnZXMvc3RvY2svbWl4aW5zL3Byb2R1Y3QtZGVzYyc7XG4gIGltcG9ydCB7RXZlbnRCdXN9IGZyb20gJ0BhcHAvdXRpbHMvZXZlbnQtYnVzJztcbiAgaW1wb3J0IFNwaW5uZXIgZnJvbSAnQGFwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL292ZXJ2aWV3L3NwaW5uZXInO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBwcm9wczoge1xuICAgICAgcHJvZHVjdDoge1xuICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIG1peGluczogW1Byb2R1Y3REZXNjXSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgcmVmZXJlbmNlKCkge1xuICAgICAgICBpZiAodGhpcy5wcm9kdWN0LmNvbWJpbmF0aW9uX3JlZmVyZW5jZSAhPT0gJ04vQScpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wcm9kdWN0LmNvbWJpbmF0aW9uX3JlZmVyZW5jZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wcm9kdWN0LnByb2R1Y3RfcmVmZXJlbmNlO1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZWRRdHkoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMucHJvZHVjdC5xdHk7XG4gICAgICB9LFxuICAgICAgcGh5c2ljYWxRdHlVcGRhdGVkKCkge1xuICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMucGh5c2ljYWwpICsgTnVtYmVyKHRoaXMucHJvZHVjdC5xdHkpO1xuICAgICAgfSxcbiAgICAgIGF2YWlsYWJsZVF0eVVwZGF0ZWQoKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIodGhpcy5wcm9kdWN0LnByb2R1Y3RfYXZhaWxhYmxlX3F1YW50aXR5KSArIE51bWJlcih0aGlzLnByb2R1Y3QucXR5KTtcbiAgICAgIH0sXG4gICAgICBwaHlzaWNhbCgpIHtcbiAgICAgICAgY29uc3QgcHJvZHVjdEF2YWlsYWJsZVF0eSA9IE51bWJlcih0aGlzLnByb2R1Y3QucHJvZHVjdF9hdmFpbGFibGVfcXVhbnRpdHkpO1xuICAgICAgICBjb25zdCBwcm9kdWN0UmVzZXJ2ZWRRdHkgPSBOdW1iZXIodGhpcy5wcm9kdWN0LnByb2R1Y3RfcmVzZXJ2ZWRfcXVhbnRpdHkpO1xuXG4gICAgICAgIHJldHVybiBwcm9kdWN0QXZhaWxhYmxlUXR5ICsgcHJvZHVjdFJlc2VydmVkUXR5O1xuICAgICAgfSxcbiAgICAgIGxvd1N0b2NrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9kdWN0LnByb2R1Y3RfbG93X3N0b2NrX2FsZXJ0O1xuICAgICAgfSxcbiAgICAgIGxvd1N0b2NrTGV2ZWwoKSB7XG4gICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cInRleHQtc20tbGVmdFwiPlxuICAgICAgICAgIDxwPiR7dGhpcy50cmFucygncHJvZHVjdF9sb3dfc3RvY2snKX08L3A+XG4gICAgICAgICAgPHA+PHN0cm9uZz4ke3RoaXMudHJhbnMoJ3Byb2R1Y3RfbG93X3N0b2NrX2xldmVsJyl9ICR7dGhpcy5wcm9kdWN0LnByb2R1Y3RfbG93X3N0b2NrX3RocmVzaG9sZH08L3N0cm9uZz48L3A+XG4gICAgICAgIDwvZGl2PmA7XG4gICAgICB9LFxuICAgICAgbG93U3RvY2tBbGVydCgpIHtcbiAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwidGV4dC1zbS1sZWZ0XCI+XG4gICAgICAgICAgPHA+PHN0cm9uZz4ke3RoaXMudHJhbnMoJ3Byb2R1Y3RfbG93X3N0b2NrX2FsZXJ0Jyl9ICR7dGhpcy5wcm9kdWN0LnByb2R1Y3RfbG93X3N0b2NrX2FsZXJ0fTwvc3Ryb25nPjwvcD5cbiAgICAgICAgPC9kaXY+YDtcbiAgICAgIH0sXG4gICAgICBpZCgpIHtcbiAgICAgICAgcmV0dXJuIGBwcm9kdWN0LSR7dGhpcy5wcm9kdWN0LnByb2R1Y3RfaWR9JHt0aGlzLnByb2R1Y3QuY29tYmluYXRpb25faWR9YDtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBwcm9kdWN0Q2hlY2tlZChjaGVja2JveCkge1xuICAgICAgICBpZiAoY2hlY2tib3guY2hlY2tlZCkge1xuICAgICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdhZGRTZWxlY3RlZFByb2R1Y3QnLCBjaGVja2JveC5pdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgncmVtb3ZlU2VsZWN0ZWRQcm9kdWN0JywgY2hlY2tib3guaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1cGRhdGVQcm9kdWN0UXR5KHByb2R1Y3RUb1VwZGF0ZSkge1xuICAgICAgICBjb25zdCB1cGRhdGVkUHJvZHVjdCA9IHtcbiAgICAgICAgICBwcm9kdWN0X2lkOiBwcm9kdWN0VG9VcGRhdGUucHJvZHVjdC5wcm9kdWN0X2lkLFxuICAgICAgICAgIGNvbWJpbmF0aW9uX2lkOiBwcm9kdWN0VG9VcGRhdGUucHJvZHVjdC5jb21iaW5hdGlvbl9pZCxcbiAgICAgICAgICBkZWx0YTogcHJvZHVjdFRvVXBkYXRlLmRlbHRhLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgndXBkYXRlUHJvZHVjdFF0eScsIHVwZGF0ZWRQcm9kdWN0KTtcbiAgICAgICAgaWYgKHByb2R1Y3RUb1VwZGF0ZS5kZWx0YSkge1xuICAgICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdhZGRQcm9kdWN0VG9VcGRhdGUnLCB1cGRhdGVkUHJvZHVjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3JlbW92ZVByb2R1Y3RUb1VwZGF0ZScsIHVwZGF0ZWRQcm9kdWN0KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICAgIG1vdW50ZWQoKSB7XG4gICAgICBFdmVudEJ1cy4kb24oJ3RvZ2dsZVByb2R1Y3RzQ2hlY2snLCAoY2hlY2tlZCkgPT4ge1xuICAgICAgICBjb25zdCByZWYgPSB0aGlzLmlkO1xuXG4gICAgICAgIGlmICh0aGlzLiRyZWZzW3JlZl0pIHtcbiAgICAgICAgICB0aGlzLiRyZWZzW3JlZl0uY2hlY2tlZCA9IGNoZWNrZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgJCgnW2RhdGEtdG9nZ2xlPVwicHN0b29sdGlwXCJdJykucHN0b29sdGlwKCk7XG4gICAgfSxcbiAgICBkYXRhOiAoKSA9PiAoe1xuICAgICAgYnVsa0VkaXRpb246IGZhbHNlLFxuICAgIH0pLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIFNwaW5uZXIsXG4gICAgICBQU01lZGlhLFxuICAgICAgUFNDaGVja2JveCxcbiAgICB9LFxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8IS0tKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICotLT5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInJvdyBwcm9kdWN0LWFjdGlvbnNcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNvbC1tZC04IHF0eSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgIDpjbGFzcz1cInsnYWN0aXZlJyA6IGlzRm9jdXNlZH1cIlxuICAgID5cbiAgICAgIDxQU0NoZWNrYm94XG4gICAgICAgIGlkPVwiYnVsay1hY3Rpb25cIlxuICAgICAgICByZWY9XCJidWxrLWFjdGlvblwiXG4gICAgICAgIGNsYXNzPVwibXQtM1wiXG4gICAgICAgIDppcy1pbmRldGVybWluYXRlPVwiaXNJbmRldGVybWluYXRlKClcIlxuICAgICAgICBAY2hlY2tlZD1cImJ1bGtDaGVja2VkXCJcbiAgICAgIC8+XG4gICAgICA8ZGl2IGNsYXNzPVwibWwtMlwiPlxuICAgICAgICA8c21hbGw+e3sgdHJhbnMoJ3RpdGxlX2J1bGsnKSB9fTwvc21hbGw+XG4gICAgICAgIDxQU051bWJlclxuICAgICAgICAgIGNsYXNzPVwiYnVsay1xdHlcIlxuICAgICAgICAgIDpkYW5nZXI9XCJkYW5nZXJcIlxuICAgICAgICAgIDp2YWx1ZT1cImJ1bGtFZGl0UXR5XCJcbiAgICAgICAgICA6YnV0dG9ucz1cInRoaXMuaXNGb2N1c2VkXCJcbiAgICAgICAgICBAZm9jdXM9XCJmb2N1c0luXCJcbiAgICAgICAgICBAYmx1cj1cImZvY3VzT3V0KCRldmVudClcIlxuICAgICAgICAgIEBjaGFuZ2U9XCJvbkNoYW5nZVwiXG4gICAgICAgICAgQGtleXVwPVwib25LZXlVcFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgIDxQU0J1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJ1cGRhdGUtcXR5IGZsb2F0LXNtLXJpZ2h0IG15LTQgbXItMlwiXG4gICAgICAgIDpjbGFzcz1cInsnYnRuLXByaW1hcnknOiBkaXNhYmxlZCB9XCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6cHJpbWFyeT1cInRydWVcIlxuICAgICAgICBAY2xpY2s9XCJzZW5kUXR5XCJcbiAgICAgID5cbiAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmVkaXQ8L2k+XG4gICAgICAgIHt7IHRyYW5zKCdidXR0b25fbW92ZW1lbnRfdHlwZScpIH19XG4gICAgICA8L1BTQnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCBQU051bWJlciBmcm9tICdAYXBwL3dpZGdldHMvcHMtbnVtYmVyJztcbiAgaW1wb3J0IFBTQ2hlY2tib3ggZnJvbSAnQGFwcC93aWRnZXRzL3BzLWNoZWNrYm94JztcbiAgaW1wb3J0IFBTQnV0dG9uIGZyb20gJ0BhcHAvd2lkZ2V0cy9wcy1idXR0b24nO1xuICBpbXBvcnQge0V2ZW50QnVzfSBmcm9tICdAYXBwL3V0aWxzL2V2ZW50LWJ1cyc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIGNvbXB1dGVkOiB7XG4gICAgICBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLiRzdG9yZS5zdGF0ZS5oYXNRdHk7XG4gICAgICB9LFxuICAgICAgYnVsa0VkaXRRdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5idWxrRWRpdFF0eTtcbiAgICAgIH0sXG4gICAgICBzZWxlY3RlZFByb2R1Y3RzTG5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVycy5zZWxlY3RlZFByb2R1Y3RzTG5nO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHdhdGNoOiB7XG4gICAgICBzZWxlY3RlZFByb2R1Y3RzTG5nKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gMCAmJiB0aGlzLiRyZWZzWydidWxrLWFjdGlvbiddKSB7XG4gICAgICAgICAgdGhpcy4kcmVmc1snYnVsay1hY3Rpb24nXS5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IDEgJiYgdGhpcy4kcmVmc1snYnVsay1hY3Rpb24nXSkge1xuICAgICAgICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGlzSW5kZXRlcm1pbmF0ZSgpIHtcbiAgICAgICAgY29uc3Qge3NlbGVjdGVkUHJvZHVjdHNMbmd9ID0gdGhpcztcbiAgICAgICAgY29uc3QgcHJvZHVjdHNMbmcgPSB0aGlzLiRzdG9yZS5zdGF0ZS5wcm9kdWN0cy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGlzSW5kZXRlcm1pbmF0ZSA9IChzZWxlY3RlZFByb2R1Y3RzTG5nID4gMCAmJiBzZWxlY3RlZFByb2R1Y3RzTG5nIDwgcHJvZHVjdHNMbmcpO1xuXG4gICAgICAgIGlmIChpc0luZGV0ZXJtaW5hdGUpIHtcbiAgICAgICAgICB0aGlzLiRyZWZzWydidWxrLWFjdGlvbiddLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0luZGV0ZXJtaW5hdGU7XG4gICAgICB9LFxuICAgICAgZm9jdXNJbigpIHtcbiAgICAgICAgdGhpcy5kYW5nZXIgPSAhdGhpcy5zZWxlY3RlZFByb2R1Y3RzTG5nO1xuICAgICAgICB0aGlzLmlzRm9jdXNlZCA9ICF0aGlzLmRhbmdlcjtcbiAgICAgICAgaWYgKHRoaXMuZGFuZ2VyKSB7XG4gICAgICAgICAgRXZlbnRCdXMuJGVtaXQoJ2Rpc3BsYXlCdWxrQWxlcnQnLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGZvY3VzT3V0KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gJChldmVudC50YXJnZXQpLmhhc0NsYXNzKCdwcy1udW1iZXInKTtcbiAgICAgICAgdGhpcy5kYW5nZXIgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBidWxrQ2hlY2tlZChjaGVja2JveCkge1xuICAgICAgICBpZiAoIWNoZWNrYm94LmNoZWNrZWQpIHtcbiAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgndXBkYXRlQnVsa0VkaXRRdHknLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNJbmRldGVybWluYXRlKCkpIHtcbiAgICAgICAgICBFdmVudEJ1cy4kZW1pdCgndG9nZ2xlUHJvZHVjdHNDaGVjaycsIGNoZWNrYm94LmNoZWNrZWQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2VuZFF0eSgpIHtcbiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZVF0eUJ5UHJvZHVjdHNJZCcpO1xuICAgICAgfSxcbiAgICAgIG9uQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCd1cGRhdGVCdWxrRWRpdFF0eScsIHZhbHVlKTtcbiAgICAgIH0sXG4gICAgICBvbktleVVwKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZUJ1bGtFZGl0UXR5JywgZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkYXRhOiAoKSA9PiAoe1xuICAgICAgaXNGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGRhbmdlcjogZmFsc2UsXG4gICAgfSksXG4gICAgY29tcG9uZW50czoge1xuICAgICAgUFNOdW1iZXIsXG4gICAgICBQU0NoZWNrYm94LFxuICAgICAgUFNCdXR0b24sXG4gICAgfSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG48dGVtcGxhdGU+XG4gIDxQU1RhYmxlIGNsYXNzPVwibXQtMVwiPlxuICAgIDx0aGVhZD5cbiAgICAgIDx0ciBjbGFzcz1cImNvbHVtbi1oZWFkZXJzXCI+XG4gICAgICAgIDx0aFxuICAgICAgICAgIHNjb3BlPVwiY29sXCJcbiAgICAgICAgICB3aWR0aD1cIjI3JVwiXG4gICAgICAgICAgY2xhc3M9XCJwcm9kdWN0LXRpdGxlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxQU1NvcnRcbiAgICAgICAgICAgIG9yZGVyPVwicHJvZHVjdFwiXG4gICAgICAgICAgICBAc29ydD1cInNvcnRcIlxuICAgICAgICAgICAgOmN1cnJlbnQtc29ydD1cImN1cnJlbnRTb3J0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB0cmFucygndGl0bGVfcHJvZHVjdCcpIH19XG4gICAgICAgICAgPC9QU1NvcnQ+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cImNvbFwiPlxuICAgICAgICAgIDxQU1NvcnRcbiAgICAgICAgICAgIG9yZGVyPVwicmVmZXJlbmNlXCJcbiAgICAgICAgICAgIEBzb3J0PVwic29ydFwiXG4gICAgICAgICAgICA6Y3VycmVudC1zb3J0PVwiY3VycmVudFNvcnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHRyYW5zKCd0aXRsZV9yZWZlcmVuY2UnKSB9fVxuICAgICAgICAgIDwvUFNTb3J0PlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGg+XG4gICAgICAgICAgPFBTU29ydFxuICAgICAgICAgICAgb3JkZXI9XCJzdXBwbGllclwiXG4gICAgICAgICAgICBAc29ydD1cInNvcnRcIlxuICAgICAgICAgICAgOmN1cnJlbnQtc29ydD1cImN1cnJlbnRTb3J0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB0cmFucygndGl0bGVfc3VwcGxpZXInKSB9fVxuICAgICAgICAgIDwvUFNTb3J0PlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIHt7IHRyYW5zKCd0aXRsZV9zdGF0dXMnKSB9fVxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxQU1NvcnRcbiAgICAgICAgICAgIG9yZGVyPVwicGh5c2ljYWxfcXVhbnRpdHlcIlxuICAgICAgICAgICAgQHNvcnQ9XCJzb3J0XCJcbiAgICAgICAgICAgIDpjdXJyZW50LXNvcnQ9XCJjdXJyZW50U29ydFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdHJhbnMoJ3RpdGxlX3BoeXNpY2FsJykgfX1cbiAgICAgICAgICA8L1BTU29ydD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICB7eyB0cmFucygndGl0bGVfcmVzZXJ2ZWQnKSB9fVxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxQU1NvcnRcbiAgICAgICAgICAgIG9yZGVyPVwiYXZhaWxhYmxlX3F1YW50aXR5XCJcbiAgICAgICAgICAgIEBzb3J0PVwic29ydFwiXG4gICAgICAgICAgICA6Y3VycmVudC1zb3J0PVwiY3VycmVudFNvcnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHRyYW5zKCd0aXRsZV9hdmFpbGFibGUnKSB9fVxuICAgICAgICAgIDwvUFNTb3J0PlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggOnRpdGxlPVwidHJhbnMoJ3RpdGxlX2VkaXRfcXVhbnRpdHknKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5lZGl0PC9pPlxuICAgICAgICAgIHt7IHRyYW5zKCd0aXRsZV9lZGl0X3F1YW50aXR5JykgfX1cbiAgICAgICAgPC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHk+XG4gICAgICA8dHIgdi1pZj1cInRoaXMuaXNMb2FkaW5nXCI+XG4gICAgICAgIDx0ZCBjb2xzcGFuPVwiOFwiPlxuICAgICAgICAgIDxQU0xvYWRlclxuICAgICAgICAgICAgdi1mb3I9XCIobiwgaW5kZXgpIGluIDNcIlxuICAgICAgICAgICAgY2xhc3M9XCJtdC0xXCJcbiAgICAgICAgICAgIDprZXk9XCJpbmRleFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhY2tncm91bmQtbWFza2VyIGhlYWRlci10b3BcIiAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhY2tncm91bmQtbWFza2VyIGhlYWRlci1sZWZ0XCIgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYWNrZ3JvdW5kLW1hc2tlciBoZWFkZXItYm90dG9tXCIgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYWNrZ3JvdW5kLW1hc2tlciBzdWJoZWFkZXItbGVmdFwiIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFja2dyb3VuZC1tYXNrZXIgc3ViaGVhZGVyLWJvdHRvbVwiIC8+XG4gICAgICAgICAgPC9QU0xvYWRlcj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgdi1lbHNlLWlmPVwiZW1wdHlQcm9kdWN0c1wiPlxuICAgICAgICA8dGQgY29sc3Bhbj1cIjhcIj5cbiAgICAgICAgICA8UFNBbGVydFxuICAgICAgICAgICAgYWxlcnQtdHlwZT1cIkFMRVJUX1RZUEVfV0FSTklOR1wiXG4gICAgICAgICAgICA6aGFzLWNsb3NlPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHRyYW5zKCdub19wcm9kdWN0JykgfX1cbiAgICAgICAgICA8L1BTQWxlcnQ+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPFByb2R1Y3RMaW5lXG4gICAgICAgIHYtZWxzZVxuICAgICAgICB2LWZvcj1cIihwcm9kdWN0LCBpbmRleCkgaW4gcHJvZHVjdHNcIlxuICAgICAgICA6a2V5PVwiaW5kZXhcIlxuICAgICAgICA6cHJvZHVjdD1cInByb2R1Y3RcIlxuICAgICAgLz5cbiAgICA8L3Rib2R5PlxuICA8L1BTVGFibGU+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgUFNBbGVydCBmcm9tICdAYXBwL3dpZGdldHMvcHMtYWxlcnQnO1xuICBpbXBvcnQgUFNUYWJsZSBmcm9tICdAYXBwL3dpZGdldHMvcHMtdGFibGUvcHMtdGFibGUnO1xuICBpbXBvcnQgUFNTb3J0IGZyb20gJ0BhcHAvd2lkZ2V0cy9wcy10YWJsZS9wcy1zb3J0JztcbiAgaW1wb3J0IFBTTG9hZGVyIGZyb20gJ0BhcHAvd2lkZ2V0cy9wcy1sb2FkZXInO1xuICBpbXBvcnQgUHJvZHVjdExpbmUgZnJvbSAnLi9wcm9kdWN0LWxpbmUnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBwcm9wczoge1xuICAgICAgaXNMb2FkaW5nOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIFByb2R1Y3RMaW5lLFxuICAgICAgUFNTb3J0LFxuICAgICAgUFNBbGVydCxcbiAgICAgIFBTVGFibGUsXG4gICAgICBQU0xvYWRlcixcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIHNvcnQob3JkZXIsIHNvcnREaXJlY3Rpb24pIHtcbiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZU9yZGVyJywgb3JkZXIpO1xuICAgICAgICB0aGlzLiRlbWl0KCdzb3J0Jywgc29ydERpcmVjdGlvbiA9PT0gJ2Rlc2MnID8gJ2Rlc2MnIDogJ2FzYycpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBwcm9kdWN0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLnByb2R1Y3RzO1xuICAgICAgfSxcbiAgICAgIGVtcHR5UHJvZHVjdHMoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy4kc3RvcmUuc3RhdGUucHJvZHVjdHMubGVuZ3RoO1xuICAgICAgfSxcbiAgICAgIGN1cnJlbnRTb3J0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUub3JkZXI7XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG48L3NjcmlwdD5cbiIsIjwhLS0qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi0tPlxuPHRlbXBsYXRlPlxuICA8Zm9ybVxuICAgIGNsYXNzPVwicXR5XCJcbiAgICA6Y2xhc3M9XCJjbGFzc09iamVjdFwiXG4gICAgQG1vdXNlb3Zlcj1cImZvY3VzSW5cIlxuICAgIEBtb3VzZWxlYXZlPVwiZm9jdXNPdXQoJGV2ZW50KVwiXG4gICAgQHN1Ym1pdC5wcmV2ZW50PVwic2VuZFF0eVwiXG4gID5cbiAgICA8UFNOdW1iZXJcbiAgICAgIG5hbWU9XCJxdHlcIlxuICAgICAgY2xhc3M9XCJlZGl0LXF0eVwiXG4gICAgICBwbGFjZWhvbGRlcj1cIjBcIlxuICAgICAgcGF0dGVybj1cIlxcZCpcIlxuICAgICAgc3RlcD1cIjFcIlxuICAgICAgOmJ1dHRvbnM9XCJ0cnVlXCJcbiAgICAgIDpob3Zlci1idXR0b25zPVwidHJ1ZVwiXG4gICAgICA6dmFsdWU9XCJnZXRRdWFudGl0eSgpXCJcbiAgICAgIEBjaGFuZ2U9XCJvbkNoYW5nZVwiXG4gICAgICBAa2V5dXA9XCJvbktleXVwKCRldmVudClcIlxuICAgICAgQGZvY3VzPVwiZm9jdXNJblwiXG4gICAgICBAYmx1cj1cImZvY3VzT3V0KCRldmVudClcIlxuICAgIC8+XG4gICAgPHRyYW5zaXRpb24gbmFtZT1cImZhZGVcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdi1pZj1cImlzQWN0aXZlXCJcbiAgICAgICAgY2xhc3M9XCJjaGVjay1idXR0b25cIlxuICAgICAgPlxuICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+Y2hlY2s8L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L3RyYW5zaXRpb24+XG4gIDwvZm9ybT5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCBQU051bWJlciBmcm9tICdAYXBwL3dpZGdldHMvcHMtbnVtYmVyJztcblxuICBjb25zdCB7JH0gPSB3aW5kb3c7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIHByb3BzOiB7XG4gICAgICBwcm9kdWN0OiB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGlkKCkge1xuICAgICAgICByZXR1cm4gYHF0eS0ke3RoaXMucHJvZHVjdC5wcm9kdWN0X2lkfS0ke3RoaXMucHJvZHVjdC5jb21iaW5hdGlvbl9pZH1gO1xuICAgICAgfSxcbiAgICAgIGNsYXNzT2JqZWN0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFjdGl2ZTogdGhpcy5pc0FjdGl2ZSxcbiAgICAgICAgICBkaXNhYmxlZDogIXRoaXMuaXNFbmFibGVkLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGdldFF1YW50aXR5KCkge1xuICAgICAgICBpZiAoIXRoaXMucHJvZHVjdC5xdHkpIHtcbiAgICAgICAgICB0aGlzLmlzRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudmFsdWUgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLnZhbHVlLCAxMCk7XG4gICAgICB9LFxuICAgICAgb25DaGFuZ2UodmFsKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgICAgIHRoaXMuaXNFbmFibGVkID0gISF2YWw7XG4gICAgICB9LFxuICAgICAgZGVBY3RpdmF0ZSgpIHtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcm9kdWN0LnF0eSA9IG51bGw7XG4gICAgICB9LFxuICAgICAgb25LZXl1cChldmVudCkge1xuICAgICAgICBjb25zdCB2YWwgPSBldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICAgICAgaWYgKHZhbCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZGVBY3RpdmF0ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaXNFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZm9jdXNJbigpIHtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICB9LFxuICAgICAgZm9jdXNPdXQoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh0aGlzLnZhbHVlLCAxMCk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICEkKGV2ZW50LnRhcmdldCkuaGFzQ2xhc3MoJ3BzLW51bWJlcicpXG4gICAgICAgICAgJiYgKE51bWJlci5pc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzRW5hYmxlZCA9ICEhdGhpcy52YWx1ZTtcbiAgICAgIH0sXG4gICAgICBzZW5kUXR5KCkge1xuICAgICAgICBjb25zdCBwb3N0VXJsID0gdGhpcy5wcm9kdWN0LmVkaXRfdXJsO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXJzZUludCh0aGlzLnByb2R1Y3QucXR5LCAxMCkgIT09IDBcbiAgICAgICAgICAmJiAhTnVtYmVyLmlzTmFOKHBhcnNlSW50KHRoaXMudmFsdWUsIDEwKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZVF0eUJ5UHJvZHVjdElkJywge1xuICAgICAgICAgICAgdXJsOiBwb3N0VXJsLFxuICAgICAgICAgICAgZGVsdGE6IHRoaXMudmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5kZUFjdGl2YXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgdmFsdWUodmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZVByb2R1Y3RRdHknLCB7XG4gICAgICAgICAgcHJvZHVjdDogdGhpcy5wcm9kdWN0LFxuICAgICAgICAgIGRlbHRhOiB2YWwsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9LFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIFBTTnVtYmVyLFxuICAgIH0sXG4gICAgZGF0YTogKCkgPT4gKHtcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgaXNBY3RpdmU6IGZhbHNlLFxuICAgICAgaXNFbmFibGVkOiBmYWxzZSxcbiAgICB9KSxcbiAgfTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIiB0eXBlPVwidGV4dC9zY3NzXCIgc2NvcGVkPlxuQGltcG9ydCBcIn5qcXVlcnktdWktZGlzdC9qcXVlcnktdWkuY3NzXCI7XG4qIHtcbiAgb3V0bGluZTogbm9uZTtcbn1cbi5mYWRlLWVudGVyLWFjdGl2ZSxcbi5mYWRlLWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlO1xufVxuLmZhZGUtZW50ZXIsXG4uZmFkZS1sZWF2ZS10byB7XG4gIG9wYWNpdHk6IDA7XG59XG48L3N0eWxlPlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICBjbGFzcz1cInBzLWFsZXJ0IGFsZXJ0XCJcbiAgICA6Y2xhc3M9XCJjbGFzc09iamVjdFwiXG4gICAgcm9sZT1cImFsZXJ0XCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIHYtaWY9XCJoYXNDbG9zZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiY2xvc2VcIlxuICAgICAgZGF0YS1kaXNtaXNzPVwiYWxlcnRcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICAgIEBjbGljay5zdG9wPVwib25DbGlja1wiXG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmNsb3NlPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxwIGNsYXNzPVwiYWxlcnQtdGV4dFwiPlxuICAgICAgPHNsb3QgLz5cbiAgICA8L3A+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgY29uc3QgQUxFUlRfVFlQRV9JTkZPID0gJ0FMRVJUX1RZUEVfSU5GTyc7XG4gIGNvbnN0IEFMRVJUX1RZUEVfV0FSTklORyA9ICdBTEVSVF9UWVBFX1dBUk5JTkcnO1xuICBjb25zdCBBTEVSVF9UWVBFX0RBTkdFUiA9ICdBTEVSVF9UWVBFX0RBTkdFUic7XG4gIGNvbnN0IEFMRVJUX1RZUEVfU1VDQ0VTUyA9ICdBTEVSVF9UWVBFX1NVQ0NFU1MnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBwcm9wczoge1xuICAgICAgZHVyYXRpb246IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBhbGVydFR5cGU6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBoYXNDbG9zZToge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgY2xhc3NPYmplY3QoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgJ2FsZXJ0LWluZm8nOiB0aGlzLmFsZXJ0VHlwZSA9PT0gQUxFUlRfVFlQRV9JTkZPLFxuICAgICAgICAgICdhbGVydC13YXJuaW5nJzogdGhpcy5hbGVydFR5cGUgPT09IEFMRVJUX1RZUEVfV0FSTklORyxcbiAgICAgICAgICAnYWxlcnQtZGFuZ2VyJzogdGhpcy5hbGVydFR5cGUgPT09IEFMRVJUX1RZUEVfREFOR0VSLFxuICAgICAgICAgICdhbGVydC1zdWNjZXNzJzogdGhpcy5hbGVydFR5cGUgPT09IEFMRVJUX1RZUEVfU1VDQ0VTUyxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBpc0luZm8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsZXJ0VHlwZSA9PT0gQUxFUlRfVFlQRV9JTkZPO1xuICAgICAgfSxcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIG9uQ2xpY2soKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2Nsb3NlQWxlcnQnKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG48dGVtcGxhdGU+XG4gIDxidXR0b25cbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImJ0blwiXG4gICAgOmNsYXNzPVwiY2xhc3NPYmplY3RcIlxuICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICA+XG4gICAgPHNsb3QgLz5cbiAgPC9idXR0b24+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgIHByaW1hcnk6IHt0eXBlOiBCb29sZWFufSxcbiAgICAgIGdob3N0OiB7dHlwZTogQm9vbGVhbn0sXG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgY2xhc3NPYmplY3QoKSB7XG4gICAgICAgIGlmICh0aGlzLmdob3N0KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdidG4tb3V0bGluZS1wcmltYXJ5JzogdGhpcy5wcmltYXJ5LFxuICAgICAgICAgICAgJ2J0bi1vdXRsaW5lLXNlY29uZGFyeSc6ICF0aGlzLnByaW1hcnksXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgJ2J0bi1wcmltYXJ5JzogdGhpcy5wcmltYXJ5LFxuICAgICAgICAgICdidG4tc2Vjb25kYXJ5JzogIXRoaXMucHJpbWFyeSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBvbkNsaWNrKCkge1xuICAgICAgICB0aGlzLiRlbWl0KCdjbGljaycpO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8IS0tKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICotLT5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cIm1kLWNoZWNrYm94XCI+XG4gICAgPGxhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIDppZD1cImlkXCJcbiAgICAgICAgdi1tb2RlbD1cImNoZWNrZWRcIlxuICAgICAgICA6Y2xhc3M9XCJ7J2luZGV0ZXJtaW5hdGUnIDogaXNJbmRldGVybWluYXRlIH1cIlxuICAgICAgPlxuICAgICAgPGkgY2xhc3M9XCJtZC1jaGVja2JveC1jb250cm9sXCIgLz5cbiAgICAgIDxzbG90IG5hbWU9XCJsYWJlbFwiIC8+XG4gICAgPC9sYWJlbD5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgIGlkOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgIH0sXG4gICAgICBtb2RlbDoge1xuICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgIH0sXG4gICAgICBpc0luZGV0ZXJtaW5hdGU6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgY2hlY2tlZCh2YWwpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hlY2tlZCcsIHtcbiAgICAgICAgICBjaGVja2VkOiB2YWwsXG4gICAgICAgICAgaXRlbTogdGhpcy5tb2RlbCxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgZGF0YTogKCkgPT4gKHtcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0pLFxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8IS0tKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICotLT5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGRhdGVcIj5cbiAgICA8aW5wdXRcbiAgICAgIHJlZj1cImRhdGVwaWNrZXJcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgID5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmV2ZW50PC9pPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBwcm9wczoge1xuICAgICAgbG9jYWxlOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIGRlZmF1bHQ6ICdlbicsXG4gICAgICB9LFxuICAgICAgdHlwZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIG1vdW50ZWQoKSB7XG4gICAgICAkKHRoaXMuJHJlZnMuZGF0ZXBpY2tlcikuZGF0ZXRpbWVwaWNrZXIoe1xuICAgICAgICBmb3JtYXQ6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgc2hvd0NsZWFyOiB0cnVlLFxuICAgICAgfSkub24oJ2RwLmNoYW5nZScsIChpbmZvcykgPT4ge1xuICAgICAgICBpbmZvcy5kYXRlVHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgdGhpcy4kZW1pdChcbiAgICAgICAgICBpbmZvcy5kYXRlID8gJ2RwQ2hhbmdlJyA6ICdyZXNldCcsXG4gICAgICAgICAgaW5mb3MsXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuICBAaW1wb3J0ICd+QHNjc3MvY29uZmlnL19zZXR0aW5ncy5zY3NzJztcblxuICAuZGF0ZSB7XG4gICAgYVtkYXRhLWFjdGlvbj0nY2xlYXInXTo6YmVmb3JlIHtcbiAgICAgIGZvbnQtZmFtaWx5OiAnTWF0ZXJpYWwgSWNvbnMnO1xuICAgICAgY29udGVudDogXCJcXEUxNENcIjtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogMTVweDtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMTBweDtcbiAgICAgIGNvbG9yOiAkZ3JheS1kYXJrO1xuICAgICAgY3Vyc29yOnBvaW50ZXI7XG4gICAgfVxuICAgIC5ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXItd2lkZ2V0IHRyIHRkIHNwYW46aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgfVxuICB9XG5cbjwvc3R5bGU+XG4iLCI8IS0tKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICotLT5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cIm1lZGlhXCI+XG4gICAgPGltZ1xuICAgICAgdi1pZj1cImRpc3BsYXlUaHVtYlwiXG4gICAgICA6c3JjPVwidGh1bWJuYWlsXCJcbiAgICAgIGNsYXNzPVwidGh1bWJuYWlsIGQtZmxleFwiXG4gICAgPlxuICAgIDxkaXZcbiAgICAgIHYtZWxzZVxuICAgICAgY2xhc3M9XCJuby1pbWdcIlxuICAgIC8+XG4gICAgPGRpdiBjbGFzcz1cIm1sLTIgZGVzYyBtZWRpYS1ib2R5XCI+XG4gICAgICA8c2xvdCAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG48c2NyaXB0PlxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgIHRodW1ibmFpbDoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBkaXNwbGF5VGh1bWIoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMudGh1bWJuYWlsO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cbiAgQGltcG9ydCAnfkBzY3NzL2NvbmZpZy9fc2V0dGluZ3Muc2Nzcyc7XG5cbiAgLnByb2R1Y3QtdGl0bGUge1xuICAgIC5oYXMtY29tYmluYXRpb24gJiB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cbiAgfVxuICAudGh1bWJuYWlsLCAubm8taW1nIHtcbiAgICBib3JkZXI6ICRncmF5LWxpZ2h0IDFweCBzb2xpZDtcbiAgICBtYXgtd2lkdGg6IDQ3cHg7XG4gIH1cbiAgLm5vLWltZyB7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgd2lkdGg6IDQ3cHg7XG4gICAgaGVpZ2h0OiA0N3B4O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG4gIC5kZXNjIHtcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICB9XG4gIHNtYWxsIHtcbiAgICBjb2xvcjogJGdyYXktbWVkaXVtO1xuICB9XG48L3N0eWxlPlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG5cbjx0ZW1wbGF0ZT5cbiAgPGRpdlxuICAgIGNsYXNzPVwicHMtbnVtYmVyXCJcbiAgICA6Y2xhc3M9XCJ7ICdob3Zlci1idXR0b25zJzogaG92ZXJCdXR0b25zIH1cIlxuICA+XG4gICAgPGlucHV0XG4gICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgIDpjbGFzcz1cInsgZGFuZ2VyIH1cIlxuICAgICAgOnZhbHVlPVwidmFsdWVcIlxuICAgICAgcGxhY2Vob2xkZXI9XCIwXCJcbiAgICAgIEBrZXl1cD1cIm9uS2V5dXAoJGV2ZW50KVwiXG4gICAgICBAZm9jdXM9XCJmb2N1c0luXCJcbiAgICAgIEBibHVyLm5hdGl2ZT1cImZvY3VzT3V0KCRldmVudClcIlxuICAgID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInBzLW51bWJlci1zcGlubmVyIGQtZmxleFwiXG4gICAgICB2LWlmPVwiYnV0dG9uc1wiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJwcy1udW1iZXItdXBcIlxuICAgICAgICBAY2xpY2s9XCJpbmNyZW1lbnRcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwicHMtbnVtYmVyLWRvd25cIlxuICAgICAgICBAY2xpY2s9XCJkZWNyZW1lbnRcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH0sXG4gICAgICBkYW5nZXI6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgYnV0dG9uczoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBob3ZlckJ1dHRvbnM6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgb25LZXl1cCgkZXZlbnQpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgna2V5dXAnLCAkZXZlbnQpO1xuICAgICAgfSxcbiAgICAgIGZvY3VzSW4oKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2ZvY3VzJyk7XG4gICAgICB9LFxuICAgICAgZm9jdXNPdXQoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2JsdXInLCAkZXZlbnQpO1xuICAgICAgfSxcbiAgICAgIGluY3JlbWVudCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh0aGlzLnZhbHVlID09PSAnJyA/IDAgOiB0aGlzLnZhbHVlLCAxMCk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIE51bWJlci5pc05hTih2YWx1ZSkgPyAwIDogdmFsdWUgKyAxKTtcbiAgICAgIH0sXG4gICAgICBkZWNyZW1lbnQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQodGhpcy52YWx1ZSwgMTApO1xuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBOdW1iZXIuaXNOYU4odmFsdWUpID8gLTEgOiB2YWx1ZSAtIDEpO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8IS0tKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICotLT5cbjx0ZW1wbGF0ZT5cbiAgPG5hdlxuICAgIGNsYXNzPVwibXQtMSBteC1hdXRvXCJcbiAgICB2LWlmPVwiZGlzcGxheVBhZ2luYXRpb25cIlxuICA+XG4gICAgPHVsXG4gICAgICBjbGFzcz1cInBhZ2luYXRpb25cIlxuICAgICAgOmNsYXNzPVwieydtdWx0aSc6aXNNdWx0aVBhZ2luYXRpb259XCJcbiAgICA+XG4gICAgICA8bGlcbiAgICAgICAgdi1pZj1cImlzTXVsdGlQYWdpbmF0aW9uXCJcbiAgICAgICAgY2xhc3M9XCJwYWdlLWl0ZW0gcHJldmlvdXNcIlxuICAgICAgPlxuICAgICAgICA8YVxuICAgICAgICAgIHYtc2hvdz1cImFjdGl2ZUxlZnRBcnJvd1wiXG4gICAgICAgICAgY2xhc3M9XCJmbG9hdC1sZWZ0IHBhZ2UtbGlua1wiXG4gICAgICAgICAgQGNsaWNrPVwicHJldigkZXZlbnQpXCJcbiAgICAgICAgICBocmVmPVwiI1wiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5QcmV2aW91czwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICAgIDxsaVxuICAgICAgICBjbGFzcz1cInBhZ2UtaXRlbVwiXG4gICAgICAgIDpjbGFzcz1cInsnYWN0aXZlJyA6IGNoZWNrQ3VycmVudEluZGV4KGluZGV4KX1cIlxuICAgICAgICB2LWZvcj1cImluZGV4IGluIHBhZ2VzQ291bnRcIlxuICAgICAgICA6a2V5PVwiaW5kZXhcIlxuICAgICAgPlxuICAgICAgICA8YVxuICAgICAgICAgIHYtaWY9XCJzaG93SW5kZXgoaW5kZXgpXCJcbiAgICAgICAgICBjbGFzcz1cInBhZ2UtbGlua1wiXG4gICAgICAgICAgOmNsYXNzPVwie1xuICAgICAgICAgICAgJ3BsLTAnIDogc2hvd0ZpcnN0RG90cyhpbmRleCksXG4gICAgICAgICAgICAncHItMCcgOiBzaG93TGFzdERvdHMoaW5kZXgpXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJjaGFuZ2VQYWdlKGluZGV4KVwiXG4gICAgICAgICAgaHJlZj1cIiNcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIHYtaWY9XCJpc011bHRpUGFnaW5hdGlvblwiXG4gICAgICAgICAgICB2LXNob3c9XCJzaG93Rmlyc3REb3RzKGluZGV4KVwiXG4gICAgICAgICAgPi4uLjwvc3Bhbj5cbiAgICAgICAgICB7eyBpbmRleCB9fVxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICB2LWlmPVwiaXNNdWx0aVBhZ2luYXRpb25cIlxuICAgICAgICAgICAgdi1zaG93PVwic2hvd0xhc3REb3RzKGluZGV4KVwiXG4gICAgICAgICAgPi4uLjwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICAgIDxsaVxuICAgICAgICB2LWlmPVwiaXNNdWx0aVBhZ2luYXRpb25cIlxuICAgICAgICBjbGFzcz1cInBhZ2UtaXRlbSBuZXh0XCJcbiAgICAgID5cbiAgICAgICAgPGFcbiAgICAgICAgICB2LXNob3c9XCJhY3RpdmVSaWdodEFycm93XCJcbiAgICAgICAgICBjbGFzcz1cImZsb2F0LWxlZnQgcGFnZS1saW5rXCJcbiAgICAgICAgICBAY2xpY2s9XCJuZXh0KCRldmVudClcIlxuICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPk5leHQ8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9uYXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgIHBhZ2VzQ291bnQ6IHtcbiAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBjdXJyZW50SW5kZXg6IHtcbiAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgaXNNdWx0aVBhZ2luYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VzQ291bnQgPiB0aGlzLm11bHRpUGFnZXNBY3RpdmF0aW9uTGltaXQ7XG4gICAgICB9LFxuICAgICAgYWN0aXZlTGVmdEFycm93KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50SW5kZXggIT09IDE7XG4gICAgICB9LFxuICAgICAgYWN0aXZlUmlnaHRBcnJvdygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEluZGV4ICE9PSB0aGlzLnBhZ2VzQ291bnQ7XG4gICAgICB9LFxuICAgICAgcGFnZXNUb0Rpc3BsYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpUGFnZXNUb0Rpc3BsYXk7XG4gICAgICB9LFxuICAgICAgZGlzcGxheVBhZ2luYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VzQ291bnQgPiAxO1xuICAgICAgfSxcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGNoZWNrQ3VycmVudEluZGV4KGluZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRJbmRleCA9PT0gaW5kZXg7XG4gICAgICB9LFxuICAgICAgc2hvd0luZGV4KGluZGV4KSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0UGFnaW5hdGlvbkluZGV4ID0gaW5kZXggPCB0aGlzLmN1cnJlbnRJbmRleCArIHRoaXMubXVsdGlQYWdlc1RvRGlzcGxheTtcbiAgICAgICAgY29uc3QgbGFzdFBhZ2luYXRpb25JbmRleCA9IGluZGV4ID4gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLm11bHRpUGFnZXNUb0Rpc3BsYXk7XG4gICAgICAgIGNvbnN0IGluZGV4VG9EaXNwbGF5ID0gc3RhcnRQYWdpbmF0aW9uSW5kZXggJiYgbGFzdFBhZ2luYXRpb25JbmRleDtcbiAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gaW5kZXggPT09IHRoaXMucGFnZXNDb3VudDtcbiAgICAgICAgY29uc3QgZmlyc3RJbmRleCA9IGluZGV4ID09PSAxO1xuXG4gICAgICAgIGlmICghdGhpcy5pc011bHRpUGFnaW5hdGlvbikge1xuICAgICAgICAgIHJldHVybiAhdGhpcy5pc011bHRpUGFnaW5hdGlvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5kZXhUb0Rpc3BsYXkgfHwgZmlyc3RJbmRleCB8fCBsYXN0SW5kZXg7XG4gICAgICB9LFxuICAgICAgY2hhbmdlUGFnZShwYWdlSW5kZXgpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgncGFnZUNoYW5nZWQnLCBwYWdlSW5kZXgpO1xuICAgICAgfSxcbiAgICAgIHNob3dGaXJzdERvdHMoaW5kZXgpIHtcbiAgICAgICAgY29uc3QgcGFnZXNUb0Rpc3BsYXkgPSB0aGlzLnBhZ2VzQ291bnQgLSB0aGlzLm11bHRpUGFnZXNUb0Rpc3BsYXk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlQYWdpbmF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNNdWx0aVBhZ2luYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZGV4ID09PSB0aGlzLnBhZ2VzQ291bnQgJiYgdGhpcy5jdXJyZW50SW5kZXggPD0gcGFnZXNUb0Rpc3BsYXk7XG4gICAgICB9LFxuICAgICAgc2hvd0xhc3REb3RzKGluZGV4KSB7XG4gICAgICAgIGlmICghdGhpcy5pc011bHRpUGFnaW5hdGlvbikge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzTXVsdGlQYWdpbmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmRleCA9PT0gMSAmJiB0aGlzLmN1cnJlbnRJbmRleCA+IHRoaXMubXVsdGlQYWdlc1RvRGlzcGxheTtcbiAgICAgIH0sXG4gICAgICBwcmV2KCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPiAxKSB7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VQYWdlKHRoaXMuY3VycmVudEluZGV4IC0gMSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBuZXh0KCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPCB0aGlzLnBhZ2VzQ291bnQpIHtcbiAgICAgICAgICB0aGlzLmNoYW5nZVBhZ2UodGhpcy5jdXJyZW50SW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICAgIGRhdGE6ICgpID0+ICh7XG4gICAgICBtdWx0aVBhZ2VzVG9EaXNwbGF5OiAyLFxuICAgICAgbXVsdGlQYWdlc0FjdGl2YXRpb25MaW1pdDogNSxcbiAgICB9KSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInBzLXJhZGlvXCI+XG4gICAgPGlucHV0XG4gICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgOmlkPVwiaWRcIlxuICAgICAgbmFtZT1cInJhZGlvLWdyb3VwXCJcbiAgICAgIDpjaGVja2VkPVwiY2hlY2tlZFwiXG4gICAgICBAY2hhbmdlPVwib25DaGFuZ2VcIlxuICAgID5cbiAgICA8bGFiZWwgOmZvcj1cImlkXCI+e3sgbGFiZWwgfX08L2xhYmVsPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBwcm9wczoge1xuICAgICAgaWQ6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBsYWJlbDoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICB9LFxuICAgICAgY2hlY2tlZDoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgdmFsdWU6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIG9uQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB0aGlzLnZhbHVlKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG48dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJwcy1zZWxlY3RcIj5cbiAgICA8c2VsZWN0XG4gICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRcIlxuICAgICAgQGNoYW5nZT1cIm9uQ2hhbmdlXCJcbiAgICA+XG4gICAgICA8b3B0aW9uXG4gICAgICAgIHZhbHVlPVwiZGVmYXVsdFwiXG4gICAgICAgIHNlbGVjdGVkXG4gICAgICA+XG4gICAgICAgIDxzbG90IC8+XG4gICAgICA8L29wdGlvbj5cbiAgICAgIDxvcHRpb25cbiAgICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGl0ZW1zXCJcbiAgICAgICAgOmtleT1cImluZGV4XCJcbiAgICAgICAgOnZhbHVlPVwiaXRlbVtpdGVtSWRdXCJcbiAgICAgID5cbiAgICAgICAge3sgaXRlbVtpdGVtTmFtZV0gfX1cbiAgICAgIDwvb3B0aW9uPlxuICAgIDwvc2VsZWN0PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBwcm9wczoge1xuICAgICAgaXRlbXM6IHtcbiAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGl0ZW1JZDoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICB9LFxuICAgICAgaXRlbU5hbWU6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIG9uQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWQsXG4gICAgICAgICAgaXRlbUlkOiB0aGlzLml0ZW1JZCxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgZGF0YTogKCkgPT4gKHtzZWxlY3RlZDogJ2RlZmF1bHQnfSksXG4gIH07XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxuICBAaW1wb3J0ICd+QHNjc3MvY29uZmlnL19zZXR0aW5ncy5zY3NzJztcblxuICAucHMtc2VsZWN0IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgc2VsZWN0IHtcbiAgICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIH1cbiAgICAmOjphZnRlciB7XG4gICAgICBjb250ZW50OiBcIlxcRTMxM1wiO1xuICAgICAgZm9udC1mYW1pbHk6ICdNYXRlcmlhbCBJY29ucyc7XG4gICAgICBjb2xvcjogJGdyYXktbWVkaXVtO1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcmlnaHQ6IDVweDtcbiAgICAgIHRvcDogNXB4O1xuICAgIH1cbiAgfVxuPC9zdHlsZT5cbiIsIjwhLS0qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi0tPlxuPHRlbXBsYXRlPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJwcy1zb3J0YWJsZS1jb2x1bW5cIlxuICAgIGRhdGEtc29ydC1jb2wtbmFtZT1cImlkX3Byb2R1Y3RcIlxuICAgIDpkYXRhLXNvcnQtaXMtY3VycmVudD1cImlzQ3VycmVudFwiXG4gICAgOmRhdGEtc29ydC1kaXJlY3Rpb249XCJzb3J0RGlyZWN0aW9uXCJcbiAgICBAY2xpY2s9XCJzb3J0VG9nZ2xlXCJcbiAgPlxuICAgIDxzcGFuIHJvbGU9XCJjb2x1bW5oZWFkZXJcIj48c2xvdCAvPjwvc3Bhbj5cbiAgICA8c3BhblxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cInBzLXNvcnRcIlxuICAgICAgYXJpYS1sYWJlbD1cIlRyaVwiXG4gICAgLz5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgIC8vIGNvbHVtbiBuYW1lXG4gICAgICBvcmRlcjoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIC8vIGluZGljYXRlcyB0aGUgY3VycmVudGx5IHNvcnRlZCBjb2x1bW4gaW4gdGhlIHRhYmxlXG4gICAgICBjdXJyZW50U29ydDoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIHNvcnRUb2dnbGUoKSB7XG4gICAgICAgIC8vIHRvZ2dsZSBkaXJlY3Rpb25cbiAgICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gKHRoaXMuc29ydERpcmVjdGlvbiA9PT0gJ2FzYycpID8gJ2Rlc2MnIDogJ2FzYyc7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3NvcnQnLCB0aGlzLm9yZGVyLCB0aGlzLnNvcnREaXJlY3Rpb24pO1xuICAgICAgfSxcbiAgICB9LFxuICAgIGRhdGE6ICgpID0+ICh7XG4gICAgICBzb3J0RGlyZWN0aW9uOiAnYXNjJyxcbiAgICB9KSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgaXNDdXJyZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydCA9PT0gdGhpcy5vcmRlcjtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICBjbGFzcz1cInRhZ3MtaW5wdXQgc2VhcmNoLWlucHV0IHNlYXJjaCBkLWZsZXggZmxleC13cmFwXCJcbiAgICA6Y2xhc3M9XCJ7ICdzZWFyY2gtd2l0aC1pY29uJzogaGFzSWNvbiB9XCJcbiAgICBAY2xpY2s9XCJmb2N1cygpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWdzLXdyYXBwZXJcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIHYtZm9yPVwiKHRhZywgaW5kZXgpIGluIHRhZ3NcIlxuICAgICAgICA6a2V5PVwiaW5kZXhcIlxuICAgICAgICBjbGFzcz1cInRhZ1wiXG4gICAgICA+e3sgdGFnIH19PGlcbiAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiXG4gICAgICAgIEBjbGljaz1cImNsb3NlKGluZGV4KVwiXG4gICAgICA+Y2xvc2U8L2k+PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxpbnB1dFxuICAgICAgcmVmPVwidGFnc1wiXG4gICAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclRvRGlzcGxheVwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICB2LW1vZGVsPVwidGFnXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0XCJcbiAgICAgIEBrZXl1cD1cIm9uS2V5VXBcIlxuICAgICAgQGtleWRvd24uZW50ZXI9XCJhZGQodGFnKVwiXG4gICAgICBAa2V5ZG93bi5kZWxldGUuc3RvcD1cInJlbW92ZSgpXCJcbiAgICAgIDpzaXplPVwiaW5wdXRTaXplXCJcbiAgICA+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKFtdKSxcbiAgICAgIH0sXG4gICAgICBwbGFjZWhvbGRlcjoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICB9LFxuICAgICAgaGFzSWNvbjoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGlucHV0U2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnRhZ3MubGVuZ3RoICYmIHRoaXMucGxhY2Vob2xkZXIgPyB0aGlzLnBsYWNlaG9sZGVyLmxlbmd0aCA6IDA7XG4gICAgICB9LFxuICAgICAgcGxhY2Vob2xkZXJUb0Rpc3BsYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhZ3MubGVuZ3RoID8gJycgOiB0aGlzLnBsYWNlaG9sZGVyO1xuICAgICAgfSxcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIG9uS2V5VXAoKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3R5cGluZycsIHRoaXMuJHJlZnMudGFncy52YWx1ZSk7XG4gICAgICB9LFxuICAgICAgYWRkKHRhZykge1xuICAgICAgICBpZiAodGFnKSB7XG4gICAgICAgICAgdGhpcy50YWdzLnB1c2godGFnLnRyaW0oKSk7XG4gICAgICAgICAgdGhpcy50YWcgPSAnJztcbiAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgdGhpcy4kZW1pdCgndGFnQ2hhbmdlJywgdGhpcy50YWcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2xvc2UoaW5kZXgpIHtcbiAgICAgICAgY29uc3QgdGFnTmFtZSA9IHRoaXMudGFnc1tpbmRleF07XG4gICAgICAgIHRoaXMudGFncy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLiRlbWl0KCd0YWdDaGFuZ2UnLCB0YWdOYW1lKTtcbiAgICAgIH0sXG4gICAgICByZW1vdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLnRhZ3MubGVuZ3RoICYmICF0aGlzLnRhZy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCB0YWdOYW1lID0gdGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGggLSAxXTtcbiAgICAgICAgICB0aGlzLnRhZ3MucG9wKCk7XG4gICAgICAgICAgdGhpcy4kZW1pdCgndGFnQ2hhbmdlJywgdGFnTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBmb2N1cygpIHtcbiAgICAgICAgdGhpcy4kcmVmcy50YWdzLmZvY3VzKCk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgZGF0YTogKCkgPT4gKHt0YWc6IG51bGx9KSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICBjbGFzcz1cInBzLXRyZWUtaXRlbXNcIlxuICAgIDpjbGFzcz1cIntjbGFzc05hbWV9XCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZC1mbGV4IHRyZWUtbmFtZVwiXG4gICAgICA6Y2xhc3M9XCJ7YWN0aXZlOiBhY3RpdmUsIGRpc2FibGU6IG1vZGVsLmRpc2FibGV9XCJcbiAgICAgIEBjbGljaz1cImNsaWNrRWxlbWVudFwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tdGV4dFwiXG4gICAgICAgIDpjbGFzcz1cIlt7aGlkZGVuOiBpc0hpZGRlbn0sIGNoZXZyb25TdGF0dXNdXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICB2LWlmPVwidHJhbnNsYXRpb25zXCJcbiAgICAgICAgICBjbGFzcz1cInNyLW9ubHlcIlxuICAgICAgICA+e3sgdGhpcy5tb2RlbC5vcGVuID8gdHJhbnNsYXRpb25zLnJlZHVjZSA6IHRyYW5zbGF0aW9ucy5leHBhbmQgfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxQU0NoZWNrYm94XG4gICAgICAgIDpyZWY9XCJtb2RlbC5uYW1lXCJcbiAgICAgICAgOmlkPVwiaWRcIlxuICAgICAgICA6bW9kZWw9XCJtb2RlbFwiXG4gICAgICAgIEBjaGVja2VkPVwib25DaGVja1wiXG4gICAgICAgIHYtaWY9XCJoYXNDaGVja2JveFwiXG4gICAgICAvPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJ0cmVlLWxhYmVsXCJcbiAgICAgICAgOmNsYXNzPVwie3dhcm5pbmc6IGlzV2FybmluZ31cIlxuICAgICAgPnt7IG1vZGVsLm5hbWUgfX08L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInRyZWUtZXh0cmEtbGFiZWwgZC1zbS1ub25lIGQteGwtaW5saW5lLWJsb2NrXCJcbiAgICAgICAgdi1pZj1cImRpc3BsYXlFeHRyYUxhYmVsXCJcbiAgICAgID57eyBnZXRFeHRyYUxhYmVsIH19PC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJ0cmVlLWV4dHJhLWxhYmVsLW1pbmkgZC14bC1ub25lXCJcbiAgICAgICAgdi1pZj1cImRpc3BsYXlFeHRyYUxhYmVsXCJcbiAgICAgID57eyB0aGlzLm1vZGVsLmV4dHJhTGFiZWwgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPHVsXG4gICAgICB2LXNob3c9XCJvcGVuXCJcbiAgICAgIHYtaWY9XCJpc0ZvbGRlclwiXG4gICAgICBjbGFzcz1cInRyZWVcIlxuICAgID5cbiAgICAgIDxsaVxuICAgICAgICB2LWZvcj1cIihlbGVtZW50LCBpbmRleCkgaW4gbW9kZWwuY2hpbGRyZW5cIlxuICAgICAgICA6a2V5PVwiaW5kZXhcIlxuICAgICAgICBjbGFzcz1cInRyZWUtaXRlbVwiXG4gICAgICAgIDpjbGFzcz1cIntkaXNhYmxlOiBtb2RlbC5kaXNhYmxlfVwiXG4gICAgICA+XG4gICAgICAgIDxQU1RyZWVJdGVtXG4gICAgICAgICAgOnJlZj1cImVsZW1lbnQuaWRcIlxuICAgICAgICAgIDpjbGFzcz1cImNsYXNzTmFtZVwiXG4gICAgICAgICAgOmhhcy1jaGVja2JveD1cImhhc0NoZWNrYm94XCJcbiAgICAgICAgICA6bW9kZWw9XCJlbGVtZW50XCJcbiAgICAgICAgICA6bGFiZWw9XCJlbGVtZW50Lm5hbWVcIlxuICAgICAgICAgIDp0cmFuc2xhdGlvbnM9XCJ0cmFuc2xhdGlvbnNcIlxuICAgICAgICAgIDpjdXJyZW50LWl0ZW09XCJjdXJyZW50SXRlbVwiXG4gICAgICAgICAgQGNoZWNrZWQ9XCJvbkNoZWNrXCJcbiAgICAgICAgICBAc2V0Q3VycmVudEVsZW1lbnQ9XCJzZXRDdXJyZW50RWxlbWVudFwiXG4gICAgICAgIC8+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0IFBTQ2hlY2tib3ggZnJvbSAnQGFwcC93aWRnZXRzL3BzLWNoZWNrYm94JztcbiAgaW1wb3J0IHtFdmVudEJ1c30gZnJvbSAnQGFwcC91dGlscy9ldmVudC1idXMnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnUFNUcmVlSXRlbScsXG4gICAgcHJvcHM6IHtcbiAgICAgIG1vZGVsOiB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgY2xhc3NOYW1lOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgIH0sXG4gICAgICBoYXNDaGVja2JveDoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgdHJhbnNsYXRpb25zOiB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLFxuICAgICAgfSxcbiAgICAgIGN1cnJlbnRJdGVtOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmlkO1xuICAgICAgfSxcbiAgICAgIGlzRm9sZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5jaGlsZHJlbiAmJiB0aGlzLm1vZGVsLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgIH0sXG4gICAgICBkaXNwbGF5RXh0cmFMYWJlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGb2xkZXIgJiYgdGhpcy5tb2RlbC5leHRyYUxhYmVsO1xuICAgICAgfSxcbiAgICAgIGdldEV4dHJhTGFiZWwoKSB7XG4gICAgICAgIGxldCBleHRyYUxhYmVsID0gJyc7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZXh0cmFMYWJlbCAmJiB0aGlzLm1vZGVsLmV4dHJhTGFiZWwgPT09IDEpIHtcbiAgICAgICAgICBleHRyYUxhYmVsID0gdGhpcy50cmFuc2xhdGlvbnMuZXh0cmFfc2luZ3VsYXI7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlbC5leHRyYUxhYmVsKSB7XG4gICAgICAgICAgZXh0cmFMYWJlbCA9IHRoaXMudHJhbnNsYXRpb25zLmV4dHJhLnJlcGxhY2UoJyVkJywgdGhpcy5tb2RlbC5leHRyYUxhYmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHRyYUxhYmVsO1xuICAgICAgfSxcbiAgICAgIGlzSGlkZGVuKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNGb2xkZXI7XG4gICAgICB9LFxuICAgICAgY2hldnJvblN0YXR1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbiA/ICdvcGVuJyA6ICdjbG9zZWQnO1xuICAgICAgfSxcbiAgICAgIGlzV2FybmluZygpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzRm9sZGVyICYmIHRoaXMubW9kZWwud2FybmluZztcbiAgICAgIH0sXG4gICAgICBhY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmZ1bGxfbmFtZSA9PT0gdGhpcy5jdXJyZW50SXRlbTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBzZXRDdXJyZW50RWxlbWVudChlbCkge1xuICAgICAgICBpZiAodGhpcy4kcmVmc1tlbF0pIHtcbiAgICAgICAgICB0aGlzLm9wZW5UcmVlSXRlbUFjdGlvbigpO1xuICAgICAgICAgIHRoaXMuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wYXJlbnRFbGVtZW50KHRoaXMuJHBhcmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwYXJlbnRFbGVtZW50KHBhcmVudCkge1xuICAgICAgICBpZiAocGFyZW50LmNsaWNrRWxlbWVudCkge1xuICAgICAgICAgIHBhcmVudC5jbGlja0VsZW1lbnQoKTtcbiAgICAgICAgICB0aGlzLnBhcmVudEVsZW1lbnQocGFyZW50LiRwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2xpY2tFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMubW9kZWwuZGlzYWJsZSA/IHRoaXMub3BlblRyZWVJdGVtQWN0aW9uKCkgOiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBvcGVuVHJlZUl0ZW1BY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuc2V0Q3VycmVudEVsZW1lbnQodGhpcy5tb2RlbC5mdWxsX25hbWUpO1xuICAgICAgICBpZiAodGhpcy5pc0ZvbGRlcikge1xuICAgICAgICAgIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgRXZlbnRCdXMuJGVtaXQoJ2xhc3RUcmVlSXRlbUNsaWNrJywge1xuICAgICAgICAgICAgaXRlbTogdGhpcy5tb2RlbCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uQ2hlY2sob2JqKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoZWNrZWQnLCBvYmopO1xuICAgICAgfSxcbiAgICB9LFxuICAgIG1vdW50ZWQoKSB7XG4gICAgICBFdmVudEJ1cy4kb24oJ3RvZ2dsZUNoZWNrYm94JywgKHRhZykgPT4ge1xuICAgICAgICBjb25zdCBjaGVja2JveCA9IHRoaXMuJHJlZnNbdGFnXTtcblxuICAgICAgICBpZiAoY2hlY2tib3gpIHtcbiAgICAgICAgICBjaGVja2JveC4kZGF0YS5jaGVja2VkID0gIWNoZWNrYm94LiRkYXRhLmNoZWNrZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pLiRvbignZXhwYW5kJywgKCkgPT4ge1xuICAgICAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgICAgfSkuJG9uKCdyZWR1Y2UnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgICAgfSkuJG9uKCdzZXRDdXJyZW50RWxlbWVudCcsIChlbCkgPT4ge1xuICAgICAgICB0aGlzLnNldEN1cnJlbnRFbGVtZW50KGVsKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZXRDdXJyZW50RWxlbWVudCh0aGlzLmN1cnJlbnRJdGVtKTtcbiAgICB9LFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIFBTQ2hlY2tib3gsXG4gICAgfSxcbiAgICBkYXRhOiAoKSA9PiAoe1xuICAgICAgb3BlbjogZmFsc2UsXG4gICAgICBjdXJyZW50OiBmYWxzZSxcbiAgICB9KSxcbiAgfTtcbjwvc2NyaXB0PlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG48dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJwcy10cmVlXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgdHJlZS1oZWFkZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXRleHQgdGV4dC11cHBlcmNhc2UgcG9pbnRlclwiXG4gICAgICAgIEBjbGljaz1cImV4cGFuZFwiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5rZXlib2FyZF9hcnJvd19kb3duPC9pPlxuICAgICAgICA8c3BhbiB2LWlmPVwidHJhbnNsYXRpb25zXCI+e3sgdHJhbnNsYXRpb25zLmV4cGFuZCB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tdGV4dCBmbG9hdC1yaWdodCB0ZXh0LXVwcGVyY2FzZSBwb2ludGVyXCJcbiAgICAgICAgQGNsaWNrPVwicmVkdWNlXCJcbiAgICAgID5cbiAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmtleWJvYXJkX2Fycm93X3VwPC9pPlxuICAgICAgICA8c3BhbiB2LWlmPVwidHJhbnNsYXRpb25zXCI+e3sgdHJhbnNsYXRpb25zLnJlZHVjZSB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDx1bFxuICAgICAgY2xhc3M9XCJ0cmVlXCJcbiAgICAgIDpjbGFzcz1cImNsYXNzTmFtZVwiXG4gICAgPlxuICAgICAgPGxpXG4gICAgICAgIHYtZm9yPVwiKGVsZW1lbnQsIGluZGV4KSBpbiBtb2RlbFwiXG4gICAgICAgIDprZXk9XCJpbmRleFwiXG4gICAgICA+XG4gICAgICAgIDxQU1RyZWVJdGVtXG4gICAgICAgICAgcmVmPVwiaXRlbVwiXG4gICAgICAgICAgOmhhcy1jaGVja2JveD1cImhhc0NoZWNrYm94XCJcbiAgICAgICAgICA6bW9kZWw9XCJlbGVtZW50XCJcbiAgICAgICAgICA6bGFiZWw9XCJlbGVtZW50Lm5hbWVcIlxuICAgICAgICAgIDp0cmFuc2xhdGlvbnM9XCJ0cmFuc2xhdGlvbnNcIlxuICAgICAgICAgIDpjdXJyZW50LWl0ZW09XCJjdXJyZW50SXRlbVwiXG4gICAgICAgICAgQGNoZWNrZWQ9XCJvbkNoZWNrXCJcbiAgICAgICAgICBAc2V0Q3VycmVudEVsZW1lbnQ9XCJzZXRDdXJyZW50RWxlbWVudFwiXG4gICAgICAgIC8+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0IHtFdmVudEJ1c30gZnJvbSAnQGFwcC91dGlscy9ldmVudC1idXMnO1xuICBpbXBvcnQgUFNUcmVlSXRlbSBmcm9tICcuL3BzLXRyZWUtaXRlbSc7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICdQU1RyZWUnLFxuICAgIHByb3BzOiB7XG4gICAgICBtb2RlbDoge1xuICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKFtdKSxcbiAgICAgIH0sXG4gICAgICBjbGFzc05hbWU6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgIH0sXG4gICAgICBjdXJyZW50SXRlbToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgfSxcbiAgICAgIGhhc0NoZWNrYm94OiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHRyYW5zbGF0aW9uczoge1xuICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBvbkNoZWNrKG9iaikge1xuICAgICAgICB0aGlzLiRlbWl0KCdjaGVja2VkJywgb2JqKTtcbiAgICAgIH0sXG4gICAgICBleHBhbmQoKSB7XG4gICAgICAgIEV2ZW50QnVzLiRlbWl0KCdleHBhbmQnKTtcbiAgICAgIH0sXG4gICAgICByZWR1Y2UoKSB7XG4gICAgICAgIEV2ZW50QnVzLiRlbWl0KCdyZWR1Y2UnKTtcbiAgICAgIH0sXG4gICAgICBzZXRDdXJyZW50RWxlbWVudChpZCkge1xuICAgICAgICBFdmVudEJ1cy4kZW1pdCgnc2V0Q3VycmVudEVsZW1lbnQnLCBpZCk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgY29tcG9uZW50czoge1xuICAgICAgUFNUcmVlSXRlbSxcbiAgICB9LFxuICB9O1xuPC9zY3JpcHQ+XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vbnVtYmVyL2lzLW5hblwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvYXNzaWduXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7XG5cbnZhciBfZGVmaW5lUHJvcGVydHkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVmaW5lUHJvcGVydHkpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKFwiLi4vY29yZS1qcy9vYmplY3QvYXNzaWduXCIpO1xuXG52YXIgX2Fzc2lnbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3NpZ24pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBfYXNzaWduMi5kZWZhdWx0IHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5OdW1iZXIuaXNOYU47XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3QuYXNzaWduO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyICRPYmplY3QgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKSB7XG4gIHJldHVybiAkT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMScgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIElTX1dSQVAgPSB0eXBlICYgJGV4cG9ydC5XO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV07XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIga2V5LCBvd24sIG91dDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAob3duICYmIGhhcyhleHBvcnRzLCBrZXkpKSBjb250aW51ZTtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG4gICAgLy8gcHJldmVudCBnbG9iYWwgcG9sbHV0aW9uIGZvciBuYW1lc3BhY2VzXG4gICAgZXhwb3J0c1trZXldID0gSVNfR0xPQkFMICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nID8gc291cmNlW2tleV1cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIDogSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpXG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZSB0aGVtIGluIGxpYnJhcnlcbiAgICA6IElTX1dSQVAgJiYgdGFyZ2V0W2tleV0gPT0gb3V0ID8gKGZ1bmN0aW9uIChDKSB7XG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQykge1xuICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEMoKTtcbiAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDKGEpO1xuICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEMoYSwgYik7XG4gICAgICAgICAgfSByZXR1cm4gbmV3IEMoYSwgYiwgYyk7XG4gICAgICAgIH0gcmV0dXJuIEMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICBGW1BST1RPVFlQRV0gPSBDW1BST1RPVFlQRV07XG4gICAgICByZXR1cm4gRjtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICB9KShvdXQpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLm1ldGhvZHMuJU5BTUUlXG4gICAgaWYgKElTX1BST1RPKSB7XG4gICAgICAoZXhwb3J0cy52aXJ0dWFsIHx8IChleHBvcnRzLnZpcnR1YWwgPSB7fSkpW2tleV0gPSBvdXQ7XG4gICAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUucHJvdG90eXBlLiVOQU1FJVxuICAgICAgaWYgKHR5cGUgJiAkZXhwb3J0LlIgJiYgZXhwUHJvdG8gJiYgIWV4cFByb3RvW2tleV0pIGhpZGUoZXhwUHJvdG8sIGtleSwgb3V0KTtcbiAgICB9XG4gIH1cbn07XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG4iLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcbiIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG4iLCIvLyAyMC4xLjIuNCBOdW1iZXIuaXNOYU4obnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzTmFOOiBmdW5jdGlvbiBpc05hTihudW1iZXIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIG51bWJlciAhPSBudW1iZXI7XG4gIH1cbn0pO1xuIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydHk6IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYgfSk7XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyBmcm9tIFwiLi4vY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvZ2V0VXJsLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzBfX18gZnJvbSBcIi4vaW1hZ2VzL3VpLWljb25zXzQ0NDQ0NF8yNTZ4MjQwLnBuZ1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fIGZyb20gXCIuL2ltYWdlcy91aS1pY29uc181NTU1NTVfMjU2eDI0MC5wbmdcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMl9fXyBmcm9tIFwiLi9pbWFnZXMvdWktaWNvbnNfZmZmZmZmXzI1NngyNDAucG5nXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzNfX18gZnJvbSBcIi4vaW1hZ2VzL3VpLWljb25zXzc3NzYyMF8yNTZ4MjQwLnBuZ1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF80X19fIGZyb20gXCIuL2ltYWdlcy91aS1pY29uc19jYzAwMDBfMjU2eDI0MC5wbmdcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNV9fXyBmcm9tIFwiLi9pbWFnZXMvdWktaWNvbnNfNzc3Nzc3XzI1NngyNDAucG5nXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMF9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzBfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMl9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfM19fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzNfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzRfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF80X19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF81X19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNV9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIvKiEgalF1ZXJ5IFVJIC0gdjEuMTIuMSAtIDIwMTYtMDktMTRcXG4qIGh0dHA6Ly9qcXVlcnl1aS5jb21cXG4qIEluY2x1ZGVzOiBjb3JlLmNzcywgYWNjb3JkaW9uLmNzcywgYXV0b2NvbXBsZXRlLmNzcywgbWVudS5jc3MsIGJ1dHRvbi5jc3MsIGNvbnRyb2xncm91cC5jc3MsIGNoZWNrYm94cmFkaW8uY3NzLCBkYXRlcGlja2VyLmNzcywgZGlhbG9nLmNzcywgZHJhZ2dhYmxlLmNzcywgcmVzaXphYmxlLmNzcywgcHJvZ3Jlc3NiYXIuY3NzLCBzZWxlY3RhYmxlLmNzcywgc2VsZWN0bWVudS5jc3MsIHNsaWRlci5jc3MsIHNvcnRhYmxlLmNzcywgc3Bpbm5lci5jc3MsIHRhYnMuY3NzLCB0b29sdGlwLmNzcywgdGhlbWUuY3NzXFxuKiBUbyB2aWV3IGFuZCBtb2RpZnkgdGhpcyB0aGVtZSwgdmlzaXQgaHR0cDovL2pxdWVyeXVpLmNvbS90aGVtZXJvbGxlci8/YmdTaGFkb3dYUG9zPSZiZ092ZXJsYXlYUG9zPSZiZ0Vycm9yWFBvcz0mYmdIaWdobGlnaHRYUG9zPSZiZ0NvbnRlbnRYUG9zPSZiZ0hlYWRlclhQb3M9JmJnQWN0aXZlWFBvcz0mYmdIb3ZlclhQb3M9JmJnRGVmYXVsdFhQb3M9JmJnU2hhZG93WVBvcz0mYmdPdmVybGF5WVBvcz0mYmdFcnJvcllQb3M9JmJnSGlnaGxpZ2h0WVBvcz0mYmdDb250ZW50WVBvcz0mYmdIZWFkZXJZUG9zPSZiZ0FjdGl2ZVlQb3M9JmJnSG92ZXJZUG9zPSZiZ0RlZmF1bHRZUG9zPSZiZ1NoYWRvd1JlcGVhdD0mYmdPdmVybGF5UmVwZWF0PSZiZ0Vycm9yUmVwZWF0PSZiZ0hpZ2hsaWdodFJlcGVhdD0mYmdDb250ZW50UmVwZWF0PSZiZ0hlYWRlclJlcGVhdD0mYmdBY3RpdmVSZXBlYXQ9JmJnSG92ZXJSZXBlYXQ9JmJnRGVmYXVsdFJlcGVhdD0maWNvbnNIb3Zlcj11cmwoJTIyaW1hZ2VzJTJGdWktaWNvbnNfNTU1NTU1XzI1NngyNDAucG5nJTIyKSZpY29uc0hpZ2hsaWdodD11cmwoJTIyaW1hZ2VzJTJGdWktaWNvbnNfNzc3NjIwXzI1NngyNDAucG5nJTIyKSZpY29uc0hlYWRlcj11cmwoJTIyaW1hZ2VzJTJGdWktaWNvbnNfNDQ0NDQ0XzI1NngyNDAucG5nJTIyKSZpY29uc0Vycm9yPXVybCglMjJpbWFnZXMlMkZ1aS1pY29uc19jYzAwMDBfMjU2eDI0MC5wbmclMjIpJmljb25zRGVmYXVsdD11cmwoJTIyaW1hZ2VzJTJGdWktaWNvbnNfNzc3Nzc3XzI1NngyNDAucG5nJTIyKSZpY29uc0NvbnRlbnQ9dXJsKCUyMmltYWdlcyUyRnVpLWljb25zXzQ0NDQ0NF8yNTZ4MjQwLnBuZyUyMikmaWNvbnNBY3RpdmU9dXJsKCUyMmltYWdlcyUyRnVpLWljb25zX2ZmZmZmZl8yNTZ4MjQwLnBuZyUyMikmYmdJbWdVcmxTaGFkb3c9JmJnSW1nVXJsT3ZlcmxheT0mYmdJbWdVcmxIb3Zlcj0mYmdJbWdVcmxIaWdobGlnaHQ9JmJnSW1nVXJsSGVhZGVyPSZiZ0ltZ1VybEVycm9yPSZiZ0ltZ1VybERlZmF1bHQ9JmJnSW1nVXJsQ29udGVudD0mYmdJbWdVcmxBY3RpdmU9Jm9wYWNpdHlGaWx0ZXJTaGFkb3c9QWxwaGEoT3BhY2l0eSUzRDMwKSZvcGFjaXR5RmlsdGVyT3ZlcmxheT1BbHBoYShPcGFjaXR5JTNEMzApJm9wYWNpdHlTaGFkb3dQZXJjPTMwJm9wYWNpdHlPdmVybGF5UGVyYz0zMCZpY29uQ29sb3JIb3Zlcj0lMjM1NTU1NTUmaWNvbkNvbG9ySGlnaGxpZ2h0PSUyMzc3NzYyMCZpY29uQ29sb3JIZWFkZXI9JTIzNDQ0NDQ0Jmljb25Db2xvckVycm9yPSUyM2NjMDAwMCZpY29uQ29sb3JEZWZhdWx0PSUyMzc3Nzc3NyZpY29uQ29sb3JDb250ZW50PSUyMzQ0NDQ0NCZpY29uQ29sb3JBY3RpdmU9JTIzZmZmZmZmJmJnSW1nT3BhY2l0eVNoYWRvdz0wJmJnSW1nT3BhY2l0eU92ZXJsYXk9MCZiZ0ltZ09wYWNpdHlFcnJvcj05NSZiZ0ltZ09wYWNpdHlIaWdobGlnaHQ9NTUmYmdJbWdPcGFjaXR5Q29udGVudD03NSZiZ0ltZ09wYWNpdHlIZWFkZXI9NzUmYmdJbWdPcGFjaXR5QWN0aXZlPTY1JmJnSW1nT3BhY2l0eUhvdmVyPTc1JmJnSW1nT3BhY2l0eURlZmF1bHQ9NzUmYmdUZXh0dXJlU2hhZG93PWZsYXQmYmdUZXh0dXJlT3ZlcmxheT1mbGF0JmJnVGV4dHVyZUVycm9yPWZsYXQmYmdUZXh0dXJlSGlnaGxpZ2h0PWZsYXQmYmdUZXh0dXJlQ29udGVudD1mbGF0JmJnVGV4dHVyZUhlYWRlcj1mbGF0JmJnVGV4dHVyZUFjdGl2ZT1mbGF0JmJnVGV4dHVyZUhvdmVyPWZsYXQmYmdUZXh0dXJlRGVmYXVsdD1mbGF0JmNvcm5lclJhZGl1cz0zcHgmZndEZWZhdWx0PW5vcm1hbCZmZkRlZmF1bHQ9QXJpYWwlMkNIZWx2ZXRpY2ElMkNzYW5zLXNlcmlmJmZzRGVmYXVsdD0xZW0mY29ybmVyUmFkaXVzU2hhZG93PThweCZ0aGlja25lc3NTaGFkb3c9NXB4Jm9mZnNldExlZnRTaGFkb3c9MHB4Jm9mZnNldFRvcFNoYWRvdz0wcHgmb3BhY2l0eVNoYWRvdz0uMyZiZ0NvbG9yU2hhZG93PSUyMzY2NjY2NiZvcGFjaXR5T3ZlcmxheT0uMyZiZ0NvbG9yT3ZlcmxheT0lMjNhYWFhYWEmZmNFcnJvcj0lMjM1ZjNmM2YmYm9yZGVyQ29sb3JFcnJvcj0lMjNmMWE4OTkmYmdDb2xvckVycm9yPSUyM2ZkZGZkZiZmY0hpZ2hsaWdodD0lMjM3Nzc2MjAmYm9yZGVyQ29sb3JIaWdobGlnaHQ9JTIzZGFkNTVlJmJnQ29sb3JIaWdobGlnaHQ9JTIzZmZmYTkwJmZjQ29udGVudD0lMjMzMzMzMzMmYm9yZGVyQ29sb3JDb250ZW50PSUyM2RkZGRkZCZiZ0NvbG9yQ29udGVudD0lMjNmZmZmZmYmZmNIZWFkZXI9JTIzMzMzMzMzJmJvcmRlckNvbG9ySGVhZGVyPSUyM2RkZGRkZCZiZ0NvbG9ySGVhZGVyPSUyM2U5ZTllOSZmY0FjdGl2ZT0lMjNmZmZmZmYmYm9yZGVyQ29sb3JBY3RpdmU9JTIzMDAzZWZmJmJnQ29sb3JBY3RpdmU9JTIzMDA3ZmZmJmZjSG92ZXI9JTIzMmIyYjJiJmJvcmRlckNvbG9ySG92ZXI9JTIzY2NjY2NjJmJnQ29sb3JIb3Zlcj0lMjNlZGVkZWQmZmNEZWZhdWx0PSUyMzQ1NDU0NSZib3JkZXJDb2xvckRlZmF1bHQ9JTIzYzVjNWM1JmJnQ29sb3JEZWZhdWx0PSUyM2Y2ZjZmNlxcbiogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqL1xcblxcbi8qIExheW91dCBoZWxwZXJzXFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuLnVpLWhlbHBlci1oaWRkZW4ge1xcblxcdGRpc3BsYXk6IG5vbmU7XFxufVxcbi51aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUge1xcblxcdGJvcmRlcjogMDtcXG5cXHRjbGlwOiByZWN0KDAgMCAwIDApO1xcblxcdGhlaWdodDogMXB4O1xcblxcdG1hcmdpbjogLTFweDtcXG5cXHRvdmVyZmxvdzogaGlkZGVuO1xcblxcdHBhZGRpbmc6IDA7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdHdpZHRoOiAxcHg7XFxufVxcbi51aS1oZWxwZXItcmVzZXQge1xcblxcdG1hcmdpbjogMDtcXG5cXHRwYWRkaW5nOiAwO1xcblxcdGJvcmRlcjogMDtcXG5cXHRvdXRsaW5lOiAwO1xcblxcdGxpbmUtaGVpZ2h0OiAxLjM7XFxuXFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xcblxcdGZvbnQtc2l6ZTogMTAwJTtcXG5cXHRsaXN0LXN0eWxlOiBub25lO1xcbn1cXG4udWktaGVscGVyLWNsZWFyZml4OmJlZm9yZSxcXG4udWktaGVscGVyLWNsZWFyZml4OmFmdGVyIHtcXG5cXHRjb250ZW50OiBcXFwiXFxcIjtcXG5cXHRkaXNwbGF5OiB0YWJsZTtcXG5cXHRib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xcbn1cXG4udWktaGVscGVyLWNsZWFyZml4OmFmdGVyIHtcXG5cXHRjbGVhcjogYm90aDtcXG59XFxuLnVpLWhlbHBlci16Zml4IHtcXG5cXHR3aWR0aDogMTAwJTtcXG5cXHRoZWlnaHQ6IDEwMCU7XFxuXFx0dG9wOiAwO1xcblxcdGxlZnQ6IDA7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdG9wYWNpdHk6IDA7XFxuXFx0ZmlsdGVyOkFscGhhKE9wYWNpdHk9MCk7IC8qIHN1cHBvcnQ6IElFOCAqL1xcbn1cXG5cXG4udWktZnJvbnQge1xcblxcdHotaW5kZXg6IDEwMDtcXG59XFxuXFxuXFxuLyogSW50ZXJhY3Rpb24gQ3Vlc1xcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcbi51aS1zdGF0ZS1kaXNhYmxlZCB7XFxuXFx0Y3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XFxuXFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcblxcbi8qIEljb25zXFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuLnVpLWljb24ge1xcblxcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG5cXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcblxcdG1hcmdpbi10b3A6IC0uMjVlbTtcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7XFxuXFx0dGV4dC1pbmRlbnQ6IC05OTk5OXB4O1xcblxcdG92ZXJmbG93OiBoaWRkZW47XFxuXFx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG59XFxuXFxuLnVpLXdpZGdldC1pY29uLWJsb2NrIHtcXG5cXHRsZWZ0OiA1MCU7XFxuXFx0bWFyZ2luLWxlZnQ6IC04cHg7XFxuXFx0ZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi8qIE1pc2MgdmlzdWFsc1xcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcblxcbi8qIE92ZXJsYXlzICovXFxuLnVpLXdpZGdldC1vdmVybGF5IHtcXG5cXHRwb3NpdGlvbjogZml4ZWQ7XFxuXFx0dG9wOiAwO1xcblxcdGxlZnQ6IDA7XFxuXFx0d2lkdGg6IDEwMCU7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcbn1cXG4udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24taGVhZGVyIHtcXG5cXHRkaXNwbGF5OiBibG9jaztcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxuXFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblxcdG1hcmdpbjogMnB4IDAgMCAwO1xcblxcdHBhZGRpbmc6IC41ZW0gLjVlbSAuNWVtIC43ZW07XFxuXFx0Zm9udC1zaXplOiAxMDAlO1xcbn1cXG4udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24tY29udGVudCB7XFxuXFx0cGFkZGluZzogMWVtIDIuMmVtO1xcblxcdGJvcmRlci10b3A6IDA7XFxuXFx0b3ZlcmZsb3c6IGF1dG87XFxufVxcbi51aS1hdXRvY29tcGxldGUge1xcblxcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG5cXHR0b3A6IDA7XFxuXFx0bGVmdDogMDtcXG5cXHRjdXJzb3I6IGRlZmF1bHQ7XFxufVxcbi51aS1tZW51IHtcXG5cXHRsaXN0LXN0eWxlOiBub25lO1xcblxcdHBhZGRpbmc6IDA7XFxuXFx0bWFyZ2luOiAwO1xcblxcdGRpc3BsYXk6IGJsb2NrO1xcblxcdG91dGxpbmU6IDA7XFxufVxcbi51aS1tZW51IC51aS1tZW51IHtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcbi51aS1tZW51IC51aS1tZW51LWl0ZW0ge1xcblxcdG1hcmdpbjogMDtcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxuXFx0Lyogc3VwcG9ydDogSUUxMCwgc2VlICM4ODQ0ICovXFxuXFx0bGlzdC1zdHlsZS1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBQUFBUC8vL3lINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQlJBQTdcXFwiKTtcXG59XFxuLnVpLW1lbnUgLnVpLW1lbnUtaXRlbS13cmFwcGVyIHtcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7XFxuXFx0cGFkZGluZzogM3B4IDFlbSAzcHggLjRlbTtcXG59XFxuLnVpLW1lbnUgLnVpLW1lbnUtZGl2aWRlciB7XFxuXFx0bWFyZ2luOiA1cHggMDtcXG5cXHRoZWlnaHQ6IDA7XFxuXFx0Zm9udC1zaXplOiAwO1xcblxcdGxpbmUtaGVpZ2h0OiAwO1xcblxcdGJvcmRlci13aWR0aDogMXB4IDAgMCAwO1xcbn1cXG4udWktbWVudSAudWktc3RhdGUtZm9jdXMsXFxuLnVpLW1lbnUgLnVpLXN0YXRlLWFjdGl2ZSB7XFxuXFx0bWFyZ2luOiAtMXB4O1xcbn1cXG5cXG4vKiBpY29uIHN1cHBvcnQgKi9cXG4udWktbWVudS1pY29ucyB7XFxuXFx0cG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4udWktbWVudS1pY29ucyAudWktbWVudS1pdGVtLXdyYXBwZXIge1xcblxcdHBhZGRpbmctbGVmdDogMmVtO1xcbn1cXG5cXG4vKiBsZWZ0LWFsaWduZWQgKi9cXG4udWktbWVudSAudWktaWNvbiB7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdHRvcDogMDtcXG5cXHRib3R0b206IDA7XFxuXFx0bGVmdDogLjJlbTtcXG5cXHRtYXJnaW46IGF1dG8gMDtcXG59XFxuXFxuLyogcmlnaHQtYWxpZ25lZCAqL1xcbi51aS1tZW51IC51aS1tZW51LWljb24ge1xcblxcdGxlZnQ6IGF1dG87XFxuXFx0cmlnaHQ6IDA7XFxufVxcbi51aS1idXR0b24ge1xcblxcdHBhZGRpbmc6IC40ZW0gMWVtO1xcblxcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7XFxuXFx0bGluZS1oZWlnaHQ6IG5vcm1hbDtcXG5cXHRtYXJnaW4tcmlnaHQ6IC4xZW07XFxuXFx0Y3Vyc29yOiBwb2ludGVyO1xcblxcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuXFx0dGV4dC1hbGlnbjogY2VudGVyO1xcblxcdC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuXFx0LW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG5cXHQtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuXFx0dXNlci1zZWxlY3Q6IG5vbmU7XFxuXFxuXFx0LyogU3VwcG9ydDogSUUgPD0gMTEgKi9cXG5cXHRvdmVyZmxvdzogdmlzaWJsZTtcXG59XFxuXFxuLnVpLWJ1dHRvbixcXG4udWktYnV0dG9uOmxpbmssXFxuLnVpLWJ1dHRvbjp2aXNpdGVkLFxcbi51aS1idXR0b246aG92ZXIsXFxuLnVpLWJ1dHRvbjphY3RpdmUge1xcblxcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLyogdG8gbWFrZSByb29tIGZvciB0aGUgaWNvbiwgYSB3aWR0aCBuZWVkcyB0byBiZSBzZXQgaGVyZSAqL1xcbi51aS1idXR0b24taWNvbi1vbmx5IHtcXG5cXHR3aWR0aDogMmVtO1xcblxcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuXFx0dGV4dC1pbmRlbnQ6IC05OTk5cHg7XFxuXFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcXG59XFxuXFxuLyogbm8gaWNvbiBzdXBwb3J0IGZvciBpbnB1dCBlbGVtZW50cyAqL1xcbmlucHV0LnVpLWJ1dHRvbi51aS1idXR0b24taWNvbi1vbmx5IHtcXG5cXHR0ZXh0LWluZGVudDogMDtcXG59XFxuXFxuLyogYnV0dG9uIGljb24gZWxlbWVudChzKSAqL1xcbi51aS1idXR0b24taWNvbi1vbmx5IC51aS1pY29uIHtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0dG9wOiA1MCU7XFxuXFx0bGVmdDogNTAlO1xcblxcdG1hcmdpbi10b3A6IC04cHg7XFxuXFx0bWFyZ2luLWxlZnQ6IC04cHg7XFxufVxcblxcbi51aS1idXR0b24udWktaWNvbi1ub3RleHQgLnVpLWljb24ge1xcblxcdHBhZGRpbmc6IDA7XFxuXFx0d2lkdGg6IDIuMWVtO1xcblxcdGhlaWdodDogMi4xZW07XFxuXFx0dGV4dC1pbmRlbnQ6IC05OTk5cHg7XFxuXFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcXG5cXG59XFxuXFxuaW5wdXQudWktYnV0dG9uLnVpLWljb24tbm90ZXh0IC51aS1pY29uIHtcXG5cXHR3aWR0aDogYXV0bztcXG5cXHRoZWlnaHQ6IGF1dG87XFxuXFx0dGV4dC1pbmRlbnQ6IDA7XFxuXFx0d2hpdGUtc3BhY2U6IG5vcm1hbDtcXG5cXHRwYWRkaW5nOiAuNGVtIDFlbTtcXG59XFxuXFxuLyogd29ya2Fyb3VuZHMgKi9cXG4vKiBTdXBwb3J0OiBGaXJlZm94IDUgLSA0MCAqL1xcbmlucHV0LnVpLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcXG5idXR0b24udWktYnV0dG9uOjotbW96LWZvY3VzLWlubmVyIHtcXG5cXHRib3JkZXI6IDA7XFxuXFx0cGFkZGluZzogMDtcXG59XFxuLnVpLWNvbnRyb2xncm91cCB7XFxuXFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG5cXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcbi51aS1jb250cm9sZ3JvdXAgPiAudWktY29udHJvbGdyb3VwLWl0ZW0ge1xcblxcdGZsb2F0OiBsZWZ0O1xcblxcdG1hcmdpbi1sZWZ0OiAwO1xcblxcdG1hcmdpbi1yaWdodDogMDtcXG59XFxuLnVpLWNvbnRyb2xncm91cCA+IC51aS1jb250cm9sZ3JvdXAtaXRlbTpmb2N1cyxcXG4udWktY29udHJvbGdyb3VwID4gLnVpLWNvbnRyb2xncm91cC1pdGVtLnVpLXZpc3VhbC1mb2N1cyB7XFxuXFx0ei1pbmRleDogOTk5OTtcXG59XFxuLnVpLWNvbnRyb2xncm91cC12ZXJ0aWNhbCA+IC51aS1jb250cm9sZ3JvdXAtaXRlbSB7XFxuXFx0ZGlzcGxheTogYmxvY2s7XFxuXFx0ZmxvYXQ6IG5vbmU7XFxuXFx0d2lkdGg6IDEwMCU7XFxuXFx0bWFyZ2luLXRvcDogMDtcXG5cXHRtYXJnaW4tYm90dG9tOiAwO1xcblxcdHRleHQtYWxpZ246IGxlZnQ7XFxufVxcbi51aS1jb250cm9sZ3JvdXAtdmVydGljYWwgLnVpLWNvbnRyb2xncm91cC1pdGVtIHtcXG5cXHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG4udWktY29udHJvbGdyb3VwIC51aS1jb250cm9sZ3JvdXAtbGFiZWwge1xcblxcdHBhZGRpbmc6IC40ZW0gMWVtO1xcbn1cXG4udWktY29udHJvbGdyb3VwIC51aS1jb250cm9sZ3JvdXAtbGFiZWwgc3BhbiB7XFxuXFx0Zm9udC1zaXplOiA4MCU7XFxufVxcbi51aS1jb250cm9sZ3JvdXAtaG9yaXpvbnRhbCAudWktY29udHJvbGdyb3VwLWxhYmVsICsgLnVpLWNvbnRyb2xncm91cC1pdGVtIHtcXG5cXHRib3JkZXItbGVmdDogbm9uZTtcXG59XFxuLnVpLWNvbnRyb2xncm91cC12ZXJ0aWNhbCAudWktY29udHJvbGdyb3VwLWxhYmVsICsgLnVpLWNvbnRyb2xncm91cC1pdGVtIHtcXG5cXHRib3JkZXItdG9wOiBub25lO1xcbn1cXG4udWktY29udHJvbGdyb3VwLWhvcml6b250YWwgLnVpLWNvbnRyb2xncm91cC1sYWJlbC51aS13aWRnZXQtY29udGVudCB7XFxuXFx0Ym9yZGVyLXJpZ2h0OiBub25lO1xcbn1cXG4udWktY29udHJvbGdyb3VwLXZlcnRpY2FsIC51aS1jb250cm9sZ3JvdXAtbGFiZWwudWktd2lkZ2V0LWNvbnRlbnQge1xcblxcdGJvcmRlci1ib3R0b206IG5vbmU7XFxufVxcblxcbi8qIFNwaW5uZXIgc3BlY2lmaWMgc3R5bGUgZml4ZXMgKi9cXG4udWktY29udHJvbGdyb3VwLXZlcnRpY2FsIC51aS1zcGlubmVyLWlucHV0IHtcXG5cXG5cXHQvKiBTdXBwb3J0OiBJRTggb25seSwgQW5kcm9pZCA8IDQuNCBvbmx5ICovXFxuXFx0d2lkdGg6IDc1JTtcXG5cXHR3aWR0aDogY2FsYyggMTAwJSAtIDIuNGVtICk7XFxufVxcbi51aS1jb250cm9sZ3JvdXAtdmVydGljYWwgLnVpLXNwaW5uZXIgLnVpLXNwaW5uZXItdXAge1xcblxcdGJvcmRlci10b3Atc3R5bGU6IHNvbGlkO1xcbn1cXG5cXG4udWktY2hlY2tib3hyYWRpby1sYWJlbCAudWktaWNvbi1iYWNrZ3JvdW5kIHtcXG5cXHRib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDFweCAjY2NjO1xcblxcdGJvcmRlci1yYWRpdXM6IC4xMmVtO1xcblxcdGJvcmRlcjogbm9uZTtcXG59XFxuLnVpLWNoZWNrYm94cmFkaW8tcmFkaW8tbGFiZWwgLnVpLWljb24tYmFja2dyb3VuZCB7XFxuXFx0d2lkdGg6IDE2cHg7XFxuXFx0aGVpZ2h0OiAxNnB4O1xcblxcdGJvcmRlci1yYWRpdXM6IDFlbTtcXG5cXHRvdmVyZmxvdzogdmlzaWJsZTtcXG5cXHRib3JkZXI6IG5vbmU7XFxufVxcbi51aS1jaGVja2JveHJhZGlvLXJhZGlvLWxhYmVsLnVpLWNoZWNrYm94cmFkaW8tY2hlY2tlZCAudWktaWNvbixcXG4udWktY2hlY2tib3hyYWRpby1yYWRpby1sYWJlbC51aS1jaGVja2JveHJhZGlvLWNoZWNrZWQ6aG92ZXIgLnVpLWljb24ge1xcblxcdGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxuXFx0d2lkdGg6IDhweDtcXG5cXHRoZWlnaHQ6IDhweDtcXG5cXHRib3JkZXItd2lkdGg6IDRweDtcXG5cXHRib3JkZXItc3R5bGU6IHNvbGlkO1xcbn1cXG4udWktY2hlY2tib3hyYWRpby1kaXNhYmxlZCB7XFxuXFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi51aS1kYXRlcGlja2VyIHtcXG5cXHR3aWR0aDogMTdlbTtcXG5cXHRwYWRkaW5nOiAuMmVtIC4yZW0gMDtcXG5cXHRkaXNwbGF5OiBub25lO1xcbn1cXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1oZWFkZXIge1xcblxcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cXHRwYWRkaW5nOiAuMmVtIDA7XFxufVxcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYsXFxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dCB7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdHRvcDogMnB4O1xcblxcdHdpZHRoOiAxLjhlbTtcXG5cXHRoZWlnaHQ6IDEuOGVtO1xcbn1cXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyLFxcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQtaG92ZXIge1xcblxcdHRvcDogMXB4O1xcbn1cXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2IHtcXG5cXHRsZWZ0OiAycHg7XFxufVxcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQge1xcblxcdHJpZ2h0OiAycHg7XFxufVxcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYtaG92ZXIge1xcblxcdGxlZnQ6IDFweDtcXG59XFxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlciB7XFxuXFx0cmlnaHQ6IDFweDtcXG59XFxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldiBzcGFuLFxcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQgc3BhbiB7XFxuXFx0ZGlzcGxheTogYmxvY2s7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdGxlZnQ6IDUwJTtcXG5cXHRtYXJnaW4tbGVmdDogLThweDtcXG5cXHR0b3A6IDUwJTtcXG5cXHRtYXJnaW4tdG9wOiAtOHB4O1xcbn1cXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci10aXRsZSB7XFxuXFx0bWFyZ2luOiAwIDIuM2VtO1xcblxcdGxpbmUtaGVpZ2h0OiAxLjhlbTtcXG5cXHR0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxlIHNlbGVjdCB7XFxuXFx0Zm9udC1zaXplOiAxZW07XFxuXFx0bWFyZ2luOiAxcHggMDtcXG59XFxuLnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsXFxuLnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciB7XFxuXFx0d2lkdGg6IDQ1JTtcXG59XFxuLnVpLWRhdGVwaWNrZXIgdGFibGUge1xcblxcdHdpZHRoOiAxMDAlO1xcblxcdGZvbnQtc2l6ZTogLjllbTtcXG5cXHRib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xcblxcdG1hcmdpbjogMCAwIC40ZW07XFxufVxcbi51aS1kYXRlcGlja2VyIHRoIHtcXG5cXHRwYWRkaW5nOiAuN2VtIC4zZW07XFxuXFx0dGV4dC1hbGlnbjogY2VudGVyO1xcblxcdGZvbnQtd2VpZ2h0OiBib2xkO1xcblxcdGJvcmRlcjogMDtcXG59XFxuLnVpLWRhdGVwaWNrZXIgdGQge1xcblxcdGJvcmRlcjogMDtcXG5cXHRwYWRkaW5nOiAxcHg7XFxufVxcbi51aS1kYXRlcGlja2VyIHRkIHNwYW4sXFxuLnVpLWRhdGVwaWNrZXIgdGQgYSB7XFxuXFx0ZGlzcGxheTogYmxvY2s7XFxuXFx0cGFkZGluZzogLjJlbTtcXG5cXHR0ZXh0LWFsaWduOiByaWdodDtcXG5cXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUge1xcblxcdGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxuXFx0bWFyZ2luOiAuN2VtIDAgMCAwO1xcblxcdHBhZGRpbmc6IDAgLjJlbTtcXG5cXHRib3JkZXItbGVmdDogMDtcXG5cXHRib3JkZXItcmlnaHQ6IDA7XFxuXFx0Ym9yZGVyLWJvdHRvbTogMDtcXG59XFxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24ge1xcblxcdGZsb2F0OiByaWdodDtcXG5cXHRtYXJnaW46IC41ZW0gLjJlbSAuNGVtO1xcblxcdGN1cnNvcjogcG9pbnRlcjtcXG5cXHRwYWRkaW5nOiAuMmVtIC42ZW0gLjNlbSAuNmVtO1xcblxcdHdpZHRoOiBhdXRvO1xcblxcdG92ZXJmbG93OiB2aXNpYmxlO1xcbn1cXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbi51aS1kYXRlcGlja2VyLWN1cnJlbnQge1xcblxcdGZsb2F0OiBsZWZ0O1xcbn1cXG5cXG4vKiB3aXRoIG11bHRpcGxlIGNhbGVuZGFycyAqL1xcbi51aS1kYXRlcGlja2VyLnVpLWRhdGVwaWNrZXItbXVsdGkge1xcblxcdHdpZHRoOiBhdXRvO1xcbn1cXG4udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cCB7XFxuXFx0ZmxvYXQ6IGxlZnQ7XFxufVxcbi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwIHRhYmxlIHtcXG5cXHR3aWR0aDogOTUlO1xcblxcdG1hcmdpbjogMCBhdXRvIC40ZW07XFxufVxcbi51aS1kYXRlcGlja2VyLW11bHRpLTIgLnVpLWRhdGVwaWNrZXItZ3JvdXAge1xcblxcdHdpZHRoOiA1MCU7XFxufVxcbi51aS1kYXRlcGlja2VyLW11bHRpLTMgLnVpLWRhdGVwaWNrZXItZ3JvdXAge1xcblxcdHdpZHRoOiAzMy4zJTtcXG59XFxuLnVpLWRhdGVwaWNrZXItbXVsdGktNCAudWktZGF0ZXBpY2tlci1ncm91cCB7XFxuXFx0d2lkdGg6IDI1JTtcXG59XFxuLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCAudWktZGF0ZXBpY2tlci1oZWFkZXIsXFxuLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIC51aS1kYXRlcGlja2VyLWhlYWRlciB7XFxuXFx0Ym9yZGVyLWxlZnQtd2lkdGg6IDA7XFxufVxcbi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUge1xcblxcdGNsZWFyOiBsZWZ0O1xcbn1cXG4udWktZGF0ZXBpY2tlci1yb3ctYnJlYWsge1xcblxcdGNsZWFyOiBib3RoO1xcblxcdHdpZHRoOiAxMDAlO1xcblxcdGZvbnQtc2l6ZTogMDtcXG59XFxuXFxuLyogUlRMIHN1cHBvcnQgKi9cXG4udWktZGF0ZXBpY2tlci1ydGwge1xcblxcdGRpcmVjdGlvbjogcnRsO1xcbn1cXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItcHJldiB7XFxuXFx0cmlnaHQ6IDJweDtcXG5cXHRsZWZ0OiBhdXRvO1xcbn1cXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItbmV4dCB7XFxuXFx0bGVmdDogMnB4O1xcblxcdHJpZ2h0OiBhdXRvO1xcbn1cXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItcHJldjpob3ZlciB7XFxuXFx0cmlnaHQ6IDFweDtcXG5cXHRsZWZ0OiBhdXRvO1xcbn1cXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItbmV4dDpob3ZlciB7XFxuXFx0bGVmdDogMXB4O1xcblxcdHJpZ2h0OiBhdXRvO1xcbn1cXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSB7XFxuXFx0Y2xlYXI6IHJpZ2h0O1xcbn1cXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24ge1xcblxcdGZsb2F0OiBsZWZ0O1xcbn1cXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24udWktZGF0ZXBpY2tlci1jdXJyZW50LFxcbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cCB7XFxuXFx0ZmxvYXQ6IHJpZ2h0O1xcbn1cXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCAudWktZGF0ZXBpY2tlci1oZWFkZXIsXFxuLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXIge1xcblxcdGJvcmRlci1yaWdodC13aWR0aDogMDtcXG5cXHRib3JkZXItbGVmdC13aWR0aDogMXB4O1xcbn1cXG5cXG4vKiBJY29ucyAqL1xcbi51aS1kYXRlcGlja2VyIC51aS1pY29uIHtcXG5cXHRkaXNwbGF5OiBibG9jaztcXG5cXHR0ZXh0LWluZGVudDogLTk5OTk5cHg7XFxuXFx0b3ZlcmZsb3c6IGhpZGRlbjtcXG5cXHRiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcblxcdGxlZnQ6IC41ZW07XFxuXFx0dG9wOiAuM2VtO1xcbn1cXG4udWktZGlhbG9nIHtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0dG9wOiAwO1xcblxcdGxlZnQ6IDA7XFxuXFx0cGFkZGluZzogLjJlbTtcXG5cXHRvdXRsaW5lOiAwO1xcbn1cXG4udWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGViYXIge1xcblxcdHBhZGRpbmc6IC40ZW0gMWVtO1xcblxcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnVpLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlIHtcXG5cXHRmbG9hdDogbGVmdDtcXG5cXHRtYXJnaW46IC4xZW0gMDtcXG5cXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xcblxcdHdpZHRoOiA5MCU7XFxuXFx0b3ZlcmZsb3c6IGhpZGRlbjtcXG5cXHR0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG59XFxuLnVpLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlIHtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0cmlnaHQ6IC4zZW07XFxuXFx0dG9wOiA1MCU7XFxuXFx0d2lkdGg6IDIwcHg7XFxuXFx0bWFyZ2luOiAtMTBweCAwIDAgMDtcXG5cXHRwYWRkaW5nOiAxcHg7XFxuXFx0aGVpZ2h0OiAyMHB4O1xcbn1cXG4udWktZGlhbG9nIC51aS1kaWFsb2ctY29udGVudCB7XFxuXFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblxcdGJvcmRlcjogMDtcXG5cXHRwYWRkaW5nOiAuNWVtIDFlbTtcXG5cXHRiYWNrZ3JvdW5kOiBub25lO1xcblxcdG92ZXJmbG93OiBhdXRvO1xcbn1cXG4udWktZGlhbG9nIC51aS1kaWFsb2ctYnV0dG9ucGFuZSB7XFxuXFx0dGV4dC1hbGlnbjogbGVmdDtcXG5cXHRib3JkZXItd2lkdGg6IDFweCAwIDAgMDtcXG5cXHRiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcblxcdG1hcmdpbi10b3A6IC41ZW07XFxuXFx0cGFkZGluZzogLjNlbSAxZW0gLjVlbSAuNGVtO1xcbn1cXG4udWktZGlhbG9nIC51aS1kaWFsb2ctYnV0dG9ucGFuZSAudWktZGlhbG9nLWJ1dHRvbnNldCB7XFxuXFx0ZmxvYXQ6IHJpZ2h0O1xcbn1cXG4udWktZGlhbG9nIC51aS1kaWFsb2ctYnV0dG9ucGFuZSBidXR0b24ge1xcblxcdG1hcmdpbjogLjVlbSAuNGVtIC41ZW0gMDtcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi51aS1kaWFsb2cgLnVpLXJlc2l6YWJsZS1uIHtcXG5cXHRoZWlnaHQ6IDJweDtcXG5cXHR0b3A6IDA7XFxufVxcbi51aS1kaWFsb2cgLnVpLXJlc2l6YWJsZS1lIHtcXG5cXHR3aWR0aDogMnB4O1xcblxcdHJpZ2h0OiAwO1xcbn1cXG4udWktZGlhbG9nIC51aS1yZXNpemFibGUtcyB7XFxuXFx0aGVpZ2h0OiAycHg7XFxuXFx0Ym90dG9tOiAwO1xcbn1cXG4udWktZGlhbG9nIC51aS1yZXNpemFibGUtdyB7XFxuXFx0d2lkdGg6IDJweDtcXG5cXHRsZWZ0OiAwO1xcbn1cXG4udWktZGlhbG9nIC51aS1yZXNpemFibGUtc2UsXFxuLnVpLWRpYWxvZyAudWktcmVzaXphYmxlLXN3LFxcbi51aS1kaWFsb2cgLnVpLXJlc2l6YWJsZS1uZSxcXG4udWktZGlhbG9nIC51aS1yZXNpemFibGUtbncge1xcblxcdHdpZHRoOiA3cHg7XFxuXFx0aGVpZ2h0OiA3cHg7XFxufVxcbi51aS1kaWFsb2cgLnVpLXJlc2l6YWJsZS1zZSB7XFxuXFx0cmlnaHQ6IDA7XFxuXFx0Ym90dG9tOiAwO1xcbn1cXG4udWktZGlhbG9nIC51aS1yZXNpemFibGUtc3cge1xcblxcdGxlZnQ6IDA7XFxuXFx0Ym90dG9tOiAwO1xcbn1cXG4udWktZGlhbG9nIC51aS1yZXNpemFibGUtbmUge1xcblxcdHJpZ2h0OiAwO1xcblxcdHRvcDogMDtcXG59XFxuLnVpLWRpYWxvZyAudWktcmVzaXphYmxlLW53IHtcXG5cXHRsZWZ0OiAwO1xcblxcdHRvcDogMDtcXG59XFxuLnVpLWRyYWdnYWJsZSAudWktZGlhbG9nLXRpdGxlYmFyIHtcXG5cXHRjdXJzb3I6IG1vdmU7XFxufVxcbi51aS1kcmFnZ2FibGUtaGFuZGxlIHtcXG5cXHQtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xcblxcdHRvdWNoLWFjdGlvbjogbm9uZTtcXG59XFxuLnVpLXJlc2l6YWJsZSB7XFxuXFx0cG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4udWktcmVzaXphYmxlLWhhbmRsZSB7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdGZvbnQtc2l6ZTogMC4xcHg7XFxuXFx0ZGlzcGxheTogYmxvY2s7XFxuXFx0LW1zLXRvdWNoLWFjdGlvbjogbm9uZTtcXG5cXHR0b3VjaC1hY3Rpb246IG5vbmU7XFxufVxcbi51aS1yZXNpemFibGUtZGlzYWJsZWQgLnVpLXJlc2l6YWJsZS1oYW5kbGUsXFxuLnVpLXJlc2l6YWJsZS1hdXRvaGlkZSAudWktcmVzaXphYmxlLWhhbmRsZSB7XFxuXFx0ZGlzcGxheTogbm9uZTtcXG59XFxuLnVpLXJlc2l6YWJsZS1uIHtcXG5cXHRjdXJzb3I6IG4tcmVzaXplO1xcblxcdGhlaWdodDogN3B4O1xcblxcdHdpZHRoOiAxMDAlO1xcblxcdHRvcDogLTVweDtcXG5cXHRsZWZ0OiAwO1xcbn1cXG4udWktcmVzaXphYmxlLXMge1xcblxcdGN1cnNvcjogcy1yZXNpemU7XFxuXFx0aGVpZ2h0OiA3cHg7XFxuXFx0d2lkdGg6IDEwMCU7XFxuXFx0Ym90dG9tOiAtNXB4O1xcblxcdGxlZnQ6IDA7XFxufVxcbi51aS1yZXNpemFibGUtZSB7XFxuXFx0Y3Vyc29yOiBlLXJlc2l6ZTtcXG5cXHR3aWR0aDogN3B4O1xcblxcdHJpZ2h0OiAtNXB4O1xcblxcdHRvcDogMDtcXG5cXHRoZWlnaHQ6IDEwMCU7XFxufVxcbi51aS1yZXNpemFibGUtdyB7XFxuXFx0Y3Vyc29yOiB3LXJlc2l6ZTtcXG5cXHR3aWR0aDogN3B4O1xcblxcdGxlZnQ6IC01cHg7XFxuXFx0dG9wOiAwO1xcblxcdGhlaWdodDogMTAwJTtcXG59XFxuLnVpLXJlc2l6YWJsZS1zZSB7XFxuXFx0Y3Vyc29yOiBzZS1yZXNpemU7XFxuXFx0d2lkdGg6IDEycHg7XFxuXFx0aGVpZ2h0OiAxMnB4O1xcblxcdHJpZ2h0OiAxcHg7XFxuXFx0Ym90dG9tOiAxcHg7XFxufVxcbi51aS1yZXNpemFibGUtc3cge1xcblxcdGN1cnNvcjogc3ctcmVzaXplO1xcblxcdHdpZHRoOiA5cHg7XFxuXFx0aGVpZ2h0OiA5cHg7XFxuXFx0bGVmdDogLTVweDtcXG5cXHRib3R0b206IC01cHg7XFxufVxcbi51aS1yZXNpemFibGUtbncge1xcblxcdGN1cnNvcjogbnctcmVzaXplO1xcblxcdHdpZHRoOiA5cHg7XFxuXFx0aGVpZ2h0OiA5cHg7XFxuXFx0bGVmdDogLTVweDtcXG5cXHR0b3A6IC01cHg7XFxufVxcbi51aS1yZXNpemFibGUtbmUge1xcblxcdGN1cnNvcjogbmUtcmVzaXplO1xcblxcdHdpZHRoOiA5cHg7XFxuXFx0aGVpZ2h0OiA5cHg7XFxuXFx0cmlnaHQ6IC01cHg7XFxuXFx0dG9wOiAtNXB4O1xcbn1cXG4udWktcHJvZ3Jlc3NiYXIge1xcblxcdGhlaWdodDogMmVtO1xcblxcdHRleHQtYWxpZ246IGxlZnQ7XFxuXFx0b3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnVpLXByb2dyZXNzYmFyIC51aS1wcm9ncmVzc2Jhci12YWx1ZSB7XFxuXFx0bWFyZ2luOiAtMXB4O1xcblxcdGhlaWdodDogMTAwJTtcXG59XFxuLnVpLXByb2dyZXNzYmFyIC51aS1wcm9ncmVzc2Jhci1vdmVybGF5IHtcXG5cXHRiYWNrZ3JvdW5kOiB1cmwoXFxcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEtBQW9BSUFCQUFBQUFQLy8veUgvQzA1RlZGTkRRVkJGTWk0d0F3RUFBQUFoK1FRSkFRQUJBQ3dBQUFBQUtBQW9BQUFDa1l3TnFYcmRDNTJEUzA2YTdNRlpJKzRGSEJDS29EZVdLWHF5bVBxR3F4dkpyWFpiTXg3VHRjK3c5WGdVMkZCM2xPeVFSV0VUMklGR2lVOW0xZnJEVnB4WlpjNmJmSHd2NGMxWVhQNmsxVmR5MjkyRmI2VWt1dkZ0WHB2V1N6QStIeWNYSkhVWGlHWUlpTWcyUjZXNDU5Z25XR2ZITmRqSXFEV1ZxZW1IMmVrcE9ia3BPbHBwV1VxWmlxcjZlZHFxV1FBQUlma0VDUUVBQVFBc0FBQUFBQ2dBS0FBQUFwU01nWm5HZmFxY2cxRTJ1dXpEbW1IVUJSOFFpbDk1aGlQS3FXbjNhcXRMc1MxOHk3RzFTek5lb3dXQkVOdFFkK1QxSmt0UDA1bnpQVGRKWmxSNnZVeE5XV2pWK3ZVV2hXTmtXRnd4bDlWcFpSZWRZY2ZsSU9MYWZhYTI4WGRzSC95bmxjYzF1UFZEWnhRSVIwSzI1K2NJQ0Ntb3FDZTVtR2haT2ZlWVNVaDV5SmNKeXJrWldXcGFSOGRvSjJvNE5ZcTYybEFBQUNINUJBa0JBQUVBTEFBQUFBQW9BQ2dBQUFLVkRJNFl5MjJabklOUk5xb3N3MEJ2N2kxZ3lIVWtGajdvU2FXbHUzb3ZDOEd4TnNvNWZsdXozcUxWaEJWZVQvTHo3WlRIeXhMNWREYWxRV1BWT3NRV3RSbnV3WGFGVGo5alZWaDhwbWE5SmpaNHpZU2o1Wk95bWE3dXVvbGZmaCtJUjVhVzk3Y0h1QlVYS0dLWGxLam4rRGlIV01jWUphaDROMGxZQ01sSk9YaXBHUnI1cWRnb1NUcnFXU3E2V0ZsMnlwb2FVQUFBSWZrRUNRRUFBUUFzQUFBQUFDZ0FLQUFBQXBhRWI2SExnZC9pTzdGTld0Y0ZXZSt1Zk9ER2pSZm9pSjJha1NoYnVlYjB3dEk1MHptMDJwYnZ3ZldFTVdCUTF6S0dsTEloc2tpRVBtOVI2dlJYeFY0WnpXVDJ5SE9HcFdNeW9yYmxLbE5wOEhtSEViL2xDWGpjVzdibXRYUDhYdDIyOU9WV1IxZm9kMmVXcU5mSHVNalhDUGtJR05pbGVPaUltVm1DT0Vtb1NmbjN5WGxKV21vSEdocXA2aWxZdVdZcG1UcUtVZ0FBSWZrRUNRRUFBUUFzQUFBQUFDZ0FLQUFBQXBpRUg2a2I1OGJpUTNGTld0TUZXVzNlTlZjb2p1RkdmcW5acVNlYnVTMDZ3NVY4MC9YMDJwS2U4ekZ3UDZFRldPVDFsREZrOHJHRVJoMVRUTk9vY1E2MUhtNFhtMlZleFVIcHpqeW1WaUhyRmJpRUxzZWZWcm42WEtmbnQyUTlHLytYZGllNDk5WEhkMmc0aDdpb09HaFhHSmJvR0FuWFNCbm9Cd0tZeWZpb3ViWkoySG4wUnVSWmFmbFpPaWw1NlpwNmlpb0tTWHBVQUFBaCtRUUpBUUFCQUN3QUFBQUFLQUFvQUFBQ2tvUVJxUnZueHVJN2tVMWExVVU1YmQ1dG5TZU9aWGhtbjVsV0szcU5UV3ZSZFF4UDhxdmFDKy95YVlRelhPN0JNdmFVRW1KUmQzVHNpTUFnc3dtTllyU2daZFlyVFg2dFNIR1pPNzNlenVBdzJ1eHVRK0JiZVpmTXhzZXhZMzUrL1FlNEoxaW5WMGc0eDNXSHVNaElsMmpYT0tUMlErVlU1ZmdvU1VJNTJWZlp5ZmtKR2toYTZqbVkrYWFZZGlycStsUUFBQ0g1QkFrQkFBRUFMQUFBQUFBb0FDZ0FBQUtXQklLcFllMEwzWU5LVG9xc3dVbHZ6bmlnZDR3aVI0S2hackt0OVVwcWlwNjFpOUUzdk12eFJkSGxiRUZpRVhmazlZQVJZeE9aWkQ2VlEycFV1bkJtdFJYbzFMZjhoTVZWY05sOEphZlYzOGFNMi9GdTVWMTZCbjYzcjZ4dDk3ajA5K01YU0ZpNEJuaUdGYWUzaHpiSDkraFlCemtwdVVoNWFabUh1YW5aT1pnSXV2YkdpTmVvbUNuYXh4YXAydXBhQ1pzcSsxa0FBQ0g1QkFrQkFBRUFMQUFBQUFBb0FDZ0FBQUtYakk4Qnk1emY0a094VFZyWE5WbHYxWDBkOElHWkdLTG5OcFl0bThMcjljcVZldU9TdmZPVzc5RDlhREhpek5oREppZEZaaE55ZEVhaE9hREg2bm9tdEpqcDF0dXRLb05Xa3ZBNkpxZlJWTEhVL1FVZmF1OWwyeDdHNTRkMWZsOTk1eGNJR0FkWHFNZkJOYWRvWXJoSCtNZzJLQmxwVnBibHVDaVhtTW5aMlNoNEdCcUorY2tJT3FxSjZMbUtTbGxabXNvcTZ3cFFBQUFoK1FRSkFRQUJBQ3dBQUFBQUtBQW9BQUFDbFl4L29Mdm94dUpEa1UxYTFZVVpiSjU5blNkMlpYaFdxYlJhMi9nRjhHdTJEWTNpcXM3eXJxK3hCWUVrWXZGU004YVNTT2JFK1pnUmwxQkhGWk5yN3BSQ2F2WjVCVzIxNDJoWTNBTi96V3RzbWYxMnA5WHh4RmwybHBMbjFyc2V6dGZYWmpkSVdJZjJzNWRJdHdqWUtCZ285eWc1cEhnekpYVEVlR2xadWVucHlQbXBHUW9LT1drWW1TcGFTbnFLaWxlSTJGQUFBQ0g1QkFrQkFBRUFMQUFBQUFBb0FDZ0FBQUtWakIrZ3Urakc0a09SVFZyVmhSbHNubjJkSjNabGVGYXB0RnJiK0NYbU85T296ZUw1VmZQOTlIdkFXaHBpVWRjd2twQkgzODI1QXdZZFU4eFRxbExHaHRDb3NBcktNcHZmYTFtTVJhZTlWdldaZmVCMlhmUGtlTG1tMThsVWNCaitwNWRuTjhqWFozWUlHRWhZdU9VbjQ1YW9DRGtwMTZobDVJallKdmpXS2Nub0dRcHF5UGxwT2hyM2FFbGFxcnE1NkJxN1ZBQUFPdz09XFxcIik7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcblxcdGZpbHRlcjogYWxwaGEob3BhY2l0eT0yNSk7IC8qIHN1cHBvcnQ6IElFOCAqL1xcblxcdG9wYWNpdHk6IDAuMjU7XFxufVxcbi51aS1wcm9ncmVzc2Jhci1pbmRldGVybWluYXRlIC51aS1wcm9ncmVzc2Jhci12YWx1ZSB7XFxuXFx0YmFja2dyb3VuZC1pbWFnZTogbm9uZTtcXG59XFxuLnVpLXNlbGVjdGFibGUge1xcblxcdC1tcy10b3VjaC1hY3Rpb246IG5vbmU7XFxuXFx0dG91Y2gtYWN0aW9uOiBub25lO1xcbn1cXG4udWktc2VsZWN0YWJsZS1oZWxwZXIge1xcblxcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG5cXHR6LWluZGV4OiAxMDA7XFxuXFx0Ym9yZGVyOiAxcHggZG90dGVkIGJsYWNrO1xcbn1cXG4udWktc2VsZWN0bWVudS1tZW51IHtcXG5cXHRwYWRkaW5nOiAwO1xcblxcdG1hcmdpbjogMDtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0dG9wOiAwO1xcblxcdGxlZnQ6IDA7XFxuXFx0ZGlzcGxheTogbm9uZTtcXG59XFxuLnVpLXNlbGVjdG1lbnUtbWVudSAudWktbWVudSB7XFxuXFx0b3ZlcmZsb3c6IGF1dG87XFxuXFx0b3ZlcmZsb3cteDogaGlkZGVuO1xcblxcdHBhZGRpbmctYm90dG9tOiAxcHg7XFxufVxcbi51aS1zZWxlY3RtZW51LW1lbnUgLnVpLW1lbnUgLnVpLXNlbGVjdG1lbnUtb3B0Z3JvdXAge1xcblxcdGZvbnQtc2l6ZTogMWVtO1xcblxcdGZvbnQtd2VpZ2h0OiBib2xkO1xcblxcdGxpbmUtaGVpZ2h0OiAxLjU7XFxuXFx0cGFkZGluZzogMnB4IDAuNGVtO1xcblxcdG1hcmdpbjogMC41ZW0gMCAwIDA7XFxuXFx0aGVpZ2h0OiBhdXRvO1xcblxcdGJvcmRlcjogMDtcXG59XFxuLnVpLXNlbGVjdG1lbnUtb3BlbiB7XFxuXFx0ZGlzcGxheTogYmxvY2s7XFxufVxcbi51aS1zZWxlY3RtZW51LXRleHQge1xcblxcdGRpc3BsYXk6IGJsb2NrO1xcblxcdG1hcmdpbi1yaWdodDogMjBweDtcXG5cXHRvdmVyZmxvdzogaGlkZGVuO1xcblxcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbn1cXG4udWktc2VsZWN0bWVudS1idXR0b24udWktYnV0dG9uIHtcXG5cXHR0ZXh0LWFsaWduOiBsZWZ0O1xcblxcdHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuXFx0d2lkdGg6IDE0ZW07XFxufVxcbi51aS1zZWxlY3RtZW51LWljb24udWktaWNvbiB7XFxuXFx0ZmxvYXQ6IHJpZ2h0O1xcblxcdG1hcmdpbi10b3A6IDA7XFxufVxcbi51aS1zbGlkZXIge1xcblxcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cXHR0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG4udWktc2xpZGVyIC51aS1zbGlkZXItaGFuZGxlIHtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0ei1pbmRleDogMjtcXG5cXHR3aWR0aDogMS4yZW07XFxuXFx0aGVpZ2h0OiAxLjJlbTtcXG5cXHRjdXJzb3I6IGRlZmF1bHQ7XFxuXFx0LW1zLXRvdWNoLWFjdGlvbjogbm9uZTtcXG5cXHR0b3VjaC1hY3Rpb246IG5vbmU7XFxufVxcbi51aS1zbGlkZXIgLnVpLXNsaWRlci1yYW5nZSB7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdHotaW5kZXg6IDE7XFxuXFx0Zm9udC1zaXplOiAuN2VtO1xcblxcdGRpc3BsYXk6IGJsb2NrO1xcblxcdGJvcmRlcjogMDtcXG5cXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7XFxufVxcblxcbi8qIHN1cHBvcnQ6IElFOCAtIFNlZSAjNjcyNyAqL1xcbi51aS1zbGlkZXIudWktc3RhdGUtZGlzYWJsZWQgLnVpLXNsaWRlci1oYW5kbGUsXFxuLnVpLXNsaWRlci51aS1zdGF0ZS1kaXNhYmxlZCAudWktc2xpZGVyLXJhbmdlIHtcXG5cXHRmaWx0ZXI6IGluaGVyaXQ7XFxufVxcblxcbi51aS1zbGlkZXItaG9yaXpvbnRhbCB7XFxuXFx0aGVpZ2h0OiAuOGVtO1xcbn1cXG4udWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1oYW5kbGUge1xcblxcdHRvcDogLS4zZW07XFxuXFx0bWFyZ2luLWxlZnQ6IC0uNmVtO1xcbn1cXG4udWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1yYW5nZSB7XFxuXFx0dG9wOiAwO1xcblxcdGhlaWdodDogMTAwJTtcXG59XFxuLnVpLXNsaWRlci1ob3Jpem9udGFsIC51aS1zbGlkZXItcmFuZ2UtbWluIHtcXG5cXHRsZWZ0OiAwO1xcbn1cXG4udWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1yYW5nZS1tYXgge1xcblxcdHJpZ2h0OiAwO1xcbn1cXG5cXG4udWktc2xpZGVyLXZlcnRpY2FsIHtcXG5cXHR3aWR0aDogLjhlbTtcXG5cXHRoZWlnaHQ6IDEwMHB4O1xcbn1cXG4udWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItaGFuZGxlIHtcXG5cXHRsZWZ0OiAtLjNlbTtcXG5cXHRtYXJnaW4tbGVmdDogMDtcXG5cXHRtYXJnaW4tYm90dG9tOiAtLjZlbTtcXG59XFxuLnVpLXNsaWRlci12ZXJ0aWNhbCAudWktc2xpZGVyLXJhbmdlIHtcXG5cXHRsZWZ0OiAwO1xcblxcdHdpZHRoOiAxMDAlO1xcbn1cXG4udWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItcmFuZ2UtbWluIHtcXG5cXHRib3R0b206IDA7XFxufVxcbi51aS1zbGlkZXItdmVydGljYWwgLnVpLXNsaWRlci1yYW5nZS1tYXgge1xcblxcdHRvcDogMDtcXG59XFxuLnVpLXNvcnRhYmxlLWhhbmRsZSB7XFxuXFx0LW1zLXRvdWNoLWFjdGlvbjogbm9uZTtcXG5cXHR0b3VjaC1hY3Rpb246IG5vbmU7XFxufVxcbi51aS1zcGlubmVyIHtcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7XFxuXFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xcblxcdG92ZXJmbG93OiBoaWRkZW47XFxuXFx0cGFkZGluZzogMDtcXG5cXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4udWktc3Bpbm5lci1pbnB1dCB7XFxuXFx0Ym9yZGVyOiBub25lO1xcblxcdGJhY2tncm91bmQ6IG5vbmU7XFxuXFx0Y29sb3I6IGluaGVyaXQ7XFxuXFx0cGFkZGluZzogLjIyMmVtIDA7XFxuXFx0bWFyZ2luOiAuMmVtIDA7XFxuXFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG5cXHRtYXJnaW4tbGVmdDogLjRlbTtcXG5cXHRtYXJnaW4tcmlnaHQ6IDJlbTtcXG59XFxuLnVpLXNwaW5uZXItYnV0dG9uIHtcXG5cXHR3aWR0aDogMS42ZW07XFxuXFx0aGVpZ2h0OiA1MCU7XFxuXFx0Zm9udC1zaXplOiAuNWVtO1xcblxcdHBhZGRpbmc6IDA7XFxuXFx0bWFyZ2luOiAwO1xcblxcdHRleHQtYWxpZ246IGNlbnRlcjtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0Y3Vyc29yOiBkZWZhdWx0O1xcblxcdGRpc3BsYXk6IGJsb2NrO1xcblxcdG92ZXJmbG93OiBoaWRkZW47XFxuXFx0cmlnaHQ6IDA7XFxufVxcbi8qIG1vcmUgc3BlY2lmaWNpdHkgcmVxdWlyZWQgaGVyZSB0byBvdmVycmlkZSBkZWZhdWx0IGJvcmRlcnMgKi9cXG4udWktc3Bpbm5lciBhLnVpLXNwaW5uZXItYnV0dG9uIHtcXG5cXHRib3JkZXItdG9wLXN0eWxlOiBub25lO1xcblxcdGJvcmRlci1ib3R0b20tc3R5bGU6IG5vbmU7XFxuXFx0Ym9yZGVyLXJpZ2h0LXN0eWxlOiBub25lO1xcbn1cXG4udWktc3Bpbm5lci11cCB7XFxuXFx0dG9wOiAwO1xcbn1cXG4udWktc3Bpbm5lci1kb3duIHtcXG5cXHRib3R0b206IDA7XFxufVxcbi51aS10YWJzIHtcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7LyogcG9zaXRpb246IHJlbGF0aXZlIHByZXZlbnRzIElFIHNjcm9sbCBidWcgKGVsZW1lbnQgd2l0aCBwb3NpdGlvbjogcmVsYXRpdmUgaW5zaWRlIGNvbnRhaW5lciB3aXRoIG92ZXJmbG93OiBhdXRvIGFwcGVhciBhcyBcXFwiZml4ZWRcXFwiKSAqL1xcblxcdHBhZGRpbmc6IC4yZW07XFxufVxcbi51aS10YWJzIC51aS10YWJzLW5hdiB7XFxuXFx0bWFyZ2luOiAwO1xcblxcdHBhZGRpbmc6IC4yZW0gLjJlbSAwO1xcbn1cXG4udWktdGFicyAudWktdGFicy1uYXYgbGkge1xcblxcdGxpc3Qtc3R5bGU6IG5vbmU7XFxuXFx0ZmxvYXQ6IGxlZnQ7XFxuXFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblxcdHRvcDogMDtcXG5cXHRtYXJnaW46IDFweCAuMmVtIDAgMDtcXG5cXHRib3JkZXItYm90dG9tLXdpZHRoOiAwO1xcblxcdHBhZGRpbmc6IDA7XFxuXFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcXG59XFxuLnVpLXRhYnMgLnVpLXRhYnMtbmF2IC51aS10YWJzLWFuY2hvciB7XFxuXFx0ZmxvYXQ6IGxlZnQ7XFxuXFx0cGFkZGluZzogLjVlbSAxZW07XFxuXFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG4udWktdGFicyAudWktdGFicy1uYXYgbGkudWktdGFicy1hY3RpdmUge1xcblxcdG1hcmdpbi1ib3R0b206IC0xcHg7XFxuXFx0cGFkZGluZy1ib3R0b206IDFweDtcXG59XFxuLnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpLnVpLXRhYnMtYWN0aXZlIC51aS10YWJzLWFuY2hvcixcXG4udWktdGFicyAudWktdGFicy1uYXYgbGkudWktc3RhdGUtZGlzYWJsZWQgLnVpLXRhYnMtYW5jaG9yLFxcbi51aS10YWJzIC51aS10YWJzLW5hdiBsaS51aS10YWJzLWxvYWRpbmcgLnVpLXRhYnMtYW5jaG9yIHtcXG5cXHRjdXJzb3I6IHRleHQ7XFxufVxcbi51aS10YWJzLWNvbGxhcHNpYmxlIC51aS10YWJzLW5hdiBsaS51aS10YWJzLWFjdGl2ZSAudWktdGFicy1hbmNob3Ige1xcblxcdGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnVpLXRhYnMgLnVpLXRhYnMtcGFuZWwge1xcblxcdGRpc3BsYXk6IGJsb2NrO1xcblxcdGJvcmRlci13aWR0aDogMDtcXG5cXHRwYWRkaW5nOiAxZW0gMS40ZW07XFxuXFx0YmFja2dyb3VuZDogbm9uZTtcXG59XFxuLnVpLXRvb2x0aXAge1xcblxcdHBhZGRpbmc6IDhweDtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0ei1pbmRleDogOTk5OTtcXG5cXHRtYXgtd2lkdGg6IDMwMHB4O1xcbn1cXG5ib2R5IC51aS10b29sdGlwIHtcXG5cXHRib3JkZXItd2lkdGg6IDJweDtcXG59XFxuXFxuLyogQ29tcG9uZW50IGNvbnRhaW5lcnNcXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cXG4udWktd2lkZ2V0IHtcXG5cXHRmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7XFxuXFx0Zm9udC1zaXplOiAxZW07XFxufVxcbi51aS13aWRnZXQgLnVpLXdpZGdldCB7XFxuXFx0Zm9udC1zaXplOiAxZW07XFxufVxcbi51aS13aWRnZXQgaW5wdXQsXFxuLnVpLXdpZGdldCBzZWxlY3QsXFxuLnVpLXdpZGdldCB0ZXh0YXJlYSxcXG4udWktd2lkZ2V0IGJ1dHRvbiB7XFxuXFx0Zm9udC1mYW1pbHk6IEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO1xcblxcdGZvbnQtc2l6ZTogMWVtO1xcbn1cXG4udWktd2lkZ2V0LnVpLXdpZGdldC1jb250ZW50IHtcXG5cXHRib3JkZXI6IDFweCBzb2xpZCAjYzVjNWM1O1xcbn1cXG4udWktd2lkZ2V0LWNvbnRlbnQge1xcblxcdGJvcmRlcjogMXB4IHNvbGlkICNkZGRkZGQ7XFxuXFx0YmFja2dyb3VuZDogI2ZmZmZmZjtcXG5cXHRjb2xvcjogIzMzMzMzMztcXG59XFxuLnVpLXdpZGdldC1jb250ZW50IGEge1xcblxcdGNvbG9yOiAjMzMzMzMzO1xcbn1cXG4udWktd2lkZ2V0LWhlYWRlciB7XFxuXFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZGRkZDtcXG5cXHRiYWNrZ3JvdW5kOiAjZTllOWU5O1xcblxcdGNvbG9yOiAjMzMzMzMzO1xcblxcdGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG4udWktd2lkZ2V0LWhlYWRlciBhIHtcXG5cXHRjb2xvcjogIzMzMzMzMztcXG59XFxuXFxuLyogSW50ZXJhY3Rpb24gc3RhdGVzXFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuLnVpLXN0YXRlLWRlZmF1bHQsXFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kZWZhdWx0LFxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1kZWZhdWx0LFxcbi51aS1idXR0b24sXFxuXFxuLyogV2UgdXNlIGh0bWwgaGVyZSBiZWNhdXNlIHdlIG5lZWQgYSBncmVhdGVyIHNwZWNpZmljaXR5IHRvIG1ha2Ugc3VyZSBkaXNhYmxlZFxcbndvcmtzIHByb3Blcmx5IHdoZW4gY2xpY2tlZCBvciBob3ZlcmVkICovXFxuaHRtbCAudWktYnV0dG9uLnVpLXN0YXRlLWRpc2FibGVkOmhvdmVyLFxcbmh0bWwgLnVpLWJ1dHRvbi51aS1zdGF0ZS1kaXNhYmxlZDphY3RpdmUge1xcblxcdGJvcmRlcjogMXB4IHNvbGlkICNjNWM1YzU7XFxuXFx0YmFja2dyb3VuZDogI2Y2ZjZmNjtcXG5cXHRmb250LXdlaWdodDogbm9ybWFsO1xcblxcdGNvbG9yOiAjNDU0NTQ1O1xcbn1cXG4udWktc3RhdGUtZGVmYXVsdCBhLFxcbi51aS1zdGF0ZS1kZWZhdWx0IGE6bGluayxcXG4udWktc3RhdGUtZGVmYXVsdCBhOnZpc2l0ZWQsXFxuYS51aS1idXR0b24sXFxuYTpsaW5rLnVpLWJ1dHRvbixcXG5hOnZpc2l0ZWQudWktYnV0dG9uLFxcbi51aS1idXR0b24ge1xcblxcdGNvbG9yOiAjNDU0NTQ1O1xcblxcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuLnVpLXN0YXRlLWhvdmVyLFxcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaG92ZXIsXFxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhvdmVyLFxcbi51aS1zdGF0ZS1mb2N1cyxcXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWZvY3VzLFxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1mb2N1cyxcXG4udWktYnV0dG9uOmhvdmVyLFxcbi51aS1idXR0b246Zm9jdXMge1xcblxcdGJvcmRlcjogMXB4IHNvbGlkICNjY2NjY2M7XFxuXFx0YmFja2dyb3VuZDogI2VkZWRlZDtcXG5cXHRmb250LXdlaWdodDogbm9ybWFsO1xcblxcdGNvbG9yOiAjMmIyYjJiO1xcbn1cXG4udWktc3RhdGUtaG92ZXIgYSxcXG4udWktc3RhdGUtaG92ZXIgYTpob3ZlcixcXG4udWktc3RhdGUtaG92ZXIgYTpsaW5rLFxcbi51aS1zdGF0ZS1ob3ZlciBhOnZpc2l0ZWQsXFxuLnVpLXN0YXRlLWZvY3VzIGEsXFxuLnVpLXN0YXRlLWZvY3VzIGE6aG92ZXIsXFxuLnVpLXN0YXRlLWZvY3VzIGE6bGluayxcXG4udWktc3RhdGUtZm9jdXMgYTp2aXNpdGVkLFxcbmEudWktYnV0dG9uOmhvdmVyLFxcbmEudWktYnV0dG9uOmZvY3VzIHtcXG5cXHRjb2xvcjogIzJiMmIyYjtcXG5cXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi51aS12aXN1YWwtZm9jdXMge1xcblxcdGJveC1zaGFkb3c6IDAgMCAzcHggMXB4IHJnYig5NCwgMTU4LCAyMTQpO1xcbn1cXG4udWktc3RhdGUtYWN0aXZlLFxcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtYWN0aXZlLFxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1hY3RpdmUsXFxuYS51aS1idXR0b246YWN0aXZlLFxcbi51aS1idXR0b246YWN0aXZlLFxcbi51aS1idXR0b24udWktc3RhdGUtYWN0aXZlOmhvdmVyIHtcXG5cXHRib3JkZXI6IDFweCBzb2xpZCAjMDAzZWZmO1xcblxcdGJhY2tncm91bmQ6ICMwMDdmZmY7XFxuXFx0Zm9udC13ZWlnaHQ6IG5vcm1hbDtcXG5cXHRjb2xvcjogI2ZmZmZmZjtcXG59XFxuLnVpLWljb24tYmFja2dyb3VuZCxcXG4udWktc3RhdGUtYWN0aXZlIC51aS1pY29uLWJhY2tncm91bmQge1xcblxcdGJvcmRlcjogIzAwM2VmZjtcXG5cXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xcbn1cXG4udWktc3RhdGUtYWN0aXZlIGEsXFxuLnVpLXN0YXRlLWFjdGl2ZSBhOmxpbmssXFxuLnVpLXN0YXRlLWFjdGl2ZSBhOnZpc2l0ZWQge1xcblxcdGNvbG9yOiAjZmZmZmZmO1xcblxcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLyogSW50ZXJhY3Rpb24gQ3Vlc1xcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcbi51aS1zdGF0ZS1oaWdobGlnaHQsXFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1oaWdobGlnaHQsXFxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodCB7XFxuXFx0Ym9yZGVyOiAxcHggc29saWQgI2RhZDU1ZTtcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmYTkwO1xcblxcdGNvbG9yOiAjNzc3NjIwO1xcbn1cXG4udWktc3RhdGUtY2hlY2tlZCB7XFxuXFx0Ym9yZGVyOiAxcHggc29saWQgI2RhZDU1ZTtcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmYTkwO1xcbn1cXG4udWktc3RhdGUtaGlnaGxpZ2h0IGEsXFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1oaWdobGlnaHQgYSxcXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaGlnaGxpZ2h0IGEge1xcblxcdGNvbG9yOiAjNzc3NjIwO1xcbn1cXG4udWktc3RhdGUtZXJyb3IsXFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvcixcXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3Ige1xcblxcdGJvcmRlcjogMXB4IHNvbGlkICNmMWE4OTk7XFxuXFx0YmFja2dyb3VuZDogI2ZkZGZkZjtcXG5cXHRjb2xvcjogIzVmM2YzZjtcXG59XFxuLnVpLXN0YXRlLWVycm9yIGEsXFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciBhLFxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvciBhIHtcXG5cXHRjb2xvcjogIzVmM2YzZjtcXG59XFxuLnVpLXN0YXRlLWVycm9yLXRleHQsXFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvci10ZXh0LFxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvci10ZXh0IHtcXG5cXHRjb2xvcjogIzVmM2YzZjtcXG59XFxuLnVpLXByaW9yaXR5LXByaW1hcnksXFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1wcmltYXJ5LFxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1wcmlvcml0eS1wcmltYXJ5IHtcXG5cXHRmb250LXdlaWdodDogYm9sZDtcXG59XFxuLnVpLXByaW9yaXR5LXNlY29uZGFyeSxcXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXByaW9yaXR5LXNlY29uZGFyeSxcXG4udWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktc2Vjb25kYXJ5IHtcXG5cXHRvcGFjaXR5OiAuNztcXG5cXHRmaWx0ZXI6QWxwaGEoT3BhY2l0eT03MCk7IC8qIHN1cHBvcnQ6IElFOCAqL1xcblxcdGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxufVxcbi51aS1zdGF0ZS1kaXNhYmxlZCxcXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWRpc2FibGVkLFxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1kaXNhYmxlZCB7XFxuXFx0b3BhY2l0eTogLjM1O1xcblxcdGZpbHRlcjpBbHBoYShPcGFjaXR5PTM1KTsgLyogc3VwcG9ydDogSUU4ICovXFxuXFx0YmFja2dyb3VuZC1pbWFnZTogbm9uZTtcXG59XFxuLnVpLXN0YXRlLWRpc2FibGVkIC51aS1pY29uIHtcXG5cXHRmaWx0ZXI6QWxwaGEoT3BhY2l0eT0zNSk7IC8qIHN1cHBvcnQ6IElFOCAtIFNlZSAjNjA1OSAqL1xcbn1cXG5cXG4vKiBJY29uc1xcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcblxcbi8qIHN0YXRlcyBhbmQgaW1hZ2VzICovXFxuLnVpLWljb24ge1xcblxcdHdpZHRoOiAxNnB4O1xcblxcdGhlaWdodDogMTZweDtcXG59XFxuLnVpLWljb24sXFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1pY29uIHtcXG5cXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fICsgXCIpO1xcbn1cXG4udWktd2lkZ2V0LWhlYWRlciAudWktaWNvbiB7XFxuXFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMF9fXyArIFwiKTtcXG59XFxuLnVpLXN0YXRlLWhvdmVyIC51aS1pY29uLFxcbi51aS1zdGF0ZS1mb2N1cyAudWktaWNvbixcXG4udWktYnV0dG9uOmhvdmVyIC51aS1pY29uLFxcbi51aS1idXR0b246Zm9jdXMgLnVpLWljb24ge1xcblxcdGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18gKyBcIik7XFxufVxcbi51aS1zdGF0ZS1hY3RpdmUgLnVpLWljb24sXFxuLnVpLWJ1dHRvbjphY3RpdmUgLnVpLWljb24ge1xcblxcdGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzJfX18gKyBcIik7XFxufVxcbi51aS1zdGF0ZS1oaWdobGlnaHQgLnVpLWljb24sXFxuLnVpLWJ1dHRvbiAudWktc3RhdGUtaGlnaGxpZ2h0LnVpLWljb24ge1xcblxcdGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzNfX18gKyBcIik7XFxufVxcbi51aS1zdGF0ZS1lcnJvciAudWktaWNvbixcXG4udWktc3RhdGUtZXJyb3ItdGV4dCAudWktaWNvbiB7XFxuXFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNF9fXyArIFwiKTtcXG59XFxuLnVpLWJ1dHRvbiAudWktaWNvbiB7XFxuXFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNV9fXyArIFwiKTtcXG59XFxuXFxuLyogcG9zaXRpb25pbmcgKi9cXG4udWktaWNvbi1ibGFuayB7IGJhY2tncm91bmQtcG9zaXRpb246IDE2cHggMTZweDsgfVxcbi51aS1pY29uLWNhcmV0LTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsgfVxcbi51aS1pY29uLWNhcmV0LTEtbmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAwOyB9XFxuLnVpLWljb24tY2FyZXQtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggMDsgfVxcbi51aS1pY29uLWNhcmV0LTEtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAwOyB9XFxuLnVpLWljb24tY2FyZXQtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY1cHggMDsgfVxcbi51aS1pY29uLWNhcmV0LTEtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAwOyB9XFxuLnVpLWljb24tY2FyZXQtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggMDsgfVxcbi51aS1pY29uLWNhcmV0LTEtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggMDsgfVxcbi51aS1pY29uLWNhcmV0LTItbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IDA7IH1cXG4udWktaWNvbi1jYXJldC0yLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAwOyB9XFxuLnVpLWljb24tdHJpYW5nbGUtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTZweDsgfVxcbi51aS1pY29uLXRyaWFuZ2xlLTEtbmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTZweDsgfVxcbi51aS1pY29uLXRyaWFuZ2xlLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNnB4OyB9XFxuLnVpLWljb24tdHJpYW5nbGUtMS1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNnB4OyB9XFxuLnVpLWljb24tdHJpYW5nbGUtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY1cHggLTE2cHg7IH1cXG4udWktaWNvbi10cmlhbmdsZS0xLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE2cHg7IH1cXG4udWktaWNvbi10cmlhbmdsZS0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTZweDsgfVxcbi51aS1pY29uLXRyaWFuZ2xlLTEtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE2cHg7IH1cXG4udWktaWNvbi10cmlhbmdsZS0yLW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTZweDsgfVxcbi51aS1pY29uLXRyaWFuZ2xlLTItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNnB4OyB9XFxuLnVpLWljb24tYXJyb3ctMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMzJweDsgfVxcbi51aS1pY29uLWFycm93LTEtbmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMzJweDsgfVxcbi51aS1pY29uLWFycm93LTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0zMnB4OyB9XFxuLnVpLWljb24tYXJyb3ctMS1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0zMnB4OyB9XFxuLnVpLWljb24tYXJyb3ctMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY1cHggLTMycHg7IH1cXG4udWktaWNvbi1hcnJvdy0xLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTMycHg7IH1cXG4udWktaWNvbi1hcnJvdy0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMzJweDsgfVxcbi51aS1pY29uLWFycm93LTEtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTMycHg7IH1cXG4udWktaWNvbi1hcnJvdy0yLW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMzJweDsgfVxcbi51aS1pY29uLWFycm93LTItbmUtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTMycHg7IH1cXG4udWktaWNvbi1hcnJvdy0yLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMzJweDsgfVxcbi51aS1pY29uLWFycm93LTItc2UtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTMycHg7IH1cXG4udWktaWNvbi1hcnJvd3N0b3AtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0zMnB4OyB9XFxuLnVpLWljb24tYXJyb3dzdG9wLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMzJweDsgfVxcbi51aS1pY29uLWFycm93c3RvcC0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTMycHg7IH1cXG4udWktaWNvbi1hcnJvd3N0b3AtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0zMnB4OyB9XFxuLnVpLWljb24tYXJyb3d0aGljay0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxcHggLTQ4cHg7IH1cXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtbmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtNDhweDsgfVxcbi51aS1pY29uLWFycm93dGhpY2stMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTQ4cHg7IH1cXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtNDhweDsgfVxcbi51aS1pY29uLWFycm93dGhpY2stMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTQ4cHg7IH1cXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtNDhweDsgfVxcbi51aS1pY29uLWFycm93dGhpY2stMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTQ4cHg7IH1cXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTQ4cHg7IH1cXG4udWktaWNvbi1hcnJvd3RoaWNrLTItbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC00OHB4OyB9XFxuLnVpLWljb24tYXJyb3d0aGljay0yLW5lLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC00OHB4OyB9XFxuLnVpLWljb24tYXJyb3d0aGljay0yLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtNDhweDsgfVxcbi51aS1pY29uLWFycm93dGhpY2stMi1zZS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtNDhweDsgfVxcbi51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtNDhweDsgfVxcbi51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtNDhweDsgfVxcbi51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtNDhweDsgfVxcbi51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtNDhweDsgfVxcbi51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNjRweDsgfVxcbi51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTY0cHg7IH1cXG4udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC02NHB4OyB9XFxuLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtNjRweDsgfVxcbi51aS1pY29uLWFycm93cmV0dXJuLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC02NHB4OyB9XFxuLnVpLWljb24tYXJyb3dyZXR1cm4tMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTY0cHg7IH1cXG4udWktaWNvbi1hcnJvd3JldHVybi0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtNjRweDsgfVxcbi51aS1pY29uLWFycm93cmV0dXJuLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtNjRweDsgfVxcbi51aS1pY29uLWFycm93cmVmcmVzaC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTY0cHg7IH1cXG4udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC02NHB4OyB9XFxuLnVpLWljb24tYXJyb3dyZWZyZXNoLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtNjRweDsgfVxcbi51aS1pY29uLWFycm93cmVmcmVzaC0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTY0cHg7IH1cXG4udWktaWNvbi1hcnJvdy00IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtODBweDsgfVxcbi51aS1pY29uLWFycm93LTQtZGlhZyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC04MHB4OyB9XFxuLnVpLWljb24tZXh0bGluayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC04MHB4OyB9XFxuLnVpLWljb24tbmV3d2luIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTgwcHg7IH1cXG4udWktaWNvbi1yZWZyZXNoIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTgwcHg7IH1cXG4udWktaWNvbi1zaHVmZmxlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTgwcHg7IH1cXG4udWktaWNvbi10cmFuc2Zlci1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtODBweDsgfVxcbi51aS1pY29uLXRyYW5zZmVydGhpY2stZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC04MHB4OyB9XFxuLnVpLWljb24tZm9sZGVyLWNvbGxhcHNlZCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTk2cHg7IH1cXG4udWktaWNvbi1mb2xkZXItb3BlbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC05NnB4OyB9XFxuLnVpLWljb24tZG9jdW1lbnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtOTZweDsgfVxcbi51aS1pY29uLWRvY3VtZW50LWIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtOTZweDsgfVxcbi51aS1pY29uLW5vdGUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtOTZweDsgfVxcbi51aS1pY29uLW1haWwtY2xvc2VkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTk2cHg7IH1cXG4udWktaWNvbi1tYWlsLW9wZW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtOTZweDsgfVxcbi51aS1pY29uLXN1aXRjYXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC05NnB4OyB9XFxuLnVpLWljb24tY29tbWVudCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtOTZweDsgfVxcbi51aS1pY29uLXBlcnNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtOTZweDsgfVxcbi51aS1pY29uLXByaW50IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC05NnB4OyB9XFxuLnVpLWljb24tdHJhc2ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTk2cHg7IH1cXG4udWktaWNvbi1sb2NrZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTk2cHg7IH1cXG4udWktaWNvbi11bmxvY2tlZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtOTZweDsgfVxcbi51aS1pY29uLWJvb2ttYXJrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC05NnB4OyB9XFxuLnVpLWljb24tdGFnIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC05NnB4OyB9XFxuLnVpLWljb24taG9tZSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTExMnB4OyB9XFxuLnVpLWljb24tZmxhZyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xMTJweDsgfVxcbi51aS1pY29uLWNhbGVuZGFyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTExMnB4OyB9XFxuLnVpLWljb24tY2FydCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xMTJweDsgfVxcbi51aS1pY29uLXBlbmNpbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xMTJweDsgfVxcbi51aS1pY29uLWNsb2NrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTExMnB4OyB9XFxuLnVpLWljb24tZGlzayB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xMTJweDsgfVxcbi51aS1pY29uLWNhbGN1bGF0b3IgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTExMnB4OyB9XFxuLnVpLWljb24tem9vbWluIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMTJweDsgfVxcbi51aS1pY29uLXpvb21vdXQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTExMnB4OyB9XFxuLnVpLWljb24tc2VhcmNoIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xMTJweDsgfVxcbi51aS1pY29uLXdyZW5jaCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTEycHg7IH1cXG4udWktaWNvbi1nZWFyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xMTJweDsgfVxcbi51aS1pY29uLWhlYXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xMTJweDsgfVxcbi51aS1pY29uLXN0YXIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTExMnB4OyB9XFxuLnVpLWljb24tbGluayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMTEycHg7IH1cXG4udWktaWNvbi1jYW5jZWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMjhweDsgfVxcbi51aS1pY29uLXBsdXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTI4cHg7IH1cXG4udWktaWNvbi1wbHVzdGhpY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTI4cHg7IH1cXG4udWktaWNvbi1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xMjhweDsgfVxcbi51aS1pY29uLW1pbnVzdGhpY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTI4cHg7IH1cXG4udWktaWNvbi1jbG9zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xMjhweDsgfVxcbi51aS1pY29uLWNsb3NldGhpY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTI4cHg7IH1cXG4udWktaWNvbi1rZXkgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTEyOHB4OyB9XFxuLnVpLWljb24tbGlnaHRidWxiIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMjhweDsgfVxcbi51aS1pY29uLXNjaXNzb3JzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xMjhweDsgfVxcbi51aS1pY29uLWNsaXBib2FyZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTI4cHg7IH1cXG4udWktaWNvbi1jb3B5IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xMjhweDsgfVxcbi51aS1pY29uLWNvbnRhY3QgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTEyOHB4OyB9XFxuLnVpLWljb24taW1hZ2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTEyOHB4OyB9XFxuLnVpLWljb24tdmlkZW8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTEyOHB4OyB9XFxuLnVpLWljb24tc2NyaXB0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0xMjhweDsgfVxcbi51aS1pY29uLWFsZXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQ0cHg7IH1cXG4udWktaWNvbi1pbmZvIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE0NHB4OyB9XFxuLnVpLWljb24tbm90aWNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE0NHB4OyB9XFxuLnVpLWljb24taGVscCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNDRweDsgfVxcbi51aS1pY29uLWNoZWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE0NHB4OyB9XFxuLnVpLWljb24tYnVsbGV0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE0NHB4OyB9XFxuLnVpLWljb24tcmFkaW8tb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTQ0cHg7IH1cXG4udWktaWNvbi1yYWRpby1vZmYgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE0NHB4OyB9XFxuLnVpLWljb24tcGluLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE0NHB4OyB9XFxuLnVpLWljb24tcGluLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE0NHB4OyB9XFxuLnVpLWljb24tcGxheSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE2MHB4OyB9XFxuLnVpLWljb24tcGF1c2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTYwcHg7IH1cXG4udWktaWNvbi1zZWVrLW5leHQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTYwcHg7IH1cXG4udWktaWNvbi1zZWVrLXByZXYgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTYwcHg7IH1cXG4udWktaWNvbi1zZWVrLWVuZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNjBweDsgfVxcbi51aS1pY29uLXNlZWstc3RhcnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTYwcHg7IH1cXG4vKiB1aS1pY29uLXNlZWstZmlyc3QgaXMgZGVwcmVjYXRlZCwgdXNlIHVpLWljb24tc2Vlay1zdGFydCBpbnN0ZWFkICovXFxuLnVpLWljb24tc2Vlay1maXJzdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNjBweDsgfVxcbi51aS1pY29uLXN0b3AgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTYwcHg7IH1cXG4udWktaWNvbi1lamVjdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTYwcHg7IH1cXG4udWktaWNvbi12b2x1bWUtb2ZmIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNjBweDsgfVxcbi51aS1pY29uLXZvbHVtZS1vbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTYwcHg7IH1cXG4udWktaWNvbi1wb3dlciB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE3NnB4OyB9XFxuLnVpLWljb24tc2lnbmFsLWRpYWcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTc2cHg7IH1cXG4udWktaWNvbi1zaWduYWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTc2cHg7IH1cXG4udWktaWNvbi1iYXR0ZXJ5LTAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTc2cHg7IH1cXG4udWktaWNvbi1iYXR0ZXJ5LTEgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTc2cHg7IH1cXG4udWktaWNvbi1iYXR0ZXJ5LTIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTc2cHg7IH1cXG4udWktaWNvbi1iYXR0ZXJ5LTMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTc2cHg7IH1cXG4udWktaWNvbi1jaXJjbGUtcGx1cyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE5MnB4OyB9XFxuLnVpLWljb24tY2lyY2xlLW1pbnVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE5MnB4OyB9XFxuLnVpLWljb24tY2lyY2xlLWNsb3NlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE5MnB4OyB9XFxuLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTkycHg7IH1cXG4udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xOTJweDsgfVxcbi51aS1pY29uLWNpcmNsZS10cmlhbmdsZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE5MnB4OyB9XFxuLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTkycHg7IH1cXG4udWktaWNvbi1jaXJjbGUtYXJyb3ctZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTkycHg7IH1cXG4udWktaWNvbi1jaXJjbGUtYXJyb3ctcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTkycHg7IH1cXG4udWktaWNvbi1jaXJjbGUtYXJyb3ctdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTkycHg7IH1cXG4udWktaWNvbi1jaXJjbGUtYXJyb3ctbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTkycHg7IH1cXG4udWktaWNvbi1jaXJjbGUtem9vbWluIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xOTJweDsgfVxcbi51aS1pY29uLWNpcmNsZS16b29tb3V0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xOTJweDsgfVxcbi51aS1pY29uLWNpcmNsZS1jaGVjayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTkycHg7IH1cXG4udWktaWNvbi1jaXJjbGVzbWFsbC1wbHVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjA4cHg7IH1cXG4udWktaWNvbi1jaXJjbGVzbWFsbC1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMDhweDsgfVxcbi51aS1pY29uLWNpcmNsZXNtYWxsLWNsb3NlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTIwOHB4OyB9XFxuLnVpLWljb24tc3F1YXJlc21hbGwtcGx1cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0yMDhweDsgfVxcbi51aS1pY29uLXNxdWFyZXNtYWxsLW1pbnVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTIwOHB4OyB9XFxuLnVpLWljb24tc3F1YXJlc21hbGwtY2xvc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMjA4cHg7IH1cXG4udWktaWNvbi1ncmlwLWRvdHRlZC12ZXJ0aWNhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTIyNHB4OyB9XFxuLnVpLWljb24tZ3JpcC1kb3R0ZWQtaG9yaXpvbnRhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMjRweDsgfVxcbi51aS1pY29uLWdyaXAtc29saWQtdmVydGljYWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMjI0cHg7IH1cXG4udWktaWNvbi1ncmlwLXNvbGlkLWhvcml6b250YWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMjI0cHg7IH1cXG4udWktaWNvbi1ncmlwc21hbGwtZGlhZ29uYWwtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMjI0cHg7IH1cXG4udWktaWNvbi1ncmlwLWRpYWdvbmFsLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTIyNHB4OyB9XFxuXFxuXFxuLyogTWlzYyB2aXN1YWxzXFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuXFxuLyogQ29ybmVyIHJhZGl1cyAqL1xcbi51aS1jb3JuZXItYWxsLFxcbi51aS1jb3JuZXItdG9wLFxcbi51aS1jb3JuZXItbGVmdCxcXG4udWktY29ybmVyLXRsIHtcXG5cXHRib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XFxufVxcbi51aS1jb3JuZXItYWxsLFxcbi51aS1jb3JuZXItdG9wLFxcbi51aS1jb3JuZXItcmlnaHQsXFxuLnVpLWNvcm5lci10ciB7XFxuXFx0Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDtcXG59XFxuLnVpLWNvcm5lci1hbGwsXFxuLnVpLWNvcm5lci1ib3R0b20sXFxuLnVpLWNvcm5lci1sZWZ0LFxcbi51aS1jb3JuZXItYmwge1xcblxcdGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDtcXG59XFxuLnVpLWNvcm5lci1hbGwsXFxuLnVpLWNvcm5lci1ib3R0b20sXFxuLnVpLWNvcm5lci1yaWdodCxcXG4udWktY29ybmVyLWJyIHtcXG5cXHRib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4O1xcbn1cXG5cXG4vKiBPdmVybGF5cyAqL1xcbi51aS13aWRnZXQtb3ZlcmxheSB7XFxuXFx0YmFja2dyb3VuZDogI2FhYWFhYTtcXG5cXHRvcGFjaXR5OiAuMDAzO1xcblxcdGZpbHRlcjogQWxwaGEoT3BhY2l0eT0uMyk7IC8qIHN1cHBvcnQ6IElFOCAqL1xcbn1cXG4udWktd2lkZ2V0LXNoYWRvdyB7XFxuXFx0LXdlYmtpdC1ib3gtc2hhZG93OiAwcHggMHB4IDVweCAjNjY2NjY2O1xcblxcdGJveC1zaGFkb3c6IDBweCAwcHggNXB4ICM2NjY2NjY7XFxufVxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9qcXVlcnktdWktZGlzdC9qcXVlcnktdWkuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBOzs7O29FQUlvRTs7QUFFcEU7bUNBQ21DO0FBQ25DO0NBQ0MsYUFBYTtBQUNkO0FBQ0E7Q0FDQyxTQUFTO0NBQ1QsbUJBQW1CO0NBQ25CLFdBQVc7Q0FDWCxZQUFZO0NBQ1osZ0JBQWdCO0NBQ2hCLFVBQVU7Q0FDVixrQkFBa0I7Q0FDbEIsVUFBVTtBQUNYO0FBQ0E7Q0FDQyxTQUFTO0NBQ1QsVUFBVTtDQUNWLFNBQVM7Q0FDVCxV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QWlDLEVBQUU7QUFDaEUsNEJBQTRCLGlDQUFpQyxFQUFFO0FBQy9ELDZCQUE2QixpQ0FBaUMsRUFBRTtBQUNoRSw2QkFBNkIsaUNBQWlDLEVBQUU7QUFDaEUsZ0NBQWdDLDZCQUE2QixFQUFFO0FBQy9ELGtDQUFrQyxpQ0FBaUMsRUFBRTtBQUNyRSwrQkFBK0IsaUNBQWlDLEVBQUU7QUFDbEUsaUNBQWlDLGlDQUFpQyxFQUFFO0FBQ3BFLGlDQUFpQyxpQ0FBaUMsRUFBRTtBQUNwRSw0QkFBNEIsaUNBQWlDLEVBQUU7OztBQUcvRDttQ0FDbUM7O0FBRW5DLGtCQUFrQjtBQUNsQjs7OztDQUlDLDJCQUEyQjtBQUM1QjtBQUNBOzs7O0NBSUMsNEJBQTRCO0FBQzdCO0FBQ0E7Ozs7Q0FJQyw4QkFBOEI7QUFDL0I7QUFDQTs7OztDQUlDLCtCQUErQjtBQUNoQzs7QUFFQSxhQUFhO0FBQ2I7Q0FDQyxtQkFBbUI7Q0FDbkIsYUFBYTtDQUNiLHlCQUF5QixFQUFFLGlCQUFpQjtBQUM3QztBQUNBO0NBQ0MsdUNBQXVDO0NBQ3ZDLCtCQUErQjtBQUNoQ1wiLFwic291cmNlc0NvbnRlbnRcIjpbXCIvKiEgalF1ZXJ5IFVJIC0gdjEuMTIuMSAtIDIwMTYtMDktMTRcXG4qIGh0dHA6Ly9qcXVlcnl1aS5jb21cXG4qIEluY2x1ZGVzOiBjb3JlLmNzcywgYWNjb3JkaW9uLmNzcywgYXV0b2NvbXBsZXRlLmNzcywgbWVudS5jc3MsIGJ1dHRvbi5jc3MsIGNvbnRyb2xncm91cC5jc3MsIGNoZWNrYm94cmFkaW8uY3NzLCBkYXRlcGlja2VyLmNzcywgZGlhbG9nLmNzcywgZHJhZ2dhYmxlLmNzcywgcmVzaXphYmxlLmNzcywgcHJvZ3Jlc3NiYXIuY3NzLCBzZWxlY3RhYmxlLmNzcywgc2VsZWN0bWVudS5jc3MsIHNsaWRlci5jc3MsIHNvcnRhYmxlLmNzcywgc3Bpbm5lci5jc3MsIHRhYnMuY3NzLCB0b29sdGlwLmNzcywgdGhlbWUuY3NzXFxuKiBUbyB2aWV3IGFuZCBtb2RpZnkgdGhpcyB0aGVtZSwgdmlzaXQgaHR0cDovL2pxdWVyeXVpLmNvbS90aGVtZXJvbGxlci8/YmdTaGFkb3dYUG9zPSZiZ092ZXJsYXlYUG9zPSZiZ0Vycm9yWFBvcz0mYmdIaWdobGlnaHRYUG9zPSZiZ0NvbnRlbnRYUG9zPSZiZ0hlYWRlclhQb3M9JmJnQWN0aXZlWFBvcz0mYmdIb3ZlclhQb3M9JmJnRGVmYXVsdFhQb3M9JmJnU2hhZG93WVBvcz0mYmdPdmVybGF5WVBvcz0mYmdFcnJvcllQb3M9JmJnSGlnaGxpZ2h0WVBvcz0mYmdDb250ZW50WVBvcz0mYmdIZWFkZXJZUG9zPSZiZ0FjdGl2ZVlQb3M9JmJnSG92ZXJZUG9zPSZiZ0RlZmF1bHRZUG9zPSZiZ1NoYWRvd1JlcGVhdD0mYmdPdmVybGF5UmVwZWF0PSZiZ0Vycm9yUmVwZWF0PSZiZ0hpZ2hsaWdodFJlcGVhdD0mYmdDb250ZW50UmVwZWF0PSZiZ0hlYWRlclJlcGVhdD0mYmdBY3RpdmVSZXBlYXQ9JmJnSG92ZXJSZXBlYXQ9JmJnRGVmYXVsdFJlcGVhdD0maWNvbnNIb3Zlcj11cmwoJTIyaW1hZ2VzJTJGdWktaWNvbnNfNTU1NTU1XzI1NngyNDAucG5nJTIyKSZpY29uc0hpZ2hsaWdodD11cmwoJTIyaW1hZ2VzJTJGdWktaWNvbnNfNzc3NjIwXzI1NngyNDAucG5nJTIyKSZpY29uc0hlYWRlcj11cmwoJTIyaW1hZ2VzJTJGdWktaWNvbnNfNDQ0NDQ0XzI1NngyNDAucG5nJTIyKSZpY29uc0Vycm9yPXVybCglMjJpbWFnZXMlMkZ1aS1pY29uc19jYzAwMDBfMjU2eDI0MC5wbmclMjIpJmljb25zRGVmYXVsdD11cmwoJTIyaW1hZ2VzJTJGdWktaWNvbnNfNzc3Nzc3XzI1NngyNDAucG5nJTIyKSZpY29uc0NvbnRlbnQ9dXJsKCUyMmltYWdlcyUyRnVpLWljb25zXzQ0NDQ0NF8yNTZ4MjQwLnBuZyUyMikmaWNvbnNBY3RpdmU9dXJsKCUyMmltYWdlcyUyRnVpLWljb25zX2ZmZmZmZl8yNTZ4MjQwLnBuZyUyMikmYmdJbWdVcmxTaGFkb3c9JmJnSW1nVXJsT3ZlcmxheT0mYmdJbWdVcmxIb3Zlcj0mYmdJbWdVcmxIaWdobGlnaHQ9JmJnSW1nVXJsSGVhZGVyPSZiZ0ltZ1VybEVycm9yPSZiZ0ltZ1VybERlZmF1bHQ9JmJnSW1nVXJsQ29udGVudD0mYmdJbWdVcmxBY3RpdmU9Jm9wYWNpdHlGaWx0ZXJTaGFkb3c9QWxwaGEoT3BhY2l0eSUzRDMwKSZvcGFjaXR5RmlsdGVyT3ZlcmxheT1BbHBoYShPcGFjaXR5JTNEMzApJm9wYWNpdHlTaGFkb3dQZXJjPTMwJm9wYWNpdHlPdmVybGF5UGVyYz0zMCZpY29uQ29sb3JIb3Zlcj0lMjM1NTU1NTUmaWNvbkNvbG9ySGlnaGxpZ2h0PSUyMzc3NzYyMCZpY29uQ29sb3JIZWFkZXI9JTIzNDQ0NDQ0Jmljb25Db2xvckVycm9yPSUyM2NjMDAwMCZpY29uQ29sb3JEZWZhdWx0PSUyMzc3Nzc3NyZpY29uQ29sb3JDb250ZW50PSUyMzQ0NDQ0NCZpY29uQ29sb3JBY3RpdmU9JTIzZmZmZmZmJmJnSW1nT3BhY2l0eVNoYWRvdz0wJmJnSW1nT3BhY2l0eU92ZXJsYXk9MCZiZ0ltZ09wYWNpdHlFcnJvcj05NSZiZ0ltZ09wYWNpdHlIaWdobGlnaHQ9NTUmYmdJbWdPcGFjaXR5Q29udGVudD03NSZiZ0ltZ09wYWNpdHlIZWFkZXI9NzUmYmdJbWdPcGFjaXR5QWN0aXZlPTY1JmJnSW1nT3BhY2l0eUhvdmVyPTc1JmJnSW1nT3BhY2l0eURlZmF1bHQ9NzUmYmdUZXh0dXJlU2hhZG93PWZsYXQmYmdUZXh0dXJlT3ZlcmxheT1mbGF0JmJnVGV4dHVyZUVycm9yPWZsYXQmYmdUZXh0dXJlSGlnaGxpZ2h0PWZsYXQmYmdUZXh0dXJlQ29udGVudD1mbGF0JmJnVGV4dHVyZUhlYWRlcj1mbGF0JmJnVGV4dHVyZUFjdGl2ZT1mbGF0JmJnVGV4dHVyZUhvdmVyPWZsYXQmYmdUZXh0dXJlRGVmYXVsdD1mbGF0JmNvcm5lclJhZGl1cz0zcHgmZndEZWZhdWx0PW5vcm1hbCZmZkRlZmF1bHQ9QXJpYWwlMkNIZWx2ZXRpY2ElMkNzYW5zLXNlcmlmJmZzRGVmYXVsdD0xZW0mY29ybmVyUmFkaXVzU2hhZG93PThweCZ0aGlja25lc3NTaGFkb3c9NXB4Jm9mZnNldExlZnRTaGFkb3c9MHB4Jm9mZnNldFRvcFNoYWRvdz0wcHgmb3BhY2l0eVNoYWRvdz0uMyZiZ0NvbG9yU2hhZG93PSUyMzY2NjY2NiZvcGFjaXR5T3ZlcmxheT0uMyZiZ0NvbG9yT3ZlcmxheT0lMjNhYWFhYWEmZmNFcnJvcj0lMjM1ZjNmM2YmYm9yZGVyQ29sb3JFcnJvcj0lMjNmMWE4OTkmYmdDb2xvckVycm9yPSUyM2ZkZGZkZiZmY0hpZ2hsaWdodD0lMjM3Nzc2MjAmYm9yZGVyQ29sb3JIaWdobGlnaHQ9JTIzZGFkNTVlJmJnQ29sb3JIaWdobGlnaHQ9JTIzZmZmYTkwJmZjQ29udGVudD0lMjMzMzMzMzMmYm9yZGVyQ29sb3JDb250ZW50PSUyM2RkZGRkZCZiZ0NvbG9yQ29udGVudD0lMjNmZmZmZmYmZmNIZWFkZXI9JTIzMzMzMzMzJmJvcmRlckNvbG9ySGVhZGVyPSUyM2RkZGRkZCZiZ0NvbG9ySGVhZGVyPSUyM2U5ZTllOSZmY0FjdGl2ZT0lMjNmZmZmZmYmYm9yZGVyQ29sb3JBY3RpdmU9JTIzMDAzZWZmJmJnQ29sb3JBY3RpdmU9JTIzMDA3ZmZmJmZjSG92ZXI9JTIzMmIyYjJiJmJvcmRlckNvbG9ySG92ZXI9JTIzY2NjY2NjJmJnQ29sb3JIb3Zlcj0lMjNlZGVkZWQmZmNEZWZhdWx0PSUyMzQ1NDU0NSZib3JkZXJDb2xvckRlZmF1bHQ9JTIzYzVjNWM1JmJnQ29sb3JEZWZhdWx0PSUyM2Y2ZjZmNlxcbiogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqL1xcblxcbi8qIExheW91dCBoZWxwZXJzXFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuLnVpLWhlbHBlci1oaWRkZW4ge1xcblxcdGRpc3BsYXk6IG5vbmU7XFxufVxcbi51aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUge1xcblxcdGJvcmRlcjogMDtcXG5cXHRjbGlwOiByZWN0KDAgMCAwIDApO1xcblxcdGhlaWdodDogMXB4O1xcblxcdG1hcmdpbjogLTFweDtcXG5cXHRvdmVyZmxvdzogaGlkZGVuO1xcblxcdHBhZGRpbmc6IDA7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdHdpZHRoOiAxcHg7XFxufVxcbi51aS1oZWxwZXItcmVzZXQge1xcblxcdG1hcmdpbjogMDtcXG5cXHRwYWRkaW5nOiAwO1xcblxcdGJvcmRlcjogMDtcXG5cXHRvdXRsaW5lOiAwO1xcblxcdGxpbmUtaGVpZ2h0OiAxLjM7XFxuXFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xcblxcdGZvbnQtc2l6ZTogMTAwJTtcXG5cXHRsaXN0LXN0eWxlOiBub25lO1xcbn1cXG4udWktaGVscGVyLWNsZWFyZml4OmJlZm9yZSxcXG4udWktaGVscGVyLWNsZWFyZml4OmFmdGVyIHtcXG5cXHRjb250ZW50OiBcXFwiXFxcIjtcXG5cXHRkaXNwbGF5OiB0YWJsZTtcXG5cXHRib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xcbn1cXG4udWktaGVscGVyLWNsZWFyZml4OmFmdGVyIHtcXG5cXHRjbGVhcjogYm90aDtcXG59XFxuLnVpLWhlbHBlci16Zml4IHtcXG5cXHR3aWR0aDogMTAwJTtcXG5cXHRoZWlnaHQ6IDEwMCU7XFxuXFx0dG9wOiAwO1xcblxcdGxlZnQ6IDA7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdG9wYWNpdHk6IDA7XFxuXFx0ZmlsdGVyOkFscGhhKE9wYWNpdHk9MCk7IC8qIHN1cHBvcnQ6IElFOCAqL1xcbn1cXG5cXG4udWktZnJvbnQge1xcblxcdHotaW5kZXg6IDEwMDtcXG59XFxuXFxuXFxuLyogSW50ZXJhY3Rpb24gQ3Vlc1xcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcbi51aS1zdGF0ZS1kaXNhYmxlZCB7XFxuXFx0Y3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XFxuXFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcblxcbi8qIEljb25zXFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuLnVpLWljb24ge1xcblxcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG5cXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcblxcdG1hcmdpbi10b3A6IC0uMjVlbTtcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7XFxuXFx0dGV4dC1pbmRlbnQ6IC05OTk5OXB4O1xcblxcdG92ZXJmbG93OiBoaWRkZW47XFxuXFx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG59XFxuXFxuLnVpLXdpZGdldC1pY29uLWJsb2NrIHtcXG5cXHRsZWZ0OiA1MCU7XFxuXFx0bWFyZ2luLWxlZnQ6IC04cHg7XFxuXFx0ZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi8qIE1pc2MgdmlzdWFsc1xcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcblxcbi8qIE92ZXJsYXlzICovXFxuLnVpLXdpZGdldC1vdmVybGF5IHtcXG5cXHRwb3NpdGlvbjogZml4ZWQ7XFxuXFx0dG9wOiAwO1xcblxcdGxlZnQ6IDA7XFxuXFx0d2lkdGg6IDEwMCU7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcbn1cXG4udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24taGVhZGVyIHtcXG5cXHRkaXNwbGF5OiBibG9jaztcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxuXFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblxcdG1hcmdpbjogMnB4IDAgMCAwO1xcblxcdHBhZGRpbmc6IC41ZW0gLjVlbSAuNWVtIC43ZW07XFxuXFx0Zm9udC1zaXplOiAxMDAlO1xcbn1cXG4udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24tY29udGVudCB7XFxuXFx0cGFkZGluZzogMWVtIDIuMmVtO1xcblxcdGJvcmRlci10b3A6IDA7XFxuXFx0b3ZlcmZsb3c6IGF1dG87XFxufVxcbi51aS1hdXRvY29tcGxldGUge1xcblxcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG5cXHR0b3A6IDA7XFxuXFx0bGVmdDogMDtcXG5cXHRjdXJzb3I6IGRlZmF1bHQ7XFxufVxcbi51aS1tZW51IHtcXG5cXHRsaXN0LXN0eWxlOiBub25lO1xcblxcdHBhZGRpbmc6IDA7XFxuXFx0bWFyZ2luOiAwO1xcblxcdGRpc3BsYXk6IGJsb2NrO1xcblxcdG91dGxpbmU6IDA7XFxufVxcbi51aS1tZW51IC51aS1tZW51IHtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcbi51aS1tZW51IC51aS1tZW51LWl0ZW0ge1xcblxcdG1hcmdpbjogMDtcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxuXFx0Lyogc3VwcG9ydDogSUUxMCwgc2VlICM4ODQ0ICovXFxuXFx0bGlzdC1zdHlsZS1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBQUFBUC8vL3lINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQlJBQTdcXFwiKTtcXG59XFxuLnVpLW1lbnUgLnVpLW1lbnUtaXRlbS13cmFwcGVyIHtcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7XFxuXFx0cGFkZGluZzogM3B4IDFlbSAzcHggLjRlbTtcXG59XFxuLnVpLW1lbnUgLnVpLW1lbnUtZGl2aWRlciB7XFxuXFx0bWFyZ2luOiA1cHggMDtcXG5cXHRoZWlnaHQ6IDA7XFxuXFx0Zm9udC1zaXplOiAwO1xcblxcdGxpbmUtaGVpZ2h0OiAwO1xcblxcdGJvcmRlci13aWR0aDogMXB4IDAgMCAwO1xcbn1cXG4udWktbWVudSAudWktc3RhdGUtZm9jdXMsXFxuLnVpLW1lbnUgLnVpLXN0YXRlLWFjdGl2ZSB7XFxuXFx0bWFyZ2luOiAtMXB4O1xcbn1cXG5cXG4vKiBpY29uIHN1cHBvcnQgKi9cXG4udWktbWVudS1pY29ucyB7XFxuXFx0cG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4udWktbWVudS1pY29ucyAudWktbWVudS1pdGVtLXdyYXBwZXIge1xcblxcdHBhZGRpbmctbGVmdDogMmVtO1xcbn1cXG5cXG4vKiBsZWZ0LWFsaWduZWQgKi9cXG4udWktbWVudSAudWktaWNvbiB7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdHRvcDogMDtcXG5cXHRib3R0b206IDA7XFxuXFx0bGVmdDogLjJlbTtcXG5cXHRtYXJnaW46IGF1dG8gMDtcXG59XFxuXFxuLyogcmlnaHQtYWxpZ25lZCAqL1xcbi51aS1tZW51IC51aS1tZW51LWljb24ge1xcblxcdGxlZnQ6IGF1dG87XFxuXFx0cmlnaHQ6IDA7XFxufVxcbi51aS1idXR0b24ge1xcblxcdHBhZGRpbmc6IC40ZW0gMWVtO1xcblxcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7XFxuXFx0bGluZS1oZWlnaHQ6IG5vcm1hbDtcXG5cXHRtYXJnaW4tcmlnaHQ6IC4xZW07XFxuXFx0Y3Vyc29yOiBwb2ludGVyO1xcblxcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuXFx0dGV4dC1hbGlnbjogY2VudGVyO1xcblxcdC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuXFx0LW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG5cXHQtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuXFx0dXNlci1zZWxlY3Q6IG5vbmU7XFxuXFxuXFx0LyogU3VwcG9ydDogSUUgPD0gMTEgKi9cXG5cXHRvdmVyZmxvdzogdmlzaWJsZTtcXG59XFxuXFxuLnVpLWJ1dHRvbixcXG4udWktYnV0dG9uOmxpbmssXFxuLnVpLWJ1dHRvbjp2aXNpdGVkLFxcbi51aS1idXR0b246aG92ZXIsXFxuLnVpLWJ1dHRvbjphY3RpdmUge1xcblxcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLyogdG8gbWFrZSByb29tIGZvciB0aGUgaWNvbiwgYSB3aWR0aCBuZWVkcyB0byBiZSBzZXQgaGVyZSAqL1xcbi51aS1idXR0b24taWNvbi1vbmx5IHtcXG5cXHR3aWR0aDogMmVtO1xcblxcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuXFx0dGV4dC1pbmRlbnQ6IC05OTk5cHg7XFxuXFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcXG59XFxuXFxuLyogbm8gaWNvbiBzdXBwb3J0IGZvciBpbnB1dCBlbGVtZW50cyAqL1xcbmlucHV0LnVpLWJ1dHRvbi51aS1idXR0b24taWNvbi1vbmx5IHtcXG5cXHR0ZXh0LWluZGVudDogMDtcXG59XFxuXFxuLyogYnV0dG9uIGljb24gZWxlbWVudChzKSAqL1xcbi51aS1idXR0b24taWNvbi1vbmx5IC51aS1pY29uIHtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0dG9wOiA1MCU7XFxuXFx0bGVmdDogNTAlO1xcblxcdG1hcmdpbi10b3A6IC04cHg7XFxuXFx0bWFyZ2luLWxlZnQ6IC04cHg7XFxufVxcblxcbi51aS1idXR0b24udWktaWNvbi1ub3RleHQgLnVpLWljb24ge1xcblxcdHBhZGRpbmc6IDA7XFxuXFx0d2lkdGg6IDIuMWVtO1xcblxcdGhlaWdodDogMi4xZW07XFxuXFx0dGV4dC1pbmRlbnQ6IC05OTk5cHg7XFxuXFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcXG5cXG59XFxuXFxuaW5wdXQudWktYnV0dG9uLnVpLWljb24tbm90ZXh0IC51aS1pY29uIHtcXG5cXHR3aWR0aDogYXV0bztcXG5cXHRoZWlnaHQ6IGF1dG87XFxuXFx0dGV4dC1pbmRlbnQ6IDA7XFxuXFx0d2hpdGUtc3BhY2U6IG5vcm1hbDtcXG5cXHRwYWRkaW5nOiAuNGVtIDFlbTtcXG59XFxuXFxuLyogd29ya2Fyb3VuZHMgKi9cXG4vKiBTdXBwb3J0OiBGaXJlZm94IDUgLSA0MCAqL1xcbmlucHV0LnVpLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcXG5idXR0b24udWktYnV0dG9uOjotbW96LWZvY3VzLWlubmVyIHtcXG5cXHRib3JkZXI6IDA7XFxuXFx0cGFkZGluZzogMDtcXG59XFxuLnVpLWNvbnRyb2xncm91cCB7XFxuXFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG5cXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcbi51aS1jb250cm9sZ3JvdXAgPiAudWktY29udHJvbGdyb3VwLWl0ZW0ge1xcblxcdGZsb2F0OiBsZWZ0O1xcblxcdG1hcmdpbi1sZWZ0OiAwO1xcblxcdG1hcmdpbi1yaWdodDogMDtcXG59XFxuLnVpLWNvbnRyb2xncm91cCA+IC51aS1jb250cm9sZ3JvdXAtaXRlbTpmb2N1cyxcXG4udWktY29udHJvbGdyb3VwID4gLnVpLWNvbnRyb2xncm91cC1pdGVtLnVpLXZpc3VhbC1mb2N1cyB7XFxuXFx0ei1pbmRleDogOTk5OTtcXG59XFxuLnVpLWNvbnRyb2xncm91cC12ZXJ0aWNhbCA+IC51aS1jb250cm9sZ3JvdXAtaXRlbSB7XFxuXFx0ZGlzcGxheTogYmxvY2s7XFxuXFx0ZmxvYXQ6IG5vbmU7XFxuXFx0d2lkdGg6IDEwMCU7XFxuXFx0bWFyZ2luLXRvcDogMDtcXG5cXHRtYXJnaW4tYm90dG9tOiAwO1xcblxcdHRleHQtYWxpZ246IGxlZnQ7XFxufVxcbi51aS1jb250cm9sZ3JvdXAtdmVydGljYWwgLnVpLWNvbnRyb2xncm91cC1pdGVtIHtcXG5cXHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG4udWktY29udHJvbGdyb3VwIC51aS1jb250cm9sZ3JvdXAtbGFiZWwge1xcblxcdHBhZGRpbmc6IC40ZW0gMWVtO1xcbn1cXG4udWktY29udHJvbGdyb3VwIC51aS1jb250cm9sZ3JvdXAtbGFiZWwgc3BhbiB7XFxuXFx0Zm9udC1zaXplOiA4MCU7XFxufVxcbi51aS1jb250cm9sZ3JvdXAtaG9yaXpvbnRhbCAudWktY29udHJvbGdyb3VwLWxhYmVsICsgLnVpLWNvbnRyb2xncm91cC1pdGVtIHtcXG5cXHRib3JkZXItbGVmdDogbm9uZTtcXG59XFxuLnVpLWNvbnRyb2xncm91cC12ZXJ0aWNhbCAudWktY29udHJvbGdyb3VwLWxhYmVsICsgLnVpLWNvbnRyb2xncm91cC1pdGVtIHtcXG5cXHRib3JkZXItdG9wOiBub25lO1xcbn1cXG4udWktY29udHJvbGdyb3VwLWhvcml6b250YWwgLnVpLWNvbnRyb2xncm91cC1sYWJlbC51aS13aWRnZXQtY29udGVudCB7XFxuXFx0Ym9yZGVyLXJpZ2h0OiBub25lO1xcbn1cXG4udWktY29udHJvbGdyb3VwLXZlcnRpY2FsIC51aS1jb250cm9sZ3JvdXAtbGFiZWwudWktd2lkZ2V0LWNvbnRlbnQge1xcblxcdGJvcmRlci1ib3R0b206IG5vbmU7XFxufVxcblxcbi8qIFNwaW5uZXIgc3BlY2lmaWMgc3R5bGUgZml4ZXMgKi9cXG4udWktY29udHJvbGdyb3VwLXZlcnRpY2FsIC51aS1zcGlubmVyLWlucHV0IHtcXG5cXG5cXHQvKiBTdXBwb3J0OiBJRTggb25seSwgQW5kcm9pZCA8IDQuNCBvbmx5ICovXFxuXFx0d2lkdGg6IDc1JTtcXG5cXHR3aWR0aDogY2FsYyggMTAwJSAtIDIuNGVtICk7XFxufVxcbi51aS1jb250cm9sZ3JvdXAtdmVydGljYWwgLnVpLXNwaW5uZXIgLnVpLXNwaW5uZXItdXAge1xcblxcdGJvcmRlci10b3Atc3R5bGU6IHNvbGlkO1xcbn1cXG5cXG4udWktY2hlY2tib3hyYWRpby1sYWJlbCAudWktaWNvbi1iYWNrZ3JvdW5kIHtcXG5cXHRib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDFweCAjY2NjO1xcblxcdGJvcmRlci1yYWRpdXM6IC4xMmVtO1xcblxcdGJvcmRlcjogbm9uZTtcXG59XFxuLnVpLWNoZWNrYm94cmFkaW8tcmFkaW8tbGFiZWwgLnVpLWljb24tYmFja2dyb3VuZCB7XFxuXFx0d2lkdGg6IDE2cHg7XFxuXFx0aGVpZ2h0OiAxNnB4O1xcblxcdGJvcmRlci1yYWRpdXM6IDFlbTtcXG5cXHRvdmVyZmxvdzogdmlzaWJsZTtcXG5cXHRib3JkZXI6IG5vbmU7XFxufVxcbi51aS1jaGVja2JveHJhZGlvLXJhZGlvLWxhYmVsLnVpLWNoZWNrYm94cmFkaW8tY2hlY2tlZCAudWktaWNvbixcXG4udWktY2hlY2tib3hyYWRpby1yYWRpby1sYWJlbC51aS1jaGVja2JveHJhZGlvLWNoZWNrZWQ6aG92ZXIgLnVpLWljb24ge1xcblxcdGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxuXFx0d2lkdGg6IDhweDtcXG5cXHRoZWlnaHQ6IDhweDtcXG5cXHRib3JkZXItd2lkdGg6IDRweDtcXG5cXHRib3JkZXItc3R5bGU6IHNvbGlkO1xcbn1cXG4udWktY2hlY2tib3hyYWRpby1kaXNhYmxlZCB7XFxuXFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi51aS1kYXRlcGlja2VyIHtcXG5cXHR3aWR0aDogMTdlbTtcXG5cXHRwYWRkaW5nOiAuMmVtIC4yZW0gMDtcXG5cXHRkaXNwbGF5OiBub25lO1xcbn1cXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1oZWFkZXIge1xcblxcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cXHRwYWRkaW5nOiAuMmVtIDA7XFxufVxcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYsXFxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dCB7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdHRvcDogMnB4O1xcblxcdHdpZHRoOiAxLjhlbTtcXG5cXHRoZWlnaHQ6IDEuOGVtO1xcbn1cXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyLFxcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQtaG92ZXIge1xcblxcdHRvcDogMXB4O1xcbn1cXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2IHtcXG5cXHRsZWZ0OiAycHg7XFxufVxcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQge1xcblxcdHJpZ2h0OiAycHg7XFxufVxcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYtaG92ZXIge1xcblxcdGxlZnQ6IDFweDtcXG59XFxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlciB7XFxuXFx0cmlnaHQ6IDFweDtcXG59XFxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldiBzcGFuLFxcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQgc3BhbiB7XFxuXFx0ZGlzcGxheTogYmxvY2s7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdGxlZnQ6IDUwJTtcXG5cXHRtYXJnaW4tbGVmdDogLThweDtcXG5cXHR0b3A6IDUwJTtcXG5cXHRtYXJnaW4tdG9wOiAtOHB4O1xcbn1cXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci10aXRsZSB7XFxuXFx0bWFyZ2luOiAwIDIuM2VtO1xcblxcdGxpbmUtaGVpZ2h0OiAxLjhlbTtcXG5cXHR0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxlIHNlbGVjdCB7XFxuXFx0Zm9udC1zaXplOiAxZW07XFxuXFx0bWFyZ2luOiAxcHggMDtcXG59XFxuLnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsXFxuLnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciB7XFxuXFx0d2lkdGg6IDQ1JTtcXG59XFxuLnVpLWRhdGVwaWNrZXIgdGFibGUge1xcblxcdHdpZHRoOiAxMDAlO1xcblxcdGZvbnQtc2l6ZTogLjllbTtcXG5cXHRib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xcblxcdG1hcmdpbjogMCAwIC40ZW07XFxufVxcbi51aS1kYXRlcGlja2VyIHRoIHtcXG5cXHRwYWRkaW5nOiAuN2VtIC4zZW07XFxuXFx0dGV4dC1hbGlnbjogY2VudGVyO1xcblxcdGZvbnQtd2VpZ2h0OiBib2xkO1xcblxcdGJvcmRlcjogMDtcXG59XFxuLnVpLWRhdGVwaWNrZXIgdGQge1xcblxcdGJvcmRlcjogMDtcXG5cXHRwYWRkaW5nOiAxcHg7XFxufVxcbi51aS1kYXRlcGlja2VyIHRkIHNwYW4sXFxuLnVpLWRhdGVwaWNrZXIgdGQgYSB7XFxuXFx0ZGlzcGxheTogYmxvY2s7XFxuXFx0cGFkZGluZzogLjJlbTtcXG5cXHR0ZXh0LWFsaWduOiByaWdodDtcXG5cXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUge1xcblxcdGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxuXFx0bWFyZ2luOiAuN2VtIDAgMCAwO1xcblxcdHBhZGRpbmc6IDAgLjJlbTtcXG5cXHRib3JkZXItbGVmdDogMDtcXG5cXHRib3JkZXItcmlnaHQ6IDA7XFxuXFx0Ym9yZGVyLWJvdHRvbTogMDtcXG59XFxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24ge1xcblxcdGZsb2F0OiByaWdodDtcXG5cXHRtYXJnaW46IC41ZW0gLjJlbSAuNGVtO1xcblxcdGN1cnNvcjogcG9pbnRlcjtcXG5cXHRwYWRkaW5nOiAuMmVtIC42ZW0gLjNlbSAuNmVtO1xcblxcdHdpZHRoOiBhdXRvO1xcblxcdG92ZXJmbG93OiB2aXNpYmxlO1xcbn1cXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbi51aS1kYXRlcGlja2VyLWN1cnJlbnQge1xcblxcdGZsb2F0OiBsZWZ0O1xcbn1cXG5cXG4vKiB3aXRoIG11bHRpcGxlIGNhbGVuZGFycyAqL1xcbi51aS1kYXRlcGlja2VyLnVpLWRhdGVwaWNrZXItbXVsdGkge1xcblxcdHdpZHRoOiBhdXRvO1xcbn1cXG4udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cCB7XFxuXFx0ZmxvYXQ6IGxlZnQ7XFxufVxcbi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwIHRhYmxlIHtcXG5cXHR3aWR0aDogOTUlO1xcblxcdG1hcmdpbjogMCBhdXRvIC40ZW07XFxufVxcbi51aS1kYXRlcGlja2VyLW11bHRpLTIgLnVpLWRhdGVwaWNrZXItZ3JvdXAge1xcblxcdHdpZHRoOiA1MCU7XFxufVxcbi51aS1kYXRlcGlja2VyLW11bHRpLTMgLnVpLWRhdGVwaWNrZXItZ3JvdXAge1xcblxcdHdpZHRoOiAzMy4zJTtcXG59XFxuLnVpLWRhdGVwaWNrZXItbXVsdGktNCAudWktZGF0ZXBpY2tlci1ncm91cCB7XFxuXFx0d2lkdGg6IDI1JTtcXG59XFxuLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCAudWktZGF0ZXBpY2tlci1oZWFkZXIsXFxuLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIC51aS1kYXRlcGlja2VyLWhlYWRlciB7XFxuXFx0Ym9yZGVyLWxlZnQtd2lkdGg6IDA7XFxufVxcbi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUge1xcblxcdGNsZWFyOiBsZWZ0O1xcbn1cXG4udWktZGF0ZXBpY2tlci1yb3ctYnJlYWsge1xcblxcdGNsZWFyOiBib3RoO1xcblxcdHdpZHRoOiAxMDAlO1xcblxcdGZvbnQtc2l6ZTogMDtcXG59XFxuXFxuLyogUlRMIHN1cHBvcnQgKi9cXG4udWktZGF0ZXBpY2tlci1ydGwge1xcblxcdGRpcmVjdGlvbjogcnRsO1xcbn1cXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItcHJldiB7XFxuXFx0cmlnaHQ6IDJweDtcXG5cXHRsZWZ0OiBhdXRvO1xcbn1cXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItbmV4dCB7XFxuXFx0bGVmdDogMnB4O1xcblxcdHJpZ2h0OiBhdXRvO1xcbn1cXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItcHJldjpob3ZlciB7XFxuXFx0cmlnaHQ6IDFweDtcXG5cXHRsZWZ0OiBhdXRvO1xcbn1cXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItbmV4dDpob3ZlciB7XFxuXFx0bGVmdDogMXB4O1xcblxcdHJpZ2h0OiBhdXRvO1xcbn1cXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSB7XFxuXFx0Y2xlYXI6IHJpZ2h0O1xcbn1cXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24ge1xcblxcdGZsb2F0OiBsZWZ0O1xcbn1cXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24udWktZGF0ZXBpY2tlci1jdXJyZW50LFxcbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cCB7XFxuXFx0ZmxvYXQ6IHJpZ2h0O1xcbn1cXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCAudWktZGF0ZXBpY2tlci1oZWFkZXIsXFxuLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXIge1xcblxcdGJvcmRlci1yaWdodC13aWR0aDogMDtcXG5cXHRib3JkZXItbGVmdC13aWR0aDogMXB4O1xcbn1cXG5cXG4vKiBJY29ucyAqL1xcbi51aS1kYXRlcGlja2VyIC51aS1pY29uIHtcXG5cXHRkaXNwbGF5OiBibG9jaztcXG5cXHR0ZXh0LWluZGVudDogLTk5OTk5cHg7XFxuXFx0b3ZlcmZsb3c6IGhpZGRlbjtcXG5cXHRiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcblxcdGxlZnQ6IC41ZW07XFxuXFx0dG9wOiAuM2VtO1xcbn1cXG4udWktZGlhbG9nIHtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0dG9wOiAwO1xcblxcdGxlZnQ6IDA7XFxuXFx0cGFkZGluZzogLjJlbTtcXG5cXHRvdXRsaW5lOiAwO1xcbn1cXG4udWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGViYXIge1xcblxcdHBhZGRpbmc6IC40ZW0gMWVtO1xcblxcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnVpLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlIHtcXG5cXHRmbG9hdDogbGVmdDtcXG5cXHRtYXJnaW46IC4xZW0gMDtcXG5cXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xcblxcdHdpZHRoOiA5MCU7XFxuXFx0b3ZlcmZsb3c6IGhpZGRlbjtcXG5cXHR0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG59XFxuLnVpLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlIHtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0cmlnaHQ6IC4zZW07XFxuXFx0dG9wOiA1MCU7XFxuXFx0d2lkdGg6IDIwcHg7XFxuXFx0bWFyZ2luOiAtMTBweCAwIDAgMDtcXG5cXHRwYWRkaW5nOiAxcHg7XFxuXFx0aGVpZ2h0OiAyMHB4O1xcbn1cXG4udWktZGlhbG9nIC51aS1kaWFsb2ctY29udGVudCB7XFxuXFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblxcdGJvcmRlcjogMDtcXG5cXHRwYWRkaW5nOiAuNWVtIDFlbTtcXG5cXHRiYWNrZ3JvdW5kOiBub25lO1xcblxcdG92ZXJmbG93OiBhdXRvO1xcbn1cXG4udWktZGlhbG9nIC51aS1kaWFsb2ctYnV0dG9ucGFuZSB7XFxuXFx0dGV4dC1hbGlnbjogbGVmdDtcXG5cXHRib3JkZXItd2lkdGg6IDFweCAwIDAgMDtcXG5cXHRiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcblxcdG1hcmdpbi10b3A6IC41ZW07XFxuXFx0cGFkZGluZzogLjNlbSAxZW0gLjVlbSAuNGVtO1xcbn1cXG4udWktZGlhbG9nIC51aS1kaWFsb2ctYnV0dG9ucGFuZSAudWktZGlhbG9nLWJ1dHRvbnNldCB7XFxuXFx0ZmxvYXQ6IHJpZ2h0O1xcbn1cXG4udWktZGlhbG9nIC51aS1kaWFsb2ctYnV0dG9ucGFuZSBidXR0b24ge1xcblxcdG1hcmdpbjogLjVlbSAuNGVtIC41ZW0gMDtcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi51aS1kaWFsb2cgLnVpLXJlc2l6YWJsZS1uIHtcXG5cXHRoZWlnaHQ6IDJweDtcXG5cXHR0b3A6IDA7XFxufVxcbi51aS1kaWFsb2cgLnVpLXJlc2l6YWJsZS1lIHtcXG5cXHR3aWR0aDogMnB4O1xcblxcdHJpZ2h0OiAwO1xcbn1cXG4udWktZGlhbG9nIC51aS1yZXNpemFibGUtcyB7XFxuXFx0aGVpZ2h0OiAycHg7XFxuXFx0Ym90dG9tOiAwO1xcbn1cXG4udWktZGlhbG9nIC51aS1yZXNpemFibGUtdyB7XFxuXFx0d2lkdGg6IDJweDtcXG5cXHRsZWZ0OiAwO1xcbn1cXG4udWktZGlhbG9nIC51aS1yZXNpemFibGUtc2UsXFxuLnVpLWRpYWxvZyAudWktcmVzaXphYmxlLXN3LFxcbi51aS1kaWFsb2cgLnVpLXJlc2l6YWJsZS1uZSxcXG4udWktZGlhbG9nIC51aS1yZXNpemFibGUtbncge1xcblxcdHdpZHRoOiA3cHg7XFxuXFx0aGVpZ2h0OiA3cHg7XFxufVxcbi51aS1kaWFsb2cgLnVpLXJlc2l6YWJsZS1zZSB7XFxuXFx0cmlnaHQ6IDA7XFxuXFx0Ym90dG9tOiAwO1xcbn1cXG4udWktZGlhbG9nIC51aS1yZXNpemFibGUtc3cge1xcblxcdGxlZnQ6IDA7XFxuXFx0Ym90dG9tOiAwO1xcbn1cXG4udWktZGlhbG9nIC51aS1yZXNpemFibGUtbmUge1xcblxcdHJpZ2h0OiAwO1xcblxcdHRvcDogMDtcXG59XFxuLnVpLWRpYWxvZyAudWktcmVzaXphYmxlLW53IHtcXG5cXHRsZWZ0OiAwO1xcblxcdHRvcDogMDtcXG59XFxuLnVpLWRyYWdnYWJsZSAudWktZGlhbG9nLXRpdGxlYmFyIHtcXG5cXHRjdXJzb3I6IG1vdmU7XFxufVxcbi51aS1kcmFnZ2FibGUtaGFuZGxlIHtcXG5cXHQtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xcblxcdHRvdWNoLWFjdGlvbjogbm9uZTtcXG59XFxuLnVpLXJlc2l6YWJsZSB7XFxuXFx0cG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4udWktcmVzaXphYmxlLWhhbmRsZSB7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdGZvbnQtc2l6ZTogMC4xcHg7XFxuXFx0ZGlzcGxheTogYmxvY2s7XFxuXFx0LW1zLXRvdWNoLWFjdGlvbjogbm9uZTtcXG5cXHR0b3VjaC1hY3Rpb246IG5vbmU7XFxufVxcbi51aS1yZXNpemFibGUtZGlzYWJsZWQgLnVpLXJlc2l6YWJsZS1oYW5kbGUsXFxuLnVpLXJlc2l6YWJsZS1hdXRvaGlkZSAudWktcmVzaXphYmxlLWhhbmRsZSB7XFxuXFx0ZGlzcGxheTogbm9uZTtcXG59XFxuLnVpLXJlc2l6YWJsZS1uIHtcXG5cXHRjdXJzb3I6IG4tcmVzaXplO1xcblxcdGhlaWdodDogN3B4O1xcblxcdHdpZHRoOiAxMDAlO1xcblxcdHRvcDogLTVweDtcXG5cXHRsZWZ0OiAwO1xcbn1cXG4udWktcmVzaXphYmxlLXMge1xcblxcdGN1cnNvcjogcy1yZXNpemU7XFxuXFx0aGVpZ2h0OiA3cHg7XFxuXFx0d2lkdGg6IDEwMCU7XFxuXFx0Ym90dG9tOiAtNXB4O1xcblxcdGxlZnQ6IDA7XFxufVxcbi51aS1yZXNpemFibGUtZSB7XFxuXFx0Y3Vyc29yOiBlLXJlc2l6ZTtcXG5cXHR3aWR0aDogN3B4O1xcblxcdHJpZ2h0OiAtNXB4O1xcblxcdHRvcDogMDtcXG5cXHRoZWlnaHQ6IDEwMCU7XFxufVxcbi51aS1yZXNpemFibGUtdyB7XFxuXFx0Y3Vyc29yOiB3LXJlc2l6ZTtcXG5cXHR3aWR0aDogN3B4O1xcblxcdGxlZnQ6IC01cHg7XFxuXFx0dG9wOiAwO1xcblxcdGhlaWdodDogMTAwJTtcXG59XFxuLnVpLXJlc2l6YWJsZS1zZSB7XFxuXFx0Y3Vyc29yOiBzZS1yZXNpemU7XFxuXFx0d2lkdGg6IDEycHg7XFxuXFx0aGVpZ2h0OiAxMnB4O1xcblxcdHJpZ2h0OiAxcHg7XFxuXFx0Ym90dG9tOiAxcHg7XFxufVxcbi51aS1yZXNpemFibGUtc3cge1xcblxcdGN1cnNvcjogc3ctcmVzaXplO1xcblxcdHdpZHRoOiA5cHg7XFxuXFx0aGVpZ2h0OiA5cHg7XFxuXFx0bGVmdDogLTVweDtcXG5cXHRib3R0b206IC01cHg7XFxufVxcbi51aS1yZXNpemFibGUtbncge1xcblxcdGN1cnNvcjogbnctcmVzaXplO1xcblxcdHdpZHRoOiA5cHg7XFxuXFx0aGVpZ2h0OiA5cHg7XFxuXFx0bGVmdDogLTVweDtcXG5cXHR0b3A6IC01cHg7XFxufVxcbi51aS1yZXNpemFibGUtbmUge1xcblxcdGN1cnNvcjogbmUtcmVzaXplO1xcblxcdHdpZHRoOiA5cHg7XFxuXFx0aGVpZ2h0OiA5cHg7XFxuXFx0cmlnaHQ6IC01cHg7XFxuXFx0dG9wOiAtNXB4O1xcbn1cXG4udWktcHJvZ3Jlc3NiYXIge1xcblxcdGhlaWdodDogMmVtO1xcblxcdHRleHQtYWxpZ246IGxlZnQ7XFxuXFx0b3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnVpLXByb2dyZXNzYmFyIC51aS1wcm9ncmVzc2Jhci12YWx1ZSB7XFxuXFx0bWFyZ2luOiAtMXB4O1xcblxcdGhlaWdodDogMTAwJTtcXG59XFxuLnVpLXByb2dyZXNzYmFyIC51aS1wcm9ncmVzc2Jhci1vdmVybGF5IHtcXG5cXHRiYWNrZ3JvdW5kOiB1cmwoXFxcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEtBQW9BSUFCQUFBQUFQLy8veUgvQzA1RlZGTkRRVkJGTWk0d0F3RUFBQUFoK1FRSkFRQUJBQ3dBQUFBQUtBQW9BQUFDa1l3TnFYcmRDNTJEUzA2YTdNRlpJKzRGSEJDS29EZVdLWHF5bVBxR3F4dkpyWFpiTXg3VHRjK3c5WGdVMkZCM2xPeVFSV0VUMklGR2lVOW0xZnJEVnB4WlpjNmJmSHd2NGMxWVhQNmsxVmR5MjkyRmI2VWt1dkZ0WHB2V1N6QStIeWNYSkhVWGlHWUlpTWcyUjZXNDU5Z25XR2ZITmRqSXFEV1ZxZW1IMmVrcE9ia3BPbHBwV1VxWmlxcjZlZHFxV1FBQUlma0VDUUVBQVFBc0FBQUFBQ2dBS0FBQUFwU01nWm5HZmFxY2cxRTJ1dXpEbW1IVUJSOFFpbDk1aGlQS3FXbjNhcXRMc1MxOHk3RzFTek5lb3dXQkVOdFFkK1QxSmt0UDA1bnpQVGRKWmxSNnZVeE5XV2pWK3ZVV2hXTmtXRnd4bDlWcFpSZWRZY2ZsSU9MYWZhYTI4WGRzSC95bmxjYzF1UFZEWnhRSVIwSzI1K2NJQ0Ntb3FDZTVtR2haT2ZlWVNVaDV5SmNKeXJrWldXcGFSOGRvSjJvNE5ZcTYybEFBQUNINUJBa0JBQUVBTEFBQUFBQW9BQ2dBQUFLVkRJNFl5MjJabklOUk5xb3N3MEJ2N2kxZ3lIVWtGajdvU2FXbHUzb3ZDOEd4TnNvNWZsdXozcUxWaEJWZVQvTHo3WlRIeXhMNWREYWxRV1BWT3NRV3RSbnV3WGFGVGo5alZWaDhwbWE5SmpaNHpZU2o1Wk95bWE3dXVvbGZmaCtJUjVhVzk3Y0h1QlVYS0dLWGxLam4rRGlIV01jWUphaDROMGxZQ01sSk9YaXBHUnI1cWRnb1NUcnFXU3E2V0ZsMnlwb2FVQUFBSWZrRUNRRUFBUUFzQUFBQUFDZ0FLQUFBQXBhRWI2SExnZC9pTzdGTld0Y0ZXZSt1Zk9ER2pSZm9pSjJha1NoYnVlYjB3dEk1MHptMDJwYnZ3ZldFTVdCUTF6S0dsTEloc2tpRVBtOVI2dlJYeFY0WnpXVDJ5SE9HcFdNeW9yYmxLbE5wOEhtSEViL2xDWGpjVzdibXRYUDhYdDIyOU9WV1IxZm9kMmVXcU5mSHVNalhDUGtJR05pbGVPaUltVm1DT0Vtb1NmbjN5WGxKV21vSEdocXA2aWxZdVdZcG1UcUtVZ0FBSWZrRUNRRUFBUUFzQUFBQUFDZ0FLQUFBQXBpRUg2a2I1OGJpUTNGTld0TUZXVzNlTlZjb2p1RkdmcW5acVNlYnVTMDZ3NVY4MC9YMDJwS2U4ekZ3UDZFRldPVDFsREZrOHJHRVJoMVRUTk9vY1E2MUhtNFhtMlZleFVIcHpqeW1WaUhyRmJpRUxzZWZWcm42WEtmbnQyUTlHLytYZGllNDk5WEhkMmc0aDdpb09HaFhHSmJvR0FuWFNCbm9Cd0tZeWZpb3ViWkoySG4wUnVSWmFmbFpPaWw1NlpwNmlpb0tTWHBVQUFBaCtRUUpBUUFCQUN3QUFBQUFLQUFvQUFBQ2tvUVJxUnZueHVJN2tVMWExVVU1YmQ1dG5TZU9aWGhtbjVsV0szcU5UV3ZSZFF4UDhxdmFDKy95YVlRelhPN0JNdmFVRW1KUmQzVHNpTUFnc3dtTllyU2daZFlyVFg2dFNIR1pPNzNlenVBdzJ1eHVRK0JiZVpmTXhzZXhZMzUrL1FlNEoxaW5WMGc0eDNXSHVNaElsMmpYT0tUMlErVlU1ZmdvU1VJNTJWZlp5ZmtKR2toYTZqbVkrYWFZZGlycStsUUFBQ0g1QkFrQkFBRUFMQUFBQUFBb0FDZ0FBQUtXQklLcFllMEwzWU5LVG9xc3dVbHZ6bmlnZDR3aVI0S2hackt0OVVwcWlwNjFpOUUzdk12eFJkSGxiRUZpRVhmazlZQVJZeE9aWkQ2VlEycFV1bkJtdFJYbzFMZjhoTVZWY05sOEphZlYzOGFNMi9GdTVWMTZCbjYzcjZ4dDk3ajA5K01YU0ZpNEJuaUdGYWUzaHpiSDkraFlCemtwdVVoNWFabUh1YW5aT1pnSXV2YkdpTmVvbUNuYXh4YXAydXBhQ1pzcSsxa0FBQ0g1QkFrQkFBRUFMQUFBQUFBb0FDZ0FBQUtYakk4Qnk1emY0a094VFZyWE5WbHYxWDBkOElHWkdLTG5OcFl0bThMcjljcVZldU9TdmZPVzc5RDlhREhpek5oREppZEZaaE55ZEVhaE9hREg2bm9tdEpqcDF0dXRLb05Xa3ZBNkpxZlJWTEhVL1FVZmF1OWwyeDdHNTRkMWZsOTk1eGNJR0FkWHFNZkJOYWRvWXJoSCtNZzJLQmxwVnBibHVDaVhtTW5aMlNoNEdCcUorY2tJT3FxSjZMbUtTbGxabXNvcTZ3cFFBQUFoK1FRSkFRQUJBQ3dBQUFBQUtBQW9BQUFDbFl4L29Mdm94dUpEa1UxYTFZVVpiSjU5blNkMlpYaFdxYlJhMi9nRjhHdTJEWTNpcXM3eXJxK3hCWUVrWXZGU004YVNTT2JFK1pnUmwxQkhGWk5yN3BSQ2F2WjVCVzIxNDJoWTNBTi96V3RzbWYxMnA5WHh4RmwybHBMbjFyc2V6dGZYWmpkSVdJZjJzNWRJdHdqWUtCZ285eWc1cEhnekpYVEVlR2xadWVucHlQbXBHUW9LT1drWW1TcGFTbnFLaWxlSTJGQUFBQ0g1QkFrQkFBRUFMQUFBQUFBb0FDZ0FBQUtWakIrZ3Urakc0a09SVFZyVmhSbHNubjJkSjNabGVGYXB0RnJiK0NYbU85T296ZUw1VmZQOTlIdkFXaHBpVWRjd2twQkgzODI1QXdZZFU4eFRxbExHaHRDb3NBcktNcHZmYTFtTVJhZTlWdldaZmVCMlhmUGtlTG1tMThsVWNCaitwNWRuTjhqWFozWUlHRWhZdU9VbjQ1YW9DRGtwMTZobDVJallKdmpXS2Nub0dRcHF5UGxwT2hyM2FFbGFxcnE1NkJxN1ZBQUFPdz09XFxcIik7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcblxcdGZpbHRlcjogYWxwaGEob3BhY2l0eT0yNSk7IC8qIHN1cHBvcnQ6IElFOCAqL1xcblxcdG9wYWNpdHk6IDAuMjU7XFxufVxcbi51aS1wcm9ncmVzc2Jhci1pbmRldGVybWluYXRlIC51aS1wcm9ncmVzc2Jhci12YWx1ZSB7XFxuXFx0YmFja2dyb3VuZC1pbWFnZTogbm9uZTtcXG59XFxuLnVpLXNlbGVjdGFibGUge1xcblxcdC1tcy10b3VjaC1hY3Rpb246IG5vbmU7XFxuXFx0dG91Y2gtYWN0aW9uOiBub25lO1xcbn1cXG4udWktc2VsZWN0YWJsZS1oZWxwZXIge1xcblxcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG5cXHR6LWluZGV4OiAxMDA7XFxuXFx0Ym9yZGVyOiAxcHggZG90dGVkIGJsYWNrO1xcbn1cXG4udWktc2VsZWN0bWVudS1tZW51IHtcXG5cXHRwYWRkaW5nOiAwO1xcblxcdG1hcmdpbjogMDtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0dG9wOiAwO1xcblxcdGxlZnQ6IDA7XFxuXFx0ZGlzcGxheTogbm9uZTtcXG59XFxuLnVpLXNlbGVjdG1lbnUtbWVudSAudWktbWVudSB7XFxuXFx0b3ZlcmZsb3c6IGF1dG87XFxuXFx0b3ZlcmZsb3cteDogaGlkZGVuO1xcblxcdHBhZGRpbmctYm90dG9tOiAxcHg7XFxufVxcbi51aS1zZWxlY3RtZW51LW1lbnUgLnVpLW1lbnUgLnVpLXNlbGVjdG1lbnUtb3B0Z3JvdXAge1xcblxcdGZvbnQtc2l6ZTogMWVtO1xcblxcdGZvbnQtd2VpZ2h0OiBib2xkO1xcblxcdGxpbmUtaGVpZ2h0OiAxLjU7XFxuXFx0cGFkZGluZzogMnB4IDAuNGVtO1xcblxcdG1hcmdpbjogMC41ZW0gMCAwIDA7XFxuXFx0aGVpZ2h0OiBhdXRvO1xcblxcdGJvcmRlcjogMDtcXG59XFxuLnVpLXNlbGVjdG1lbnUtb3BlbiB7XFxuXFx0ZGlzcGxheTogYmxvY2s7XFxufVxcbi51aS1zZWxlY3RtZW51LXRleHQge1xcblxcdGRpc3BsYXk6IGJsb2NrO1xcblxcdG1hcmdpbi1yaWdodDogMjBweDtcXG5cXHRvdmVyZmxvdzogaGlkZGVuO1xcblxcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbn1cXG4udWktc2VsZWN0bWVudS1idXR0b24udWktYnV0dG9uIHtcXG5cXHR0ZXh0LWFsaWduOiBsZWZ0O1xcblxcdHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuXFx0d2lkdGg6IDE0ZW07XFxufVxcbi51aS1zZWxlY3RtZW51LWljb24udWktaWNvbiB7XFxuXFx0ZmxvYXQ6IHJpZ2h0O1xcblxcdG1hcmdpbi10b3A6IDA7XFxufVxcbi51aS1zbGlkZXIge1xcblxcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cXHR0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG4udWktc2xpZGVyIC51aS1zbGlkZXItaGFuZGxlIHtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0ei1pbmRleDogMjtcXG5cXHR3aWR0aDogMS4yZW07XFxuXFx0aGVpZ2h0OiAxLjJlbTtcXG5cXHRjdXJzb3I6IGRlZmF1bHQ7XFxuXFx0LW1zLXRvdWNoLWFjdGlvbjogbm9uZTtcXG5cXHR0b3VjaC1hY3Rpb246IG5vbmU7XFxufVxcbi51aS1zbGlkZXIgLnVpLXNsaWRlci1yYW5nZSB7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdHotaW5kZXg6IDE7XFxuXFx0Zm9udC1zaXplOiAuN2VtO1xcblxcdGRpc3BsYXk6IGJsb2NrO1xcblxcdGJvcmRlcjogMDtcXG5cXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7XFxufVxcblxcbi8qIHN1cHBvcnQ6IElFOCAtIFNlZSAjNjcyNyAqL1xcbi51aS1zbGlkZXIudWktc3RhdGUtZGlzYWJsZWQgLnVpLXNsaWRlci1oYW5kbGUsXFxuLnVpLXNsaWRlci51aS1zdGF0ZS1kaXNhYmxlZCAudWktc2xpZGVyLXJhbmdlIHtcXG5cXHRmaWx0ZXI6IGluaGVyaXQ7XFxufVxcblxcbi51aS1zbGlkZXItaG9yaXpvbnRhbCB7XFxuXFx0aGVpZ2h0OiAuOGVtO1xcbn1cXG4udWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1oYW5kbGUge1xcblxcdHRvcDogLS4zZW07XFxuXFx0bWFyZ2luLWxlZnQ6IC0uNmVtO1xcbn1cXG4udWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1yYW5nZSB7XFxuXFx0dG9wOiAwO1xcblxcdGhlaWdodDogMTAwJTtcXG59XFxuLnVpLXNsaWRlci1ob3Jpem9udGFsIC51aS1zbGlkZXItcmFuZ2UtbWluIHtcXG5cXHRsZWZ0OiAwO1xcbn1cXG4udWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1yYW5nZS1tYXgge1xcblxcdHJpZ2h0OiAwO1xcbn1cXG5cXG4udWktc2xpZGVyLXZlcnRpY2FsIHtcXG5cXHR3aWR0aDogLjhlbTtcXG5cXHRoZWlnaHQ6IDEwMHB4O1xcbn1cXG4udWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItaGFuZGxlIHtcXG5cXHRsZWZ0OiAtLjNlbTtcXG5cXHRtYXJnaW4tbGVmdDogMDtcXG5cXHRtYXJnaW4tYm90dG9tOiAtLjZlbTtcXG59XFxuLnVpLXNsaWRlci12ZXJ0aWNhbCAudWktc2xpZGVyLXJhbmdlIHtcXG5cXHRsZWZ0OiAwO1xcblxcdHdpZHRoOiAxMDAlO1xcbn1cXG4udWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItcmFuZ2UtbWluIHtcXG5cXHRib3R0b206IDA7XFxufVxcbi51aS1zbGlkZXItdmVydGljYWwgLnVpLXNsaWRlci1yYW5nZS1tYXgge1xcblxcdHRvcDogMDtcXG59XFxuLnVpLXNvcnRhYmxlLWhhbmRsZSB7XFxuXFx0LW1zLXRvdWNoLWFjdGlvbjogbm9uZTtcXG5cXHR0b3VjaC1hY3Rpb246IG5vbmU7XFxufVxcbi51aS1zcGlubmVyIHtcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7XFxuXFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xcblxcdG92ZXJmbG93OiBoaWRkZW47XFxuXFx0cGFkZGluZzogMDtcXG5cXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4udWktc3Bpbm5lci1pbnB1dCB7XFxuXFx0Ym9yZGVyOiBub25lO1xcblxcdGJhY2tncm91bmQ6IG5vbmU7XFxuXFx0Y29sb3I6IGluaGVyaXQ7XFxuXFx0cGFkZGluZzogLjIyMmVtIDA7XFxuXFx0bWFyZ2luOiAuMmVtIDA7XFxuXFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG5cXHRtYXJnaW4tbGVmdDogLjRlbTtcXG5cXHRtYXJnaW4tcmlnaHQ6IDJlbTtcXG59XFxuLnVpLXNwaW5uZXItYnV0dG9uIHtcXG5cXHR3aWR0aDogMS42ZW07XFxuXFx0aGVpZ2h0OiA1MCU7XFxuXFx0Zm9udC1zaXplOiAuNWVtO1xcblxcdHBhZGRpbmc6IDA7XFxuXFx0bWFyZ2luOiAwO1xcblxcdHRleHQtYWxpZ246IGNlbnRlcjtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0Y3Vyc29yOiBkZWZhdWx0O1xcblxcdGRpc3BsYXk6IGJsb2NrO1xcblxcdG92ZXJmbG93OiBoaWRkZW47XFxuXFx0cmlnaHQ6IDA7XFxufVxcbi8qIG1vcmUgc3BlY2lmaWNpdHkgcmVxdWlyZWQgaGVyZSB0byBvdmVycmlkZSBkZWZhdWx0IGJvcmRlcnMgKi9cXG4udWktc3Bpbm5lciBhLnVpLXNwaW5uZXItYnV0dG9uIHtcXG5cXHRib3JkZXItdG9wLXN0eWxlOiBub25lO1xcblxcdGJvcmRlci1ib3R0b20tc3R5bGU6IG5vbmU7XFxuXFx0Ym9yZGVyLXJpZ2h0LXN0eWxlOiBub25lO1xcbn1cXG4udWktc3Bpbm5lci11cCB7XFxuXFx0dG9wOiAwO1xcbn1cXG4udWktc3Bpbm5lci1kb3duIHtcXG5cXHRib3R0b206IDA7XFxufVxcbi51aS10YWJzIHtcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7LyogcG9zaXRpb246IHJlbGF0aXZlIHByZXZlbnRzIElFIHNjcm9sbCBidWcgKGVsZW1lbnQgd2l0aCBwb3NpdGlvbjogcmVsYXRpdmUgaW5zaWRlIGNvbnRhaW5lciB3aXRoIG92ZXJmbG93OiBhdXRvIGFwcGVhciBhcyBcXFwiZml4ZWRcXFwiKSAqL1xcblxcdHBhZGRpbmc6IC4yZW07XFxufVxcbi51aS10YWJzIC51aS10YWJzLW5hdiB7XFxuXFx0bWFyZ2luOiAwO1xcblxcdHBhZGRpbmc6IC4yZW0gLjJlbSAwO1xcbn1cXG4udWktdGFicyAudWktdGFicy1uYXYgbGkge1xcblxcdGxpc3Qtc3R5bGU6IG5vbmU7XFxuXFx0ZmxvYXQ6IGxlZnQ7XFxuXFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblxcdHRvcDogMDtcXG5cXHRtYXJnaW46IDFweCAuMmVtIDAgMDtcXG5cXHRib3JkZXItYm90dG9tLXdpZHRoOiAwO1xcblxcdHBhZGRpbmc6IDA7XFxuXFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcXG59XFxuLnVpLXRhYnMgLnVpLXRhYnMtbmF2IC51aS10YWJzLWFuY2hvciB7XFxuXFx0ZmxvYXQ6IGxlZnQ7XFxuXFx0cGFkZGluZzogLjVlbSAxZW07XFxuXFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG4udWktdGFicyAudWktdGFicy1uYXYgbGkudWktdGFicy1hY3RpdmUge1xcblxcdG1hcmdpbi1ib3R0b206IC0xcHg7XFxuXFx0cGFkZGluZy1ib3R0b206IDFweDtcXG59XFxuLnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpLnVpLXRhYnMtYWN0aXZlIC51aS10YWJzLWFuY2hvcixcXG4udWktdGFicyAudWktdGFicy1uYXYgbGkudWktc3RhdGUtZGlzYWJsZWQgLnVpLXRhYnMtYW5jaG9yLFxcbi51aS10YWJzIC51aS10YWJzLW5hdiBsaS51aS10YWJzLWxvYWRpbmcgLnVpLXRhYnMtYW5jaG9yIHtcXG5cXHRjdXJzb3I6IHRleHQ7XFxufVxcbi51aS10YWJzLWNvbGxhcHNpYmxlIC51aS10YWJzLW5hdiBsaS51aS10YWJzLWFjdGl2ZSAudWktdGFicy1hbmNob3Ige1xcblxcdGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnVpLXRhYnMgLnVpLXRhYnMtcGFuZWwge1xcblxcdGRpc3BsYXk6IGJsb2NrO1xcblxcdGJvcmRlci13aWR0aDogMDtcXG5cXHRwYWRkaW5nOiAxZW0gMS40ZW07XFxuXFx0YmFja2dyb3VuZDogbm9uZTtcXG59XFxuLnVpLXRvb2x0aXAge1xcblxcdHBhZGRpbmc6IDhweDtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0ei1pbmRleDogOTk5OTtcXG5cXHRtYXgtd2lkdGg6IDMwMHB4O1xcbn1cXG5ib2R5IC51aS10b29sdGlwIHtcXG5cXHRib3JkZXItd2lkdGg6IDJweDtcXG59XFxuXFxuLyogQ29tcG9uZW50IGNvbnRhaW5lcnNcXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cXG4udWktd2lkZ2V0IHtcXG5cXHRmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7XFxuXFx0Zm9udC1zaXplOiAxZW07XFxufVxcbi51aS13aWRnZXQgLnVpLXdpZGdldCB7XFxuXFx0Zm9udC1zaXplOiAxZW07XFxufVxcbi51aS13aWRnZXQgaW5wdXQsXFxuLnVpLXdpZGdldCBzZWxlY3QsXFxuLnVpLXdpZGdldCB0ZXh0YXJlYSxcXG4udWktd2lkZ2V0IGJ1dHRvbiB7XFxuXFx0Zm9udC1mYW1pbHk6IEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO1xcblxcdGZvbnQtc2l6ZTogMWVtO1xcbn1cXG4udWktd2lkZ2V0LnVpLXdpZGdldC1jb250ZW50IHtcXG5cXHRib3JkZXI6IDFweCBzb2xpZCAjYzVjNWM1O1xcbn1cXG4udWktd2lkZ2V0LWNvbnRlbnQge1xcblxcdGJvcmRlcjogMXB4IHNvbGlkICNkZGRkZGQ7XFxuXFx0YmFja2dyb3VuZDogI2ZmZmZmZjtcXG5cXHRjb2xvcjogIzMzMzMzMztcXG59XFxuLnVpLXdpZGdldC1jb250ZW50IGEge1xcblxcdGNvbG9yOiAjMzMzMzMzO1xcbn1cXG4udWktd2lkZ2V0LWhlYWRlciB7XFxuXFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZGRkZDtcXG5cXHRiYWNrZ3JvdW5kOiAjZTllOWU5O1xcblxcdGNvbG9yOiAjMzMzMzMzO1xcblxcdGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG4udWktd2lkZ2V0LWhlYWRlciBhIHtcXG5cXHRjb2xvcjogIzMzMzMzMztcXG59XFxuXFxuLyogSW50ZXJhY3Rpb24gc3RhdGVzXFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuLnVpLXN0YXRlLWRlZmF1bHQsXFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kZWZhdWx0LFxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1kZWZhdWx0LFxcbi51aS1idXR0b24sXFxuXFxuLyogV2UgdXNlIGh0bWwgaGVyZSBiZWNhdXNlIHdlIG5lZWQgYSBncmVhdGVyIHNwZWNpZmljaXR5IHRvIG1ha2Ugc3VyZSBkaXNhYmxlZFxcbndvcmtzIHByb3Blcmx5IHdoZW4gY2xpY2tlZCBvciBob3ZlcmVkICovXFxuaHRtbCAudWktYnV0dG9uLnVpLXN0YXRlLWRpc2FibGVkOmhvdmVyLFxcbmh0bWwgLnVpLWJ1dHRvbi51aS1zdGF0ZS1kaXNhYmxlZDphY3RpdmUge1xcblxcdGJvcmRlcjogMXB4IHNvbGlkICNjNWM1YzU7XFxuXFx0YmFja2dyb3VuZDogI2Y2ZjZmNjtcXG5cXHRmb250LXdlaWdodDogbm9ybWFsO1xcblxcdGNvbG9yOiAjNDU0NTQ1O1xcbn1cXG4udWktc3RhdGUtZGVmYXVsdCBhLFxcbi51aS1zdGF0ZS1kZWZhdWx0IGE6bGluayxcXG4udWktc3RhdGUtZGVmYXVsdCBhOnZpc2l0ZWQsXFxuYS51aS1idXR0b24sXFxuYTpsaW5rLnVpLWJ1dHRvbixcXG5hOnZpc2l0ZWQudWktYnV0dG9uLFxcbi51aS1idXR0b24ge1xcblxcdGNvbG9yOiAjNDU0NTQ1O1xcblxcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuLnVpLXN0YXRlLWhvdmVyLFxcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaG92ZXIsXFxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhvdmVyLFxcbi51aS1zdGF0ZS1mb2N1cyxcXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWZvY3VzLFxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1mb2N1cyxcXG4udWktYnV0dG9uOmhvdmVyLFxcbi51aS1idXR0b246Zm9jdXMge1xcblxcdGJvcmRlcjogMXB4IHNvbGlkICNjY2NjY2M7XFxuXFx0YmFja2dyb3VuZDogI2VkZWRlZDtcXG5cXHRmb250LXdlaWdodDogbm9ybWFsO1xcblxcdGNvbG9yOiAjMmIyYjJiO1xcbn1cXG4udWktc3RhdGUtaG92ZXIgYSxcXG4udWktc3RhdGUtaG92ZXIgYTpob3ZlcixcXG4udWktc3RhdGUtaG92ZXIgYTpsaW5rLFxcbi51aS1zdGF0ZS1ob3ZlciBhOnZpc2l0ZWQsXFxuLnVpLXN0YXRlLWZvY3VzIGEsXFxuLnVpLXN0YXRlLWZvY3VzIGE6aG92ZXIsXFxuLnVpLXN0YXRlLWZvY3VzIGE6bGluayxcXG4udWktc3RhdGUtZm9jdXMgYTp2aXNpdGVkLFxcbmEudWktYnV0dG9uOmhvdmVyLFxcbmEudWktYnV0dG9uOmZvY3VzIHtcXG5cXHRjb2xvcjogIzJiMmIyYjtcXG5cXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi51aS12aXN1YWwtZm9jdXMge1xcblxcdGJveC1zaGFkb3c6IDAgMCAzcHggMXB4IHJnYig5NCwgMTU4LCAyMTQpO1xcbn1cXG4udWktc3RhdGUtYWN0aXZlLFxcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtYWN0aXZlLFxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1hY3RpdmUsXFxuYS51aS1idXR0b246YWN0aXZlLFxcbi51aS1idXR0b246YWN0aXZlLFxcbi51aS1idXR0b24udWktc3RhdGUtYWN0aXZlOmhvdmVyIHtcXG5cXHRib3JkZXI6IDFweCBzb2xpZCAjMDAzZWZmO1xcblxcdGJhY2tncm91bmQ6ICMwMDdmZmY7XFxuXFx0Zm9udC13ZWlnaHQ6IG5vcm1hbDtcXG5cXHRjb2xvcjogI2ZmZmZmZjtcXG59XFxuLnVpLWljb24tYmFja2dyb3VuZCxcXG4udWktc3RhdGUtYWN0aXZlIC51aS1pY29uLWJhY2tncm91bmQge1xcblxcdGJvcmRlcjogIzAwM2VmZjtcXG5cXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xcbn1cXG4udWktc3RhdGUtYWN0aXZlIGEsXFxuLnVpLXN0YXRlLWFjdGl2ZSBhOmxpbmssXFxuLnVpLXN0YXRlLWFjdGl2ZSBhOnZpc2l0ZWQge1xcblxcdGNvbG9yOiAjZmZmZmZmO1xcblxcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLyogSW50ZXJhY3Rpb24gQ3Vlc1xcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcbi51aS1zdGF0ZS1oaWdobGlnaHQsXFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1oaWdobGlnaHQsXFxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodCB7XFxuXFx0Ym9yZGVyOiAxcHggc29saWQgI2RhZDU1ZTtcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmYTkwO1xcblxcdGNvbG9yOiAjNzc3NjIwO1xcbn1cXG4udWktc3RhdGUtY2hlY2tlZCB7XFxuXFx0Ym9yZGVyOiAxcHggc29saWQgI2RhZDU1ZTtcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmYTkwO1xcbn1cXG4udWktc3RhdGUtaGlnaGxpZ2h0IGEsXFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1oaWdobGlnaHQgYSxcXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaGlnaGxpZ2h0IGEge1xcblxcdGNvbG9yOiAjNzc3NjIwO1xcbn1cXG4udWktc3RhdGUtZXJyb3IsXFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvcixcXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3Ige1xcblxcdGJvcmRlcjogMXB4IHNvbGlkICNmMWE4OTk7XFxuXFx0YmFja2dyb3VuZDogI2ZkZGZkZjtcXG5cXHRjb2xvcjogIzVmM2YzZjtcXG59XFxuLnVpLXN0YXRlLWVycm9yIGEsXFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciBhLFxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvciBhIHtcXG5cXHRjb2xvcjogIzVmM2YzZjtcXG59XFxuLnVpLXN0YXRlLWVycm9yLXRleHQsXFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvci10ZXh0LFxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvci10ZXh0IHtcXG5cXHRjb2xvcjogIzVmM2YzZjtcXG59XFxuLnVpLXByaW9yaXR5LXByaW1hcnksXFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1wcmltYXJ5LFxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1wcmlvcml0eS1wcmltYXJ5IHtcXG5cXHRmb250LXdlaWdodDogYm9sZDtcXG59XFxuLnVpLXByaW9yaXR5LXNlY29uZGFyeSxcXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXByaW9yaXR5LXNlY29uZGFyeSxcXG4udWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktc2Vjb25kYXJ5IHtcXG5cXHRvcGFjaXR5OiAuNztcXG5cXHRmaWx0ZXI6QWxwaGEoT3BhY2l0eT03MCk7IC8qIHN1cHBvcnQ6IElFOCAqL1xcblxcdGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxufVxcbi51aS1zdGF0ZS1kaXNhYmxlZCxcXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWRpc2FibGVkLFxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1kaXNhYmxlZCB7XFxuXFx0b3BhY2l0eTogLjM1O1xcblxcdGZpbHRlcjpBbHBoYShPcGFjaXR5PTM1KTsgLyogc3VwcG9ydDogSUU4ICovXFxuXFx0YmFja2dyb3VuZC1pbWFnZTogbm9uZTtcXG59XFxuLnVpLXN0YXRlLWRpc2FibGVkIC51aS1pY29uIHtcXG5cXHRmaWx0ZXI6QWxwaGEoT3BhY2l0eT0zNSk7IC8qIHN1cHBvcnQ6IElFOCAtIFNlZSAjNjA1OSAqL1xcbn1cXG5cXG4vKiBJY29uc1xcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcblxcbi8qIHN0YXRlcyBhbmQgaW1hZ2VzICovXFxuLnVpLWljb24ge1xcblxcdHdpZHRoOiAxNnB4O1xcblxcdGhlaWdodDogMTZweDtcXG59XFxuLnVpLWljb24sXFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1pY29uIHtcXG5cXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImltYWdlcy91aS1pY29uc180NDQ0NDRfMjU2eDI0MC5wbmdcXFwiKTtcXG59XFxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLWljb24ge1xcblxcdGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiaW1hZ2VzL3VpLWljb25zXzQ0NDQ0NF8yNTZ4MjQwLnBuZ1xcXCIpO1xcbn1cXG4udWktc3RhdGUtaG92ZXIgLnVpLWljb24sXFxuLnVpLXN0YXRlLWZvY3VzIC51aS1pY29uLFxcbi51aS1idXR0b246aG92ZXIgLnVpLWljb24sXFxuLnVpLWJ1dHRvbjpmb2N1cyAudWktaWNvbiB7XFxuXFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJpbWFnZXMvdWktaWNvbnNfNTU1NTU1XzI1NngyNDAucG5nXFxcIik7XFxufVxcbi51aS1zdGF0ZS1hY3RpdmUgLnVpLWljb24sXFxuLnVpLWJ1dHRvbjphY3RpdmUgLnVpLWljb24ge1xcblxcdGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiaW1hZ2VzL3VpLWljb25zX2ZmZmZmZl8yNTZ4MjQwLnBuZ1xcXCIpO1xcbn1cXG4udWktc3RhdGUtaGlnaGxpZ2h0IC51aS1pY29uLFxcbi51aS1idXR0b24gLnVpLXN0YXRlLWhpZ2hsaWdodC51aS1pY29uIHtcXG5cXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImltYWdlcy91aS1pY29uc183Nzc2MjBfMjU2eDI0MC5wbmdcXFwiKTtcXG59XFxuLnVpLXN0YXRlLWVycm9yIC51aS1pY29uLFxcbi51aS1zdGF0ZS1lcnJvci10ZXh0IC51aS1pY29uIHtcXG5cXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImltYWdlcy91aS1pY29uc19jYzAwMDBfMjU2eDI0MC5wbmdcXFwiKTtcXG59XFxuLnVpLWJ1dHRvbiAudWktaWNvbiB7XFxuXFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJpbWFnZXMvdWktaWNvbnNfNzc3Nzc3XzI1NngyNDAucG5nXFxcIik7XFxufVxcblxcbi8qIHBvc2l0aW9uaW5nICovXFxuLnVpLWljb24tYmxhbmsgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxNnB4IDE2cHg7IH1cXG4udWktaWNvbi1jYXJldC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7IH1cXG4udWktaWNvbi1jYXJldC0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggMDsgfVxcbi51aS1pY29uLWNhcmV0LTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IDA7IH1cXG4udWktaWNvbi1jYXJldC0xLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggMDsgfVxcbi51aS1pY29uLWNhcmV0LTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NXB4IDA7IH1cXG4udWktaWNvbi1jYXJldC0xLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggMDsgfVxcbi51aS1pY29uLWNhcmV0LTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IDA7IH1cXG4udWktaWNvbi1jYXJldC0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IDA7IH1cXG4udWktaWNvbi1jYXJldC0yLW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAwOyB9XFxuLnVpLWljb24tY2FyZXQtMi1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggMDsgfVxcbi51aS1pY29uLXRyaWFuZ2xlLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE2cHg7IH1cXG4udWktaWNvbi10cmlhbmdsZS0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE2cHg7IH1cXG4udWktaWNvbi10cmlhbmdsZS0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTZweDsgfVxcbi51aS1pY29uLXRyaWFuZ2xlLTEtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTZweDsgfVxcbi51aS1pY29uLXRyaWFuZ2xlLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NXB4IC0xNnB4OyB9XFxuLnVpLWljb24tdHJpYW5nbGUtMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNnB4OyB9XFxuLnVpLWljb24tdHJpYW5nbGUtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2cHg7IH1cXG4udWktaWNvbi10cmlhbmdsZS0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNnB4OyB9XFxuLnVpLWljb24tdHJpYW5nbGUtMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE2cHg7IH1cXG4udWktaWNvbi10cmlhbmdsZS0yLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTZweDsgfVxcbi51aS1pY29uLWFycm93LTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTMycHg7IH1cXG4udWktaWNvbi1hcnJvdy0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTMycHg7IH1cXG4udWktaWNvbi1hcnJvdy0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMzJweDsgfVxcbi51aS1pY29uLWFycm93LTEtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMzJweDsgfVxcbi51aS1pY29uLWFycm93LTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NXB4IC0zMnB4OyB9XFxuLnVpLWljb24tYXJyb3ctMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0zMnB4OyB9XFxuLnVpLWljb24tYXJyb3ctMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTMycHg7IH1cXG4udWktaWNvbi1hcnJvdy0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0zMnB4OyB9XFxuLnVpLWljb24tYXJyb3ctMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTMycHg7IH1cXG4udWktaWNvbi1hcnJvdy0yLW5lLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0zMnB4OyB9XFxuLnVpLWljb24tYXJyb3ctMi1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTMycHg7IH1cXG4udWktaWNvbi1hcnJvdy0yLXNlLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0zMnB4OyB9XFxuLnVpLWljb24tYXJyb3dzdG9wLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMzJweDsgfVxcbi51aS1pY29uLWFycm93c3RvcC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTMycHg7IH1cXG4udWktaWNvbi1hcnJvd3N0b3AtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0zMnB4OyB9XFxuLnVpLWljb24tYXJyb3dzdG9wLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMzJweDsgfVxcbi51aS1pY29uLWFycm93dGhpY2stMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMXB4IC00OHB4OyB9XFxuLnVpLWljb24tYXJyb3d0aGljay0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTQ4cHg7IH1cXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC00OHB4OyB9XFxuLnVpLWljb24tYXJyb3d0aGljay0xLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTQ4cHg7IH1cXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC00OHB4OyB9XFxuLnVpLWljb24tYXJyb3d0aGljay0xLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTQ4cHg7IH1cXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC00OHB4OyB9XFxuLnVpLWljb24tYXJyb3d0aGljay0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC00OHB4OyB9XFxuLnVpLWljb24tYXJyb3d0aGljay0yLW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtNDhweDsgfVxcbi51aS1pY29uLWFycm93dGhpY2stMi1uZS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtNDhweDsgfVxcbi51aS1pY29uLWFycm93dGhpY2stMi1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTQ4cHg7IH1cXG4udWktaWNvbi1hcnJvd3RoaWNrLTItc2UtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTQ4cHg7IH1cXG4udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTQ4cHg7IH1cXG4udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTQ4cHg7IH1cXG4udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTQ4cHg7IH1cXG4udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTQ4cHg7IH1cXG4udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTY0cHg7IH1cXG4udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC02NHB4OyB9XFxuLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtNjRweDsgfVxcbi51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTY0cHg7IH1cXG4udWktaWNvbi1hcnJvd3JldHVybi0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtNjRweDsgfVxcbi51aS1pY29uLWFycm93cmV0dXJuLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC02NHB4OyB9XFxuLnVpLWljb24tYXJyb3dyZXR1cm4tMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTY0cHg7IH1cXG4udWktaWNvbi1hcnJvd3JldHVybi0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTY0cHg7IH1cXG4udWktaWNvbi1hcnJvd3JlZnJlc2gtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC02NHB4OyB9XFxuLnVpLWljb24tYXJyb3dyZWZyZXNoLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtNjRweDsgfVxcbi51aS1pY29uLWFycm93cmVmcmVzaC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTY0cHg7IH1cXG4udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC02NHB4OyB9XFxuLnVpLWljb24tYXJyb3ctNCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTgwcHg7IH1cXG4udWktaWNvbi1hcnJvdy00LWRpYWcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtODBweDsgfVxcbi51aS1pY29uLWV4dGxpbmsgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtODBweDsgfVxcbi51aS1pY29uLW5ld3dpbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC04MHB4OyB9XFxuLnVpLWljb24tcmVmcmVzaCB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC04MHB4OyB9XFxuLnVpLWljb24tc2h1ZmZsZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC04MHB4OyB9XFxuLnVpLWljb24tdHJhbnNmZXItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTgwcHg7IH1cXG4udWktaWNvbi10cmFuc2ZlcnRoaWNrLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtODBweDsgfVxcbi51aS1pY29uLWZvbGRlci1jb2xsYXBzZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4OyB9XFxuLnVpLWljb24tZm9sZGVyLW9wZW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtOTZweDsgfVxcbi51aS1pY29uLWRvY3VtZW50IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTk2cHg7IH1cXG4udWktaWNvbi1kb2N1bWVudC1iIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTk2cHg7IH1cXG4udWktaWNvbi1ub3RlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTk2cHg7IH1cXG4udWktaWNvbi1tYWlsLWNsb3NlZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC05NnB4OyB9XFxuLnVpLWljb24tbWFpbC1vcGVuIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTk2cHg7IH1cXG4udWktaWNvbi1zdWl0Y2FzZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtOTZweDsgfVxcbi51aS1pY29uLWNvbW1lbnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTk2cHg7IH1cXG4udWktaWNvbi1wZXJzb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTk2cHg7IH1cXG4udWktaWNvbi1wcmludCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtOTZweDsgfVxcbi51aS1pY29uLXRyYXNoIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC05NnB4OyB9XFxuLnVpLWljb24tbG9ja2VkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC05NnB4OyB9XFxuLnVpLWljb24tdW5sb2NrZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTk2cHg7IH1cXG4udWktaWNvbi1ib29rbWFyayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtOTZweDsgfVxcbi51aS1pY29uLXRhZyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtOTZweDsgfVxcbi51aS1pY29uLWhvbWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMTJweDsgfVxcbi51aS1pY29uLWZsYWcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTEycHg7IH1cXG4udWktaWNvbi1jYWxlbmRhciB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xMTJweDsgfVxcbi51aS1pY29uLWNhcnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTEycHg7IH1cXG4udWktaWNvbi1wZW5jaWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTEycHg7IH1cXG4udWktaWNvbi1jbG9jayB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xMTJweDsgfVxcbi51aS1pY29uLWRpc2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTEycHg7IH1cXG4udWktaWNvbi1jYWxjdWxhdG9yIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xMTJweDsgfVxcbi51aS1pY29uLXpvb21pbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTEycHg7IH1cXG4udWktaWNvbi16b29tb3V0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xMTJweDsgfVxcbi51aS1pY29uLXNlYXJjaCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTEycHg7IH1cXG4udWktaWNvbi13cmVuY2ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTExMnB4OyB9XFxuLnVpLWljb24tZ2VhciB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTEycHg7IH1cXG4udWktaWNvbi1oZWFydCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTEycHg7IH1cXG4udWktaWNvbi1zdGFyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xMTJweDsgfVxcbi51aS1pY29uLWxpbmsgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTExMnB4OyB9XFxuLnVpLWljb24tY2FuY2VsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTI4cHg7IH1cXG4udWktaWNvbi1wbHVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTEyOHB4OyB9XFxuLnVpLWljb24tcGx1c3RoaWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTEyOHB4OyB9XFxuLnVpLWljb24tbWludXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTI4cHg7IH1cXG4udWktaWNvbi1taW51c3RoaWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTEyOHB4OyB9XFxuLnVpLWljb24tY2xvc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTI4cHg7IH1cXG4udWktaWNvbi1jbG9zZXRoaWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTEyOHB4OyB9XFxuLnVpLWljb24ta2V5IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xMjhweDsgfVxcbi51aS1pY29uLWxpZ2h0YnVsYiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTI4cHg7IH1cXG4udWktaWNvbi1zY2lzc29ycyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTI4cHg7IH1cXG4udWktaWNvbi1jbGlwYm9hcmQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTEyOHB4OyB9XFxuLnVpLWljb24tY29weSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTI4cHg7IH1cXG4udWktaWNvbi1jb250YWN0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xMjhweDsgfVxcbi51aS1pY29uLWltYWdlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xMjhweDsgfVxcbi51aS1pY29uLXZpZGVvIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xMjhweDsgfVxcbi51aS1pY29uLXNjcmlwdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMTI4cHg7IH1cXG4udWktaWNvbi1hbGVydCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE0NHB4OyB9XFxuLnVpLWljb24taW5mbyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNDRweDsgfVxcbi51aS1pY29uLW5vdGljZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNDRweDsgfVxcbi51aS1pY29uLWhlbHAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTQ0cHg7IH1cXG4udWktaWNvbi1jaGVjayB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNDRweDsgfVxcbi51aS1pY29uLWJ1bGxldCB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNDRweDsgfVxcbi51aS1pY29uLXJhZGlvLW9uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE0NHB4OyB9XFxuLnVpLWljb24tcmFkaW8tb2ZmIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNDRweDsgfVxcbi51aS1pY29uLXBpbi13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNDRweDsgfVxcbi51aS1pY29uLXBpbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNDRweDsgfVxcbi51aS1pY29uLXBsYXkgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNjBweDsgfVxcbi51aS1pY29uLXBhdXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE2MHB4OyB9XFxuLnVpLWljb24tc2Vlay1uZXh0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE2MHB4OyB9XFxuLnVpLWljb24tc2Vlay1wcmV2IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE2MHB4OyB9XFxuLnVpLWljb24tc2Vlay1lbmQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTYwcHg7IH1cXG4udWktaWNvbi1zZWVrLXN0YXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE2MHB4OyB9XFxuLyogdWktaWNvbi1zZWVrLWZpcnN0IGlzIGRlcHJlY2F0ZWQsIHVzZSB1aS1pY29uLXNlZWstc3RhcnQgaW5zdGVhZCAqL1xcbi51aS1pY29uLXNlZWstZmlyc3QgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTYwcHg7IH1cXG4udWktaWNvbi1zdG9wIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2MHB4OyB9XFxuLnVpLWljb24tZWplY3QgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE2MHB4OyB9XFxuLnVpLWljb24tdm9sdW1lLW9mZiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTYwcHg7IH1cXG4udWktaWNvbi12b2x1bWUtb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE2MHB4OyB9XFxuLnVpLWljb24tcG93ZXIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNzZweDsgfVxcbi51aS1pY29uLXNpZ25hbC1kaWFnIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE3NnB4OyB9XFxuLnVpLWljb24tc2lnbmFsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE3NnB4OyB9XFxuLnVpLWljb24tYmF0dGVyeS0wIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE3NnB4OyB9XFxuLnVpLWljb24tYmF0dGVyeS0xIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE3NnB4OyB9XFxuLnVpLWljb24tYmF0dGVyeS0yIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE3NnB4OyB9XFxuLnVpLWljb24tYmF0dGVyeS0zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE3NnB4OyB9XFxuLnVpLWljb24tY2lyY2xlLXBsdXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xOTJweDsgfVxcbi51aS1pY29uLWNpcmNsZS1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xOTJweDsgfVxcbi51aS1pY29uLWNpcmNsZS1jbG9zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xOTJweDsgfVxcbi51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE5MnB4OyB9XFxuLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTkycHg7IH1cXG4udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xOTJweDsgfVxcbi51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE5MnB4OyB9XFxuLnVpLWljb24tY2lyY2xlLWFycm93LWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE5MnB4OyB9XFxuLnVpLWljb24tY2lyY2xlLWFycm93LXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE5MnB4OyB9XFxuLnVpLWljb24tY2lyY2xlLWFycm93LXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE5MnB4OyB9XFxuLnVpLWljb24tY2lyY2xlLWFycm93LW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTE5MnB4OyB9XFxuLnVpLWljb24tY2lyY2xlLXpvb21pbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTkycHg7IH1cXG4udWktaWNvbi1jaXJjbGUtem9vbW91dCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTkycHg7IH1cXG4udWktaWNvbi1jaXJjbGUtY2hlY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTE5MnB4OyB9XFxuLnVpLWljb24tY2lyY2xlc21hbGwtcGx1cyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTIwOHB4OyB9XFxuLnVpLWljb24tY2lyY2xlc21hbGwtbWludXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMjA4cHg7IH1cXG4udWktaWNvbi1jaXJjbGVzbWFsbC1jbG9zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0yMDhweDsgfVxcbi51aS1pY29uLXNxdWFyZXNtYWxsLXBsdXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMjA4cHg7IH1cXG4udWktaWNvbi1zcXVhcmVzbWFsbC1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0yMDhweDsgfVxcbi51aS1pY29uLXNxdWFyZXNtYWxsLWNsb3NlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTIwOHB4OyB9XFxuLnVpLWljb24tZ3JpcC1kb3R0ZWQtdmVydGljYWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMjRweDsgfVxcbi51aS1pY29uLWdyaXAtZG90dGVkLWhvcml6b250YWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMjI0cHg7IH1cXG4udWktaWNvbi1ncmlwLXNvbGlkLXZlcnRpY2FsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTIyNHB4OyB9XFxuLnVpLWljb24tZ3JpcC1zb2xpZC1ob3Jpem9udGFsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTIyNHB4OyB9XFxuLnVpLWljb24tZ3JpcHNtYWxsLWRpYWdvbmFsLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTIyNHB4OyB9XFxuLnVpLWljb24tZ3JpcC1kaWFnb25hbC1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0yMjRweDsgfVxcblxcblxcbi8qIE1pc2MgdmlzdWFsc1xcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcblxcbi8qIENvcm5lciByYWRpdXMgKi9cXG4udWktY29ybmVyLWFsbCxcXG4udWktY29ybmVyLXRvcCxcXG4udWktY29ybmVyLWxlZnQsXFxuLnVpLWNvcm5lci10bCB7XFxuXFx0Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4O1xcbn1cXG4udWktY29ybmVyLWFsbCxcXG4udWktY29ybmVyLXRvcCxcXG4udWktY29ybmVyLXJpZ2h0LFxcbi51aS1jb3JuZXItdHIge1xcblxcdGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7XFxufVxcbi51aS1jb3JuZXItYWxsLFxcbi51aS1jb3JuZXItYm90dG9tLFxcbi51aS1jb3JuZXItbGVmdCxcXG4udWktY29ybmVyLWJsIHtcXG5cXHRib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7XFxufVxcbi51aS1jb3JuZXItYWxsLFxcbi51aS1jb3JuZXItYm90dG9tLFxcbi51aS1jb3JuZXItcmlnaHQsXFxuLnVpLWNvcm5lci1iciB7XFxuXFx0Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDtcXG59XFxuXFxuLyogT3ZlcmxheXMgKi9cXG4udWktd2lkZ2V0LW92ZXJsYXkge1xcblxcdGJhY2tncm91bmQ6ICNhYWFhYWE7XFxuXFx0b3BhY2l0eTogLjAwMztcXG5cXHRmaWx0ZXI6IEFscGhhKE9wYWNpdHk9LjMpOyAvKiBzdXBwb3J0OiBJRTggKi9cXG59XFxuLnVpLXdpZGdldC1zaGFkb3cge1xcblxcdC13ZWJraXQtYm94LXNoYWRvdzogMHB4IDBweCA1cHggIzY2NjY2NjtcXG5cXHRib3gtc2hhZG93OiAwcHggMHB4IDVweCAjNjY2NjY2O1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIjbWFpbi1kaXY+LmhlYWRlci10b29sYmFye2hlaWdodDowO2Rpc3BsYXk6bm9uZX1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9qcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9hcHAudnVlXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQXNJQSwwQkFDRSxRQUFTLENBQ1QsWUFBYVwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vLyBoaWRlIHRoZSBsYXlvdXQgaGVhZGVyXFxuI21haW4tZGl2ID4gLmhlYWRlci10b29sYmFyIHtcXG4gIGhlaWdodDogMDtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzBfX18gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2pxdWVyeS11aS1kaXN0L2pxdWVyeS11aS5jc3NcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmkoX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8wX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIipbZGF0YS12LTI5Nzc5M2IyXXtvdXRsaW5lOm5vbmV9LmZhZGUtZW50ZXItYWN0aXZlW2RhdGEtdi0yOTc3OTNiMl0sLmZhZGUtbGVhdmUtYWN0aXZlW2RhdGEtdi0yOTc3OTNiMl17dHJhbnNpdGlvbjpvcGFjaXR5IDAuMnMgZWFzZX0uZmFkZS1lbnRlcltkYXRhLXYtMjk3NzkzYjJdLC5mYWRlLWxlYXZlLXRvW2RhdGEtdi0yOTc3OTNiMl17b3BhY2l0eTowfVxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2pzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL292ZXJ2aWV3L3NwaW5uZXIudnVlXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQStKQSxtQkFDRSxZQUFhLENBQ2Qsd0VBR0MsNEJBQTZCLENBQzlCLDZEQUdDLFNBQVVcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuQGltcG9ydCBcXFwifmpxdWVyeS11aS1kaXN0L2pxdWVyeS11aS5jc3NcXFwiO1xcbioge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuLmZhZGUtZW50ZXItYWN0aXZlLFxcbi5mYWRlLWxlYXZlLWFjdGl2ZSB7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTtcXG59XFxuLmZhZGUtZW50ZXIsXFxuLmZhZGUtbGVhdmUtdG8ge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLmRhdGUgYVtkYXRhLWFjdGlvbj0nY2xlYXInXTo6YmVmb3Jle2ZvbnQtZmFtaWx5OidNYXRlcmlhbCBJY29ucyc7Y29udGVudDpcXFwiXFxcXEUxNENcXFwiO2ZvbnQtc2l6ZToyMHB4O3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbToxNXB4O2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi0xMHB4O2NvbG9yOiMzNjNhNDE7Y3Vyc29yOnBvaW50ZXJ9LmRhdGUgLmJvb3RzdHJhcC1kYXRldGltZXBpY2tlci13aWRnZXQgdHIgdGQgc3Bhbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOndoaXRlfVxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2pzL2FwcC93aWRnZXRzL3BzLWRhdGVwaWNrZXIudnVlXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvcHJlc3Rha2l0L3Njc3MvX3ZhcmlhYmxlcy5zY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQXNFQSxxQ0FFSSw0QkFBNkIsQ0FDN0IsZUFBZ0IsQ0FDaEIsY0FBZSxDQUNmLGlCQUFrQixDQUNsQixXQUFZLENBQ1osUUFBUyxDQUNULGlCQUFrQixDQUNsQixhQ2pFYyxDRGtFZCxjQUFjLENBVmxCLHdEQWFJLHNCQUF1QlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5AaW1wb3J0ICd+QHNjc3MvY29uZmlnL19zZXR0aW5ncy5zY3NzJztcXG5cXG4uZGF0ZSB7XFxuICBhW2RhdGEtYWN0aW9uPSdjbGVhciddOjpiZWZvcmUge1xcbiAgICBmb250LWZhbWlseTogJ01hdGVyaWFsIEljb25zJztcXG4gICAgY29udGVudDogXFxcIlxcXFxFMTRDXFxcIjtcXG4gICAgZm9udC1zaXplOiAyMHB4O1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIGJvdHRvbTogMTVweDtcXG4gICAgbGVmdDogNTAlO1xcbiAgICBtYXJnaW4tbGVmdDogLTEwcHg7XFxuICAgIGNvbG9yOiAkZ3JheS1kYXJrO1xcbiAgICBjdXJzb3I6cG9pbnRlcjtcXG4gIH1cXG4gIC5ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXItd2lkZ2V0IHRyIHRkIHNwYW46aG92ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcXG4gIH1cXG59XFxuXFxuXCIsXCIvKiBzdHlsZWxpbnQtZGlzYWJsZSAqL1xcblxcbi8vIENvbG9yIHN5c3RlbVxcbiR3aGl0ZTogI2ZmZjtcXG4kZ3JheS1kaXNhYmxlZDogI2VhZWJlYztcXG4kZ3JheS0xMDA6ICNmYWZiZmM7XFxuJGdyYXktMjAwOiAjZmFmYmZjO1xcbiRncmF5LTI1MDogI2ZhZmJmYztcXG4kZ3JheS0zMDA6ICNiYmNkZDI7XFxuJGdyYXktNDAwOiAjYmJjZGQyO1xcbiRncmF5LTQ1MDogI2IzYzdjZDtcXG4kZ3JheS01MDA6ICM2Yzg2OGU7XFxuJGdyYXktNTUwOiAjNzA4MDkwO1xcbiRncmF5LTYwMDogIzZjODY4ZTtcXG4kZ3JheS03MDA6ICMzNjNhNDE7XFxuJGdyYXktNzUwOiAjMzYzYTQxO1xcbiRncmF5LTgwMDogIzM2M2E0MTtcXG4kZ3JheS05MDA6ICMyODJiMzA7XFxuJGJsYWNrOiAjMDAwO1xcblxcbi8vIFBTIFZhcnNcXG4kZXh0cmEtbGlnaHQtZ3JheTogJGdyYXktMTAwO1xcbiRsaWdodC1ncmF5OiAkZ3JheS0zMDA7XFxuJG1lZGl1bS1ncmF5OiAkZ3JheS01MDA7XFxuJGRhcmstZ3JheTogJGdyYXktNzAwO1xcbiRleHRyYS1kYXJrLWdyYXk6ICRncmF5LTkwMDtcXG4kZ3JheS1saWdodDogJGxpZ2h0LWdyYXk7XFxuJGdyYXktbWVkaXVtOiAkbWVkaXVtLWdyYXk7XFxuJGdyYXktZGFyazogJGRhcmstZ3JheTtcXG4kZ3JheS1zb2Z0OiAkZ3JheS0yMDA7XFxuJGJhY2tncm91bmQtY29sb3I6ICNlZmYxZjI7XFxuJHByaW1hcnktbGlnaHRlbjogI2Y0ZmNmZDtcXG4kbG9jYWwtZm9udDogZmFsc2UgIWRlZmF1bHQ7XFxuXFxuJGJsdWU6ICMyNWI5ZDc7XFxuJGluZGlnbzogIzY2MTBmMiAhZGVmYXVsdDtcXG4kcHVycGxlOiAjNmY0MmMxICFkZWZhdWx0O1xcbiRwaW5rOiAjZTgzZThjICFkZWZhdWx0O1xcbiRyZWQ6ICNmNTRjM2U7XFxuJG9yYW5nZTogI2ZkN2UxNCAhZGVmYXVsdDtcXG4keWVsbG93OiAjZmFiMDAwO1xcbiRncmVlbjogIzcwYjU4MDtcXG4kb3JhbmdlOiAjZmQ3ZTE0ICFkZWZhdWx0O1xcbiR0ZWFsOiAjMjBjOTk3ICFkZWZhdWx0O1xcbiRjeWFuOiAkYmx1ZTtcXG4kbGlnaHQtYmx1ZTogI2Y0ZmNmZDtcXG5cXG4vLyBtYWluIGJ1dHRvbiBiYWNrZ3JvdW5kIGNvbG9yc1xcbiRwcmltYXJ5LWhvdmVyOiAjN2NkNWU3O1xcbiRwcmltYXJ5LWFjdGl2ZTogIzIxYTZjMTtcXG4kcHJpbWFyeS1kaXNhYmxlZDogI2QzZjFmNztcXG4kc2Vjb25kYXJ5LWhvdmVyOiAjYjdjZWQzO1xcbiRzZWNvbmRhcnktYWN0aXZlOiAjODg5ZGEyO1xcbiRkYW5nZXItaG92ZXI6ICNmZGUxZTE7XFxuJG5vdGljZTogI2RmZjVmOTtcXG5cXG4kcHJpbWFyeTogJGJsdWUgIWRlZmF1bHQ7XFxuJHNlY29uZGFyeTogJG1lZGl1bS1ncmF5O1xcbiRzdWNjZXNzOiAkZ3JlZW4gIWRlZmF1bHQ7XFxuJGluZm86ICRjeWFuICFkZWZhdWx0O1xcbiR3YXJuaW5nOiAkeWVsbG93ICFkZWZhdWx0O1xcbiRkYW5nZXI6ICRyZWQgIWRlZmF1bHQ7XFxuJGxpZ2h0OiAkZ3JheS0xMDAgIWRlZmF1bHQ7XFxuJGRhcms6ICRncmF5LTgwMCAhZGVmYXVsdDtcXG5cXG4kdG9hc3Qtc3VjY2VzczogIzUzZDU3MiAhZGVmYXVsdDtcXG4kdG9hc3Qtd2FybmluZzogI2ZhYjAwMCAhZGVmYXVsdDtcXG5cXG4kYnJhbmQtcHJpbWFyeTogJHByaW1hcnkgIWRlZmF1bHQ7XFxuJGJyYW5kLXNlY29uZGFyeTogJHNlY29uZGFyeSAhZGVmYXVsdDtcXG4kYnJhbmQtaW5mbzogIzViYzBkZSAhZGVmYXVsdDtcXG4kYnJhbmQtd2FybmluZzogI2YwYWQ0ZSAhZGVmYXVsdDtcXG4kYnJhbmQtc3VjY2VzczogJHN1Y2Nlc3MgIWRlZmF1bHQ7XFxuJGJyYW5kLWRhbmdlcjogJGRhbmdlciAhZGVmYXVsdDtcXG5cXG4kYnRuLXByaW1hcnktYmc6ICRwcmltYXJ5LWhvdmVyO1xcbiRidG4tc2Vjb25kYXJ5LWJvcmRlcjogIzAwMDtcXG4kYnRuLWluZm8tYmc6ICRicmFuZC1pbmZvICFkZWZhdWx0O1xcbiRidG4tc3VjY2Vzcy1iZzogJGJyYW5kLXN1Y2Nlc3MgIWRlZmF1bHQ7XFxuJGJ0bi13YXJuaW5nLWJnOiAkYnJhbmQtd2FybmluZyAhZGVmYXVsdDtcXG4kYnRuLWRhbmdlci1iZzogJGJyYW5kLWRhbmdlciAhZGVmYXVsdDtcXG5cXG4kdGhlbWUtY29sb3JzOiAoXFxuICBcXFwicHJpbWFyeVxcXCI6ICRwcmltYXJ5LFxcbiAgXFxcInNlY29uZGFyeVxcXCI6ICRzZWNvbmRhcnksXFxuICBcXFwic3VjY2Vzc1xcXCI6ICRzdWNjZXNzLFxcbiAgXFxcImluZm9cXFwiOiAkaW5mbyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogJHdhcm5pbmcsXFxuICBcXFwiZGFuZ2VyXFxcIjogJGRhbmdlcixcXG4gIFxcXCJsaWdodFxcXCI6ICRsaWdodCxcXG4gIFxcXCJkYXJrXFxcIjogJGRhcmtcXG4pO1xcblxcbiRhbGVydHMtYmFja2dyb3VuZC1jb2xvcnM6IChcXG4gIFxcXCJzdWNjZXNzXFxcIjogI2NiZjJkNCxcXG4gIFxcXCJpbmZvXFxcIjogI2JlZWFmMyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZmZmJkMyxcXG4gIFxcXCJkYW5nZXJcXFwiOiAjZmJjNmMzXFxuKTtcXG5cXG4kYWxlcnRzLXNlY29uZC1jb2xvcnM6IChcXG4gIFxcXCJzdWNjZXNzXFxcIjogIzUzZDU3MixcXG4gIFxcXCJpbmZvXFxcIjogIzI1YjlkNyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZhYjAwMCxcXG4gIFxcXCJkYW5nZXJcXFwiOiAjZjQ0MzM2XFxuKTtcXG5cXG4kdGhlbWUtYWxlcnRzLWljb25zOiAoXFxuICBzdWNjZXNzOiBcXFwiXFxcXEU1Q0FcXFwiLFxcbiAgaW5mbzogXFxcIlxcXFxlODhlXFxcIixcXG4gIHdhcm5pbmc6IFxcXCJcXFxcRTAwMlxcXCIsXFxuICBkYW5nZXI6IFxcXCJcXFxcZTAwMFxcXCJcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtaWNvbnM6IChcXG4gIFxcXCJwcmltYXJ5XFxcIjogJHByaW1hcnksXFxuICBcXFwic2Vjb25kYXJ5XFxcIjogJHNlY29uZGFyeSxcXG4gIFxcXCJzdWNjZXNzXFxcIjogJHN1Y2Nlc3MsXFxuICBcXFwiaW5mb1xcXCI6ICRpbmZvLFxcbiAgXFxcIndhcm5pbmdcXFwiOiAjZmFiMDAwLFxcbiAgXFxcImRhbmdlclxcXCI6ICRkYW5nZXIsXFxuICBcXFwibGlnaHRcXFwiOiAkbGlnaHRcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtaG92ZXI6IChcXG4gIHByaW1hcnk6ICRwcmltYXJ5LWhvdmVyLFxcbiAgc2Vjb25kYXJ5OiAkc2Vjb25kYXJ5LWhvdmVyLFxcbiAgc3VjY2VzczogIzliY2JhNixcXG4gIGluZm86ICRwcmltYXJ5LWhvdmVyLFxcbiAgd2FybmluZzogI2U2YjA0NSxcXG4gIGRhbmdlcjogI2U3NmQ3YSxcXG4gIGxpZ2h0OiAkZ3JheS04MDAsXFxuICBkYXJrOiAkZ3JheS0xMDAsXFxuICBkZWZhdWx0OiAkbGlnaHQtYmx1ZVxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1hY3RpdmU6IChcXG4gIHByaW1hcnk6ICRwcmltYXJ5LWFjdGl2ZSxcXG4gIHNlY29uZGFyeTogJHNlY29uZGFyeS1hY3RpdmUsXFxuICBzdWNjZXNzOiAjNWE5MTY2LFxcbiAgaW5mbzogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImluZm9cXFwiKSwgMTAlKSxcXG4gIHdhcm5pbmc6IGRhcmtlbihtYXAtZ2V0KCR0aGVtZS1jb2xvcnMsIFxcXCJ3YXJuaW5nXFxcIiksIDEwJSksXFxuICBkYW5nZXI6ICNjMzM2MmIsXFxuICBsaWdodDogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImxpZ2h0XFxcIiksIDEwJSksXFxuICBkYXJrOiBkYXJrZW4obWFwLWdldCgkdGhlbWUtY29sb3JzLCBcXFwiZGFya1xcXCIpLCAxMCUpLFxcbiAgZGVmYXVsdDogJHByaW1hcnlcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtYmFja2dyb3VuZDogKFxcbiAgcHJpbWFyeTogI2RmZjVmOSxcXG4gIHNlY29uZGFyeTogJGJsYWNrLFxcbiAgc3VjY2VzczogI2Q2ZjBkOCxcXG4gIGluZm86ICNkZmY1ZjksXFxuICB3YXJuaW5nOiAjZmZmYmQzLFxcbiAgZGFuZ2VyOiAjZmRlMWUxLFxcbiAgbGlnaHQ6ICRncmF5LTIwMCxcXG4gIGRhcms6ICRncmF5LTcwMFxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1zaGFkb3c6IChcXG4gIHByaW1hcnk6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIiksXFxuICBzZWNvbmRhcnk6ICRibGFjayxcXG4gIHN1Y2Nlc3M6IHRoZW1lLWNvbG9yKFxcXCJzdWNjZXNzXFxcIiksXFxuICBpbmZvOiB0aGVtZS1jb2xvcihcXFwiaW5mb1xcXCIpLFxcbiAgd2FybmluZzogdGhlbWUtY29sb3IoXFxcIndhcm5pbmdcXFwiKSxcXG4gIGRhbmdlcjogdGhlbWUtY29sb3IoXFxcImRhbmdlclxcXCIpLFxcbiAgbGlnaHQ6IHRoZW1lLWNvbG9yKFxcXCJsaWdodFxcXCIpLFxcbiAgZGFyazogdGhlbWUtY29sb3IoXFxcImRhcmtcXFwiKVxcbik7XFxuXFxuLy8gT3B0aW9uc1xcbiRlbmFibGUtY2FyZXQ6IHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1yb3VuZGVkOiB0cnVlO1xcbiRlbmFibGUtc2hhZG93czogdHJ1ZTtcXG4kZW5hYmxlLWdyYWRpZW50czogZmFsc2UgIWRlZmF1bHQ7XFxuJGVuYWJsZS10cmFuc2l0aW9uczogdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLWdyaWQtY2xhc3NlczogdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLXByaW50LXN0eWxlczogdHJ1ZSAhZGVmYXVsdDtcXG5cXG4vLyBTcGFjaW5nXFxuJHNwYWNlcjogMS44NzVyZW07XFxuXFxuJHNwYWNlcnM6IChcXG4gIDA6IDAsXFxuICAxOiAoXFxuICAgICRzcGFjZXIgLyA2XFxuICApLFxcbiAgMjogKFxcbiAgICAkc3BhY2VyIC8gM1xcbiAgKSxcXG4gIDM6IChcXG4gICAgJHNwYWNlciAvIDJcXG4gICksXFxuICA0OiAkc3BhY2VyLFxcbiAgNTogKFxcbiAgICAkc3BhY2VyICogMlxcbiAgKVxcbik7XFxuXFxuLy8gQm9keVxcbiRib2R5LWJnOiAkd2hpdGUgIWRlZmF1bHQ7XFxuJGJvZHktY29sb3I6ICRkYXJrLWdyYXk7XFxuXFxuLy8gTGlua3NcXG4kbGluay1ob3Zlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSAhZGVmYXVsdDtcXG4kbGluay1ob3Zlci1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuXFxuLy8gUGFyYWdyYXBoc1xcbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogMXJlbTtcXG5cXG4vLyBHcmlkIGJyZWFrcG9pbnRzXFxuJGdyaWQtYnJlYWtwb2ludHM6IChcXG4gIHhzOiAwLFxcbiAgc206IDU0NHB4LFxcbiAgbWQ6IDc2OHB4LFxcbiAgbGc6IDEwMjRweCxcXG4gIHhsOiAxMzAwcHgsXFxuICB4eGw6IDE2MDBweCAvLyBQUyBjdXN0b21cXG4pO1xcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRncmlkLWJyZWFrcG9pbnRzLCBcXFwiJGdyaWQtYnJlYWtwb2ludHNcXFwiKTtcXG5AaW5jbHVkZSBfYXNzZXJ0LXN0YXJ0cy1hdC16ZXJvKCRncmlkLWJyZWFrcG9pbnRzKTtcXG5cXG4vLyBHcmlkIGNvbnRhaW5lcnNcXG4kY29udGFpbmVyLW1heC13aWR0aHM6IChcXG4gIHNtOiA1NzZweCxcXG4gIG1kOiA3MjBweCxcXG4gIGxnOiA5NzJweCxcXG4gIHhsOiAxMjQwcHhcXG4pO1xcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRjb250YWluZXItbWF4LXdpZHRocywgXFxcIiRjb250YWluZXItbWF4LXdpZHRoc1xcXCIpO1xcblxcbi8vIEdyaWQgY29sdW1uc1xcbi8vJGdyaWQtY29sdW1uczogICAgICAgICAgICAgICAgMTIgIWRlZmF1bHQ7XFxuJGdyaWQtZ3V0dGVyLXdpZHRoOiAxLjg3NXJlbSAhZGVmYXVsdDtcXG5cXG4vLyBDb21wb25lbnRzXFxuLy8kbGluZS1oZWlnaHQtbGc6ICAgICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuLy8kbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuXFxuLy8kYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgICAxcHggIWRlZmF1bHQ7XFxuLy8kYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuXFxuJGJvcmRlci1yYWRpdXM6IDRweCAhZGVmYXVsdDtcXG4vLyRib3JkZXItcmFkaXVzLWxnOiAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xcbi8vJGJvcmRlci1yYWRpdXMtc206ICAgICAgICAgICAgLjJyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kY29tcG9uZW50LWFjdGl2ZS1jb2xvcjogICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kY29tcG9uZW50LWFjdGl2ZS1iZzogICAgICAgICB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpICFkZWZhdWx0O1xcblxcbiRjYXJldC13aWR0aDogLjI1cmVtO1xcblxcbi8vJHRyYW5zaXRpb24tYmFzZTogICAgICAgICAgICAgYWxsIC4ycyBlYXNlLWluLW91dCAhZGVmYXVsdDtcXG4vLyR0cmFuc2l0aW9uLWZhZGU6ICAgICAgICAgICAgIG9wYWNpdHkgLjE1cyBsaW5lYXIgIWRlZmF1bHQ7XFxuLy8kdHJhbnNpdGlvbi1jb2xsYXBzZTogICAgICAgICBoZWlnaHQgLjM1cyBlYXNlICFkZWZhdWx0O1xcblxcbi8vIEZvbnRzXFxuJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWY6IFxcXCJPcGVuIFNhbnNcXFwiLCBoZWx2ZXRpY2EsIGFyaWFsLCBzYW5zLXNlcmlmO1xcbi8vJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTogICAgICAgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcXFwiTGliZXJhdGlvbiBNb25vXFxcIiwgXFxcIkNvdXJpZXIgTmV3XFxcIiwgbW9ub3NwYWNlICFkZWZhdWx0O1xcbi8vJGZvbnQtZmFtaWx5LWJhc2U6ICAgICAgICAgICAgJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWYgIWRlZmF1bHQ7XFxuXFxuJGZvbnQtc2l6ZS1iYXNlOiAuODc1cmVtO1xcbiRmb250LXNpemUtbGc6IDFyZW07XFxuJGZvbnQtc2l6ZS1zbTogLjc1cmVtO1xcbiRmb250LXNpemUteHM6IC42MjVyZW07IC8vIFBTIGN1c3RvbVxcblxcbi8vJGZvbnQtd2VpZ2h0LWxpZ2h0OiAgICAgICAgICAgMzAwO1xcbi8vJGZvbnQtd2VpZ2h0LW5vcm1hbDogICAgICAgICAgNDAwO1xcbiRmb250LXdlaWdodC1zZW1pYm9sZDogNjAwO1xcbiRmb250LXdlaWdodC1ib2xkOiA3MDA7XFxuXFxuJGgxLWZvbnQtc2l6ZTogMS41cmVtO1xcbiRoMi1mb250LXNpemU6IDEuMjVyZW07XFxuJGgzLWZvbnQtc2l6ZTogMXJlbTtcXG4kaDQtZm9udC1zaXplOiAuODc1cmVtO1xcbiRoNS1mb250LXNpemU6IC43NXJlbTtcXG4kaDYtZm9udC1zaXplOiAuNjI1cmVtO1xcblxcbi8vJGhlYWRpbmdzLW1hcmdpbi1ib3R0b206ICAgICAgKCRzcGFjZXIgLyAyKSAhZGVmYXVsdDtcXG4kaGVhZGluZ3MtZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1zYW5zLXNlcmlmO1xcbiRoZWFkaW5ncy1mb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LWJvbGQ7XFxuJGhlYWRpbmdzLWNvbG9yOiAkYm9keS1jb2xvcjtcXG5cXG4vLyRkaXNwbGF5MS1zaXplOiAgICAgICAgICAgICAgIDZyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTItc2l6ZTogICAgICAgICAgICAgICA1LjVyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTMtc2l6ZTogICAgICAgICAgICAgICA0LjVyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTQtc2l6ZTogICAgICAgICAgICAgICAzLjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZGlzcGxheTEtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTItd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTMtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTQtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheS1saW5lLWhlaWdodDogICAgICAgICAkaGVhZGluZ3MtbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kbGVhZC1mb250LXNpemU6ICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkgIWRlZmF1bHQ7XFxuLy8kbGVhZC1mb250LXdlaWdodDogICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuXFxuLy8kc21hbGwtZm9udC1zaXplOiAgICAgICAgICAgICA4MCUgIWRlZmF1bHQ7XFxuXFxuJHRleHQtbXV0ZWQ6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyRibG9ja3F1b3RlLXNtYWxsLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG4vLyRibG9ja3F1b3RlLWZvbnQtc2l6ZTogICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAxLjI1KSAhZGVmYXVsdDtcXG5cXG4kaHItYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRoci1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuLy8kbWFyay1wYWRkaW5nOiAgICAgICAgICAgICAgICAuMmVtICFkZWZhdWx0O1xcblxcbi8vJGR0LWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuLy8ka2JkLWJveC1zaGFkb3c6ICAgICAgICAgICAgICBpbnNldCAwIC0uMXJlbSAwIHJnYmEoJGJsYWNrLCAuMjUpICFkZWZhdWx0O1xcbi8vJG5lc3RlZC1rYmQtZm9udC13ZWlnaHQ6ICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuLy8kbGlzdC1pbmxpbmUtcGFkZGluZzogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRtYXJrLWJnOiAgICAgICAgICAgICAgICAgICAgICNmY2Y4ZTMgIWRlZmF1bHQ7XFxuXFxuLy8kaHItbWFyZ2luLXk6ICAgICAgICAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xcblxcbi8vIFRhYmxlc1xcbiR0YWJsZS1jZWxsLXBhZGRpbmc6IC40cmVtO1xcbiR0YWJsZS1jZWxsLXBhZGRpbmctc206IC4yNXJlbTtcXG5cXG4vLyR0YWJsZS1iZzogICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xcbiR0YWJsZS1hY2NlbnQtYmc6ICRiYWNrZ3JvdW5kLWNvbG9yO1xcbiR0YWJsZS1ob3Zlci1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4kdGFibGUtYWN0aXZlLWJnOiB0aGVtZS1jb2xvci1ob3ZlcihcXFwicHJpbWFyeVxcXCIpO1xcblxcbi8vJHRhYmxlLWJvcmRlci13aWR0aDogICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyR0YWJsZS1ib3JkZXItY29sb3I6ICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcXG5cXG4kdGFibGUtaGVhZC1iZzogJGJhY2tncm91bmQtY29sb3I7XFxuJHRhYmxlLWhlYWQtY29sb3I6ICRib2R5LWNvbG9yO1xcblxcbiR0YWJsZS1kYXJrLWJnOiAkYm9keS1jb2xvcjtcXG4kdGFibGUtZGFyay1hY2NlbnQtYmc6ICRleHRyYS1kYXJrLWdyYXk7XFxuJHRhYmxlLWRhcmstaG92ZXItYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuJHRhYmxlLWRhcmstYm9yZGVyLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuLy8kdGFibGUtZGFyay1jb2xvcjogICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcXG5cXG4vLyBCdXR0b25zXFxuJGlucHV0LWJ0bi1wYWRkaW5nLXk6IC4zNzVyZW07XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXg6IC44MzhyZW07XFxuLy8kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0OiAgICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1idG4tZm9jdXMtd2lkdGg6ICAgICAgIC4ycmVtICFkZWZhdWx0O1xcbi8vJGlucHV0LWJ0bi1mb2N1cy1jb2xvcjogICAgICAgcmdiYSgkY29tcG9uZW50LWFjdGl2ZS1iZywgLjI1KSAhZGVmYXVsdDtcXG4vLyRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdzogIDAgMCAwICRpbnB1dC1idG4tZm9jdXMtd2lkdGggJGlucHV0LWJ0bi1mb2N1cy1jb2xvciAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYnRuLXBhZGRpbmcteS1zbTogLjMxM3JlbTtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteC1zbTogLjYyNXJlbTtcXG4vLyRpbnB1dC1idG4tbGluZS1oZWlnaHQtc206ICAgICRsaW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYnRuLXBhZGRpbmcteS1sZzogLjQzOHJlbTtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteC1sZzogLjgzOHJlbTtcXG4vLyRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGc6ICAgICRsaW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1idG4tYm9yZGVyLXdpZHRoOiAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuLy8gQnV0dG9uc1xcbiRidG4tcGFkZGluZy15OiAuNXJlbSAhZGVmYXVsdDtcXG4kYnRuLXBhZGRpbmcteDogMXJlbSAhZGVmYXVsdDtcXG4vLyRidG4tbGluZS1oZWlnaHQ6ICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXBhZGRpbmcteS1zbTogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAhZGVmYXVsdDtcXG4vLyRidG4tcGFkZGluZy14LXNtOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LXNtICFkZWZhdWx0O1xcbi8vJGJ0bi1saW5lLWhlaWdodC1zbTogICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRidG4tcGFkZGluZy15LWxnOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGcgIWRlZmF1bHQ7XFxuLy8kYnRuLWxpbmUtaGVpZ2h0LWxnOiAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGJ0bi1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuJGJ0bi1mb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LXNlbWlib2xkO1xcbiRidG4tYm94LXNoYWRvdzogbm9uZTtcXG4vLyRidG4tZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtd2lkdGggIWRlZmF1bHQ7XFxuJGJ0bi1mb2N1cy1ib3gtc2hhZG93OiBub25lO1xcbi8vJGJ0bi1kaXNhYmxlZC1vcGFjaXR5OiAgICAgICAgLjY1ICFkZWZhdWx0O1xcbiRidG4tYWN0aXZlLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8kYnRuLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLWJsb2NrLXNwYWNpbmcteTogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4kYnRuLWJvcmRlci1yYWRpdXM6IDRweDtcXG4vLyRidG4tYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgJGJvcmRlci1yYWRpdXMtc20gIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXRyYW5zaXRpb246ICAgICAgICAgICAgICBjb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XFxuXFxuLy8gRm9ybXNcXG4kaW5wdXQtcGFkZGluZy15OiAuMzc1cmVtO1xcbiRpbnB1dC1wYWRkaW5nLXg6IC40Mzc1cmVtO1xcbi8vJGlucHV0LWxpbmUtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtcGFkZGluZy15LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktc20gIWRlZmF1bHQ7XFxuLy8kaW5wdXQtcGFkZGluZy14LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtc20gIWRlZmF1bHQ7XFxuLy8kaW5wdXQtbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1wYWRkaW5nLXktbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1saW5lLWhlaWdodC1sZzogICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kaW5wdXQtZGlzYWJsZWQtYmc6ICNlY2VlZWY7XFxuXFxuJGlucHV0LWNvbG9yOiAkYm9keS1jb2xvcjtcXG4kaW5wdXQtYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRpbnB1dC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kaW5wdXQtYm94LXNoYWRvdzogbm9uZTtcXG5cXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzLWxnOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1zbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1mb2N1cy1iZzogICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYmcgIWRlZmF1bHQ7XFxuJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvcjogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRpbnB1dC1mb2N1cy1jb2xvcjogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1mb2N1cy13aWR0aCAhZGVmYXVsdDtcXG4kaW5wdXQtZm9jdXMtYm94LXNoYWRvdzogbm9uZTtcXG5cXG4kaW5wdXQtcGxhY2Vob2xkZXItY29sb3I6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtYm9yZGVyOiAgICAgICAgICAgICAgICAgICAkaW5wdXQtYm9yZGVyLXdpZHRoICogMiAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXI6ICAgICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogJGlucHV0LWJ0bi1saW5lLWhlaWdodCkgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXkgKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0OiAyLjE4OHJlbTtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXItc206ICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1zbSAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20pICsgKCRpbnB1dC1idG4tcGFkZGluZy15LXNtICogMikgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgICAgICAgICAgY2FsYygjeyRpbnB1dC1oZWlnaHQtaW5uZXItc219ICsgI3skaW5wdXQtaGVpZ2h0LWJvcmRlcn0pICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWhlaWdodC1pbm5lci1sZzogICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWxnICogJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZykgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0LWxnOiAyLjE4OHJlbTtcXG5cXG4vLyRpbnB1dC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xcblxcbi8vJGZvcm0tdGV4dC1tYXJnaW4tdG9wOiAgICAgICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLWNoZWNrLWlucHV0LWd1dHRlcjogICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXk6ICAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXg6ICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLWNoZWNrLWlubGluZS1tYXJnaW4teDogICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kZm9ybS1jaGVjay1pbmxpbmUtaW5wdXQtbWFyZ2luLXg6ICAgICAgLjMxMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZm9ybS1ncm91cC1tYXJnaW4tYm90dG9tOiAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1ncm91cC1hZGRvbi1jb2xvcjogICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuJGlucHV0LWdyb3VwLWFkZG9uLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG4vLyRpbnB1dC1ncm91cC1hZGRvbi1ib3JkZXItY29sb3I6ICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWd1dHRlcjogICAgICAgICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1zcGFjZXIteDogICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1zaXplOiAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJnOiAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1iZy1zaXplOiAgICAgIDUwJSA1MCUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJveC1zaGFkb3c6ICAgaW5zZXQgMCAuMjVyZW0gLjI1cmVtIHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWRpc2FibGVkLWJnOiAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtbGFiZWwtZGlzYWJsZWQtY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3I6ICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1iZzogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWRpc2FibGVkLWJnOiAgcmdiYSh0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpLCAuNSkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtYm94LXNoYWRvdzogICBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1mb2N1cy1ib3gtc2hhZG93OiAgICAgMCAwIDAgMXB4ICRib2R5LWJnLCAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1jb2xvcjogICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICAgICAgIGxpZ2h0ZW4oJGNvbXBvbmVudC1hY3RpdmUtYmcsIDM1JSkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1ib3gtc2hhZG93OiAgICBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1czogICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDggOCclM0UlM0NwYXRoIGZpbGw9JyN7JGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yfScgZD0nTTYuNTY0Ljc1bC0zLjU5IDMuNjEyLTEuNTM4LTEuNTVMMCA0LjI2IDIuOTc0IDcuMjUgOCAyLjE5M3onLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWJnOiAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3I6ICRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWljb24taW5kZXRlcm1pbmF0ZTogIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA0JyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3J9JyBkPSdNMCAyaDQnLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWJveC1zaGFkb3c6IG5vbmUgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLXJhZGlvLWluZGljYXRvci1ib3JkZXItcmFkaXVzOiAgICAgICAgICA1MCUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXJhZGlvLWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4JyUzRSUzQ2NpcmNsZSByPSczJyBmaWxsPScjeyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvcn0nLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLXNlbGVjdC1wYWRkaW5nLXk6ICAgICAgICAgICAuMzc1cmVtICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQ6ICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yLXBhZGRpbmc6ICAgMXJlbSAhZGVmYXVsdDsgLy8gRXh0cmEgcGFkZGluZyB0byBhY2NvdW50IGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGJhY2tncm91bmQtaW1hZ2UgYmFzZWQgaW5kaWNhdG9yXFxuLy8kY3VzdG9tLXNlbGVjdC1saW5lLWhlaWdodDogICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtY29sb3I6ICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWRpc2FibGVkLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuLy8kY3VzdG9tLXNlbGVjdC1iZzogICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtZGlzYWJsZWQtYmc6ICRpbnB1dC1kaXNhYmxlZC1iZztcXG4kY3VzdG9tLXNlbGVjdC1iZy1zaXplOiA4cHggMTBweCAhZGVmYXVsdDsgLy8gSW4gcGl4ZWxzIGJlY2F1c2UgaW1hZ2UgZGltZW5zaW9uc1xcbiRjdXN0b20tc2VsZWN0LWluZGljYXRvci1jb2xvcjogJGlucHV0LWNvbG9yO1xcbi8vJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yOiAgICAgICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDUnJTNFJTNDcGF0aCBmaWxsPScjeyRjdXN0b20tc2VsZWN0LWluZGljYXRvci1jb2xvcn0nIGQ9J00yIDBMMCAyaDR6bTAgNUwwIDNoNHonLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItd2lkdGg6ICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWJvcmRlci1jb2xvcjogICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItcmFkaXVzOiAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kY3VzdG9tLXNlbGVjdC1mb2N1cy1ib3JkZXItY29sb3I6ICRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3I7XFxuJGN1c3RvbS1zZWxlY3QtZm9jdXMtYm94LXNoYWRvdzogJGlucHV0LWZvY3VzLWJveC1zaGFkb3c7XFxuXFxuLy8kY3VzdG9tLXNlbGVjdC1mb250LXNpemUtc206ICAgICAgICA3NSUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQtc206ICAgICAgICAgICAkaW5wdXQtaGVpZ2h0LXNtICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1zZWxlY3QtZm9udC1zaXplLWxnOiAgICAgICAgMTI1JSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWhlaWdodC1sZzogICAgICAgICAgICRpbnB1dC1oZWlnaHQtbGcgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWZpbGUtaGVpZ2h0OiAgICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWZvY3VzLWJvcmRlci1jb2xvcjogICAgJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLWZpbGUtZm9jdXMtYm94LXNoYWRvdzogJGlucHV0LWZvY3VzLWJveC1zaGFkb3c7XFxuXFxuLy8kY3VzdG9tLWZpbGUtcGFkZGluZy15OiAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1wYWRkaW5nLXg6ICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1jb2xvcjogICAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1iZzogICAgICAgICAgICAgICAgICAgICRpbnB1dC1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItd2lkdGg6ICAgICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJvcmRlci1jb2xvcjogICAgICAgICAgJGlucHV0LWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItcmFkaXVzOiAgICAgICAgICRpbnB1dC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJveC1zaGFkb3c6ICAgICAgICAgICAgJGlucHV0LWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYnV0dG9uLWNvbG9yOiAgICAgICAgICAkY3VzdG9tLWZpbGUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYnV0dG9uLWJnOiAgICAgICAgICAgICAkaW5wdXQtZ3JvdXAtYWRkb24tYmcgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtdGV4dDogKFxcbi8vICAgICAgICBlbjogXFxcIkJyb3dzZVxcXCJcXG4vLykgIWRlZmF1bHQ7XFxuXFxuJGN1cnNvci1kaXNhYmxlZDogbm90LWFsbG93ZWQ7IC8vIFBTIGN1c3RvbVxcblxcbi8vIEZvcm0gdmFsaWRhdGlvblxcbi8vJGZvcm0tZmVlZGJhY2stbWFyZ2luLXRvcDogICAgICAgICAgJGZvcm0tdGV4dC1tYXJnaW4tdG9wICFkZWZhdWx0O1xcbi8vJGZvcm0tZmVlZGJhY2stZm9udC1zaXplOiAgICAgICAgICAgJHNtYWxsLWZvbnQtc2l6ZSAhZGVmYXVsdDtcXG4kZm9ybS1mZWVkYmFjay12YWxpZC1jb2xvcjogdGhlbWUtY29sb3IoXFxcInN1Y2Nlc3NcXFwiKTtcXG4kZm9ybS1mZWVkYmFjay1pbnZhbGlkLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwiZGFuZ2VyXFxcIik7XFxuJGZvcm0tZmVlZGJhY2std2FybmluZy1jb2xvcjogdGhlbWUtY29sb3IoXFxcIndhcm5pbmdcXFwiKTsgLy8gUFMgY3VzdG9tXFxuXFxuLy8gRHJvcGRvd25zXFxuLy8kZHJvcGRvd24tbWluLXdpZHRoOiAgICAgICAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tcGFkZGluZy15OiAwO1xcbi8vJGRyb3Bkb3duLXBhZGRpbmcteTogICAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tc3BhY2VyOiAgICAgICAgICAgICAgICAgICAuMTI1cmVtICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLWJnOiAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRkcm9wZG93bi1ib3JkZXItY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJGRyb3Bkb3duLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRkcm9wZG93bi1kaXZpZGVyLWJnOiAkbGlnaHQtZ3JheTtcXG4vLyRkcm9wZG93bi1ib3gtc2hhZG93OiAgICAgICAgICAgICAgIDAgLjVyZW0gMXJlbSByZ2JhKCRibGFjaywgLjE3NSkgIWRlZmF1bHQ7XFxuXFxuJGRyb3Bkb3duLWxpbmstY29sb3I6ICRtZWRpdW0tZ3JheTtcXG4kZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kZHJvcGRvd24tbGluay1ob3Zlci1iZzogJHdoaXRlO1xcblxcbi8vJGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tbGluay1hY3RpdmUtYmc6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4vLyRkcm9wZG93bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG4kZHJvcGRvd24taXRlbS1wYWRkaW5nLXg6IC4zMTI1cmVtO1xcbiRkcm9wZG93bi1pdGVtLXBhZGRpbmcteTogLjMxMjVyZW07XFxuXFxuLy8kZHJvcGRvd24taGVhZGVyLWNvbG9yOiAgICAgICAgICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8gTmF2c1xcbiRuYXYtbGluay1wYWRkaW5nLXk6IC45Mzc1cmVtO1xcbiRuYXYtbGluay1wYWRkaW5nLXg6IDEuMjVyZW07XFxuJG5hdi1saW5rLWRpc2FibGVkLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG5cXG4kbmF2LXRhYnMtYm9yZGVyLWNvbG9yOiAkd2hpdGU7XFxuLy8kbmF2LXRhYnMtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJG5hdi10YWJzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpO1xcbiRuYXYtdGFicy1saW5rLWFjdGl2ZS1jb2xvcjogJGJvZHktY29sb3I7XFxuJG5hdi10YWJzLWxpbmstYWN0aXZlLWJnOiAkYm9keS1iZztcXG4kbmF2LXRhYnMtbGluay1hY3RpdmUtYm9yZGVyLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpO1xcblxcbiRuYXYtcGlsbHMtbGluay1ob3Zlci1ib3JkZXItY29sb3I6ICRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yOiAkbmF2LXRhYnMtbGluay1hY3RpdmUtY29sb3I7XFxuJG5hdi1waWxscy1saW5rLWFjdGl2ZS1iZzogI2Y0ZjlmYjtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjogJG5hdi10YWJzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjsgLy8gUFMgY3VzdG9tXFxuXFxuLy8kbmF2LXBpbGxzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRuYXYtcGlsbHMtbGluay1hY3RpdmUtY29sb3I6ICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbi8vJG5hdi1waWxscy1saW5rLWFjdGl2ZS1iZzogICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuLy8gTmF2YmFyXFxuLy8kbmF2YmFyLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAoJHNwYWNlciAvIDIpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItbmF2LWxpbmstcGFkZGluZy14OiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci1icmFuZC1mb250LXNpemU6ICAgICAgICAgICAgJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcXG5cXG4vLyRuYXYtbGluay1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAkbGluZS1oZWlnaHQtYmFzZSArICRuYXYtbGluay1wYWRkaW5nLXkgKiAyKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItYnJhbmQtaGVpZ2h0OiAgICAgICAgICAgICAgICRuYXZiYXItYnJhbmQtZm9udC1zaXplICogJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWJyYW5kLXBhZGRpbmcteTogICAgICAgICAgICAoJG5hdi1saW5rLWhlaWdodCAtICRuYXZiYXItYnJhbmQtaGVpZ2h0KSAvIDIgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy15OiAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLXRvZ2dsZXItZm9udC1zaXplOiAgICAgICAgICAkZm9udC1zaXplLWxnICFkZWZhdWx0O1xcbi8vJG5hdmJhci10b2dnbGVyLWJvcmRlci1yYWRpdXM6ICAgICAgJGJ0bi1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci1kYXJrLWNvbG9yOiAgICAgICAgICAgICAgICAgcmdiYSgkd2hpdGUsIC41KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay1ob3Zlci1jb2xvcjogICAgICAgICAgIHJnYmEoJHdoaXRlLCAuNzUpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLWFjdGl2ZS1jb2xvcjogICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLWRpc2FibGVkLWNvbG9yOiAgICAgICAgcmdiYSgkd2hpdGUsIC4yNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWRhcmstdG9nZ2xlci1pY29uLWJnOiAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItZGFyay1jb2xvcn0nIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLXRvZ2dsZXItYm9yZGVyLWNvbG9yOiAgcmdiYSgkd2hpdGUsIC4xKSAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItbGlnaHQtY29sb3I6ICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LWhvdmVyLWNvbG9yOiAgICAgICAgICByZ2JhKCRibGFjaywgLjcpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1saWdodC1hY3RpdmUtY29sb3I6ICAgICAgICAgcmdiYSgkYmxhY2ssIC45KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtZGlzYWJsZWQtY29sb3I6ICAgICAgIHJnYmEoJGJsYWNrLCAuMykgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LXRvZ2dsZXItaWNvbi1iZzogICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItbGlnaHQtY29sb3J9JyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtdG9nZ2xlci1ib3JkZXItY29sb3I6IHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8gUGFnaW5hdGlvblxcbiRwYWdpbmF0aW9uLXBhZGRpbmcteTogLjY1cmVtO1xcbiRwYWdpbmF0aW9uLXBhZGRpbmcteDogLjVyZW07XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXktc206ICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXgtc206ICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteS1sZzogICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteC1sZzogICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgIDEuMjUgIWRlZmF1bHQ7XFxuXFxuJHBhZ2luYXRpb24tY29sb3I6ICRtZWRpdW0tZ3JheTtcXG4kcGFnaW5hdGlvbi1iZzogJHdoaXRlO1xcbi8vJHBhZ2luYXRpb24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1ib3JkZXItY29sb3I6ICR3aGl0ZTtcXG5cXG4vLyRwYWdpbmF0aW9uLWZvY3VzLWJveC1zaGFkb3c6ICAgICAgICRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdyAhZGVmYXVsdDtcXG5cXG4kcGFnaW5hdGlvbi1ob3Zlci1jb2xvcjogJHBhZ2luYXRpb24tY29sb3I7XFxuJHBhZ2luYXRpb24taG92ZXItYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWhvdmVyLWJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yO1xcblxcbiRwYWdpbmF0aW9uLWFjdGl2ZS1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kcGFnaW5hdGlvbi1hY3RpdmUtYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWFjdGl2ZS1ib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWJvcmRlci1jb2xvcjtcXG5cXG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuJHBhZ2luYXRpb24tZGlzYWJsZWQtYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yO1xcblxcbi8vIEp1bWJvdHJvblxcbiRqdW1ib3Ryb24tcGFkZGluZzogMnJlbSAhZGVmYXVsdDtcXG4kanVtYm90cm9uLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG5cXG4vLyBDYXJkc1xcbiRjYXJkLXNwYWNlci14OiAuNjI1cmVtICFkZWZhdWx0O1xcbiRjYXJkLXNwYWNlci15OiAuNjI1cmVtICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci13aWR0aDogMXB4ICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci1yYWRpdXM6IDVweCAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItcmFkaXVzLWlubmVyOiAkY2FyZC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiRjYXJkLWNhcC1iZzogJGdyYXktMjAwICFkZWZhdWx0O1xcbiRjYXJkLWJnOiAjZmZmICFkZWZhdWx0O1xcbiRjYXJkLWxpbmstaG92ZXItY29sb3I6ICNmZmYgIWRlZmF1bHQ7XFxuJGNhcmQtYm9yZGVyLWNvbG9yOiAjZGJlNmU5ICFkZWZhdWx0O1xcbi8vJGNhcmQtaW5uZXItYm9yZGVyLXJhZGl1czogICAgICAgICAgY2FsYygjeyRjYXJkLWJvcmRlci1yYWRpdXN9IC0gI3skY2FyZC1ib3JkZXItd2lkdGh9KSAhZGVmYXVsdDtcXG4vLyRjYXJkLWNhcC1iZzogICAgICAgICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMDMpICFkZWZhdWx0O1xcbi8vJGNhcmQtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcblxcbi8vJGNhcmQtaW1nLW92ZXJsYXktcGFkZGluZzogICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWdyb3VwLW1hcmdpbjogICAgICAgICAgICAgICAgICgkZ3JpZC1ndXR0ZXItd2lkdGggLyAyKSAhZGVmYXVsdDtcXG4vLyRjYXJkLWRlY2stbWFyZ2luOiAgICAgICAgICAgICAgICAgICRjYXJkLWdyb3VwLW1hcmdpbiAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWNvbHVtbnMtY291bnQ6ICAgICAgICAgICAgICAgIDMgIWRlZmF1bHQ7XFxuLy8kY2FyZC1jb2x1bW5zLWdhcDogICAgICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbi8vJGNhcmQtY29sdW1ucy1tYXJnaW46ICAgICAgICAgICAgICAgJGNhcmQtc3BhY2VyLXkgIWRlZmF1bHQ7XFxuXFxuLy8gVG9vbHRpcHNcXG4vLyR0b29sdGlwLWZvbnQtc2l6ZTogICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XFxuLy8kdG9vbHRpcC1tYXgtd2lkdGg6ICAgICAgICAgICAyMDBweCAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWNvbG9yOiAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kdG9vbHRpcC1iZzogJG1lZGl1bS1ncmF5O1xcbi8vJHRvb2x0aXAtYm9yZGVyLXJhZGl1czogICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtb3BhY2l0eTogICAgICAgICAgICAgLjkgIWRlZmF1bHQ7XFxuJHRvb2x0aXAtcGFkZGluZy15OiAuNjI1cmVtO1xcbiR0b29sdGlwLXBhZGRpbmcteDogMS4yNXJlbTtcXG4vLyR0b29sdGlwLW1hcmdpbjogICAgICAgICAgICAgIDAgIWRlZmF1bHQ7XFxuXFxuLy8kdG9vbHRpcC1hcnJvdy13aWR0aDogICAgICAgICAuOHJlbSAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWFycm93LWhlaWdodDogICAgICAgIC40cmVtICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtYXJyb3ctY29sb3I6ICAgICAgICAgJHRvb2x0aXAtYmcgIWRlZmF1bHQ7XFxuXFxuLy8gUG9wb3ZlcnNcXG4vLyRwb3BvdmVyLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1iZzogICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1tYXgtd2lkdGg6ICAgICAgICAgICAgICAgICAyNzZweCAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLWJvcmRlci13aWR0aDogICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRwb3BvdmVyLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuJHBvcG92ZXItaGVhZGVyLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG4vLyRwb3BvdmVyLWhlYWRlci1jb2xvcjogICAgICAgICAgICAgICRoZWFkaW5ncy1jb2xvciAhZGVmYXVsdDtcXG4kcG9wb3Zlci1oZWFkZXItcGFkZGluZy15OiAuNjI1cmVtO1xcbiRwb3BvdmVyLWhlYWRlci1wYWRkaW5nLXg6IDEuMjVyZW07XFxuXFxuLy8kcG9wb3Zlci1ib2R5LWNvbG9yOiAgICAgICAgICAgICAgICAkYm9keS1jb2xvciAhZGVmYXVsdDtcXG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteTogLjYyNXJlbTtcXG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteDogMS4yNXJlbTtcXG5cXG4vLyRwb3BvdmVyLWFycm93LXdpZHRoOiAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1hcnJvdy1oZWlnaHQ6ICAgICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLWFycm93LWNvbG9yOiAgICAgICAgICAgICAgICRwb3BvdmVyLWJnICFkZWZhdWx0O1xcblxcbi8vJHBvcG92ZXItYXJyb3ctb3V0ZXItY29sb3I6ICAgICAgICAgZmFkZS1pbigkcG9wb3Zlci1ib3JkZXItY29sb3IsIC4wNSkgIWRlZmF1bHQ7XFxuXFxuLy8gQmFkZ2VzXFxuJGJhZGdlLWZvbnQtc2l6ZTogLjYyNXJlbSAhZGVmYXVsdDtcXG4kYmFkZ2UtZm9udC13ZWlnaHQ6IDUwMCAhZGVmYXVsdDtcXG4kYmFkZ2UtcGFkZGluZy15OiAuMjVyZW07XFxuJGJhZGdlLXBhZGRpbmcteDogLjVyZW07XFxuLy8kYmFkZ2UtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4vLyRiYWRnZS1waWxsLXBhZGRpbmcteDogICAgICAgICAgICAgIC42ZW0gIWRlZmF1bHQ7XFxuLy8kYmFkZ2UtcGlsbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG5cXG4vLyBNb2RhbHNcXG4kbW9kYWwtaW5uZXItcGFkZGluZzogMS44NzVyZW07XFxuXFxuLy8kbW9kYWwtZGlhbG9nLW1hcmdpbjogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRtb2RhbC1kaWFsb2ctbWFyZ2luLXktc20tdXA6IDEuNzVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQ6ICAgICAgICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG5cXG4vLyRtb2RhbC1jb250ZW50LWJnOiAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kbW9kYWwtY29udGVudC1ib3JkZXItY29sb3I6IG5vbmU7XFxuLy8kbW9kYWwtY29udGVudC1ib3JkZXItd2lkdGg6ICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRtb2RhbC1jb250ZW50LWJveC1zaGFkb3cteHM6IDAgOHB4IDE2cHggMCByZ2JhKDAsIDAsIDAsIC4xKTtcXG4kbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXNtLXVwOiAwIDhweCAxNnB4IDAgcmdiYSgwLCAwLCAwLCAuMSk7XFxuXFxuLy8kbW9kYWwtYmFja2Ryb3AtYmc6ICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuLy8kbW9kYWwtYmFja2Ryb3Atb3BhY2l0eTogICAgICAuNSAhZGVmYXVsdDtcXG4kbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjogbm9uZTtcXG4vLyRtb2RhbC1mb290ZXItYm9yZGVyLWNvbG9yOiAgICRtb2RhbC1oZWFkZXItYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbi8vJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGg6ICAgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJG1vZGFsLWZvb3Rlci1ib3JkZXItd2lkdGg6ICAgJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJG1vZGFsLWhlYWRlci1wYWRkaW5nOiAkbW9kYWwtaW5uZXItcGFkZGluZztcXG5cXG4kbW9kYWwtbGc6IDkwMHB4O1xcbiRtb2RhbC1tZDogNjgwcHg7XFxuJG1vZGFsLXNtOiA0MDBweDtcXG5cXG4vLyRtb2RhbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuM3MgZWFzZS1vdXQgIWRlZmF1bHQ7XFxuXFxuLy8gQWxlcnRzXFxuJGFsZXJ0LXBhZGRpbmcteTogMXJlbSAhZGVmYXVsdDtcXG4kYWxlcnQtcGFkZGluZy14OiAxcmVtO1xcbi8vJGFsZXJ0LW1hcmdpbi1ib3R0b206ICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4vLyRhbGVydC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGFsZXJ0LWxpbmstZm9udC13ZWlnaHQ6ICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuJGFsZXJ0LWJvcmRlci13aWR0aDogLjEyNXJlbTtcXG5cXG4vLyRhbGVydC1iZy1sZXZlbDogICAgICAgICAgICAgICAgICAgIC0xMCAhZGVmYXVsdDtcXG4vLyRhbGVydC1ib3JkZXItbGV2ZWw6ICAgICAgICAgICAgICAgIC05ICFkZWZhdWx0O1xcbi8vJGFsZXJ0LWNvbG9yLWxldmVsOiAgICAgICAgICAgICAgICAgNiAhZGVmYXVsdDtcXG5cXG4vLyBQcm9ncmVzcyBiYXJzXFxuLy8kcHJvZ3Jlc3MtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIC43NSkgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmc6ICAgICAgICAgICAgICAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1ib3gtc2hhZG93OiAgICAgICAgICAgICAgIGluc2V0IDAgLjFyZW0gLjFyZW0gcmdiYSgkYmxhY2ssIC4xKSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iYXItY29sb3I6ICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iYXItYmc6ICAgICAgICAgICAgICAgICAgIHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIikgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLWFuaW1hdGlvbi10aW1pbmc6ICAgICAxcyBsaW5lYXIgaW5maW5pdGUgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLXRyYW5zaXRpb246ICAgICAgICAgICB3aWR0aCAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBMaXN0IGdyb3VwXFxuLy8kbGlzdC1ncm91cC1iZzogICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRsaXN0LWdyb3VwLWJvcmRlci13aWR0aDogICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteTogJGlucHV0LXBhZGRpbmcteTtcXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteDogJGlucHV0LXBhZGRpbmcteDtcXG5cXG4kbGlzdC1ncm91cC1ob3Zlci1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1jb2xvcjogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWFjdGl2ZS1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1ib3JkZXItY29sb3I6ICAgICRsaXN0LWdyb3VwLWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kbGlzdC1ncm91cC1kaXNhYmxlZC1iZzogICAgICAgICAgICAkbGlzdC1ncm91cC1iZyAhZGVmYXVsdDtcXG5cXG4vLyRsaXN0LWdyb3VwLWFjdGlvbi1jb2xvcjogICAgICAgICAgICRncmF5LTcwMCAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3Rpb24taG92ZXItY29sb3I6ICR3aGl0ZTtcXG5cXG4kbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWNvbG9yOiAkYm9keS1jb2xvciAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWJnOiAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuXFxuLy8gSW1hZ2UgdGh1bWJuYWlsc1xcbiR0aHVtYm5haWwtcGFkZGluZzogMDtcXG4vLyR0aHVtYm5haWwtYmc6ICAgICAgICAgICAgICAgICAgICAgICRib2R5LWJnICFkZWZhdWx0O1xcbi8vJHRodW1ibmFpbC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kdGh1bWJuYWlsLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kdGh1bWJuYWlsLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kdGh1bWJuYWlsLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8gRmlndXJlc1xcbi8vJGZpZ3VyZS1jYXB0aW9uLWZvbnQtc2l6ZTogICAgICAgICAgOTAlICFkZWZhdWx0O1xcbiRmaWd1cmUtY2FwdGlvbi1jb2xvcjogJG1lZGl1bS1ncmF5O1xcblxcbi8vIEJyZWFkY3J1bWJzXFxuJGJyZWFkY3J1bWItcGFkZGluZy15OiAuMzEyNXJlbTtcXG4kYnJlYWRjcnVtYi1wYWRkaW5nLXg6IC4zMTI1cmVtO1xcbiRicmVhZGNydW1iLWl0ZW0tcGFkZGluZzogLjNyZW07XFxuXFxuJGJyZWFkY3J1bWItbWFyZ2luLWJvdHRvbTogMDtcXG5cXG4kYnJlYWRjcnVtYi1iZzogbm9uZTtcXG4kYnJlYWRjcnVtYi1kaXZpZGVyLWNvbG9yOiAkZGFyay1ncmF5O1xcbiRicmVhZGNydW1iLWFjdGl2ZS1jb2xvcjogJGV4dHJhLWRhcmstZ3JheTtcXG4kYnJlYWRjcnVtYi1kaXZpZGVyOiBcXFwiL1xcXCI7XFxuXFxuLy8gQ2Fyb3VzZWxcXG4vLyRjYXJvdXNlbC1jb250cm9sLWNvbG9yOiAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLXdpZHRoOiAgICAgICAgICAgIDE1JSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLW9wYWNpdHk6ICAgICAgICAgIC41ICFkZWZhdWx0O1xcblxcbi8vJGNhcm91c2VsLWluZGljYXRvci13aWR0aDogICAgICAgICAgMzBweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3ItaGVpZ2h0OiAgICAgICAgIDNweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3Itc3BhY2VyOiAgICAgICAgIDNweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1jYXB0aW9uLXdpZHRoOiAgICAgICAgICAgIDcwJSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jYXB0aW9uLWNvbG9yOiAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1jb250cm9sLWljb24td2lkdGg6ICAgICAgIDIwcHggIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24tYmc6ICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nI3skY2Fyb3VzZWwtY29udHJvbC1jb2xvcn0nIHZpZXdCb3g9JzAgMCA4IDgnJTNFJTNDcGF0aCBkPSdNNS4yNSAwbC00IDQgNCA0IDEuNS0xLjUtMi41LTIuNSAyLjUtMi41LTEuNS0xLjV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJGNhcm91c2VsLWNvbnRyb2wtbmV4dC1pY29uLWJnOiAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyN7JGNhcm91c2VsLWNvbnRyb2wtY29sb3J9JyB2aWV3Qm94PScwIDAgOCA4JyUzRSUzQ3BhdGggZD0nTTIuNzUgMGwtMS41IDEuNSAyLjUgMi41LTIuNSAyLjUgMS41IDEuNSA0LTQtNC00eicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBDbG9zZVxcbi8vJGNsb3NlLWZvbnQtc2l6ZTogICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMS41ICFkZWZhdWx0O1xcbi8vJGNsb3NlLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuLy8kY2xvc2UtY29sb3I6ICAgICAgICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuLy8kY2xvc2UtdGV4dC1zaGFkb3c6ICAgICAgICAgICAwIDFweCAwICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyBDb2RlXFxuLy8kY29kZS1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICA4Ny41JSAhZGVmYXVsdDtcXG4kY29kZS1jb2xvcjogJGJvZHktY29sb3I7XFxuXFxuLy8ka2JkLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAgICAuMnJlbSAhZGVmYXVsdDtcXG4vLyRrYmQtcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICAgIC40cmVtICFkZWZhdWx0O1xcbi8vJGtiZC1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICAgJGNvZGUtZm9udC1zaXplICFkZWZhdWx0O1xcbiRrYmQtY29sb3I6ICR3aGl0ZTtcXG4ka2JkLWJnOiAkZXh0cmEtZGFyay1ncmF5O1xcblxcbiRwcmUtY29sb3I6ICRib2R5LWNvbG9yO1xcbi8vJHByZS1zY3JvbGxhYmxlLW1heC1oZWlnaHQ6ICAgICAgICAgMzQwcHggIWRlZmF1bHQ7XFxuXFxuLy8gUHJpbnRpbmdcXG4vLyRwcmludC1wYWdlLXNpemU6ICAgICAgICAgICAgICAgICAgIGEzICFkZWZhdWx0O1xcbi8vJHByaW50LWJvZHktbWluLXdpZHRoOiAgICAgICAgICAgICAgbWFwLWdldCgkZ3JpZC1icmVha3BvaW50cywgXFxcImxnXFxcIikgIWRlZmF1bHQ7XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLnBzLWxvYWRlcltkYXRhLXYtMGFhODhmZDJde3dpZHRoOjEwMCV9LnBzLWxvYWRlciAuYW5pbWF0ZWQtYmFja2dyb3VuZFtkYXRhLXYtMGFhODhmZDJde2FuaW1hdGlvbi1kdXJhdGlvbjoxczthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlO2FuaW1hdGlvbi1uYW1lOmxvYWRpbmctZGF0YS12LTBhYTg4ZmQyO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246bGluZWFyO2JhY2tncm91bmQ6I2ZhZmJmYztiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2ZhZmJmYyA4JSwgI2NjYyAxOCUsICNmYWZiZmMgMzMlKTtiYWNrZ3JvdW5kLXNpemU6MTAwJTtoZWlnaHQ6NDBweDtwb3NpdGlvbjpyZWxhdGl2ZX0ucHMtbG9hZGVyIC5iYWNrZ3JvdW5kLW1hc2tlcltkYXRhLXYtMGFhODhmZDJde2JhY2tncm91bmQ6d2hpdGU7cG9zaXRpb246YWJzb2x1dGV9QGtleWZyYW1lcyBsb2FkaW5nLWRhdGEtdi0wYWE4OGZkMnswJXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi01MDBweCAwfTEwMCV7YmFja2dyb3VuZC1wb3NpdGlvbjo1MDBweCAwfX1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9qcy9hcHAvd2lkZ2V0cy9wcy1sb2FkZXIudnVlXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvcHJlc3Rha2l0L3Njc3MvX3ZhcmlhYmxlcy5zY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQXFDQSw0QkFDRSxVQUFXLENBRGIsaURBR0kscUJBQXNCLENBQ3RCLGtDQUFtQyxDQUNuQyxzQ0FBdUIsQ0FDdkIsZ0NBQWlDLENBQ2pDLGtCQ3RDYyxDRHVDZCx1RUFBOEUsQ0FDOUUsb0JBQXFCLENBQ3JCLFdBQVksQ0FDWixpQkFBa0IsQ0FYdEIsK0NBZUksZ0JBQWlCLENBQ2pCLGlCQUFrQixDQUNuQixtQ0FJRCxHQUNFLDRCQUNGLENBQ0EsS0FDRSwyQkFDRixDQUFBXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIlxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcbkBpbXBvcnQgJ35Ac2Nzcy9jb25maWcvX3NldHRpbmdzLnNjc3MnO1xcblxcbi5wcy1sb2FkZXIge1xcbiAgd2lkdGg6IDEwMCU7XFxuICAuYW5pbWF0ZWQtYmFja2dyb3VuZCB7XFxuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMXM7XFxuICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xcbiAgICBhbmltYXRpb24tbmFtZTogbG9hZGluZztcXG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xcbiAgICBiYWNrZ3JvdW5kOiAkZ3JheS1zb2Z0O1xcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICRncmF5LXNvZnQgOCUsICNjY2MgMTglLCAkZ3JheS1zb2Z0IDMzJSk7XFxuICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcXG4gICAgaGVpZ2h0OiA0MHB4O1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB9XFxuXFxuICAuYmFja2dyb3VuZC1tYXNrZXIge1xcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgfVxcbn1cXG5cXG5Aa2V5ZnJhbWVzIGxvYWRpbmd7XFxuICAwJXtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTUwMHB4IDBcXG4gIH1cXG4gIDEwMCV7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDUwMHB4IDBcXG4gIH1cXG59XFxuXCIsXCIvKiBzdHlsZWxpbnQtZGlzYWJsZSAqL1xcblxcbi8vIENvbG9yIHN5c3RlbVxcbiR3aGl0ZTogI2ZmZjtcXG4kZ3JheS1kaXNhYmxlZDogI2VhZWJlYztcXG4kZ3JheS0xMDA6ICNmYWZiZmM7XFxuJGdyYXktMjAwOiAjZmFmYmZjO1xcbiRncmF5LTI1MDogI2ZhZmJmYztcXG4kZ3JheS0zMDA6ICNiYmNkZDI7XFxuJGdyYXktNDAwOiAjYmJjZGQyO1xcbiRncmF5LTQ1MDogI2IzYzdjZDtcXG4kZ3JheS01MDA6ICM2Yzg2OGU7XFxuJGdyYXktNTUwOiAjNzA4MDkwO1xcbiRncmF5LTYwMDogIzZjODY4ZTtcXG4kZ3JheS03MDA6ICMzNjNhNDE7XFxuJGdyYXktNzUwOiAjMzYzYTQxO1xcbiRncmF5LTgwMDogIzM2M2E0MTtcXG4kZ3JheS05MDA6ICMyODJiMzA7XFxuJGJsYWNrOiAjMDAwO1xcblxcbi8vIFBTIFZhcnNcXG4kZXh0cmEtbGlnaHQtZ3JheTogJGdyYXktMTAwO1xcbiRsaWdodC1ncmF5OiAkZ3JheS0zMDA7XFxuJG1lZGl1bS1ncmF5OiAkZ3JheS01MDA7XFxuJGRhcmstZ3JheTogJGdyYXktNzAwO1xcbiRleHRyYS1kYXJrLWdyYXk6ICRncmF5LTkwMDtcXG4kZ3JheS1saWdodDogJGxpZ2h0LWdyYXk7XFxuJGdyYXktbWVkaXVtOiAkbWVkaXVtLWdyYXk7XFxuJGdyYXktZGFyazogJGRhcmstZ3JheTtcXG4kZ3JheS1zb2Z0OiAkZ3JheS0yMDA7XFxuJGJhY2tncm91bmQtY29sb3I6ICNlZmYxZjI7XFxuJHByaW1hcnktbGlnaHRlbjogI2Y0ZmNmZDtcXG4kbG9jYWwtZm9udDogZmFsc2UgIWRlZmF1bHQ7XFxuXFxuJGJsdWU6ICMyNWI5ZDc7XFxuJGluZGlnbzogIzY2MTBmMiAhZGVmYXVsdDtcXG4kcHVycGxlOiAjNmY0MmMxICFkZWZhdWx0O1xcbiRwaW5rOiAjZTgzZThjICFkZWZhdWx0O1xcbiRyZWQ6ICNmNTRjM2U7XFxuJG9yYW5nZTogI2ZkN2UxNCAhZGVmYXVsdDtcXG4keWVsbG93OiAjZmFiMDAwO1xcbiRncmVlbjogIzcwYjU4MDtcXG4kb3JhbmdlOiAjZmQ3ZTE0ICFkZWZhdWx0O1xcbiR0ZWFsOiAjMjBjOTk3ICFkZWZhdWx0O1xcbiRjeWFuOiAkYmx1ZTtcXG4kbGlnaHQtYmx1ZTogI2Y0ZmNmZDtcXG5cXG4vLyBtYWluIGJ1dHRvbiBiYWNrZ3JvdW5kIGNvbG9yc1xcbiRwcmltYXJ5LWhvdmVyOiAjN2NkNWU3O1xcbiRwcmltYXJ5LWFjdGl2ZTogIzIxYTZjMTtcXG4kcHJpbWFyeS1kaXNhYmxlZDogI2QzZjFmNztcXG4kc2Vjb25kYXJ5LWhvdmVyOiAjYjdjZWQzO1xcbiRzZWNvbmRhcnktYWN0aXZlOiAjODg5ZGEyO1xcbiRkYW5nZXItaG92ZXI6ICNmZGUxZTE7XFxuJG5vdGljZTogI2RmZjVmOTtcXG5cXG4kcHJpbWFyeTogJGJsdWUgIWRlZmF1bHQ7XFxuJHNlY29uZGFyeTogJG1lZGl1bS1ncmF5O1xcbiRzdWNjZXNzOiAkZ3JlZW4gIWRlZmF1bHQ7XFxuJGluZm86ICRjeWFuICFkZWZhdWx0O1xcbiR3YXJuaW5nOiAkeWVsbG93ICFkZWZhdWx0O1xcbiRkYW5nZXI6ICRyZWQgIWRlZmF1bHQ7XFxuJGxpZ2h0OiAkZ3JheS0xMDAgIWRlZmF1bHQ7XFxuJGRhcms6ICRncmF5LTgwMCAhZGVmYXVsdDtcXG5cXG4kdG9hc3Qtc3VjY2VzczogIzUzZDU3MiAhZGVmYXVsdDtcXG4kdG9hc3Qtd2FybmluZzogI2ZhYjAwMCAhZGVmYXVsdDtcXG5cXG4kYnJhbmQtcHJpbWFyeTogJHByaW1hcnkgIWRlZmF1bHQ7XFxuJGJyYW5kLXNlY29uZGFyeTogJHNlY29uZGFyeSAhZGVmYXVsdDtcXG4kYnJhbmQtaW5mbzogIzViYzBkZSAhZGVmYXVsdDtcXG4kYnJhbmQtd2FybmluZzogI2YwYWQ0ZSAhZGVmYXVsdDtcXG4kYnJhbmQtc3VjY2VzczogJHN1Y2Nlc3MgIWRlZmF1bHQ7XFxuJGJyYW5kLWRhbmdlcjogJGRhbmdlciAhZGVmYXVsdDtcXG5cXG4kYnRuLXByaW1hcnktYmc6ICRwcmltYXJ5LWhvdmVyO1xcbiRidG4tc2Vjb25kYXJ5LWJvcmRlcjogIzAwMDtcXG4kYnRuLWluZm8tYmc6ICRicmFuZC1pbmZvICFkZWZhdWx0O1xcbiRidG4tc3VjY2Vzcy1iZzogJGJyYW5kLXN1Y2Nlc3MgIWRlZmF1bHQ7XFxuJGJ0bi13YXJuaW5nLWJnOiAkYnJhbmQtd2FybmluZyAhZGVmYXVsdDtcXG4kYnRuLWRhbmdlci1iZzogJGJyYW5kLWRhbmdlciAhZGVmYXVsdDtcXG5cXG4kdGhlbWUtY29sb3JzOiAoXFxuICBcXFwicHJpbWFyeVxcXCI6ICRwcmltYXJ5LFxcbiAgXFxcInNlY29uZGFyeVxcXCI6ICRzZWNvbmRhcnksXFxuICBcXFwic3VjY2Vzc1xcXCI6ICRzdWNjZXNzLFxcbiAgXFxcImluZm9cXFwiOiAkaW5mbyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogJHdhcm5pbmcsXFxuICBcXFwiZGFuZ2VyXFxcIjogJGRhbmdlcixcXG4gIFxcXCJsaWdodFxcXCI6ICRsaWdodCxcXG4gIFxcXCJkYXJrXFxcIjogJGRhcmtcXG4pO1xcblxcbiRhbGVydHMtYmFja2dyb3VuZC1jb2xvcnM6IChcXG4gIFxcXCJzdWNjZXNzXFxcIjogI2NiZjJkNCxcXG4gIFxcXCJpbmZvXFxcIjogI2JlZWFmMyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZmZmJkMyxcXG4gIFxcXCJkYW5nZXJcXFwiOiAjZmJjNmMzXFxuKTtcXG5cXG4kYWxlcnRzLXNlY29uZC1jb2xvcnM6IChcXG4gIFxcXCJzdWNjZXNzXFxcIjogIzUzZDU3MixcXG4gIFxcXCJpbmZvXFxcIjogIzI1YjlkNyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZhYjAwMCxcXG4gIFxcXCJkYW5nZXJcXFwiOiAjZjQ0MzM2XFxuKTtcXG5cXG4kdGhlbWUtYWxlcnRzLWljb25zOiAoXFxuICBzdWNjZXNzOiBcXFwiXFxcXEU1Q0FcXFwiLFxcbiAgaW5mbzogXFxcIlxcXFxlODhlXFxcIixcXG4gIHdhcm5pbmc6IFxcXCJcXFxcRTAwMlxcXCIsXFxuICBkYW5nZXI6IFxcXCJcXFxcZTAwMFxcXCJcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtaWNvbnM6IChcXG4gIFxcXCJwcmltYXJ5XFxcIjogJHByaW1hcnksXFxuICBcXFwic2Vjb25kYXJ5XFxcIjogJHNlY29uZGFyeSxcXG4gIFxcXCJzdWNjZXNzXFxcIjogJHN1Y2Nlc3MsXFxuICBcXFwiaW5mb1xcXCI6ICRpbmZvLFxcbiAgXFxcIndhcm5pbmdcXFwiOiAjZmFiMDAwLFxcbiAgXFxcImRhbmdlclxcXCI6ICRkYW5nZXIsXFxuICBcXFwibGlnaHRcXFwiOiAkbGlnaHRcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtaG92ZXI6IChcXG4gIHByaW1hcnk6ICRwcmltYXJ5LWhvdmVyLFxcbiAgc2Vjb25kYXJ5OiAkc2Vjb25kYXJ5LWhvdmVyLFxcbiAgc3VjY2VzczogIzliY2JhNixcXG4gIGluZm86ICRwcmltYXJ5LWhvdmVyLFxcbiAgd2FybmluZzogI2U2YjA0NSxcXG4gIGRhbmdlcjogI2U3NmQ3YSxcXG4gIGxpZ2h0OiAkZ3JheS04MDAsXFxuICBkYXJrOiAkZ3JheS0xMDAsXFxuICBkZWZhdWx0OiAkbGlnaHQtYmx1ZVxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1hY3RpdmU6IChcXG4gIHByaW1hcnk6ICRwcmltYXJ5LWFjdGl2ZSxcXG4gIHNlY29uZGFyeTogJHNlY29uZGFyeS1hY3RpdmUsXFxuICBzdWNjZXNzOiAjNWE5MTY2LFxcbiAgaW5mbzogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImluZm9cXFwiKSwgMTAlKSxcXG4gIHdhcm5pbmc6IGRhcmtlbihtYXAtZ2V0KCR0aGVtZS1jb2xvcnMsIFxcXCJ3YXJuaW5nXFxcIiksIDEwJSksXFxuICBkYW5nZXI6ICNjMzM2MmIsXFxuICBsaWdodDogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImxpZ2h0XFxcIiksIDEwJSksXFxuICBkYXJrOiBkYXJrZW4obWFwLWdldCgkdGhlbWUtY29sb3JzLCBcXFwiZGFya1xcXCIpLCAxMCUpLFxcbiAgZGVmYXVsdDogJHByaW1hcnlcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtYmFja2dyb3VuZDogKFxcbiAgcHJpbWFyeTogI2RmZjVmOSxcXG4gIHNlY29uZGFyeTogJGJsYWNrLFxcbiAgc3VjY2VzczogI2Q2ZjBkOCxcXG4gIGluZm86ICNkZmY1ZjksXFxuICB3YXJuaW5nOiAjZmZmYmQzLFxcbiAgZGFuZ2VyOiAjZmRlMWUxLFxcbiAgbGlnaHQ6ICRncmF5LTIwMCxcXG4gIGRhcms6ICRncmF5LTcwMFxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1zaGFkb3c6IChcXG4gIHByaW1hcnk6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIiksXFxuICBzZWNvbmRhcnk6ICRibGFjayxcXG4gIHN1Y2Nlc3M6IHRoZW1lLWNvbG9yKFxcXCJzdWNjZXNzXFxcIiksXFxuICBpbmZvOiB0aGVtZS1jb2xvcihcXFwiaW5mb1xcXCIpLFxcbiAgd2FybmluZzogdGhlbWUtY29sb3IoXFxcIndhcm5pbmdcXFwiKSxcXG4gIGRhbmdlcjogdGhlbWUtY29sb3IoXFxcImRhbmdlclxcXCIpLFxcbiAgbGlnaHQ6IHRoZW1lLWNvbG9yKFxcXCJsaWdodFxcXCIpLFxcbiAgZGFyazogdGhlbWUtY29sb3IoXFxcImRhcmtcXFwiKVxcbik7XFxuXFxuLy8gT3B0aW9uc1xcbiRlbmFibGUtY2FyZXQ6IHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1yb3VuZGVkOiB0cnVlO1xcbiRlbmFibGUtc2hhZG93czogdHJ1ZTtcXG4kZW5hYmxlLWdyYWRpZW50czogZmFsc2UgIWRlZmF1bHQ7XFxuJGVuYWJsZS10cmFuc2l0aW9uczogdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLWdyaWQtY2xhc3NlczogdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLXByaW50LXN0eWxlczogdHJ1ZSAhZGVmYXVsdDtcXG5cXG4vLyBTcGFjaW5nXFxuJHNwYWNlcjogMS44NzVyZW07XFxuXFxuJHNwYWNlcnM6IChcXG4gIDA6IDAsXFxuICAxOiAoXFxuICAgICRzcGFjZXIgLyA2XFxuICApLFxcbiAgMjogKFxcbiAgICAkc3BhY2VyIC8gM1xcbiAgKSxcXG4gIDM6IChcXG4gICAgJHNwYWNlciAvIDJcXG4gICksXFxuICA0OiAkc3BhY2VyLFxcbiAgNTogKFxcbiAgICAkc3BhY2VyICogMlxcbiAgKVxcbik7XFxuXFxuLy8gQm9keVxcbiRib2R5LWJnOiAkd2hpdGUgIWRlZmF1bHQ7XFxuJGJvZHktY29sb3I6ICRkYXJrLWdyYXk7XFxuXFxuLy8gTGlua3NcXG4kbGluay1ob3Zlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSAhZGVmYXVsdDtcXG4kbGluay1ob3Zlci1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuXFxuLy8gUGFyYWdyYXBoc1xcbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogMXJlbTtcXG5cXG4vLyBHcmlkIGJyZWFrcG9pbnRzXFxuJGdyaWQtYnJlYWtwb2ludHM6IChcXG4gIHhzOiAwLFxcbiAgc206IDU0NHB4LFxcbiAgbWQ6IDc2OHB4LFxcbiAgbGc6IDEwMjRweCxcXG4gIHhsOiAxMzAwcHgsXFxuICB4eGw6IDE2MDBweCAvLyBQUyBjdXN0b21cXG4pO1xcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRncmlkLWJyZWFrcG9pbnRzLCBcXFwiJGdyaWQtYnJlYWtwb2ludHNcXFwiKTtcXG5AaW5jbHVkZSBfYXNzZXJ0LXN0YXJ0cy1hdC16ZXJvKCRncmlkLWJyZWFrcG9pbnRzKTtcXG5cXG4vLyBHcmlkIGNvbnRhaW5lcnNcXG4kY29udGFpbmVyLW1heC13aWR0aHM6IChcXG4gIHNtOiA1NzZweCxcXG4gIG1kOiA3MjBweCxcXG4gIGxnOiA5NzJweCxcXG4gIHhsOiAxMjQwcHhcXG4pO1xcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRjb250YWluZXItbWF4LXdpZHRocywgXFxcIiRjb250YWluZXItbWF4LXdpZHRoc1xcXCIpO1xcblxcbi8vIEdyaWQgY29sdW1uc1xcbi8vJGdyaWQtY29sdW1uczogICAgICAgICAgICAgICAgMTIgIWRlZmF1bHQ7XFxuJGdyaWQtZ3V0dGVyLXdpZHRoOiAxLjg3NXJlbSAhZGVmYXVsdDtcXG5cXG4vLyBDb21wb25lbnRzXFxuLy8kbGluZS1oZWlnaHQtbGc6ICAgICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuLy8kbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuXFxuLy8kYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgICAxcHggIWRlZmF1bHQ7XFxuLy8kYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuXFxuJGJvcmRlci1yYWRpdXM6IDRweCAhZGVmYXVsdDtcXG4vLyRib3JkZXItcmFkaXVzLWxnOiAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xcbi8vJGJvcmRlci1yYWRpdXMtc206ICAgICAgICAgICAgLjJyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kY29tcG9uZW50LWFjdGl2ZS1jb2xvcjogICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kY29tcG9uZW50LWFjdGl2ZS1iZzogICAgICAgICB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpICFkZWZhdWx0O1xcblxcbiRjYXJldC13aWR0aDogLjI1cmVtO1xcblxcbi8vJHRyYW5zaXRpb24tYmFzZTogICAgICAgICAgICAgYWxsIC4ycyBlYXNlLWluLW91dCAhZGVmYXVsdDtcXG4vLyR0cmFuc2l0aW9uLWZhZGU6ICAgICAgICAgICAgIG9wYWNpdHkgLjE1cyBsaW5lYXIgIWRlZmF1bHQ7XFxuLy8kdHJhbnNpdGlvbi1jb2xsYXBzZTogICAgICAgICBoZWlnaHQgLjM1cyBlYXNlICFkZWZhdWx0O1xcblxcbi8vIEZvbnRzXFxuJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWY6IFxcXCJPcGVuIFNhbnNcXFwiLCBoZWx2ZXRpY2EsIGFyaWFsLCBzYW5zLXNlcmlmO1xcbi8vJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTogICAgICAgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcXFwiTGliZXJhdGlvbiBNb25vXFxcIiwgXFxcIkNvdXJpZXIgTmV3XFxcIiwgbW9ub3NwYWNlICFkZWZhdWx0O1xcbi8vJGZvbnQtZmFtaWx5LWJhc2U6ICAgICAgICAgICAgJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWYgIWRlZmF1bHQ7XFxuXFxuJGZvbnQtc2l6ZS1iYXNlOiAuODc1cmVtO1xcbiRmb250LXNpemUtbGc6IDFyZW07XFxuJGZvbnQtc2l6ZS1zbTogLjc1cmVtO1xcbiRmb250LXNpemUteHM6IC42MjVyZW07IC8vIFBTIGN1c3RvbVxcblxcbi8vJGZvbnQtd2VpZ2h0LWxpZ2h0OiAgICAgICAgICAgMzAwO1xcbi8vJGZvbnQtd2VpZ2h0LW5vcm1hbDogICAgICAgICAgNDAwO1xcbiRmb250LXdlaWdodC1zZW1pYm9sZDogNjAwO1xcbiRmb250LXdlaWdodC1ib2xkOiA3MDA7XFxuXFxuJGgxLWZvbnQtc2l6ZTogMS41cmVtO1xcbiRoMi1mb250LXNpemU6IDEuMjVyZW07XFxuJGgzLWZvbnQtc2l6ZTogMXJlbTtcXG4kaDQtZm9udC1zaXplOiAuODc1cmVtO1xcbiRoNS1mb250LXNpemU6IC43NXJlbTtcXG4kaDYtZm9udC1zaXplOiAuNjI1cmVtO1xcblxcbi8vJGhlYWRpbmdzLW1hcmdpbi1ib3R0b206ICAgICAgKCRzcGFjZXIgLyAyKSAhZGVmYXVsdDtcXG4kaGVhZGluZ3MtZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1zYW5zLXNlcmlmO1xcbiRoZWFkaW5ncy1mb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LWJvbGQ7XFxuJGhlYWRpbmdzLWNvbG9yOiAkYm9keS1jb2xvcjtcXG5cXG4vLyRkaXNwbGF5MS1zaXplOiAgICAgICAgICAgICAgIDZyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTItc2l6ZTogICAgICAgICAgICAgICA1LjVyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTMtc2l6ZTogICAgICAgICAgICAgICA0LjVyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTQtc2l6ZTogICAgICAgICAgICAgICAzLjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZGlzcGxheTEtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTItd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTMtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTQtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheS1saW5lLWhlaWdodDogICAgICAgICAkaGVhZGluZ3MtbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kbGVhZC1mb250LXNpemU6ICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkgIWRlZmF1bHQ7XFxuLy8kbGVhZC1mb250LXdlaWdodDogICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuXFxuLy8kc21hbGwtZm9udC1zaXplOiAgICAgICAgICAgICA4MCUgIWRlZmF1bHQ7XFxuXFxuJHRleHQtbXV0ZWQ6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyRibG9ja3F1b3RlLXNtYWxsLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG4vLyRibG9ja3F1b3RlLWZvbnQtc2l6ZTogICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAxLjI1KSAhZGVmYXVsdDtcXG5cXG4kaHItYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRoci1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuLy8kbWFyay1wYWRkaW5nOiAgICAgICAgICAgICAgICAuMmVtICFkZWZhdWx0O1xcblxcbi8vJGR0LWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuLy8ka2JkLWJveC1zaGFkb3c6ICAgICAgICAgICAgICBpbnNldCAwIC0uMXJlbSAwIHJnYmEoJGJsYWNrLCAuMjUpICFkZWZhdWx0O1xcbi8vJG5lc3RlZC1rYmQtZm9udC13ZWlnaHQ6ICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuLy8kbGlzdC1pbmxpbmUtcGFkZGluZzogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRtYXJrLWJnOiAgICAgICAgICAgICAgICAgICAgICNmY2Y4ZTMgIWRlZmF1bHQ7XFxuXFxuLy8kaHItbWFyZ2luLXk6ICAgICAgICAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xcblxcbi8vIFRhYmxlc1xcbiR0YWJsZS1jZWxsLXBhZGRpbmc6IC40cmVtO1xcbiR0YWJsZS1jZWxsLXBhZGRpbmctc206IC4yNXJlbTtcXG5cXG4vLyR0YWJsZS1iZzogICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xcbiR0YWJsZS1hY2NlbnQtYmc6ICRiYWNrZ3JvdW5kLWNvbG9yO1xcbiR0YWJsZS1ob3Zlci1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4kdGFibGUtYWN0aXZlLWJnOiB0aGVtZS1jb2xvci1ob3ZlcihcXFwicHJpbWFyeVxcXCIpO1xcblxcbi8vJHRhYmxlLWJvcmRlci13aWR0aDogICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyR0YWJsZS1ib3JkZXItY29sb3I6ICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcXG5cXG4kdGFibGUtaGVhZC1iZzogJGJhY2tncm91bmQtY29sb3I7XFxuJHRhYmxlLWhlYWQtY29sb3I6ICRib2R5LWNvbG9yO1xcblxcbiR0YWJsZS1kYXJrLWJnOiAkYm9keS1jb2xvcjtcXG4kdGFibGUtZGFyay1hY2NlbnQtYmc6ICRleHRyYS1kYXJrLWdyYXk7XFxuJHRhYmxlLWRhcmstaG92ZXItYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuJHRhYmxlLWRhcmstYm9yZGVyLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuLy8kdGFibGUtZGFyay1jb2xvcjogICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcXG5cXG4vLyBCdXR0b25zXFxuJGlucHV0LWJ0bi1wYWRkaW5nLXk6IC4zNzVyZW07XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXg6IC44MzhyZW07XFxuLy8kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0OiAgICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1idG4tZm9jdXMtd2lkdGg6ICAgICAgIC4ycmVtICFkZWZhdWx0O1xcbi8vJGlucHV0LWJ0bi1mb2N1cy1jb2xvcjogICAgICAgcmdiYSgkY29tcG9uZW50LWFjdGl2ZS1iZywgLjI1KSAhZGVmYXVsdDtcXG4vLyRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdzogIDAgMCAwICRpbnB1dC1idG4tZm9jdXMtd2lkdGggJGlucHV0LWJ0bi1mb2N1cy1jb2xvciAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYnRuLXBhZGRpbmcteS1zbTogLjMxM3JlbTtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteC1zbTogLjYyNXJlbTtcXG4vLyRpbnB1dC1idG4tbGluZS1oZWlnaHQtc206ICAgICRsaW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYnRuLXBhZGRpbmcteS1sZzogLjQzOHJlbTtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteC1sZzogLjgzOHJlbTtcXG4vLyRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGc6ICAgICRsaW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1idG4tYm9yZGVyLXdpZHRoOiAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuLy8gQnV0dG9uc1xcbiRidG4tcGFkZGluZy15OiAuNXJlbSAhZGVmYXVsdDtcXG4kYnRuLXBhZGRpbmcteDogMXJlbSAhZGVmYXVsdDtcXG4vLyRidG4tbGluZS1oZWlnaHQ6ICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXBhZGRpbmcteS1zbTogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAhZGVmYXVsdDtcXG4vLyRidG4tcGFkZGluZy14LXNtOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LXNtICFkZWZhdWx0O1xcbi8vJGJ0bi1saW5lLWhlaWdodC1zbTogICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRidG4tcGFkZGluZy15LWxnOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGcgIWRlZmF1bHQ7XFxuLy8kYnRuLWxpbmUtaGVpZ2h0LWxnOiAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGJ0bi1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuJGJ0bi1mb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LXNlbWlib2xkO1xcbiRidG4tYm94LXNoYWRvdzogbm9uZTtcXG4vLyRidG4tZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtd2lkdGggIWRlZmF1bHQ7XFxuJGJ0bi1mb2N1cy1ib3gtc2hhZG93OiBub25lO1xcbi8vJGJ0bi1kaXNhYmxlZC1vcGFjaXR5OiAgICAgICAgLjY1ICFkZWZhdWx0O1xcbiRidG4tYWN0aXZlLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8kYnRuLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLWJsb2NrLXNwYWNpbmcteTogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4kYnRuLWJvcmRlci1yYWRpdXM6IDRweDtcXG4vLyRidG4tYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgJGJvcmRlci1yYWRpdXMtc20gIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXRyYW5zaXRpb246ICAgICAgICAgICAgICBjb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XFxuXFxuLy8gRm9ybXNcXG4kaW5wdXQtcGFkZGluZy15OiAuMzc1cmVtO1xcbiRpbnB1dC1wYWRkaW5nLXg6IC40Mzc1cmVtO1xcbi8vJGlucHV0LWxpbmUtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtcGFkZGluZy15LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktc20gIWRlZmF1bHQ7XFxuLy8kaW5wdXQtcGFkZGluZy14LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtc20gIWRlZmF1bHQ7XFxuLy8kaW5wdXQtbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1wYWRkaW5nLXktbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1saW5lLWhlaWdodC1sZzogICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kaW5wdXQtZGlzYWJsZWQtYmc6ICNlY2VlZWY7XFxuXFxuJGlucHV0LWNvbG9yOiAkYm9keS1jb2xvcjtcXG4kaW5wdXQtYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRpbnB1dC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kaW5wdXQtYm94LXNoYWRvdzogbm9uZTtcXG5cXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzLWxnOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1zbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1mb2N1cy1iZzogICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYmcgIWRlZmF1bHQ7XFxuJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvcjogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRpbnB1dC1mb2N1cy1jb2xvcjogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1mb2N1cy13aWR0aCAhZGVmYXVsdDtcXG4kaW5wdXQtZm9jdXMtYm94LXNoYWRvdzogbm9uZTtcXG5cXG4kaW5wdXQtcGxhY2Vob2xkZXItY29sb3I6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtYm9yZGVyOiAgICAgICAgICAgICAgICAgICAkaW5wdXQtYm9yZGVyLXdpZHRoICogMiAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXI6ICAgICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogJGlucHV0LWJ0bi1saW5lLWhlaWdodCkgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXkgKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0OiAyLjE4OHJlbTtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXItc206ICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1zbSAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20pICsgKCRpbnB1dC1idG4tcGFkZGluZy15LXNtICogMikgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgICAgICAgICAgY2FsYygjeyRpbnB1dC1oZWlnaHQtaW5uZXItc219ICsgI3skaW5wdXQtaGVpZ2h0LWJvcmRlcn0pICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWhlaWdodC1pbm5lci1sZzogICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWxnICogJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZykgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0LWxnOiAyLjE4OHJlbTtcXG5cXG4vLyRpbnB1dC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xcblxcbi8vJGZvcm0tdGV4dC1tYXJnaW4tdG9wOiAgICAgICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLWNoZWNrLWlucHV0LWd1dHRlcjogICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXk6ICAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXg6ICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLWNoZWNrLWlubGluZS1tYXJnaW4teDogICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kZm9ybS1jaGVjay1pbmxpbmUtaW5wdXQtbWFyZ2luLXg6ICAgICAgLjMxMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZm9ybS1ncm91cC1tYXJnaW4tYm90dG9tOiAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1ncm91cC1hZGRvbi1jb2xvcjogICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuJGlucHV0LWdyb3VwLWFkZG9uLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG4vLyRpbnB1dC1ncm91cC1hZGRvbi1ib3JkZXItY29sb3I6ICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWd1dHRlcjogICAgICAgICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1zcGFjZXIteDogICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1zaXplOiAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJnOiAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1iZy1zaXplOiAgICAgIDUwJSA1MCUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJveC1zaGFkb3c6ICAgaW5zZXQgMCAuMjVyZW0gLjI1cmVtIHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWRpc2FibGVkLWJnOiAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtbGFiZWwtZGlzYWJsZWQtY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3I6ICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1iZzogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWRpc2FibGVkLWJnOiAgcmdiYSh0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpLCAuNSkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtYm94LXNoYWRvdzogICBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1mb2N1cy1ib3gtc2hhZG93OiAgICAgMCAwIDAgMXB4ICRib2R5LWJnLCAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1jb2xvcjogICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICAgICAgIGxpZ2h0ZW4oJGNvbXBvbmVudC1hY3RpdmUtYmcsIDM1JSkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1ib3gtc2hhZG93OiAgICBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1czogICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDggOCclM0UlM0NwYXRoIGZpbGw9JyN7JGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yfScgZD0nTTYuNTY0Ljc1bC0zLjU5IDMuNjEyLTEuNTM4LTEuNTVMMCA0LjI2IDIuOTc0IDcuMjUgOCAyLjE5M3onLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWJnOiAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3I6ICRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWljb24taW5kZXRlcm1pbmF0ZTogIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA0JyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3J9JyBkPSdNMCAyaDQnLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWJveC1zaGFkb3c6IG5vbmUgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLXJhZGlvLWluZGljYXRvci1ib3JkZXItcmFkaXVzOiAgICAgICAgICA1MCUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXJhZGlvLWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4JyUzRSUzQ2NpcmNsZSByPSczJyBmaWxsPScjeyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvcn0nLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLXNlbGVjdC1wYWRkaW5nLXk6ICAgICAgICAgICAuMzc1cmVtICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQ6ICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yLXBhZGRpbmc6ICAgMXJlbSAhZGVmYXVsdDsgLy8gRXh0cmEgcGFkZGluZyB0byBhY2NvdW50IGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGJhY2tncm91bmQtaW1hZ2UgYmFzZWQgaW5kaWNhdG9yXFxuLy8kY3VzdG9tLXNlbGVjdC1saW5lLWhlaWdodDogICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtY29sb3I6ICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWRpc2FibGVkLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuLy8kY3VzdG9tLXNlbGVjdC1iZzogICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtZGlzYWJsZWQtYmc6ICRpbnB1dC1kaXNhYmxlZC1iZztcXG4kY3VzdG9tLXNlbGVjdC1iZy1zaXplOiA4cHggMTBweCAhZGVmYXVsdDsgLy8gSW4gcGl4ZWxzIGJlY2F1c2UgaW1hZ2UgZGltZW5zaW9uc1xcbiRjdXN0b20tc2VsZWN0LWluZGljYXRvci1jb2xvcjogJGlucHV0LWNvbG9yO1xcbi8vJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yOiAgICAgICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDUnJTNFJTNDcGF0aCBmaWxsPScjeyRjdXN0b20tc2VsZWN0LWluZGljYXRvci1jb2xvcn0nIGQ9J00yIDBMMCAyaDR6bTAgNUwwIDNoNHonLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItd2lkdGg6ICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWJvcmRlci1jb2xvcjogICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItcmFkaXVzOiAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kY3VzdG9tLXNlbGVjdC1mb2N1cy1ib3JkZXItY29sb3I6ICRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3I7XFxuJGN1c3RvbS1zZWxlY3QtZm9jdXMtYm94LXNoYWRvdzogJGlucHV0LWZvY3VzLWJveC1zaGFkb3c7XFxuXFxuLy8kY3VzdG9tLXNlbGVjdC1mb250LXNpemUtc206ICAgICAgICA3NSUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQtc206ICAgICAgICAgICAkaW5wdXQtaGVpZ2h0LXNtICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1zZWxlY3QtZm9udC1zaXplLWxnOiAgICAgICAgMTI1JSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWhlaWdodC1sZzogICAgICAgICAgICRpbnB1dC1oZWlnaHQtbGcgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWZpbGUtaGVpZ2h0OiAgICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWZvY3VzLWJvcmRlci1jb2xvcjogICAgJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLWZpbGUtZm9jdXMtYm94LXNoYWRvdzogJGlucHV0LWZvY3VzLWJveC1zaGFkb3c7XFxuXFxuLy8kY3VzdG9tLWZpbGUtcGFkZGluZy15OiAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1wYWRkaW5nLXg6ICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1jb2xvcjogICAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1iZzogICAgICAgICAgICAgICAgICAgICRpbnB1dC1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItd2lkdGg6ICAgICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJvcmRlci1jb2xvcjogICAgICAgICAgJGlucHV0LWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItcmFkaXVzOiAgICAgICAgICRpbnB1dC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJveC1zaGFkb3c6ICAgICAgICAgICAgJGlucHV0LWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYnV0dG9uLWNvbG9yOiAgICAgICAgICAkY3VzdG9tLWZpbGUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYnV0dG9uLWJnOiAgICAgICAgICAgICAkaW5wdXQtZ3JvdXAtYWRkb24tYmcgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtdGV4dDogKFxcbi8vICAgICAgICBlbjogXFxcIkJyb3dzZVxcXCJcXG4vLykgIWRlZmF1bHQ7XFxuXFxuJGN1cnNvci1kaXNhYmxlZDogbm90LWFsbG93ZWQ7IC8vIFBTIGN1c3RvbVxcblxcbi8vIEZvcm0gdmFsaWRhdGlvblxcbi8vJGZvcm0tZmVlZGJhY2stbWFyZ2luLXRvcDogICAgICAgICAgJGZvcm0tdGV4dC1tYXJnaW4tdG9wICFkZWZhdWx0O1xcbi8vJGZvcm0tZmVlZGJhY2stZm9udC1zaXplOiAgICAgICAgICAgJHNtYWxsLWZvbnQtc2l6ZSAhZGVmYXVsdDtcXG4kZm9ybS1mZWVkYmFjay12YWxpZC1jb2xvcjogdGhlbWUtY29sb3IoXFxcInN1Y2Nlc3NcXFwiKTtcXG4kZm9ybS1mZWVkYmFjay1pbnZhbGlkLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwiZGFuZ2VyXFxcIik7XFxuJGZvcm0tZmVlZGJhY2std2FybmluZy1jb2xvcjogdGhlbWUtY29sb3IoXFxcIndhcm5pbmdcXFwiKTsgLy8gUFMgY3VzdG9tXFxuXFxuLy8gRHJvcGRvd25zXFxuLy8kZHJvcGRvd24tbWluLXdpZHRoOiAgICAgICAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tcGFkZGluZy15OiAwO1xcbi8vJGRyb3Bkb3duLXBhZGRpbmcteTogICAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tc3BhY2VyOiAgICAgICAgICAgICAgICAgICAuMTI1cmVtICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLWJnOiAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRkcm9wZG93bi1ib3JkZXItY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJGRyb3Bkb3duLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRkcm9wZG93bi1kaXZpZGVyLWJnOiAkbGlnaHQtZ3JheTtcXG4vLyRkcm9wZG93bi1ib3gtc2hhZG93OiAgICAgICAgICAgICAgIDAgLjVyZW0gMXJlbSByZ2JhKCRibGFjaywgLjE3NSkgIWRlZmF1bHQ7XFxuXFxuJGRyb3Bkb3duLWxpbmstY29sb3I6ICRtZWRpdW0tZ3JheTtcXG4kZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kZHJvcGRvd24tbGluay1ob3Zlci1iZzogJHdoaXRlO1xcblxcbi8vJGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tbGluay1hY3RpdmUtYmc6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4vLyRkcm9wZG93bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG4kZHJvcGRvd24taXRlbS1wYWRkaW5nLXg6IC4zMTI1cmVtO1xcbiRkcm9wZG93bi1pdGVtLXBhZGRpbmcteTogLjMxMjVyZW07XFxuXFxuLy8kZHJvcGRvd24taGVhZGVyLWNvbG9yOiAgICAgICAgICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8gTmF2c1xcbiRuYXYtbGluay1wYWRkaW5nLXk6IC45Mzc1cmVtO1xcbiRuYXYtbGluay1wYWRkaW5nLXg6IDEuMjVyZW07XFxuJG5hdi1saW5rLWRpc2FibGVkLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG5cXG4kbmF2LXRhYnMtYm9yZGVyLWNvbG9yOiAkd2hpdGU7XFxuLy8kbmF2LXRhYnMtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJG5hdi10YWJzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpO1xcbiRuYXYtdGFicy1saW5rLWFjdGl2ZS1jb2xvcjogJGJvZHktY29sb3I7XFxuJG5hdi10YWJzLWxpbmstYWN0aXZlLWJnOiAkYm9keS1iZztcXG4kbmF2LXRhYnMtbGluay1hY3RpdmUtYm9yZGVyLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpO1xcblxcbiRuYXYtcGlsbHMtbGluay1ob3Zlci1ib3JkZXItY29sb3I6ICRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yOiAkbmF2LXRhYnMtbGluay1hY3RpdmUtY29sb3I7XFxuJG5hdi1waWxscy1saW5rLWFjdGl2ZS1iZzogI2Y0ZjlmYjtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjogJG5hdi10YWJzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjsgLy8gUFMgY3VzdG9tXFxuXFxuLy8kbmF2LXBpbGxzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRuYXYtcGlsbHMtbGluay1hY3RpdmUtY29sb3I6ICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbi8vJG5hdi1waWxscy1saW5rLWFjdGl2ZS1iZzogICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuLy8gTmF2YmFyXFxuLy8kbmF2YmFyLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAoJHNwYWNlciAvIDIpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItbmF2LWxpbmstcGFkZGluZy14OiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci1icmFuZC1mb250LXNpemU6ICAgICAgICAgICAgJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcXG5cXG4vLyRuYXYtbGluay1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAkbGluZS1oZWlnaHQtYmFzZSArICRuYXYtbGluay1wYWRkaW5nLXkgKiAyKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItYnJhbmQtaGVpZ2h0OiAgICAgICAgICAgICAgICRuYXZiYXItYnJhbmQtZm9udC1zaXplICogJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWJyYW5kLXBhZGRpbmcteTogICAgICAgICAgICAoJG5hdi1saW5rLWhlaWdodCAtICRuYXZiYXItYnJhbmQtaGVpZ2h0KSAvIDIgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy15OiAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLXRvZ2dsZXItZm9udC1zaXplOiAgICAgICAgICAkZm9udC1zaXplLWxnICFkZWZhdWx0O1xcbi8vJG5hdmJhci10b2dnbGVyLWJvcmRlci1yYWRpdXM6ICAgICAgJGJ0bi1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci1kYXJrLWNvbG9yOiAgICAgICAgICAgICAgICAgcmdiYSgkd2hpdGUsIC41KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay1ob3Zlci1jb2xvcjogICAgICAgICAgIHJnYmEoJHdoaXRlLCAuNzUpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLWFjdGl2ZS1jb2xvcjogICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLWRpc2FibGVkLWNvbG9yOiAgICAgICAgcmdiYSgkd2hpdGUsIC4yNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWRhcmstdG9nZ2xlci1pY29uLWJnOiAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItZGFyay1jb2xvcn0nIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLXRvZ2dsZXItYm9yZGVyLWNvbG9yOiAgcmdiYSgkd2hpdGUsIC4xKSAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItbGlnaHQtY29sb3I6ICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LWhvdmVyLWNvbG9yOiAgICAgICAgICByZ2JhKCRibGFjaywgLjcpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1saWdodC1hY3RpdmUtY29sb3I6ICAgICAgICAgcmdiYSgkYmxhY2ssIC45KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtZGlzYWJsZWQtY29sb3I6ICAgICAgIHJnYmEoJGJsYWNrLCAuMykgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LXRvZ2dsZXItaWNvbi1iZzogICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItbGlnaHQtY29sb3J9JyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtdG9nZ2xlci1ib3JkZXItY29sb3I6IHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8gUGFnaW5hdGlvblxcbiRwYWdpbmF0aW9uLXBhZGRpbmcteTogLjY1cmVtO1xcbiRwYWdpbmF0aW9uLXBhZGRpbmcteDogLjVyZW07XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXktc206ICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXgtc206ICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteS1sZzogICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteC1sZzogICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgIDEuMjUgIWRlZmF1bHQ7XFxuXFxuJHBhZ2luYXRpb24tY29sb3I6ICRtZWRpdW0tZ3JheTtcXG4kcGFnaW5hdGlvbi1iZzogJHdoaXRlO1xcbi8vJHBhZ2luYXRpb24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1ib3JkZXItY29sb3I6ICR3aGl0ZTtcXG5cXG4vLyRwYWdpbmF0aW9uLWZvY3VzLWJveC1zaGFkb3c6ICAgICAgICRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdyAhZGVmYXVsdDtcXG5cXG4kcGFnaW5hdGlvbi1ob3Zlci1jb2xvcjogJHBhZ2luYXRpb24tY29sb3I7XFxuJHBhZ2luYXRpb24taG92ZXItYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWhvdmVyLWJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yO1xcblxcbiRwYWdpbmF0aW9uLWFjdGl2ZS1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kcGFnaW5hdGlvbi1hY3RpdmUtYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWFjdGl2ZS1ib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWJvcmRlci1jb2xvcjtcXG5cXG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuJHBhZ2luYXRpb24tZGlzYWJsZWQtYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yO1xcblxcbi8vIEp1bWJvdHJvblxcbiRqdW1ib3Ryb24tcGFkZGluZzogMnJlbSAhZGVmYXVsdDtcXG4kanVtYm90cm9uLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG5cXG4vLyBDYXJkc1xcbiRjYXJkLXNwYWNlci14OiAuNjI1cmVtICFkZWZhdWx0O1xcbiRjYXJkLXNwYWNlci15OiAuNjI1cmVtICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci13aWR0aDogMXB4ICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci1yYWRpdXM6IDVweCAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItcmFkaXVzLWlubmVyOiAkY2FyZC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiRjYXJkLWNhcC1iZzogJGdyYXktMjAwICFkZWZhdWx0O1xcbiRjYXJkLWJnOiAjZmZmICFkZWZhdWx0O1xcbiRjYXJkLWxpbmstaG92ZXItY29sb3I6ICNmZmYgIWRlZmF1bHQ7XFxuJGNhcmQtYm9yZGVyLWNvbG9yOiAjZGJlNmU5ICFkZWZhdWx0O1xcbi8vJGNhcmQtaW5uZXItYm9yZGVyLXJhZGl1czogICAgICAgICAgY2FsYygjeyRjYXJkLWJvcmRlci1yYWRpdXN9IC0gI3skY2FyZC1ib3JkZXItd2lkdGh9KSAhZGVmYXVsdDtcXG4vLyRjYXJkLWNhcC1iZzogICAgICAgICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMDMpICFkZWZhdWx0O1xcbi8vJGNhcmQtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcblxcbi8vJGNhcmQtaW1nLW92ZXJsYXktcGFkZGluZzogICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWdyb3VwLW1hcmdpbjogICAgICAgICAgICAgICAgICgkZ3JpZC1ndXR0ZXItd2lkdGggLyAyKSAhZGVmYXVsdDtcXG4vLyRjYXJkLWRlY2stbWFyZ2luOiAgICAgICAgICAgICAgICAgICRjYXJkLWdyb3VwLW1hcmdpbiAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWNvbHVtbnMtY291bnQ6ICAgICAgICAgICAgICAgIDMgIWRlZmF1bHQ7XFxuLy8kY2FyZC1jb2x1bW5zLWdhcDogICAgICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbi8vJGNhcmQtY29sdW1ucy1tYXJnaW46ICAgICAgICAgICAgICAgJGNhcmQtc3BhY2VyLXkgIWRlZmF1bHQ7XFxuXFxuLy8gVG9vbHRpcHNcXG4vLyR0b29sdGlwLWZvbnQtc2l6ZTogICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XFxuLy8kdG9vbHRpcC1tYXgtd2lkdGg6ICAgICAgICAgICAyMDBweCAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWNvbG9yOiAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kdG9vbHRpcC1iZzogJG1lZGl1bS1ncmF5O1xcbi8vJHRvb2x0aXAtYm9yZGVyLXJhZGl1czogICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtb3BhY2l0eTogICAgICAgICAgICAgLjkgIWRlZmF1bHQ7XFxuJHRvb2x0aXAtcGFkZGluZy15OiAuNjI1cmVtO1xcbiR0b29sdGlwLXBhZGRpbmcteDogMS4yNXJlbTtcXG4vLyR0b29sdGlwLW1hcmdpbjogICAgICAgICAgICAgIDAgIWRlZmF1bHQ7XFxuXFxuLy8kdG9vbHRpcC1hcnJvdy13aWR0aDogICAgICAgICAuOHJlbSAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWFycm93LWhlaWdodDogICAgICAgIC40cmVtICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtYXJyb3ctY29sb3I6ICAgICAgICAgJHRvb2x0aXAtYmcgIWRlZmF1bHQ7XFxuXFxuLy8gUG9wb3ZlcnNcXG4vLyRwb3BvdmVyLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1iZzogICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1tYXgtd2lkdGg6ICAgICAgICAgICAgICAgICAyNzZweCAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLWJvcmRlci13aWR0aDogICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRwb3BvdmVyLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuJHBvcG92ZXItaGVhZGVyLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG4vLyRwb3BvdmVyLWhlYWRlci1jb2xvcjogICAgICAgICAgICAgICRoZWFkaW5ncy1jb2xvciAhZGVmYXVsdDtcXG4kcG9wb3Zlci1oZWFkZXItcGFkZGluZy15OiAuNjI1cmVtO1xcbiRwb3BvdmVyLWhlYWRlci1wYWRkaW5nLXg6IDEuMjVyZW07XFxuXFxuLy8kcG9wb3Zlci1ib2R5LWNvbG9yOiAgICAgICAgICAgICAgICAkYm9keS1jb2xvciAhZGVmYXVsdDtcXG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteTogLjYyNXJlbTtcXG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteDogMS4yNXJlbTtcXG5cXG4vLyRwb3BvdmVyLWFycm93LXdpZHRoOiAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1hcnJvdy1oZWlnaHQ6ICAgICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLWFycm93LWNvbG9yOiAgICAgICAgICAgICAgICRwb3BvdmVyLWJnICFkZWZhdWx0O1xcblxcbi8vJHBvcG92ZXItYXJyb3ctb3V0ZXItY29sb3I6ICAgICAgICAgZmFkZS1pbigkcG9wb3Zlci1ib3JkZXItY29sb3IsIC4wNSkgIWRlZmF1bHQ7XFxuXFxuLy8gQmFkZ2VzXFxuJGJhZGdlLWZvbnQtc2l6ZTogLjYyNXJlbSAhZGVmYXVsdDtcXG4kYmFkZ2UtZm9udC13ZWlnaHQ6IDUwMCAhZGVmYXVsdDtcXG4kYmFkZ2UtcGFkZGluZy15OiAuMjVyZW07XFxuJGJhZGdlLXBhZGRpbmcteDogLjVyZW07XFxuLy8kYmFkZ2UtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4vLyRiYWRnZS1waWxsLXBhZGRpbmcteDogICAgICAgICAgICAgIC42ZW0gIWRlZmF1bHQ7XFxuLy8kYmFkZ2UtcGlsbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG5cXG4vLyBNb2RhbHNcXG4kbW9kYWwtaW5uZXItcGFkZGluZzogMS44NzVyZW07XFxuXFxuLy8kbW9kYWwtZGlhbG9nLW1hcmdpbjogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRtb2RhbC1kaWFsb2ctbWFyZ2luLXktc20tdXA6IDEuNzVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQ6ICAgICAgICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG5cXG4vLyRtb2RhbC1jb250ZW50LWJnOiAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kbW9kYWwtY29udGVudC1ib3JkZXItY29sb3I6IG5vbmU7XFxuLy8kbW9kYWwtY29udGVudC1ib3JkZXItd2lkdGg6ICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRtb2RhbC1jb250ZW50LWJveC1zaGFkb3cteHM6IDAgOHB4IDE2cHggMCByZ2JhKDAsIDAsIDAsIC4xKTtcXG4kbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXNtLXVwOiAwIDhweCAxNnB4IDAgcmdiYSgwLCAwLCAwLCAuMSk7XFxuXFxuLy8kbW9kYWwtYmFja2Ryb3AtYmc6ICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuLy8kbW9kYWwtYmFja2Ryb3Atb3BhY2l0eTogICAgICAuNSAhZGVmYXVsdDtcXG4kbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjogbm9uZTtcXG4vLyRtb2RhbC1mb290ZXItYm9yZGVyLWNvbG9yOiAgICRtb2RhbC1oZWFkZXItYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbi8vJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGg6ICAgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJG1vZGFsLWZvb3Rlci1ib3JkZXItd2lkdGg6ICAgJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJG1vZGFsLWhlYWRlci1wYWRkaW5nOiAkbW9kYWwtaW5uZXItcGFkZGluZztcXG5cXG4kbW9kYWwtbGc6IDkwMHB4O1xcbiRtb2RhbC1tZDogNjgwcHg7XFxuJG1vZGFsLXNtOiA0MDBweDtcXG5cXG4vLyRtb2RhbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuM3MgZWFzZS1vdXQgIWRlZmF1bHQ7XFxuXFxuLy8gQWxlcnRzXFxuJGFsZXJ0LXBhZGRpbmcteTogMXJlbSAhZGVmYXVsdDtcXG4kYWxlcnQtcGFkZGluZy14OiAxcmVtO1xcbi8vJGFsZXJ0LW1hcmdpbi1ib3R0b206ICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4vLyRhbGVydC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGFsZXJ0LWxpbmstZm9udC13ZWlnaHQ6ICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuJGFsZXJ0LWJvcmRlci13aWR0aDogLjEyNXJlbTtcXG5cXG4vLyRhbGVydC1iZy1sZXZlbDogICAgICAgICAgICAgICAgICAgIC0xMCAhZGVmYXVsdDtcXG4vLyRhbGVydC1ib3JkZXItbGV2ZWw6ICAgICAgICAgICAgICAgIC05ICFkZWZhdWx0O1xcbi8vJGFsZXJ0LWNvbG9yLWxldmVsOiAgICAgICAgICAgICAgICAgNiAhZGVmYXVsdDtcXG5cXG4vLyBQcm9ncmVzcyBiYXJzXFxuLy8kcHJvZ3Jlc3MtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIC43NSkgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmc6ICAgICAgICAgICAgICAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1ib3gtc2hhZG93OiAgICAgICAgICAgICAgIGluc2V0IDAgLjFyZW0gLjFyZW0gcmdiYSgkYmxhY2ssIC4xKSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iYXItY29sb3I6ICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iYXItYmc6ICAgICAgICAgICAgICAgICAgIHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIikgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLWFuaW1hdGlvbi10aW1pbmc6ICAgICAxcyBsaW5lYXIgaW5maW5pdGUgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLXRyYW5zaXRpb246ICAgICAgICAgICB3aWR0aCAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBMaXN0IGdyb3VwXFxuLy8kbGlzdC1ncm91cC1iZzogICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRsaXN0LWdyb3VwLWJvcmRlci13aWR0aDogICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteTogJGlucHV0LXBhZGRpbmcteTtcXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteDogJGlucHV0LXBhZGRpbmcteDtcXG5cXG4kbGlzdC1ncm91cC1ob3Zlci1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1jb2xvcjogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWFjdGl2ZS1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1ib3JkZXItY29sb3I6ICAgICRsaXN0LWdyb3VwLWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kbGlzdC1ncm91cC1kaXNhYmxlZC1iZzogICAgICAgICAgICAkbGlzdC1ncm91cC1iZyAhZGVmYXVsdDtcXG5cXG4vLyRsaXN0LWdyb3VwLWFjdGlvbi1jb2xvcjogICAgICAgICAgICRncmF5LTcwMCAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3Rpb24taG92ZXItY29sb3I6ICR3aGl0ZTtcXG5cXG4kbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWNvbG9yOiAkYm9keS1jb2xvciAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWJnOiAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuXFxuLy8gSW1hZ2UgdGh1bWJuYWlsc1xcbiR0aHVtYm5haWwtcGFkZGluZzogMDtcXG4vLyR0aHVtYm5haWwtYmc6ICAgICAgICAgICAgICAgICAgICAgICRib2R5LWJnICFkZWZhdWx0O1xcbi8vJHRodW1ibmFpbC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kdGh1bWJuYWlsLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kdGh1bWJuYWlsLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kdGh1bWJuYWlsLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8gRmlndXJlc1xcbi8vJGZpZ3VyZS1jYXB0aW9uLWZvbnQtc2l6ZTogICAgICAgICAgOTAlICFkZWZhdWx0O1xcbiRmaWd1cmUtY2FwdGlvbi1jb2xvcjogJG1lZGl1bS1ncmF5O1xcblxcbi8vIEJyZWFkY3J1bWJzXFxuJGJyZWFkY3J1bWItcGFkZGluZy15OiAuMzEyNXJlbTtcXG4kYnJlYWRjcnVtYi1wYWRkaW5nLXg6IC4zMTI1cmVtO1xcbiRicmVhZGNydW1iLWl0ZW0tcGFkZGluZzogLjNyZW07XFxuXFxuJGJyZWFkY3J1bWItbWFyZ2luLWJvdHRvbTogMDtcXG5cXG4kYnJlYWRjcnVtYi1iZzogbm9uZTtcXG4kYnJlYWRjcnVtYi1kaXZpZGVyLWNvbG9yOiAkZGFyay1ncmF5O1xcbiRicmVhZGNydW1iLWFjdGl2ZS1jb2xvcjogJGV4dHJhLWRhcmstZ3JheTtcXG4kYnJlYWRjcnVtYi1kaXZpZGVyOiBcXFwiL1xcXCI7XFxuXFxuLy8gQ2Fyb3VzZWxcXG4vLyRjYXJvdXNlbC1jb250cm9sLWNvbG9yOiAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLXdpZHRoOiAgICAgICAgICAgIDE1JSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLW9wYWNpdHk6ICAgICAgICAgIC41ICFkZWZhdWx0O1xcblxcbi8vJGNhcm91c2VsLWluZGljYXRvci13aWR0aDogICAgICAgICAgMzBweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3ItaGVpZ2h0OiAgICAgICAgIDNweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3Itc3BhY2VyOiAgICAgICAgIDNweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1jYXB0aW9uLXdpZHRoOiAgICAgICAgICAgIDcwJSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jYXB0aW9uLWNvbG9yOiAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1jb250cm9sLWljb24td2lkdGg6ICAgICAgIDIwcHggIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24tYmc6ICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nI3skY2Fyb3VzZWwtY29udHJvbC1jb2xvcn0nIHZpZXdCb3g9JzAgMCA4IDgnJTNFJTNDcGF0aCBkPSdNNS4yNSAwbC00IDQgNCA0IDEuNS0xLjUtMi41LTIuNSAyLjUtMi41LTEuNS0xLjV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJGNhcm91c2VsLWNvbnRyb2wtbmV4dC1pY29uLWJnOiAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyN7JGNhcm91c2VsLWNvbnRyb2wtY29sb3J9JyB2aWV3Qm94PScwIDAgOCA4JyUzRSUzQ3BhdGggZD0nTTIuNzUgMGwtMS41IDEuNSAyLjUgMi41LTIuNSAyLjUgMS41IDEuNSA0LTQtNC00eicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBDbG9zZVxcbi8vJGNsb3NlLWZvbnQtc2l6ZTogICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMS41ICFkZWZhdWx0O1xcbi8vJGNsb3NlLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuLy8kY2xvc2UtY29sb3I6ICAgICAgICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuLy8kY2xvc2UtdGV4dC1zaGFkb3c6ICAgICAgICAgICAwIDFweCAwICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyBDb2RlXFxuLy8kY29kZS1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICA4Ny41JSAhZGVmYXVsdDtcXG4kY29kZS1jb2xvcjogJGJvZHktY29sb3I7XFxuXFxuLy8ka2JkLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAgICAuMnJlbSAhZGVmYXVsdDtcXG4vLyRrYmQtcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICAgIC40cmVtICFkZWZhdWx0O1xcbi8vJGtiZC1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICAgJGNvZGUtZm9udC1zaXplICFkZWZhdWx0O1xcbiRrYmQtY29sb3I6ICR3aGl0ZTtcXG4ka2JkLWJnOiAkZXh0cmEtZGFyay1ncmF5O1xcblxcbiRwcmUtY29sb3I6ICRib2R5LWNvbG9yO1xcbi8vJHByZS1zY3JvbGxhYmxlLW1heC1oZWlnaHQ6ICAgICAgICAgMzQwcHggIWRlZmF1bHQ7XFxuXFxuLy8gUHJpbnRpbmdcXG4vLyRwcmludC1wYWdlLXNpemU6ICAgICAgICAgICAgICAgICAgIGEzICFkZWZhdWx0O1xcbi8vJHByaW50LWJvZHktbWluLXdpZHRoOiAgICAgICAgICAgICAgbWFwLWdldCgkZ3JpZC1icmVha3BvaW50cywgXFxcImxnXFxcIikgIWRlZmF1bHQ7XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLmhhcy1jb21iaW5hdGlvbiAucHJvZHVjdC10aXRsZVtkYXRhLXYtMWIzYTI3ZTBde2ZvbnQtd2VpZ2h0OjYwMH0udGh1bWJuYWlsW2RhdGEtdi0xYjNhMjdlMF0sLm5vLWltZ1tkYXRhLXYtMWIzYTI3ZTBde2JvcmRlcjojYmJjZGQyIDFweCBzb2xpZDttYXgtd2lkdGg6NDdweH0ubm8taW1nW2RhdGEtdi0xYjNhMjdlMF17YmFja2dyb3VuZDp3aGl0ZTt3aWR0aDo0N3B4O2hlaWdodDo0N3B4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZGVzY1tkYXRhLXYtMWIzYTI3ZTBde3doaXRlLXNwYWNlOm5vcm1hbH1zbWFsbFtkYXRhLXYtMWIzYTI3ZTBde2NvbG9yOiM2Yzg2OGV9XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vanMvYXBwL3dpZGdldHMvcHMtbWVkaWEudnVlXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvcHJlc3Rha2l0L3Njc3MvX3ZhcmlhYmxlcy5zY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQTRERSxpREFDRSxlQUFnQixDQUNqQixxREFHRCx3QkFBNkIsQ0FDN0IsY0FBZSxDQUNoQix5QkFFQyxnQkFBaUIsQ0FDakIsVUFBVyxDQUNYLFdBQVksQ0FDWixvQkFBcUIsQ0FDckIscUJBQXNCLENBQ3ZCLHVCQUVDLGtCQUFtQixDQUNwQix1QkFFQyxhQ3BFZ0JcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuQGltcG9ydCAnfkBzY3NzL2NvbmZpZy9fc2V0dGluZ3Muc2Nzcyc7XFxuXFxuLnByb2R1Y3QtdGl0bGUge1xcbiAgLmhhcy1jb21iaW5hdGlvbiAmIHtcXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gIH1cXG59XFxuLnRodW1ibmFpbCwgLm5vLWltZyB7XFxuICBib3JkZXI6ICRncmF5LWxpZ2h0IDFweCBzb2xpZDtcXG4gIG1heC13aWR0aDogNDdweDtcXG59XFxuLm5vLWltZyB7XFxuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcXG4gIHdpZHRoOiA0N3B4O1xcbiAgaGVpZ2h0OiA0N3B4O1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuLmRlc2Mge1xcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG59XFxuc21hbGwge1xcbiAgY29sb3I6ICRncmF5LW1lZGl1bTtcXG59XFxuXCIsXCIvKiBzdHlsZWxpbnQtZGlzYWJsZSAqL1xcblxcbi8vIENvbG9yIHN5c3RlbVxcbiR3aGl0ZTogI2ZmZjtcXG4kZ3JheS1kaXNhYmxlZDogI2VhZWJlYztcXG4kZ3JheS0xMDA6ICNmYWZiZmM7XFxuJGdyYXktMjAwOiAjZmFmYmZjO1xcbiRncmF5LTI1MDogI2ZhZmJmYztcXG4kZ3JheS0zMDA6ICNiYmNkZDI7XFxuJGdyYXktNDAwOiAjYmJjZGQyO1xcbiRncmF5LTQ1MDogI2IzYzdjZDtcXG4kZ3JheS01MDA6ICM2Yzg2OGU7XFxuJGdyYXktNTUwOiAjNzA4MDkwO1xcbiRncmF5LTYwMDogIzZjODY4ZTtcXG4kZ3JheS03MDA6ICMzNjNhNDE7XFxuJGdyYXktNzUwOiAjMzYzYTQxO1xcbiRncmF5LTgwMDogIzM2M2E0MTtcXG4kZ3JheS05MDA6ICMyODJiMzA7XFxuJGJsYWNrOiAjMDAwO1xcblxcbi8vIFBTIFZhcnNcXG4kZXh0cmEtbGlnaHQtZ3JheTogJGdyYXktMTAwO1xcbiRsaWdodC1ncmF5OiAkZ3JheS0zMDA7XFxuJG1lZGl1bS1ncmF5OiAkZ3JheS01MDA7XFxuJGRhcmstZ3JheTogJGdyYXktNzAwO1xcbiRleHRyYS1kYXJrLWdyYXk6ICRncmF5LTkwMDtcXG4kZ3JheS1saWdodDogJGxpZ2h0LWdyYXk7XFxuJGdyYXktbWVkaXVtOiAkbWVkaXVtLWdyYXk7XFxuJGdyYXktZGFyazogJGRhcmstZ3JheTtcXG4kZ3JheS1zb2Z0OiAkZ3JheS0yMDA7XFxuJGJhY2tncm91bmQtY29sb3I6ICNlZmYxZjI7XFxuJHByaW1hcnktbGlnaHRlbjogI2Y0ZmNmZDtcXG4kbG9jYWwtZm9udDogZmFsc2UgIWRlZmF1bHQ7XFxuXFxuJGJsdWU6ICMyNWI5ZDc7XFxuJGluZGlnbzogIzY2MTBmMiAhZGVmYXVsdDtcXG4kcHVycGxlOiAjNmY0MmMxICFkZWZhdWx0O1xcbiRwaW5rOiAjZTgzZThjICFkZWZhdWx0O1xcbiRyZWQ6ICNmNTRjM2U7XFxuJG9yYW5nZTogI2ZkN2UxNCAhZGVmYXVsdDtcXG4keWVsbG93OiAjZmFiMDAwO1xcbiRncmVlbjogIzcwYjU4MDtcXG4kb3JhbmdlOiAjZmQ3ZTE0ICFkZWZhdWx0O1xcbiR0ZWFsOiAjMjBjOTk3ICFkZWZhdWx0O1xcbiRjeWFuOiAkYmx1ZTtcXG4kbGlnaHQtYmx1ZTogI2Y0ZmNmZDtcXG5cXG4vLyBtYWluIGJ1dHRvbiBiYWNrZ3JvdW5kIGNvbG9yc1xcbiRwcmltYXJ5LWhvdmVyOiAjN2NkNWU3O1xcbiRwcmltYXJ5LWFjdGl2ZTogIzIxYTZjMTtcXG4kcHJpbWFyeS1kaXNhYmxlZDogI2QzZjFmNztcXG4kc2Vjb25kYXJ5LWhvdmVyOiAjYjdjZWQzO1xcbiRzZWNvbmRhcnktYWN0aXZlOiAjODg5ZGEyO1xcbiRkYW5nZXItaG92ZXI6ICNmZGUxZTE7XFxuJG5vdGljZTogI2RmZjVmOTtcXG5cXG4kcHJpbWFyeTogJGJsdWUgIWRlZmF1bHQ7XFxuJHNlY29uZGFyeTogJG1lZGl1bS1ncmF5O1xcbiRzdWNjZXNzOiAkZ3JlZW4gIWRlZmF1bHQ7XFxuJGluZm86ICRjeWFuICFkZWZhdWx0O1xcbiR3YXJuaW5nOiAkeWVsbG93ICFkZWZhdWx0O1xcbiRkYW5nZXI6ICRyZWQgIWRlZmF1bHQ7XFxuJGxpZ2h0OiAkZ3JheS0xMDAgIWRlZmF1bHQ7XFxuJGRhcms6ICRncmF5LTgwMCAhZGVmYXVsdDtcXG5cXG4kdG9hc3Qtc3VjY2VzczogIzUzZDU3MiAhZGVmYXVsdDtcXG4kdG9hc3Qtd2FybmluZzogI2ZhYjAwMCAhZGVmYXVsdDtcXG5cXG4kYnJhbmQtcHJpbWFyeTogJHByaW1hcnkgIWRlZmF1bHQ7XFxuJGJyYW5kLXNlY29uZGFyeTogJHNlY29uZGFyeSAhZGVmYXVsdDtcXG4kYnJhbmQtaW5mbzogIzViYzBkZSAhZGVmYXVsdDtcXG4kYnJhbmQtd2FybmluZzogI2YwYWQ0ZSAhZGVmYXVsdDtcXG4kYnJhbmQtc3VjY2VzczogJHN1Y2Nlc3MgIWRlZmF1bHQ7XFxuJGJyYW5kLWRhbmdlcjogJGRhbmdlciAhZGVmYXVsdDtcXG5cXG4kYnRuLXByaW1hcnktYmc6ICRwcmltYXJ5LWhvdmVyO1xcbiRidG4tc2Vjb25kYXJ5LWJvcmRlcjogIzAwMDtcXG4kYnRuLWluZm8tYmc6ICRicmFuZC1pbmZvICFkZWZhdWx0O1xcbiRidG4tc3VjY2Vzcy1iZzogJGJyYW5kLXN1Y2Nlc3MgIWRlZmF1bHQ7XFxuJGJ0bi13YXJuaW5nLWJnOiAkYnJhbmQtd2FybmluZyAhZGVmYXVsdDtcXG4kYnRuLWRhbmdlci1iZzogJGJyYW5kLWRhbmdlciAhZGVmYXVsdDtcXG5cXG4kdGhlbWUtY29sb3JzOiAoXFxuICBcXFwicHJpbWFyeVxcXCI6ICRwcmltYXJ5LFxcbiAgXFxcInNlY29uZGFyeVxcXCI6ICRzZWNvbmRhcnksXFxuICBcXFwic3VjY2Vzc1xcXCI6ICRzdWNjZXNzLFxcbiAgXFxcImluZm9cXFwiOiAkaW5mbyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogJHdhcm5pbmcsXFxuICBcXFwiZGFuZ2VyXFxcIjogJGRhbmdlcixcXG4gIFxcXCJsaWdodFxcXCI6ICRsaWdodCxcXG4gIFxcXCJkYXJrXFxcIjogJGRhcmtcXG4pO1xcblxcbiRhbGVydHMtYmFja2dyb3VuZC1jb2xvcnM6IChcXG4gIFxcXCJzdWNjZXNzXFxcIjogI2NiZjJkNCxcXG4gIFxcXCJpbmZvXFxcIjogI2JlZWFmMyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZmZmJkMyxcXG4gIFxcXCJkYW5nZXJcXFwiOiAjZmJjNmMzXFxuKTtcXG5cXG4kYWxlcnRzLXNlY29uZC1jb2xvcnM6IChcXG4gIFxcXCJzdWNjZXNzXFxcIjogIzUzZDU3MixcXG4gIFxcXCJpbmZvXFxcIjogIzI1YjlkNyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZhYjAwMCxcXG4gIFxcXCJkYW5nZXJcXFwiOiAjZjQ0MzM2XFxuKTtcXG5cXG4kdGhlbWUtYWxlcnRzLWljb25zOiAoXFxuICBzdWNjZXNzOiBcXFwiXFxcXEU1Q0FcXFwiLFxcbiAgaW5mbzogXFxcIlxcXFxlODhlXFxcIixcXG4gIHdhcm5pbmc6IFxcXCJcXFxcRTAwMlxcXCIsXFxuICBkYW5nZXI6IFxcXCJcXFxcZTAwMFxcXCJcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtaWNvbnM6IChcXG4gIFxcXCJwcmltYXJ5XFxcIjogJHByaW1hcnksXFxuICBcXFwic2Vjb25kYXJ5XFxcIjogJHNlY29uZGFyeSxcXG4gIFxcXCJzdWNjZXNzXFxcIjogJHN1Y2Nlc3MsXFxuICBcXFwiaW5mb1xcXCI6ICRpbmZvLFxcbiAgXFxcIndhcm5pbmdcXFwiOiAjZmFiMDAwLFxcbiAgXFxcImRhbmdlclxcXCI6ICRkYW5nZXIsXFxuICBcXFwibGlnaHRcXFwiOiAkbGlnaHRcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtaG92ZXI6IChcXG4gIHByaW1hcnk6ICRwcmltYXJ5LWhvdmVyLFxcbiAgc2Vjb25kYXJ5OiAkc2Vjb25kYXJ5LWhvdmVyLFxcbiAgc3VjY2VzczogIzliY2JhNixcXG4gIGluZm86ICRwcmltYXJ5LWhvdmVyLFxcbiAgd2FybmluZzogI2U2YjA0NSxcXG4gIGRhbmdlcjogI2U3NmQ3YSxcXG4gIGxpZ2h0OiAkZ3JheS04MDAsXFxuICBkYXJrOiAkZ3JheS0xMDAsXFxuICBkZWZhdWx0OiAkbGlnaHQtYmx1ZVxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1hY3RpdmU6IChcXG4gIHByaW1hcnk6ICRwcmltYXJ5LWFjdGl2ZSxcXG4gIHNlY29uZGFyeTogJHNlY29uZGFyeS1hY3RpdmUsXFxuICBzdWNjZXNzOiAjNWE5MTY2LFxcbiAgaW5mbzogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImluZm9cXFwiKSwgMTAlKSxcXG4gIHdhcm5pbmc6IGRhcmtlbihtYXAtZ2V0KCR0aGVtZS1jb2xvcnMsIFxcXCJ3YXJuaW5nXFxcIiksIDEwJSksXFxuICBkYW5nZXI6ICNjMzM2MmIsXFxuICBsaWdodDogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImxpZ2h0XFxcIiksIDEwJSksXFxuICBkYXJrOiBkYXJrZW4obWFwLWdldCgkdGhlbWUtY29sb3JzLCBcXFwiZGFya1xcXCIpLCAxMCUpLFxcbiAgZGVmYXVsdDogJHByaW1hcnlcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtYmFja2dyb3VuZDogKFxcbiAgcHJpbWFyeTogI2RmZjVmOSxcXG4gIHNlY29uZGFyeTogJGJsYWNrLFxcbiAgc3VjY2VzczogI2Q2ZjBkOCxcXG4gIGluZm86ICNkZmY1ZjksXFxuICB3YXJuaW5nOiAjZmZmYmQzLFxcbiAgZGFuZ2VyOiAjZmRlMWUxLFxcbiAgbGlnaHQ6ICRncmF5LTIwMCxcXG4gIGRhcms6ICRncmF5LTcwMFxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1zaGFkb3c6IChcXG4gIHByaW1hcnk6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIiksXFxuICBzZWNvbmRhcnk6ICRibGFjayxcXG4gIHN1Y2Nlc3M6IHRoZW1lLWNvbG9yKFxcXCJzdWNjZXNzXFxcIiksXFxuICBpbmZvOiB0aGVtZS1jb2xvcihcXFwiaW5mb1xcXCIpLFxcbiAgd2FybmluZzogdGhlbWUtY29sb3IoXFxcIndhcm5pbmdcXFwiKSxcXG4gIGRhbmdlcjogdGhlbWUtY29sb3IoXFxcImRhbmdlclxcXCIpLFxcbiAgbGlnaHQ6IHRoZW1lLWNvbG9yKFxcXCJsaWdodFxcXCIpLFxcbiAgZGFyazogdGhlbWUtY29sb3IoXFxcImRhcmtcXFwiKVxcbik7XFxuXFxuLy8gT3B0aW9uc1xcbiRlbmFibGUtY2FyZXQ6IHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1yb3VuZGVkOiB0cnVlO1xcbiRlbmFibGUtc2hhZG93czogdHJ1ZTtcXG4kZW5hYmxlLWdyYWRpZW50czogZmFsc2UgIWRlZmF1bHQ7XFxuJGVuYWJsZS10cmFuc2l0aW9uczogdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLWdyaWQtY2xhc3NlczogdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLXByaW50LXN0eWxlczogdHJ1ZSAhZGVmYXVsdDtcXG5cXG4vLyBTcGFjaW5nXFxuJHNwYWNlcjogMS44NzVyZW07XFxuXFxuJHNwYWNlcnM6IChcXG4gIDA6IDAsXFxuICAxOiAoXFxuICAgICRzcGFjZXIgLyA2XFxuICApLFxcbiAgMjogKFxcbiAgICAkc3BhY2VyIC8gM1xcbiAgKSxcXG4gIDM6IChcXG4gICAgJHNwYWNlciAvIDJcXG4gICksXFxuICA0OiAkc3BhY2VyLFxcbiAgNTogKFxcbiAgICAkc3BhY2VyICogMlxcbiAgKVxcbik7XFxuXFxuLy8gQm9keVxcbiRib2R5LWJnOiAkd2hpdGUgIWRlZmF1bHQ7XFxuJGJvZHktY29sb3I6ICRkYXJrLWdyYXk7XFxuXFxuLy8gTGlua3NcXG4kbGluay1ob3Zlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSAhZGVmYXVsdDtcXG4kbGluay1ob3Zlci1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuXFxuLy8gUGFyYWdyYXBoc1xcbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogMXJlbTtcXG5cXG4vLyBHcmlkIGJyZWFrcG9pbnRzXFxuJGdyaWQtYnJlYWtwb2ludHM6IChcXG4gIHhzOiAwLFxcbiAgc206IDU0NHB4LFxcbiAgbWQ6IDc2OHB4LFxcbiAgbGc6IDEwMjRweCxcXG4gIHhsOiAxMzAwcHgsXFxuICB4eGw6IDE2MDBweCAvLyBQUyBjdXN0b21cXG4pO1xcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRncmlkLWJyZWFrcG9pbnRzLCBcXFwiJGdyaWQtYnJlYWtwb2ludHNcXFwiKTtcXG5AaW5jbHVkZSBfYXNzZXJ0LXN0YXJ0cy1hdC16ZXJvKCRncmlkLWJyZWFrcG9pbnRzKTtcXG5cXG4vLyBHcmlkIGNvbnRhaW5lcnNcXG4kY29udGFpbmVyLW1heC13aWR0aHM6IChcXG4gIHNtOiA1NzZweCxcXG4gIG1kOiA3MjBweCxcXG4gIGxnOiA5NzJweCxcXG4gIHhsOiAxMjQwcHhcXG4pO1xcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRjb250YWluZXItbWF4LXdpZHRocywgXFxcIiRjb250YWluZXItbWF4LXdpZHRoc1xcXCIpO1xcblxcbi8vIEdyaWQgY29sdW1uc1xcbi8vJGdyaWQtY29sdW1uczogICAgICAgICAgICAgICAgMTIgIWRlZmF1bHQ7XFxuJGdyaWQtZ3V0dGVyLXdpZHRoOiAxLjg3NXJlbSAhZGVmYXVsdDtcXG5cXG4vLyBDb21wb25lbnRzXFxuLy8kbGluZS1oZWlnaHQtbGc6ICAgICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuLy8kbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuXFxuLy8kYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgICAxcHggIWRlZmF1bHQ7XFxuLy8kYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuXFxuJGJvcmRlci1yYWRpdXM6IDRweCAhZGVmYXVsdDtcXG4vLyRib3JkZXItcmFkaXVzLWxnOiAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xcbi8vJGJvcmRlci1yYWRpdXMtc206ICAgICAgICAgICAgLjJyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kY29tcG9uZW50LWFjdGl2ZS1jb2xvcjogICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kY29tcG9uZW50LWFjdGl2ZS1iZzogICAgICAgICB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpICFkZWZhdWx0O1xcblxcbiRjYXJldC13aWR0aDogLjI1cmVtO1xcblxcbi8vJHRyYW5zaXRpb24tYmFzZTogICAgICAgICAgICAgYWxsIC4ycyBlYXNlLWluLW91dCAhZGVmYXVsdDtcXG4vLyR0cmFuc2l0aW9uLWZhZGU6ICAgICAgICAgICAgIG9wYWNpdHkgLjE1cyBsaW5lYXIgIWRlZmF1bHQ7XFxuLy8kdHJhbnNpdGlvbi1jb2xsYXBzZTogICAgICAgICBoZWlnaHQgLjM1cyBlYXNlICFkZWZhdWx0O1xcblxcbi8vIEZvbnRzXFxuJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWY6IFxcXCJPcGVuIFNhbnNcXFwiLCBoZWx2ZXRpY2EsIGFyaWFsLCBzYW5zLXNlcmlmO1xcbi8vJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTogICAgICAgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcXFwiTGliZXJhdGlvbiBNb25vXFxcIiwgXFxcIkNvdXJpZXIgTmV3XFxcIiwgbW9ub3NwYWNlICFkZWZhdWx0O1xcbi8vJGZvbnQtZmFtaWx5LWJhc2U6ICAgICAgICAgICAgJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWYgIWRlZmF1bHQ7XFxuXFxuJGZvbnQtc2l6ZS1iYXNlOiAuODc1cmVtO1xcbiRmb250LXNpemUtbGc6IDFyZW07XFxuJGZvbnQtc2l6ZS1zbTogLjc1cmVtO1xcbiRmb250LXNpemUteHM6IC42MjVyZW07IC8vIFBTIGN1c3RvbVxcblxcbi8vJGZvbnQtd2VpZ2h0LWxpZ2h0OiAgICAgICAgICAgMzAwO1xcbi8vJGZvbnQtd2VpZ2h0LW5vcm1hbDogICAgICAgICAgNDAwO1xcbiRmb250LXdlaWdodC1zZW1pYm9sZDogNjAwO1xcbiRmb250LXdlaWdodC1ib2xkOiA3MDA7XFxuXFxuJGgxLWZvbnQtc2l6ZTogMS41cmVtO1xcbiRoMi1mb250LXNpemU6IDEuMjVyZW07XFxuJGgzLWZvbnQtc2l6ZTogMXJlbTtcXG4kaDQtZm9udC1zaXplOiAuODc1cmVtO1xcbiRoNS1mb250LXNpemU6IC43NXJlbTtcXG4kaDYtZm9udC1zaXplOiAuNjI1cmVtO1xcblxcbi8vJGhlYWRpbmdzLW1hcmdpbi1ib3R0b206ICAgICAgKCRzcGFjZXIgLyAyKSAhZGVmYXVsdDtcXG4kaGVhZGluZ3MtZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1zYW5zLXNlcmlmO1xcbiRoZWFkaW5ncy1mb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LWJvbGQ7XFxuJGhlYWRpbmdzLWNvbG9yOiAkYm9keS1jb2xvcjtcXG5cXG4vLyRkaXNwbGF5MS1zaXplOiAgICAgICAgICAgICAgIDZyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTItc2l6ZTogICAgICAgICAgICAgICA1LjVyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTMtc2l6ZTogICAgICAgICAgICAgICA0LjVyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTQtc2l6ZTogICAgICAgICAgICAgICAzLjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZGlzcGxheTEtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTItd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTMtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTQtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheS1saW5lLWhlaWdodDogICAgICAgICAkaGVhZGluZ3MtbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kbGVhZC1mb250LXNpemU6ICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkgIWRlZmF1bHQ7XFxuLy8kbGVhZC1mb250LXdlaWdodDogICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuXFxuLy8kc21hbGwtZm9udC1zaXplOiAgICAgICAgICAgICA4MCUgIWRlZmF1bHQ7XFxuXFxuJHRleHQtbXV0ZWQ6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyRibG9ja3F1b3RlLXNtYWxsLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG4vLyRibG9ja3F1b3RlLWZvbnQtc2l6ZTogICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAxLjI1KSAhZGVmYXVsdDtcXG5cXG4kaHItYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRoci1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuLy8kbWFyay1wYWRkaW5nOiAgICAgICAgICAgICAgICAuMmVtICFkZWZhdWx0O1xcblxcbi8vJGR0LWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuLy8ka2JkLWJveC1zaGFkb3c6ICAgICAgICAgICAgICBpbnNldCAwIC0uMXJlbSAwIHJnYmEoJGJsYWNrLCAuMjUpICFkZWZhdWx0O1xcbi8vJG5lc3RlZC1rYmQtZm9udC13ZWlnaHQ6ICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuLy8kbGlzdC1pbmxpbmUtcGFkZGluZzogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRtYXJrLWJnOiAgICAgICAgICAgICAgICAgICAgICNmY2Y4ZTMgIWRlZmF1bHQ7XFxuXFxuLy8kaHItbWFyZ2luLXk6ICAgICAgICAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xcblxcbi8vIFRhYmxlc1xcbiR0YWJsZS1jZWxsLXBhZGRpbmc6IC40cmVtO1xcbiR0YWJsZS1jZWxsLXBhZGRpbmctc206IC4yNXJlbTtcXG5cXG4vLyR0YWJsZS1iZzogICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xcbiR0YWJsZS1hY2NlbnQtYmc6ICRiYWNrZ3JvdW5kLWNvbG9yO1xcbiR0YWJsZS1ob3Zlci1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4kdGFibGUtYWN0aXZlLWJnOiB0aGVtZS1jb2xvci1ob3ZlcihcXFwicHJpbWFyeVxcXCIpO1xcblxcbi8vJHRhYmxlLWJvcmRlci13aWR0aDogICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyR0YWJsZS1ib3JkZXItY29sb3I6ICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcXG5cXG4kdGFibGUtaGVhZC1iZzogJGJhY2tncm91bmQtY29sb3I7XFxuJHRhYmxlLWhlYWQtY29sb3I6ICRib2R5LWNvbG9yO1xcblxcbiR0YWJsZS1kYXJrLWJnOiAkYm9keS1jb2xvcjtcXG4kdGFibGUtZGFyay1hY2NlbnQtYmc6ICRleHRyYS1kYXJrLWdyYXk7XFxuJHRhYmxlLWRhcmstaG92ZXItYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuJHRhYmxlLWRhcmstYm9yZGVyLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuLy8kdGFibGUtZGFyay1jb2xvcjogICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcXG5cXG4vLyBCdXR0b25zXFxuJGlucHV0LWJ0bi1wYWRkaW5nLXk6IC4zNzVyZW07XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXg6IC44MzhyZW07XFxuLy8kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0OiAgICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1idG4tZm9jdXMtd2lkdGg6ICAgICAgIC4ycmVtICFkZWZhdWx0O1xcbi8vJGlucHV0LWJ0bi1mb2N1cy1jb2xvcjogICAgICAgcmdiYSgkY29tcG9uZW50LWFjdGl2ZS1iZywgLjI1KSAhZGVmYXVsdDtcXG4vLyRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdzogIDAgMCAwICRpbnB1dC1idG4tZm9jdXMtd2lkdGggJGlucHV0LWJ0bi1mb2N1cy1jb2xvciAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYnRuLXBhZGRpbmcteS1zbTogLjMxM3JlbTtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteC1zbTogLjYyNXJlbTtcXG4vLyRpbnB1dC1idG4tbGluZS1oZWlnaHQtc206ICAgICRsaW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYnRuLXBhZGRpbmcteS1sZzogLjQzOHJlbTtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteC1sZzogLjgzOHJlbTtcXG4vLyRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGc6ICAgICRsaW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1idG4tYm9yZGVyLXdpZHRoOiAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuLy8gQnV0dG9uc1xcbiRidG4tcGFkZGluZy15OiAuNXJlbSAhZGVmYXVsdDtcXG4kYnRuLXBhZGRpbmcteDogMXJlbSAhZGVmYXVsdDtcXG4vLyRidG4tbGluZS1oZWlnaHQ6ICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXBhZGRpbmcteS1zbTogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAhZGVmYXVsdDtcXG4vLyRidG4tcGFkZGluZy14LXNtOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LXNtICFkZWZhdWx0O1xcbi8vJGJ0bi1saW5lLWhlaWdodC1zbTogICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRidG4tcGFkZGluZy15LWxnOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGcgIWRlZmF1bHQ7XFxuLy8kYnRuLWxpbmUtaGVpZ2h0LWxnOiAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGJ0bi1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuJGJ0bi1mb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LXNlbWlib2xkO1xcbiRidG4tYm94LXNoYWRvdzogbm9uZTtcXG4vLyRidG4tZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtd2lkdGggIWRlZmF1bHQ7XFxuJGJ0bi1mb2N1cy1ib3gtc2hhZG93OiBub25lO1xcbi8vJGJ0bi1kaXNhYmxlZC1vcGFjaXR5OiAgICAgICAgLjY1ICFkZWZhdWx0O1xcbiRidG4tYWN0aXZlLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8kYnRuLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLWJsb2NrLXNwYWNpbmcteTogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4kYnRuLWJvcmRlci1yYWRpdXM6IDRweDtcXG4vLyRidG4tYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgJGJvcmRlci1yYWRpdXMtc20gIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXRyYW5zaXRpb246ICAgICAgICAgICAgICBjb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XFxuXFxuLy8gRm9ybXNcXG4kaW5wdXQtcGFkZGluZy15OiAuMzc1cmVtO1xcbiRpbnB1dC1wYWRkaW5nLXg6IC40Mzc1cmVtO1xcbi8vJGlucHV0LWxpbmUtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtcGFkZGluZy15LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktc20gIWRlZmF1bHQ7XFxuLy8kaW5wdXQtcGFkZGluZy14LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtc20gIWRlZmF1bHQ7XFxuLy8kaW5wdXQtbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1wYWRkaW5nLXktbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1saW5lLWhlaWdodC1sZzogICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kaW5wdXQtZGlzYWJsZWQtYmc6ICNlY2VlZWY7XFxuXFxuJGlucHV0LWNvbG9yOiAkYm9keS1jb2xvcjtcXG4kaW5wdXQtYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRpbnB1dC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kaW5wdXQtYm94LXNoYWRvdzogbm9uZTtcXG5cXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzLWxnOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1zbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1mb2N1cy1iZzogICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYmcgIWRlZmF1bHQ7XFxuJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvcjogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRpbnB1dC1mb2N1cy1jb2xvcjogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1mb2N1cy13aWR0aCAhZGVmYXVsdDtcXG4kaW5wdXQtZm9jdXMtYm94LXNoYWRvdzogbm9uZTtcXG5cXG4kaW5wdXQtcGxhY2Vob2xkZXItY29sb3I6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtYm9yZGVyOiAgICAgICAgICAgICAgICAgICAkaW5wdXQtYm9yZGVyLXdpZHRoICogMiAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXI6ICAgICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogJGlucHV0LWJ0bi1saW5lLWhlaWdodCkgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXkgKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0OiAyLjE4OHJlbTtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXItc206ICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1zbSAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20pICsgKCRpbnB1dC1idG4tcGFkZGluZy15LXNtICogMikgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgICAgICAgICAgY2FsYygjeyRpbnB1dC1oZWlnaHQtaW5uZXItc219ICsgI3skaW5wdXQtaGVpZ2h0LWJvcmRlcn0pICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWhlaWdodC1pbm5lci1sZzogICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWxnICogJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZykgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0LWxnOiAyLjE4OHJlbTtcXG5cXG4vLyRpbnB1dC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xcblxcbi8vJGZvcm0tdGV4dC1tYXJnaW4tdG9wOiAgICAgICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLWNoZWNrLWlucHV0LWd1dHRlcjogICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXk6ICAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXg6ICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLWNoZWNrLWlubGluZS1tYXJnaW4teDogICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kZm9ybS1jaGVjay1pbmxpbmUtaW5wdXQtbWFyZ2luLXg6ICAgICAgLjMxMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZm9ybS1ncm91cC1tYXJnaW4tYm90dG9tOiAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1ncm91cC1hZGRvbi1jb2xvcjogICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuJGlucHV0LWdyb3VwLWFkZG9uLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG4vLyRpbnB1dC1ncm91cC1hZGRvbi1ib3JkZXItY29sb3I6ICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWd1dHRlcjogICAgICAgICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1zcGFjZXIteDogICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1zaXplOiAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJnOiAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1iZy1zaXplOiAgICAgIDUwJSA1MCUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJveC1zaGFkb3c6ICAgaW5zZXQgMCAuMjVyZW0gLjI1cmVtIHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWRpc2FibGVkLWJnOiAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtbGFiZWwtZGlzYWJsZWQtY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3I6ICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1iZzogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWRpc2FibGVkLWJnOiAgcmdiYSh0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpLCAuNSkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtYm94LXNoYWRvdzogICBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1mb2N1cy1ib3gtc2hhZG93OiAgICAgMCAwIDAgMXB4ICRib2R5LWJnLCAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1jb2xvcjogICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICAgICAgIGxpZ2h0ZW4oJGNvbXBvbmVudC1hY3RpdmUtYmcsIDM1JSkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1ib3gtc2hhZG93OiAgICBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1czogICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDggOCclM0UlM0NwYXRoIGZpbGw9JyN7JGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yfScgZD0nTTYuNTY0Ljc1bC0zLjU5IDMuNjEyLTEuNTM4LTEuNTVMMCA0LjI2IDIuOTc0IDcuMjUgOCAyLjE5M3onLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWJnOiAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3I6ICRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWljb24taW5kZXRlcm1pbmF0ZTogIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA0JyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3J9JyBkPSdNMCAyaDQnLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWJveC1zaGFkb3c6IG5vbmUgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLXJhZGlvLWluZGljYXRvci1ib3JkZXItcmFkaXVzOiAgICAgICAgICA1MCUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXJhZGlvLWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4JyUzRSUzQ2NpcmNsZSByPSczJyBmaWxsPScjeyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvcn0nLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLXNlbGVjdC1wYWRkaW5nLXk6ICAgICAgICAgICAuMzc1cmVtICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQ6ICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yLXBhZGRpbmc6ICAgMXJlbSAhZGVmYXVsdDsgLy8gRXh0cmEgcGFkZGluZyB0byBhY2NvdW50IGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGJhY2tncm91bmQtaW1hZ2UgYmFzZWQgaW5kaWNhdG9yXFxuLy8kY3VzdG9tLXNlbGVjdC1saW5lLWhlaWdodDogICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtY29sb3I6ICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWRpc2FibGVkLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuLy8kY3VzdG9tLXNlbGVjdC1iZzogICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtZGlzYWJsZWQtYmc6ICRpbnB1dC1kaXNhYmxlZC1iZztcXG4kY3VzdG9tLXNlbGVjdC1iZy1zaXplOiA4cHggMTBweCAhZGVmYXVsdDsgLy8gSW4gcGl4ZWxzIGJlY2F1c2UgaW1hZ2UgZGltZW5zaW9uc1xcbiRjdXN0b20tc2VsZWN0LWluZGljYXRvci1jb2xvcjogJGlucHV0LWNvbG9yO1xcbi8vJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yOiAgICAgICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDUnJTNFJTNDcGF0aCBmaWxsPScjeyRjdXN0b20tc2VsZWN0LWluZGljYXRvci1jb2xvcn0nIGQ9J00yIDBMMCAyaDR6bTAgNUwwIDNoNHonLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItd2lkdGg6ICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWJvcmRlci1jb2xvcjogICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItcmFkaXVzOiAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kY3VzdG9tLXNlbGVjdC1mb2N1cy1ib3JkZXItY29sb3I6ICRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3I7XFxuJGN1c3RvbS1zZWxlY3QtZm9jdXMtYm94LXNoYWRvdzogJGlucHV0LWZvY3VzLWJveC1zaGFkb3c7XFxuXFxuLy8kY3VzdG9tLXNlbGVjdC1mb250LXNpemUtc206ICAgICAgICA3NSUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQtc206ICAgICAgICAgICAkaW5wdXQtaGVpZ2h0LXNtICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1zZWxlY3QtZm9udC1zaXplLWxnOiAgICAgICAgMTI1JSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWhlaWdodC1sZzogICAgICAgICAgICRpbnB1dC1oZWlnaHQtbGcgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWZpbGUtaGVpZ2h0OiAgICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWZvY3VzLWJvcmRlci1jb2xvcjogICAgJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLWZpbGUtZm9jdXMtYm94LXNoYWRvdzogJGlucHV0LWZvY3VzLWJveC1zaGFkb3c7XFxuXFxuLy8kY3VzdG9tLWZpbGUtcGFkZGluZy15OiAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1wYWRkaW5nLXg6ICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1jb2xvcjogICAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1iZzogICAgICAgICAgICAgICAgICAgICRpbnB1dC1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItd2lkdGg6ICAgICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJvcmRlci1jb2xvcjogICAgICAgICAgJGlucHV0LWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItcmFkaXVzOiAgICAgICAgICRpbnB1dC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJveC1zaGFkb3c6ICAgICAgICAgICAgJGlucHV0LWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYnV0dG9uLWNvbG9yOiAgICAgICAgICAkY3VzdG9tLWZpbGUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYnV0dG9uLWJnOiAgICAgICAgICAgICAkaW5wdXQtZ3JvdXAtYWRkb24tYmcgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtdGV4dDogKFxcbi8vICAgICAgICBlbjogXFxcIkJyb3dzZVxcXCJcXG4vLykgIWRlZmF1bHQ7XFxuXFxuJGN1cnNvci1kaXNhYmxlZDogbm90LWFsbG93ZWQ7IC8vIFBTIGN1c3RvbVxcblxcbi8vIEZvcm0gdmFsaWRhdGlvblxcbi8vJGZvcm0tZmVlZGJhY2stbWFyZ2luLXRvcDogICAgICAgICAgJGZvcm0tdGV4dC1tYXJnaW4tdG9wICFkZWZhdWx0O1xcbi8vJGZvcm0tZmVlZGJhY2stZm9udC1zaXplOiAgICAgICAgICAgJHNtYWxsLWZvbnQtc2l6ZSAhZGVmYXVsdDtcXG4kZm9ybS1mZWVkYmFjay12YWxpZC1jb2xvcjogdGhlbWUtY29sb3IoXFxcInN1Y2Nlc3NcXFwiKTtcXG4kZm9ybS1mZWVkYmFjay1pbnZhbGlkLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwiZGFuZ2VyXFxcIik7XFxuJGZvcm0tZmVlZGJhY2std2FybmluZy1jb2xvcjogdGhlbWUtY29sb3IoXFxcIndhcm5pbmdcXFwiKTsgLy8gUFMgY3VzdG9tXFxuXFxuLy8gRHJvcGRvd25zXFxuLy8kZHJvcGRvd24tbWluLXdpZHRoOiAgICAgICAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tcGFkZGluZy15OiAwO1xcbi8vJGRyb3Bkb3duLXBhZGRpbmcteTogICAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tc3BhY2VyOiAgICAgICAgICAgICAgICAgICAuMTI1cmVtICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLWJnOiAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRkcm9wZG93bi1ib3JkZXItY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJGRyb3Bkb3duLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRkcm9wZG93bi1kaXZpZGVyLWJnOiAkbGlnaHQtZ3JheTtcXG4vLyRkcm9wZG93bi1ib3gtc2hhZG93OiAgICAgICAgICAgICAgIDAgLjVyZW0gMXJlbSByZ2JhKCRibGFjaywgLjE3NSkgIWRlZmF1bHQ7XFxuXFxuJGRyb3Bkb3duLWxpbmstY29sb3I6ICRtZWRpdW0tZ3JheTtcXG4kZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kZHJvcGRvd24tbGluay1ob3Zlci1iZzogJHdoaXRlO1xcblxcbi8vJGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tbGluay1hY3RpdmUtYmc6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4vLyRkcm9wZG93bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG4kZHJvcGRvd24taXRlbS1wYWRkaW5nLXg6IC4zMTI1cmVtO1xcbiRkcm9wZG93bi1pdGVtLXBhZGRpbmcteTogLjMxMjVyZW07XFxuXFxuLy8kZHJvcGRvd24taGVhZGVyLWNvbG9yOiAgICAgICAgICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8gTmF2c1xcbiRuYXYtbGluay1wYWRkaW5nLXk6IC45Mzc1cmVtO1xcbiRuYXYtbGluay1wYWRkaW5nLXg6IDEuMjVyZW07XFxuJG5hdi1saW5rLWRpc2FibGVkLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG5cXG4kbmF2LXRhYnMtYm9yZGVyLWNvbG9yOiAkd2hpdGU7XFxuLy8kbmF2LXRhYnMtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJG5hdi10YWJzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpO1xcbiRuYXYtdGFicy1saW5rLWFjdGl2ZS1jb2xvcjogJGJvZHktY29sb3I7XFxuJG5hdi10YWJzLWxpbmstYWN0aXZlLWJnOiAkYm9keS1iZztcXG4kbmF2LXRhYnMtbGluay1hY3RpdmUtYm9yZGVyLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpO1xcblxcbiRuYXYtcGlsbHMtbGluay1ob3Zlci1ib3JkZXItY29sb3I6ICRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yOiAkbmF2LXRhYnMtbGluay1hY3RpdmUtY29sb3I7XFxuJG5hdi1waWxscy1saW5rLWFjdGl2ZS1iZzogI2Y0ZjlmYjtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjogJG5hdi10YWJzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjsgLy8gUFMgY3VzdG9tXFxuXFxuLy8kbmF2LXBpbGxzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRuYXYtcGlsbHMtbGluay1hY3RpdmUtY29sb3I6ICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbi8vJG5hdi1waWxscy1saW5rLWFjdGl2ZS1iZzogICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuLy8gTmF2YmFyXFxuLy8kbmF2YmFyLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAoJHNwYWNlciAvIDIpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItbmF2LWxpbmstcGFkZGluZy14OiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci1icmFuZC1mb250LXNpemU6ICAgICAgICAgICAgJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcXG5cXG4vLyRuYXYtbGluay1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAkbGluZS1oZWlnaHQtYmFzZSArICRuYXYtbGluay1wYWRkaW5nLXkgKiAyKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItYnJhbmQtaGVpZ2h0OiAgICAgICAgICAgICAgICRuYXZiYXItYnJhbmQtZm9udC1zaXplICogJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWJyYW5kLXBhZGRpbmcteTogICAgICAgICAgICAoJG5hdi1saW5rLWhlaWdodCAtICRuYXZiYXItYnJhbmQtaGVpZ2h0KSAvIDIgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy15OiAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLXRvZ2dsZXItZm9udC1zaXplOiAgICAgICAgICAkZm9udC1zaXplLWxnICFkZWZhdWx0O1xcbi8vJG5hdmJhci10b2dnbGVyLWJvcmRlci1yYWRpdXM6ICAgICAgJGJ0bi1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci1kYXJrLWNvbG9yOiAgICAgICAgICAgICAgICAgcmdiYSgkd2hpdGUsIC41KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay1ob3Zlci1jb2xvcjogICAgICAgICAgIHJnYmEoJHdoaXRlLCAuNzUpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLWFjdGl2ZS1jb2xvcjogICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLWRpc2FibGVkLWNvbG9yOiAgICAgICAgcmdiYSgkd2hpdGUsIC4yNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWRhcmstdG9nZ2xlci1pY29uLWJnOiAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItZGFyay1jb2xvcn0nIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLXRvZ2dsZXItYm9yZGVyLWNvbG9yOiAgcmdiYSgkd2hpdGUsIC4xKSAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItbGlnaHQtY29sb3I6ICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LWhvdmVyLWNvbG9yOiAgICAgICAgICByZ2JhKCRibGFjaywgLjcpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1saWdodC1hY3RpdmUtY29sb3I6ICAgICAgICAgcmdiYSgkYmxhY2ssIC45KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtZGlzYWJsZWQtY29sb3I6ICAgICAgIHJnYmEoJGJsYWNrLCAuMykgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LXRvZ2dsZXItaWNvbi1iZzogICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItbGlnaHQtY29sb3J9JyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtdG9nZ2xlci1ib3JkZXItY29sb3I6IHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8gUGFnaW5hdGlvblxcbiRwYWdpbmF0aW9uLXBhZGRpbmcteTogLjY1cmVtO1xcbiRwYWdpbmF0aW9uLXBhZGRpbmcteDogLjVyZW07XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXktc206ICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXgtc206ICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteS1sZzogICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteC1sZzogICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgIDEuMjUgIWRlZmF1bHQ7XFxuXFxuJHBhZ2luYXRpb24tY29sb3I6ICRtZWRpdW0tZ3JheTtcXG4kcGFnaW5hdGlvbi1iZzogJHdoaXRlO1xcbi8vJHBhZ2luYXRpb24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1ib3JkZXItY29sb3I6ICR3aGl0ZTtcXG5cXG4vLyRwYWdpbmF0aW9uLWZvY3VzLWJveC1zaGFkb3c6ICAgICAgICRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdyAhZGVmYXVsdDtcXG5cXG4kcGFnaW5hdGlvbi1ob3Zlci1jb2xvcjogJHBhZ2luYXRpb24tY29sb3I7XFxuJHBhZ2luYXRpb24taG92ZXItYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWhvdmVyLWJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yO1xcblxcbiRwYWdpbmF0aW9uLWFjdGl2ZS1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kcGFnaW5hdGlvbi1hY3RpdmUtYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWFjdGl2ZS1ib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWJvcmRlci1jb2xvcjtcXG5cXG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuJHBhZ2luYXRpb24tZGlzYWJsZWQtYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yO1xcblxcbi8vIEp1bWJvdHJvblxcbiRqdW1ib3Ryb24tcGFkZGluZzogMnJlbSAhZGVmYXVsdDtcXG4kanVtYm90cm9uLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG5cXG4vLyBDYXJkc1xcbiRjYXJkLXNwYWNlci14OiAuNjI1cmVtICFkZWZhdWx0O1xcbiRjYXJkLXNwYWNlci15OiAuNjI1cmVtICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci13aWR0aDogMXB4ICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci1yYWRpdXM6IDVweCAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItcmFkaXVzLWlubmVyOiAkY2FyZC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiRjYXJkLWNhcC1iZzogJGdyYXktMjAwICFkZWZhdWx0O1xcbiRjYXJkLWJnOiAjZmZmICFkZWZhdWx0O1xcbiRjYXJkLWxpbmstaG92ZXItY29sb3I6ICNmZmYgIWRlZmF1bHQ7XFxuJGNhcmQtYm9yZGVyLWNvbG9yOiAjZGJlNmU5ICFkZWZhdWx0O1xcbi8vJGNhcmQtaW5uZXItYm9yZGVyLXJhZGl1czogICAgICAgICAgY2FsYygjeyRjYXJkLWJvcmRlci1yYWRpdXN9IC0gI3skY2FyZC1ib3JkZXItd2lkdGh9KSAhZGVmYXVsdDtcXG4vLyRjYXJkLWNhcC1iZzogICAgICAgICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMDMpICFkZWZhdWx0O1xcbi8vJGNhcmQtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcblxcbi8vJGNhcmQtaW1nLW92ZXJsYXktcGFkZGluZzogICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWdyb3VwLW1hcmdpbjogICAgICAgICAgICAgICAgICgkZ3JpZC1ndXR0ZXItd2lkdGggLyAyKSAhZGVmYXVsdDtcXG4vLyRjYXJkLWRlY2stbWFyZ2luOiAgICAgICAgICAgICAgICAgICRjYXJkLWdyb3VwLW1hcmdpbiAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWNvbHVtbnMtY291bnQ6ICAgICAgICAgICAgICAgIDMgIWRlZmF1bHQ7XFxuLy8kY2FyZC1jb2x1bW5zLWdhcDogICAgICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbi8vJGNhcmQtY29sdW1ucy1tYXJnaW46ICAgICAgICAgICAgICAgJGNhcmQtc3BhY2VyLXkgIWRlZmF1bHQ7XFxuXFxuLy8gVG9vbHRpcHNcXG4vLyR0b29sdGlwLWZvbnQtc2l6ZTogICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XFxuLy8kdG9vbHRpcC1tYXgtd2lkdGg6ICAgICAgICAgICAyMDBweCAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWNvbG9yOiAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kdG9vbHRpcC1iZzogJG1lZGl1bS1ncmF5O1xcbi8vJHRvb2x0aXAtYm9yZGVyLXJhZGl1czogICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtb3BhY2l0eTogICAgICAgICAgICAgLjkgIWRlZmF1bHQ7XFxuJHRvb2x0aXAtcGFkZGluZy15OiAuNjI1cmVtO1xcbiR0b29sdGlwLXBhZGRpbmcteDogMS4yNXJlbTtcXG4vLyR0b29sdGlwLW1hcmdpbjogICAgICAgICAgICAgIDAgIWRlZmF1bHQ7XFxuXFxuLy8kdG9vbHRpcC1hcnJvdy13aWR0aDogICAgICAgICAuOHJlbSAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWFycm93LWhlaWdodDogICAgICAgIC40cmVtICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtYXJyb3ctY29sb3I6ICAgICAgICAgJHRvb2x0aXAtYmcgIWRlZmF1bHQ7XFxuXFxuLy8gUG9wb3ZlcnNcXG4vLyRwb3BvdmVyLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1iZzogICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1tYXgtd2lkdGg6ICAgICAgICAgICAgICAgICAyNzZweCAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLWJvcmRlci13aWR0aDogICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRwb3BvdmVyLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuJHBvcG92ZXItaGVhZGVyLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG4vLyRwb3BvdmVyLWhlYWRlci1jb2xvcjogICAgICAgICAgICAgICRoZWFkaW5ncy1jb2xvciAhZGVmYXVsdDtcXG4kcG9wb3Zlci1oZWFkZXItcGFkZGluZy15OiAuNjI1cmVtO1xcbiRwb3BvdmVyLWhlYWRlci1wYWRkaW5nLXg6IDEuMjVyZW07XFxuXFxuLy8kcG9wb3Zlci1ib2R5LWNvbG9yOiAgICAgICAgICAgICAgICAkYm9keS1jb2xvciAhZGVmYXVsdDtcXG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteTogLjYyNXJlbTtcXG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteDogMS4yNXJlbTtcXG5cXG4vLyRwb3BvdmVyLWFycm93LXdpZHRoOiAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1hcnJvdy1oZWlnaHQ6ICAgICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLWFycm93LWNvbG9yOiAgICAgICAgICAgICAgICRwb3BvdmVyLWJnICFkZWZhdWx0O1xcblxcbi8vJHBvcG92ZXItYXJyb3ctb3V0ZXItY29sb3I6ICAgICAgICAgZmFkZS1pbigkcG9wb3Zlci1ib3JkZXItY29sb3IsIC4wNSkgIWRlZmF1bHQ7XFxuXFxuLy8gQmFkZ2VzXFxuJGJhZGdlLWZvbnQtc2l6ZTogLjYyNXJlbSAhZGVmYXVsdDtcXG4kYmFkZ2UtZm9udC13ZWlnaHQ6IDUwMCAhZGVmYXVsdDtcXG4kYmFkZ2UtcGFkZGluZy15OiAuMjVyZW07XFxuJGJhZGdlLXBhZGRpbmcteDogLjVyZW07XFxuLy8kYmFkZ2UtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4vLyRiYWRnZS1waWxsLXBhZGRpbmcteDogICAgICAgICAgICAgIC42ZW0gIWRlZmF1bHQ7XFxuLy8kYmFkZ2UtcGlsbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG5cXG4vLyBNb2RhbHNcXG4kbW9kYWwtaW5uZXItcGFkZGluZzogMS44NzVyZW07XFxuXFxuLy8kbW9kYWwtZGlhbG9nLW1hcmdpbjogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRtb2RhbC1kaWFsb2ctbWFyZ2luLXktc20tdXA6IDEuNzVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQ6ICAgICAgICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG5cXG4vLyRtb2RhbC1jb250ZW50LWJnOiAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kbW9kYWwtY29udGVudC1ib3JkZXItY29sb3I6IG5vbmU7XFxuLy8kbW9kYWwtY29udGVudC1ib3JkZXItd2lkdGg6ICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRtb2RhbC1jb250ZW50LWJveC1zaGFkb3cteHM6IDAgOHB4IDE2cHggMCByZ2JhKDAsIDAsIDAsIC4xKTtcXG4kbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXNtLXVwOiAwIDhweCAxNnB4IDAgcmdiYSgwLCAwLCAwLCAuMSk7XFxuXFxuLy8kbW9kYWwtYmFja2Ryb3AtYmc6ICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuLy8kbW9kYWwtYmFja2Ryb3Atb3BhY2l0eTogICAgICAuNSAhZGVmYXVsdDtcXG4kbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjogbm9uZTtcXG4vLyRtb2RhbC1mb290ZXItYm9yZGVyLWNvbG9yOiAgICRtb2RhbC1oZWFkZXItYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbi8vJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGg6ICAgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJG1vZGFsLWZvb3Rlci1ib3JkZXItd2lkdGg6ICAgJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJG1vZGFsLWhlYWRlci1wYWRkaW5nOiAkbW9kYWwtaW5uZXItcGFkZGluZztcXG5cXG4kbW9kYWwtbGc6IDkwMHB4O1xcbiRtb2RhbC1tZDogNjgwcHg7XFxuJG1vZGFsLXNtOiA0MDBweDtcXG5cXG4vLyRtb2RhbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuM3MgZWFzZS1vdXQgIWRlZmF1bHQ7XFxuXFxuLy8gQWxlcnRzXFxuJGFsZXJ0LXBhZGRpbmcteTogMXJlbSAhZGVmYXVsdDtcXG4kYWxlcnQtcGFkZGluZy14OiAxcmVtO1xcbi8vJGFsZXJ0LW1hcmdpbi1ib3R0b206ICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4vLyRhbGVydC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGFsZXJ0LWxpbmstZm9udC13ZWlnaHQ6ICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuJGFsZXJ0LWJvcmRlci13aWR0aDogLjEyNXJlbTtcXG5cXG4vLyRhbGVydC1iZy1sZXZlbDogICAgICAgICAgICAgICAgICAgIC0xMCAhZGVmYXVsdDtcXG4vLyRhbGVydC1ib3JkZXItbGV2ZWw6ICAgICAgICAgICAgICAgIC05ICFkZWZhdWx0O1xcbi8vJGFsZXJ0LWNvbG9yLWxldmVsOiAgICAgICAgICAgICAgICAgNiAhZGVmYXVsdDtcXG5cXG4vLyBQcm9ncmVzcyBiYXJzXFxuLy8kcHJvZ3Jlc3MtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIC43NSkgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmc6ICAgICAgICAgICAgICAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1ib3gtc2hhZG93OiAgICAgICAgICAgICAgIGluc2V0IDAgLjFyZW0gLjFyZW0gcmdiYSgkYmxhY2ssIC4xKSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iYXItY29sb3I6ICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iYXItYmc6ICAgICAgICAgICAgICAgICAgIHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIikgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLWFuaW1hdGlvbi10aW1pbmc6ICAgICAxcyBsaW5lYXIgaW5maW5pdGUgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLXRyYW5zaXRpb246ICAgICAgICAgICB3aWR0aCAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBMaXN0IGdyb3VwXFxuLy8kbGlzdC1ncm91cC1iZzogICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRsaXN0LWdyb3VwLWJvcmRlci13aWR0aDogICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteTogJGlucHV0LXBhZGRpbmcteTtcXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteDogJGlucHV0LXBhZGRpbmcteDtcXG5cXG4kbGlzdC1ncm91cC1ob3Zlci1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1jb2xvcjogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWFjdGl2ZS1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1ib3JkZXItY29sb3I6ICAgICRsaXN0LWdyb3VwLWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kbGlzdC1ncm91cC1kaXNhYmxlZC1iZzogICAgICAgICAgICAkbGlzdC1ncm91cC1iZyAhZGVmYXVsdDtcXG5cXG4vLyRsaXN0LWdyb3VwLWFjdGlvbi1jb2xvcjogICAgICAgICAgICRncmF5LTcwMCAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3Rpb24taG92ZXItY29sb3I6ICR3aGl0ZTtcXG5cXG4kbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWNvbG9yOiAkYm9keS1jb2xvciAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWJnOiAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuXFxuLy8gSW1hZ2UgdGh1bWJuYWlsc1xcbiR0aHVtYm5haWwtcGFkZGluZzogMDtcXG4vLyR0aHVtYm5haWwtYmc6ICAgICAgICAgICAgICAgICAgICAgICRib2R5LWJnICFkZWZhdWx0O1xcbi8vJHRodW1ibmFpbC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kdGh1bWJuYWlsLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kdGh1bWJuYWlsLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kdGh1bWJuYWlsLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8gRmlndXJlc1xcbi8vJGZpZ3VyZS1jYXB0aW9uLWZvbnQtc2l6ZTogICAgICAgICAgOTAlICFkZWZhdWx0O1xcbiRmaWd1cmUtY2FwdGlvbi1jb2xvcjogJG1lZGl1bS1ncmF5O1xcblxcbi8vIEJyZWFkY3J1bWJzXFxuJGJyZWFkY3J1bWItcGFkZGluZy15OiAuMzEyNXJlbTtcXG4kYnJlYWRjcnVtYi1wYWRkaW5nLXg6IC4zMTI1cmVtO1xcbiRicmVhZGNydW1iLWl0ZW0tcGFkZGluZzogLjNyZW07XFxuXFxuJGJyZWFkY3J1bWItbWFyZ2luLWJvdHRvbTogMDtcXG5cXG4kYnJlYWRjcnVtYi1iZzogbm9uZTtcXG4kYnJlYWRjcnVtYi1kaXZpZGVyLWNvbG9yOiAkZGFyay1ncmF5O1xcbiRicmVhZGNydW1iLWFjdGl2ZS1jb2xvcjogJGV4dHJhLWRhcmstZ3JheTtcXG4kYnJlYWRjcnVtYi1kaXZpZGVyOiBcXFwiL1xcXCI7XFxuXFxuLy8gQ2Fyb3VzZWxcXG4vLyRjYXJvdXNlbC1jb250cm9sLWNvbG9yOiAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLXdpZHRoOiAgICAgICAgICAgIDE1JSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLW9wYWNpdHk6ICAgICAgICAgIC41ICFkZWZhdWx0O1xcblxcbi8vJGNhcm91c2VsLWluZGljYXRvci13aWR0aDogICAgICAgICAgMzBweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3ItaGVpZ2h0OiAgICAgICAgIDNweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3Itc3BhY2VyOiAgICAgICAgIDNweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1jYXB0aW9uLXdpZHRoOiAgICAgICAgICAgIDcwJSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jYXB0aW9uLWNvbG9yOiAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1jb250cm9sLWljb24td2lkdGg6ICAgICAgIDIwcHggIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24tYmc6ICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nI3skY2Fyb3VzZWwtY29udHJvbC1jb2xvcn0nIHZpZXdCb3g9JzAgMCA4IDgnJTNFJTNDcGF0aCBkPSdNNS4yNSAwbC00IDQgNCA0IDEuNS0xLjUtMi41LTIuNSAyLjUtMi41LTEuNS0xLjV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJGNhcm91c2VsLWNvbnRyb2wtbmV4dC1pY29uLWJnOiAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyN7JGNhcm91c2VsLWNvbnRyb2wtY29sb3J9JyB2aWV3Qm94PScwIDAgOCA4JyUzRSUzQ3BhdGggZD0nTTIuNzUgMGwtMS41IDEuNSAyLjUgMi41LTIuNSAyLjUgMS41IDEuNSA0LTQtNC00eicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBDbG9zZVxcbi8vJGNsb3NlLWZvbnQtc2l6ZTogICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMS41ICFkZWZhdWx0O1xcbi8vJGNsb3NlLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuLy8kY2xvc2UtY29sb3I6ICAgICAgICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuLy8kY2xvc2UtdGV4dC1zaGFkb3c6ICAgICAgICAgICAwIDFweCAwICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyBDb2RlXFxuLy8kY29kZS1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICA4Ny41JSAhZGVmYXVsdDtcXG4kY29kZS1jb2xvcjogJGJvZHktY29sb3I7XFxuXFxuLy8ka2JkLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAgICAuMnJlbSAhZGVmYXVsdDtcXG4vLyRrYmQtcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICAgIC40cmVtICFkZWZhdWx0O1xcbi8vJGtiZC1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICAgJGNvZGUtZm9udC1zaXplICFkZWZhdWx0O1xcbiRrYmQtY29sb3I6ICR3aGl0ZTtcXG4ka2JkLWJnOiAkZXh0cmEtZGFyay1ncmF5O1xcblxcbiRwcmUtY29sb3I6ICRib2R5LWNvbG9yO1xcbi8vJHByZS1zY3JvbGxhYmxlLW1heC1oZWlnaHQ6ICAgICAgICAgMzQwcHggIWRlZmF1bHQ7XFxuXFxuLy8gUHJpbnRpbmdcXG4vLyRwcmludC1wYWdlLXNpemU6ICAgICAgICAgICAgICAgICAgIGEzICFkZWZhdWx0O1xcbi8vJHByaW50LWJvZHktbWluLXdpZHRoOiAgICAgICAgICAgICAgbWFwLWdldCgkZ3JpZC1icmVha3BvaW50cywgXFxcImxnXFxcIikgIWRlZmF1bHQ7XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLnBzLXNlbGVjdFtkYXRhLXYtZjM3MWJmMDBde3Bvc2l0aW9uOnJlbGF0aXZlfS5wcy1zZWxlY3Qgc2VsZWN0W2RhdGEtdi1mMzcxYmYwMF17YXBwZWFyYW5jZTpub25lO2JvcmRlci1yYWRpdXM6MH0ucHMtc2VsZWN0W2RhdGEtdi1mMzcxYmYwMF06OmFmdGVye2NvbnRlbnQ6XFxcIlxcXFxFMzEzXFxcIjtmb250LWZhbWlseTonTWF0ZXJpYWwgSWNvbnMnO2NvbG9yOiM2Yzg2OGU7Zm9udC1zaXplOjIwcHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB4O3RvcDo1cHh9XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vanMvYXBwL3dpZGdldHMvcHMtc2VsZWN0LnZ1ZVwiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL3ByZXN0YWtpdC9zY3NzL192YXJpYWJsZXMuc2Nzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFpRkEsNEJBQ0UsaUJBQWtCLENBRHBCLG1DQUdJLGVBQWdCLENBQ2hCLGVBQWdCLENBSnBCLG1DQU9JLGVBQWdCLENBQ2hCLDRCQUE2QixDQUM3QixhQy9FYyxDRGdGZCxjQUFlLENBQ2YsaUJBQWtCLENBQ2xCLFNBQVUsQ0FDVixPQUFRXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIlxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcbkBpbXBvcnQgJ35Ac2Nzcy9jb25maWcvX3NldHRpbmdzLnNjc3MnO1xcblxcbi5wcy1zZWxlY3Qge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgc2VsZWN0IHtcXG4gICAgYXBwZWFyYW5jZTogbm9uZTtcXG4gICAgYm9yZGVyLXJhZGl1czogMDtcXG4gIH1cXG4gICY6OmFmdGVyIHtcXG4gICAgY29udGVudDogXFxcIlxcXFxFMzEzXFxcIjtcXG4gICAgZm9udC1mYW1pbHk6ICdNYXRlcmlhbCBJY29ucyc7XFxuICAgIGNvbG9yOiAkZ3JheS1tZWRpdW07XFxuICAgIGZvbnQtc2l6ZTogMjBweDtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICByaWdodDogNXB4O1xcbiAgICB0b3A6IDVweDtcXG4gIH1cXG59XFxuXCIsXCIvKiBzdHlsZWxpbnQtZGlzYWJsZSAqL1xcblxcbi8vIENvbG9yIHN5c3RlbVxcbiR3aGl0ZTogI2ZmZjtcXG4kZ3JheS1kaXNhYmxlZDogI2VhZWJlYztcXG4kZ3JheS0xMDA6ICNmYWZiZmM7XFxuJGdyYXktMjAwOiAjZmFmYmZjO1xcbiRncmF5LTI1MDogI2ZhZmJmYztcXG4kZ3JheS0zMDA6ICNiYmNkZDI7XFxuJGdyYXktNDAwOiAjYmJjZGQyO1xcbiRncmF5LTQ1MDogI2IzYzdjZDtcXG4kZ3JheS01MDA6ICM2Yzg2OGU7XFxuJGdyYXktNTUwOiAjNzA4MDkwO1xcbiRncmF5LTYwMDogIzZjODY4ZTtcXG4kZ3JheS03MDA6ICMzNjNhNDE7XFxuJGdyYXktNzUwOiAjMzYzYTQxO1xcbiRncmF5LTgwMDogIzM2M2E0MTtcXG4kZ3JheS05MDA6ICMyODJiMzA7XFxuJGJsYWNrOiAjMDAwO1xcblxcbi8vIFBTIFZhcnNcXG4kZXh0cmEtbGlnaHQtZ3JheTogJGdyYXktMTAwO1xcbiRsaWdodC1ncmF5OiAkZ3JheS0zMDA7XFxuJG1lZGl1bS1ncmF5OiAkZ3JheS01MDA7XFxuJGRhcmstZ3JheTogJGdyYXktNzAwO1xcbiRleHRyYS1kYXJrLWdyYXk6ICRncmF5LTkwMDtcXG4kZ3JheS1saWdodDogJGxpZ2h0LWdyYXk7XFxuJGdyYXktbWVkaXVtOiAkbWVkaXVtLWdyYXk7XFxuJGdyYXktZGFyazogJGRhcmstZ3JheTtcXG4kZ3JheS1zb2Z0OiAkZ3JheS0yMDA7XFxuJGJhY2tncm91bmQtY29sb3I6ICNlZmYxZjI7XFxuJHByaW1hcnktbGlnaHRlbjogI2Y0ZmNmZDtcXG4kbG9jYWwtZm9udDogZmFsc2UgIWRlZmF1bHQ7XFxuXFxuJGJsdWU6ICMyNWI5ZDc7XFxuJGluZGlnbzogIzY2MTBmMiAhZGVmYXVsdDtcXG4kcHVycGxlOiAjNmY0MmMxICFkZWZhdWx0O1xcbiRwaW5rOiAjZTgzZThjICFkZWZhdWx0O1xcbiRyZWQ6ICNmNTRjM2U7XFxuJG9yYW5nZTogI2ZkN2UxNCAhZGVmYXVsdDtcXG4keWVsbG93OiAjZmFiMDAwO1xcbiRncmVlbjogIzcwYjU4MDtcXG4kb3JhbmdlOiAjZmQ3ZTE0ICFkZWZhdWx0O1xcbiR0ZWFsOiAjMjBjOTk3ICFkZWZhdWx0O1xcbiRjeWFuOiAkYmx1ZTtcXG4kbGlnaHQtYmx1ZTogI2Y0ZmNmZDtcXG5cXG4vLyBtYWluIGJ1dHRvbiBiYWNrZ3JvdW5kIGNvbG9yc1xcbiRwcmltYXJ5LWhvdmVyOiAjN2NkNWU3O1xcbiRwcmltYXJ5LWFjdGl2ZTogIzIxYTZjMTtcXG4kcHJpbWFyeS1kaXNhYmxlZDogI2QzZjFmNztcXG4kc2Vjb25kYXJ5LWhvdmVyOiAjYjdjZWQzO1xcbiRzZWNvbmRhcnktYWN0aXZlOiAjODg5ZGEyO1xcbiRkYW5nZXItaG92ZXI6ICNmZGUxZTE7XFxuJG5vdGljZTogI2RmZjVmOTtcXG5cXG4kcHJpbWFyeTogJGJsdWUgIWRlZmF1bHQ7XFxuJHNlY29uZGFyeTogJG1lZGl1bS1ncmF5O1xcbiRzdWNjZXNzOiAkZ3JlZW4gIWRlZmF1bHQ7XFxuJGluZm86ICRjeWFuICFkZWZhdWx0O1xcbiR3YXJuaW5nOiAkeWVsbG93ICFkZWZhdWx0O1xcbiRkYW5nZXI6ICRyZWQgIWRlZmF1bHQ7XFxuJGxpZ2h0OiAkZ3JheS0xMDAgIWRlZmF1bHQ7XFxuJGRhcms6ICRncmF5LTgwMCAhZGVmYXVsdDtcXG5cXG4kdG9hc3Qtc3VjY2VzczogIzUzZDU3MiAhZGVmYXVsdDtcXG4kdG9hc3Qtd2FybmluZzogI2ZhYjAwMCAhZGVmYXVsdDtcXG5cXG4kYnJhbmQtcHJpbWFyeTogJHByaW1hcnkgIWRlZmF1bHQ7XFxuJGJyYW5kLXNlY29uZGFyeTogJHNlY29uZGFyeSAhZGVmYXVsdDtcXG4kYnJhbmQtaW5mbzogIzViYzBkZSAhZGVmYXVsdDtcXG4kYnJhbmQtd2FybmluZzogI2YwYWQ0ZSAhZGVmYXVsdDtcXG4kYnJhbmQtc3VjY2VzczogJHN1Y2Nlc3MgIWRlZmF1bHQ7XFxuJGJyYW5kLWRhbmdlcjogJGRhbmdlciAhZGVmYXVsdDtcXG5cXG4kYnRuLXByaW1hcnktYmc6ICRwcmltYXJ5LWhvdmVyO1xcbiRidG4tc2Vjb25kYXJ5LWJvcmRlcjogIzAwMDtcXG4kYnRuLWluZm8tYmc6ICRicmFuZC1pbmZvICFkZWZhdWx0O1xcbiRidG4tc3VjY2Vzcy1iZzogJGJyYW5kLXN1Y2Nlc3MgIWRlZmF1bHQ7XFxuJGJ0bi13YXJuaW5nLWJnOiAkYnJhbmQtd2FybmluZyAhZGVmYXVsdDtcXG4kYnRuLWRhbmdlci1iZzogJGJyYW5kLWRhbmdlciAhZGVmYXVsdDtcXG5cXG4kdGhlbWUtY29sb3JzOiAoXFxuICBcXFwicHJpbWFyeVxcXCI6ICRwcmltYXJ5LFxcbiAgXFxcInNlY29uZGFyeVxcXCI6ICRzZWNvbmRhcnksXFxuICBcXFwic3VjY2Vzc1xcXCI6ICRzdWNjZXNzLFxcbiAgXFxcImluZm9cXFwiOiAkaW5mbyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogJHdhcm5pbmcsXFxuICBcXFwiZGFuZ2VyXFxcIjogJGRhbmdlcixcXG4gIFxcXCJsaWdodFxcXCI6ICRsaWdodCxcXG4gIFxcXCJkYXJrXFxcIjogJGRhcmtcXG4pO1xcblxcbiRhbGVydHMtYmFja2dyb3VuZC1jb2xvcnM6IChcXG4gIFxcXCJzdWNjZXNzXFxcIjogI2NiZjJkNCxcXG4gIFxcXCJpbmZvXFxcIjogI2JlZWFmMyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZmZmJkMyxcXG4gIFxcXCJkYW5nZXJcXFwiOiAjZmJjNmMzXFxuKTtcXG5cXG4kYWxlcnRzLXNlY29uZC1jb2xvcnM6IChcXG4gIFxcXCJzdWNjZXNzXFxcIjogIzUzZDU3MixcXG4gIFxcXCJpbmZvXFxcIjogIzI1YjlkNyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZhYjAwMCxcXG4gIFxcXCJkYW5nZXJcXFwiOiAjZjQ0MzM2XFxuKTtcXG5cXG4kdGhlbWUtYWxlcnRzLWljb25zOiAoXFxuICBzdWNjZXNzOiBcXFwiXFxcXEU1Q0FcXFwiLFxcbiAgaW5mbzogXFxcIlxcXFxlODhlXFxcIixcXG4gIHdhcm5pbmc6IFxcXCJcXFxcRTAwMlxcXCIsXFxuICBkYW5nZXI6IFxcXCJcXFxcZTAwMFxcXCJcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtaWNvbnM6IChcXG4gIFxcXCJwcmltYXJ5XFxcIjogJHByaW1hcnksXFxuICBcXFwic2Vjb25kYXJ5XFxcIjogJHNlY29uZGFyeSxcXG4gIFxcXCJzdWNjZXNzXFxcIjogJHN1Y2Nlc3MsXFxuICBcXFwiaW5mb1xcXCI6ICRpbmZvLFxcbiAgXFxcIndhcm5pbmdcXFwiOiAjZmFiMDAwLFxcbiAgXFxcImRhbmdlclxcXCI6ICRkYW5nZXIsXFxuICBcXFwibGlnaHRcXFwiOiAkbGlnaHRcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtaG92ZXI6IChcXG4gIHByaW1hcnk6ICRwcmltYXJ5LWhvdmVyLFxcbiAgc2Vjb25kYXJ5OiAkc2Vjb25kYXJ5LWhvdmVyLFxcbiAgc3VjY2VzczogIzliY2JhNixcXG4gIGluZm86ICRwcmltYXJ5LWhvdmVyLFxcbiAgd2FybmluZzogI2U2YjA0NSxcXG4gIGRhbmdlcjogI2U3NmQ3YSxcXG4gIGxpZ2h0OiAkZ3JheS04MDAsXFxuICBkYXJrOiAkZ3JheS0xMDAsXFxuICBkZWZhdWx0OiAkbGlnaHQtYmx1ZVxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1hY3RpdmU6IChcXG4gIHByaW1hcnk6ICRwcmltYXJ5LWFjdGl2ZSxcXG4gIHNlY29uZGFyeTogJHNlY29uZGFyeS1hY3RpdmUsXFxuICBzdWNjZXNzOiAjNWE5MTY2LFxcbiAgaW5mbzogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImluZm9cXFwiKSwgMTAlKSxcXG4gIHdhcm5pbmc6IGRhcmtlbihtYXAtZ2V0KCR0aGVtZS1jb2xvcnMsIFxcXCJ3YXJuaW5nXFxcIiksIDEwJSksXFxuICBkYW5nZXI6ICNjMzM2MmIsXFxuICBsaWdodDogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImxpZ2h0XFxcIiksIDEwJSksXFxuICBkYXJrOiBkYXJrZW4obWFwLWdldCgkdGhlbWUtY29sb3JzLCBcXFwiZGFya1xcXCIpLCAxMCUpLFxcbiAgZGVmYXVsdDogJHByaW1hcnlcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtYmFja2dyb3VuZDogKFxcbiAgcHJpbWFyeTogI2RmZjVmOSxcXG4gIHNlY29uZGFyeTogJGJsYWNrLFxcbiAgc3VjY2VzczogI2Q2ZjBkOCxcXG4gIGluZm86ICNkZmY1ZjksXFxuICB3YXJuaW5nOiAjZmZmYmQzLFxcbiAgZGFuZ2VyOiAjZmRlMWUxLFxcbiAgbGlnaHQ6ICRncmF5LTIwMCxcXG4gIGRhcms6ICRncmF5LTcwMFxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1zaGFkb3c6IChcXG4gIHByaW1hcnk6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIiksXFxuICBzZWNvbmRhcnk6ICRibGFjayxcXG4gIHN1Y2Nlc3M6IHRoZW1lLWNvbG9yKFxcXCJzdWNjZXNzXFxcIiksXFxuICBpbmZvOiB0aGVtZS1jb2xvcihcXFwiaW5mb1xcXCIpLFxcbiAgd2FybmluZzogdGhlbWUtY29sb3IoXFxcIndhcm5pbmdcXFwiKSxcXG4gIGRhbmdlcjogdGhlbWUtY29sb3IoXFxcImRhbmdlclxcXCIpLFxcbiAgbGlnaHQ6IHRoZW1lLWNvbG9yKFxcXCJsaWdodFxcXCIpLFxcbiAgZGFyazogdGhlbWUtY29sb3IoXFxcImRhcmtcXFwiKVxcbik7XFxuXFxuLy8gT3B0aW9uc1xcbiRlbmFibGUtY2FyZXQ6IHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1yb3VuZGVkOiB0cnVlO1xcbiRlbmFibGUtc2hhZG93czogdHJ1ZTtcXG4kZW5hYmxlLWdyYWRpZW50czogZmFsc2UgIWRlZmF1bHQ7XFxuJGVuYWJsZS10cmFuc2l0aW9uczogdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLWdyaWQtY2xhc3NlczogdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLXByaW50LXN0eWxlczogdHJ1ZSAhZGVmYXVsdDtcXG5cXG4vLyBTcGFjaW5nXFxuJHNwYWNlcjogMS44NzVyZW07XFxuXFxuJHNwYWNlcnM6IChcXG4gIDA6IDAsXFxuICAxOiAoXFxuICAgICRzcGFjZXIgLyA2XFxuICApLFxcbiAgMjogKFxcbiAgICAkc3BhY2VyIC8gM1xcbiAgKSxcXG4gIDM6IChcXG4gICAgJHNwYWNlciAvIDJcXG4gICksXFxuICA0OiAkc3BhY2VyLFxcbiAgNTogKFxcbiAgICAkc3BhY2VyICogMlxcbiAgKVxcbik7XFxuXFxuLy8gQm9keVxcbiRib2R5LWJnOiAkd2hpdGUgIWRlZmF1bHQ7XFxuJGJvZHktY29sb3I6ICRkYXJrLWdyYXk7XFxuXFxuLy8gTGlua3NcXG4kbGluay1ob3Zlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSAhZGVmYXVsdDtcXG4kbGluay1ob3Zlci1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuXFxuLy8gUGFyYWdyYXBoc1xcbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogMXJlbTtcXG5cXG4vLyBHcmlkIGJyZWFrcG9pbnRzXFxuJGdyaWQtYnJlYWtwb2ludHM6IChcXG4gIHhzOiAwLFxcbiAgc206IDU0NHB4LFxcbiAgbWQ6IDc2OHB4LFxcbiAgbGc6IDEwMjRweCxcXG4gIHhsOiAxMzAwcHgsXFxuICB4eGw6IDE2MDBweCAvLyBQUyBjdXN0b21cXG4pO1xcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRncmlkLWJyZWFrcG9pbnRzLCBcXFwiJGdyaWQtYnJlYWtwb2ludHNcXFwiKTtcXG5AaW5jbHVkZSBfYXNzZXJ0LXN0YXJ0cy1hdC16ZXJvKCRncmlkLWJyZWFrcG9pbnRzKTtcXG5cXG4vLyBHcmlkIGNvbnRhaW5lcnNcXG4kY29udGFpbmVyLW1heC13aWR0aHM6IChcXG4gIHNtOiA1NzZweCxcXG4gIG1kOiA3MjBweCxcXG4gIGxnOiA5NzJweCxcXG4gIHhsOiAxMjQwcHhcXG4pO1xcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRjb250YWluZXItbWF4LXdpZHRocywgXFxcIiRjb250YWluZXItbWF4LXdpZHRoc1xcXCIpO1xcblxcbi8vIEdyaWQgY29sdW1uc1xcbi8vJGdyaWQtY29sdW1uczogICAgICAgICAgICAgICAgMTIgIWRlZmF1bHQ7XFxuJGdyaWQtZ3V0dGVyLXdpZHRoOiAxLjg3NXJlbSAhZGVmYXVsdDtcXG5cXG4vLyBDb21wb25lbnRzXFxuLy8kbGluZS1oZWlnaHQtbGc6ICAgICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuLy8kbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuXFxuLy8kYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgICAxcHggIWRlZmF1bHQ7XFxuLy8kYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuXFxuJGJvcmRlci1yYWRpdXM6IDRweCAhZGVmYXVsdDtcXG4vLyRib3JkZXItcmFkaXVzLWxnOiAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xcbi8vJGJvcmRlci1yYWRpdXMtc206ICAgICAgICAgICAgLjJyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kY29tcG9uZW50LWFjdGl2ZS1jb2xvcjogICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kY29tcG9uZW50LWFjdGl2ZS1iZzogICAgICAgICB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpICFkZWZhdWx0O1xcblxcbiRjYXJldC13aWR0aDogLjI1cmVtO1xcblxcbi8vJHRyYW5zaXRpb24tYmFzZTogICAgICAgICAgICAgYWxsIC4ycyBlYXNlLWluLW91dCAhZGVmYXVsdDtcXG4vLyR0cmFuc2l0aW9uLWZhZGU6ICAgICAgICAgICAgIG9wYWNpdHkgLjE1cyBsaW5lYXIgIWRlZmF1bHQ7XFxuLy8kdHJhbnNpdGlvbi1jb2xsYXBzZTogICAgICAgICBoZWlnaHQgLjM1cyBlYXNlICFkZWZhdWx0O1xcblxcbi8vIEZvbnRzXFxuJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWY6IFxcXCJPcGVuIFNhbnNcXFwiLCBoZWx2ZXRpY2EsIGFyaWFsLCBzYW5zLXNlcmlmO1xcbi8vJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTogICAgICAgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcXFwiTGliZXJhdGlvbiBNb25vXFxcIiwgXFxcIkNvdXJpZXIgTmV3XFxcIiwgbW9ub3NwYWNlICFkZWZhdWx0O1xcbi8vJGZvbnQtZmFtaWx5LWJhc2U6ICAgICAgICAgICAgJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWYgIWRlZmF1bHQ7XFxuXFxuJGZvbnQtc2l6ZS1iYXNlOiAuODc1cmVtO1xcbiRmb250LXNpemUtbGc6IDFyZW07XFxuJGZvbnQtc2l6ZS1zbTogLjc1cmVtO1xcbiRmb250LXNpemUteHM6IC42MjVyZW07IC8vIFBTIGN1c3RvbVxcblxcbi8vJGZvbnQtd2VpZ2h0LWxpZ2h0OiAgICAgICAgICAgMzAwO1xcbi8vJGZvbnQtd2VpZ2h0LW5vcm1hbDogICAgICAgICAgNDAwO1xcbiRmb250LXdlaWdodC1zZW1pYm9sZDogNjAwO1xcbiRmb250LXdlaWdodC1ib2xkOiA3MDA7XFxuXFxuJGgxLWZvbnQtc2l6ZTogMS41cmVtO1xcbiRoMi1mb250LXNpemU6IDEuMjVyZW07XFxuJGgzLWZvbnQtc2l6ZTogMXJlbTtcXG4kaDQtZm9udC1zaXplOiAuODc1cmVtO1xcbiRoNS1mb250LXNpemU6IC43NXJlbTtcXG4kaDYtZm9udC1zaXplOiAuNjI1cmVtO1xcblxcbi8vJGhlYWRpbmdzLW1hcmdpbi1ib3R0b206ICAgICAgKCRzcGFjZXIgLyAyKSAhZGVmYXVsdDtcXG4kaGVhZGluZ3MtZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1zYW5zLXNlcmlmO1xcbiRoZWFkaW5ncy1mb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LWJvbGQ7XFxuJGhlYWRpbmdzLWNvbG9yOiAkYm9keS1jb2xvcjtcXG5cXG4vLyRkaXNwbGF5MS1zaXplOiAgICAgICAgICAgICAgIDZyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTItc2l6ZTogICAgICAgICAgICAgICA1LjVyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTMtc2l6ZTogICAgICAgICAgICAgICA0LjVyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTQtc2l6ZTogICAgICAgICAgICAgICAzLjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZGlzcGxheTEtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTItd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTMtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTQtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheS1saW5lLWhlaWdodDogICAgICAgICAkaGVhZGluZ3MtbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kbGVhZC1mb250LXNpemU6ICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkgIWRlZmF1bHQ7XFxuLy8kbGVhZC1mb250LXdlaWdodDogICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuXFxuLy8kc21hbGwtZm9udC1zaXplOiAgICAgICAgICAgICA4MCUgIWRlZmF1bHQ7XFxuXFxuJHRleHQtbXV0ZWQ6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyRibG9ja3F1b3RlLXNtYWxsLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG4vLyRibG9ja3F1b3RlLWZvbnQtc2l6ZTogICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAxLjI1KSAhZGVmYXVsdDtcXG5cXG4kaHItYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRoci1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuLy8kbWFyay1wYWRkaW5nOiAgICAgICAgICAgICAgICAuMmVtICFkZWZhdWx0O1xcblxcbi8vJGR0LWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuLy8ka2JkLWJveC1zaGFkb3c6ICAgICAgICAgICAgICBpbnNldCAwIC0uMXJlbSAwIHJnYmEoJGJsYWNrLCAuMjUpICFkZWZhdWx0O1xcbi8vJG5lc3RlZC1rYmQtZm9udC13ZWlnaHQ6ICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuLy8kbGlzdC1pbmxpbmUtcGFkZGluZzogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRtYXJrLWJnOiAgICAgICAgICAgICAgICAgICAgICNmY2Y4ZTMgIWRlZmF1bHQ7XFxuXFxuLy8kaHItbWFyZ2luLXk6ICAgICAgICAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xcblxcbi8vIFRhYmxlc1xcbiR0YWJsZS1jZWxsLXBhZGRpbmc6IC40cmVtO1xcbiR0YWJsZS1jZWxsLXBhZGRpbmctc206IC4yNXJlbTtcXG5cXG4vLyR0YWJsZS1iZzogICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xcbiR0YWJsZS1hY2NlbnQtYmc6ICRiYWNrZ3JvdW5kLWNvbG9yO1xcbiR0YWJsZS1ob3Zlci1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4kdGFibGUtYWN0aXZlLWJnOiB0aGVtZS1jb2xvci1ob3ZlcihcXFwicHJpbWFyeVxcXCIpO1xcblxcbi8vJHRhYmxlLWJvcmRlci13aWR0aDogICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyR0YWJsZS1ib3JkZXItY29sb3I6ICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcXG5cXG4kdGFibGUtaGVhZC1iZzogJGJhY2tncm91bmQtY29sb3I7XFxuJHRhYmxlLWhlYWQtY29sb3I6ICRib2R5LWNvbG9yO1xcblxcbiR0YWJsZS1kYXJrLWJnOiAkYm9keS1jb2xvcjtcXG4kdGFibGUtZGFyay1hY2NlbnQtYmc6ICRleHRyYS1kYXJrLWdyYXk7XFxuJHRhYmxlLWRhcmstaG92ZXItYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuJHRhYmxlLWRhcmstYm9yZGVyLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuLy8kdGFibGUtZGFyay1jb2xvcjogICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcXG5cXG4vLyBCdXR0b25zXFxuJGlucHV0LWJ0bi1wYWRkaW5nLXk6IC4zNzVyZW07XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXg6IC44MzhyZW07XFxuLy8kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0OiAgICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1idG4tZm9jdXMtd2lkdGg6ICAgICAgIC4ycmVtICFkZWZhdWx0O1xcbi8vJGlucHV0LWJ0bi1mb2N1cy1jb2xvcjogICAgICAgcmdiYSgkY29tcG9uZW50LWFjdGl2ZS1iZywgLjI1KSAhZGVmYXVsdDtcXG4vLyRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdzogIDAgMCAwICRpbnB1dC1idG4tZm9jdXMtd2lkdGggJGlucHV0LWJ0bi1mb2N1cy1jb2xvciAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYnRuLXBhZGRpbmcteS1zbTogLjMxM3JlbTtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteC1zbTogLjYyNXJlbTtcXG4vLyRpbnB1dC1idG4tbGluZS1oZWlnaHQtc206ICAgICRsaW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYnRuLXBhZGRpbmcteS1sZzogLjQzOHJlbTtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteC1sZzogLjgzOHJlbTtcXG4vLyRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGc6ICAgICRsaW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1idG4tYm9yZGVyLXdpZHRoOiAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuLy8gQnV0dG9uc1xcbiRidG4tcGFkZGluZy15OiAuNXJlbSAhZGVmYXVsdDtcXG4kYnRuLXBhZGRpbmcteDogMXJlbSAhZGVmYXVsdDtcXG4vLyRidG4tbGluZS1oZWlnaHQ6ICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXBhZGRpbmcteS1zbTogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAhZGVmYXVsdDtcXG4vLyRidG4tcGFkZGluZy14LXNtOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LXNtICFkZWZhdWx0O1xcbi8vJGJ0bi1saW5lLWhlaWdodC1zbTogICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRidG4tcGFkZGluZy15LWxnOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGcgIWRlZmF1bHQ7XFxuLy8kYnRuLWxpbmUtaGVpZ2h0LWxnOiAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGJ0bi1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuJGJ0bi1mb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LXNlbWlib2xkO1xcbiRidG4tYm94LXNoYWRvdzogbm9uZTtcXG4vLyRidG4tZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtd2lkdGggIWRlZmF1bHQ7XFxuJGJ0bi1mb2N1cy1ib3gtc2hhZG93OiBub25lO1xcbi8vJGJ0bi1kaXNhYmxlZC1vcGFjaXR5OiAgICAgICAgLjY1ICFkZWZhdWx0O1xcbiRidG4tYWN0aXZlLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8kYnRuLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLWJsb2NrLXNwYWNpbmcteTogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4kYnRuLWJvcmRlci1yYWRpdXM6IDRweDtcXG4vLyRidG4tYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgJGJvcmRlci1yYWRpdXMtc20gIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXRyYW5zaXRpb246ICAgICAgICAgICAgICBjb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XFxuXFxuLy8gRm9ybXNcXG4kaW5wdXQtcGFkZGluZy15OiAuMzc1cmVtO1xcbiRpbnB1dC1wYWRkaW5nLXg6IC40Mzc1cmVtO1xcbi8vJGlucHV0LWxpbmUtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtcGFkZGluZy15LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktc20gIWRlZmF1bHQ7XFxuLy8kaW5wdXQtcGFkZGluZy14LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtc20gIWRlZmF1bHQ7XFxuLy8kaW5wdXQtbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1wYWRkaW5nLXktbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1saW5lLWhlaWdodC1sZzogICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kaW5wdXQtZGlzYWJsZWQtYmc6ICNlY2VlZWY7XFxuXFxuJGlucHV0LWNvbG9yOiAkYm9keS1jb2xvcjtcXG4kaW5wdXQtYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRpbnB1dC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kaW5wdXQtYm94LXNoYWRvdzogbm9uZTtcXG5cXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzLWxnOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1zbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1mb2N1cy1iZzogICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYmcgIWRlZmF1bHQ7XFxuJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvcjogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRpbnB1dC1mb2N1cy1jb2xvcjogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1mb2N1cy13aWR0aCAhZGVmYXVsdDtcXG4kaW5wdXQtZm9jdXMtYm94LXNoYWRvdzogbm9uZTtcXG5cXG4kaW5wdXQtcGxhY2Vob2xkZXItY29sb3I6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtYm9yZGVyOiAgICAgICAgICAgICAgICAgICAkaW5wdXQtYm9yZGVyLXdpZHRoICogMiAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXI6ICAgICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogJGlucHV0LWJ0bi1saW5lLWhlaWdodCkgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXkgKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0OiAyLjE4OHJlbTtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXItc206ICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1zbSAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20pICsgKCRpbnB1dC1idG4tcGFkZGluZy15LXNtICogMikgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgICAgICAgICAgY2FsYygjeyRpbnB1dC1oZWlnaHQtaW5uZXItc219ICsgI3skaW5wdXQtaGVpZ2h0LWJvcmRlcn0pICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWhlaWdodC1pbm5lci1sZzogICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWxnICogJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZykgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0LWxnOiAyLjE4OHJlbTtcXG5cXG4vLyRpbnB1dC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xcblxcbi8vJGZvcm0tdGV4dC1tYXJnaW4tdG9wOiAgICAgICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLWNoZWNrLWlucHV0LWd1dHRlcjogICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXk6ICAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXg6ICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLWNoZWNrLWlubGluZS1tYXJnaW4teDogICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kZm9ybS1jaGVjay1pbmxpbmUtaW5wdXQtbWFyZ2luLXg6ICAgICAgLjMxMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZm9ybS1ncm91cC1tYXJnaW4tYm90dG9tOiAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1ncm91cC1hZGRvbi1jb2xvcjogICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuJGlucHV0LWdyb3VwLWFkZG9uLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG4vLyRpbnB1dC1ncm91cC1hZGRvbi1ib3JkZXItY29sb3I6ICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWd1dHRlcjogICAgICAgICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1zcGFjZXIteDogICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1zaXplOiAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJnOiAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1iZy1zaXplOiAgICAgIDUwJSA1MCUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJveC1zaGFkb3c6ICAgaW5zZXQgMCAuMjVyZW0gLjI1cmVtIHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWRpc2FibGVkLWJnOiAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtbGFiZWwtZGlzYWJsZWQtY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3I6ICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1iZzogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWRpc2FibGVkLWJnOiAgcmdiYSh0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpLCAuNSkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtYm94LXNoYWRvdzogICBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1mb2N1cy1ib3gtc2hhZG93OiAgICAgMCAwIDAgMXB4ICRib2R5LWJnLCAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1jb2xvcjogICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICAgICAgIGxpZ2h0ZW4oJGNvbXBvbmVudC1hY3RpdmUtYmcsIDM1JSkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1ib3gtc2hhZG93OiAgICBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1czogICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDggOCclM0UlM0NwYXRoIGZpbGw9JyN7JGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yfScgZD0nTTYuNTY0Ljc1bC0zLjU5IDMuNjEyLTEuNTM4LTEuNTVMMCA0LjI2IDIuOTc0IDcuMjUgOCAyLjE5M3onLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWJnOiAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3I6ICRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWljb24taW5kZXRlcm1pbmF0ZTogIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA0JyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3J9JyBkPSdNMCAyaDQnLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWJveC1zaGFkb3c6IG5vbmUgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLXJhZGlvLWluZGljYXRvci1ib3JkZXItcmFkaXVzOiAgICAgICAgICA1MCUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXJhZGlvLWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4JyUzRSUzQ2NpcmNsZSByPSczJyBmaWxsPScjeyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvcn0nLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLXNlbGVjdC1wYWRkaW5nLXk6ICAgICAgICAgICAuMzc1cmVtICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQ6ICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yLXBhZGRpbmc6ICAgMXJlbSAhZGVmYXVsdDsgLy8gRXh0cmEgcGFkZGluZyB0byBhY2NvdW50IGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGJhY2tncm91bmQtaW1hZ2UgYmFzZWQgaW5kaWNhdG9yXFxuLy8kY3VzdG9tLXNlbGVjdC1saW5lLWhlaWdodDogICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtY29sb3I6ICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWRpc2FibGVkLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuLy8kY3VzdG9tLXNlbGVjdC1iZzogICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtZGlzYWJsZWQtYmc6ICRpbnB1dC1kaXNhYmxlZC1iZztcXG4kY3VzdG9tLXNlbGVjdC1iZy1zaXplOiA4cHggMTBweCAhZGVmYXVsdDsgLy8gSW4gcGl4ZWxzIGJlY2F1c2UgaW1hZ2UgZGltZW5zaW9uc1xcbiRjdXN0b20tc2VsZWN0LWluZGljYXRvci1jb2xvcjogJGlucHV0LWNvbG9yO1xcbi8vJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yOiAgICAgICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDUnJTNFJTNDcGF0aCBmaWxsPScjeyRjdXN0b20tc2VsZWN0LWluZGljYXRvci1jb2xvcn0nIGQ9J00yIDBMMCAyaDR6bTAgNUwwIDNoNHonLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItd2lkdGg6ICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWJvcmRlci1jb2xvcjogICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItcmFkaXVzOiAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kY3VzdG9tLXNlbGVjdC1mb2N1cy1ib3JkZXItY29sb3I6ICRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3I7XFxuJGN1c3RvbS1zZWxlY3QtZm9jdXMtYm94LXNoYWRvdzogJGlucHV0LWZvY3VzLWJveC1zaGFkb3c7XFxuXFxuLy8kY3VzdG9tLXNlbGVjdC1mb250LXNpemUtc206ICAgICAgICA3NSUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQtc206ICAgICAgICAgICAkaW5wdXQtaGVpZ2h0LXNtICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1zZWxlY3QtZm9udC1zaXplLWxnOiAgICAgICAgMTI1JSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWhlaWdodC1sZzogICAgICAgICAgICRpbnB1dC1oZWlnaHQtbGcgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWZpbGUtaGVpZ2h0OiAgICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWZvY3VzLWJvcmRlci1jb2xvcjogICAgJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLWZpbGUtZm9jdXMtYm94LXNoYWRvdzogJGlucHV0LWZvY3VzLWJveC1zaGFkb3c7XFxuXFxuLy8kY3VzdG9tLWZpbGUtcGFkZGluZy15OiAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1wYWRkaW5nLXg6ICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1jb2xvcjogICAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1iZzogICAgICAgICAgICAgICAgICAgICRpbnB1dC1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItd2lkdGg6ICAgICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJvcmRlci1jb2xvcjogICAgICAgICAgJGlucHV0LWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItcmFkaXVzOiAgICAgICAgICRpbnB1dC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJveC1zaGFkb3c6ICAgICAgICAgICAgJGlucHV0LWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYnV0dG9uLWNvbG9yOiAgICAgICAgICAkY3VzdG9tLWZpbGUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYnV0dG9uLWJnOiAgICAgICAgICAgICAkaW5wdXQtZ3JvdXAtYWRkb24tYmcgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtdGV4dDogKFxcbi8vICAgICAgICBlbjogXFxcIkJyb3dzZVxcXCJcXG4vLykgIWRlZmF1bHQ7XFxuXFxuJGN1cnNvci1kaXNhYmxlZDogbm90LWFsbG93ZWQ7IC8vIFBTIGN1c3RvbVxcblxcbi8vIEZvcm0gdmFsaWRhdGlvblxcbi8vJGZvcm0tZmVlZGJhY2stbWFyZ2luLXRvcDogICAgICAgICAgJGZvcm0tdGV4dC1tYXJnaW4tdG9wICFkZWZhdWx0O1xcbi8vJGZvcm0tZmVlZGJhY2stZm9udC1zaXplOiAgICAgICAgICAgJHNtYWxsLWZvbnQtc2l6ZSAhZGVmYXVsdDtcXG4kZm9ybS1mZWVkYmFjay12YWxpZC1jb2xvcjogdGhlbWUtY29sb3IoXFxcInN1Y2Nlc3NcXFwiKTtcXG4kZm9ybS1mZWVkYmFjay1pbnZhbGlkLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwiZGFuZ2VyXFxcIik7XFxuJGZvcm0tZmVlZGJhY2std2FybmluZy1jb2xvcjogdGhlbWUtY29sb3IoXFxcIndhcm5pbmdcXFwiKTsgLy8gUFMgY3VzdG9tXFxuXFxuLy8gRHJvcGRvd25zXFxuLy8kZHJvcGRvd24tbWluLXdpZHRoOiAgICAgICAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tcGFkZGluZy15OiAwO1xcbi8vJGRyb3Bkb3duLXBhZGRpbmcteTogICAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tc3BhY2VyOiAgICAgICAgICAgICAgICAgICAuMTI1cmVtICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLWJnOiAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRkcm9wZG93bi1ib3JkZXItY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJGRyb3Bkb3duLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRkcm9wZG93bi1kaXZpZGVyLWJnOiAkbGlnaHQtZ3JheTtcXG4vLyRkcm9wZG93bi1ib3gtc2hhZG93OiAgICAgICAgICAgICAgIDAgLjVyZW0gMXJlbSByZ2JhKCRibGFjaywgLjE3NSkgIWRlZmF1bHQ7XFxuXFxuJGRyb3Bkb3duLWxpbmstY29sb3I6ICRtZWRpdW0tZ3JheTtcXG4kZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kZHJvcGRvd24tbGluay1ob3Zlci1iZzogJHdoaXRlO1xcblxcbi8vJGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tbGluay1hY3RpdmUtYmc6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4vLyRkcm9wZG93bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG4kZHJvcGRvd24taXRlbS1wYWRkaW5nLXg6IC4zMTI1cmVtO1xcbiRkcm9wZG93bi1pdGVtLXBhZGRpbmcteTogLjMxMjVyZW07XFxuXFxuLy8kZHJvcGRvd24taGVhZGVyLWNvbG9yOiAgICAgICAgICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8gTmF2c1xcbiRuYXYtbGluay1wYWRkaW5nLXk6IC45Mzc1cmVtO1xcbiRuYXYtbGluay1wYWRkaW5nLXg6IDEuMjVyZW07XFxuJG5hdi1saW5rLWRpc2FibGVkLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG5cXG4kbmF2LXRhYnMtYm9yZGVyLWNvbG9yOiAkd2hpdGU7XFxuLy8kbmF2LXRhYnMtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJG5hdi10YWJzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpO1xcbiRuYXYtdGFicy1saW5rLWFjdGl2ZS1jb2xvcjogJGJvZHktY29sb3I7XFxuJG5hdi10YWJzLWxpbmstYWN0aXZlLWJnOiAkYm9keS1iZztcXG4kbmF2LXRhYnMtbGluay1hY3RpdmUtYm9yZGVyLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpO1xcblxcbiRuYXYtcGlsbHMtbGluay1ob3Zlci1ib3JkZXItY29sb3I6ICRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yOiAkbmF2LXRhYnMtbGluay1hY3RpdmUtY29sb3I7XFxuJG5hdi1waWxscy1saW5rLWFjdGl2ZS1iZzogI2Y0ZjlmYjtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjogJG5hdi10YWJzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjsgLy8gUFMgY3VzdG9tXFxuXFxuLy8kbmF2LXBpbGxzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRuYXYtcGlsbHMtbGluay1hY3RpdmUtY29sb3I6ICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbi8vJG5hdi1waWxscy1saW5rLWFjdGl2ZS1iZzogICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuLy8gTmF2YmFyXFxuLy8kbmF2YmFyLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAoJHNwYWNlciAvIDIpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItbmF2LWxpbmstcGFkZGluZy14OiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci1icmFuZC1mb250LXNpemU6ICAgICAgICAgICAgJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcXG5cXG4vLyRuYXYtbGluay1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAkbGluZS1oZWlnaHQtYmFzZSArICRuYXYtbGluay1wYWRkaW5nLXkgKiAyKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItYnJhbmQtaGVpZ2h0OiAgICAgICAgICAgICAgICRuYXZiYXItYnJhbmQtZm9udC1zaXplICogJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWJyYW5kLXBhZGRpbmcteTogICAgICAgICAgICAoJG5hdi1saW5rLWhlaWdodCAtICRuYXZiYXItYnJhbmQtaGVpZ2h0KSAvIDIgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy15OiAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLXRvZ2dsZXItZm9udC1zaXplOiAgICAgICAgICAkZm9udC1zaXplLWxnICFkZWZhdWx0O1xcbi8vJG5hdmJhci10b2dnbGVyLWJvcmRlci1yYWRpdXM6ICAgICAgJGJ0bi1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci1kYXJrLWNvbG9yOiAgICAgICAgICAgICAgICAgcmdiYSgkd2hpdGUsIC41KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay1ob3Zlci1jb2xvcjogICAgICAgICAgIHJnYmEoJHdoaXRlLCAuNzUpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLWFjdGl2ZS1jb2xvcjogICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLWRpc2FibGVkLWNvbG9yOiAgICAgICAgcmdiYSgkd2hpdGUsIC4yNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWRhcmstdG9nZ2xlci1pY29uLWJnOiAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItZGFyay1jb2xvcn0nIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLXRvZ2dsZXItYm9yZGVyLWNvbG9yOiAgcmdiYSgkd2hpdGUsIC4xKSAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItbGlnaHQtY29sb3I6ICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LWhvdmVyLWNvbG9yOiAgICAgICAgICByZ2JhKCRibGFjaywgLjcpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1saWdodC1hY3RpdmUtY29sb3I6ICAgICAgICAgcmdiYSgkYmxhY2ssIC45KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtZGlzYWJsZWQtY29sb3I6ICAgICAgIHJnYmEoJGJsYWNrLCAuMykgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LXRvZ2dsZXItaWNvbi1iZzogICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItbGlnaHQtY29sb3J9JyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtdG9nZ2xlci1ib3JkZXItY29sb3I6IHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8gUGFnaW5hdGlvblxcbiRwYWdpbmF0aW9uLXBhZGRpbmcteTogLjY1cmVtO1xcbiRwYWdpbmF0aW9uLXBhZGRpbmcteDogLjVyZW07XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXktc206ICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXgtc206ICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteS1sZzogICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteC1sZzogICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgIDEuMjUgIWRlZmF1bHQ7XFxuXFxuJHBhZ2luYXRpb24tY29sb3I6ICRtZWRpdW0tZ3JheTtcXG4kcGFnaW5hdGlvbi1iZzogJHdoaXRlO1xcbi8vJHBhZ2luYXRpb24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1ib3JkZXItY29sb3I6ICR3aGl0ZTtcXG5cXG4vLyRwYWdpbmF0aW9uLWZvY3VzLWJveC1zaGFkb3c6ICAgICAgICRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdyAhZGVmYXVsdDtcXG5cXG4kcGFnaW5hdGlvbi1ob3Zlci1jb2xvcjogJHBhZ2luYXRpb24tY29sb3I7XFxuJHBhZ2luYXRpb24taG92ZXItYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWhvdmVyLWJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yO1xcblxcbiRwYWdpbmF0aW9uLWFjdGl2ZS1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kcGFnaW5hdGlvbi1hY3RpdmUtYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWFjdGl2ZS1ib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWJvcmRlci1jb2xvcjtcXG5cXG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuJHBhZ2luYXRpb24tZGlzYWJsZWQtYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yO1xcblxcbi8vIEp1bWJvdHJvblxcbiRqdW1ib3Ryb24tcGFkZGluZzogMnJlbSAhZGVmYXVsdDtcXG4kanVtYm90cm9uLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG5cXG4vLyBDYXJkc1xcbiRjYXJkLXNwYWNlci14OiAuNjI1cmVtICFkZWZhdWx0O1xcbiRjYXJkLXNwYWNlci15OiAuNjI1cmVtICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci13aWR0aDogMXB4ICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci1yYWRpdXM6IDVweCAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItcmFkaXVzLWlubmVyOiAkY2FyZC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiRjYXJkLWNhcC1iZzogJGdyYXktMjAwICFkZWZhdWx0O1xcbiRjYXJkLWJnOiAjZmZmICFkZWZhdWx0O1xcbiRjYXJkLWxpbmstaG92ZXItY29sb3I6ICNmZmYgIWRlZmF1bHQ7XFxuJGNhcmQtYm9yZGVyLWNvbG9yOiAjZGJlNmU5ICFkZWZhdWx0O1xcbi8vJGNhcmQtaW5uZXItYm9yZGVyLXJhZGl1czogICAgICAgICAgY2FsYygjeyRjYXJkLWJvcmRlci1yYWRpdXN9IC0gI3skY2FyZC1ib3JkZXItd2lkdGh9KSAhZGVmYXVsdDtcXG4vLyRjYXJkLWNhcC1iZzogICAgICAgICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMDMpICFkZWZhdWx0O1xcbi8vJGNhcmQtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcblxcbi8vJGNhcmQtaW1nLW92ZXJsYXktcGFkZGluZzogICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWdyb3VwLW1hcmdpbjogICAgICAgICAgICAgICAgICgkZ3JpZC1ndXR0ZXItd2lkdGggLyAyKSAhZGVmYXVsdDtcXG4vLyRjYXJkLWRlY2stbWFyZ2luOiAgICAgICAgICAgICAgICAgICRjYXJkLWdyb3VwLW1hcmdpbiAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWNvbHVtbnMtY291bnQ6ICAgICAgICAgICAgICAgIDMgIWRlZmF1bHQ7XFxuLy8kY2FyZC1jb2x1bW5zLWdhcDogICAgICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbi8vJGNhcmQtY29sdW1ucy1tYXJnaW46ICAgICAgICAgICAgICAgJGNhcmQtc3BhY2VyLXkgIWRlZmF1bHQ7XFxuXFxuLy8gVG9vbHRpcHNcXG4vLyR0b29sdGlwLWZvbnQtc2l6ZTogICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XFxuLy8kdG9vbHRpcC1tYXgtd2lkdGg6ICAgICAgICAgICAyMDBweCAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWNvbG9yOiAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kdG9vbHRpcC1iZzogJG1lZGl1bS1ncmF5O1xcbi8vJHRvb2x0aXAtYm9yZGVyLXJhZGl1czogICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtb3BhY2l0eTogICAgICAgICAgICAgLjkgIWRlZmF1bHQ7XFxuJHRvb2x0aXAtcGFkZGluZy15OiAuNjI1cmVtO1xcbiR0b29sdGlwLXBhZGRpbmcteDogMS4yNXJlbTtcXG4vLyR0b29sdGlwLW1hcmdpbjogICAgICAgICAgICAgIDAgIWRlZmF1bHQ7XFxuXFxuLy8kdG9vbHRpcC1hcnJvdy13aWR0aDogICAgICAgICAuOHJlbSAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWFycm93LWhlaWdodDogICAgICAgIC40cmVtICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtYXJyb3ctY29sb3I6ICAgICAgICAgJHRvb2x0aXAtYmcgIWRlZmF1bHQ7XFxuXFxuLy8gUG9wb3ZlcnNcXG4vLyRwb3BvdmVyLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1iZzogICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1tYXgtd2lkdGg6ICAgICAgICAgICAgICAgICAyNzZweCAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLWJvcmRlci13aWR0aDogICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRwb3BvdmVyLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuJHBvcG92ZXItaGVhZGVyLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG4vLyRwb3BvdmVyLWhlYWRlci1jb2xvcjogICAgICAgICAgICAgICRoZWFkaW5ncy1jb2xvciAhZGVmYXVsdDtcXG4kcG9wb3Zlci1oZWFkZXItcGFkZGluZy15OiAuNjI1cmVtO1xcbiRwb3BvdmVyLWhlYWRlci1wYWRkaW5nLXg6IDEuMjVyZW07XFxuXFxuLy8kcG9wb3Zlci1ib2R5LWNvbG9yOiAgICAgICAgICAgICAgICAkYm9keS1jb2xvciAhZGVmYXVsdDtcXG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteTogLjYyNXJlbTtcXG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteDogMS4yNXJlbTtcXG5cXG4vLyRwb3BvdmVyLWFycm93LXdpZHRoOiAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1hcnJvdy1oZWlnaHQ6ICAgICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLWFycm93LWNvbG9yOiAgICAgICAgICAgICAgICRwb3BvdmVyLWJnICFkZWZhdWx0O1xcblxcbi8vJHBvcG92ZXItYXJyb3ctb3V0ZXItY29sb3I6ICAgICAgICAgZmFkZS1pbigkcG9wb3Zlci1ib3JkZXItY29sb3IsIC4wNSkgIWRlZmF1bHQ7XFxuXFxuLy8gQmFkZ2VzXFxuJGJhZGdlLWZvbnQtc2l6ZTogLjYyNXJlbSAhZGVmYXVsdDtcXG4kYmFkZ2UtZm9udC13ZWlnaHQ6IDUwMCAhZGVmYXVsdDtcXG4kYmFkZ2UtcGFkZGluZy15OiAuMjVyZW07XFxuJGJhZGdlLXBhZGRpbmcteDogLjVyZW07XFxuLy8kYmFkZ2UtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4vLyRiYWRnZS1waWxsLXBhZGRpbmcteDogICAgICAgICAgICAgIC42ZW0gIWRlZmF1bHQ7XFxuLy8kYmFkZ2UtcGlsbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG5cXG4vLyBNb2RhbHNcXG4kbW9kYWwtaW5uZXItcGFkZGluZzogMS44NzVyZW07XFxuXFxuLy8kbW9kYWwtZGlhbG9nLW1hcmdpbjogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRtb2RhbC1kaWFsb2ctbWFyZ2luLXktc20tdXA6IDEuNzVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQ6ICAgICAgICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG5cXG4vLyRtb2RhbC1jb250ZW50LWJnOiAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kbW9kYWwtY29udGVudC1ib3JkZXItY29sb3I6IG5vbmU7XFxuLy8kbW9kYWwtY29udGVudC1ib3JkZXItd2lkdGg6ICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRtb2RhbC1jb250ZW50LWJveC1zaGFkb3cteHM6IDAgOHB4IDE2cHggMCByZ2JhKDAsIDAsIDAsIC4xKTtcXG4kbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXNtLXVwOiAwIDhweCAxNnB4IDAgcmdiYSgwLCAwLCAwLCAuMSk7XFxuXFxuLy8kbW9kYWwtYmFja2Ryb3AtYmc6ICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuLy8kbW9kYWwtYmFja2Ryb3Atb3BhY2l0eTogICAgICAuNSAhZGVmYXVsdDtcXG4kbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjogbm9uZTtcXG4vLyRtb2RhbC1mb290ZXItYm9yZGVyLWNvbG9yOiAgICRtb2RhbC1oZWFkZXItYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbi8vJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGg6ICAgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJG1vZGFsLWZvb3Rlci1ib3JkZXItd2lkdGg6ICAgJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJG1vZGFsLWhlYWRlci1wYWRkaW5nOiAkbW9kYWwtaW5uZXItcGFkZGluZztcXG5cXG4kbW9kYWwtbGc6IDkwMHB4O1xcbiRtb2RhbC1tZDogNjgwcHg7XFxuJG1vZGFsLXNtOiA0MDBweDtcXG5cXG4vLyRtb2RhbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuM3MgZWFzZS1vdXQgIWRlZmF1bHQ7XFxuXFxuLy8gQWxlcnRzXFxuJGFsZXJ0LXBhZGRpbmcteTogMXJlbSAhZGVmYXVsdDtcXG4kYWxlcnQtcGFkZGluZy14OiAxcmVtO1xcbi8vJGFsZXJ0LW1hcmdpbi1ib3R0b206ICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4vLyRhbGVydC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGFsZXJ0LWxpbmstZm9udC13ZWlnaHQ6ICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuJGFsZXJ0LWJvcmRlci13aWR0aDogLjEyNXJlbTtcXG5cXG4vLyRhbGVydC1iZy1sZXZlbDogICAgICAgICAgICAgICAgICAgIC0xMCAhZGVmYXVsdDtcXG4vLyRhbGVydC1ib3JkZXItbGV2ZWw6ICAgICAgICAgICAgICAgIC05ICFkZWZhdWx0O1xcbi8vJGFsZXJ0LWNvbG9yLWxldmVsOiAgICAgICAgICAgICAgICAgNiAhZGVmYXVsdDtcXG5cXG4vLyBQcm9ncmVzcyBiYXJzXFxuLy8kcHJvZ3Jlc3MtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIC43NSkgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmc6ICAgICAgICAgICAgICAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1ib3gtc2hhZG93OiAgICAgICAgICAgICAgIGluc2V0IDAgLjFyZW0gLjFyZW0gcmdiYSgkYmxhY2ssIC4xKSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iYXItY29sb3I6ICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iYXItYmc6ICAgICAgICAgICAgICAgICAgIHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIikgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLWFuaW1hdGlvbi10aW1pbmc6ICAgICAxcyBsaW5lYXIgaW5maW5pdGUgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLXRyYW5zaXRpb246ICAgICAgICAgICB3aWR0aCAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBMaXN0IGdyb3VwXFxuLy8kbGlzdC1ncm91cC1iZzogICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRsaXN0LWdyb3VwLWJvcmRlci13aWR0aDogICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteTogJGlucHV0LXBhZGRpbmcteTtcXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteDogJGlucHV0LXBhZGRpbmcteDtcXG5cXG4kbGlzdC1ncm91cC1ob3Zlci1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1jb2xvcjogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWFjdGl2ZS1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1ib3JkZXItY29sb3I6ICAgICRsaXN0LWdyb3VwLWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kbGlzdC1ncm91cC1kaXNhYmxlZC1iZzogICAgICAgICAgICAkbGlzdC1ncm91cC1iZyAhZGVmYXVsdDtcXG5cXG4vLyRsaXN0LWdyb3VwLWFjdGlvbi1jb2xvcjogICAgICAgICAgICRncmF5LTcwMCAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3Rpb24taG92ZXItY29sb3I6ICR3aGl0ZTtcXG5cXG4kbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWNvbG9yOiAkYm9keS1jb2xvciAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWJnOiAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuXFxuLy8gSW1hZ2UgdGh1bWJuYWlsc1xcbiR0aHVtYm5haWwtcGFkZGluZzogMDtcXG4vLyR0aHVtYm5haWwtYmc6ICAgICAgICAgICAgICAgICAgICAgICRib2R5LWJnICFkZWZhdWx0O1xcbi8vJHRodW1ibmFpbC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kdGh1bWJuYWlsLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kdGh1bWJuYWlsLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kdGh1bWJuYWlsLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8gRmlndXJlc1xcbi8vJGZpZ3VyZS1jYXB0aW9uLWZvbnQtc2l6ZTogICAgICAgICAgOTAlICFkZWZhdWx0O1xcbiRmaWd1cmUtY2FwdGlvbi1jb2xvcjogJG1lZGl1bS1ncmF5O1xcblxcbi8vIEJyZWFkY3J1bWJzXFxuJGJyZWFkY3J1bWItcGFkZGluZy15OiAuMzEyNXJlbTtcXG4kYnJlYWRjcnVtYi1wYWRkaW5nLXg6IC4zMTI1cmVtO1xcbiRicmVhZGNydW1iLWl0ZW0tcGFkZGluZzogLjNyZW07XFxuXFxuJGJyZWFkY3J1bWItbWFyZ2luLWJvdHRvbTogMDtcXG5cXG4kYnJlYWRjcnVtYi1iZzogbm9uZTtcXG4kYnJlYWRjcnVtYi1kaXZpZGVyLWNvbG9yOiAkZGFyay1ncmF5O1xcbiRicmVhZGNydW1iLWFjdGl2ZS1jb2xvcjogJGV4dHJhLWRhcmstZ3JheTtcXG4kYnJlYWRjcnVtYi1kaXZpZGVyOiBcXFwiL1xcXCI7XFxuXFxuLy8gQ2Fyb3VzZWxcXG4vLyRjYXJvdXNlbC1jb250cm9sLWNvbG9yOiAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLXdpZHRoOiAgICAgICAgICAgIDE1JSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLW9wYWNpdHk6ICAgICAgICAgIC41ICFkZWZhdWx0O1xcblxcbi8vJGNhcm91c2VsLWluZGljYXRvci13aWR0aDogICAgICAgICAgMzBweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3ItaGVpZ2h0OiAgICAgICAgIDNweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3Itc3BhY2VyOiAgICAgICAgIDNweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1jYXB0aW9uLXdpZHRoOiAgICAgICAgICAgIDcwJSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jYXB0aW9uLWNvbG9yOiAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1jb250cm9sLWljb24td2lkdGg6ICAgICAgIDIwcHggIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24tYmc6ICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nI3skY2Fyb3VzZWwtY29udHJvbC1jb2xvcn0nIHZpZXdCb3g9JzAgMCA4IDgnJTNFJTNDcGF0aCBkPSdNNS4yNSAwbC00IDQgNCA0IDEuNS0xLjUtMi41LTIuNSAyLjUtMi41LTEuNS0xLjV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJGNhcm91c2VsLWNvbnRyb2wtbmV4dC1pY29uLWJnOiAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyN7JGNhcm91c2VsLWNvbnRyb2wtY29sb3J9JyB2aWV3Qm94PScwIDAgOCA4JyUzRSUzQ3BhdGggZD0nTTIuNzUgMGwtMS41IDEuNSAyLjUgMi41LTIuNSAyLjUgMS41IDEuNSA0LTQtNC00eicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBDbG9zZVxcbi8vJGNsb3NlLWZvbnQtc2l6ZTogICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMS41ICFkZWZhdWx0O1xcbi8vJGNsb3NlLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuLy8kY2xvc2UtY29sb3I6ICAgICAgICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuLy8kY2xvc2UtdGV4dC1zaGFkb3c6ICAgICAgICAgICAwIDFweCAwICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyBDb2RlXFxuLy8kY29kZS1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICA4Ny41JSAhZGVmYXVsdDtcXG4kY29kZS1jb2xvcjogJGJvZHktY29sb3I7XFxuXFxuLy8ka2JkLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAgICAuMnJlbSAhZGVmYXVsdDtcXG4vLyRrYmQtcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICAgIC40cmVtICFkZWZhdWx0O1xcbi8vJGtiZC1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICAgJGNvZGUtZm9udC1zaXplICFkZWZhdWx0O1xcbiRrYmQtY29sb3I6ICR3aGl0ZTtcXG4ka2JkLWJnOiAkZXh0cmEtZGFyay1ncmF5O1xcblxcbiRwcmUtY29sb3I6ICRib2R5LWNvbG9yO1xcbi8vJHByZS1zY3JvbGxhYmxlLW1heC1oZWlnaHQ6ICAgICAgICAgMzQwcHggIWRlZmF1bHQ7XFxuXFxuLy8gUHJpbnRpbmdcXG4vLyRwcmludC1wYWdlLXNpemU6ICAgICAgICAgICAgICAgICAgIGEzICFkZWZhdWx0O1xcbi8vJHByaW50LWJvZHktbWluLXdpZHRoOiAgICAgICAgICAgICAgbWFwLWdldCgkZ3JpZC1icmVha3BvaW50cywgXFxcImxnXFxcIikgIWRlZmF1bHQ7XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIHJldHVybiBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoY29udGVudCwgXCJ9XCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9OyAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXG5cbiAgbGlzdC5pID0gZnVuY3Rpb24gKG1vZHVsZXMsIG1lZGlhUXVlcnksIGRlZHVwZSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCBcIlwiXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgdmFyIGlkID0gdGhpc1tpXVswXTtcblxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBtb2R1bGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfaV0pO1xuXG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRpbnVlXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVkaWFRdWVyeSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWFRdWVyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzJdID0gXCJcIi5jb25jYXQobWVkaWFRdWVyeSwgXCIgYW5kIFwiKS5jb25jYXQoaXRlbVsyXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKSB7XG4gIHZhciBfaXRlbSA9IF9zbGljZWRUb0FycmF5KGl0ZW0sIDQpLFxuICAgICAgY29udGVudCA9IF9pdGVtWzFdLFxuICAgICAgY3NzTWFwcGluZyA9IF9pdGVtWzNdO1xuXG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8IFwiXCIpLmNvbmNhdChzb3VyY2UsIFwiICovXCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgb3B0aW9ucyA9IHt9O1xuICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZSwgbm8tcGFyYW0tcmVhc3NpZ25cblxuXG4gIHVybCA9IHVybCAmJiB1cmwuX19lc01vZHVsZSA/IHVybC5kZWZhdWx0IDogdXJsO1xuXG4gIGlmICh0eXBlb2YgdXJsICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfSAvLyBJZiB1cmwgaXMgYWxyZWFkeSB3cmFwcGVkIGluIHF1b3RlcywgcmVtb3ZlIHRoZW1cblxuXG4gIGlmICgvXlsnXCJdLipbJ1wiXSQvLnRlc3QodXJsKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHVybCA9IHVybC5zbGljZSgxLCAtMSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdXJsICs9IG9wdGlvbnMuaGFzaDtcbiAgfSAvLyBTaG91bGQgdXJsIGJlIHdyYXBwZWQ/XG4gIC8vIFNlZSBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy0zLyN1cmxzXG5cblxuICBpZiAoL1tcIicoKSBcXHRcXG5dLy50ZXN0KHVybCkgfHwgb3B0aW9ucy5uZWVkUXVvdGVzKSB7XG4gICAgcmV0dXJuIFwiXFxcIlwiLmNvbmNhdCh1cmwucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpLnJlcGxhY2UoL1xcbi9nLCBcIlxcXFxuXCIpLCBcIlxcXCJcIik7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiZDEwYmMwNzAwNWJiMmQ2MDRmNDkwNTE4MzY5MGFjMDQucG5nXCI7IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcIjAwZGQwZWMwYTE2YTEwODVlNzE0Yzc5MDZmZjhmYjA2LnBuZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCI0ZTdlM2UxNDJmMzkzOTg4M2NkMGE3ZTAwY2FiZGFlZi5wbmdcIjsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiNDBiZjI1Nzk5ZTRmZWM4MDc5Yzc3NzUwODNkZTA5ZGYucG5nXCI7IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcIjA5M2E4MTkxMzgyNzZiNDQ2NjExZDFkMmE0NWI5OGEyLnBuZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJlYTRlYmUwNzJiZTc1ZmJiZWEwMDI2MzE5MTY4MzZkZS5wbmdcIjsiLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBMb2Rhc2ggPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBDb3B5cmlnaHQgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9vcGVuanNmLm9yZy8+XG4gKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKi9cbjsoZnVuY3Rpb24oKSB7XG5cbiAgLyoqIFVzZWQgYXMgYSBzYWZlIHJlZmVyZW5jZSBmb3IgYHVuZGVmaW5lZGAgaW4gcHJlLUVTNSBlbnZpcm9ubWVudHMuICovXG4gIHZhciB1bmRlZmluZWQ7XG5cbiAgLyoqIFVzZWQgYXMgdGhlIHNlbWFudGljIHZlcnNpb24gbnVtYmVyLiAqL1xuICB2YXIgVkVSU0lPTiA9ICc0LjE3LjIxJztcblxuICAvKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbiAgdmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbiAgLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xuICB2YXIgQ09SRV9FUlJPUl9URVhUID0gJ1Vuc3VwcG9ydGVkIGNvcmUtanMgdXNlLiBUcnkgaHR0cHM6Ly9ucG1zLmlvL3NlYXJjaD9xPXBvbnlmaWxsLicsXG4gICAgICBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbicsXG4gICAgICBJTlZBTElEX1RFTVBMX1ZBUl9FUlJPUl9URVhUID0gJ0ludmFsaWQgYHZhcmlhYmxlYCBvcHRpb24gcGFzc2VkIGludG8gYF8udGVtcGxhdGVgJztcblxuICAvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG4gIHZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuICAvKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG4gIHZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xuXG4gIC8qKiBVc2VkIGFzIHRoZSBpbnRlcm5hbCBhcmd1bWVudCBwbGFjZWhvbGRlci4gKi9cbiAgdmFyIFBMQUNFSE9MREVSID0gJ19fbG9kYXNoX3BsYWNlaG9sZGVyX18nO1xuXG4gIC8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG4gIHZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbiAgLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG4gIHZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuICAvKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbiAgdmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgICBXUkFQX0NVUlJZX0JPVU5EX0ZMQUcgPSA0LFxuICAgICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICAgIFdSQVBfQ1VSUllfUklHSFRfRkxBRyA9IDE2LFxuICAgICAgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMixcbiAgICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQsXG4gICAgICBXUkFQX0FSWV9GTEFHID0gMTI4LFxuICAgICAgV1JBUF9SRUFSR19GTEFHID0gMjU2LFxuICAgICAgV1JBUF9GTElQX0ZMQUcgPSA1MTI7XG5cbiAgLyoqIFVzZWQgYXMgZGVmYXVsdCBvcHRpb25zIGZvciBgXy50cnVuY2F0ZWAuICovXG4gIHZhciBERUZBVUxUX1RSVU5DX0xFTkdUSCA9IDMwLFxuICAgICAgREVGQVVMVF9UUlVOQ19PTUlTU0lPTiA9ICcuLi4nO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbiAgdmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICAgIEhPVF9TUEFOID0gMTY7XG5cbiAgLyoqIFVzZWQgdG8gaW5kaWNhdGUgdGhlIHR5cGUgb2YgbGF6eSBpdGVyYXRlZXMuICovXG4gIHZhciBMQVpZX0ZJTFRFUl9GTEFHID0gMSxcbiAgICAgIExBWllfTUFQX0ZMQUcgPSAyLFxuICAgICAgTEFaWV9XSElMRV9GTEFHID0gMztcblxuICAvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbiAgdmFyIElORklOSVRZID0gMSAvIDAsXG4gICAgICBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MSxcbiAgICAgIE1BWF9JTlRFR0VSID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgsXG4gICAgICBOQU4gPSAwIC8gMDtcblxuICAvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB0aGUgbWF4aW11bSBsZW5ndGggYW5kIGluZGV4IG9mIGFuIGFycmF5LiAqL1xuICB2YXIgTUFYX0FSUkFZX0xFTkdUSCA9IDQyOTQ5NjcyOTUsXG4gICAgICBNQVhfQVJSQVlfSU5ERVggPSBNQVhfQVJSQVlfTEVOR1RIIC0gMSxcbiAgICAgIEhBTEZfTUFYX0FSUkFZX0xFTkdUSCA9IE1BWF9BUlJBWV9MRU5HVEggPj4+IDE7XG5cbiAgLyoqIFVzZWQgdG8gYXNzb2NpYXRlIHdyYXAgbWV0aG9kcyB3aXRoIHRoZWlyIGJpdCBmbGFncy4gKi9cbiAgdmFyIHdyYXBGbGFncyA9IFtcbiAgICBbJ2FyeScsIFdSQVBfQVJZX0ZMQUddLFxuICAgIFsnYmluZCcsIFdSQVBfQklORF9GTEFHXSxcbiAgICBbJ2JpbmRLZXknLCBXUkFQX0JJTkRfS0VZX0ZMQUddLFxuICAgIFsnY3VycnknLCBXUkFQX0NVUlJZX0ZMQUddLFxuICAgIFsnY3VycnlSaWdodCcsIFdSQVBfQ1VSUllfUklHSFRfRkxBR10sXG4gICAgWydmbGlwJywgV1JBUF9GTElQX0ZMQUddLFxuICAgIFsncGFydGlhbCcsIFdSQVBfUEFSVElBTF9GTEFHXSxcbiAgICBbJ3BhcnRpYWxSaWdodCcsIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHXSxcbiAgICBbJ3JlYXJnJywgV1JBUF9SRUFSR19GTEFHXVxuICBdO1xuXG4gIC8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbiAgdmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICAgIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgICBkb21FeGNUYWcgPSAnW29iamVjdCBET01FeGNlcHRpb25dJyxcbiAgICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgICBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nLFxuICAgICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXScsXG4gICAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJyxcbiAgICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXScsXG4gICAgICB3ZWFrU2V0VGFnID0gJ1tvYmplY3QgV2Vha1NldF0nO1xuXG4gIHZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggZW1wdHkgc3RyaW5nIGxpdGVyYWxzIGluIGNvbXBpbGVkIHRlbXBsYXRlIHNvdXJjZS4gKi9cbiAgdmFyIHJlRW1wdHlTdHJpbmdMZWFkaW5nID0gL1xcYl9fcCBcXCs9ICcnOy9nLFxuICAgICAgcmVFbXB0eVN0cmluZ01pZGRsZSA9IC9cXGIoX19wIFxcKz0pICcnIFxcKy9nLFxuICAgICAgcmVFbXB0eVN0cmluZ1RyYWlsaW5nID0gLyhfX2VcXCguKj9cXCl8XFxiX190XFwpKSBcXCtcXG4nJzsvZztcblxuICAvKiogVXNlZCB0byBtYXRjaCBIVE1MIGVudGl0aWVzIGFuZCBIVE1MIGNoYXJhY3RlcnMuICovXG4gIHZhciByZUVzY2FwZWRIdG1sID0gLyYoPzphbXB8bHR8Z3R8cXVvdHwjMzkpOy9nLFxuICAgICAgcmVVbmVzY2FwZWRIdG1sID0gL1smPD5cIiddL2csXG4gICAgICByZUhhc0VzY2FwZWRIdG1sID0gUmVnRXhwKHJlRXNjYXBlZEh0bWwuc291cmNlKSxcbiAgICAgIHJlSGFzVW5lc2NhcGVkSHRtbCA9IFJlZ0V4cChyZVVuZXNjYXBlZEh0bWwuc291cmNlKTtcblxuICAvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xuICB2YXIgcmVFc2NhcGUgPSAvPCUtKFtcXHNcXFNdKz8pJT4vZyxcbiAgICAgIHJlRXZhbHVhdGUgPSAvPCUoW1xcc1xcU10rPyklPi9nLFxuICAgICAgcmVJbnRlcnBvbGF0ZSA9IC88JT0oW1xcc1xcU10rPyklPi9nO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbiAgdmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC8sXG4gICAgICByZVByb3BOYW1lID0gL1teLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCQpKS9nO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gICAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICAgKi9cbiAgdmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZyxcbiAgICAgIHJlSGFzUmVnRXhwQ2hhciA9IFJlZ0V4cChyZVJlZ0V4cENoYXIuc291cmNlKTtcblxuICAvKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIHdoaXRlc3BhY2UuICovXG4gIHZhciByZVRyaW1TdGFydCA9IC9eXFxzKy87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggYSBzaW5nbGUgd2hpdGVzcGFjZSBjaGFyYWN0ZXIuICovXG4gIHZhciByZVdoaXRlc3BhY2UgPSAvXFxzLztcblxuICAvKiogVXNlZCB0byBtYXRjaCB3cmFwIGRldGFpbCBjb21tZW50cy4gKi9cbiAgdmFyIHJlV3JhcENvbW1lbnQgPSAvXFx7KD86XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAuK1xcXSBcXCpcXC8pP1xcbj8vLFxuICAgICAgcmVXcmFwRGV0YWlscyA9IC9cXHtcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoICguKylcXF0gXFwqLyxcbiAgICAgIHJlU3BsaXREZXRhaWxzID0gLyw/ICYgLztcblxuICAvKiogVXNlZCB0byBtYXRjaCB3b3JkcyBjb21wb3NlZCBvZiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy4gKi9cbiAgdmFyIHJlQXNjaWlXb3JkID0gL1teXFx4MDAtXFx4MmZcXHgzYS1cXHg0MFxceDViLVxceDYwXFx4N2ItXFx4N2ZdKy9nO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHZhbGlkYXRlIHRoZSBgdmFsaWRhdGVgIG9wdGlvbiBpbiBgXy50ZW1wbGF0ZWAgdmFyaWFibGUuXG4gICAqXG4gICAqIEZvcmJpZHMgY2hhcmFjdGVycyB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50IGRlZmluaXRpb246XG4gICAqIC0gXCIoKSxcIiAobW9kaWZpY2F0aW9uIG9mIGZ1bmN0aW9uIHBhcmFtZXRlcnMpXG4gICAqIC0gXCI9XCIgKGRlZmF1bHQgdmFsdWUpXG4gICAqIC0gXCJbXXt9XCIgKGRlc3RydWN0dXJpbmcgb2YgZnVuY3Rpb24gcGFyYW1ldGVycylcbiAgICogLSBcIi9cIiAoYmVnaW5uaW5nIG9mIGEgY29tbWVudClcbiAgICogLSB3aGl0ZXNwYWNlXG4gICAqL1xuICB2YXIgcmVGb3JiaWRkZW5JZGVudGlmaWVyQ2hhcnMgPSAvWygpPSx7fVxcW1xcXVxcL1xcc10vO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xuICB2YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gbWF0Y2hcbiAgICogW0VTIHRlbXBsYXRlIGRlbGltaXRlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRlbXBsYXRlLWxpdGVyYWwtbGV4aWNhbC1jb21wb25lbnRzKS5cbiAgICovXG4gIHZhciByZUVzVGVtcGxhdGUgPSAvXFwkXFx7KFteXFxcXH1dKig/OlxcXFwuW15cXFxcfV0qKSopXFx9L2c7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGAgZmxhZ3MgZnJvbSB0aGVpciBjb2VyY2VkIHN0cmluZyB2YWx1ZXMuICovXG4gIHZhciByZUZsYWdzID0gL1xcdyokLztcblxuICAvKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xuICB2YXIgcmVJc0JhZEhleCA9IC9eWy0rXTB4WzAtOWEtZl0rJC9pO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBiaW5hcnkgc3RyaW5nIHZhbHVlcy4gKi9cbiAgdmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xuICB2YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuICAvKiogVXNlZCB0byBkZXRlY3Qgb2N0YWwgc3RyaW5nIHZhbHVlcy4gKi9cbiAgdmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xuICB2YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIExhdGluIFVuaWNvZGUgbGV0dGVycyAoZXhjbHVkaW5nIG1hdGhlbWF0aWNhbCBvcGVyYXRvcnMpLiAqL1xuICB2YXIgcmVMYXRpbiA9IC9bXFx4YzAtXFx4ZDZcXHhkOC1cXHhmNlxceGY4LVxceGZmXFx1MDEwMC1cXHUwMTdmXS9nO1xuXG4gIC8qKiBVc2VkIHRvIGVuc3VyZSBjYXB0dXJpbmcgb3JkZXIgb2YgdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbiAgdmFyIHJlTm9NYXRjaCA9IC8oJF4pLztcblxuICAvKiogVXNlZCB0byBtYXRjaCB1bmVzY2FwZWQgY2hhcmFjdGVycyBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG4gIHZhciByZVVuZXNjYXBlZFN0cmluZyA9IC9bJ1xcblxcclxcdTIwMjhcXHUyMDI5XFxcXF0vZztcblxuICAvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG4gIHZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgICAgcnNDb21ib01hcmtzUmFuZ2UgPSAnXFxcXHUwMzAwLVxcXFx1MDM2ZicsXG4gICAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgICAgcnNDb21ib1JhbmdlID0gcnNDb21ib01hcmtzUmFuZ2UgKyByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlLFxuICAgICAgcnNEaW5nYmF0UmFuZ2UgPSAnXFxcXHUyNzAwLVxcXFx1MjdiZicsXG4gICAgICByc0xvd2VyUmFuZ2UgPSAnYS16XFxcXHhkZi1cXFxceGY2XFxcXHhmOC1cXFxceGZmJyxcbiAgICAgIHJzTWF0aE9wUmFuZ2UgPSAnXFxcXHhhY1xcXFx4YjFcXFxceGQ3XFxcXHhmNycsXG4gICAgICByc05vbkNoYXJSYW5nZSA9ICdcXFxceDAwLVxcXFx4MmZcXFxceDNhLVxcXFx4NDBcXFxceDViLVxcXFx4NjBcXFxceDdiLVxcXFx4YmYnLFxuICAgICAgcnNQdW5jdHVhdGlvblJhbmdlID0gJ1xcXFx1MjAwMC1cXFxcdTIwNmYnLFxuICAgICAgcnNTcGFjZVJhbmdlID0gJyBcXFxcdFxcXFx4MGJcXFxcZlxcXFx4YTBcXFxcdWZlZmZcXFxcblxcXFxyXFxcXHUyMDI4XFxcXHUyMDI5XFxcXHUxNjgwXFxcXHUxODBlXFxcXHUyMDAwXFxcXHUyMDAxXFxcXHUyMDAyXFxcXHUyMDAzXFxcXHUyMDA0XFxcXHUyMDA1XFxcXHUyMDA2XFxcXHUyMDA3XFxcXHUyMDA4XFxcXHUyMDA5XFxcXHUyMDBhXFxcXHUyMDJmXFxcXHUyMDVmXFxcXHUzMDAwJyxcbiAgICAgIHJzVXBwZXJSYW5nZSA9ICdBLVpcXFxceGMwLVxcXFx4ZDZcXFxceGQ4LVxcXFx4ZGUnLFxuICAgICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnLFxuICAgICAgcnNCcmVha1JhbmdlID0gcnNNYXRoT3BSYW5nZSArIHJzTm9uQ2hhclJhbmdlICsgcnNQdW5jdHVhdGlvblJhbmdlICsgcnNTcGFjZVJhbmdlO1xuXG4gIC8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbiAgdmFyIHJzQXBvcyA9IFwiWydcXHUyMDE5XVwiLFxuICAgICAgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgICAgcnNCcmVhayA9ICdbJyArIHJzQnJlYWtSYW5nZSArICddJyxcbiAgICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgICByc0RpZ2l0cyA9ICdcXFxcZCsnLFxuICAgICAgcnNEaW5nYmF0ID0gJ1snICsgcnNEaW5nYmF0UmFuZ2UgKyAnXScsXG4gICAgICByc0xvd2VyID0gJ1snICsgcnNMb3dlclJhbmdlICsgJ10nLFxuICAgICAgcnNNaXNjID0gJ1teJyArIHJzQXN0cmFsUmFuZ2UgKyByc0JyZWFrUmFuZ2UgKyByc0RpZ2l0cyArIHJzRGluZ2JhdFJhbmdlICsgcnNMb3dlclJhbmdlICsgcnNVcHBlclJhbmdlICsgJ10nLFxuICAgICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgICByc01vZGlmaWVyID0gJyg/OicgKyByc0NvbWJvICsgJ3wnICsgcnNGaXR6ICsgJyknLFxuICAgICAgcnNOb25Bc3RyYWwgPSAnW14nICsgcnNBc3RyYWxSYW5nZSArICddJyxcbiAgICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgICByc1N1cnJQYWlyID0gJ1tcXFxcdWQ4MDAtXFxcXHVkYmZmXVtcXFxcdWRjMDAtXFxcXHVkZmZmXScsXG4gICAgICByc1VwcGVyID0gJ1snICsgcnNVcHBlclJhbmdlICsgJ10nLFxuICAgICAgcnNaV0ogPSAnXFxcXHUyMDBkJztcblxuICAvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgcmVnZXhlcy4gKi9cbiAgdmFyIHJzTWlzY0xvd2VyID0gJyg/OicgKyByc0xvd2VyICsgJ3wnICsgcnNNaXNjICsgJyknLFxuICAgICAgcnNNaXNjVXBwZXIgPSAnKD86JyArIHJzVXBwZXIgKyAnfCcgKyByc01pc2MgKyAnKScsXG4gICAgICByc09wdENvbnRyTG93ZXIgPSAnKD86JyArIHJzQXBvcyArICcoPzpkfGxsfG18cmV8c3x0fHZlKSk/JyxcbiAgICAgIHJzT3B0Q29udHJVcHBlciA9ICcoPzonICsgcnNBcG9zICsgJyg/OkR8TEx8TXxSRXxTfFR8VkUpKT8nLFxuICAgICAgcmVPcHRNb2QgPSByc01vZGlmaWVyICsgJz8nLFxuICAgICAgcnNPcHRWYXIgPSAnWycgKyByc1ZhclJhbmdlICsgJ10/JyxcbiAgICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgICByc09yZExvd2VyID0gJ1xcXFxkKig/OjFzdHwybmR8M3JkfCg/IVsxMjNdKVxcXFxkdGgpKD89XFxcXGJ8W0EtWl9dKScsXG4gICAgICByc09yZFVwcGVyID0gJ1xcXFxkKig/OjFTVHwyTkR8M1JEfCg/IVsxMjNdKVxcXFxkVEgpKD89XFxcXGJ8W2Etel9dKScsXG4gICAgICByc1NlcSA9IHJzT3B0VmFyICsgcmVPcHRNb2QgKyByc09wdEpvaW4sXG4gICAgICByc0Vtb2ppID0gJyg/OicgKyBbcnNEaW5nYmF0LCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyXS5qb2luKCd8JykgKyAnKScgKyByc1NlcSxcbiAgICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGFwb3N0cm9waGVzLiAqL1xuICB2YXIgcmVBcG9zID0gUmVnRXhwKHJzQXBvcywgJ2cnKTtcblxuICAvKipcbiAgICogVXNlZCB0byBtYXRjaCBbY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3MpIGFuZFxuICAgKiBbY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzIGZvciBzeW1ib2xzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3NfZm9yX1N5bWJvbHMpLlxuICAgKi9cbiAgdmFyIHJlQ29tYm9NYXJrID0gUmVnRXhwKHJzQ29tYm8sICdnJyk7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggW3N0cmluZyBzeW1ib2xzXShodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC11bmljb2RlKS4gKi9cbiAgdmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGNvbXBsZXggb3IgY29tcG91bmQgd29yZHMuICovXG4gIHZhciByZVVuaWNvZGVXb3JkID0gUmVnRXhwKFtcbiAgICByc1VwcGVyICsgJz8nICsgcnNMb3dlciArICcrJyArIHJzT3B0Q29udHJMb3dlciArICcoPz0nICsgW3JzQnJlYWssIHJzVXBwZXIsICckJ10uam9pbignfCcpICsgJyknLFxuICAgIHJzTWlzY1VwcGVyICsgJysnICsgcnNPcHRDb250clVwcGVyICsgJyg/PScgKyBbcnNCcmVhaywgcnNVcHBlciArIHJzTWlzY0xvd2VyLCAnJCddLmpvaW4oJ3wnKSArICcpJyxcbiAgICByc1VwcGVyICsgJz8nICsgcnNNaXNjTG93ZXIgKyAnKycgKyByc09wdENvbnRyTG93ZXIsXG4gICAgcnNVcHBlciArICcrJyArIHJzT3B0Q29udHJVcHBlcixcbiAgICByc09yZFVwcGVyLFxuICAgIHJzT3JkTG93ZXIsXG4gICAgcnNEaWdpdHMsXG4gICAgcnNFbW9qaVxuICBdLmpvaW4oJ3wnKSwgJ2cnKTtcblxuICAvKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB3aXRoIFt6ZXJvLXdpZHRoIGpvaW5lcnMgb3IgY29kZSBwb2ludHMgZnJvbSB0aGUgYXN0cmFsIHBsYW5lc10oaHR0cDovL2Vldi5lZS9ibG9nLzIwMTUvMDkvMTIvZGFyay1jb3JuZXJzLW9mLXVuaWNvZGUvKS4gKi9cbiAgdmFyIHJlSGFzVW5pY29kZSA9IFJlZ0V4cCgnWycgKyByc1pXSiArIHJzQXN0cmFsUmFuZ2UgICsgcnNDb21ib1JhbmdlICsgcnNWYXJSYW5nZSArICddJyk7XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IHN0cmluZ3MgdGhhdCBuZWVkIGEgbW9yZSByb2J1c3QgcmVnZXhwIHRvIG1hdGNoIHdvcmRzLiAqL1xuICB2YXIgcmVIYXNVbmljb2RlV29yZCA9IC9bYS16XVtBLVpdfFtBLVpdezJ9W2Etel18WzAtOV1bYS16QS1aXXxbYS16QS1aXVswLTldfFteYS16QS1aMC05IF0vO1xuXG4gIC8qKiBVc2VkIHRvIGFzc2lnbiBkZWZhdWx0IGBjb250ZXh0YCBvYmplY3QgcHJvcGVydGllcy4gKi9cbiAgdmFyIGNvbnRleHRQcm9wcyA9IFtcbiAgICAnQXJyYXknLCAnQnVmZmVyJywgJ0RhdGFWaWV3JywgJ0RhdGUnLCAnRXJyb3InLCAnRmxvYXQzMkFycmF5JywgJ0Zsb2F0NjRBcnJheScsXG4gICAgJ0Z1bmN0aW9uJywgJ0ludDhBcnJheScsICdJbnQxNkFycmF5JywgJ0ludDMyQXJyYXknLCAnTWFwJywgJ01hdGgnLCAnT2JqZWN0JyxcbiAgICAnUHJvbWlzZScsICdSZWdFeHAnLCAnU2V0JywgJ1N0cmluZycsICdTeW1ib2wnLCAnVHlwZUVycm9yJywgJ1VpbnQ4QXJyYXknLFxuICAgICdVaW50OENsYW1wZWRBcnJheScsICdVaW50MTZBcnJheScsICdVaW50MzJBcnJheScsICdXZWFrTWFwJyxcbiAgICAnXycsICdjbGVhclRpbWVvdXQnLCAnaXNGaW5pdGUnLCAncGFyc2VJbnQnLCAnc2V0VGltZW91dCdcbiAgXTtcblxuICAvKiogVXNlZCB0byBtYWtlIHRlbXBsYXRlIHNvdXJjZVVSTHMgZWFzaWVyIHRvIGlkZW50aWZ5LiAqL1xuICB2YXIgdGVtcGxhdGVDb3VudGVyID0gLTE7XG5cbiAgLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xuICB2YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbiAgdHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbiAgdHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxuICB0eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbiAgdHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxuICB0eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4gIC8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIHN1cHBvcnRlZCBieSBgXy5jbG9uZWAuICovXG4gIHZhciBjbG9uZWFibGVUYWdzID0ge307XG4gIGNsb25lYWJsZVRhZ3NbYXJnc1RhZ10gPSBjbG9uZWFibGVUYWdzW2FycmF5VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRhVmlld1RhZ10gPVxuICBjbG9uZWFibGVUYWdzW2Jvb2xUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRlVGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbZmxvYXQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW2Zsb2F0NjRUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tpbnQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW21hcFRhZ10gPVxuICBjbG9uZWFibGVUYWdzW251bWJlclRhZ10gPSBjbG9uZWFibGVUYWdzW29iamVjdFRhZ10gPVxuICBjbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3NldFRhZ10gPVxuICBjbG9uZWFibGVUYWdzW3N0cmluZ1RhZ10gPSBjbG9uZWFibGVUYWdzW3N5bWJvbFRhZ10gPVxuICBjbG9uZWFibGVUYWdzW3VpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbdWludDE2VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG4gIGNsb25lYWJsZVRhZ3NbZXJyb3JUYWddID0gY2xvbmVhYmxlVGFnc1tmdW5jVGFnXSA9XG4gIGNsb25lYWJsZVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuICAvKiogVXNlZCB0byBtYXAgTGF0aW4gVW5pY29kZSBsZXR0ZXJzIHRvIGJhc2ljIExhdGluIGxldHRlcnMuICovXG4gIHZhciBkZWJ1cnJlZExldHRlcnMgPSB7XG4gICAgLy8gTGF0aW4tMSBTdXBwbGVtZW50IGJsb2NrLlxuICAgICdcXHhjMCc6ICdBJywgICdcXHhjMSc6ICdBJywgJ1xceGMyJzogJ0EnLCAnXFx4YzMnOiAnQScsICdcXHhjNCc6ICdBJywgJ1xceGM1JzogJ0EnLFxuICAgICdcXHhlMCc6ICdhJywgICdcXHhlMSc6ICdhJywgJ1xceGUyJzogJ2EnLCAnXFx4ZTMnOiAnYScsICdcXHhlNCc6ICdhJywgJ1xceGU1JzogJ2EnLFxuICAgICdcXHhjNyc6ICdDJywgICdcXHhlNyc6ICdjJyxcbiAgICAnXFx4ZDAnOiAnRCcsICAnXFx4ZjAnOiAnZCcsXG4gICAgJ1xceGM4JzogJ0UnLCAgJ1xceGM5JzogJ0UnLCAnXFx4Y2EnOiAnRScsICdcXHhjYic6ICdFJyxcbiAgICAnXFx4ZTgnOiAnZScsICAnXFx4ZTknOiAnZScsICdcXHhlYSc6ICdlJywgJ1xceGViJzogJ2UnLFxuICAgICdcXHhjYyc6ICdJJywgICdcXHhjZCc6ICdJJywgJ1xceGNlJzogJ0knLCAnXFx4Y2YnOiAnSScsXG4gICAgJ1xceGVjJzogJ2knLCAgJ1xceGVkJzogJ2knLCAnXFx4ZWUnOiAnaScsICdcXHhlZic6ICdpJyxcbiAgICAnXFx4ZDEnOiAnTicsICAnXFx4ZjEnOiAnbicsXG4gICAgJ1xceGQyJzogJ08nLCAgJ1xceGQzJzogJ08nLCAnXFx4ZDQnOiAnTycsICdcXHhkNSc6ICdPJywgJ1xceGQ2JzogJ08nLCAnXFx4ZDgnOiAnTycsXG4gICAgJ1xceGYyJzogJ28nLCAgJ1xceGYzJzogJ28nLCAnXFx4ZjQnOiAnbycsICdcXHhmNSc6ICdvJywgJ1xceGY2JzogJ28nLCAnXFx4ZjgnOiAnbycsXG4gICAgJ1xceGQ5JzogJ1UnLCAgJ1xceGRhJzogJ1UnLCAnXFx4ZGInOiAnVScsICdcXHhkYyc6ICdVJyxcbiAgICAnXFx4ZjknOiAndScsICAnXFx4ZmEnOiAndScsICdcXHhmYic6ICd1JywgJ1xceGZjJzogJ3UnLFxuICAgICdcXHhkZCc6ICdZJywgICdcXHhmZCc6ICd5JywgJ1xceGZmJzogJ3knLFxuICAgICdcXHhjNic6ICdBZScsICdcXHhlNic6ICdhZScsXG4gICAgJ1xceGRlJzogJ1RoJywgJ1xceGZlJzogJ3RoJyxcbiAgICAnXFx4ZGYnOiAnc3MnLFxuICAgIC8vIExhdGluIEV4dGVuZGVkLUEgYmxvY2suXG4gICAgJ1xcdTAxMDAnOiAnQScsICAnXFx1MDEwMic6ICdBJywgJ1xcdTAxMDQnOiAnQScsXG4gICAgJ1xcdTAxMDEnOiAnYScsICAnXFx1MDEwMyc6ICdhJywgJ1xcdTAxMDUnOiAnYScsXG4gICAgJ1xcdTAxMDYnOiAnQycsICAnXFx1MDEwOCc6ICdDJywgJ1xcdTAxMGEnOiAnQycsICdcXHUwMTBjJzogJ0MnLFxuICAgICdcXHUwMTA3JzogJ2MnLCAgJ1xcdTAxMDknOiAnYycsICdcXHUwMTBiJzogJ2MnLCAnXFx1MDEwZCc6ICdjJyxcbiAgICAnXFx1MDEwZSc6ICdEJywgICdcXHUwMTEwJzogJ0QnLCAnXFx1MDEwZic6ICdkJywgJ1xcdTAxMTEnOiAnZCcsXG4gICAgJ1xcdTAxMTInOiAnRScsICAnXFx1MDExNCc6ICdFJywgJ1xcdTAxMTYnOiAnRScsICdcXHUwMTE4JzogJ0UnLCAnXFx1MDExYSc6ICdFJyxcbiAgICAnXFx1MDExMyc6ICdlJywgICdcXHUwMTE1JzogJ2UnLCAnXFx1MDExNyc6ICdlJywgJ1xcdTAxMTknOiAnZScsICdcXHUwMTFiJzogJ2UnLFxuICAgICdcXHUwMTFjJzogJ0cnLCAgJ1xcdTAxMWUnOiAnRycsICdcXHUwMTIwJzogJ0cnLCAnXFx1MDEyMic6ICdHJyxcbiAgICAnXFx1MDExZCc6ICdnJywgICdcXHUwMTFmJzogJ2cnLCAnXFx1MDEyMSc6ICdnJywgJ1xcdTAxMjMnOiAnZycsXG4gICAgJ1xcdTAxMjQnOiAnSCcsICAnXFx1MDEyNic6ICdIJywgJ1xcdTAxMjUnOiAnaCcsICdcXHUwMTI3JzogJ2gnLFxuICAgICdcXHUwMTI4JzogJ0knLCAgJ1xcdTAxMmEnOiAnSScsICdcXHUwMTJjJzogJ0knLCAnXFx1MDEyZSc6ICdJJywgJ1xcdTAxMzAnOiAnSScsXG4gICAgJ1xcdTAxMjknOiAnaScsICAnXFx1MDEyYic6ICdpJywgJ1xcdTAxMmQnOiAnaScsICdcXHUwMTJmJzogJ2knLCAnXFx1MDEzMSc6ICdpJyxcbiAgICAnXFx1MDEzNCc6ICdKJywgICdcXHUwMTM1JzogJ2onLFxuICAgICdcXHUwMTM2JzogJ0snLCAgJ1xcdTAxMzcnOiAnaycsICdcXHUwMTM4JzogJ2snLFxuICAgICdcXHUwMTM5JzogJ0wnLCAgJ1xcdTAxM2InOiAnTCcsICdcXHUwMTNkJzogJ0wnLCAnXFx1MDEzZic6ICdMJywgJ1xcdTAxNDEnOiAnTCcsXG4gICAgJ1xcdTAxM2EnOiAnbCcsICAnXFx1MDEzYyc6ICdsJywgJ1xcdTAxM2UnOiAnbCcsICdcXHUwMTQwJzogJ2wnLCAnXFx1MDE0Mic6ICdsJyxcbiAgICAnXFx1MDE0Myc6ICdOJywgICdcXHUwMTQ1JzogJ04nLCAnXFx1MDE0Nyc6ICdOJywgJ1xcdTAxNGEnOiAnTicsXG4gICAgJ1xcdTAxNDQnOiAnbicsICAnXFx1MDE0Nic6ICduJywgJ1xcdTAxNDgnOiAnbicsICdcXHUwMTRiJzogJ24nLFxuICAgICdcXHUwMTRjJzogJ08nLCAgJ1xcdTAxNGUnOiAnTycsICdcXHUwMTUwJzogJ08nLFxuICAgICdcXHUwMTRkJzogJ28nLCAgJ1xcdTAxNGYnOiAnbycsICdcXHUwMTUxJzogJ28nLFxuICAgICdcXHUwMTU0JzogJ1InLCAgJ1xcdTAxNTYnOiAnUicsICdcXHUwMTU4JzogJ1InLFxuICAgICdcXHUwMTU1JzogJ3InLCAgJ1xcdTAxNTcnOiAncicsICdcXHUwMTU5JzogJ3InLFxuICAgICdcXHUwMTVhJzogJ1MnLCAgJ1xcdTAxNWMnOiAnUycsICdcXHUwMTVlJzogJ1MnLCAnXFx1MDE2MCc6ICdTJyxcbiAgICAnXFx1MDE1Yic6ICdzJywgICdcXHUwMTVkJzogJ3MnLCAnXFx1MDE1Zic6ICdzJywgJ1xcdTAxNjEnOiAncycsXG4gICAgJ1xcdTAxNjInOiAnVCcsICAnXFx1MDE2NCc6ICdUJywgJ1xcdTAxNjYnOiAnVCcsXG4gICAgJ1xcdTAxNjMnOiAndCcsICAnXFx1MDE2NSc6ICd0JywgJ1xcdTAxNjcnOiAndCcsXG4gICAgJ1xcdTAxNjgnOiAnVScsICAnXFx1MDE2YSc6ICdVJywgJ1xcdTAxNmMnOiAnVScsICdcXHUwMTZlJzogJ1UnLCAnXFx1MDE3MCc6ICdVJywgJ1xcdTAxNzInOiAnVScsXG4gICAgJ1xcdTAxNjknOiAndScsICAnXFx1MDE2Yic6ICd1JywgJ1xcdTAxNmQnOiAndScsICdcXHUwMTZmJzogJ3UnLCAnXFx1MDE3MSc6ICd1JywgJ1xcdTAxNzMnOiAndScsXG4gICAgJ1xcdTAxNzQnOiAnVycsICAnXFx1MDE3NSc6ICd3JyxcbiAgICAnXFx1MDE3Nic6ICdZJywgICdcXHUwMTc3JzogJ3knLCAnXFx1MDE3OCc6ICdZJyxcbiAgICAnXFx1MDE3OSc6ICdaJywgICdcXHUwMTdiJzogJ1onLCAnXFx1MDE3ZCc6ICdaJyxcbiAgICAnXFx1MDE3YSc6ICd6JywgICdcXHUwMTdjJzogJ3onLCAnXFx1MDE3ZSc6ICd6JyxcbiAgICAnXFx1MDEzMic6ICdJSicsICdcXHUwMTMzJzogJ2lqJyxcbiAgICAnXFx1MDE1Mic6ICdPZScsICdcXHUwMTUzJzogJ29lJyxcbiAgICAnXFx1MDE0OSc6IFwiJ25cIiwgJ1xcdTAxN2YnOiAncydcbiAgfTtcblxuICAvKiogVXNlZCB0byBtYXAgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLiAqL1xuICB2YXIgaHRtbEVzY2FwZXMgPSB7XG4gICAgJyYnOiAnJmFtcDsnLFxuICAgICc8JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxuICAgIFwiJ1wiOiAnJiMzOTsnXG4gIH07XG5cbiAgLyoqIFVzZWQgdG8gbWFwIEhUTUwgZW50aXRpZXMgdG8gY2hhcmFjdGVycy4gKi9cbiAgdmFyIGh0bWxVbmVzY2FwZXMgPSB7XG4gICAgJyZhbXA7JzogJyYnLFxuICAgICcmbHQ7JzogJzwnLFxuICAgICcmZ3Q7JzogJz4nLFxuICAgICcmcXVvdDsnOiAnXCInLFxuICAgICcmIzM5Oyc6IFwiJ1wiXG4gIH07XG5cbiAgLyoqIFVzZWQgdG8gZXNjYXBlIGNoYXJhY3RlcnMgZm9yIGluY2x1c2lvbiBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG4gIHZhciBzdHJpbmdFc2NhcGVzID0ge1xuICAgICdcXFxcJzogJ1xcXFwnLFxuICAgIFwiJ1wiOiBcIidcIixcbiAgICAnXFxuJzogJ24nLFxuICAgICdcXHInOiAncicsXG4gICAgJ1xcdTIwMjgnOiAndTIwMjgnLFxuICAgICdcXHUyMDI5JzogJ3UyMDI5J1xuICB9O1xuXG4gIC8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG4gIHZhciBmcmVlUGFyc2VGbG9hdCA9IHBhcnNlRmxvYXQsXG4gICAgICBmcmVlUGFyc2VJbnQgPSBwYXJzZUludDtcblxuICAvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xuICB2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbiAgLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbiAgdmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbiAgLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG4gIHZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG4gIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG4gIHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuICAvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG4gIHZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbiAgLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbiAgdmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbiAgLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG4gIHZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4gIC8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xuICB2YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICAgIGlmICh0eXBlcykge1xuICAgICAgICByZXR1cm4gdHlwZXM7XG4gICAgICB9XG5cbiAgICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfSgpKTtcblxuICAvKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xuICB2YXIgbm9kZUlzQXJyYXlCdWZmZXIgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc0FycmF5QnVmZmVyLFxuICAgICAgbm9kZUlzRGF0ZSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzRGF0ZSxcbiAgICAgIG5vZGVJc01hcCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzTWFwLFxuICAgICAgbm9kZUlzUmVnRXhwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNSZWdFeHAsXG4gICAgICBub2RlSXNTZXQgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1NldCxcbiAgICAgIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgLyoqXG4gICAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAgICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICAgKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gICAqL1xuICBmdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VBZ2dyZWdhdG9yYCBmb3IgYXJyYXlzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCBhZ2dyZWdhdGVkIG9iamVjdC5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRvcmAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheUFnZ3JlZ2F0b3IoYXJyYXksIHNldHRlciwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICAgIHNldHRlcihhY2N1bXVsYXRvciwgdmFsdWUsIGl0ZXJhdGVlKHZhbHVlKSwgYXJyYXkpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoUmlnaHRgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlFYWNoUmlnaHQoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbGVuZ3RoXSwgbGVuZ3RoLCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmV2ZXJ5YCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFsbCBlbGVtZW50cyBwYXNzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAqICBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheUV2ZXJ5KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKCFwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmNsdWRlc2AgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIHNwZWNpZnlpbmcgYW4gaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgIHJldHVybiAhIWxlbmd0aCAmJiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIDApID4gLTE7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhcnJheUluY2x1ZGVzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmF0b3IgVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheUluY2x1ZGVzV2l0aChhcnJheSwgdmFsdWUsIGNvbXBhcmF0b3IpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIGFycmF5W2luZGV4XSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAgICogc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ucmVkdWNlYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luaXRBY2N1bV0gU3BlY2lmeSB1c2luZyB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgIGFzXG4gICAqICB0aGUgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlSZWR1Y2UoYXJyYXksIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gICAgaWYgKGluaXRBY2N1bSAmJiBsZW5ndGgpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gYXJyYXlbKytpbmRleF07XG4gICAgfVxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhY2N1bXVsYXRvciA9IGl0ZXJhdGVlKGFjY3VtdWxhdG9yLCBhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ucmVkdWNlUmlnaHRgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbaW5pdEFjY3VtXSBTcGVjaWZ5IHVzaW5nIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YCBhc1xuICAgKiAgdGhlIGluaXRpYWwgdmFsdWUuXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5UmVkdWNlUmlnaHQoYXJyYXksIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgIGlmIChpbml0QWNjdW0gJiYgbGVuZ3RoKSB7XG4gICAgICBhY2N1bXVsYXRvciA9IGFycmF5Wy0tbGVuZ3RoXTtcbiAgICB9XG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICBhY2N1bXVsYXRvciA9IGl0ZXJhdGVlKGFjY3VtdWxhdG9yLCBhcnJheVtsZW5ndGhdLCBsZW5ndGgsIGFycmF5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zb21lYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAgICogc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzaXplIG9mIGFuIEFTQ0lJIGBzdHJpbmdgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgaW5zcGVjdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3RyaW5nIHNpemUuXG4gICAqL1xuICB2YXIgYXNjaWlTaXplID0gYmFzZVByb3BlcnR5KCdsZW5ndGgnKTtcblxuICAvKipcbiAgICogQ29udmVydHMgYW4gQVNDSUkgYHN0cmluZ2AgdG8gYW4gYXJyYXkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIGFzY2lpVG9BcnJheShzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnNwbGl0KCcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdHMgYW4gQVNDSUkgYHN0cmluZ2AgaW50byBhbiBhcnJheSBvZiBpdHMgd29yZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuXG4gICAqL1xuICBmdW5jdGlvbiBhc2NpaVdvcmRzKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcubWF0Y2gocmVBc2NpaVdvcmQpIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5maW5kS2V5YCBhbmQgYF8uZmluZExhc3RLZXlgLFxuICAgKiB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMsIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYGNvbGxlY3Rpb25gXG4gICAqIHVzaW5nIGBlYWNoRnVuY2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGBjb2xsZWN0aW9uYC5cbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZvdW5kIGVsZW1lbnQgb3IgaXRzIGtleSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VGaW5kS2V5KGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZWFjaEZ1bmMpIHtcbiAgICB2YXIgcmVzdWx0O1xuICAgIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGtleSwgY29sbGVjdGlvbikpIHtcbiAgICAgICAgcmVzdWx0ID0ga2V5O1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maW5kSW5kZXhgIGFuZCBgXy5maW5kTGFzdEluZGV4YCB3aXRob3V0XG4gICAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgsIGZyb21SaWdodCkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gZnJvbUluZGV4ICsgKGZyb21SaWdodCA/IDEgOiAtMSk7XG5cbiAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW5kZXhPZmAgd2l0aG91dCBgZnJvbUluZGV4YCBib3VuZHMgY2hlY2tzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWVcbiAgICAgID8gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleClcbiAgICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBmcm9tSW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYmFzZUluZGV4T2ZgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBjb21wYXJhdG9yLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmF0b3IgVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VJbmRleE9mV2l0aChhcnJheSwgdmFsdWUsIGZyb21JbmRleCwgY29tcGFyYXRvcikge1xuICAgIHZhciBpbmRleCA9IGZyb21JbmRleCAtIDEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoY29tcGFyYXRvcihhcnJheVtpbmRleF0sIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hTmAgd2l0aG91dCBzdXBwb3J0IGZvciBudW1iZXIgb2JqZWN0cy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlSXNOYU4odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1lYW5gIGFuZCBgXy5tZWFuQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbWVhbi5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VNZWFuKGFycmF5LCBpdGVyYXRlZSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICByZXR1cm4gbGVuZ3RoID8gKGJhc2VTdW0oYXJyYXksIGl0ZXJhdGVlKSAvIGxlbmd0aCkgOiBOQU47XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHJvcGVydHlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVByb3BlcnR5KGtleSkge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHJvcGVydHlPZmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVByb3BlcnR5T2Yob2JqZWN0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZWR1Y2VgIGFuZCBgXy5yZWR1Y2VSaWdodGAsIHdpdGhvdXQgc3VwcG9ydFxuICAgKiBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcywgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgY29sbGVjdGlvbmAgdXNpbmcgYGVhY2hGdW5jYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcGFyYW0geyp9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGluaXRBY2N1bSBTcGVjaWZ5IHVzaW5nIHRoZSBmaXJzdCBvciBsYXN0IGVsZW1lbnQgb2ZcbiAgICogIGBjb2xsZWN0aW9uYCBhcyB0aGUgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBgY29sbGVjdGlvbmAuXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VSZWR1Y2UoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0sIGVhY2hGdW5jKSB7XG4gICAgZWFjaEZ1bmMoY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICBhY2N1bXVsYXRvciA9IGluaXRBY2N1bVxuICAgICAgICA/IChpbml0QWNjdW0gPSBmYWxzZSwgdmFsdWUpXG4gICAgICAgIDogaXRlcmF0ZWUoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNvcnRCeWAgd2hpY2ggdXNlcyBgY29tcGFyZXJgIHRvIGRlZmluZSB0aGVcbiAgICogc29ydCBvcmRlciBvZiBgYXJyYXlgIGFuZCByZXBsYWNlcyBjcml0ZXJpYSBvYmplY3RzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZ1xuICAgKiB2YWx1ZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzb3J0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJlciBUaGUgZnVuY3Rpb24gdG8gZGVmaW5lIHNvcnQgb3JkZXIuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVNvcnRCeShhcnJheSwgY29tcGFyZXIpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgYXJyYXkuc29ydChjb21wYXJlcik7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICBhcnJheVtsZW5ndGhdID0gYXJyYXlbbGVuZ3RoXS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnN1bWAgYW5kIGBfLnN1bUJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN1bS5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VTdW0oYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgdmFyIHJlc3VsdCxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdKTtcbiAgICAgIGlmIChjdXJyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBjdXJyZW50IDogKHJlc3VsdCArIGN1cnJlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAgICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1BhaXJzYCBhbmQgYF8udG9QYWlyc0luYCB3aGljaCBjcmVhdGVzIGFuIGFycmF5XG4gICAqIG9mIGtleS12YWx1ZSBwYWlycyBmb3IgYG9iamVjdGAgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXMgb2YgYHByb3BzYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VUb1BhaXJzKG9iamVjdCwgcHJvcHMpIHtcbiAgICByZXR1cm4gYXJyYXlNYXAocHJvcHMsIGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIFtrZXksIG9iamVjdFtrZXldXTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50cmltYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRyaW1tZWQgc3RyaW5nLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVRyaW0oc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZ1xuICAgICAgPyBzdHJpbmcuc2xpY2UoMCwgdHJpbW1lZEVuZEluZGV4KHN0cmluZykgKyAxKS5yZXBsYWNlKHJlVHJpbVN0YXJ0LCAnJylcbiAgICAgIDogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udmFsdWVzYCBhbmQgYF8udmFsdWVzSW5gIHdoaWNoIGNyZWF0ZXMgYW5cbiAgICogYXJyYXkgb2YgYG9iamVjdGAgcHJvcGVydHkgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzXG4gICAqIG9mIGBwcm9wc2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGdldCB2YWx1ZXMgZm9yLlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlVmFsdWVzKG9iamVjdCwgcHJvcHMpIHtcbiAgICByZXR1cm4gYXJyYXlNYXAocHJvcHMsIGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy50cmltYCBhbmQgYF8udHJpbVN0YXJ0YCB0byBnZXQgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBzdHJpbmcgc3ltYm9sXG4gICAqIHRoYXQgaXMgbm90IGZvdW5kIGluIHRoZSBjaGFyYWN0ZXIgc3ltYm9scy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gc3RyU3ltYm9scyBUaGUgc3RyaW5nIHN5bWJvbHMgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHtBcnJheX0gY2hyU3ltYm9scyBUaGUgY2hhcmFjdGVyIHN5bWJvbHMgdG8gZmluZC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHVubWF0Y2hlZCBzdHJpbmcgc3ltYm9sLlxuICAgKi9cbiAgZnVuY3Rpb24gY2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsIGNoclN5bWJvbHMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gc3RyU3ltYm9scy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCAmJiBiYXNlSW5kZXhPZihjaHJTeW1ib2xzLCBzdHJTeW1ib2xzW2luZGV4XSwgMCkgPiAtMSkge31cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy50cmltYCBhbmQgYF8udHJpbUVuZGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBzdHJpbmcgc3ltYm9sXG4gICAqIHRoYXQgaXMgbm90IGZvdW5kIGluIHRoZSBjaGFyYWN0ZXIgc3ltYm9scy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gc3RyU3ltYm9scyBUaGUgc3RyaW5nIHN5bWJvbHMgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHtBcnJheX0gY2hyU3ltYm9scyBUaGUgY2hhcmFjdGVyIHN5bWJvbHMgdG8gZmluZC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3QgdW5tYXRjaGVkIHN0cmluZyBzeW1ib2wuXG4gICAqL1xuICBmdW5jdGlvbiBjaGFyc0VuZEluZGV4KHN0clN5bWJvbHMsIGNoclN5bWJvbHMpIHtcbiAgICB2YXIgaW5kZXggPSBzdHJTeW1ib2xzLmxlbmd0aDtcblxuICAgIHdoaWxlIChpbmRleC0tICYmIGJhc2VJbmRleE9mKGNoclN5bWJvbHMsIHN0clN5bWJvbHNbaW5kZXhdLCAwKSA+IC0xKSB7fVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBudW1iZXIgb2YgYHBsYWNlaG9sZGVyYCBvY2N1cnJlbmNlcyBpbiBgYXJyYXlgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdG8gc2VhcmNoIGZvci5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcGxhY2Vob2xkZXIgY291bnQuXG4gICAqL1xuICBmdW5jdGlvbiBjb3VudEhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgcmVzdWx0ID0gMDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgaWYgKGFycmF5W2xlbmd0aF0gPT09IHBsYWNlaG9sZGVyKSB7XG4gICAgICAgICsrcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8uZGVidXJyYCB0byBjb252ZXJ0IExhdGluLTEgU3VwcGxlbWVudCBhbmQgTGF0aW4gRXh0ZW5kZWQtQVxuICAgKiBsZXR0ZXJzIHRvIGJhc2ljIExhdGluIGxldHRlcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsZXR0ZXIgVGhlIG1hdGNoZWQgbGV0dGVyIHRvIGRlYnVyci5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZGVidXJyZWQgbGV0dGVyLlxuICAgKi9cbiAgdmFyIGRlYnVyckxldHRlciA9IGJhc2VQcm9wZXJ0eU9mKGRlYnVycmVkTGV0dGVycyk7XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8uZXNjYXBlYCB0byBjb252ZXJ0IGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gZXNjYXBlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICovXG4gIHZhciBlc2NhcGVIdG1sQ2hhciA9IGJhc2VQcm9wZXJ0eU9mKGh0bWxFc2NhcGVzKTtcblxuICAvKipcbiAgICogVXNlZCBieSBgXy50ZW1wbGF0ZWAgdG8gZXNjYXBlIGNoYXJhY3RlcnMgZm9yIGluY2x1c2lvbiBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFjdGVyIHRvIGVzY2FwZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG4gICAqL1xuICBmdW5jdGlvbiBlc2NhcGVTdHJpbmdDaGFyKGNocikge1xuICAgIHJldHVybiAnXFxcXCcgKyBzdHJpbmdFc2NhcGVzW2Nocl07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYHN0cmluZ2AgY29udGFpbnMgVW5pY29kZSBzeW1ib2xzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGEgc3ltYm9sIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBoYXNVbmljb2RlKHN0cmluZykge1xuICAgIHJldHVybiByZUhhc1VuaWNvZGUudGVzdChzdHJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBhIHdvcmQgY29tcG9zZWQgb2YgVW5pY29kZSBzeW1ib2xzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGEgd29yZCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gaGFzVW5pY29kZVdvcmQoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHJlSGFzVW5pY29kZVdvcmQudGVzdChzdHJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGBpdGVyYXRvcmAgdG8gYW4gYXJyYXkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpdGVyYXRvciBUaGUgaXRlcmF0b3IgdG8gY29udmVydC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gICAqL1xuICBmdW5jdGlvbiBpdGVyYXRvclRvQXJyYXkoaXRlcmF0b3IpIHtcbiAgICB2YXIgZGF0YSxcbiAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICB3aGlsZSAoIShkYXRhID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICByZXN1bHQucHVzaChkYXRhLnZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gICAqL1xuICBmdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XG5cbiAgICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhbGwgYHBsYWNlaG9sZGVyYCBlbGVtZW50cyBpbiBgYXJyYXlgIHdpdGggYW4gaW50ZXJuYWwgcGxhY2Vob2xkZXJcbiAgICogYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlaXIgaW5kZXhlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdG8gcmVwbGFjZS5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcGxhY2VIb2xkZXJzKGFycmF5LCBwbGFjZWhvbGRlcikge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgaWYgKHZhbHVlID09PSBwbGFjZWhvbGRlciB8fCB2YWx1ZSA9PT0gUExBQ0VIT0xERVIpIHtcbiAgICAgICAgYXJyYXlbaW5kZXhdID0gUExBQ0VIT0xERVI7XG4gICAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGBzZXRgIHRvIGFuIGFycmF5IG9mIGl0cyB2YWx1ZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAgICovXG4gIGZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0KSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICAgIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGBzZXRgIHRvIGl0cyB2YWx1ZS12YWx1ZSBwYWlycy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWUtdmFsdWUgcGFpcnMuXG4gICAqL1xuICBmdW5jdGlvbiBzZXRUb1BhaXJzKHNldCkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmVzdWx0WysraW5kZXhdID0gW3ZhbHVlLCB2YWx1ZV07XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gICAqIGNvbXBhcmlzb25zIG9mIHZhbHVlcywgaS5lLiBgPT09YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICAgIHZhciBpbmRleCA9IGZyb21JbmRleCAtIDEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubGFzdEluZGV4T2ZgIHdoaWNoIHBlcmZvcm1zIHN0cmljdCBlcXVhbGl0eVxuICAgKiBjb21wYXJpc29ucyBvZiB2YWx1ZXMsIGkuZS4gYD09PWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICovXG4gIGZ1bmN0aW9uIHN0cmljdExhc3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gICAgdmFyIGluZGV4ID0gZnJvbUluZGV4ICsgMTtcbiAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgaWYgKGFycmF5W2luZGV4XSA9PT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbnVtYmVyIG9mIHN5bWJvbHMgaW4gYHN0cmluZ2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdHJpbmcgc2l6ZS5cbiAgICovXG4gIGZ1bmN0aW9uIHN0cmluZ1NpemUoc3RyaW5nKSB7XG4gICAgcmV0dXJuIGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgICAgPyB1bmljb2RlU2l6ZShzdHJpbmcpXG4gICAgICA6IGFzY2lpU2l6ZShzdHJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gICAqL1xuICBmdW5jdGlvbiBzdHJpbmdUb0FycmF5KHN0cmluZykge1xuICAgIHJldHVybiBoYXNVbmljb2RlKHN0cmluZylcbiAgICAgID8gdW5pY29kZVRvQXJyYXkoc3RyaW5nKVxuICAgICAgOiBhc2NpaVRvQXJyYXkoc3RyaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltRW5kYCB0byBnZXQgdGhlIGluZGV4IG9mIHRoZSBsYXN0IG5vbi13aGl0ZXNwYWNlXG4gICAqIGNoYXJhY3RlciBvZiBgc3RyaW5nYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3Rlci5cbiAgICovXG4gIGZ1bmN0aW9uIHRyaW1tZWRFbmRJbmRleChzdHJpbmcpIHtcbiAgICB2YXIgaW5kZXggPSBzdHJpbmcubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGluZGV4LS0gJiYgcmVXaGl0ZXNwYWNlLnRlc3Qoc3RyaW5nLmNoYXJBdChpbmRleCkpKSB7fVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnVuZXNjYXBlYCB0byBjb252ZXJ0IEhUTUwgZW50aXRpZXMgdG8gY2hhcmFjdGVycy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gdW5lc2NhcGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVuZXNjYXBlZCBjaGFyYWN0ZXIuXG4gICAqL1xuICB2YXIgdW5lc2NhcGVIdG1sQ2hhciA9IGJhc2VQcm9wZXJ0eU9mKGh0bWxVbmVzY2FwZXMpO1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzaXplIG9mIGEgVW5pY29kZSBgc3RyaW5nYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICAgKi9cbiAgZnVuY3Rpb24gdW5pY29kZVNpemUoc3RyaW5nKSB7XG4gICAgdmFyIHJlc3VsdCA9IHJlVW5pY29kZS5sYXN0SW5kZXggPSAwO1xuICAgIHdoaWxlIChyZVVuaWNvZGUudGVzdChzdHJpbmcpKSB7XG4gICAgICArK3Jlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIFVuaWNvZGUgYHN0cmluZ2AgdG8gYW4gYXJyYXkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIHVuaWNvZGVUb0FycmF5KHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlKSB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdHMgYSBVbmljb2RlIGBzdHJpbmdgIGludG8gYW4gYXJyYXkgb2YgaXRzIHdvcmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdvcmRzIG9mIGBzdHJpbmdgLlxuICAgKi9cbiAgZnVuY3Rpb24gdW5pY29kZVdvcmRzKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlV29yZCkgfHwgW107XG4gIH1cblxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IHByaXN0aW5lIGBsb2Rhc2hgIGZ1bmN0aW9uIHVzaW5nIHRoZSBgY29udGV4dGAgb2JqZWN0LlxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqIEBtZW1iZXJPZiBfXG4gICAqIEBzaW5jZSAxLjEuMFxuICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHQ9cm9vdF0gVGhlIGNvbnRleHQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYSBuZXcgYGxvZGFzaGAgZnVuY3Rpb24uXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIF8ubWl4aW4oeyAnZm9vJzogXy5jb25zdGFudCgnZm9vJykgfSk7XG4gICAqXG4gICAqIHZhciBsb2Rhc2ggPSBfLnJ1bkluQ29udGV4dCgpO1xuICAgKiBsb2Rhc2gubWl4aW4oeyAnYmFyJzogbG9kYXNoLmNvbnN0YW50KCdiYXInKSB9KTtcbiAgICpcbiAgICogXy5pc0Z1bmN0aW9uKF8uZm9vKTtcbiAgICogLy8gPT4gdHJ1ZVxuICAgKiBfLmlzRnVuY3Rpb24oXy5iYXIpO1xuICAgKiAvLyA9PiBmYWxzZVxuICAgKlxuICAgKiBsb2Rhc2guaXNGdW5jdGlvbihsb2Rhc2guZm9vKTtcbiAgICogLy8gPT4gZmFsc2VcbiAgICogbG9kYXNoLmlzRnVuY3Rpb24obG9kYXNoLmJhcik7XG4gICAqIC8vID0+IHRydWVcbiAgICpcbiAgICogLy8gQ3JlYXRlIGEgc3VwZWQtdXAgYGRlZmVyYCBpbiBOb2RlLmpzLlxuICAgKiB2YXIgZGVmZXIgPSBfLnJ1bkluQ29udGV4dCh7ICdzZXRUaW1lb3V0Jzogc2V0SW1tZWRpYXRlIH0pLmRlZmVyO1xuICAgKi9cbiAgdmFyIHJ1bkluQ29udGV4dCA9IChmdW5jdGlvbiBydW5JbkNvbnRleHQoY29udGV4dCkge1xuICAgIGNvbnRleHQgPSBjb250ZXh0ID09IG51bGwgPyByb290IDogXy5kZWZhdWx0cyhyb290Lk9iamVjdCgpLCBjb250ZXh0LCBfLnBpY2socm9vdCwgY29udGV4dFByb3BzKSk7XG5cbiAgICAvKiogQnVpbHQtaW4gY29uc3RydWN0b3IgcmVmZXJlbmNlcy4gKi9cbiAgICB2YXIgQXJyYXkgPSBjb250ZXh0LkFycmF5LFxuICAgICAgICBEYXRlID0gY29udGV4dC5EYXRlLFxuICAgICAgICBFcnJvciA9IGNvbnRleHQuRXJyb3IsXG4gICAgICAgIEZ1bmN0aW9uID0gY29udGV4dC5GdW5jdGlvbixcbiAgICAgICAgTWF0aCA9IGNvbnRleHQuTWF0aCxcbiAgICAgICAgT2JqZWN0ID0gY29udGV4dC5PYmplY3QsXG4gICAgICAgIFJlZ0V4cCA9IGNvbnRleHQuUmVnRXhwLFxuICAgICAgICBTdHJpbmcgPSBjb250ZXh0LlN0cmluZyxcbiAgICAgICAgVHlwZUVycm9yID0gY29udGV4dC5UeXBlRXJyb3I7XG5cbiAgICAvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG4gICAgdmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsXG4gICAgICAgIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICAgICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4gICAgLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xuICAgIHZhciBjb3JlSnNEYXRhID0gY29udGV4dFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbiAgICAvKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG4gICAgdmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuICAgIC8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xuICAgIHZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4gICAgLyoqIFVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIElEcy4gKi9cbiAgICB2YXIgaWRDb3VudGVyID0gMDtcblxuICAgIC8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG4gICAgdmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICAgICAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xuICAgIH0oKSk7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gICAgICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gICAgICogb2YgdmFsdWVzLlxuICAgICAqL1xuICAgIHZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4gICAgLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xuICAgIHZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuICAgIC8qKiBVc2VkIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGBfYCByZWZlcmVuY2UgaW4gYF8ubm9Db25mbGljdGAuICovXG4gICAgdmFyIG9sZERhc2ggPSByb290Ll87XG5cbiAgICAvKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xuICAgIHZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gICAgICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAgICAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4gICAgKTtcblxuICAgIC8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xuICAgIHZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gY29udGV4dC5CdWZmZXIgOiB1bmRlZmluZWQsXG4gICAgICAgIFN5bWJvbCA9IGNvbnRleHQuU3ltYm9sLFxuICAgICAgICBVaW50OEFycmF5ID0gY29udGV4dC5VaW50OEFycmF5LFxuICAgICAgICBhbGxvY1Vuc2FmZSA9IEJ1ZmZlciA/IEJ1ZmZlci5hbGxvY1Vuc2FmZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCksXG4gICAgICAgIG9iamVjdENyZWF0ZSA9IE9iamVjdC5jcmVhdGUsXG4gICAgICAgIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGUsXG4gICAgICAgIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlLFxuICAgICAgICBzcHJlYWRhYmxlU3ltYm9sID0gU3ltYm9sID8gU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3ltSXRlcmF0b3IgPSBTeW1ib2wgPyBTeW1ib2wuaXRlcmF0b3IgOiB1bmRlZmluZWQsXG4gICAgICAgIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4gICAgdmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICAgICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICAgICAgcmV0dXJuIGZ1bmM7XG4gICAgICB9IGNhdGNoIChlKSB7fVxuICAgIH0oKSk7XG5cbiAgICAvKiogTW9ja2VkIGJ1aWx0LWlucy4gKi9cbiAgICB2YXIgY3R4Q2xlYXJUaW1lb3V0ID0gY29udGV4dC5jbGVhclRpbWVvdXQgIT09IHJvb3QuY2xlYXJUaW1lb3V0ICYmIGNvbnRleHQuY2xlYXJUaW1lb3V0LFxuICAgICAgICBjdHhOb3cgPSBEYXRlICYmIERhdGUubm93ICE9PSByb290LkRhdGUubm93ICYmIERhdGUubm93LFxuICAgICAgICBjdHhTZXRUaW1lb3V0ID0gY29udGV4dC5zZXRUaW1lb3V0ICE9PSByb290LnNldFRpbWVvdXQgJiYgY29udGV4dC5zZXRUaW1lb3V0O1xuXG4gICAgLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xuICAgIHZhciBuYXRpdmVDZWlsID0gTWF0aC5jZWlsLFxuICAgICAgICBuYXRpdmVGbG9vciA9IE1hdGguZmxvb3IsXG4gICAgICAgIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLFxuICAgICAgICBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICAgICAgbmF0aXZlSXNGaW5pdGUgPSBjb250ZXh0LmlzRmluaXRlLFxuICAgICAgICBuYXRpdmVKb2luID0gYXJyYXlQcm90by5qb2luLFxuICAgICAgICBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KSxcbiAgICAgICAgbmF0aXZlTWF4ID0gTWF0aC5tYXgsXG4gICAgICAgIG5hdGl2ZU1pbiA9IE1hdGgubWluLFxuICAgICAgICBuYXRpdmVOb3cgPSBEYXRlLm5vdyxcbiAgICAgICAgbmF0aXZlUGFyc2VJbnQgPSBjb250ZXh0LnBhcnNlSW50LFxuICAgICAgICBuYXRpdmVSYW5kb20gPSBNYXRoLnJhbmRvbSxcbiAgICAgICAgbmF0aXZlUmV2ZXJzZSA9IGFycmF5UHJvdG8ucmV2ZXJzZTtcblxuICAgIC8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbiAgICB2YXIgRGF0YVZpZXcgPSBnZXROYXRpdmUoY29udGV4dCwgJ0RhdGFWaWV3JyksXG4gICAgICAgIE1hcCA9IGdldE5hdGl2ZShjb250ZXh0LCAnTWFwJyksXG4gICAgICAgIFByb21pc2UgPSBnZXROYXRpdmUoY29udGV4dCwgJ1Byb21pc2UnKSxcbiAgICAgICAgU2V0ID0gZ2V0TmF0aXZlKGNvbnRleHQsICdTZXQnKSxcbiAgICAgICAgV2Vha01hcCA9IGdldE5hdGl2ZShjb250ZXh0LCAnV2Vha01hcCcpLFxuICAgICAgICBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbiAgICAvKiogVXNlZCB0byBzdG9yZSBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbiAgICB2YXIgbWV0YU1hcCA9IFdlYWtNYXAgJiYgbmV3IFdlYWtNYXA7XG5cbiAgICAvKiogVXNlZCB0byBsb29rdXAgdW5taW5pZmllZCBmdW5jdGlvbiBuYW1lcy4gKi9cbiAgICB2YXIgcmVhbE5hbWVzID0ge307XG5cbiAgICAvKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL1xuICAgIHZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXG4gICAgICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgICAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UpLFxuICAgICAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcbiAgICAgICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuICAgIC8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xuICAgIHZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQsXG4gICAgICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgbG9kYXNoYCBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgaW1wbGljaXQgbWV0aG9kXG4gICAgICogY2hhaW4gc2VxdWVuY2VzLiBNZXRob2RzIHRoYXQgb3BlcmF0ZSBvbiBhbmQgcmV0dXJuIGFycmF5cywgY29sbGVjdGlvbnMsXG4gICAgICogYW5kIGZ1bmN0aW9ucyBjYW4gYmUgY2hhaW5lZCB0b2dldGhlci4gTWV0aG9kcyB0aGF0IHJldHJpZXZlIGEgc2luZ2xlIHZhbHVlXG4gICAgICogb3IgbWF5IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgZW5kIHRoZSBjaGFpbiBzZXF1ZW5jZVxuICAgICAqIGFuZCByZXR1cm4gdGhlIHVud3JhcHBlZCB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgbXVzdCBiZSB1bndyYXBwZWRcbiAgICAgKiB3aXRoIGBfI3ZhbHVlYC5cbiAgICAgKlxuICAgICAqIEV4cGxpY2l0IGNoYWluIHNlcXVlbmNlcywgd2hpY2ggbXVzdCBiZSB1bndyYXBwZWQgd2l0aCBgXyN2YWx1ZWAsIG1heSBiZVxuICAgICAqIGVuYWJsZWQgdXNpbmcgYF8uY2hhaW5gLlxuICAgICAqXG4gICAgICogVGhlIGV4ZWN1dGlvbiBvZiBjaGFpbmVkIG1ldGhvZHMgaXMgbGF6eSwgdGhhdCBpcywgaXQncyBkZWZlcnJlZCB1bnRpbFxuICAgICAqIGBfI3ZhbHVlYCBpcyBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgY2FsbGVkLlxuICAgICAqXG4gICAgICogTGF6eSBldmFsdWF0aW9uIGFsbG93cyBzZXZlcmFsIG1ldGhvZHMgdG8gc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24uXG4gICAgICogU2hvcnRjdXQgZnVzaW9uIGlzIGFuIG9wdGltaXphdGlvbiB0byBtZXJnZSBpdGVyYXRlZSBjYWxsczsgdGhpcyBhdm9pZHNcbiAgICAgKiB0aGUgY3JlYXRpb24gb2YgaW50ZXJtZWRpYXRlIGFycmF5cyBhbmQgY2FuIGdyZWF0bHkgcmVkdWNlIHRoZSBudW1iZXIgb2ZcbiAgICAgKiBpdGVyYXRlZSBleGVjdXRpb25zLiBTZWN0aW9ucyBvZiBhIGNoYWluIHNlcXVlbmNlIHF1YWxpZnkgZm9yIHNob3J0Y3V0XG4gICAgICogZnVzaW9uIGlmIHRoZSBzZWN0aW9uIGlzIGFwcGxpZWQgdG8gYW4gYXJyYXkgYW5kIGl0ZXJhdGVlcyBhY2NlcHQgb25seVxuICAgICAqIG9uZSBhcmd1bWVudC4gVGhlIGhldXJpc3RpYyBmb3Igd2hldGhlciBhIHNlY3Rpb24gcXVhbGlmaWVzIGZvciBzaG9ydGN1dFxuICAgICAqIGZ1c2lvbiBpcyBzdWJqZWN0IHRvIGNoYW5nZS5cbiAgICAgKlxuICAgICAqIENoYWluaW5nIGlzIHN1cHBvcnRlZCBpbiBjdXN0b20gYnVpbGRzIGFzIGxvbmcgYXMgdGhlIGBfI3ZhbHVlYCBtZXRob2QgaXNcbiAgICAgKiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluY2x1ZGVkIGluIHRoZSBidWlsZC5cbiAgICAgKlxuICAgICAqIEluIGFkZGl0aW9uIHRvIGxvZGFzaCBtZXRob2RzLCB3cmFwcGVycyBoYXZlIGBBcnJheWAgYW5kIGBTdHJpbmdgIG1ldGhvZHMuXG4gICAgICpcbiAgICAgKiBUaGUgd3JhcHBlciBgQXJyYXlgIG1ldGhvZHMgYXJlOlxuICAgICAqIGBjb25jYXRgLCBgam9pbmAsIGBwb3BgLCBgcHVzaGAsIGBzaGlmdGAsIGBzb3J0YCwgYHNwbGljZWAsIGFuZCBgdW5zaGlmdGBcbiAgICAgKlxuICAgICAqIFRoZSB3cmFwcGVyIGBTdHJpbmdgIG1ldGhvZHMgYXJlOlxuICAgICAqIGByZXBsYWNlYCBhbmQgYHNwbGl0YFxuICAgICAqXG4gICAgICogVGhlIHdyYXBwZXIgbWV0aG9kcyB0aGF0IHN1cHBvcnQgc2hvcnRjdXQgZnVzaW9uIGFyZTpcbiAgICAgKiBgYXRgLCBgY29tcGFjdGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBkcm9wV2hpbGVgLCBgZmlsdGVyYCwgYGZpbmRgLFxuICAgICAqIGBmaW5kTGFzdGAsIGBoZWFkYCwgYGluaXRpYWxgLCBgbGFzdGAsIGBtYXBgLCBgcmVqZWN0YCwgYHJldmVyc2VgLCBgc2xpY2VgLFxuICAgICAqIGB0YWlsYCwgYHRha2VgLCBgdGFrZVJpZ2h0YCwgYHRha2VSaWdodFdoaWxlYCwgYHRha2VXaGlsZWAsIGFuZCBgdG9BcnJheWBcbiAgICAgKlxuICAgICAqIFRoZSBjaGFpbmFibGUgd3JhcHBlciBtZXRob2RzIGFyZTpcbiAgICAgKiBgYWZ0ZXJgLCBgYXJ5YCwgYGFzc2lnbmAsIGBhc3NpZ25JbmAsIGBhc3NpZ25JbldpdGhgLCBgYXNzaWduV2l0aGAsIGBhdGAsXG4gICAgICogYGJlZm9yZWAsIGBiaW5kYCwgYGJpbmRBbGxgLCBgYmluZEtleWAsIGBjYXN0QXJyYXlgLCBgY2hhaW5gLCBgY2h1bmtgLFxuICAgICAqIGBjb21taXRgLCBgY29tcGFjdGAsIGBjb25jYXRgLCBgY29uZm9ybXNgLCBgY29uc3RhbnRgLCBgY291bnRCeWAsIGBjcmVhdGVgLFxuICAgICAqIGBjdXJyeWAsIGBkZWJvdW5jZWAsIGBkZWZhdWx0c2AsIGBkZWZhdWx0c0RlZXBgLCBgZGVmZXJgLCBgZGVsYXlgLFxuICAgICAqIGBkaWZmZXJlbmNlYCwgYGRpZmZlcmVuY2VCeWAsIGBkaWZmZXJlbmNlV2l0aGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsXG4gICAgICogYGRyb3BSaWdodFdoaWxlYCwgYGRyb3BXaGlsZWAsIGBleHRlbmRgLCBgZXh0ZW5kV2l0aGAsIGBmaWxsYCwgYGZpbHRlcmAsXG4gICAgICogYGZsYXRNYXBgLCBgZmxhdE1hcERlZXBgLCBgZmxhdE1hcERlcHRoYCwgYGZsYXR0ZW5gLCBgZmxhdHRlbkRlZXBgLFxuICAgICAqIGBmbGF0dGVuRGVwdGhgLCBgZmxpcGAsIGBmbG93YCwgYGZsb3dSaWdodGAsIGBmcm9tUGFpcnNgLCBgZnVuY3Rpb25zYCxcbiAgICAgKiBgZnVuY3Rpb25zSW5gLCBgZ3JvdXBCeWAsIGBpbml0aWFsYCwgYGludGVyc2VjdGlvbmAsIGBpbnRlcnNlY3Rpb25CeWAsXG4gICAgICogYGludGVyc2VjdGlvbldpdGhgLCBgaW52ZXJ0YCwgYGludmVydEJ5YCwgYGludm9rZU1hcGAsIGBpdGVyYXRlZWAsIGBrZXlCeWAsXG4gICAgICogYGtleXNgLCBga2V5c0luYCwgYG1hcGAsIGBtYXBLZXlzYCwgYG1hcFZhbHVlc2AsIGBtYXRjaGVzYCwgYG1hdGNoZXNQcm9wZXJ0eWAsXG4gICAgICogYG1lbW9pemVgLCBgbWVyZ2VgLCBgbWVyZ2VXaXRoYCwgYG1ldGhvZGAsIGBtZXRob2RPZmAsIGBtaXhpbmAsIGBuZWdhdGVgLFxuICAgICAqIGBudGhBcmdgLCBgb21pdGAsIGBvbWl0QnlgLCBgb25jZWAsIGBvcmRlckJ5YCwgYG92ZXJgLCBgb3ZlckFyZ3NgLFxuICAgICAqIGBvdmVyRXZlcnlgLCBgb3ZlclNvbWVgLCBgcGFydGlhbGAsIGBwYXJ0aWFsUmlnaHRgLCBgcGFydGl0aW9uYCwgYHBpY2tgLFxuICAgICAqIGBwaWNrQnlgLCBgcGxhbnRgLCBgcHJvcGVydHlgLCBgcHJvcGVydHlPZmAsIGBwdWxsYCwgYHB1bGxBbGxgLCBgcHVsbEFsbEJ5YCxcbiAgICAgKiBgcHVsbEFsbFdpdGhgLCBgcHVsbEF0YCwgYHB1c2hgLCBgcmFuZ2VgLCBgcmFuZ2VSaWdodGAsIGByZWFyZ2AsIGByZWplY3RgLFxuICAgICAqIGByZW1vdmVgLCBgcmVzdGAsIGByZXZlcnNlYCwgYHNhbXBsZVNpemVgLCBgc2V0YCwgYHNldFdpdGhgLCBgc2h1ZmZsZWAsXG4gICAgICogYHNsaWNlYCwgYHNvcnRgLCBgc29ydEJ5YCwgYHNwbGljZWAsIGBzcHJlYWRgLCBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsXG4gICAgICogYHRha2VSaWdodFdoaWxlYCwgYHRha2VXaGlsZWAsIGB0YXBgLCBgdGhyb3R0bGVgLCBgdGhydWAsIGB0b0FycmF5YCxcbiAgICAgKiBgdG9QYWlyc2AsIGB0b1BhaXJzSW5gLCBgdG9QYXRoYCwgYHRvUGxhaW5PYmplY3RgLCBgdHJhbnNmb3JtYCwgYHVuYXJ5YCxcbiAgICAgKiBgdW5pb25gLCBgdW5pb25CeWAsIGB1bmlvbldpdGhgLCBgdW5pcWAsIGB1bmlxQnlgLCBgdW5pcVdpdGhgLCBgdW5zZXRgLFxuICAgICAqIGB1bnNoaWZ0YCwgYHVuemlwYCwgYHVuemlwV2l0aGAsIGB1cGRhdGVgLCBgdXBkYXRlV2l0aGAsIGB2YWx1ZXNgLFxuICAgICAqIGB2YWx1ZXNJbmAsIGB3aXRob3V0YCwgYHdyYXBgLCBgeG9yYCwgYHhvckJ5YCwgYHhvcldpdGhgLCBgemlwYCxcbiAgICAgKiBgemlwT2JqZWN0YCwgYHppcE9iamVjdERlZXBgLCBhbmQgYHppcFdpdGhgXG4gICAgICpcbiAgICAgKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgYXJlICoqbm90KiogY2hhaW5hYmxlIGJ5IGRlZmF1bHQgYXJlOlxuICAgICAqIGBhZGRgLCBgYXR0ZW1wdGAsIGBjYW1lbENhc2VgLCBgY2FwaXRhbGl6ZWAsIGBjZWlsYCwgYGNsYW1wYCwgYGNsb25lYCxcbiAgICAgKiBgY2xvbmVEZWVwYCwgYGNsb25lRGVlcFdpdGhgLCBgY2xvbmVXaXRoYCwgYGNvbmZvcm1zVG9gLCBgZGVidXJyYCxcbiAgICAgKiBgZGVmYXVsdFRvYCwgYGRpdmlkZWAsIGBlYWNoYCwgYGVhY2hSaWdodGAsIGBlbmRzV2l0aGAsIGBlcWAsIGBlc2NhcGVgLFxuICAgICAqIGBlc2NhcGVSZWdFeHBgLCBgZXZlcnlgLCBgZmluZGAsIGBmaW5kSW5kZXhgLCBgZmluZEtleWAsIGBmaW5kTGFzdGAsXG4gICAgICogYGZpbmRMYXN0SW5kZXhgLCBgZmluZExhc3RLZXlgLCBgZmlyc3RgLCBgZmxvb3JgLCBgZm9yRWFjaGAsIGBmb3JFYWNoUmlnaHRgLFxuICAgICAqIGBmb3JJbmAsIGBmb3JJblJpZ2h0YCwgYGZvck93bmAsIGBmb3JPd25SaWdodGAsIGBnZXRgLCBgZ3RgLCBgZ3RlYCwgYGhhc2AsXG4gICAgICogYGhhc0luYCwgYGhlYWRgLCBgaWRlbnRpdHlgLCBgaW5jbHVkZXNgLCBgaW5kZXhPZmAsIGBpblJhbmdlYCwgYGludm9rZWAsXG4gICAgICogYGlzQXJndW1lbnRzYCwgYGlzQXJyYXlgLCBgaXNBcnJheUJ1ZmZlcmAsIGBpc0FycmF5TGlrZWAsIGBpc0FycmF5TGlrZU9iamVjdGAsXG4gICAgICogYGlzQm9vbGVhbmAsIGBpc0J1ZmZlcmAsIGBpc0RhdGVgLCBgaXNFbGVtZW50YCwgYGlzRW1wdHlgLCBgaXNFcXVhbGAsXG4gICAgICogYGlzRXF1YWxXaXRoYCwgYGlzRXJyb3JgLCBgaXNGaW5pdGVgLCBgaXNGdW5jdGlvbmAsIGBpc0ludGVnZXJgLCBgaXNMZW5ndGhgLFxuICAgICAqIGBpc01hcGAsIGBpc01hdGNoYCwgYGlzTWF0Y2hXaXRoYCwgYGlzTmFOYCwgYGlzTmF0aXZlYCwgYGlzTmlsYCwgYGlzTnVsbGAsXG4gICAgICogYGlzTnVtYmVyYCwgYGlzT2JqZWN0YCwgYGlzT2JqZWN0TGlrZWAsIGBpc1BsYWluT2JqZWN0YCwgYGlzUmVnRXhwYCxcbiAgICAgKiBgaXNTYWZlSW50ZWdlcmAsIGBpc1NldGAsIGBpc1N0cmluZ2AsIGBpc1VuZGVmaW5lZGAsIGBpc1R5cGVkQXJyYXlgLFxuICAgICAqIGBpc1dlYWtNYXBgLCBgaXNXZWFrU2V0YCwgYGpvaW5gLCBga2ViYWJDYXNlYCwgYGxhc3RgLCBgbGFzdEluZGV4T2ZgLFxuICAgICAqIGBsb3dlckNhc2VgLCBgbG93ZXJGaXJzdGAsIGBsdGAsIGBsdGVgLCBgbWF4YCwgYG1heEJ5YCwgYG1lYW5gLCBgbWVhbkJ5YCxcbiAgICAgKiBgbWluYCwgYG1pbkJ5YCwgYG11bHRpcGx5YCwgYG5vQ29uZmxpY3RgLCBgbm9vcGAsIGBub3dgLCBgbnRoYCwgYHBhZGAsXG4gICAgICogYHBhZEVuZGAsIGBwYWRTdGFydGAsIGBwYXJzZUludGAsIGBwb3BgLCBgcmFuZG9tYCwgYHJlZHVjZWAsIGByZWR1Y2VSaWdodGAsXG4gICAgICogYHJlcGVhdGAsIGByZXN1bHRgLCBgcm91bmRgLCBgcnVuSW5Db250ZXh0YCwgYHNhbXBsZWAsIGBzaGlmdGAsIGBzaXplYCxcbiAgICAgKiBgc25ha2VDYXNlYCwgYHNvbWVgLCBgc29ydGVkSW5kZXhgLCBgc29ydGVkSW5kZXhCeWAsIGBzb3J0ZWRMYXN0SW5kZXhgLFxuICAgICAqIGBzb3J0ZWRMYXN0SW5kZXhCeWAsIGBzdGFydENhc2VgLCBgc3RhcnRzV2l0aGAsIGBzdHViQXJyYXlgLCBgc3R1YkZhbHNlYCxcbiAgICAgKiBgc3R1Yk9iamVjdGAsIGBzdHViU3RyaW5nYCwgYHN0dWJUcnVlYCwgYHN1YnRyYWN0YCwgYHN1bWAsIGBzdW1CeWAsXG4gICAgICogYHRlbXBsYXRlYCwgYHRpbWVzYCwgYHRvRmluaXRlYCwgYHRvSW50ZWdlcmAsIGB0b0pTT05gLCBgdG9MZW5ndGhgLFxuICAgICAqIGB0b0xvd2VyYCwgYHRvTnVtYmVyYCwgYHRvU2FmZUludGVnZXJgLCBgdG9TdHJpbmdgLCBgdG9VcHBlcmAsIGB0cmltYCxcbiAgICAgKiBgdHJpbUVuZGAsIGB0cmltU3RhcnRgLCBgdHJ1bmNhdGVgLCBgdW5lc2NhcGVgLCBgdW5pcXVlSWRgLCBgdXBwZXJDYXNlYCxcbiAgICAgKiBgdXBwZXJGaXJzdGAsIGB2YWx1ZWAsIGFuZCBgd29yZHNgXG4gICAgICpcbiAgICAgKiBAbmFtZSBfXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAgaW4gYSBgbG9kYXNoYCBpbnN0YW5jZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgd3JhcHBlZCA9IF8oWzEsIDIsIDNdKTtcbiAgICAgKlxuICAgICAqIC8vIFJldHVybnMgYW4gdW53cmFwcGVkIHZhbHVlLlxuICAgICAqIHdyYXBwZWQucmVkdWNlKF8uYWRkKTtcbiAgICAgKiAvLyA9PiA2XG4gICAgICpcbiAgICAgKiAvLyBSZXR1cm5zIGEgd3JhcHBlZCB2YWx1ZS5cbiAgICAgKiB2YXIgc3F1YXJlcyA9IHdyYXBwZWQubWFwKHNxdWFyZSk7XG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXkoc3F1YXJlcyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheShzcXVhcmVzLnZhbHVlKCkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsb2Rhc2godmFsdWUpIHtcbiAgICAgIGlmIChpc09iamVjdExpa2UodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExvZGFzaFdyYXBwZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdfX3dyYXBwZWRfXycpKSB7XG4gICAgICAgICAgcmV0dXJuIHdyYXBwZXJDbG9uZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcih2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY3JlYXRlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGFzc2lnbmluZ1xuICAgICAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgICAgIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gICAgICByZXR1cm4gZnVuY3Rpb24ocHJvdG8pIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgICAgICB9XG4gICAgICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgICAgIG9iamVjdC5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgIH0oKSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnVuY3Rpb24gd2hvc2UgcHJvdG90eXBlIGNoYWluIHNlcXVlbmNlIHdyYXBwZXJzIGluaGVyaXQgZnJvbS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUxvZGFzaCgpIHtcbiAgICAgIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgY29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIGBsb2Rhc2hgIHdyYXBwZXIgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGFpbkFsbF0gRW5hYmxlIGV4cGxpY2l0IG1ldGhvZCBjaGFpbiBzZXF1ZW5jZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gTG9kYXNoV3JhcHBlcih2YWx1ZSwgY2hhaW5BbGwpIHtcbiAgICAgIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgICAgIHRoaXMuX19hY3Rpb25zX18gPSBbXTtcbiAgICAgIHRoaXMuX19jaGFpbl9fID0gISFjaGFpbkFsbDtcbiAgICAgIHRoaXMuX19pbmRleF9fID0gMDtcbiAgICAgIHRoaXMuX192YWx1ZXNfXyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCB0aGUgdGVtcGxhdGUgZGVsaW1pdGVycyB1c2VkIGJ5IGxvZGFzaCBhcmUgbGlrZSB0aG9zZSBpblxuICAgICAqIGVtYmVkZGVkIFJ1YnkgKEVSQikgYXMgd2VsbCBhcyBFUzIwMTUgdGVtcGxhdGUgc3RyaW5ncy4gQ2hhbmdlIHRoZVxuICAgICAqIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgbG9kYXNoLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG5cbiAgICAgIC8qKlxuICAgICAgICogVXNlZCB0byBkZXRlY3QgYGRhdGFgIHByb3BlcnR5IHZhbHVlcyB0byBiZSBIVE1MLWVzY2FwZWQuXG4gICAgICAgKlxuICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICogQHR5cGUge1JlZ0V4cH1cbiAgICAgICAqL1xuICAgICAgJ2VzY2FwZSc6IHJlRXNjYXBlLFxuXG4gICAgICAvKipcbiAgICAgICAqIFVzZWQgdG8gZGV0ZWN0IGNvZGUgdG8gYmUgZXZhbHVhdGVkLlxuICAgICAgICpcbiAgICAgICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICAgICAqIEB0eXBlIHtSZWdFeHB9XG4gICAgICAgKi9cbiAgICAgICdldmFsdWF0ZSc6IHJlRXZhbHVhdGUsXG5cbiAgICAgIC8qKlxuICAgICAgICogVXNlZCB0byBkZXRlY3QgYGRhdGFgIHByb3BlcnR5IHZhbHVlcyB0byBpbmplY3QuXG4gICAgICAgKlxuICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICogQHR5cGUge1JlZ0V4cH1cbiAgICAgICAqL1xuICAgICAgJ2ludGVycG9sYXRlJzogcmVJbnRlcnBvbGF0ZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIHJlZmVyZW5jZSB0aGUgZGF0YSBvYmplY3QgaW4gdGhlIHRlbXBsYXRlIHRleHQuXG4gICAgICAgKlxuICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgICAqL1xuICAgICAgJ3ZhcmlhYmxlJzogJycsXG5cbiAgICAgIC8qKlxuICAgICAgICogVXNlZCB0byBpbXBvcnQgdmFyaWFibGVzIGludG8gdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgICAgICpcbiAgICAgICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICAgKi9cbiAgICAgICdpbXBvcnRzJzoge1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgYGxvZGFzaGAgZnVuY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3MuaW1wb3J0c1xuICAgICAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICAgICAqL1xuICAgICAgICAnXyc6IGxvZGFzaFxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBFbnN1cmUgd3JhcHBlcnMgYXJlIGluc3RhbmNlcyBvZiBgYmFzZUxvZGFzaGAuXG4gICAgbG9kYXNoLnByb3RvdHlwZSA9IGJhc2VMb2Rhc2gucHJvdG90eXBlO1xuICAgIGxvZGFzaC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBsb2Rhc2g7XG5cbiAgICBMb2Rhc2hXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuICAgIExvZGFzaFdyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9kYXNoV3JhcHBlcjtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBsYXp5IHdyYXBwZXIgb2JqZWN0IHdoaWNoIHdyYXBzIGB2YWx1ZWAgdG8gZW5hYmxlIGxhenkgZXZhbHVhdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBMYXp5V3JhcHBlcih2YWx1ZSkge1xuICAgICAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICAgICAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICAgICAgdGhpcy5fX2Rpcl9fID0gMTtcbiAgICAgIHRoaXMuX19maWx0ZXJlZF9fID0gZmFsc2U7XG4gICAgICB0aGlzLl9faXRlcmF0ZWVzX18gPSBbXTtcbiAgICAgIHRoaXMuX190YWtlQ291bnRfXyA9IE1BWF9BUlJBWV9MRU5HVEg7XG4gICAgICB0aGlzLl9fdmlld3NfXyA9IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGUgbGF6eSB3cmFwcGVyIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgY2xvbmVcbiAgICAgKiBAbWVtYmVyT2YgTGF6eVdyYXBwZXJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgYExhenlXcmFwcGVyYCBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGF6eUNsb25lKCkge1xuICAgICAgdmFyIHJlc3VsdCA9IG5ldyBMYXp5V3JhcHBlcih0aGlzLl9fd3JhcHBlZF9fKTtcbiAgICAgIHJlc3VsdC5fX2FjdGlvbnNfXyA9IGNvcHlBcnJheSh0aGlzLl9fYWN0aW9uc19fKTtcbiAgICAgIHJlc3VsdC5fX2Rpcl9fID0gdGhpcy5fX2Rpcl9fO1xuICAgICAgcmVzdWx0Ll9fZmlsdGVyZWRfXyA9IHRoaXMuX19maWx0ZXJlZF9fO1xuICAgICAgcmVzdWx0Ll9faXRlcmF0ZWVzX18gPSBjb3B5QXJyYXkodGhpcy5fX2l0ZXJhdGVlc19fKTtcbiAgICAgIHJlc3VsdC5fX3Rha2VDb3VudF9fID0gdGhpcy5fX3Rha2VDb3VudF9fO1xuICAgICAgcmVzdWx0Ll9fdmlld3NfXyA9IGNvcHlBcnJheSh0aGlzLl9fdmlld3NfXyk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldmVyc2VzIHRoZSBkaXJlY3Rpb24gb2YgbGF6eSBpdGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHJldmVyc2VcbiAgICAgKiBAbWVtYmVyT2YgTGF6eVdyYXBwZXJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgcmV2ZXJzZWQgYExhenlXcmFwcGVyYCBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGF6eVJldmVyc2UoKSB7XG4gICAgICBpZiAodGhpcy5fX2ZpbHRlcmVkX18pIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBMYXp5V3JhcHBlcih0aGlzKTtcbiAgICAgICAgcmVzdWx0Ll9fZGlyX18gPSAtMTtcbiAgICAgICAgcmVzdWx0Ll9fZmlsdGVyZWRfXyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSB0aGlzLmNsb25lKCk7XG4gICAgICAgIHJlc3VsdC5fX2Rpcl9fICo9IC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHRyYWN0cyB0aGUgdW53cmFwcGVkIHZhbHVlIGZyb20gaXRzIGxhenkgd3JhcHBlci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgdmFsdWVcbiAgICAgKiBAbWVtYmVyT2YgTGF6eVdyYXBwZXJcbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdW53cmFwcGVkIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxhenlWYWx1ZSgpIHtcbiAgICAgIHZhciBhcnJheSA9IHRoaXMuX193cmFwcGVkX18udmFsdWUoKSxcbiAgICAgICAgICBkaXIgPSB0aGlzLl9fZGlyX18sXG4gICAgICAgICAgaXNBcnIgPSBpc0FycmF5KGFycmF5KSxcbiAgICAgICAgICBpc1JpZ2h0ID0gZGlyIDwgMCxcbiAgICAgICAgICBhcnJMZW5ndGggPSBpc0FyciA/IGFycmF5Lmxlbmd0aCA6IDAsXG4gICAgICAgICAgdmlldyA9IGdldFZpZXcoMCwgYXJyTGVuZ3RoLCB0aGlzLl9fdmlld3NfXyksXG4gICAgICAgICAgc3RhcnQgPSB2aWV3LnN0YXJ0LFxuICAgICAgICAgIGVuZCA9IHZpZXcuZW5kLFxuICAgICAgICAgIGxlbmd0aCA9IGVuZCAtIHN0YXJ0LFxuICAgICAgICAgIGluZGV4ID0gaXNSaWdodCA/IGVuZCA6IChzdGFydCAtIDEpLFxuICAgICAgICAgIGl0ZXJhdGVlcyA9IHRoaXMuX19pdGVyYXRlZXNfXyxcbiAgICAgICAgICBpdGVyTGVuZ3RoID0gaXRlcmF0ZWVzLmxlbmd0aCxcbiAgICAgICAgICByZXNJbmRleCA9IDAsXG4gICAgICAgICAgdGFrZUNvdW50ID0gbmF0aXZlTWluKGxlbmd0aCwgdGhpcy5fX3Rha2VDb3VudF9fKTtcblxuICAgICAgaWYgKCFpc0FyciB8fCAoIWlzUmlnaHQgJiYgYXJyTGVuZ3RoID09IGxlbmd0aCAmJiB0YWtlQ291bnQgPT0gbGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gYmFzZVdyYXBwZXJWYWx1ZShhcnJheSwgdGhpcy5fX2FjdGlvbnNfXyk7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgIG91dGVyOlxuICAgICAgd2hpbGUgKGxlbmd0aC0tICYmIHJlc0luZGV4IDwgdGFrZUNvdW50KSB7XG4gICAgICAgIGluZGV4ICs9IGRpcjtcblxuICAgICAgICB2YXIgaXRlckluZGV4ID0gLTEsXG4gICAgICAgICAgICB2YWx1ZSA9IGFycmF5W2luZGV4XTtcblxuICAgICAgICB3aGlsZSAoKytpdGVySW5kZXggPCBpdGVyTGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSBpdGVyYXRlZXNbaXRlckluZGV4XSxcbiAgICAgICAgICAgICAgaXRlcmF0ZWUgPSBkYXRhLml0ZXJhdGVlLFxuICAgICAgICAgICAgICB0eXBlID0gZGF0YS50eXBlLFxuICAgICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlKTtcblxuICAgICAgICAgIGlmICh0eXBlID09IExBWllfTUFQX0ZMQUcpIHtcbiAgICAgICAgICAgIHZhbHVlID0gY29tcHV0ZWQ7XG4gICAgICAgICAgfSBlbHNlIGlmICghY29tcHV0ZWQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09IExBWllfRklMVEVSX0ZMQUcpIHtcbiAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSBgTGF6eVdyYXBwZXJgIGlzIGFuIGluc3RhbmNlIG9mIGBiYXNlTG9kYXNoYC5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUgPSBiYXNlQ3JlYXRlKGJhc2VMb2Rhc2gucHJvdG90eXBlKTtcbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMYXp5V3JhcHBlcjtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgICAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGNsZWFyXG4gICAgICogQG1lbWJlck9mIEhhc2hcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gICAgICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gICAgICB0aGlzLnNpemUgPSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBkZWxldGVcbiAgICAgKiBAbWVtYmVyT2YgSGFzaFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgICAgIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gICAgICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBnZXRcbiAgICAgKiBAbWVtYmVyT2YgSGFzaFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICAgICAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgICAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBoYXNcbiAgICAgKiBAbWVtYmVyT2YgSGFzaFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICAgICAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBzZXRcbiAgICAgKiBAbWVtYmVyT2YgSGFzaFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICAgICAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgICAgIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuICAgIEhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuICAgIEhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG4gICAgSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbiAgICBIYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuICAgIEhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICAgICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBjbGVhclxuICAgICAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgICAgIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGRlbGV0ZVxuICAgICAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgICAgIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgZGF0YS5wb3AoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICAgIC0tdGhpcy5zaXplO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGdldFxuICAgICAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgICAgIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGhhc1xuICAgICAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICAgICAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkpID4gLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBzZXRcbiAgICAgKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICsrdGhpcy5zaXplO1xuICAgICAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG4gICAgTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG4gICAgTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG4gICAgTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG4gICAgTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBjbGVhclxuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XG4gICAgICB0aGlzLnNpemUgPSAwO1xuICAgICAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAgICAgJ2hhc2gnOiBuZXcgSGFzaCxcbiAgICAgICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBkZWxldGVcbiAgICAgKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICAgICAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBnZXRcbiAgICAgKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gICAgICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBoYXNcbiAgICAgKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gICAgICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBzZXRcbiAgICAgKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgICAgIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxuICAgIE1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG4gICAgTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuICAgIE1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDtcbiAgICBNYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG4gICAgTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gdmFsdWVzID09IG51bGwgPyAwIDogdmFsdWVzLmxlbmd0aDtcblxuICAgICAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuYWRkKHZhbHVlc1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGFkZFxuICAgICAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICAgICAqIEBhbGlhcyBwdXNoXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2FjaGUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgICAgIHRoaXMuX19kYXRhX18uc2V0KHZhbHVlLCBIQVNIX1VOREVGSU5FRCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGhhc1xuICAgICAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG4gICAgU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG4gICAgU2V0Q2FjaGUucHJvdG90eXBlLmhhcyA9IHNldENhY2hlSGFzO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gICAgICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGNsZWFyXG4gICAgICogQG1lbWJlck9mIFN0YWNrXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgICAgIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICAgICAgdGhpcy5zaXplID0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGRlbGV0ZVxuICAgICAqIEBtZW1iZXJPZiBTdGFja1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gICAgICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZ2V0XG4gICAgICogQG1lbWJlck9mIFN0YWNrXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgaGFzXG4gICAgICogQG1lbWJlck9mIFN0YWNrXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2V0XG4gICAgICogQG1lbWJlck9mIFN0YWNrXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgICAgIHZhciBwYWlycyA9IGRhdGEuX19kYXRhX187XG4gICAgICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICAgICAgdGhpcy5zaXplID0gKytkYXRhLnNpemU7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGUocGFpcnMpO1xuICAgICAgfVxuICAgICAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuICAgIFN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG4gICAgU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuICAgIFN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcbiAgICBTdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG4gICAgU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgICAgIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgICAgICkpKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc2FtcGxlYCBmb3IgYXJyYXlzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2FtcGxlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcnJheVNhbXBsZShhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICAgIHJldHVybiBsZW5ndGggPyBhcnJheVtiYXNlUmFuZG9tKDAsIGxlbmd0aCAtIDEpXSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc2FtcGxlU2l6ZWAgZm9yIGFycmF5cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNhbXBsZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNhbXBsZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50cy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcnJheVNhbXBsZVNpemUoYXJyYXksIG4pIHtcbiAgICAgIHJldHVybiBzaHVmZmxlU2VsZihjb3B5QXJyYXkoYXJyYXkpLCBiYXNlQ2xhbXAobiwgMCwgYXJyYXkubGVuZ3RoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNodWZmbGVgIGZvciBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzaHVmZmxlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNodWZmbGVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5U2h1ZmZsZShhcnJheSkge1xuICAgICAgcmV0dXJuIHNodWZmbGVTZWxmKGNvcHlBcnJheShhcnJheSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXNzaWduVmFsdWVgIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgYXNzaWduXG4gICAgICogYHVuZGVmaW5lZGAgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKCh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICFlcShvYmplY3Rba2V5XSwgdmFsdWUpKSB8fFxuICAgICAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAgICAgKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgICAgIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZ2dyZWdhdGVzIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCBvbiBgYWNjdW11bGF0b3JgIHdpdGgga2V5cyB0cmFuc2Zvcm1lZFxuICAgICAqIGJ5IGBpdGVyYXRlZWAgYW5kIHZhbHVlcyBzZXQgYnkgYHNldHRlcmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBgYWNjdW11bGF0b3JgIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIGFnZ3JlZ2F0ZWQgb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgYWNjdW11bGF0b3JgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VBZ2dyZWdhdG9yKGNvbGxlY3Rpb24sIHNldHRlciwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yKSB7XG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHNldHRlcihhY2N1bXVsYXRvciwgdmFsdWUsIGl0ZXJhdGVlKHZhbHVlKSwgY29sbGVjdGlvbik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hc3NpZ25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICAgICAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3QsIHNvdXJjZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbkluYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAgICAgKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VBc3NpZ25JbihvYmplY3QsIHNvdXJjZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAgICAgKiB2YWx1ZSBjaGVja3MuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgICAgIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbCBwYXRocy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHBpY2tlZCBlbGVtZW50cy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQXQob2JqZWN0LCBwYXRocykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcGF0aHMubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgICAgc2tpcCA9IG9iamVjdCA9PSBudWxsO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICByZXN1bHRbaW5kZXhdID0gc2tpcCA/IHVuZGVmaW5lZCA6IGdldChvYmplY3QsIHBhdGhzW2luZGV4XSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNsYW1wYCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byBjbGFtcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xvd2VyXSBUaGUgbG93ZXIgYm91bmQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHVwcGVyIFRoZSB1cHBlciBib3VuZC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjbGFtcGVkIG51bWJlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQ2xhbXAobnVtYmVyLCBsb3dlciwgdXBwZXIpIHtcbiAgICAgIGlmIChudW1iZXIgPT09IG51bWJlcikge1xuICAgICAgICBpZiAodXBwZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG51bWJlciA9IG51bWJlciA8PSB1cHBlciA/IG51bWJlciA6IHVwcGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbnVtYmVyID0gbnVtYmVyID49IGxvd2VyID8gbnVtYmVyIDogbG93ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xvbmVgIGFuZCBgXy5jbG9uZURlZXBgIHdoaWNoIHRyYWNrc1xuICAgICAqIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gICAgICogIDEgLSBEZWVwIGNsb25lXG4gICAgICogIDIgLSBGbGF0dGVuIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG4gICAgICogIDQgLSBDbG9uZSBzeW1ib2xzXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY2xvbmluZy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gVGhlIGtleSBvZiBgdmFsdWVgLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgcGFyZW50IG9iamVjdCBvZiBgdmFsdWVgLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBhbmQgdGhlaXIgY2xvbmUgY291bnRlcnBhcnRzLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUNsb25lKHZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIG9iamVjdCwgc3RhY2spIHtcbiAgICAgIHZhciByZXN1bHQsXG4gICAgICAgICAgaXNEZWVwID0gYml0bWFzayAmIENMT05FX0RFRVBfRkxBRyxcbiAgICAgICAgICBpc0ZsYXQgPSBiaXRtYXNrICYgQ0xPTkVfRkxBVF9GTEFHLFxuICAgICAgICAgIGlzRnVsbCA9IGJpdG1hc2sgJiBDTE9ORV9TWU1CT0xTX0ZMQUc7XG5cbiAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgIHJlc3VsdCA9IG9iamVjdCA/IGN1c3RvbWl6ZXIodmFsdWUsIGtleSwgb2JqZWN0LCBzdGFjaykgOiBjdXN0b21pemVyKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSk7XG4gICAgICBpZiAoaXNBcnIpIHtcbiAgICAgICAgcmVzdWx0ID0gaW5pdENsb25lQXJyYXkodmFsdWUpO1xuICAgICAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgICAgIHJldHVybiBjb3B5QXJyYXkodmFsdWUsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpLFxuICAgICAgICAgICAgaXNGdW5jID0gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZztcblxuICAgICAgICBpZiAoaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGNsb25lQnVmZmVyKHZhbHVlLCBpc0RlZXApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YWcgPT0gb2JqZWN0VGFnIHx8IHRhZyA9PSBhcmdzVGFnIHx8IChpc0Z1bmMgJiYgIW9iamVjdCkpIHtcbiAgICAgICAgICByZXN1bHQgPSAoaXNGbGF0IHx8IGlzRnVuYykgPyB7fSA6IGluaXRDbG9uZU9iamVjdCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKCFpc0RlZXApIHtcbiAgICAgICAgICAgIHJldHVybiBpc0ZsYXRcbiAgICAgICAgICAgICAgPyBjb3B5U3ltYm9sc0luKHZhbHVlLCBiYXNlQXNzaWduSW4ocmVzdWx0LCB2YWx1ZSkpXG4gICAgICAgICAgICAgIDogY29weVN5bWJvbHModmFsdWUsIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIWNsb25lYWJsZVRhZ3NbdGFnXSkge1xuICAgICAgICAgICAgcmV0dXJuIG9iamVjdCA/IHZhbHVlIDoge307XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUJ5VGFnKHZhbHVlLCB0YWcsIGlzRGVlcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCByZXR1cm4gaXRzIGNvcnJlc3BvbmRpbmcgY2xvbmUuXG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQodmFsdWUpO1xuICAgICAgaWYgKHN0YWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQ7XG4gICAgICB9XG4gICAgICBzdGFjay5zZXQodmFsdWUsIHJlc3VsdCk7XG5cbiAgICAgIGlmIChpc1NldCh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihzdWJWYWx1ZSkge1xuICAgICAgICAgIHJlc3VsdC5hZGQoYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdWJWYWx1ZSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChpc01hcCh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgICAgICAgcmVzdWx0LnNldChrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBrZXlzRnVuYyA9IGlzRnVsbFxuICAgICAgICA/IChpc0ZsYXQgPyBnZXRBbGxLZXlzSW4gOiBnZXRBbGxLZXlzKVxuICAgICAgICA6IChpc0ZsYXQgPyBrZXlzSW4gOiBrZXlzKTtcblxuICAgICAgdmFyIHByb3BzID0gaXNBcnIgPyB1bmRlZmluZWQgOiBrZXlzRnVuYyh2YWx1ZSk7XG4gICAgICBhcnJheUVhY2gocHJvcHMgfHwgdmFsdWUsIGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICAgICAgaWYgKHByb3BzKSB7XG4gICAgICAgICAga2V5ID0gc3ViVmFsdWU7XG4gICAgICAgICAgc3ViVmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHBvcHVsYXRlIGNsb25lIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY29uZm9ybXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSBwcmVkaWNhdGVzIHRvIGNvbmZvcm0gdG8uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQ29uZm9ybXMoc291cmNlKSB7XG4gICAgICB2YXIgcHJvcHMgPSBrZXlzKHNvdXJjZSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBiYXNlQ29uZm9ybXNUbyhvYmplY3QsIHNvdXJjZSwgcHJvcHMpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jb25mb3Jtc1RvYCB3aGljaCBhY2NlcHRzIGBwcm9wc2AgdG8gY2hlY2suXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSBwcmVkaWNhdGVzIHRvIGNvbmZvcm0gdG8uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGNvbmZvcm1zLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUNvbmZvcm1zVG8ob2JqZWN0LCBzb3VyY2UsIHByb3BzKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAhbGVuZ3RoO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgdmFyIGtleSA9IHByb3BzW2xlbmd0aF0sXG4gICAgICAgICAgICBwcmVkaWNhdGUgPSBzb3VyY2Vba2V5XSxcbiAgICAgICAgICAgIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICAgICAgaWYgKCh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpIHx8ICFwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5kZWxheWAgYW5kIGBfLmRlZmVyYCB3aGljaCBhY2NlcHRzIGBhcmdzYFxuICAgICAqIHRvIHByb3ZpZGUgdG8gYGZ1bmNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWxheS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2FpdCBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheSBpbnZvY2F0aW9uLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBwcm92aWRlIHRvIGBmdW5jYC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfE9iamVjdH0gUmV0dXJucyB0aGUgdGltZXIgaWQgb3IgdGltZW91dCBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZURlbGF5KGZ1bmMsIHdhaXQsIGFyZ3MpIHtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7IH0sIHdhaXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kaWZmZXJlbmNlYCB3aXRob3V0IHN1cHBvcnRcbiAgICAgKiBmb3IgZXhjbHVkaW5nIG11bHRpcGxlIGFycmF5cyBvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VEaWZmZXJlbmNlKGFycmF5LCB2YWx1ZXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICAgICAgaXNDb21tb24gPSB0cnVlLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSBbXSxcbiAgICAgICAgICB2YWx1ZXNMZW5ndGggPSB2YWx1ZXMubGVuZ3RoO1xuXG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgIHZhbHVlcyA9IGFycmF5TWFwKHZhbHVlcywgYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7XG4gICAgICB9XG4gICAgICBpZiAoY29tcGFyYXRvcikge1xuICAgICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcyA9IG5ldyBTZXRDYWNoZSh2YWx1ZXMpO1xuICAgICAgfVxuICAgICAgb3V0ZXI6XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID09IG51bGwgPyB2YWx1ZSA6IGl0ZXJhdGVlKHZhbHVlKTtcblxuICAgICAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICAgICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIHZhciB2YWx1ZXNJbmRleCA9IHZhbHVlc0xlbmd0aDtcbiAgICAgICAgICB3aGlsZSAodmFsdWVzSW5kZXgtLSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlc1t2YWx1ZXNJbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWluY2x1ZGVzKHZhbHVlcywgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvckVhY2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gICAgICovXG4gICAgdmFyIGJhc2VFYWNoID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93bik7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JFYWNoUmlnaHRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gICAgICovXG4gICAgdmFyIGJhc2VFYWNoUmlnaHQgPSBjcmVhdGVCYXNlRWFjaChiYXNlRm9yT3duUmlnaHQsIHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZXZlcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbGwgZWxlbWVudHMgcGFzcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgICAqICBlbHNlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRXZlcnkoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXN1bHQgPSAhIXByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5tYXhgIGFuZCBgXy5taW5gIHdoaWNoIGFjY2VwdHMgYVxuICAgICAqIGBjb21wYXJhdG9yYCB0byBkZXRlcm1pbmUgdGhlIGV4dHJlbXVtIHZhbHVlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciB1c2VkIHRvIGNvbXBhcmUgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBleHRyZW11bSB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRXh0cmVtdW0oYXJyYXksIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIGN1cnJlbnQgPSBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgIT0gbnVsbCAmJiAoY29tcHV0ZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IChjdXJyZW50ID09PSBjdXJyZW50ICYmICFpc1N5bWJvbChjdXJyZW50KSlcbiAgICAgICAgICAgICAgOiBjb21wYXJhdG9yKGN1cnJlbnQsIGNvbXB1dGVkKVxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgIHZhciBjb21wdXRlZCA9IGN1cnJlbnQsXG4gICAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbGxgIHdpdGhvdXQgYW4gaXRlcmF0ZWUgY2FsbCBndWFyZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZpbGwuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZmlsbCBgYXJyYXlgIHdpdGguXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGaWxsKGFycmF5LCB2YWx1ZSwgc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgc3RhcnQgPSB0b0ludGVnZXIoc3RhcnQpO1xuICAgICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICAgICAgfVxuICAgICAgZW5kID0gKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IGxlbmd0aCkgPyBsZW5ndGggOiB0b0ludGVnZXIoZW5kKTtcbiAgICAgIGlmIChlbmQgPCAwKSB7XG4gICAgICAgIGVuZCArPSBsZW5ndGg7XG4gICAgICB9XG4gICAgICBlbmQgPSBzdGFydCA+IGVuZCA/IDAgOiB0b0xlbmd0aChlbmQpO1xuICAgICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7XG4gICAgICAgIGFycmF5W3N0YXJ0KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmlsdGVyYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZsYXR0ZW5gIHdpdGggc3VwcG9ydCBmb3IgcmVzdHJpY3RpbmcgZmxhdHRlbmluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc1N0cmljdF0gUmVzdHJpY3QgdG8gdmFsdWVzIHRoYXQgcGFzcyBgcHJlZGljYXRlYCBjaGVja3MuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICAgICAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICAgICAgaWYgKGRlcHRoID4gMCAmJiBwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICAgICAgaWYgKGRlcHRoID4gMSkge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBkZXB0aCAtIDEsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzU3RyaWN0KSB7XG4gICAgICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAgICAgKiBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAgICAgKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgdmFyIGJhc2VGb3IgPSBjcmVhdGVCYXNlRm9yKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGJhc2VGb3JgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgcHJvcGVydGllc1xuICAgICAqIGluIHRoZSBvcHBvc2l0ZSBvcmRlci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZUZvclJpZ2h0ID0gY3JlYXRlQmFzZUZvcih0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvck93bmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRm9yT3duKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgJiYgYmFzZUZvcihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25SaWdodGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRm9yT3duUmlnaHQob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yUmlnaHQob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZnVuY3Rpb25zYCB3aGljaCBjcmVhdGVzIGFuIGFycmF5IG9mXG4gICAgICogYG9iamVjdGAgZnVuY3Rpb24gcHJvcGVydHkgbmFtZXMgZmlsdGVyZWQgZnJvbSBgcHJvcHNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZmlsdGVyLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgZnVuY3Rpb24gbmFtZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZ1bmN0aW9ucyhvYmplY3QsIHByb3BzKSB7XG4gICAgICByZXR1cm4gYXJyYXlGaWx0ZXIocHJvcHMsIGZ1bmN0aW9uKGtleSkge1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvYmplY3Rba2V5XSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuICAgICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgICAgIHZhciBpbmRleCA9IDAsXG4gICAgICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBvYmplY3QgPSBvYmplY3RbdG9LZXkocGF0aFtpbmRleCsrXSldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICAgICAqIGBrZXlzRnVuY2AgYW5kIGBzeW1ib2xzRnVuY2AgdG8gZ2V0IHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICAgICAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHN5bWJvbHNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xuICAgICAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XG4gICAgICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gICAgICB9XG4gICAgICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgICAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5ndGAgd2hpY2ggZG9lc24ndCBjb2VyY2UgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIGBvdGhlcmAsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlR3QodmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPiBvdGhlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSGFzKG9iamVjdCwga2V5KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcbiAgICAgIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBrZXkgaW4gT2JqZWN0KG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW5SYW5nZWAgd2hpY2ggZG9lc24ndCBjb2VyY2UgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIFRoZSBudW1iZXIgdG8gY2hlY2suXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG51bWJlcmAgaXMgaW4gdGhlIHJhbmdlLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUluUmFuZ2UobnVtYmVyLCBzdGFydCwgZW5kKSB7XG4gICAgICByZXR1cm4gbnVtYmVyID49IG5hdGl2ZU1pbihzdGFydCwgZW5kKSAmJiBudW1iZXIgPCBuYXRpdmVNYXgoc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmludGVyc2VjdGlvbmAsIHdpdGhvdXQgc3VwcG9ydFxuICAgICAqIGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLCB0aGF0IGFjY2VwdHMgYW4gYXJyYXkgb2YgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5cyBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBzaGFyZWQgdmFsdWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJbnRlcnNlY3Rpb24oYXJyYXlzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICAgICAgdmFyIGluY2x1ZGVzID0gY29tcGFyYXRvciA/IGFycmF5SW5jbHVkZXNXaXRoIDogYXJyYXlJbmNsdWRlcyxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheXNbMF0ubGVuZ3RoLFxuICAgICAgICAgIG90aExlbmd0aCA9IGFycmF5cy5sZW5ndGgsXG4gICAgICAgICAgb3RoSW5kZXggPSBvdGhMZW5ndGgsXG4gICAgICAgICAgY2FjaGVzID0gQXJyYXkob3RoTGVuZ3RoKSxcbiAgICAgICAgICBtYXhMZW5ndGggPSBJbmZpbml0eSxcbiAgICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgICAgd2hpbGUgKG90aEluZGV4LS0pIHtcbiAgICAgICAgdmFyIGFycmF5ID0gYXJyYXlzW290aEluZGV4XTtcbiAgICAgICAgaWYgKG90aEluZGV4ICYmIGl0ZXJhdGVlKSB7XG4gICAgICAgICAgYXJyYXkgPSBhcnJheU1hcChhcnJheSwgYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgbWF4TGVuZ3RoID0gbmF0aXZlTWluKGFycmF5Lmxlbmd0aCwgbWF4TGVuZ3RoKTtcbiAgICAgICAgY2FjaGVzW290aEluZGV4XSA9ICFjb21wYXJhdG9yICYmIChpdGVyYXRlZSB8fCAobGVuZ3RoID49IDEyMCAmJiBhcnJheS5sZW5ndGggPj0gMTIwKSlcbiAgICAgICAgICA/IG5ldyBTZXRDYWNoZShvdGhJbmRleCAmJiBhcnJheSlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGFycmF5ID0gYXJyYXlzWzBdO1xuXG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBzZWVuID0gY2FjaGVzWzBdO1xuXG4gICAgICBvdXRlcjpcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoICYmIHJlc3VsdC5sZW5ndGggPCBtYXhMZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgICAgICBpZiAoIShzZWVuXG4gICAgICAgICAgICAgID8gY2FjaGVIYXMoc2VlbiwgY29tcHV0ZWQpXG4gICAgICAgICAgICAgIDogaW5jbHVkZXMocmVzdWx0LCBjb21wdXRlZCwgY29tcGFyYXRvcilcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICBvdGhJbmRleCA9IG90aExlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoLS1vdGhJbmRleCkge1xuICAgICAgICAgICAgdmFyIGNhY2hlID0gY2FjaGVzW290aEluZGV4XTtcbiAgICAgICAgICAgIGlmICghKGNhY2hlXG4gICAgICAgICAgICAgICAgICA/IGNhY2hlSGFzKGNhY2hlLCBjb21wdXRlZClcbiAgICAgICAgICAgICAgICAgIDogaW5jbHVkZXMoYXJyYXlzW290aEluZGV4XSwgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNlZW4pIHtcbiAgICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pbnZlcnRgIGFuZCBgXy5pbnZlcnRCeWAgd2hpY2ggaW52ZXJ0c1xuICAgICAqIGBvYmplY3RgIHdpdGggdmFsdWVzIHRyYW5zZm9ybWVkIGJ5IGBpdGVyYXRlZWAgYW5kIHNldCBieSBgc2V0dGVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBgYWNjdW11bGF0b3JgIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgaW52ZXJ0ZWQgb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgYWNjdW11bGF0b3JgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJbnZlcnRlcihvYmplY3QsIHNldHRlciwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yKSB7XG4gICAgICBiYXNlRm9yT3duKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gICAgICAgIHNldHRlcihhY2N1bXVsYXRvciwgaXRlcmF0ZWUodmFsdWUpLCBrZXksIG9iamVjdCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pbnZva2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbFxuICAgICAqIG1ldGhvZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBtZXRob2Qgd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBpbnZva2VkIG1ldGhvZC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSW52b2tlKG9iamVjdCwgcGF0aCwgYXJncykge1xuICAgICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gICAgICBvYmplY3QgPSBwYXJlbnQob2JqZWN0LCBwYXRoKTtcbiAgICAgIHZhciBmdW5jID0gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBvYmplY3RbdG9LZXkobGFzdChwYXRoKSldO1xuICAgICAgcmV0dXJuIGZ1bmMgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFwcGx5KGZ1bmMsIG9iamVjdCwgYXJncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJyYXlCdWZmZXJgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNBcnJheUJ1ZmZlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJyYXlCdWZmZXJUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNEYXRlYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBkYXRlIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc0RhdGUodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGRhdGVUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNFcXVhbGAgd2hpY2ggc3VwcG9ydHMgcGFydGlhbCBjb21wYXJpc29uc1xuICAgICAqIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gICAgICogIDEgLSBVbm9yZGVyZWQgY29tcGFyaXNvblxuICAgICAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgdmFsdWVgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gICAgICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICAgICAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAgICAgKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gICAgICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSxcbiAgICAgICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvdGhlcik7XG5cbiAgICAgIG9ialRhZyA9IG9ialRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb2JqVGFnO1xuICAgICAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgICAgIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgICAgIGlmIChpc1NhbWVUYWcgJiYgaXNCdWZmZXIob2JqZWN0KSkge1xuICAgICAgICBpZiAoIWlzQnVmZmVyKG90aGVyKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBvYmpJc0FyciA9IHRydWU7XG4gICAgICAgIG9iaklzT2JqID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xuICAgICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgICByZXR1cm4gKG9iaklzQXJyIHx8IGlzVHlwZWRBcnJheShvYmplY3QpKVxuICAgICAgICAgID8gZXF1YWxBcnJheXMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaylcbiAgICAgICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIH1cbiAgICAgIGlmICghKGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRykpIHtcbiAgICAgICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xuXG4gICAgICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XG4gICAgICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XG5cbiAgICAgICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXBgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc01hcCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBtYXBUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXRjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhLCBjdXN0b21pemVyKSB7XG4gICAgICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxuICAgICAgICAgIGxlbmd0aCA9IGluZGV4LFxuICAgICAgICAgIG5vQ3VzdG9taXplciA9ICFjdXN0b21pemVyO1xuXG4gICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICFsZW5ndGg7XG4gICAgICB9XG4gICAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAgIHZhciBkYXRhID0gbWF0Y2hEYXRhW2luZGV4XTtcbiAgICAgICAgaWYgKChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSlcbiAgICAgICAgICAgICAgPyBkYXRhWzFdICE9PSBvYmplY3RbZGF0YVswXV1cbiAgICAgICAgICAgICAgOiAhKGRhdGFbMF0gaW4gb2JqZWN0KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBkYXRhID0gbWF0Y2hEYXRhW2luZGV4XTtcbiAgICAgICAgdmFyIGtleSA9IGRhdGFbMF0sXG4gICAgICAgICAgICBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICAgICAgc3JjVmFsdWUgPSBkYXRhWzFdO1xuXG4gICAgICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkge1xuICAgICAgICAgIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHN0YWNrID0gbmV3IFN0YWNrO1xuICAgICAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCEocmVzdWx0ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgICAgICAgICA6IHJlc3VsdFxuICAgICAgICAgICAgICApKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNSZWdFeHBgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHJlZ2V4cCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc1JlZ0V4cCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gcmVnZXhwVGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzU2V0YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNTZXQodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gc2V0VGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgICAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLml0ZXJhdGVlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSBbdmFsdWU9Xy5pZGVudGl0eV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYW4gaXRlcmF0ZWUuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBpdGVyYXRlZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUpIHtcbiAgICAgIC8vIERvbid0IHN0b3JlIHRoZSBgdHlwZW9mYCByZXN1bHQgaW4gYSB2YXJpYWJsZSB0byBhdm9pZCBhIEpJVCBidWcgaW4gU2FmYXJpIDkuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjAzNCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgPyBiYXNlTWF0Y2hlc1Byb3BlcnR5KHZhbHVlWzBdLCB2YWx1ZVsxXSlcbiAgICAgICAgICA6IGJhc2VNYXRjaGVzKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgICAgIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c0luYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VLZXlzSW4ob2JqZWN0KSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICAgICAgfVxuICAgICAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5sdGAgd2hpY2ggZG9lc24ndCBjb2VyY2UgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIGBvdGhlcmAsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTHQodmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPCBvdGhlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXBgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VNYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIHJlc3VsdCA9IGlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pID8gQXJyYXkoY29sbGVjdGlvbi5sZW5ndGgpIDogW107XG5cbiAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmVzdWx0WysraW5kZXhdID0gaXRlcmF0ZWUodmFsdWUsIGtleSwgY29sbGVjdGlvbik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc2Agd2hpY2ggZG9lc24ndCBjbG9uZSBgc291cmNlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VNYXRjaGVzKHNvdXJjZSkge1xuICAgICAgdmFyIG1hdGNoRGF0YSA9IGdldE1hdGNoRGF0YShzb3VyY2UpO1xuICAgICAgaWYgKG1hdGNoRGF0YS5sZW5ndGggPT0gMSAmJiBtYXRjaERhdGFbMF1bMl0pIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcbiAgICAgIGlmIChpc0tleShwYXRoKSAmJiBpc1N0cmljdENvbXBhcmFibGUoc3JjVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSh0b0tleShwYXRoKSwgc3JjVmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICB2YXIgb2JqVmFsdWUgPSBnZXQob2JqZWN0LCBwYXRoKTtcbiAgICAgICAgcmV0dXJuIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIG9ialZhbHVlID09PSBzcmNWYWx1ZSlcbiAgICAgICAgICA/IGhhc0luKG9iamVjdCwgcGF0aClcbiAgICAgICAgICA6IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXG4gICAgICogIGNvdW50ZXJwYXJ0cy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyLCBzdGFjaykge1xuICAgICAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGJhc2VGb3Ioc291cmNlLCBmdW5jdGlvbihzcmNWYWx1ZSwga2V5KSB7XG4gICAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICAgIGlmIChpc09iamVjdChzcmNWYWx1ZSkpIHtcbiAgICAgICAgICBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBiYXNlTWVyZ2UsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgICAgICA/IGN1c3RvbWl6ZXIoc2FmZUdldChvYmplY3QsIGtleSksIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIGtleXNJbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlTWVyZ2VgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAgICAgKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICAgICAqIHJlZmVyZW5jZXMgdG8gYmUgbWVyZ2VkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbWVyZ2VGdW5jIFRoZSBmdW5jdGlvbiB0byBtZXJnZSB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXG4gICAgICogIGNvdW50ZXJwYXJ0cy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBtZXJnZUZ1bmMsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gICAgICB2YXIgb2JqVmFsdWUgPSBzYWZlR2V0KG9iamVjdCwga2V5KSxcbiAgICAgICAgICBzcmNWYWx1ZSA9IHNhZmVHZXQoc291cmNlLCBrZXkpLFxuICAgICAgICAgIHN0YWNrZWQgPSBzdGFjay5nZXQoc3JjVmFsdWUpO1xuXG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBzdGFja2VkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgICA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICB2YXIgaXNDb21tb24gPSBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoaXNDb21tb24pIHtcbiAgICAgICAgdmFyIGlzQXJyID0gaXNBcnJheShzcmNWYWx1ZSksXG4gICAgICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgaXNCdWZmZXIoc3JjVmFsdWUpLFxuICAgICAgICAgICAgaXNUeXBlZCA9ICFpc0FyciAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheShzcmNWYWx1ZSk7XG5cbiAgICAgICAgbmV3VmFsdWUgPSBzcmNWYWx1ZTtcbiAgICAgICAgaWYgKGlzQXJyIHx8IGlzQnVmZiB8fCBpc1R5cGVkKSB7XG4gICAgICAgICAgaWYgKGlzQXJyYXkob2JqVmFsdWUpKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IG9ialZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChpc0FycmF5TGlrZU9iamVjdChvYmpWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gY29weUFycmF5KG9ialZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoaXNCdWZmKSB7XG4gICAgICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBjbG9uZUJ1ZmZlcihzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGlzVHlwZWQpIHtcbiAgICAgICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGNsb25lVHlwZWRBcnJheShzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChzcmNWYWx1ZSkgfHwgaXNBcmd1bWVudHMoc3JjVmFsdWUpKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcbiAgICAgICAgICBpZiAoaXNBcmd1bWVudHMob2JqVmFsdWUpKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHRvUGxhaW5PYmplY3Qob2JqVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICghaXNPYmplY3Qob2JqVmFsdWUpIHx8IGlzRnVuY3Rpb24ob2JqVmFsdWUpKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGluaXRDbG9uZU9iamVjdChzcmNWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc0NvbW1vbikge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgc3RhY2suc2V0KHNyY1ZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgIG1lcmdlRnVuYyhuZXdWYWx1ZSwgc3JjVmFsdWUsIHNyY0luZGV4LCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgICAgIHN0YWNrWydkZWxldGUnXShzcmNWYWx1ZSk7XG4gICAgICB9XG4gICAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubnRoYCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gcmV0dXJuLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBudGggZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VOdGgoYXJyYXksIG4pIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBuICs9IG4gPCAwID8gbGVuZ3RoIDogMDtcbiAgICAgIHJldHVybiBpc0luZGV4KG4sIGxlbmd0aCkgPyBhcnJheVtuXSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5vcmRlckJ5YCB3aXRob3V0IHBhcmFtIGd1YXJkcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb25bXXxPYmplY3RbXXxzdHJpbmdbXX0gaXRlcmF0ZWVzIFRoZSBpdGVyYXRlZXMgdG8gc29ydCBieS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBvcmRlcnMgVGhlIHNvcnQgb3JkZXJzIG9mIGBpdGVyYXRlZXNgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNvcnRlZCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlT3JkZXJCeShjb2xsZWN0aW9uLCBpdGVyYXRlZXMsIG9yZGVycykge1xuICAgICAgaWYgKGl0ZXJhdGVlcy5sZW5ndGgpIHtcbiAgICAgICAgaXRlcmF0ZWVzID0gYXJyYXlNYXAoaXRlcmF0ZWVzLCBmdW5jdGlvbihpdGVyYXRlZSkge1xuICAgICAgICAgIGlmIChpc0FycmF5KGl0ZXJhdGVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBiYXNlR2V0KHZhbHVlLCBpdGVyYXRlZS5sZW5ndGggPT09IDEgPyBpdGVyYXRlZVswXSA6IGl0ZXJhdGVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGl0ZXJhdGVlO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZXJhdGVlcyA9IFtpZGVudGl0eV07XG4gICAgICB9XG5cbiAgICAgIHZhciBpbmRleCA9IC0xO1xuICAgICAgaXRlcmF0ZWVzID0gYXJyYXlNYXAoaXRlcmF0ZWVzLCBiYXNlVW5hcnkoZ2V0SXRlcmF0ZWUoKSkpO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gYmFzZU1hcChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHZhciBjcml0ZXJpYSA9IGFycmF5TWFwKGl0ZXJhdGVlcywgZnVuY3Rpb24oaXRlcmF0ZWUpIHtcbiAgICAgICAgICByZXR1cm4gaXRlcmF0ZWUodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgJ2NyaXRlcmlhJzogY3JpdGVyaWEsICdpbmRleCc6ICsraW5kZXgsICd2YWx1ZSc6IHZhbHVlIH07XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGJhc2VTb3J0QnkocmVzdWx0LCBmdW5jdGlvbihvYmplY3QsIG90aGVyKSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlTXVsdGlwbGUob2JqZWN0LCBvdGhlciwgb3JkZXJzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnBpY2tgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbFxuICAgICAqIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVBpY2sob2JqZWN0LCBwYXRocykge1xuICAgICAgcmV0dXJuIGJhc2VQaWNrQnkob2JqZWN0LCBwYXRocywgZnVuY3Rpb24odmFsdWUsIHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIGhhc0luKG9iamVjdCwgcGF0aCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiAgYF8ucGlja0J5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aHMgVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VQaWNrQnkob2JqZWN0LCBwYXRocywgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYXRocy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0ge307XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBwYXRoID0gcGF0aHNbaW5kZXhdLFxuICAgICAgICAgICAgdmFsdWUgPSBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG5cbiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgcGF0aCkpIHtcbiAgICAgICAgICBiYXNlU2V0KHJlc3VsdCwgY2FzdFBhdGgocGF0aCwgb2JqZWN0KSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVByb3BlcnR5YCB3aGljaCBzdXBwb3J0cyBkZWVwIHBhdGhzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wdWxsQWxsQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAgICAgKiBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VQdWxsQWxsKGFycmF5LCB2YWx1ZXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gICAgICB2YXIgaW5kZXhPZiA9IGNvbXBhcmF0b3IgPyBiYXNlSW5kZXhPZldpdGggOiBiYXNlSW5kZXhPZixcbiAgICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICAgICAgc2VlbiA9IGFycmF5O1xuXG4gICAgICBpZiAoYXJyYXkgPT09IHZhbHVlcykge1xuICAgICAgICB2YWx1ZXMgPSBjb3B5QXJyYXkodmFsdWVzKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBzZWVuID0gYXJyYXlNYXAoYXJyYXksIGJhc2VVbmFyeShpdGVyYXRlZSkpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGZyb21JbmRleCA9IDAsXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlc1tpbmRleF0sXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICAgICAgd2hpbGUgKChmcm9tSW5kZXggPSBpbmRleE9mKHNlZW4sIGNvbXB1dGVkLCBmcm9tSW5kZXgsIGNvbXBhcmF0b3IpKSA+IC0xKSB7XG4gICAgICAgICAgaWYgKHNlZW4gIT09IGFycmF5KSB7XG4gICAgICAgICAgICBzcGxpY2UuY2FsbChzZWVuLCBmcm9tSW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzcGxpY2UuY2FsbChhcnJheSwgZnJvbUluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnB1bGxBdGAgd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsXG4gICAgICogaW5kZXhlcyBvciBjYXB0dXJpbmcgdGhlIHJlbW92ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXhlcyBUaGUgaW5kZXhlcyBvZiBlbGVtZW50cyB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVB1bGxBdChhcnJheSwgaW5kZXhlcykge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gaW5kZXhlcy5sZW5ndGggOiAwLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgICAgIGlmIChsZW5ndGggPT0gbGFzdEluZGV4IHx8IGluZGV4ICE9PSBwcmV2aW91cykge1xuICAgICAgICAgIHZhciBwcmV2aW91cyA9IGluZGV4O1xuICAgICAgICAgIGlmIChpc0luZGV4KGluZGV4KSkge1xuICAgICAgICAgICAgc3BsaWNlLmNhbGwoYXJyYXksIGluZGV4LCAxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmFzZVVuc2V0KGFycmF5LCBpbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmFuZG9tYCB3aXRob3V0IHN1cHBvcnQgZm9yIHJldHVybmluZ1xuICAgICAqIGZsb2F0aW5nLXBvaW50IG51bWJlcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsb3dlciBUaGUgbG93ZXIgYm91bmQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHVwcGVyIFRoZSB1cHBlciBib3VuZC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByYW5kb20gbnVtYmVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VSYW5kb20obG93ZXIsIHVwcGVyKSB7XG4gICAgICByZXR1cm4gbG93ZXIgKyBuYXRpdmVGbG9vcihuYXRpdmVSYW5kb20oKSAqICh1cHBlciAtIGxvd2VyICsgMSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJhbmdlYCBhbmQgYF8ucmFuZ2VSaWdodGAgd2hpY2ggZG9lc24ndFxuICAgICAqIGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0ZXAgVGhlIHZhbHVlIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgYnkuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5nZSBvZiBudW1iZXJzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VSYW5nZShzdGFydCwgZW5kLCBzdGVwLCBmcm9tUmlnaHQpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChuYXRpdmVDZWlsKChlbmQgLSBzdGFydCkgLyAoc3RlcCB8fCAxKSksIDApLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICByZXN1bHRbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF0gPSBzdGFydDtcbiAgICAgICAgc3RhcnQgKz0gc3RlcDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVwZWF0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byByZXBlYXQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHN0cmluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByZXBlYXRlZCBzdHJpbmcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVJlcGVhdChzdHJpbmcsIG4pIHtcbiAgICAgIHZhciByZXN1bHQgPSAnJztcbiAgICAgIGlmICghc3RyaW5nIHx8IG4gPCAxIHx8IG4gPiBNQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICAvLyBMZXZlcmFnZSB0aGUgZXhwb25lbnRpYXRpb24gYnkgc3F1YXJpbmcgYWxnb3JpdGhtIGZvciBhIGZhc3RlciByZXBlYXQuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXhwb25lbnRpYXRpb25fYnlfc3F1YXJpbmcgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKG4gJSAyKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IHN0cmluZztcbiAgICAgICAgfVxuICAgICAgICBuID0gbmF0aXZlRmxvb3IobiAvIDIpO1xuICAgICAgICBpZiAobikge1xuICAgICAgICAgIHN0cmluZyArPSBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKG4pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgICAgIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNhbXBsZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNhbXBsZShjb2xsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gYXJyYXlTYW1wbGUodmFsdWVzKGNvbGxlY3Rpb24pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zYW1wbGVTaXplYCB3aXRob3V0IHBhcmFtIGd1YXJkcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gc2FtcGxlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTYW1wbGVTaXplKGNvbGxlY3Rpb24sIG4pIHtcbiAgICAgIHZhciBhcnJheSA9IHZhbHVlcyhjb2xsZWN0aW9uKTtcbiAgICAgIHJldHVybiBzaHVmZmxlU2VsZihhcnJheSwgYmFzZUNsYW1wKG4sIDAsIGFycmF5Lmxlbmd0aCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNldGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgcGF0aCBjcmVhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSwgY3VzdG9taXplcikge1xuICAgICAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICB9XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMSxcbiAgICAgICAgICBuZXN0ZWQgPSBvYmplY3Q7XG5cbiAgICAgIHdoaWxlIChuZXN0ZWQgIT0gbnVsbCAmJiArK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSksXG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIGlmIChrZXkgPT09ICdfX3Byb3RvX18nIHx8IGtleSA9PT0gJ2NvbnN0cnVjdG9yJyB8fCBrZXkgPT09ICdwcm90b3R5cGUnKSB7XG4gICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCAhPSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICB2YXIgb2JqVmFsdWUgPSBuZXN0ZWRba2V5XTtcbiAgICAgICAgICBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKG9ialZhbHVlLCBrZXksIG5lc3RlZCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gaXNPYmplY3Qob2JqVmFsdWUpXG4gICAgICAgICAgICAgID8gb2JqVmFsdWVcbiAgICAgICAgICAgICAgOiAoaXNJbmRleChwYXRoW2luZGV4ICsgMV0pID8gW10gOiB7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFzc2lnblZhbHVlKG5lc3RlZCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgIG5lc3RlZCA9IG5lc3RlZFtrZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0RGF0YWAgd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIG1ldGFkYXRhIHdpdGguXG4gICAgICogQHBhcmFtIHsqfSBkYXRhIFRoZSBtZXRhZGF0YS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICAgICAqL1xuICAgIHZhciBiYXNlU2V0RGF0YSA9ICFtZXRhTWFwID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBkYXRhKSB7XG4gICAgICBtZXRhTWFwLnNldChmdW5jLCBkYXRhKTtcbiAgICAgIHJldHVybiBmdW5jO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gICAgICovXG4gICAgdmFyIGJhc2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgc3RyaW5nKSB7XG4gICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcbiAgICAgICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNodWZmbGVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBzaHVmZmxlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNodWZmbGVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTaHVmZmxlKGNvbGxlY3Rpb24pIHtcbiAgICAgIHJldHVybiBzaHVmZmxlU2VsZih2YWx1ZXMoY29sbGVjdGlvbikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTbGljZShhcnJheSwgc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gICAgICB9XG4gICAgICBlbmQgPSBlbmQgPiBsZW5ndGggPyBsZW5ndGggOiBlbmQ7XG4gICAgICBpZiAoZW5kIDwgMCkge1xuICAgICAgICBlbmQgKz0gbGVuZ3RoO1xuICAgICAgfVxuICAgICAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICAgICAgc3RhcnQgPj4+PSAwO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSBhcnJheVtpbmRleCArIHN0YXJ0XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29tZWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNvbWUoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgcmVzdWx0O1xuXG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmVzdWx0ID0gcHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICAgIHJldHVybiAhcmVzdWx0O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gISFyZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydGVkSW5kZXhgIGFuZCBgXy5zb3J0ZWRMYXN0SW5kZXhgIHdoaWNoXG4gICAgICogcGVyZm9ybXMgYSBiaW5hcnkgc2VhcmNoIG9mIGBhcnJheWAgdG8gZGV0ZXJtaW5lIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgXG4gICAgICogc2hvdWxkIGJlIGluc2VydGVkIGludG8gYGFycmF5YCBpbiBvcmRlciB0byBtYWludGFpbiBpdHMgc29ydCBvcmRlci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldEhpZ2hlc3RdIFNwZWNpZnkgcmV0dXJuaW5nIHRoZSBoaWdoZXN0IHF1YWxpZmllZCBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSwgcmV0SGlnaGVzdCkge1xuICAgICAgdmFyIGxvdyA9IDAsXG4gICAgICAgICAgaGlnaCA9IGFycmF5ID09IG51bGwgPyBsb3cgOiBhcnJheS5sZW5ndGg7XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiYgdmFsdWUgPT09IHZhbHVlICYmIGhpZ2ggPD0gSEFMRl9NQVhfQVJSQVlfTEVOR1RIKSB7XG4gICAgICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICAgICAgdmFyIG1pZCA9IChsb3cgKyBoaWdoKSA+Pj4gMSxcbiAgICAgICAgICAgICAgY29tcHV0ZWQgPSBhcnJheVttaWRdO1xuXG4gICAgICAgICAgaWYgKGNvbXB1dGVkICE9PSBudWxsICYmICFpc1N5bWJvbChjb21wdXRlZCkgJiZcbiAgICAgICAgICAgICAgKHJldEhpZ2hlc3QgPyAoY29tcHV0ZWQgPD0gdmFsdWUpIDogKGNvbXB1dGVkIDwgdmFsdWUpKSkge1xuICAgICAgICAgICAgbG93ID0gbWlkICsgMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGlnaCA9IG1pZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhpZ2g7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBpZGVudGl0eSwgcmV0SGlnaGVzdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydGVkSW5kZXhCeWAgYW5kIGBfLnNvcnRlZExhc3RJbmRleEJ5YFxuICAgICAqIHdoaWNoIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgYHZhbHVlYCBhbmQgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgdG8gY29tcHV0ZVxuICAgICAqIHRoZWlyIHNvcnQgcmFua2luZy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ7ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXRIaWdoZXN0XSBTcGVjaWZ5IHJldHVybmluZyB0aGUgaGlnaGVzdCBxdWFsaWZpZWQgaW5kZXguXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTb3J0ZWRJbmRleEJ5KGFycmF5LCB2YWx1ZSwgaXRlcmF0ZWUsIHJldEhpZ2hlc3QpIHtcbiAgICAgIHZhciBsb3cgPSAwLFxuICAgICAgICAgIGhpZ2ggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmIChoaWdoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICB2YWx1ZSA9IGl0ZXJhdGVlKHZhbHVlKTtcbiAgICAgIHZhciB2YWxJc05hTiA9IHZhbHVlICE9PSB2YWx1ZSxcbiAgICAgICAgICB2YWxJc051bGwgPSB2YWx1ZSA9PT0gbnVsbCxcbiAgICAgICAgICB2YWxJc1N5bWJvbCA9IGlzU3ltYm9sKHZhbHVlKSxcbiAgICAgICAgICB2YWxJc1VuZGVmaW5lZCA9IHZhbHVlID09PSB1bmRlZmluZWQ7XG5cbiAgICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICAgIHZhciBtaWQgPSBuYXRpdmVGbG9vcigobG93ICsgaGlnaCkgLyAyKSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUoYXJyYXlbbWlkXSksXG4gICAgICAgICAgICBvdGhJc0RlZmluZWQgPSBjb21wdXRlZCAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgb3RoSXNOdWxsID0gY29tcHV0ZWQgPT09IG51bGwsXG4gICAgICAgICAgICBvdGhJc1JlZmxleGl2ZSA9IGNvbXB1dGVkID09PSBjb21wdXRlZCxcbiAgICAgICAgICAgIG90aElzU3ltYm9sID0gaXNTeW1ib2woY29tcHV0ZWQpO1xuXG4gICAgICAgIGlmICh2YWxJc05hTikge1xuICAgICAgICAgIHZhciBzZXRMb3cgPSByZXRIaWdoZXN0IHx8IG90aElzUmVmbGV4aXZlO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbElzVW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2V0TG93ID0gb3RoSXNSZWZsZXhpdmUgJiYgKHJldEhpZ2hlc3QgfHwgb3RoSXNEZWZpbmVkKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWxJc051bGwpIHtcbiAgICAgICAgICBzZXRMb3cgPSBvdGhJc1JlZmxleGl2ZSAmJiBvdGhJc0RlZmluZWQgJiYgKHJldEhpZ2hlc3QgfHwgIW90aElzTnVsbCk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsSXNTeW1ib2wpIHtcbiAgICAgICAgICBzZXRMb3cgPSBvdGhJc1JlZmxleGl2ZSAmJiBvdGhJc0RlZmluZWQgJiYgIW90aElzTnVsbCAmJiAocmV0SGlnaGVzdCB8fCAhb3RoSXNTeW1ib2wpO1xuICAgICAgICB9IGVsc2UgaWYgKG90aElzTnVsbCB8fCBvdGhJc1N5bWJvbCkge1xuICAgICAgICAgIHNldExvdyA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldExvdyA9IHJldEhpZ2hlc3QgPyAoY29tcHV0ZWQgPD0gdmFsdWUpIDogKGNvbXB1dGVkIDwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXRMb3cpIHtcbiAgICAgICAgICBsb3cgPSBtaWQgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2ggPSBtaWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBuYXRpdmVNaW4oaGlnaCwgTUFYX0FSUkFZX0lOREVYKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb3J0ZWRVbmlxYCBhbmQgYF8uc29ydGVkVW5pcUJ5YCB3aXRob3V0XG4gICAgICogc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU29ydGVkVW5pcShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICByZXNJbmRleCA9IDAsXG4gICAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgICAgICBpZiAoIWluZGV4IHx8ICFlcShjb21wdXRlZCwgc2VlbikpIHtcbiAgICAgICAgICB2YXIgc2VlbiA9IGNvbXB1dGVkO1xuICAgICAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvTnVtYmVyYCB3aGljaCBkb2Vzbid0IGVuc3VyZSBjb3JyZWN0XG4gICAgICogY29udmVyc2lvbnMgb2YgYmluYXJ5LCBoZXhhZGVjaW1hbCwgb3Igb2N0YWwgc3RyaW5nIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBudW1iZXIuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVRvTnVtYmVyKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIE5BTjtcbiAgICAgIH1cbiAgICAgIHJldHVybiArdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gICAgICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAgICAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgdmFsdWVzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICAgICAgfVxuICAgICAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgICAgIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmlxQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlVW5pcShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgaXNDb21tb24gPSB0cnVlLFxuICAgICAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgICAgIHNlZW4gPSByZXN1bHQ7XG5cbiAgICAgIGlmIChjb21wYXJhdG9yKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChsZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgICAgICB2YXIgc2V0ID0gaXRlcmF0ZWUgPyBudWxsIDogY3JlYXRlU2V0KGFycmF5KTtcbiAgICAgICAgaWYgKHNldCkge1xuICAgICAgICAgIHJldHVybiBzZXRUb0FycmF5KHNldCk7XG4gICAgICAgIH1cbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICAgICAgc2VlbiA9IG5ldyBTZXRDYWNoZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBzZWVuID0gaXRlcmF0ZWUgPyBbXSA6IHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIG91dGVyOlxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgICAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgdmFyIHNlZW5JbmRleCA9IHNlZW4ubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChzZWVuSW5kZXgtLSkge1xuICAgICAgICAgICAgaWYgKHNlZW5bc2VlbkluZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdGVyYXRlZSkge1xuICAgICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpbmNsdWRlcyhzZWVuLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgICAgICBpZiAoc2VlbiAhPT0gcmVzdWx0KSB7XG4gICAgICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5zZXRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwcm9wZXJ0eSBwYXRoIHRvIHVuc2V0LlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJvcGVydHkgaXMgZGVsZXRlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VVbnNldChvYmplY3QsIHBhdGgpIHtcbiAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICAgICAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgfHwgZGVsZXRlIG9iamVjdFt0b0tleShsYXN0KHBhdGgpKV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udXBkYXRlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gdXBkYXRlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHVwZGF0ZXIgVGhlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHVwZGF0ZWQgdmFsdWUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgcGF0aCBjcmVhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VVcGRhdGUob2JqZWN0LCBwYXRoLCB1cGRhdGVyLCBjdXN0b21pemVyKSB7XG4gICAgICByZXR1cm4gYmFzZVNldChvYmplY3QsIHBhdGgsIHVwZGF0ZXIoYmFzZUdldChvYmplY3QsIHBhdGgpKSwgY3VzdG9taXplcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmRyb3BXaGlsZWAgYW5kIGBfLnRha2VXaGlsZWBcbiAgICAgKiB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0Ryb3BdIFNwZWNpZnkgZHJvcHBpbmcgZWxlbWVudHMgaW5zdGVhZCBvZiB0YWtpbmcgdGhlbS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVdoaWxlKGFycmF5LCBwcmVkaWNhdGUsIGlzRHJvcCwgZnJvbVJpZ2h0KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGluZGV4ID0gZnJvbVJpZ2h0ID8gbGVuZ3RoIDogLTE7XG5cbiAgICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpICYmXG4gICAgICAgIHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHt9XG5cbiAgICAgIHJldHVybiBpc0Ryb3BcbiAgICAgICAgPyBiYXNlU2xpY2UoYXJyYXksIChmcm9tUmlnaHQgPyAwIDogaW5kZXgpLCAoZnJvbVJpZ2h0ID8gaW5kZXggKyAxIDogbGVuZ3RoKSlcbiAgICAgICAgOiBiYXNlU2xpY2UoYXJyYXksIChmcm9tUmlnaHQgPyBpbmRleCArIDEgOiAwKSwgKGZyb21SaWdodCA/IGxlbmd0aCA6IGluZGV4KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHdyYXBwZXJWYWx1ZWAgd2hpY2ggcmV0dXJucyB0aGUgcmVzdWx0IG9mXG4gICAgICogcGVyZm9ybWluZyBhIHNlcXVlbmNlIG9mIGFjdGlvbnMgb24gdGhlIHVud3JhcHBlZCBgdmFsdWVgLCB3aGVyZSBlYWNoXG4gICAgICogc3VjY2Vzc2l2ZSBhY3Rpb24gaXMgc3VwcGxpZWQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcHJldmlvdXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhY3Rpb25zIEFjdGlvbnMgdG8gcGVyZm9ybSB0byByZXNvbHZlIHRoZSB1bndyYXBwZWQgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VXcmFwcGVyVmFsdWUodmFsdWUsIGFjdGlvbnMpIHtcbiAgICAgIHZhciByZXN1bHQgPSB2YWx1ZTtcbiAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQudmFsdWUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheVJlZHVjZShhY3Rpb25zLCBmdW5jdGlvbihyZXN1bHQsIGFjdGlvbikge1xuICAgICAgICByZXR1cm4gYWN0aW9uLmZ1bmMuYXBwbHkoYWN0aW9uLnRoaXNBcmcsIGFycmF5UHVzaChbcmVzdWx0XSwgYWN0aW9uLmFyZ3MpKTtcbiAgICAgIH0sIHJlc3VsdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLnhvcmAsIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLCB0aGF0IGFjY2VwdHMgYW4gYXJyYXkgb2YgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5cyBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiB2YWx1ZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVhvcihhcnJheXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXlzLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiBsZW5ndGggPyBiYXNlVW5pcShhcnJheXNbMF0pIDogW107XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgYXJyYXkgPSBhcnJheXNbaW5kZXhdLFxuICAgICAgICAgICAgb3RoSW5kZXggPSAtMTtcblxuICAgICAgICB3aGlsZSAoKytvdGhJbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgIGlmIChvdGhJbmRleCAhPSBpbmRleCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGJhc2VEaWZmZXJlbmNlKHJlc3VsdFtpbmRleF0gfHwgYXJyYXksIGFycmF5c1tvdGhJbmRleF0sIGl0ZXJhdGVlLCBjb21wYXJhdG9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihyZXN1bHQsIDEpLCBpdGVyYXRlZSwgY29tcGFyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnppcE9iamVjdGAgd2hpY2ggYXNzaWducyB2YWx1ZXMgdXNpbmcgYGFzc2lnbkZ1bmNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduRnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VaaXBPYmplY3QocHJvcHMsIHZhbHVlcywgYXNzaWduRnVuYykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoLFxuICAgICAgICAgIHZhbHNMZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IHt9O1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBpbmRleCA8IHZhbHNMZW5ndGggPyB2YWx1ZXNbaW5kZXhdIDogdW5kZWZpbmVkO1xuICAgICAgICBhc3NpZ25GdW5jKHJlc3VsdCwgcHJvcHNbaW5kZXhdLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3RzIGB2YWx1ZWAgdG8gYW4gZW1wdHkgYXJyYXkgaWYgaXQncyBub3QgYW4gYXJyYXkgbGlrZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyB0aGUgY2FzdCBhcnJheS1saWtlIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXN0QXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpID8gdmFsdWUgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXN0cyBgdmFsdWVgIHRvIGBpZGVudGl0eWAgaWYgaXQncyBub3QgYSBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgY2FzdCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXN0RnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlIDogaWRlbnRpdHk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FzdFBhdGgodmFsdWUsIG9iamVjdCkge1xuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIGBiYXNlUmVzdGAgYWxpYXMgd2hpY2ggY2FuIGJlIHJlcGxhY2VkIHdpdGggYGlkZW50aXR5YCBieSBtb2R1bGVcbiAgICAgKiByZXBsYWNlbWVudCBwbHVnaW5zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICB2YXIgY2FzdFJlc3QgPSBiYXNlUmVzdDtcblxuICAgIC8qKlxuICAgICAqIENhc3RzIGBhcnJheWAgdG8gYSBzbGljZSBpZiBpdCdzIG5lZWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHNsaWNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhc3RTbGljZShhcnJheSwgc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICAgIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kO1xuICAgICAgcmV0dXJuICghc3RhcnQgJiYgZW5kID49IGxlbmd0aCkgPyBhcnJheSA6IGJhc2VTbGljZShhcnJheSwgc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzaW1wbGUgd3JhcHBlciBhcm91bmQgdGhlIGdsb2JhbCBbYGNsZWFyVGltZW91dGBdKGh0dHBzOi8vbWRuLmlvL2NsZWFyVGltZW91dCkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfE9iamVjdH0gaWQgVGhlIHRpbWVyIGlkIG9yIHRpbWVvdXQgb2JqZWN0IG9mIHRoZSB0aW1lciB0byBjbGVhci5cbiAgICAgKi9cbiAgICB2YXIgY2xlYXJUaW1lb3V0ID0gY3R4Q2xlYXJUaW1lb3V0IHx8IGZ1bmN0aW9uKGlkKSB7XG4gICAgICByZXR1cm4gcm9vdC5jbGVhclRpbWVvdXQoaWQpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgIGBidWZmZXJgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIFRoZSBidWZmZXIgdG8gY2xvbmUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYnVmZmVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lQnVmZmVyKGJ1ZmZlciwgaXNEZWVwKSB7XG4gICAgICBpZiAoaXNEZWVwKSB7XG4gICAgICAgIHJldHVybiBidWZmZXIuc2xpY2UoKTtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGggPSBidWZmZXIubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IGFsbG9jVW5zYWZlID8gYWxsb2NVbnNhZmUobGVuZ3RoKSA6IG5ldyBidWZmZXIuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICAgICAgYnVmZmVyLmNvcHkocmVzdWx0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgICAgIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XG4gICAgICBuZXcgVWludDhBcnJheShyZXN1bHQpLnNldChuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcikpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGRhdGFWaWV3YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFWaWV3IFRoZSBkYXRhIHZpZXcgdG8gY2xvbmUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgZGF0YSB2aWV3LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lRGF0YVZpZXcoZGF0YVZpZXcsIGlzRGVlcCkge1xuICAgICAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIoZGF0YVZpZXcuYnVmZmVyKSA6IGRhdGFWaWV3LmJ1ZmZlcjtcbiAgICAgIHJldHVybiBuZXcgZGF0YVZpZXcuY29uc3RydWN0b3IoYnVmZmVyLCBkYXRhVmlldy5ieXRlT2Zmc2V0LCBkYXRhVmlldy5ieXRlTGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgcmVnZXhwLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlc3VsdCA9IG5ldyByZWdleHAuY29uc3RydWN0b3IocmVnZXhwLnNvdXJjZSwgcmVGbGFncy5leGVjKHJlZ2V4cCkpO1xuICAgICAgcmVzdWx0Lmxhc3RJbmRleCA9IHJlZ2V4cC5sYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGUgYHN5bWJvbGAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3ltYm9sIFRoZSBzeW1ib2wgb2JqZWN0IHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBzeW1ib2wgb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lU3ltYm9sKHN5bWJvbCkge1xuICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHR5cGVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHtcbiAgICAgIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xuICAgICAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcGFyZXMgdmFsdWVzIHRvIHNvcnQgdGhlbSBpbiBhc2NlbmRpbmcgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzb3J0IG9yZGVyIGluZGljYXRvciBmb3IgYHZhbHVlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wYXJlQXNjZW5kaW5nKHZhbHVlLCBvdGhlcikge1xuICAgICAgaWYgKHZhbHVlICE9PSBvdGhlcikge1xuICAgICAgICB2YXIgdmFsSXNEZWZpbmVkID0gdmFsdWUgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHZhbElzTnVsbCA9IHZhbHVlID09PSBudWxsLFxuICAgICAgICAgICAgdmFsSXNSZWZsZXhpdmUgPSB2YWx1ZSA9PT0gdmFsdWUsXG4gICAgICAgICAgICB2YWxJc1N5bWJvbCA9IGlzU3ltYm9sKHZhbHVlKTtcblxuICAgICAgICB2YXIgb3RoSXNEZWZpbmVkID0gb3RoZXIgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG90aElzTnVsbCA9IG90aGVyID09PSBudWxsLFxuICAgICAgICAgICAgb3RoSXNSZWZsZXhpdmUgPSBvdGhlciA9PT0gb3RoZXIsXG4gICAgICAgICAgICBvdGhJc1N5bWJvbCA9IGlzU3ltYm9sKG90aGVyKTtcblxuICAgICAgICBpZiAoKCFvdGhJc051bGwgJiYgIW90aElzU3ltYm9sICYmICF2YWxJc1N5bWJvbCAmJiB2YWx1ZSA+IG90aGVyKSB8fFxuICAgICAgICAgICAgKHZhbElzU3ltYm9sICYmIG90aElzRGVmaW5lZCAmJiBvdGhJc1JlZmxleGl2ZSAmJiAhb3RoSXNOdWxsICYmICFvdGhJc1N5bWJvbCkgfHxcbiAgICAgICAgICAgICh2YWxJc051bGwgJiYgb3RoSXNEZWZpbmVkICYmIG90aElzUmVmbGV4aXZlKSB8fFxuICAgICAgICAgICAgKCF2YWxJc0RlZmluZWQgJiYgb3RoSXNSZWZsZXhpdmUpIHx8XG4gICAgICAgICAgICAhdmFsSXNSZWZsZXhpdmUpIHtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKCF2YWxJc051bGwgJiYgIXZhbElzU3ltYm9sICYmICFvdGhJc1N5bWJvbCAmJiB2YWx1ZSA8IG90aGVyKSB8fFxuICAgICAgICAgICAgKG90aElzU3ltYm9sICYmIHZhbElzRGVmaW5lZCAmJiB2YWxJc1JlZmxleGl2ZSAmJiAhdmFsSXNOdWxsICYmICF2YWxJc1N5bWJvbCkgfHxcbiAgICAgICAgICAgIChvdGhJc051bGwgJiYgdmFsSXNEZWZpbmVkICYmIHZhbElzUmVmbGV4aXZlKSB8fFxuICAgICAgICAgICAgKCFvdGhJc0RlZmluZWQgJiYgdmFsSXNSZWZsZXhpdmUpIHx8XG4gICAgICAgICAgICAhb3RoSXNSZWZsZXhpdmUpIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgYnkgYF8ub3JkZXJCeWAgdG8gY29tcGFyZSBtdWx0aXBsZSBwcm9wZXJ0aWVzIG9mIGEgdmFsdWUgdG8gYW5vdGhlclxuICAgICAqIGFuZCBzdGFibGUgc29ydCB0aGVtLlxuICAgICAqXG4gICAgICogSWYgYG9yZGVyc2AgaXMgdW5zcGVjaWZpZWQsIGFsbCB2YWx1ZXMgYXJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIuIE90aGVyd2lzZSxcbiAgICAgKiBzcGVjaWZ5IGFuIG9yZGVyIG9mIFwiZGVzY1wiIGZvciBkZXNjZW5kaW5nIG9yIFwiYXNjXCIgZm9yIGFzY2VuZGluZyBzb3J0IG9yZGVyXG4gICAgICogb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtib29sZWFuW118c3RyaW5nW119IG9yZGVycyBUaGUgb3JkZXIgdG8gc29ydCBieSBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzb3J0IG9yZGVyIGluZGljYXRvciBmb3IgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGFyZU11bHRpcGxlKG9iamVjdCwgb3RoZXIsIG9yZGVycykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgb2JqQ3JpdGVyaWEgPSBvYmplY3QuY3JpdGVyaWEsXG4gICAgICAgICAgb3RoQ3JpdGVyaWEgPSBvdGhlci5jcml0ZXJpYSxcbiAgICAgICAgICBsZW5ndGggPSBvYmpDcml0ZXJpYS5sZW5ndGgsXG4gICAgICAgICAgb3JkZXJzTGVuZ3RoID0gb3JkZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNvbXBhcmVBc2NlbmRpbmcob2JqQ3JpdGVyaWFbaW5kZXhdLCBvdGhDcml0ZXJpYVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgaWYgKGluZGV4ID49IG9yZGVyc0xlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG9yZGVyID0gb3JkZXJzW2luZGV4XTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0ICogKG9yZGVyID09ICdkZXNjJyA/IC0xIDogMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEZpeGVzIGFuIGBBcnJheSNzb3J0YCBidWcgaW4gdGhlIEpTIGVuZ2luZSBlbWJlZGRlZCBpbiBBZG9iZSBhcHBsaWNhdGlvbnNcbiAgICAgIC8vIHRoYXQgY2F1c2VzIGl0LCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMsIHRvIHByb3ZpZGUgdGhlIHNhbWUgdmFsdWUgZm9yXG4gICAgICAvLyBgb2JqZWN0YCBhbmQgYG90aGVyYC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzEyNDdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAvL1xuICAgICAgLy8gVGhpcyBhbHNvIGVuc3VyZXMgYSBzdGFibGUgc29ydCBpbiBWOCBhbmQgb3RoZXIgZW5naW5lcy5cbiAgICAgIC8vIFNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD05MCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIG9iamVjdC5pbmRleCAtIG90aGVyLmluZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLFxuICAgICAqIHBsYWNlaG9sZGVycywgYW5kIHByb3ZpZGVkIGFyZ3VtZW50cyBpbnRvIGEgc2luZ2xlIGFycmF5IG9mIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBob2xkZXJzIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcG9zZUFyZ3MoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCkge1xuICAgICAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgICAgIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aCxcbiAgICAgICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICAgICAgbGVmdExlbmd0aCA9IHBhcnRpYWxzLmxlbmd0aCxcbiAgICAgICAgICByYW5nZUxlbmd0aCA9IG5hdGl2ZU1heChhcmdzTGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVmdExlbmd0aCArIHJhbmdlTGVuZ3RoKSxcbiAgICAgICAgICBpc1VuY3VycmllZCA9ICFpc0N1cnJpZWQ7XG5cbiAgICAgIHdoaWxlICgrK2xlZnRJbmRleCA8IGxlZnRMZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICAgICAgfVxuICAgICAgd2hpbGUgKCsrYXJnc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgICAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgICAgIHJlc3VsdFtob2xkZXJzW2FyZ3NJbmRleF1dID0gYXJnc1thcmdzSW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3aGlsZSAocmFuZ2VMZW5ndGgtLSkge1xuICAgICAgICByZXN1bHRbbGVmdEluZGV4KytdID0gYXJnc1thcmdzSW5kZXgrK107XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgY29tcG9zZUFyZ3NgIGV4Y2VwdCB0aGF0IHRoZSBhcmd1bWVudHMgY29tcG9zaXRpb25cbiAgICAgKiBpcyB0YWlsb3JlZCBmb3IgYF8ucGFydGlhbFJpZ2h0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gYXBwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcGFyYW1zIHtib29sZWFufSBbaXNDdXJyaWVkXSBTcGVjaWZ5IGNvbXBvc2luZyBmb3IgYSBjdXJyaWVkIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wb3NlQXJnc1JpZ2h0KGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgICBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGgsXG4gICAgICAgICAgaG9sZGVyc0luZGV4ID0gLTEsXG4gICAgICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgICAgIHJpZ2h0SW5kZXggPSAtMSxcbiAgICAgICAgICByaWdodExlbmd0aCA9IHBhcnRpYWxzLmxlbmd0aCxcbiAgICAgICAgICByYW5nZUxlbmd0aCA9IG5hdGl2ZU1heChhcmdzTGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkocmFuZ2VMZW5ndGggKyByaWdodExlbmd0aCksXG4gICAgICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gICAgICB3aGlsZSAoKythcmdzSW5kZXggPCByYW5nZUxlbmd0aCkge1xuICAgICAgICByZXN1bHRbYXJnc0luZGV4XSA9IGFyZ3NbYXJnc0luZGV4XTtcbiAgICAgIH1cbiAgICAgIHZhciBvZmZzZXQgPSBhcmdzSW5kZXg7XG4gICAgICB3aGlsZSAoKytyaWdodEluZGV4IDwgcmlnaHRMZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W29mZnNldCArIHJpZ2h0SW5kZXhdID0gcGFydGlhbHNbcmlnaHRJbmRleF07XG4gICAgICB9XG4gICAgICB3aGlsZSAoKytob2xkZXJzSW5kZXggPCBob2xkZXJzTGVuZ3RoKSB7XG4gICAgICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoKSB7XG4gICAgICAgICAgcmVzdWx0W29mZnNldCArIGhvbGRlcnNbaG9sZGVyc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleCsrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgICAgIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBpc05ldyA9ICFvYmplY3Q7XG4gICAgICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcblxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOZXcpIHtcbiAgICAgICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyBvd24gc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyB0by5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvcHlTeW1ib2xzKHNvdXJjZSwgb2JqZWN0KSB7XG4gICAgICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHMoc291cmNlKSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb3BpZXMgb3duIGFuZCBpbmhlcml0ZWQgc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyB0by5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvcHlTeW1ib2xzSW4oc291cmNlLCBvYmplY3QpIHtcbiAgICAgIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9sc0luKHNvdXJjZSksIG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uZ3JvdXBCeWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGFjY3VtdWxhdG9yIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaW5pdGlhbGl6ZXJdIFRoZSBhY2N1bXVsYXRvciBvYmplY3QgaW5pdGlhbGl6ZXIuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWdncmVnYXRvciBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVBZ2dyZWdhdG9yKHNldHRlciwgaW5pdGlhbGl6ZXIpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUFnZ3JlZ2F0b3IgOiBiYXNlQWdncmVnYXRvcixcbiAgICAgICAgICAgIGFjY3VtdWxhdG9yID0gaW5pdGlhbGl6ZXIgPyBpbml0aWFsaXplcigpIDoge307XG5cbiAgICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgc2V0dGVyLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMiksIGFjY3VtdWxhdG9yKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcbiAgICAgIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aCxcbiAgICAgICAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPiAxID8gc291cmNlc1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgY3VzdG9taXplciA9IChhc3NpZ25lci5sZW5ndGggPiAzICYmIHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicpXG4gICAgICAgICAgPyAobGVuZ3RoLS0sIGN1c3RvbWl6ZXIpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgICAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPCAzID8gdW5kZWZpbmVkIDogY3VzdG9taXplcjtcbiAgICAgICAgICBsZW5ndGggPSAxO1xuICAgICAgICB9XG4gICAgICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICAgICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBiYXNlRWFjaGAgb3IgYGJhc2VFYWNoUmlnaHRgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGEgY29sbGVjdGlvbi5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUJhc2VFYWNoKGVhY2hGdW5jLCBmcm9tUmlnaHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgIHJldHVybiBlYWNoRnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuICAgICAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMSxcbiAgICAgICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KGNvbGxlY3Rpb24pO1xuXG4gICAgICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2luZGV4XSwgaW5kZXgsIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXG4gICAgICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXG4gICAgICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgICAgdmFyIGtleSA9IHByb3BzW2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdO1xuICAgICAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggdGhlIG9wdGlvbmFsIGB0aGlzYFxuICAgICAqIGJpbmRpbmcgb2YgYHRoaXNBcmdgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUJpbmQoZnVuYywgYml0bWFzaywgdGhpc0FyZykge1xuICAgICAgdmFyIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgICAgICBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICAgICAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8ubG93ZXJGaXJzdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2ROYW1lIFRoZSBuYW1lIG9mIHRoZSBgU3RyaW5nYCBjYXNlIG1ldGhvZCB0byB1c2UuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FzZSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVDYXNlRmlyc3QobWV0aG9kTmFtZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgICAgIHZhciBzdHJTeW1ib2xzID0gaGFzVW5pY29kZShzdHJpbmcpXG4gICAgICAgICAgPyBzdHJpbmdUb0FycmF5KHN0cmluZylcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICB2YXIgY2hyID0gc3RyU3ltYm9sc1xuICAgICAgICAgID8gc3RyU3ltYm9sc1swXVxuICAgICAgICAgIDogc3RyaW5nLmNoYXJBdCgwKTtcblxuICAgICAgICB2YXIgdHJhaWxpbmcgPSBzdHJTeW1ib2xzXG4gICAgICAgICAgPyBjYXN0U2xpY2Uoc3RyU3ltYm9scywgMSkuam9pbignJylcbiAgICAgICAgICA6IHN0cmluZy5zbGljZSgxKTtcblxuICAgICAgICByZXR1cm4gY2hyW21ldGhvZE5hbWVdKCkgKyB0cmFpbGluZztcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uY2FtZWxDYXNlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIGNvbWJpbmUgZWFjaCB3b3JkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbXBvdW5kZXIgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQ29tcG91bmRlcihjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICByZXR1cm4gYXJyYXlSZWR1Y2Uod29yZHMoZGVidXJyKHN0cmluZykucmVwbGFjZShyZUFwb3MsICcnKSksIGNhbGxiYWNrLCAnJyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIGFuIGluc3RhbmNlIG9mIGBDdG9yYCByZWdhcmRsZXNzIG9mXG4gICAgICogd2hldGhlciBpdCB3YXMgaW52b2tlZCBhcyBwYXJ0IG9mIGEgYG5ld2AgZXhwcmVzc2lvbiBvciBieSBgY2FsbGAgb3IgYGFwcGx5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gQ3RvciBUaGUgY29uc3RydWN0b3IgdG8gd3JhcC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUN0b3IoQ3Rvcikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBVc2UgYSBgc3dpdGNoYCBzdGF0ZW1lbnQgdG8gd29yayB3aXRoIGNsYXNzIGNvbnN0cnVjdG9ycy4gU2VlXG4gICAgICAgIC8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtZnVuY3Rpb24tb2JqZWN0cy1jYWxsLXRoaXNhcmd1bWVudC1hcmd1bWVudHNsaXN0XG4gICAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEN0b3I7XG4gICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSk7XG4gICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICAgICAgY2FzZSA3OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSwgYXJnc1s2XSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRoaXNCaW5kaW5nID0gYmFzZUNyZWF0ZShDdG9yLnByb3RvdHlwZSksXG4gICAgICAgICAgICByZXN1bHQgPSBDdG9yLmFwcGx5KHRoaXNCaW5kaW5nLCBhcmdzKTtcblxuICAgICAgICAvLyBNaW1pYyB0aGUgY29uc3RydWN0b3IncyBgcmV0dXJuYCBiZWhhdmlvci5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDEzLjIuMiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IHRoaXNCaW5kaW5nO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gZW5hYmxlIGN1cnJ5aW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFyaXR5IFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSkge1xuICAgICAgdmFyIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gICAgICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheShsZW5ndGgpLFxuICAgICAgICAgICAgaW5kZXggPSBsZW5ndGgsXG4gICAgICAgICAgICBwbGFjZWhvbGRlciA9IGdldEhvbGRlcih3cmFwcGVyKTtcblxuICAgICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaG9sZGVycyA9IChsZW5ndGggPCAzICYmIGFyZ3NbMF0gIT09IHBsYWNlaG9sZGVyICYmIGFyZ3NbbGVuZ3RoIC0gMV0gIT09IHBsYWNlaG9sZGVyKVxuICAgICAgICAgID8gW11cbiAgICAgICAgICA6IHJlcGxhY2VIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcblxuICAgICAgICBsZW5ndGggLT0gaG9sZGVycy5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPCBhcml0eSkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVSZWN1cnJ5KFxuICAgICAgICAgICAgZnVuYywgYml0bWFzaywgY3JlYXRlSHlicmlkLCB3cmFwcGVyLnBsYWNlaG9sZGVyLCB1bmRlZmluZWQsXG4gICAgICAgICAgICBhcmdzLCBob2xkZXJzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYXJpdHkgLSBsZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG4gICAgICAgIHJldHVybiBhcHBseShmbiwgdGhpcywgYXJncyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8uZmluZGAgb3IgYF8uZmluZExhc3RgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaW5kSW5kZXhGdW5jIFRoZSBmdW5jdGlvbiB0byBmaW5kIHRoZSBjb2xsZWN0aW9uIGluZGV4LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZpbmQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRmluZChmaW5kSW5kZXhGdW5jKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgcHJlZGljYXRlLCBmcm9tSW5kZXgpIHtcbiAgICAgICAgdmFyIGl0ZXJhYmxlID0gT2JqZWN0KGNvbGxlY3Rpb24pO1xuICAgICAgICBpZiAoIWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdGVlID0gZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKTtcbiAgICAgICAgICBjb2xsZWN0aW9uID0ga2V5cyhjb2xsZWN0aW9uKTtcbiAgICAgICAgICBwcmVkaWNhdGUgPSBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpOyB9O1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbmRleCA9IGZpbmRJbmRleEZ1bmMoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBmcm9tSW5kZXgpO1xuICAgICAgICByZXR1cm4gaW5kZXggPiAtMSA/IGl0ZXJhYmxlW2l0ZXJhdGVlID8gY29sbGVjdGlvbltpbmRleF0gOiBpbmRleF0gOiB1bmRlZmluZWQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgXy5mbG93YCBvciBgXy5mbG93UmlnaHRgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmbG93IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUZsb3coZnJvbVJpZ2h0KSB7XG4gICAgICByZXR1cm4gZmxhdFJlc3QoZnVuY3Rpb24oZnVuY3MpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGZ1bmNzLmxlbmd0aCxcbiAgICAgICAgICAgIGluZGV4ID0gbGVuZ3RoLFxuICAgICAgICAgICAgcHJlcmVxID0gTG9kYXNoV3JhcHBlci5wcm90b3R5cGUudGhydTtcblxuICAgICAgICBpZiAoZnJvbVJpZ2h0KSB7XG4gICAgICAgICAgZnVuY3MucmV2ZXJzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAgICAgdmFyIGZ1bmMgPSBmdW5jc1tpbmRleF07XG4gICAgICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByZXJlcSAmJiAhd3JhcHBlciAmJiBnZXRGdW5jTmFtZShmdW5jKSA9PSAnd3JhcHBlcicpIHtcbiAgICAgICAgICAgIHZhciB3cmFwcGVyID0gbmV3IExvZGFzaFdyYXBwZXIoW10sIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpbmRleCA9IHdyYXBwZXIgPyBpbmRleCA6IGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICBmdW5jID0gZnVuY3NbaW5kZXhdO1xuXG4gICAgICAgICAgdmFyIGZ1bmNOYW1lID0gZ2V0RnVuY05hbWUoZnVuYyksXG4gICAgICAgICAgICAgIGRhdGEgPSBmdW5jTmFtZSA9PSAnd3JhcHBlcicgPyBnZXREYXRhKGZ1bmMpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgaWYgKGRhdGEgJiYgaXNMYXppYWJsZShkYXRhWzBdKSAmJlxuICAgICAgICAgICAgICAgIGRhdGFbMV0gPT0gKFdSQVBfQVJZX0ZMQUcgfCBXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX1BBUlRJQUxfRkxBRyB8IFdSQVBfUkVBUkdfRkxBRykgJiZcbiAgICAgICAgICAgICAgICAhZGF0YVs0XS5sZW5ndGggJiYgZGF0YVs5XSA9PSAxXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgd3JhcHBlciA9IHdyYXBwZXJbZ2V0RnVuY05hbWUoZGF0YVswXSldLmFwcGx5KHdyYXBwZXIsIGRhdGFbM10pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3cmFwcGVyID0gKGZ1bmMubGVuZ3RoID09IDEgJiYgaXNMYXppYWJsZShmdW5jKSlcbiAgICAgICAgICAgICAgPyB3cmFwcGVyW2Z1bmNOYW1lXSgpXG4gICAgICAgICAgICAgIDogd3JhcHBlci50aHJ1KGZ1bmMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICAgIHZhbHVlID0gYXJnc1swXTtcblxuICAgICAgICAgIGlmICh3cmFwcGVyICYmIGFyZ3MubGVuZ3RoID09IDEgJiYgaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB3cmFwcGVyLnBsYW50KHZhbHVlKS52YWx1ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgICAgICAgICByZXN1bHQgPSBsZW5ndGggPyBmdW5jc1tpbmRleF0uYXBwbHkodGhpcywgYXJncykgOiB2YWx1ZTtcblxuICAgICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBmdW5jc1tpbmRleF0uY2FsbCh0aGlzLCByZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIG9wdGlvbmFsIGB0aGlzYFxuICAgICAqIGJpbmRpbmcgb2YgYHRoaXNBcmdgLCBwYXJ0aWFsIGFwcGxpY2F0aW9uLCBhbmQgY3VycnlpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258c3RyaW5nfSBmdW5jIFRoZSBmdW5jdGlvbiBvciBtZXRob2QgbmFtZSB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICAgICAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc1JpZ2h0XSBUaGUgYXJndW1lbnRzIHRvIGFwcGVuZCB0byB0aG9zZSBwcm92aWRlZFxuICAgICAqICB0byB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzUmlnaHRdIFRoZSBgcGFydGlhbHNSaWdodGAgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVIeWJyaWQoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCwgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gICAgICB2YXIgaXNBcnkgPSBiaXRtYXNrICYgV1JBUF9BUllfRkxBRyxcbiAgICAgICAgICBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICAgICAgaXNCaW5kS2V5ID0gYml0bWFzayAmIFdSQVBfQklORF9LRVlfRkxBRyxcbiAgICAgICAgICBpc0N1cnJpZWQgPSBiaXRtYXNrICYgKFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRyksXG4gICAgICAgICAgaXNGbGlwID0gYml0bWFzayAmIFdSQVBfRkxJUF9GTEFHLFxuICAgICAgICAgIEN0b3IgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gICAgICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheShsZW5ndGgpLFxuICAgICAgICAgICAgaW5kZXggPSBsZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQ3VycmllZCkge1xuICAgICAgICAgIHZhciBwbGFjZWhvbGRlciA9IGdldEhvbGRlcih3cmFwcGVyKSxcbiAgICAgICAgICAgICAgaG9sZGVyc0NvdW50ID0gY291bnRIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFydGlhbHMpIHtcbiAgICAgICAgICBhcmdzID0gY29tcG9zZUFyZ3MoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRpYWxzUmlnaHQpIHtcbiAgICAgICAgICBhcmdzID0gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsIGlzQ3VycmllZCk7XG4gICAgICAgIH1cbiAgICAgICAgbGVuZ3RoIC09IGhvbGRlcnNDb3VudDtcbiAgICAgICAgaWYgKGlzQ3VycmllZCAmJiBsZW5ndGggPCBhcml0eSkge1xuICAgICAgICAgIHZhciBuZXdIb2xkZXJzID0gcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuICAgICAgICAgIHJldHVybiBjcmVhdGVSZWN1cnJ5KFxuICAgICAgICAgICAgZnVuYywgYml0bWFzaywgY3JlYXRlSHlicmlkLCB3cmFwcGVyLnBsYWNlaG9sZGVyLCB0aGlzQXJnLFxuICAgICAgICAgICAgYXJncywgbmV3SG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5IC0gbGVuZ3RoXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGhpc0JpbmRpbmcgPSBpc0JpbmQgPyB0aGlzQXJnIDogdGhpcyxcbiAgICAgICAgICAgIGZuID0gaXNCaW5kS2V5ID8gdGhpc0JpbmRpbmdbZnVuY10gOiBmdW5jO1xuXG4gICAgICAgIGxlbmd0aCA9IGFyZ3MubGVuZ3RoO1xuICAgICAgICBpZiAoYXJnUG9zKSB7XG4gICAgICAgICAgYXJncyA9IHJlb3JkZXIoYXJncywgYXJnUG9zKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0ZsaXAgJiYgbGVuZ3RoID4gMSkge1xuICAgICAgICAgIGFyZ3MucmV2ZXJzZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FyeSAmJiBhcnkgPCBsZW5ndGgpIHtcbiAgICAgICAgICBhcmdzLmxlbmd0aCA9IGFyeTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSB7XG4gICAgICAgICAgZm4gPSBDdG9yIHx8IGNyZWF0ZUN0b3IoZm4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5pbnZlcnRCeWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGFjY3VtdWxhdG9yIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB0b0l0ZXJhdGVlIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIGl0ZXJhdGVlcy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBpbnZlcnRlciBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZlcnRlcihzZXR0ZXIsIHRvSXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICAgIHJldHVybiBiYXNlSW52ZXJ0ZXIob2JqZWN0LCBzZXR0ZXIsIHRvSXRlcmF0ZWUoaXRlcmF0ZWUpLCB7fSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbiBvbiB0d28gdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcGVyYXRvciBUaGUgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgdXNlZCBmb3IgYHVuZGVmaW5lZGAgYXJndW1lbnRzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1hdGhlbWF0aWNhbCBvcGVyYXRpb24gZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlTWF0aE9wZXJhdGlvbihvcGVyYXRvciwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIG90aGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG90aGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBvdGhlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCB0eXBlb2Ygb3RoZXIgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYmFzZVRvU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgIG90aGVyID0gYmFzZVRvU3RyaW5nKG90aGVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBiYXNlVG9OdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgb3RoZXIgPSBiYXNlVG9OdW1iZXIob3RoZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQgPSBvcGVyYXRvcih2YWx1ZSwgb3RoZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLm92ZXJgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBhcnJheUZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBpdGVyYXRlZXMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgb3ZlciBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVPdmVyKGFycmF5RnVuYykge1xuICAgICAgcmV0dXJuIGZsYXRSZXN0KGZ1bmN0aW9uKGl0ZXJhdGVlcykge1xuICAgICAgICBpdGVyYXRlZXMgPSBhcnJheU1hcChpdGVyYXRlZXMsIGJhc2VVbmFyeShnZXRJdGVyYXRlZSgpKSk7XG4gICAgICAgIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgdmFyIHRoaXNBcmcgPSB0aGlzO1xuICAgICAgICAgIHJldHVybiBhcnJheUZ1bmMoaXRlcmF0ZWVzLCBmdW5jdGlvbihpdGVyYXRlZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFwcGx5KGl0ZXJhdGVlLCB0aGlzQXJnLCBhcmdzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBwYWRkaW5nIGZvciBgc3RyaW5nYCBiYXNlZCBvbiBgbGVuZ3RoYC4gVGhlIGBjaGFyc2Agc3RyaW5nXG4gICAgICogaXMgdHJ1bmNhdGVkIGlmIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBleGNlZWRzIGBsZW5ndGhgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoIFRoZSBwYWRkaW5nIGxlbmd0aC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPScgJ10gVGhlIHN0cmluZyB1c2VkIGFzIHBhZGRpbmcuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGluZyBmb3IgYHN0cmluZ2AuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUGFkZGluZyhsZW5ndGgsIGNoYXJzKSB7XG4gICAgICBjaGFycyA9IGNoYXJzID09PSB1bmRlZmluZWQgPyAnICcgOiBiYXNlVG9TdHJpbmcoY2hhcnMpO1xuXG4gICAgICB2YXIgY2hhcnNMZW5ndGggPSBjaGFycy5sZW5ndGg7XG4gICAgICBpZiAoY2hhcnNMZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiBjaGFyc0xlbmd0aCA/IGJhc2VSZXBlYXQoY2hhcnMsIGxlbmd0aCkgOiBjaGFycztcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBiYXNlUmVwZWF0KGNoYXJzLCBuYXRpdmVDZWlsKGxlbmd0aCAvIHN0cmluZ1NpemUoY2hhcnMpKSk7XG4gICAgICByZXR1cm4gaGFzVW5pY29kZShjaGFycylcbiAgICAgICAgPyBjYXN0U2xpY2Uoc3RyaW5nVG9BcnJheShyZXN1bHQpLCAwLCBsZW5ndGgpLmpvaW4oJycpXG4gICAgICAgIDogcmVzdWx0LnNsaWNlKDAsIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZ1xuICAgICAqIG9mIGB0aGlzQXJnYCBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICAgICAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUGFydGlhbChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscykge1xuICAgICAgdmFyIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgICAgICBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICAgICAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgICAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgICAgICBsZWZ0SW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlZnRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICAgICAgICBhcmdzID0gQXJyYXkobGVmdExlbmd0aCArIGFyZ3NMZW5ndGgpLFxuICAgICAgICAgICAgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuXG4gICAgICAgIHdoaWxlICgrK2xlZnRJbmRleCA8IGxlZnRMZW5ndGgpIHtcbiAgICAgICAgICBhcmdzW2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChhcmdzTGVuZ3RoLS0pIHtcbiAgICAgICAgICBhcmdzW2xlZnRJbmRleCsrXSA9IGFyZ3VtZW50c1srK2FyZ3NJbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwcGx5KGZuLCBpc0JpbmQgPyB0aGlzQXJnIDogdGhpcywgYXJncyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8ucmFuZ2VgIG9yIGBfLnJhbmdlUmlnaHRgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByYW5nZSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVSYW5nZShmcm9tUmlnaHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihzdGFydCwgZW5kLCBzdGVwKSB7XG4gICAgICAgIGlmIChzdGVwICYmIHR5cGVvZiBzdGVwICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKHN0YXJ0LCBlbmQsIHN0ZXApKSB7XG4gICAgICAgICAgZW5kID0gc3RlcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBFbnN1cmUgdGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gICAgICAgIHN0YXJ0ID0gdG9GaW5pdGUoc3RhcnQpO1xuICAgICAgICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBlbmQgPSBzdGFydDtcbiAgICAgICAgICBzdGFydCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kID0gdG9GaW5pdGUoZW5kKTtcbiAgICAgICAgfVxuICAgICAgICBzdGVwID0gc3RlcCA9PT0gdW5kZWZpbmVkID8gKHN0YXJ0IDwgZW5kID8gMSA6IC0xKSA6IHRvRmluaXRlKHN0ZXApO1xuICAgICAgICByZXR1cm4gYmFzZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXAsIGZyb21SaWdodCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgcmVsYXRpb25hbCBvcGVyYXRpb24gb24gdHdvIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb3BlcmF0b3IgVGhlIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByZWxhdGlvbmFsIG9wZXJhdGlvbiBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKG9wZXJhdG9yKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICAgIGlmICghKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyAmJiB0eXBlb2Ygb3RoZXIgPT0gJ3N0cmluZycpKSB7XG4gICAgICAgICAgdmFsdWUgPSB0b051bWJlcih2YWx1ZSk7XG4gICAgICAgICAgb3RoZXIgPSB0b051bWJlcihvdGhlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wZXJhdG9yKHZhbHVlLCBvdGhlcik7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBjb250aW51ZSBjdXJyeWluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBGdW5jIFRoZSBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGBmdW5jYCB3cmFwcGVyLlxuICAgICAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAgICAgKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVSZWN1cnJ5KGZ1bmMsIGJpdG1hc2ssIHdyYXBGdW5jLCBwbGFjZWhvbGRlciwgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICAgICAgdmFyIGlzQ3VycnkgPSBiaXRtYXNrICYgV1JBUF9DVVJSWV9GTEFHLFxuICAgICAgICAgIG5ld0hvbGRlcnMgPSBpc0N1cnJ5ID8gaG9sZGVycyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBuZXdIb2xkZXJzUmlnaHQgPSBpc0N1cnJ5ID8gdW5kZWZpbmVkIDogaG9sZGVycyxcbiAgICAgICAgICBuZXdQYXJ0aWFscyA9IGlzQ3VycnkgPyBwYXJ0aWFscyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBuZXdQYXJ0aWFsc1JpZ2h0ID0gaXNDdXJyeSA/IHVuZGVmaW5lZCA6IHBhcnRpYWxzO1xuXG4gICAgICBiaXRtYXNrIHw9IChpc0N1cnJ5ID8gV1JBUF9QQVJUSUFMX0ZMQUcgOiBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyk7XG4gICAgICBiaXRtYXNrICY9IH4oaXNDdXJyeSA/IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHIDogV1JBUF9QQVJUSUFMX0ZMQUcpO1xuXG4gICAgICBpZiAoIShiaXRtYXNrICYgV1JBUF9DVVJSWV9CT1VORF9GTEFHKSkge1xuICAgICAgICBiaXRtYXNrICY9IH4oV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUcpO1xuICAgICAgfVxuICAgICAgdmFyIG5ld0RhdGEgPSBbXG4gICAgICAgIGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIG5ld1BhcnRpYWxzLCBuZXdIb2xkZXJzLCBuZXdQYXJ0aWFsc1JpZ2h0LFxuICAgICAgICBuZXdIb2xkZXJzUmlnaHQsIGFyZ1BvcywgYXJ5LCBhcml0eVxuICAgICAgXTtcblxuICAgICAgdmFyIHJlc3VsdCA9IHdyYXBGdW5jLmFwcGx5KHVuZGVmaW5lZCwgbmV3RGF0YSk7XG4gICAgICBpZiAoaXNMYXppYWJsZShmdW5jKSkge1xuICAgICAgICBzZXREYXRhKHJlc3VsdCwgbmV3RGF0YSk7XG4gICAgICB9XG4gICAgICByZXN1bHQucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgICAgIHJldHVybiBzZXRXcmFwVG9TdHJpbmcocmVzdWx0LCBmdW5jLCBiaXRtYXNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5yb3VuZGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2ROYW1lIFRoZSBuYW1lIG9mIHRoZSBgTWF0aGAgbWV0aG9kIHRvIHVzZSB3aGVuIHJvdW5kaW5nLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJvdW5kIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVJvdW5kKG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gTWF0aFttZXRob2ROYW1lXTtcbiAgICAgIHJldHVybiBmdW5jdGlvbihudW1iZXIsIHByZWNpc2lvbikge1xuICAgICAgICBudW1iZXIgPSB0b051bWJlcihudW1iZXIpO1xuICAgICAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24gPT0gbnVsbCA/IDAgOiBuYXRpdmVNaW4odG9JbnRlZ2VyKHByZWNpc2lvbiksIDI5Mik7XG4gICAgICAgIGlmIChwcmVjaXNpb24gJiYgbmF0aXZlSXNGaW5pdGUobnVtYmVyKSkge1xuICAgICAgICAgIC8vIFNoaWZ0IHdpdGggZXhwb25lbnRpYWwgbm90YXRpb24gdG8gYXZvaWQgZmxvYXRpbmctcG9pbnQgaXNzdWVzLlxuICAgICAgICAgIC8vIFNlZSBbTUROXShodHRwczovL21kbi5pby9yb3VuZCNFeGFtcGxlcykgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgICB2YXIgcGFpciA9ICh0b1N0cmluZyhudW1iZXIpICsgJ2UnKS5zcGxpdCgnZScpLFxuICAgICAgICAgICAgICB2YWx1ZSA9IGZ1bmMocGFpclswXSArICdlJyArICgrcGFpclsxXSArIHByZWNpc2lvbikpO1xuXG4gICAgICAgICAgcGFpciA9ICh0b1N0cmluZyh2YWx1ZSkgKyAnZScpLnNwbGl0KCdlJyk7XG4gICAgICAgICAgcmV0dXJuICsocGFpclswXSArICdlJyArICgrcGFpclsxXSAtIHByZWNpc2lvbikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jKG51bWJlcik7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzZXQgb2JqZWN0IG9mIGB2YWx1ZXNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhZGQgdG8gdGhlIHNldC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgc2V0LlxuICAgICAqL1xuICAgIHZhciBjcmVhdGVTZXQgPSAhKFNldCAmJiAoMSAvIHNldFRvQXJyYXkobmV3IFNldChbLC0wXSkpWzFdKSA9PSBJTkZJTklUWSkgPyBub29wIDogZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICByZXR1cm4gbmV3IFNldCh2YWx1ZXMpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8udG9QYWlyc2Agb3IgYF8udG9QYWlyc0luYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBhIGdpdmVuIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBwYWlycyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVUb1BhaXJzKGtleXNGdW5jKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIHZhciB0YWcgPSBnZXRUYWcob2JqZWN0KTtcbiAgICAgICAgaWYgKHRhZyA9PSBtYXBUYWcpIHtcbiAgICAgICAgICByZXR1cm4gbWFwVG9BcnJheShvYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YWcgPT0gc2V0VGFnKSB7XG4gICAgICAgICAgcmV0dXJuIHNldFRvUGFpcnMob2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmFzZVRvUGFpcnMob2JqZWN0LCBrZXlzRnVuYyhvYmplY3QpKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgZWl0aGVyIGN1cnJpZXMgb3IgaW52b2tlcyBgZnVuY2Agd2l0aCBvcHRpb25hbFxuICAgICAqIGB0aGlzYCBiaW5kaW5nIGFuZCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258c3RyaW5nfSBmdW5jIFRoZSBmdW5jdGlvbiBvciBtZXRob2QgbmFtZSB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICAgICAqICAgIDEgLSBgXy5iaW5kYFxuICAgICAqICAgIDIgLSBgXy5iaW5kS2V5YFxuICAgICAqICAgIDQgLSBgXy5jdXJyeWAgb3IgYF8uY3VycnlSaWdodGAgb2YgYSBib3VuZCBmdW5jdGlvblxuICAgICAqICAgIDggLSBgXy5jdXJyeWBcbiAgICAgKiAgIDE2IC0gYF8uY3VycnlSaWdodGBcbiAgICAgKiAgIDMyIC0gYF8ucGFydGlhbGBcbiAgICAgKiAgIDY0IC0gYF8ucGFydGlhbFJpZ2h0YFxuICAgICAqICAxMjggLSBgXy5yZWFyZ2BcbiAgICAgKiAgMjU2IC0gYF8uYXJ5YFxuICAgICAqICA1MTIgLSBgXy5mbGlwYFxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVdyYXAoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICAgICAgdmFyIGlzQmluZEtleSA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfS0VZX0ZMQUc7XG4gICAgICBpZiAoIWlzQmluZEtleSAmJiB0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGggPSBwYXJ0aWFscyA/IHBhcnRpYWxzLmxlbmd0aCA6IDA7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICBiaXRtYXNrICY9IH4oV1JBUF9QQVJUSUFMX0ZMQUcgfCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyk7XG4gICAgICAgIHBhcnRpYWxzID0gaG9sZGVycyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGFyeSA9IGFyeSA9PT0gdW5kZWZpbmVkID8gYXJ5IDogbmF0aXZlTWF4KHRvSW50ZWdlcihhcnkpLCAwKTtcbiAgICAgIGFyaXR5ID0gYXJpdHkgPT09IHVuZGVmaW5lZCA/IGFyaXR5IDogdG9JbnRlZ2VyKGFyaXR5KTtcbiAgICAgIGxlbmd0aCAtPSBob2xkZXJzID8gaG9sZGVycy5sZW5ndGggOiAwO1xuXG4gICAgICBpZiAoYml0bWFzayAmIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsc1JpZ2h0ID0gcGFydGlhbHMsXG4gICAgICAgICAgICBob2xkZXJzUmlnaHQgPSBob2xkZXJzO1xuXG4gICAgICAgIHBhcnRpYWxzID0gaG9sZGVycyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHZhciBkYXRhID0gaXNCaW5kS2V5ID8gdW5kZWZpbmVkIDogZ2V0RGF0YShmdW5jKTtcblxuICAgICAgdmFyIG5ld0RhdGEgPSBbXG4gICAgICAgIGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsXG4gICAgICAgIGFyZ1BvcywgYXJ5LCBhcml0eVxuICAgICAgXTtcblxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgbWVyZ2VEYXRhKG5ld0RhdGEsIGRhdGEpO1xuICAgICAgfVxuICAgICAgZnVuYyA9IG5ld0RhdGFbMF07XG4gICAgICBiaXRtYXNrID0gbmV3RGF0YVsxXTtcbiAgICAgIHRoaXNBcmcgPSBuZXdEYXRhWzJdO1xuICAgICAgcGFydGlhbHMgPSBuZXdEYXRhWzNdO1xuICAgICAgaG9sZGVycyA9IG5ld0RhdGFbNF07XG4gICAgICBhcml0eSA9IG5ld0RhdGFbOV0gPSBuZXdEYXRhWzldID09PSB1bmRlZmluZWRcbiAgICAgICAgPyAoaXNCaW5kS2V5ID8gMCA6IGZ1bmMubGVuZ3RoKVxuICAgICAgICA6IG5hdGl2ZU1heChuZXdEYXRhWzldIC0gbGVuZ3RoLCAwKTtcblxuICAgICAgaWYgKCFhcml0eSAmJiBiaXRtYXNrICYgKFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRykpIHtcbiAgICAgICAgYml0bWFzayAmPSB+KFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRyk7XG4gICAgICB9XG4gICAgICBpZiAoIWJpdG1hc2sgfHwgYml0bWFzayA9PSBXUkFQX0JJTkRfRkxBRykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gY3JlYXRlQmluZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnKTtcbiAgICAgIH0gZWxzZSBpZiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcgfHwgYml0bWFzayA9PSBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpIHtcbiAgICAgICAgcmVzdWx0ID0gY3JlYXRlQ3VycnkoZnVuYywgYml0bWFzaywgYXJpdHkpO1xuICAgICAgfSBlbHNlIGlmICgoYml0bWFzayA9PSBXUkFQX1BBUlRJQUxfRkxBRyB8fCBiaXRtYXNrID09IChXUkFQX0JJTkRfRkxBRyB8IFdSQVBfUEFSVElBTF9GTEFHKSkgJiYgIWhvbGRlcnMubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZVBhcnRpYWwoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gY3JlYXRlSHlicmlkLmFwcGx5KHVuZGVmaW5lZCwgbmV3RGF0YSk7XG4gICAgICB9XG4gICAgICB2YXIgc2V0dGVyID0gZGF0YSA/IGJhc2VTZXREYXRhIDogc2V0RGF0YTtcbiAgICAgIHJldHVybiBzZXRXcmFwVG9TdHJpbmcoc2V0dGVyKHJlc3VsdCwgbmV3RGF0YSksIGZ1bmMsIGJpdG1hc2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgYnkgYF8uZGVmYXVsdHNgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uYXNzaWduSW5gIHVzZSB0byBhc3NpZ24gcHJvcGVydGllc1xuICAgICAqIG9mIHNvdXJjZSBvYmplY3RzIHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QgZm9yIGFsbCBkZXN0aW5hdGlvbiBwcm9wZXJ0aWVzXG4gICAgICogdGhhdCByZXNvbHZlIHRvIGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IG9ialZhbHVlIFRoZSBkZXN0aW5hdGlvbiB2YWx1ZS5cbiAgICAgKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSBzb3VyY2UgdmFsdWUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgcGFyZW50IG9iamVjdCBvZiBgb2JqVmFsdWVgLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3VzdG9tRGVmYXVsdHNBc3NpZ25JbihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gICAgICBpZiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIChlcShvYmpWYWx1ZSwgb2JqZWN0UHJvdG9ba2V5XSkgJiYgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkge1xuICAgICAgICByZXR1cm4gc3JjVmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlZCBieSBgXy5kZWZhdWx0c0RlZXBgIHRvIGN1c3RvbWl6ZSBpdHMgYF8ubWVyZ2VgIHVzZSB0byBtZXJnZSBzb3VyY2VcbiAgICAgKiBvYmplY3RzIGludG8gZGVzdGluYXRpb24gb2JqZWN0cyB0aGF0IGFyZSBwYXNzZWQgdGhydS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSBvYmpWYWx1ZSBUaGUgZGVzdGluYXRpb24gdmFsdWUuXG4gICAgICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgc291cmNlIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gbWVyZ2UuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgcGFyZW50IG9iamVjdCBvZiBgb2JqVmFsdWVgLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHBhcmVudCBvYmplY3Qgb2YgYHNyY1ZhbHVlYC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICAgICAqICBjb3VudGVycGFydHMuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjdXN0b21EZWZhdWx0c01lcmdlKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spIHtcbiAgICAgIGlmIChpc09iamVjdChvYmpWYWx1ZSkgJiYgaXNPYmplY3Qoc3JjVmFsdWUpKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IG1lcmdlIG9iamVjdHMgYW5kIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG9ialZhbHVlKTtcbiAgICAgICAgYmFzZU1lcmdlKG9ialZhbHVlLCBzcmNWYWx1ZSwgdW5kZWZpbmVkLCBjdXN0b21EZWZhdWx0c01lcmdlLCBzdGFjayk7XG4gICAgICAgIHN0YWNrWydkZWxldGUnXShzcmNWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlZCBieSBgXy5vbWl0YCB0byBjdXN0b21pemUgaXRzIGBfLmNsb25lRGVlcGAgdXNlIHRvIG9ubHkgY2xvbmUgcGxhaW5cbiAgICAgKiBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdW5jbG9uZWQgdmFsdWUgb3IgYHVuZGVmaW5lZGAgdG8gZGVmZXIgY2xvbmluZyB0byBgXy5jbG9uZURlZXBgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGN1c3RvbU9taXRDbG9uZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzUGxhaW5PYmplY3QodmFsdWUpID8gdW5kZWZpbmVkIDogdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBhcnJheXMgd2l0aCBzdXBwb3J0IGZvclxuICAgICAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtBcnJheX0gb3RoZXIgVGhlIG90aGVyIGFycmF5IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgYXJyYXlgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlcXVhbEFycmF5cyhhcnJheSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIG90aExlbmd0aCA9IG90aGVyLmxlbmd0aDtcblxuICAgICAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIGFyclN0YWNrZWQgPSBzdGFjay5nZXQoYXJyYXkpO1xuICAgICAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICAgICAgaWYgKGFyclN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gYXJyU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IGFycmF5O1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgcmVzdWx0ID0gdHJ1ZSxcbiAgICAgICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBTZXRDYWNoZSA6IHVuZGVmaW5lZDtcblxuICAgICAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gICAgICBzdGFjay5zZXQob3RoZXIsIGFycmF5KTtcblxuICAgICAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICAgICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XG5cbiAgICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgYXJyVmFsdWUsIGluZGV4LCBvdGhlciwgYXJyYXksIHN0YWNrKVxuICAgICAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wYXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgaWYgKHNlZW4pIHtcbiAgICAgICAgICBpZiAoIWFycmF5U29tZShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghKFxuICAgICAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAgICAgKiB0aGUgc2FtZSBgdG9TdHJpbmdUYWdgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICAgICAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIG9yIGBTdHJpbmdgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCB0YWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgICAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGNhc2UgYm9vbFRhZzpcbiAgICAgICAgY2FzZSBkYXRlVGFnOlxuICAgICAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgICAgICAvLyBDb2VyY2UgYm9vbGVhbnMgdG8gYDFgIG9yIGAwYCBhbmQgZGF0ZXMgdG8gbWlsbGlzZWNvbmRzLlxuICAgICAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICAgICAgY2FzZSBlcnJvclRhZzpcbiAgICAgICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgICAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgICAgIGNhc2UgbWFwVGFnOlxuICAgICAgICAgIHZhciBjb252ZXJ0ID0gbWFwVG9BcnJheTtcblxuICAgICAgICBjYXNlIHNldFRhZzpcbiAgICAgICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgICAgIGNvbnZlcnQgfHwgKGNvbnZlcnQgPSBzZXRUb0FycmF5KTtcblxuICAgICAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICAgICAgaWYgKHN0YWNrZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBiaXRtYXNrIHw9IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUc7XG5cbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGVxdWFsQXJyYXlzKGNvbnZlcnQob2JqZWN0KSwgY29udmVydChvdGhlciksIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgICAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICAgICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICAgICAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICAgICAgb2JqUHJvcHMgPSBnZXRBbGxLZXlzKG9iamVjdCksXG4gICAgICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxuICAgICAgICAgIG90aFByb3BzID0gZ2V0QWxsS2V5cyhvdGhlciksXG4gICAgICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xuXG4gICAgICBpZiAob2JqTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IG9iakxlbmd0aDtcbiAgICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAgIHZhciBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgICAgIGlmICghKGlzUGFydGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIG9ialN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgICAgIGlmIChvYmpTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIG9ialN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBvYmplY3Q7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICAgICAgdmFyIHNraXBDdG9yID0gaXNQYXJ0aWFsO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICAgICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgICAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTtcblxuICAgICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcbiAgICAgICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXG4gICAgICAgICAgICAgIDogY29tcGFyZWRcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgICAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgICAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICAgICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCBmbGF0dGVucyB0aGUgcmVzdCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0UmVzdChmdW5jKSB7XG4gICAgICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgdW5kZWZpbmVkLCBmbGF0dGVuKSwgZnVuYyArICcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkge1xuICAgICAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICAgICAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEFsbEtleXNJbihvYmplY3QpIHtcbiAgICAgIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNJbiwgZ2V0U3ltYm9sc0luKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICAgICAqL1xuICAgIHZhciBnZXREYXRhID0gIW1ldGFNYXAgPyBub29wIDogZnVuY3Rpb24oZnVuYykge1xuICAgICAgcmV0dXJuIG1ldGFNYXAuZ2V0KGZ1bmMpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuYW1lIG9mIGBmdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZnVuY3Rpb24gbmFtZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRGdW5jTmFtZShmdW5jKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gKGZ1bmMubmFtZSArICcnKSxcbiAgICAgICAgICBhcnJheSA9IHJlYWxOYW1lc1tyZXN1bHRdLFxuICAgICAgICAgIGxlbmd0aCA9IGhhc093blByb3BlcnR5LmNhbGwocmVhbE5hbWVzLCByZXN1bHQpID8gYXJyYXkubGVuZ3RoIDogMDtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHZhciBkYXRhID0gYXJyYXlbbGVuZ3RoXSxcbiAgICAgICAgICAgIG90aGVyRnVuYyA9IGRhdGEuZnVuYztcbiAgICAgICAgaWYgKG90aGVyRnVuYyA9PSBudWxsIHx8IG90aGVyRnVuYyA9PSBmdW5jKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGEubmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBhcmd1bWVudCBwbGFjZWhvbGRlciB2YWx1ZSBmb3IgYGZ1bmNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRIb2xkZXIoZnVuYykge1xuICAgICAgdmFyIG9iamVjdCA9IGhhc093blByb3BlcnR5LmNhbGwobG9kYXNoLCAncGxhY2Vob2xkZXInKSA/IGxvZGFzaCA6IGZ1bmM7XG4gICAgICByZXR1cm4gb2JqZWN0LnBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGFwcHJvcHJpYXRlIFwiaXRlcmF0ZWVcIiBmdW5jdGlvbi4gSWYgYF8uaXRlcmF0ZWVgIGlzIGN1c3RvbWl6ZWQsXG4gICAgICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjdXN0b20gbWV0aG9kLCBvdGhlcndpc2UgaXQgcmV0dXJucyBgYmFzZUl0ZXJhdGVlYC5cbiAgICAgKiBJZiBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCB0aGUgY2hvc2VuIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aGVtIGFuZFxuICAgICAqIGl0cyByZXN1bHQgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gW3ZhbHVlXSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgdGhlIGNyZWF0ZWQgaXRlcmF0ZWUuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBjaG9zZW4gZnVuY3Rpb24gb3IgaXRzIHJlc3VsdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRJdGVyYXRlZSgpIHtcbiAgICAgIHZhciByZXN1bHQgPSBsb2Rhc2guaXRlcmF0ZWUgfHwgaXRlcmF0ZWU7XG4gICAgICByZXN1bHQgPSByZXN1bHQgPT09IGl0ZXJhdGVlID8gYmFzZUl0ZXJhdGVlIDogcmVzdWx0O1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyByZXN1bHQoYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0pIDogcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICAgICAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gICAgICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICAgICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICAgICAgOiBkYXRhLm1hcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbWF0Y2ggZGF0YSBvZiBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRNYXRjaERhdGEob2JqZWN0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0ga2V5cyhvYmplY3QpLFxuICAgICAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXG4gICAgICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgICAgIHJlc3VsdFtsZW5ndGhdID0gW2tleSwgdmFsdWUsIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICAgICAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICAgICAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgICAgIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICAgIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICAgIGlmICh1bm1hc2tlZCkge1xuICAgICAgICBpZiAoaXNPd24pIHtcbiAgICAgICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICAgICAqL1xuICAgIHZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICAgIHJldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksIGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgICAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICAgICAqL1xuICAgIHZhciBnZXRTeW1ib2xzSW4gPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgd2hpbGUgKG9iamVjdCkge1xuICAgICAgICBhcnJheVB1c2gocmVzdWx0LCBnZXRTeW1ib2xzKG9iamVjdCkpO1xuICAgICAgICBvYmplY3QgPSBnZXRQcm90b3R5cGUob2JqZWN0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGB0b1N0cmluZ1RhZ2Agb2YgYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAgICAgKi9cbiAgICB2YXIgZ2V0VGFnID0gYmFzZUdldFRhZztcblxuICAgIC8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbiAgICBpZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgICAgIChNYXAgJiYgZ2V0VGFnKG5ldyBNYXApICE9IG1hcFRhZykgfHxcbiAgICAgICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgICAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgICAgIChXZWFrTWFwICYmIGdldFRhZyhuZXcgV2Vha01hcCkgIT0gd2Vha01hcFRhZykpIHtcbiAgICAgIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgICAgIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUuY29uc3RydWN0b3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICAgICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOiByZXR1cm4gcHJvbWlzZVRhZztcbiAgICAgICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2aWV3LCBhcHBseWluZyBhbnkgYHRyYW5zZm9ybXNgIHRvIHRoZSBgc3RhcnRgIGFuZCBgZW5kYCBwb3NpdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgb2YgdGhlIHZpZXcuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSB2aWV3LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHRyYW5zZm9ybXMgVGhlIHRyYW5zZm9ybWF0aW9ucyB0byBhcHBseSB0byB0aGUgdmlldy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBgc3RhcnRgIGFuZCBgZW5kYFxuICAgICAqICBwb3NpdGlvbnMgb2YgdGhlIHZpZXcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0VmlldyhzdGFydCwgZW5kLCB0cmFuc2Zvcm1zKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSB0cmFuc2Zvcm1zLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0cmFuc2Zvcm1zW2luZGV4XSxcbiAgICAgICAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgICAgICAgc3dpdGNoIChkYXRhLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdkcm9wJzogICAgICBzdGFydCArPSBzaXplOyBicmVhaztcbiAgICAgICAgICBjYXNlICdkcm9wUmlnaHQnOiBlbmQgLT0gc2l6ZTsgYnJlYWs7XG4gICAgICAgICAgY2FzZSAndGFrZSc6ICAgICAgZW5kID0gbmF0aXZlTWluKGVuZCwgc3RhcnQgKyBzaXplKTsgYnJlYWs7XG4gICAgICAgICAgY2FzZSAndGFrZVJpZ2h0Jzogc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQsIGVuZCAtIHNpemUpOyBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgJ3N0YXJ0Jzogc3RhcnQsICdlbmQnOiBlbmQgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHRyYWN0cyB3cmFwcGVyIGRldGFpbHMgZnJvbSB0aGUgYHNvdXJjZWAgYm9keSBjb21tZW50LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2UgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdyYXBwZXIgZGV0YWlscy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRXcmFwRGV0YWlscyhzb3VyY2UpIHtcbiAgICAgIHZhciBtYXRjaCA9IHNvdXJjZS5tYXRjaChyZVdyYXBEZXRhaWxzKTtcbiAgICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdLnNwbGl0KHJlU3BsaXREZXRhaWxzKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgcGF0aGAgZXhpc3RzIG9uIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSk7XG4gICAgICAgIGlmICghKHJlc3VsdCA9IG9iamVjdCAhPSBudWxsICYmIGhhc0Z1bmMob2JqZWN0LCBrZXkpKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG9iamVjdCA9IG9iamVjdFtrZXldO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCB8fCArK2luZGV4ICE9IGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgbGVuZ3RoID0gb2JqZWN0ID09IG51bGwgPyAwIDogb2JqZWN0Lmxlbmd0aDtcbiAgICAgIHJldHVybiAhIWxlbmd0aCAmJiBpc0xlbmd0aChsZW5ndGgpICYmIGlzSW5kZXgoa2V5LCBsZW5ndGgpICYmXG4gICAgICAgIChpc0FycmF5KG9iamVjdCkgfHwgaXNBcmd1bWVudHMob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgYW4gYXJyYXkgY2xvbmUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gICAgICAvLyBBZGQgcHJvcGVydGllcyBhc3NpZ25lZCBieSBgUmVnRXhwI2V4ZWNgLlxuICAgICAgaWYgKGxlbmd0aCAmJiB0eXBlb2YgYXJyYXlbMF0gPT0gJ3N0cmluZycgJiYgaGFzT3duUHJvcGVydHkuY2FsbChhcnJheSwgJ2luZGV4JykpIHtcbiAgICAgICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7XG4gICAgICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XG4gICAgICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICAgICAgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKVxuICAgICAgICA6IHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZSBiYXNlZCBvbiBpdHMgYHRvU3RyaW5nVGFnYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY2xvbmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gICAgICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBNYXBgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIGBTZXRgLCBvciBgU3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdCB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBpc0RlZXApIHtcbiAgICAgIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgICAgICByZXR1cm4gY2xvbmVBcnJheUJ1ZmZlcihvYmplY3QpO1xuXG4gICAgICAgIGNhc2UgYm9vbFRhZzpcbiAgICAgICAgY2FzZSBkYXRlVGFnOlxuICAgICAgICAgIHJldHVybiBuZXcgQ3Rvcigrb2JqZWN0KTtcblxuICAgICAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgICAgIHJldHVybiBjbG9uZURhdGFWaWV3KG9iamVjdCwgaXNEZWVwKTtcblxuICAgICAgICBjYXNlIGZsb2F0MzJUYWc6IGNhc2UgZmxvYXQ2NFRhZzpcbiAgICAgICAgY2FzZSBpbnQ4VGFnOiBjYXNlIGludDE2VGFnOiBjYXNlIGludDMyVGFnOlxuICAgICAgICBjYXNlIHVpbnQ4VGFnOiBjYXNlIHVpbnQ4Q2xhbXBlZFRhZzogY2FzZSB1aW50MTZUYWc6IGNhc2UgdWludDMyVGFnOlxuICAgICAgICAgIHJldHVybiBjbG9uZVR5cGVkQXJyYXkob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgICAgIGNhc2UgbWFwVGFnOlxuICAgICAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgICAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAgICAgcmV0dXJuIG5ldyBDdG9yKG9iamVjdCk7XG5cbiAgICAgICAgY2FzZSByZWdleHBUYWc6XG4gICAgICAgICAgcmV0dXJuIGNsb25lUmVnRXhwKG9iamVjdCk7XG5cbiAgICAgICAgY2FzZSBzZXRUYWc6XG4gICAgICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgICAgIHJldHVybiBjbG9uZVN5bWJvbChvYmplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluc2VydHMgd3JhcHBlciBgZGV0YWlsc2AgaW4gYSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIGBzb3VyY2VgIGJvZHkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSB0byBtb2RpZnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBkZXRhaWxzIFRoZSBkZXRhaWxzIHRvIGluc2VydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBtb2RpZmllZCBzb3VyY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCBkZXRhaWxzKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gZGV0YWlscy5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgfVxuICAgICAgdmFyIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgICBkZXRhaWxzW2xhc3RJbmRleF0gPSAobGVuZ3RoID4gMSA/ICcmICcgOiAnJykgKyBkZXRhaWxzW2xhc3RJbmRleF07XG4gICAgICBkZXRhaWxzID0gZGV0YWlscy5qb2luKGxlbmd0aCA+IDIgPyAnLCAnIDogJyAnKTtcbiAgICAgIHJldHVybiBzb3VyY2UucmVwbGFjZShyZVdyYXBDb21tZW50LCAne1xcbi8qIFt3cmFwcGVkIHdpdGggJyArIGRldGFpbHMgKyAnXSAqL1xcbicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmbGF0dGVuYWJsZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkgfHxcbiAgICAgICAgISEoc3ByZWFkYWJsZVN5bWJvbCAmJiB2YWx1ZSAmJiB2YWx1ZVtzcHJlYWRhYmxlU3ltYm9sXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgICAgIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgdmFsdWUgYXJndW1lbnQuXG4gICAgICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAgICAgKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHtcbiAgICAgIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgICAgIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgICAgICA/IChpc0FycmF5TGlrZShvYmplY3QpICYmIGlzSW5kZXgoaW5kZXgsIG9iamVjdC5sZW5ndGgpKVxuICAgICAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICAgICAgKSB7XG4gICAgICAgIHJldHVybiBlcShvYmplY3RbaW5kZXhdLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAgICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xuICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgICAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXG4gICAgICAgIDogKHZhbHVlID09PSBudWxsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBhIGxhenkgY291bnRlcnBhcnQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaGFzIGEgbGF6eSBjb3VudGVycGFydCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTGF6aWFibGUoZnVuYykge1xuICAgICAgdmFyIGZ1bmNOYW1lID0gZ2V0RnVuY05hbWUoZnVuYyksXG4gICAgICAgICAgb3RoZXIgPSBsb2Rhc2hbZnVuY05hbWVdO1xuXG4gICAgICBpZiAodHlwZW9mIG90aGVyICE9ICdmdW5jdGlvbicgfHwgIShmdW5jTmFtZSBpbiBMYXp5V3JhcHBlci5wcm90b3R5cGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChmdW5jID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHZhciBkYXRhID0gZ2V0RGF0YShvdGhlcik7XG4gICAgICByZXR1cm4gISFkYXRhICYmIGZ1bmMgPT09IGRhdGFbMF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICAgICAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYGZ1bmNgIGlzIGNhcGFibGUgb2YgYmVpbmcgbWFza2VkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2thYmxlLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgdmFyIGlzTWFza2FibGUgPSBjb3JlSnNEYXRhID8gaXNGdW5jdGlvbiA6IHN0dWJGYWxzZTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgICAgIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaWYgc3VpdGFibGUgZm9yIHN0cmljdFxuICAgICAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxuICAgICAqIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdFtrZXldID09PSBzcmNWYWx1ZSAmJlxuICAgICAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1lbW9pemVgIHdoaWNoIGNsZWFycyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24nc1xuICAgICAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpIHtcbiAgICAgIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgICAgICBpZiAoY2FjaGUuc2l6ZSA9PT0gTUFYX01FTU9JWkVfU0laRSkge1xuICAgICAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1lcmdlcyB0aGUgZnVuY3Rpb24gbWV0YWRhdGEgb2YgYHNvdXJjZWAgaW50byBgZGF0YWAuXG4gICAgICpcbiAgICAgKiBNZXJnaW5nIG1ldGFkYXRhIHJlZHVjZXMgdGhlIG51bWJlciBvZiB3cmFwcGVycyB1c2VkIHRvIGludm9rZSBhIGZ1bmN0aW9uLlxuICAgICAqIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBtZXRob2RzIGxpa2UgYF8uYmluZGAsIGBfLmN1cnJ5YCwgYW5kIGBfLnBhcnRpYWxgXG4gICAgICogbWF5IGJlIGFwcGxpZWQgcmVnYXJkbGVzcyBvZiBleGVjdXRpb24gb3JkZXIuIE1ldGhvZHMgbGlrZSBgXy5hcnlgIGFuZFxuICAgICAqIGBfLnJlYXJnYCBtb2RpZnkgZnVuY3Rpb24gYXJndW1lbnRzLCBtYWtpbmcgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlXG4gICAgICogZXhlY3V0ZWQgaW1wb3J0YW50LCBwcmV2ZW50aW5nIHRoZSBtZXJnaW5nIG9mIG1ldGFkYXRhLiBIb3dldmVyLCB3ZSBtYWtlXG4gICAgICogYW4gZXhjZXB0aW9uIGZvciBhIHNhZmUgY29tYmluZWQgY2FzZSB3aGVyZSBjdXJyaWVkIGZ1bmN0aW9ucyBoYXZlIGBfLmFyeWBcbiAgICAgKiBhbmQgb3IgYF8ucmVhcmdgIGFwcGxpZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgVGhlIGRlc3RpbmF0aW9uIG1ldGFkYXRhLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgc291cmNlIG1ldGFkYXRhLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgZGF0YWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVyZ2VEYXRhKGRhdGEsIHNvdXJjZSkge1xuICAgICAgdmFyIGJpdG1hc2sgPSBkYXRhWzFdLFxuICAgICAgICAgIHNyY0JpdG1hc2sgPSBzb3VyY2VbMV0sXG4gICAgICAgICAgbmV3Qml0bWFzayA9IGJpdG1hc2sgfCBzcmNCaXRtYXNrLFxuICAgICAgICAgIGlzQ29tbW9uID0gbmV3Qml0bWFzayA8IChXUkFQX0JJTkRfRkxBRyB8IFdSQVBfQklORF9LRVlfRkxBRyB8IFdSQVBfQVJZX0ZMQUcpO1xuXG4gICAgICB2YXIgaXNDb21ibyA9XG4gICAgICAgICgoc3JjQml0bWFzayA9PSBXUkFQX0FSWV9GTEFHKSAmJiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcpKSB8fFxuICAgICAgICAoKHNyY0JpdG1hc2sgPT0gV1JBUF9BUllfRkxBRykgJiYgKGJpdG1hc2sgPT0gV1JBUF9SRUFSR19GTEFHKSAmJiAoZGF0YVs3XS5sZW5ndGggPD0gc291cmNlWzhdKSkgfHxcbiAgICAgICAgKChzcmNCaXRtYXNrID09IChXUkFQX0FSWV9GTEFHIHwgV1JBUF9SRUFSR19GTEFHKSkgJiYgKHNvdXJjZVs3XS5sZW5ndGggPD0gc291cmNlWzhdKSAmJiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcpKTtcblxuICAgICAgLy8gRXhpdCBlYXJseSBpZiBtZXRhZGF0YSBjYW4ndCBiZSBtZXJnZWQuXG4gICAgICBpZiAoIShpc0NvbW1vbiB8fCBpc0NvbWJvKSkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICAgIC8vIFVzZSBzb3VyY2UgYHRoaXNBcmdgIGlmIGF2YWlsYWJsZS5cbiAgICAgIGlmIChzcmNCaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcpIHtcbiAgICAgICAgZGF0YVsyXSA9IHNvdXJjZVsyXTtcbiAgICAgICAgLy8gU2V0IHdoZW4gY3VycnlpbmcgYSBib3VuZCBmdW5jdGlvbi5cbiAgICAgICAgbmV3Qml0bWFzayB8PSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcgPyAwIDogV1JBUF9DVVJSWV9CT1VORF9GTEFHO1xuICAgICAgfVxuICAgICAgLy8gQ29tcG9zZSBwYXJ0aWFsIGFyZ3VtZW50cy5cbiAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVszXTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YXIgcGFydGlhbHMgPSBkYXRhWzNdO1xuICAgICAgICBkYXRhWzNdID0gcGFydGlhbHMgPyBjb21wb3NlQXJncyhwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs0XSkgOiB2YWx1ZTtcbiAgICAgICAgZGF0YVs0XSA9IHBhcnRpYWxzID8gcmVwbGFjZUhvbGRlcnMoZGF0YVszXSwgUExBQ0VIT0xERVIpIDogc291cmNlWzRdO1xuICAgICAgfVxuICAgICAgLy8gQ29tcG9zZSBwYXJ0aWFsIHJpZ2h0IGFyZ3VtZW50cy5cbiAgICAgIHZhbHVlID0gc291cmNlWzVdO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHBhcnRpYWxzID0gZGF0YVs1XTtcbiAgICAgICAgZGF0YVs1XSA9IHBhcnRpYWxzID8gY29tcG9zZUFyZ3NSaWdodChwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs2XSkgOiB2YWx1ZTtcbiAgICAgICAgZGF0YVs2XSA9IHBhcnRpYWxzID8gcmVwbGFjZUhvbGRlcnMoZGF0YVs1XSwgUExBQ0VIT0xERVIpIDogc291cmNlWzZdO1xuICAgICAgfVxuICAgICAgLy8gVXNlIHNvdXJjZSBgYXJnUG9zYCBpZiBhdmFpbGFibGUuXG4gICAgICB2YWx1ZSA9IHNvdXJjZVs3XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBkYXRhWzddID0gdmFsdWU7XG4gICAgICB9XG4gICAgICAvLyBVc2Ugc291cmNlIGBhcnlgIGlmIGl0J3Mgc21hbGxlci5cbiAgICAgIGlmIChzcmNCaXRtYXNrICYgV1JBUF9BUllfRkxBRykge1xuICAgICAgICBkYXRhWzhdID0gZGF0YVs4XSA9PSBudWxsID8gc291cmNlWzhdIDogbmF0aXZlTWluKGRhdGFbOF0sIHNvdXJjZVs4XSk7XG4gICAgICB9XG4gICAgICAvLyBVc2Ugc291cmNlIGBhcml0eWAgaWYgb25lIGlzIG5vdCBwcm92aWRlZC5cbiAgICAgIGlmIChkYXRhWzldID09IG51bGwpIHtcbiAgICAgICAgZGF0YVs5XSA9IHNvdXJjZVs5XTtcbiAgICAgIH1cbiAgICAgIC8vIFVzZSBzb3VyY2UgYGZ1bmNgIGFuZCBtZXJnZSBiaXRtYXNrcy5cbiAgICAgIGRhdGFbMF0gPSBzb3VyY2VbMF07XG4gICAgICBkYXRhWzFdID0gbmV3Qml0bWFzaztcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gICAgICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICAgICAqIGV4Y2VwdCB0aGF0IGl0IGluY2x1ZGVzIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5hdGl2ZUtleXNJbihvYmplY3QpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgICAgIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgICAgIHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0YXJ0LCAwKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICAgICAgfVxuICAgICAgICBpbmRleCA9IC0xO1xuICAgICAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICAgICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoIFRoZSBwYXRoIHRvIGdldCB0aGUgcGFyZW50IHZhbHVlIG9mLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwYXJlbnQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gcGFyZW50KG9iamVjdCwgcGF0aCkge1xuICAgICAgcmV0dXJuIHBhdGgubGVuZ3RoIDwgMiA/IG9iamVjdCA6IGJhc2VHZXQob2JqZWN0LCBiYXNlU2xpY2UocGF0aCwgMCwgLTEpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW9yZGVyIGBhcnJheWAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXhlcyB3aGVyZSB0aGUgZWxlbWVudCBhdFxuICAgICAqIHRoZSBmaXJzdCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgZmlyc3QgZWxlbWVudCwgdGhlIGVsZW1lbnQgYXRcbiAgICAgKiB0aGUgc2Vjb25kIGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBzZWNvbmQgZWxlbWVudCwgYW5kIHNvIG9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcmVvcmRlci5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcnJheSBpbmRleGVzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlb3JkZXIoYXJyYXksIGluZGV4ZXMpIHtcbiAgICAgIHZhciBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWluKGluZGV4ZXMubGVuZ3RoLCBhcnJMZW5ndGgpLFxuICAgICAgICAgIG9sZEFycmF5ID0gY29weUFycmF5KGFycmF5KTtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGluZGV4ZXNbbGVuZ3RoXTtcbiAgICAgICAgYXJyYXlbbGVuZ3RoXSA9IGlzSW5kZXgoaW5kZXgsIGFyckxlbmd0aCkgPyBvbGRBcnJheVtpbmRleF0gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAsIHVubGVzcyBga2V5YCBpcyBcIl9fcHJvdG9fX1wiIG9yIFwiY29uc3RydWN0b3JcIi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XG4gICAgICBpZiAoa2V5ID09PSAnY29uc3RydWN0b3InICYmIHR5cGVvZiBvYmplY3Rba2V5XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgPT0gJ19fcHJvdG9fXycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqZWN0W2tleV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIElmIHRoaXMgZnVuY3Rpb24gYmVjb21lcyBob3QsIGkuZS4gaXMgaW52b2tlZCBhIGxvdCBpbiBhIHNob3J0XG4gICAgICogcGVyaW9kIG9mIHRpbWUsIGl0IHdpbGwgdHJpcCBpdHMgYnJlYWtlciBhbmQgdHJhbnNpdGlvbiB0byBhbiBpZGVudGl0eVxuICAgICAqIGZ1bmN0aW9uIHRvIGF2b2lkIGdhcmJhZ2UgY29sbGVjdGlvbiBwYXVzZXMgaW4gVjguIFNlZVxuICAgICAqIFtWOCBpc3N1ZSAyMDcwXShodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yMDcwKVxuICAgICAqIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSBtZXRhZGF0YSB3aXRoLlxuICAgICAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAgICAgKi9cbiAgICB2YXIgc2V0RGF0YSA9IHNob3J0T3V0KGJhc2VTZXREYXRhKTtcblxuICAgIC8qKlxuICAgICAqIEEgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIHRoZSBnbG9iYWwgW2BzZXRUaW1lb3V0YF0oaHR0cHM6Ly9tZG4uaW8vc2V0VGltZW91dCkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlbGF5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3YWl0IFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5IGludm9jYXRpb24uXG4gICAgICogQHJldHVybnMge251bWJlcnxPYmplY3R9IFJldHVybnMgdGhlIHRpbWVyIGlkIG9yIHRpbWVvdXQgb2JqZWN0LlxuICAgICAqL1xuICAgIHZhciBzZXRUaW1lb3V0ID0gY3R4U2V0VGltZW91dCB8fCBmdW5jdGlvbihmdW5jLCB3YWl0KSB7XG4gICAgICByZXR1cm4gcm9vdC5zZXRUaW1lb3V0KGZ1bmMsIHdhaXQpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICAgICAqL1xuICAgIHZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgd3JhcHBlcmAgdG8gbWltaWMgdGhlIHNvdXJjZSBvZiBgcmVmZXJlbmNlYFxuICAgICAqIHdpdGggd3JhcHBlciBkZXRhaWxzIGluIGEgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgYm9keS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gd3JhcHBlciBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlZmVyZW5jZSBUaGUgcmVmZXJlbmNlIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGB3cmFwcGVyYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXRXcmFwVG9TdHJpbmcod3JhcHBlciwgcmVmZXJlbmNlLCBiaXRtYXNrKSB7XG4gICAgICB2YXIgc291cmNlID0gKHJlZmVyZW5jZSArICcnKTtcbiAgICAgIHJldHVybiBzZXRUb1N0cmluZyh3cmFwcGVyLCBpbnNlcnRXcmFwRGV0YWlscyhzb3VyY2UsIHVwZGF0ZVdyYXBEZXRhaWxzKGdldFdyYXBEZXRhaWxzKHNvdXJjZSksIGJpdG1hc2spKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gICAgICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gICAgICogbWlsbGlzZWNvbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICAgICAgdmFyIGNvdW50ID0gMCxcbiAgICAgICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICAgICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgICAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY291bnQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNodWZmbGVgIHdoaWNoIG11dGF0ZXMgYW5kIHNldHMgdGhlIHNpemUgb2YgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNodWZmbGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPWFycmF5Lmxlbmd0aF0gVGhlIHNpemUgb2YgYGFycmF5YC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzaHVmZmxlU2VsZihhcnJheSwgc2l6ZSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICAgIHNpemUgPSBzaXplID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBzaXplO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBzaXplKSB7XG4gICAgICAgIHZhciByYW5kID0gYmFzZVJhbmRvbShpbmRleCwgbGFzdEluZGV4KSxcbiAgICAgICAgICAgIHZhbHVlID0gYXJyYXlbcmFuZF07XG5cbiAgICAgICAgYXJyYXlbcmFuZF0gPSBhcnJheVtpbmRleF07XG4gICAgICAgIGFycmF5W2luZGV4XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgYXJyYXkubGVuZ3RoID0gc2l6ZTtcbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAgICAgKi9cbiAgICB2YXIgc3RyaW5nVG9QYXRoID0gbWVtb2l6ZUNhcHBlZChmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgICAgICByZXN1bHQucHVzaCgnJyk7XG4gICAgICB9XG4gICAgICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHF1b3RlID8gc3ViU3RyaW5nLnJlcGxhY2UocmVFc2NhcGVDaGFyLCAnJDEnKSA6IChudW1iZXIgfHwgbWF0Y2gpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICAgICAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICAgICAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB3cmFwcGVyIGBkZXRhaWxzYCBiYXNlZCBvbiBgYml0bWFza2AgZmxhZ3MuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gZGV0YWlscyBUaGUgZGV0YWlscyB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGRldGFpbHNgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVwZGF0ZVdyYXBEZXRhaWxzKGRldGFpbHMsIGJpdG1hc2spIHtcbiAgICAgIGFycmF5RWFjaCh3cmFwRmxhZ3MsIGZ1bmN0aW9uKHBhaXIpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gJ18uJyArIHBhaXJbMF07XG4gICAgICAgIGlmICgoYml0bWFzayAmIHBhaXJbMV0pICYmICFhcnJheUluY2x1ZGVzKGRldGFpbHMsIHZhbHVlKSkge1xuICAgICAgICAgIGRldGFpbHMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRldGFpbHMuc29ydCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgd3JhcHBlcmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB3cmFwcGVyIFRoZSB3cmFwcGVyIHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB3cmFwcGVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJDbG9uZSh3cmFwcGVyKSB7XG4gICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgICAgIHJldHVybiB3cmFwcGVyLmNsb25lKCk7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlci5fX3dyYXBwZWRfXywgd3JhcHBlci5fX2NoYWluX18pO1xuICAgICAgcmVzdWx0Ll9fYWN0aW9uc19fID0gY29weUFycmF5KHdyYXBwZXIuX19hY3Rpb25zX18pO1xuICAgICAgcmVzdWx0Ll9faW5kZXhfXyAgPSB3cmFwcGVyLl9faW5kZXhfXztcbiAgICAgIHJlc3VsdC5fX3ZhbHVlc19fID0gd3JhcHBlci5fX3ZhbHVlc19fO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGVsZW1lbnRzIHNwbGl0IGludG8gZ3JvdXBzIHRoZSBsZW5ndGggb2YgYHNpemVgLlxuICAgICAqIElmIGBhcnJheWAgY2FuJ3QgYmUgc3BsaXQgZXZlbmx5LCB0aGUgZmluYWwgY2h1bmsgd2lsbCBiZSB0aGUgcmVtYWluaW5nXG4gICAgICogZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NpemU9MV0gVGhlIGxlbmd0aCBvZiBlYWNoIGNodW5rXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjaHVua3MuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY2h1bmsoWydhJywgJ2InLCAnYycsICdkJ10sIDIpO1xuICAgICAqIC8vID0+IFtbJ2EnLCAnYiddLCBbJ2MnLCAnZCddXVxuICAgICAqXG4gICAgICogXy5jaHVuayhbJ2EnLCAnYicsICdjJywgJ2QnXSwgMyk7XG4gICAgICogLy8gPT4gW1snYScsICdiJywgJ2MnXSwgWydkJ11dXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2h1bmsoYXJyYXksIHNpemUsIGd1YXJkKSB7XG4gICAgICBpZiAoKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoYXJyYXksIHNpemUsIGd1YXJkKSA6IHNpemUgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgc2l6ZSA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaXplID0gbmF0aXZlTWF4KHRvSW50ZWdlcihzaXplKSwgMCk7XG4gICAgICB9XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCB8fCBzaXplIDwgMSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgICByZXN1bHQgPSBBcnJheShuYXRpdmVDZWlsKGxlbmd0aCAvIHNpemUpKTtcblxuICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IGJhc2VTbGljZShhcnJheSwgaW5kZXgsIChpbmRleCArPSBzaXplKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgd2l0aCBhbGwgZmFsc2V5IHZhbHVlcyByZW1vdmVkLiBUaGUgdmFsdWVzIGBmYWxzZWAsIGBudWxsYCxcbiAgICAgKiBgMGAsIGBcIlwiYCwgYHVuZGVmaW5lZGAsIGFuZCBgTmFOYCBhcmUgZmFsc2V5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNvbXBhY3QoWzAsIDEsIGZhbHNlLCAyLCAnJywgM10pO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBhY3QoYXJyYXkpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGFycmF5IGNvbmNhdGVuYXRpbmcgYGFycmF5YCB3aXRoIGFueSBhZGRpdGlvbmFsIGFycmF5c1xuICAgICAqIGFuZC9vciB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29uY2F0ZW5hdGUuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNvbmNhdGVuYXRlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGNvbmNhdGVuYXRlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzFdO1xuICAgICAqIHZhciBvdGhlciA9IF8uY29uY2F0KGFycmF5LCAyLCBbM10sIFtbNF1dKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG90aGVyKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgMywgWzRdXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmNhdCgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGggLSAxKSxcbiAgICAgICAgICBhcnJheSA9IGFyZ3VtZW50c1swXSxcbiAgICAgICAgICBpbmRleCA9IGxlbmd0aDtcblxuICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgYXJnc1tpbmRleCAtIDFdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheVB1c2goaXNBcnJheShhcnJheSkgPyBjb3B5QXJyYXkoYXJyYXkpIDogW2FycmF5XSwgYmFzZUZsYXR0ZW4oYXJncywgMSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgYGFycmF5YCB2YWx1ZXMgbm90IGluY2x1ZGVkIGluIHRoZSBvdGhlciBnaXZlbiBhcnJheXNcbiAgICAgKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gICAgICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxBbGxgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAc2VlIF8ud2l0aG91dCwgXy54b3JcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kaWZmZXJlbmNlKFsyLCAxXSwgWzIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMV1cbiAgICAgKi9cbiAgICB2YXIgZGlmZmVyZW5jZSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICAgICAgPyBiYXNlRGlmZmVyZW5jZShhcnJheSwgYmFzZUZsYXR0ZW4odmFsdWVzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSkpXG4gICAgICAgIDogW107XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmRpZmZlcmVuY2VgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIGFuZCBgdmFsdWVzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uXG4gICAgICogYnkgd2hpY2ggdGhleSdyZSBjb21wYXJlZC4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gICAgICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICAgICAqICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxBbGxCeWAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kaWZmZXJlbmNlQnkoWzIuMSwgMS4yXSwgWzIuMywgMy40XSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4gWzEuMl1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZGlmZmVyZW5jZUJ5KFt7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgW3sgJ3gnOiAxIH1dLCAneCcpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMiB9XVxuICAgICAqL1xuICAgIHZhciBkaWZmZXJlbmNlQnkgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gICAgICB2YXIgaXRlcmF0ZWUgPSBsYXN0KHZhbHVlcyk7XG4gICAgICBpZiAoaXNBcnJheUxpa2VPYmplY3QoaXRlcmF0ZWUpKSB7XG4gICAgICAgIGl0ZXJhdGVlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgICAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5kaWZmZXJlbmNlYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYFxuICAgICAqIHdoaWNoIGlzIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlgIHRvIGB2YWx1ZXNgLiBUaGUgb3JkZXIgYW5kXG4gICAgICogcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGNvbXBhcmF0b3JcbiAgICAgKiBpcyBpbnZva2VkIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbFdpdGhgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dO1xuICAgICAqXG4gICAgICogXy5kaWZmZXJlbmNlV2l0aChvYmplY3RzLCBbeyAneCc6IDEsICd5JzogMiB9XSwgXy5pc0VxdWFsKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDIsICd5JzogMSB9XVxuICAgICAqL1xuICAgIHZhciBkaWZmZXJlbmNlV2l0aCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gbGFzdCh2YWx1ZXMpO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KGNvbXBhcmF0b3IpKSB7XG4gICAgICAgIGNvbXBhcmF0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpXG4gICAgICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpLCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpXG4gICAgICAgIDogW107XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGBuYCBlbGVtZW50cyBkcm9wcGVkIGZyb20gdGhlIGJlZ2lubmluZy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjUuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBkcm9wLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRyb3AoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMiwgM11cbiAgICAgKlxuICAgICAqIF8uZHJvcChbMSwgMiwgM10sIDIpO1xuICAgICAqIC8vID0+IFszXVxuICAgICAqXG4gICAgICogXy5kcm9wKFsxLCAyLCAzXSwgNSk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKlxuICAgICAqIF8uZHJvcChbMSwgMiwgM10sIDApO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRyb3AoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBuID0gKGd1YXJkIHx8IG4gPT09IHVuZGVmaW5lZCkgPyAxIDogdG9JbnRlZ2VyKG4pO1xuICAgICAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgbiA8IDAgPyAwIDogbiwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGBuYCBlbGVtZW50cyBkcm9wcGVkIGZyb20gdGhlIGVuZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBkcm9wLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRyb3BSaWdodChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqXG4gICAgICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdLCAyKTtcbiAgICAgKiAvLyA9PiBbMV1cbiAgICAgKlxuICAgICAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSwgNSk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKlxuICAgICAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSwgMCk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZHJvcFJpZ2h0KGFycmF5LCBuLCBndWFyZCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgbiA9IChndWFyZCB8fCBuID09PSB1bmRlZmluZWQpID8gMSA6IHRvSW50ZWdlcihuKTtcbiAgICAgIG4gPSBsZW5ndGggLSBuO1xuICAgICAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgMCwgbiA8IDAgPyAwIDogbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgZXhjbHVkaW5nIGVsZW1lbnRzIGRyb3BwZWQgZnJvbSB0aGUgZW5kLlxuICAgICAqIEVsZW1lbnRzIGFyZSBkcm9wcGVkIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzXG4gICAgICogaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmRyb3BSaWdodFdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknLCAnZnJlZCddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kcm9wUmlnaHRXaGlsZSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leScsICdmcmVkJywgJ3BlYmJsZXMnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRyb3BSaWdodFdoaWxlKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VXaGlsZShhcnJheSwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgdHJ1ZSwgdHJ1ZSlcbiAgICAgICAgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCBleGNsdWRpbmcgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICogRWxlbWVudHMgYXJlIGRyb3BwZWQgdW50aWwgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5kcm9wV2hpbGUodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kcm9wV2hpbGUodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmRyb3BXaGlsZSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmRyb3BXaGlsZSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnLCAncGViYmxlcyddXG4gICAgICovXG4gICAgZnVuY3Rpb24gZHJvcFdoaWxlKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VXaGlsZShhcnJheSwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgdHJ1ZSlcbiAgICAgICAgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaWxscyBlbGVtZW50cyBvZiBgYXJyYXlgIHdpdGggYHZhbHVlYCBmcm9tIGBzdGFydGAgdXAgdG8sIGJ1dCBub3RcbiAgICAgKiBpbmNsdWRpbmcsIGBlbmRgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjIuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWxsLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGZpbGwgYGFycmF5YCB3aXRoLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDNdO1xuICAgICAqXG4gICAgICogXy5maWxsKGFycmF5LCAnYScpO1xuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYScsICdhJ11cbiAgICAgKlxuICAgICAqIF8uZmlsbChBcnJheSgzKSwgMik7XG4gICAgICogLy8gPT4gWzIsIDIsIDJdXG4gICAgICpcbiAgICAgKiBfLmZpbGwoWzQsIDYsIDgsIDEwXSwgJyonLCAxLCAzKTtcbiAgICAgKiAvLyA9PiBbNCwgJyonLCAnKicsIDEwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbGwoYXJyYXksIHZhbHVlLCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgJiYgdHlwZW9mIHN0YXJ0ICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKGFycmF5LCB2YWx1ZSwgc3RhcnQpKSB7XG4gICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgZW5kID0gbGVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VGaWxsKGFycmF5LCB2YWx1ZSwgc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3RcbiAgICAgKiBlbGVtZW50IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciBpbnN0ZWFkIG9mIHRoZSBlbGVtZW50IGl0c2VsZi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIGVsZW1lbnQsIGVsc2UgYC0xYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maW5kSW5kZXgodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8udXNlciA9PSAnYmFybmV5JzsgfSk7XG4gICAgICogLy8gPT4gMFxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRJbmRleCh1c2VycywgeyAndXNlcic6ICdmcmVkJywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IDFcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRJbmRleCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZEluZGV4KHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gMlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IGZyb21JbmRleCA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICBpbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUZpbmRJbmRleChhcnJheSwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZEluZGV4YCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzXG4gICAgICogb2YgYGNvbGxlY3Rpb25gIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD1hcnJheS5sZW5ndGgtMV0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBlbGVtZW50LCBlbHNlIGAtMWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmluZExhc3RJbmRleCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyID09ICdwZWJibGVzJzsgfSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICogLy8gPT4gMFxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RJbmRleCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IDJcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RJbmRleCh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kTGFzdEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgICAgIGlmIChmcm9tSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpbmRleCA9IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICAgICAgICBpbmRleCA9IGZyb21JbmRleCA8IDBcbiAgICAgICAgICA/IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMClcbiAgICAgICAgICA6IG5hdGl2ZU1pbihpbmRleCwgbGVuZ3RoIC0gMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUZpbmRJbmRleChhcnJheSwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgaW5kZXgsIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZsYXR0ZW5zIGBhcnJheWAgYSBzaW5nbGUgbGV2ZWwgZGVlcC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5mbGF0dGVuKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gICAgICogLy8gPT4gWzEsIDIsIFszLCBbNF1dLCA1XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIHJldHVybiBsZW5ndGggPyBiYXNlRmxhdHRlbihhcnJheSwgMSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWN1cnNpdmVseSBmbGF0dGVucyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmZsYXR0ZW5EZWVwKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIDQsIDVdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdHRlbkRlZXAoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIHJldHVybiBsZW5ndGggPyBiYXNlRmxhdHRlbihhcnJheSwgSU5GSU5JVFkpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVjdXJzaXZlbHkgZmxhdHRlbiBgYXJyYXlgIHVwIHRvIGBkZXB0aGAgdGltZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC40LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2RlcHRoPTFdIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCBbMiwgWzMsIFs0XV0sIDVdXTtcbiAgICAgKlxuICAgICAqIF8uZmxhdHRlbkRlcHRoKGFycmF5LCAxKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgWzMsIFs0XV0sIDVdXG4gICAgICpcbiAgICAgKiBfLmZsYXR0ZW5EZXB0aChhcnJheSwgMik7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIFs0XSwgNV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0dGVuRGVwdGgoYXJyYXksIGRlcHRoKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBkZXB0aCA9IGRlcHRoID09PSB1bmRlZmluZWQgPyAxIDogdG9JbnRlZ2VyKGRlcHRoKTtcbiAgICAgIHJldHVybiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBpbnZlcnNlIG9mIGBfLnRvUGFpcnNgOyB0aGlzIG1ldGhvZCByZXR1cm5zIGFuIG9iamVjdCBjb21wb3NlZFxuICAgICAqIGZyb20ga2V5LXZhbHVlIGBwYWlyc2AuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYWlycyBUaGUga2V5LXZhbHVlIHBhaXJzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZnJvbVBhaXJzKFtbJ2EnLCAxXSwgWydiJywgMl1dKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmcm9tUGFpcnMocGFpcnMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHBhaXJzID09IG51bGwgPyAwIDogcGFpcnMubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IHt9O1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgcGFpciA9IHBhaXJzW2luZGV4XTtcbiAgICAgICAgcmVzdWx0W3BhaXJbMF1dID0gcGFpclsxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGFsaWFzIGZpcnN0XG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaGVhZChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IDFcbiAgICAgKlxuICAgICAqIF8uaGVhZChbXSk7XG4gICAgICogLy8gPT4gdW5kZWZpbmVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGVhZChhcnJheSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYXJyYXlbMF0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYHZhbHVlYCBpcyBmb3VuZCBpbiBgYXJyYXlgXG4gICAgICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCdzIHVzZWQgYXMgdGhlXG4gICAgICogb2Zmc2V0IGZyb20gdGhlIGVuZCBvZiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pbmRleE9mKFsxLCAyLCAxLCAyXSwgMik7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogLy8gU2VhcmNoIGZyb20gdGhlIGBmcm9tSW5kZXhgLlxuICAgICAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIsIDIpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggPT0gbnVsbCA/IDAgOiB0b0ludGVnZXIoZnJvbUluZGV4KTtcbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgaW5kZXggPSBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIGJ1dCB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmluaXRpYWwoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbml0aWFsKGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYmFzZVNsaWNlKGFycmF5LCAwLCAtMSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gYWxsIGdpdmVuIGFycmF5c1xuICAgICAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmVcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBpbnRlcnNlY3RpbmcgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmludGVyc2VjdGlvbihbMiwgMV0sIFsyLCAzXSk7XG4gICAgICogLy8gPT4gWzJdXG4gICAgICovXG4gICAgdmFyIGludGVyc2VjdGlvbiA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIG1hcHBlZCA9IGFycmF5TWFwKGFycmF5cywgY2FzdEFycmF5TGlrZU9iamVjdCk7XG4gICAgICByZXR1cm4gKG1hcHBlZC5sZW5ndGggJiYgbWFwcGVkWzBdID09PSBhcnJheXNbMF0pXG4gICAgICAgID8gYmFzZUludGVyc2VjdGlvbihtYXBwZWQpXG4gICAgICAgIDogW107XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmludGVyc2VjdGlvbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGVhY2ggYGFycmF5c2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvblxuICAgICAqIGJ5IHdoaWNoIHRoZXkncmUgY29tcGFyZWQuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICAgICAqIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDpcbiAgICAgKiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBpbnRlcnNlY3RpbmcgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmludGVyc2VjdGlvbkJ5KFsyLjEsIDEuMl0sIFsyLjMsIDMuNF0sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IFsyLjFdXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmludGVyc2VjdGlvbkJ5KFt7ICd4JzogMSB9XSwgW3sgJ3gnOiAyIH0sIHsgJ3gnOiAxIH1dLCAneCcpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMSB9XVxuICAgICAqL1xuICAgIHZhciBpbnRlcnNlY3Rpb25CeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIGl0ZXJhdGVlID0gbGFzdChhcnJheXMpLFxuICAgICAgICAgIG1hcHBlZCA9IGFycmF5TWFwKGFycmF5cywgY2FzdEFycmF5TGlrZU9iamVjdCk7XG5cbiAgICAgIGlmIChpdGVyYXRlZSA9PT0gbGFzdChtYXBwZWQpKSB7XG4gICAgICAgIGl0ZXJhdGVlID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFwcGVkLnBvcCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChtYXBwZWQubGVuZ3RoICYmIG1hcHBlZFswXSA9PT0gYXJyYXlzWzBdKVxuICAgICAgICA/IGJhc2VJbnRlcnNlY3Rpb24obWFwcGVkLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpXG4gICAgICAgIDogW107XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmludGVyc2VjdGlvbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5c2AuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlc1xuICAgICAqIG9mIHJlc3VsdCB2YWx1ZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LiBUaGUgY29tcGFyYXRvciBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGludGVyc2VjdGluZyB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAgICAgKiB2YXIgb3RoZXJzID0gW3sgJ3gnOiAxLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMiB9XTtcbiAgICAgKlxuICAgICAqIF8uaW50ZXJzZWN0aW9uV2l0aChvYmplY3RzLCBvdGhlcnMsIF8uaXNFcXVhbCk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxLCAneSc6IDIgfV1cbiAgICAgKi9cbiAgICB2YXIgaW50ZXJzZWN0aW9uV2l0aCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIGNvbXBhcmF0b3IgPSBsYXN0KGFycmF5cyksXG4gICAgICAgICAgbWFwcGVkID0gYXJyYXlNYXAoYXJyYXlzLCBjYXN0QXJyYXlMaWtlT2JqZWN0KTtcblxuICAgICAgY29tcGFyYXRvciA9IHR5cGVvZiBjb21wYXJhdG9yID09ICdmdW5jdGlvbicgPyBjb21wYXJhdG9yIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICAgICAgbWFwcGVkLnBvcCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChtYXBwZWQubGVuZ3RoICYmIG1hcHBlZFswXSA9PT0gYXJyYXlzWzBdKVxuICAgICAgICA/IGJhc2VJbnRlcnNlY3Rpb24obWFwcGVkLCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpXG4gICAgICAgIDogW107XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhbGwgZWxlbWVudHMgaW4gYGFycmF5YCBpbnRvIGEgc3RyaW5nIHNlcGFyYXRlZCBieSBgc2VwYXJhdG9yYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb252ZXJ0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VwYXJhdG9yPScsJ10gVGhlIGVsZW1lbnQgc2VwYXJhdG9yLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGpvaW5lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uam9pbihbJ2EnLCAnYicsICdjJ10sICd+Jyk7XG4gICAgICogLy8gPT4gJ2F+Yn5jJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGpvaW4oYXJyYXksIHNlcGFyYXRvcikge1xuICAgICAgcmV0dXJuIGFycmF5ID09IG51bGwgPyAnJyA6IG5hdGl2ZUpvaW4uY2FsbChhcnJheSwgc2VwYXJhdG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubGFzdChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXN0KGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbmRleE9mYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICogYGFycmF5YCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PWFycmF5Lmxlbmd0aC0xXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sYXN0SW5kZXhPZihbMSwgMiwgMSwgMl0sIDIpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIC8vIFNlYXJjaCBmcm9tIHRoZSBgZnJvbUluZGV4YC5cbiAgICAgKiBfLmxhc3RJbmRleE9mKFsxLCAyLCAxLCAyXSwgMiwgMik7XG4gICAgICogLy8gPT4gMVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxhc3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSBsZW5ndGg7XG4gICAgICBpZiAoZnJvbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaW5kZXggPSB0b0ludGVnZXIoZnJvbUluZGV4KTtcbiAgICAgICAgaW5kZXggPSBpbmRleCA8IDAgPyBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApIDogbmF0aXZlTWluKGluZGV4LCBsZW5ndGggLSAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWVcbiAgICAgICAgPyBzdHJpY3RMYXN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGluZGV4KVxuICAgICAgICA6IGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJc05hTiwgaW5kZXgsIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGVsZW1lbnQgYXQgaW5kZXggYG5gIG9mIGBhcnJheWAuIElmIGBuYCBpcyBuZWdhdGl2ZSwgdGhlIG50aFxuICAgICAqIGVsZW1lbnQgZnJvbSB0aGUgZW5kIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MF0gVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIHJldHVybi5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbnRoIGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWydhJywgJ2InLCAnYycsICdkJ107XG4gICAgICpcbiAgICAgKiBfLm50aChhcnJheSwgMSk7XG4gICAgICogLy8gPT4gJ2InXG4gICAgICpcbiAgICAgKiBfLm50aChhcnJheSwgLTIpO1xuICAgICAqIC8vID0+ICdjJztcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBudGgoYXJyYXksIG4pIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGJhc2VOdGgoYXJyYXksIHRvSW50ZWdlcihuKSkgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgZ2l2ZW4gdmFsdWVzIGZyb20gYGFycmF5YCB1c2luZ1xuICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy53aXRob3V0YCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLiBVc2UgYF8ucmVtb3ZlYFxuICAgICAqIHRvIHJlbW92ZSBlbGVtZW50cyBmcm9tIGFuIGFycmF5IGJ5IHByZWRpY2F0ZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWydhJywgJ2InLCAnYycsICdhJywgJ2InLCAnYyddO1xuICAgICAqXG4gICAgICogXy5wdWxsKGFycmF5LCAnYScsICdjJyk7XG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsnYicsICdiJ11cbiAgICAgKi9cbiAgICB2YXIgcHVsbCA9IGJhc2VSZXN0KHB1bGxBbGwpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5wdWxsYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGFuIGFycmF5IG9mIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLmRpZmZlcmVuY2VgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWydhJywgJ2InLCAnYycsICdhJywgJ2InLCAnYyddO1xuICAgICAqXG4gICAgICogXy5wdWxsQWxsKGFycmF5LCBbJ2EnLCAnYyddKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWydiJywgJ2InXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHB1bGxBbGwoYXJyYXksIHZhbHVlcykge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGggJiYgdmFsdWVzICYmIHZhbHVlcy5sZW5ndGgpXG4gICAgICAgID8gYmFzZVB1bGxBbGwoYXJyYXksIHZhbHVlcylcbiAgICAgICAgOiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnB1bGxBbGxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIGFuZCBgdmFsdWVzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uXG4gICAgICogYnkgd2hpY2ggdGhleSdyZSBjb21wYXJlZC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLmRpZmZlcmVuY2VCeWAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gW3sgJ3gnOiAxIH0sIHsgJ3gnOiAyIH0sIHsgJ3gnOiAzIH0sIHsgJ3gnOiAxIH1dO1xuICAgICAqXG4gICAgICogXy5wdWxsQWxsQnkoYXJyYXksIFt7ICd4JzogMSB9LCB7ICd4JzogMyB9XSwgJ3gnKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAyIH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHVsbEFsbEJ5KGFycmF5LCB2YWx1ZXMsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCAmJiB2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aClcbiAgICAgICAgPyBiYXNlUHVsbEFsbChhcnJheSwgdmFsdWVzLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpXG4gICAgICAgIDogYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5wdWxsQWxsYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlgIHRvIGB2YWx1ZXNgLiBUaGUgY29tcGFyYXRvciBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5kaWZmZXJlbmNlV2l0aGAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjYuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMywgJ3knOiA0IH0sIHsgJ3gnOiA1LCAneSc6IDYgfV07XG4gICAgICpcbiAgICAgKiBfLnB1bGxBbGxXaXRoKGFycmF5LCBbeyAneCc6IDMsICd5JzogNCB9XSwgXy5pc0VxdWFsKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDUsICd5JzogNiB9XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHB1bGxBbGxXaXRoKGFycmF5LCB2YWx1ZXMsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoICYmIHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKVxuICAgICAgICA/IGJhc2VQdWxsQWxsKGFycmF5LCB2YWx1ZXMsIHVuZGVmaW5lZCwgY29tcGFyYXRvcilcbiAgICAgICAgOiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGVsZW1lbnRzIGZyb20gYGFycmF5YCBjb3JyZXNwb25kaW5nIHRvIGBpbmRleGVzYCBhbmQgcmV0dXJucyBhblxuICAgICAqIGFycmF5IG9mIHJlbW92ZWQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLmF0YCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0gey4uLihudW1iZXJ8bnVtYmVyW10pfSBbaW5kZXhlc10gVGhlIGluZGV4ZXMgb2YgZWxlbWVudHMgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHJlbW92ZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnZCddO1xuICAgICAqIHZhciBwdWxsZWQgPSBfLnB1bGxBdChhcnJheSwgWzEsIDNdKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYyddXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhwdWxsZWQpO1xuICAgICAqIC8vID0+IFsnYicsICdkJ11cbiAgICAgKi9cbiAgICB2YXIgcHVsbEF0ID0gZmxhdFJlc3QoZnVuY3Rpb24oYXJyYXksIGluZGV4ZXMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSBiYXNlQXQoYXJyYXksIGluZGV4ZXMpO1xuXG4gICAgICBiYXNlUHVsbEF0KGFycmF5LCBhcnJheU1hcChpbmRleGVzLCBmdW5jdGlvbihpbmRleCkge1xuICAgICAgICByZXR1cm4gaXNJbmRleChpbmRleCwgbGVuZ3RoKSA/ICtpbmRleCA6IGluZGV4O1xuICAgICAgfSkuc29ydChjb21wYXJlQXNjZW5kaW5nKSk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBlbGVtZW50cyBmcm9tIGBhcnJheWAgdGhhdCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3JcbiAgICAgKiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGUgcmVtb3ZlZCBlbGVtZW50cy4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uZmlsdGVyYCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLiBVc2UgYF8ucHVsbGBcbiAgICAgKiB0byBwdWxsIGVsZW1lbnRzIGZyb20gYW4gYXJyYXkgYnkgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiByZW1vdmVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMiwgMywgNF07XG4gICAgICogdmFyIGV2ZW5zID0gXy5yZW1vdmUoYXJyYXksIGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICUgMiA9PSAwO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsxLCAzXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coZXZlbnMpO1xuICAgICAqIC8vID0+IFsyLCA0XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlbW92ZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBpZiAoIShhcnJheSAmJiBhcnJheS5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBpbmRleGVzID0gW10sXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICBwcmVkaWNhdGUgPSBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICAgIGluZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJhc2VQdWxsQXQoYXJyYXksIGluZGV4ZXMpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXZlcnNlcyBgYXJyYXlgIHNvIHRoYXQgdGhlIGZpcnN0IGVsZW1lbnQgYmVjb21lcyB0aGUgbGFzdCwgdGhlIHNlY29uZFxuICAgICAqIGVsZW1lbnQgYmVjb21lcyB0aGUgc2Vjb25kIHRvIGxhc3QsIGFuZCBzbyBvbi5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAgYW5kIGlzIGJhc2VkIG9uXG4gICAgICogW2BBcnJheSNyZXZlcnNlYF0oaHR0cHM6Ly9tZG4uaW8vQXJyYXkvcmV2ZXJzZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107XG4gICAgICpcbiAgICAgKiBfLnJldmVyc2UoYXJyYXkpO1xuICAgICAqIC8vID0+IFszLCAyLCAxXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFszLCAyLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJldmVyc2UoYXJyYXkpIHtcbiAgICAgIHJldHVybiBhcnJheSA9PSBudWxsID8gYXJyYXkgOiBuYXRpdmVSZXZlcnNlLmNhbGwoYXJyYXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIGZyb20gYHN0YXJ0YCB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIGBlbmRgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW5zdGVhZCBvZlxuICAgICAqIFtgQXJyYXkjc2xpY2VgXShodHRwczovL21kbi5pby9BcnJheS9zbGljZSkgdG8gZW5zdXJlIGRlbnNlIGFycmF5cyBhcmVcbiAgICAgKiByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBpZiAoZW5kICYmIHR5cGVvZiBlbmQgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoYXJyYXksIHN0YXJ0LCBlbmQpKSB7XG4gICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgZW5kID0gbGVuZ3RoO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHN0YXJ0ID0gc3RhcnQgPT0gbnVsbCA/IDAgOiB0b0ludGVnZXIoc3RhcnQpO1xuICAgICAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvSW50ZWdlcihlbmQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlcyBhIGJpbmFyeSBzZWFyY2ggdG8gZGV0ZXJtaW5lIHRoZSBsb3dlc3QgaW5kZXggYXQgd2hpY2ggYHZhbHVlYFxuICAgICAqIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGBhcnJheWAgaW4gb3JkZXIgdG8gbWFpbnRhaW4gaXRzIHNvcnQgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZEluZGV4KFszMCwgNTBdLCA0MCk7XG4gICAgICogLy8gPT4gMVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGJhc2VTb3J0ZWRJbmRleChhcnJheSwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc29ydGVkSW5kZXhgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYFxuICAgICAqIHdoaWNoIGlzIGludm9rZWQgZm9yIGB2YWx1ZWAgYW5kIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIHRvIGNvbXB1dGUgdGhlaXJcbiAgICAgKiBzb3J0IHJhbmtpbmcuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiA0IH0sIHsgJ3gnOiA1IH1dO1xuICAgICAqXG4gICAgICogXy5zb3J0ZWRJbmRleEJ5KG9iamVjdHMsIHsgJ3gnOiA0IH0sIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ueDsgfSk7XG4gICAgICogLy8gPT4gMFxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5zb3J0ZWRJbmRleEJ5KG9iamVjdHMsIHsgJ3gnOiA0IH0sICd4Jyk7XG4gICAgICogLy8gPT4gMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGJhc2VTb3J0ZWRJbmRleEJ5KGFycmF5LCB2YWx1ZSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmluZGV4T2ZgIGV4Y2VwdCB0aGF0IGl0IHBlcmZvcm1zIGEgYmluYXJ5XG4gICAgICogc2VhcmNoIG9uIGEgc29ydGVkIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29ydGVkSW5kZXhPZihbNCwgNSwgNSwgNSwgNl0sIDUpO1xuICAgICAqIC8vID0+IDFcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRJbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCkge1xuICAgICAgICB2YXIgaW5kZXggPSBiYXNlU29ydGVkSW5kZXgoYXJyYXksIHZhbHVlKTtcbiAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGVxKGFycmF5W2luZGV4XSwgdmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zb3J0ZWRJbmRleGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUgaGlnaGVzdFxuICAgICAqIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkIGludG8gYGFycmF5YCBpbiBvcmRlciB0b1xuICAgICAqIG1haW50YWluIGl0cyBzb3J0IG9yZGVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICogIGludG8gYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRMYXN0SW5kZXgoWzQsIDUsIDUsIDUsIDZdLCA1KTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkTGFzdEluZGV4KGFycmF5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGJhc2VTb3J0ZWRJbmRleChhcnJheSwgdmFsdWUsIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc29ydGVkTGFzdEluZGV4YCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIGZvciBgdmFsdWVgIGFuZCBlYWNoIGVsZW1lbnQgb2YgYGFycmF5YCB0byBjb21wdXRlIHRoZWlyXG4gICAgICogc29ydCByYW5raW5nLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogNCB9LCB7ICd4JzogNSB9XTtcbiAgICAgKlxuICAgICAqIF8uc29ydGVkTGFzdEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgZnVuY3Rpb24obykgeyByZXR1cm4gby54OyB9KTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnNvcnRlZExhc3RJbmRleEJ5KG9iamVjdHMsIHsgJ3gnOiA0IH0sICd4Jyk7XG4gICAgICogLy8gPT4gMVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZExhc3RJbmRleEJ5KGFycmF5LCB2YWx1ZSwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBiYXNlU29ydGVkSW5kZXhCeShhcnJheSwgdmFsdWUsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5sYXN0SW5kZXhPZmAgZXhjZXB0IHRoYXQgaXQgcGVyZm9ybXMgYSBiaW5hcnlcbiAgICAgKiBzZWFyY2ggb24gYSBzb3J0ZWQgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRMYXN0SW5kZXhPZihbNCwgNSwgNSwgNSwgNl0sIDUpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRMYXN0SW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGgpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSwgdHJ1ZSkgLSAxO1xuICAgICAgICBpZiAoZXEoYXJyYXlbaW5kZXhdLCB2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFgIGV4Y2VwdCB0aGF0IGl0J3MgZGVzaWduZWQgYW5kIG9wdGltaXplZFxuICAgICAqIGZvciBzb3J0ZWQgYXJyYXlzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29ydGVkVW5pcShbMSwgMSwgMl0pO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZFVuaXEoYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VTb3J0ZWRVbmlxKGFycmF5KVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcUJ5YCBleGNlcHQgdGhhdCBpdCdzIGRlc2lnbmVkIGFuZCBvcHRpbWl6ZWRcbiAgICAgKiBmb3Igc29ydGVkIGFycmF5cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29ydGVkVW5pcUJ5KFsxLjEsIDEuMiwgMi4zLCAyLjRdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiBbMS4xLCAyLjNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkVW5pcUJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVNvcnRlZFVuaXEoYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSlcbiAgICAgICAgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFsbCBidXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGFpbChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRhaWwoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIHJldHVybiBsZW5ndGggPyBiYXNlU2xpY2UoYXJyYXksIDEsIGxlbmd0aCkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGBuYCBlbGVtZW50cyB0YWtlbiBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gdGFrZS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50YWtlKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gWzFdXG4gICAgICpcbiAgICAgKiBfLnRha2UoWzEsIDIsIDNdLCAyKTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKlxuICAgICAqIF8udGFrZShbMSwgMiwgM10sIDUpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogXy50YWtlKFsxLCAyLCAzXSwgMCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YWtlKGFycmF5LCBuLCBndWFyZCkge1xuICAgICAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBuID0gKGd1YXJkIHx8IG4gPT09IHVuZGVmaW5lZCkgPyAxIDogdG9JbnRlZ2VyKG4pO1xuICAgICAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgMCwgbiA8IDAgPyAwIDogbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgZW5kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHRha2UuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gWzNdXG4gICAgICpcbiAgICAgKiBfLnRha2VSaWdodChbMSwgMiwgM10sIDIpO1xuICAgICAqIC8vID0+IFsyLCAzXVxuICAgICAqXG4gICAgICogXy50YWtlUmlnaHQoWzEsIDIsIDNdLCA1KTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSwgMCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YWtlUmlnaHQoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBuID0gKGd1YXJkIHx8IG4gPT09IHVuZGVmaW5lZCkgPyAxIDogdG9JbnRlZ2VyKG4pO1xuICAgICAgbiA9IGxlbmd0aCAtIG47XG4gICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCBuIDwgMCA/IDAgOiBuLCBsZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgZW5kLiBFbGVtZW50cyBhcmVcbiAgICAgKiB0YWtlbiB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGhcbiAgICAgKiB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy50YWtlUmlnaHRXaGlsZSh1c2VycywgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy50YWtlUmlnaHRXaGlsZSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRha2VSaWdodFdoaWxlKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VXaGlsZShhcnJheSwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgZmFsc2UsIHRydWUpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBlbGVtZW50cyB0YWtlbiBmcm9tIHRoZSBiZWdpbm5pbmcuIEVsZW1lbnRzXG4gICAgICogYXJlIHRha2VuIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aFxuICAgICAqIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8udGFrZVdoaWxlKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnRha2VXaGlsZSh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udGFrZVdoaWxlKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknLCAnZnJlZCddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnRha2VXaGlsZSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IFtdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGFrZVdoaWxlKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VXaGlsZShhcnJheSwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSlcbiAgICAgICAgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXMsIGluIG9yZGVyLCBmcm9tIGFsbCBnaXZlbiBhcnJheXMgdXNpbmdcbiAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21iaW5lZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udW5pb24oWzJdLCBbMSwgMl0pO1xuICAgICAqIC8vID0+IFsyLCAxXVxuICAgICAqL1xuICAgIHZhciB1bmlvbiA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pb25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBvZiBlYWNoIGBhcnJheXNgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnlcbiAgICAgKiB3aGljaCB1bmlxdWVuZXNzIGlzIGNvbXB1dGVkLiBSZXN1bHQgdmFsdWVzIGFyZSBjaG9zZW4gZnJvbSB0aGUgZmlyc3RcbiAgICAgKiBhcnJheSBpbiB3aGljaCB0aGUgdmFsdWUgb2NjdXJzLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDpcbiAgICAgKiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21iaW5lZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udW5pb25CeShbMi4xXSwgWzEuMiwgMi4zXSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4gWzIuMSwgMS4yXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy51bmlvbkJ5KFt7ICd4JzogMSB9XSwgW3sgJ3gnOiAyIH0sIHsgJ3gnOiAxIH1dLCAneCcpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMSB9LCB7ICd4JzogMiB9XVxuICAgICAqL1xuICAgIHZhciB1bmlvbkJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgaXRlcmF0ZWUgPSBsYXN0KGFycmF5cyk7XG4gICAgICBpZiAoaXNBcnJheUxpa2VPYmplY3QoaXRlcmF0ZWUpKSB7XG4gICAgICAgIGl0ZXJhdGVlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlvbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAgd2hpY2hcbiAgICAgKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5c2AuIFJlc3VsdCB2YWx1ZXMgYXJlIGNob3NlbiBmcm9tXG4gICAgICogdGhlIGZpcnN0IGFycmF5IGluIHdoaWNoIHRoZSB2YWx1ZSBvY2N1cnMuIFRoZSBjb21wYXJhdG9yIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tYmluZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfV07XG4gICAgICogdmFyIG90aGVycyA9IFt7ICd4JzogMSwgJ3knOiAxIH0sIHsgJ3gnOiAxLCAneSc6IDIgfV07XG4gICAgICpcbiAgICAgKiBfLnVuaW9uV2l0aChvYmplY3RzLCBvdGhlcnMsIF8uaXNFcXVhbCk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAxIH1dXG4gICAgICovXG4gICAgdmFyIHVuaW9uV2l0aCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIGNvbXBhcmF0b3IgPSBsYXN0KGFycmF5cyk7XG4gICAgICBjb21wYXJhdG9yID0gdHlwZW9mIGNvbXBhcmF0b3IgPT0gJ2Z1bmN0aW9uJyA/IGNvbXBhcmF0b3IgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4oYXJyYXlzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSksIHVuZGVmaW5lZCwgY29tcGFyYXRvcik7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiBhbiBhcnJheSwgdXNpbmdcbiAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucywgaW4gd2hpY2ggb25seSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBlYWNoIGVsZW1lbnRcbiAgICAgKiBpcyBrZXB0LiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyXG4gICAgICogaW4gdGhlIGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udW5pcShbMiwgMSwgMl0pO1xuICAgICAqIC8vID0+IFsyLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuaXEoYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGJhc2VVbmlxKGFycmF5KSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IGluIGBhcnJheWAgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvbiBieSB3aGljaFxuICAgICAqIHVuaXF1ZW5lc3MgaXMgY29tcHV0ZWQuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzIGRldGVybWluZWQgYnkgdGhlXG4gICAgICogb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICAgICAqICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udW5pcUJ5KFsyLjEsIDEuMiwgMi4zXSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4gWzIuMSwgMS4yXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy51bmlxQnkoW3sgJ3gnOiAxIH0sIHsgJ3gnOiAyIH0sIHsgJ3gnOiAxIH1dLCAneCcpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMSB9LCB7ICd4JzogMiB9XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuaXFCeShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGJhc2VVbmlxKGFycmF5LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlxYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlgLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpc1xuICAgICAqIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5LlRoZSBjb21wYXJhdG9yIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH0sIHsgJ3gnOiAxLCAneSc6IDIgfV07XG4gICAgICpcbiAgICAgKiBfLnVuaXFXaXRoKG9iamVjdHMsIF8uaXNFcXVhbCk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuaXFXaXRoKGFycmF5LCBjb21wYXJhdG9yKSB7XG4gICAgICBjb21wYXJhdG9yID0gdHlwZW9mIGNvbXBhcmF0b3IgPT0gJ2Z1bmN0aW9uJyA/IGNvbXBhcmF0b3IgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBiYXNlVW5pcShhcnJheSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uemlwYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGFuIGFycmF5IG9mIGdyb3VwZWRcbiAgICAgKiBlbGVtZW50cyBhbmQgY3JlYXRlcyBhbiBhcnJheSByZWdyb3VwaW5nIHRoZSBlbGVtZW50cyB0byB0aGVpciBwcmUtemlwXG4gICAgICogY29uZmlndXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjIuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzIHRvIHByb2Nlc3MuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVncm91cGVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgemlwcGVkID0gXy56aXAoWydhJywgJ2InXSwgWzEsIDJdLCBbdHJ1ZSwgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBbWydhJywgMSwgdHJ1ZV0sIFsnYicsIDIsIGZhbHNlXV1cbiAgICAgKlxuICAgICAqIF8udW56aXAoemlwcGVkKTtcbiAgICAgKiAvLyA9PiBbWydhJywgJ2InXSwgWzEsIDJdLCBbdHJ1ZSwgZmFsc2VdXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuemlwKGFycmF5KSB7XG4gICAgICBpZiAoIShhcnJheSAmJiBhcnJheS5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGggPSAwO1xuICAgICAgYXJyYXkgPSBhcnJheUZpbHRlcihhcnJheSwgZnVuY3Rpb24oZ3JvdXApIHtcbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KGdyb3VwKSkge1xuICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChncm91cC5sZW5ndGgsIGxlbmd0aCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGJhc2VUaW1lcyhsZW5ndGgsIGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICAgIHJldHVybiBhcnJheU1hcChhcnJheSwgYmFzZVByb3BlcnR5KGluZGV4KSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuemlwYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgdG8gc3BlY2lmeVxuICAgICAqIGhvdyByZWdyb3VwZWQgdmFsdWVzIHNob3VsZCBiZSBjb21iaW5lZC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aGVcbiAgICAgKiBlbGVtZW50cyBvZiBlYWNoIGdyb3VwOiAoLi4uZ3JvdXApLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIHRvIGNvbWJpbmVcbiAgICAgKiAgcmVncm91cGVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiByZWdyb3VwZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB6aXBwZWQgPSBfLnppcChbMSwgMl0sIFsxMCwgMjBdLCBbMTAwLCAyMDBdKTtcbiAgICAgKiAvLyA9PiBbWzEsIDEwLCAxMDBdLCBbMiwgMjAsIDIwMF1dXG4gICAgICpcbiAgICAgKiBfLnVuemlwV2l0aCh6aXBwZWQsIF8uYWRkKTtcbiAgICAgKiAvLyA9PiBbMywgMzAsIDMwMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bnppcFdpdGgoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICBpZiAoIShhcnJheSAmJiBhcnJheS5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSB1bnppcChhcnJheSk7XG4gICAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5TWFwKHJlc3VsdCwgZnVuY3Rpb24oZ3JvdXApIHtcbiAgICAgICAgcmV0dXJuIGFwcGx5KGl0ZXJhdGVlLCB1bmRlZmluZWQsIGdyb3VwKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgZXhjbHVkaW5nIGFsbCBnaXZlbiB2YWx1ZXMgdXNpbmdcbiAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbGAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0gey4uLip9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQHNlZSBfLmRpZmZlcmVuY2UsIF8ueG9yXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ud2l0aG91dChbMiwgMSwgMiwgM10sIDEsIDIpO1xuICAgICAqIC8vID0+IFszXVxuICAgICAqL1xuICAgIHZhciB3aXRob3V0ID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksIHZhbHVlcykge1xuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgICAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCB2YWx1ZXMpXG4gICAgICAgIDogW107XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXMgdGhhdCBpcyB0aGVcbiAgICAgKiBbc3ltbWV0cmljIGRpZmZlcmVuY2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5bW1ldHJpY19kaWZmZXJlbmNlKVxuICAgICAqIG9mIHRoZSBnaXZlbiBhcnJheXMuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyXG4gICAgICogdGhleSBvY2N1ciBpbiB0aGUgYXJyYXlzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuNC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAc2VlIF8uZGlmZmVyZW5jZSwgXy53aXRob3V0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ueG9yKFsyLCAxXSwgWzIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMSwgM11cbiAgICAgKi9cbiAgICB2YXIgeG9yID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICByZXR1cm4gYmFzZVhvcihhcnJheUZpbHRlcihhcnJheXMsIGlzQXJyYXlMaWtlT2JqZWN0KSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnhvcmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGVhY2ggYGFycmF5c2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvbiBieVxuICAgICAqIHdoaWNoIGJ5IHdoaWNoIHRoZXkncmUgY29tcGFyZWQuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzIGRldGVybWluZWRcbiAgICAgKiBieSB0aGUgb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXlzLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZVxuICAgICAqIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ueG9yQnkoWzIuMSwgMS4yXSwgWzIuMywgMy40XSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4gWzEuMiwgMy40XVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy54b3JCeShbeyAneCc6IDEgfV0sIFt7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgJ3gnKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDIgfV1cbiAgICAgKi9cbiAgICB2YXIgeG9yQnkgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGxhc3QoYXJyYXlzKTtcbiAgICAgIGlmIChpc0FycmF5TGlrZU9iamVjdChpdGVyYXRlZSkpIHtcbiAgICAgICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVhvcihhcnJheUZpbHRlcihhcnJheXMsIGlzQXJyYXlMaWtlT2JqZWN0KSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ueG9yYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlzYC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXNcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyIGluIHRoZSBhcnJheXMuIFRoZSBjb21wYXJhdG9yIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfV07XG4gICAgICogdmFyIG90aGVycyA9IFt7ICd4JzogMSwgJ3knOiAxIH0sIHsgJ3gnOiAxLCAneSc6IDIgfV07XG4gICAgICpcbiAgICAgKiBfLnhvcldpdGgob2JqZWN0cywgb3RoZXJzLCBfLmlzRXF1YWwpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMiwgJ3knOiAxIH0sIHsgJ3gnOiAxLCAneSc6IDEgfV1cbiAgICAgKi9cbiAgICB2YXIgeG9yV2l0aCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIGNvbXBhcmF0b3IgPSBsYXN0KGFycmF5cyk7XG4gICAgICBjb21wYXJhdG9yID0gdHlwZW9mIGNvbXBhcmF0b3IgPT0gJ2Z1bmN0aW9uJyA/IGNvbXBhcmF0b3IgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gYmFzZVhvcihhcnJheUZpbHRlcihhcnJheXMsIGlzQXJyYXlMaWtlT2JqZWN0KSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cywgdGhlIGZpcnN0IG9mIHdoaWNoIGNvbnRhaW5zIHRoZVxuICAgICAqIGZpcnN0IGVsZW1lbnRzIG9mIHRoZSBnaXZlbiBhcnJheXMsIHRoZSBzZWNvbmQgb2Ygd2hpY2ggY29udGFpbnMgdGhlXG4gICAgICogc2Vjb25kIGVsZW1lbnRzIG9mIHRoZSBnaXZlbiBhcnJheXMsIGFuZCBzbyBvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnppcChbJ2EnLCAnYiddLCBbMSwgMl0sIFt0cnVlLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IFtbJ2EnLCAxLCB0cnVlXSwgWydiJywgMiwgZmFsc2VdXVxuICAgICAqL1xuICAgIHZhciB6aXAgPSBiYXNlUmVzdCh1bnppcCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZyb21QYWlyc2AgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyB0d28gYXJyYXlzLFxuICAgICAqIG9uZSBvZiBwcm9wZXJ0eSBpZGVudGlmaWVycyBhbmQgb25lIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gW3Byb3BzPVtdXSBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlcz1bXV0gVGhlIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnppcE9iamVjdChbJ2EnLCAnYiddLCBbMSwgMl0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHppcE9iamVjdChwcm9wcywgdmFsdWVzKSB7XG4gICAgICByZXR1cm4gYmFzZVppcE9iamVjdChwcm9wcyB8fCBbXSwgdmFsdWVzIHx8IFtdLCBhc3NpZ25WYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy56aXBPYmplY3RgIGV4Y2VwdCB0aGF0IGl0IHN1cHBvcnRzIHByb3BlcnR5IHBhdGhzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gW3Byb3BzPVtdXSBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlcz1bXV0gVGhlIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnppcE9iamVjdERlZXAoWydhLmJbMF0uYycsICdhLmJbMV0uZCddLCBbMSwgMl0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiB7ICdiJzogW3sgJ2MnOiAxIH0sIHsgJ2QnOiAyIH1dIH0gfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHppcE9iamVjdERlZXAocHJvcHMsIHZhbHVlcykge1xuICAgICAgcmV0dXJuIGJhc2VaaXBPYmplY3QocHJvcHMgfHwgW10sIHZhbHVlcyB8fCBbXSwgYmFzZVNldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy56aXBgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB0byBzcGVjaWZ5XG4gICAgICogaG93IGdyb3VwZWQgdmFsdWVzIHNob3VsZCBiZSBjb21iaW5lZC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aGVcbiAgICAgKiBlbGVtZW50cyBvZiBlYWNoIGdyb3VwOiAoLi4uZ3JvdXApLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBwcm9jZXNzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gdG8gY29tYmluZVxuICAgICAqICBncm91cGVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnppcFdpdGgoWzEsIDJdLCBbMTAsIDIwXSwgWzEwMCwgMjAwXSwgZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAqICAgcmV0dXJuIGEgKyBiICsgYztcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBbMTExLCAyMjJdXG4gICAgICovXG4gICAgdmFyIHppcFdpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheXMubGVuZ3RoLFxuICAgICAgICAgIGl0ZXJhdGVlID0gbGVuZ3RoID4gMSA/IGFycmF5c1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaXRlcmF0ZWUgPSB0eXBlb2YgaXRlcmF0ZWUgPT0gJ2Z1bmN0aW9uJyA/IChhcnJheXMucG9wKCksIGl0ZXJhdGVlKSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB1bnppcFdpdGgoYXJyYXlzLCBpdGVyYXRlZSk7XG4gICAgfSk7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZSB0aGF0IHdyYXBzIGB2YWx1ZWAgd2l0aCBleHBsaWNpdCBtZXRob2RcbiAgICAgKiBjaGFpbiBzZXF1ZW5jZXMgZW5hYmxlZC4gVGhlIHJlc3VsdCBvZiBzdWNoIHNlcXVlbmNlcyBtdXN0IGJlIHVud3JhcHBlZFxuICAgICAqIHdpdGggYF8jdmFsdWVgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMy4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhZ2UnOiAzNiB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIHZhciB5b3VuZ2VzdCA9IF9cbiAgICAgKiAgIC5jaGFpbih1c2VycylcbiAgICAgKiAgIC5zb3J0QnkoJ2FnZScpXG4gICAgICogICAubWFwKGZ1bmN0aW9uKG8pIHtcbiAgICAgKiAgICAgcmV0dXJuIG8udXNlciArICcgaXMgJyArIG8uYWdlO1xuICAgICAqICAgfSlcbiAgICAgKiAgIC5oZWFkKClcbiAgICAgKiAgIC52YWx1ZSgpO1xuICAgICAqIC8vID0+ICdwZWJibGVzIGlzIDEnXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2hhaW4odmFsdWUpIHtcbiAgICAgIHZhciByZXN1bHQgPSBsb2Rhc2godmFsdWUpO1xuICAgICAgcmVzdWx0Ll9fY2hhaW5fXyA9IHRydWU7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGludm9rZXMgYGludGVyY2VwdG9yYCBhbmQgcmV0dXJucyBgdmFsdWVgLiBUaGUgaW50ZXJjZXB0b3JcbiAgICAgKiBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OyAodmFsdWUpLiBUaGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0b1xuICAgICAqIFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFpbiBzZXF1ZW5jZSBpbiBvcmRlciB0byBtb2RpZnkgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvdmlkZSB0byBgaW50ZXJjZXB0b3JgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGludGVyY2VwdG9yIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXyhbMSwgMiwgM10pXG4gICAgICogIC50YXAoZnVuY3Rpb24oYXJyYXkpIHtcbiAgICAgKiAgICAvLyBNdXRhdGUgaW5wdXQgYXJyYXkuXG4gICAgICogICAgYXJyYXkucG9wKCk7XG4gICAgICogIH0pXG4gICAgICogIC5yZXZlcnNlKClcbiAgICAgKiAgLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWzIsIDFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGFwKHZhbHVlLCBpbnRlcmNlcHRvcikge1xuICAgICAgaW50ZXJjZXB0b3IodmFsdWUpO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udGFwYCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSByZXN1bHQgb2YgYGludGVyY2VwdG9yYC5cbiAgICAgKiBUaGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInBhc3MgdGhydVwiIHZhbHVlcyByZXBsYWNpbmcgaW50ZXJtZWRpYXRlXG4gICAgICogcmVzdWx0cyBpbiBhIG1ldGhvZCBjaGFpbiBzZXF1ZW5jZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm92aWRlIHRvIGBpbnRlcmNlcHRvcmAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaW50ZXJjZXB0b3IgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBpbnRlcmNlcHRvcmAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8oJyAgYWJjICAnKVxuICAgICAqICAuY2hhaW4oKVxuICAgICAqICAudHJpbSgpXG4gICAgICogIC50aHJ1KGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICogICAgcmV0dXJuIFt2YWx1ZV07XG4gICAgICogIH0pXG4gICAgICogIC52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsnYWJjJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aHJ1KHZhbHVlLCBpbnRlcmNlcHRvcikge1xuICAgICAgcmV0dXJuIGludGVyY2VwdG9yKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB0aGUgd3JhcHBlciB2ZXJzaW9uIG9mIGBfLmF0YC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGF0XG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfSwgNF0gfTtcbiAgICAgKlxuICAgICAqIF8ob2JqZWN0KS5hdChbJ2FbMF0uYi5jJywgJ2FbMV0nXSkudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbMywgNF1cbiAgICAgKi9cbiAgICB2YXIgd3JhcHBlckF0ID0gZmxhdFJlc3QoZnVuY3Rpb24ocGF0aHMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGgsXG4gICAgICAgICAgc3RhcnQgPSBsZW5ndGggPyBwYXRoc1swXSA6IDAsXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLl9fd3JhcHBlZF9fLFxuICAgICAgICAgIGludGVyY2VwdG9yID0gZnVuY3Rpb24ob2JqZWN0KSB7IHJldHVybiBiYXNlQXQob2JqZWN0LCBwYXRocyk7IH07XG5cbiAgICAgIGlmIChsZW5ndGggPiAxIHx8IHRoaXMuX19hY3Rpb25zX18ubGVuZ3RoIHx8XG4gICAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB8fCAhaXNJbmRleChzdGFydCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGhydShpbnRlcmNlcHRvcik7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKHN0YXJ0LCArc3RhcnQgKyAobGVuZ3RoID8gMSA6IDApKTtcbiAgICAgIHZhbHVlLl9fYWN0aW9uc19fLnB1c2goe1xuICAgICAgICAnZnVuYyc6IHRocnUsXG4gICAgICAgICdhcmdzJzogW2ludGVyY2VwdG9yXSxcbiAgICAgICAgJ3RoaXNBcmcnOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlLCB0aGlzLl9fY2hhaW5fXykudGhydShmdW5jdGlvbihhcnJheSkge1xuICAgICAgICBpZiAobGVuZ3RoICYmICFhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICBhcnJheS5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZSB3aXRoIGV4cGxpY2l0IG1ldGhvZCBjaGFpbiBzZXF1ZW5jZXMgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNoYWluXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIEEgc2VxdWVuY2Ugd2l0aG91dCBleHBsaWNpdCBjaGFpbmluZy5cbiAgICAgKiBfKHVzZXJzKS5oZWFkKCk7XG4gICAgICogLy8gPT4geyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfVxuICAgICAqXG4gICAgICogLy8gQSBzZXF1ZW5jZSB3aXRoIGV4cGxpY2l0IGNoYWluaW5nLlxuICAgICAqIF8odXNlcnMpXG4gICAgICogICAuY2hhaW4oKVxuICAgICAqICAgLmhlYWQoKVxuICAgICAqICAgLnBpY2soJ3VzZXInKVxuICAgICAqICAgLnZhbHVlKCk7XG4gICAgICogLy8gPT4geyAndXNlcic6ICdiYXJuZXknIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyQ2hhaW4oKSB7XG4gICAgICByZXR1cm4gY2hhaW4odGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIGNoYWluIHNlcXVlbmNlIGFuZCByZXR1cm5zIHRoZSB3cmFwcGVkIHJlc3VsdC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNvbW1pdFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMi4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMl07XG4gICAgICogdmFyIHdyYXBwZWQgPSBfKGFycmF5KS5wdXNoKDMpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqXG4gICAgICogd3JhcHBlZCA9IHdyYXBwZWQuY29tbWl0KCk7XG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogd3JhcHBlZC5sYXN0KCk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJDb21taXQoKSB7XG4gICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodGhpcy52YWx1ZSgpLCB0aGlzLl9fY2hhaW5fXyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmV4dCB2YWx1ZSBvbiBhIHdyYXBwZWQgb2JqZWN0IGZvbGxvd2luZyB0aGVcbiAgICAgKiBbaXRlcmF0b3IgcHJvdG9jb2xdKGh0dHBzOi8vbWRuLmlvL2l0ZXJhdGlvbl9wcm90b2NvbHMjaXRlcmF0b3IpLlxuICAgICAqXG4gICAgICogQG5hbWUgbmV4dFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5leHQgaXRlcmF0b3IgdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB3cmFwcGVkID0gXyhbMSwgMl0pO1xuICAgICAqXG4gICAgICogd3JhcHBlZC5uZXh0KCk7XG4gICAgICogLy8gPT4geyAnZG9uZSc6IGZhbHNlLCAndmFsdWUnOiAxIH1cbiAgICAgKlxuICAgICAqIHdyYXBwZWQubmV4dCgpO1xuICAgICAqIC8vID0+IHsgJ2RvbmUnOiBmYWxzZSwgJ3ZhbHVlJzogMiB9XG4gICAgICpcbiAgICAgKiB3cmFwcGVkLm5leHQoKTtcbiAgICAgKiAvLyA9PiB7ICdkb25lJzogdHJ1ZSwgJ3ZhbHVlJzogdW5kZWZpbmVkIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyTmV4dCgpIHtcbiAgICAgIGlmICh0aGlzLl9fdmFsdWVzX18gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9fdmFsdWVzX18gPSB0b0FycmF5KHRoaXMudmFsdWUoKSk7XG4gICAgICB9XG4gICAgICB2YXIgZG9uZSA9IHRoaXMuX19pbmRleF9fID49IHRoaXMuX192YWx1ZXNfXy5sZW5ndGgsXG4gICAgICAgICAgdmFsdWUgPSBkb25lID8gdW5kZWZpbmVkIDogdGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdO1xuXG4gICAgICByZXR1cm4geyAnZG9uZSc6IGRvbmUsICd2YWx1ZSc6IHZhbHVlIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB0aGUgd3JhcHBlciB0byBiZSBpdGVyYWJsZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIFN5bWJvbC5pdGVyYXRvclxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHdyYXBwZXIgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgd3JhcHBlZCA9IF8oWzEsIDJdKTtcbiAgICAgKlxuICAgICAqIHdyYXBwZWRbU3ltYm9sLml0ZXJhdG9yXSgpID09PSB3cmFwcGVkO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIEFycmF5LmZyb20od3JhcHBlZCk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlclRvSXRlcmF0b3IoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGNoYWluIHNlcXVlbmNlIHBsYW50aW5nIGB2YWx1ZWAgYXMgdGhlIHdyYXBwZWQgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBwbGFudFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMi4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHBsYW50LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciB3cmFwcGVkID0gXyhbMSwgMl0pLm1hcChzcXVhcmUpO1xuICAgICAqIHZhciBvdGhlciA9IHdyYXBwZWQucGxhbnQoWzMsIDRdKTtcbiAgICAgKlxuICAgICAqIG90aGVyLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWzksIDE2XVxuICAgICAqXG4gICAgICogd3JhcHBlZC52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsxLCA0XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJQbGFudCh2YWx1ZSkge1xuICAgICAgdmFyIHJlc3VsdCxcbiAgICAgICAgICBwYXJlbnQgPSB0aGlzO1xuXG4gICAgICB3aGlsZSAocGFyZW50IGluc3RhbmNlb2YgYmFzZUxvZGFzaCkge1xuICAgICAgICB2YXIgY2xvbmUgPSB3cmFwcGVyQ2xvbmUocGFyZW50KTtcbiAgICAgICAgY2xvbmUuX19pbmRleF9fID0gMDtcbiAgICAgICAgY2xvbmUuX192YWx1ZXNfXyA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHByZXZpb3VzLl9fd3JhcHBlZF9fID0gY2xvbmU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gY2xvbmU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZXZpb3VzID0gY2xvbmU7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5fX3dyYXBwZWRfXztcbiAgICAgIH1cbiAgICAgIHByZXZpb3VzLl9fd3JhcHBlZF9fID0gdmFsdWU7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHRoZSB3cmFwcGVyIHZlcnNpb24gb2YgYF8ucmV2ZXJzZWAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyB0aGUgd3JhcHBlZCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJldmVyc2VcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDNdO1xuICAgICAqXG4gICAgICogXyhhcnJheSkucmV2ZXJzZSgpLnZhbHVlKClcbiAgICAgKiAvLyA9PiBbMywgMiwgMV1cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMywgMiwgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyUmV2ZXJzZSgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX193cmFwcGVkX187XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikge1xuICAgICAgICB2YXIgd3JhcHBlZCA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgpIHtcbiAgICAgICAgICB3cmFwcGVkID0gbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHdyYXBwZWQgPSB3cmFwcGVkLnJldmVyc2UoKTtcbiAgICAgICAgd3JhcHBlZC5fX2FjdGlvbnNfXy5wdXNoKHtcbiAgICAgICAgICAnZnVuYyc6IHRocnUsXG4gICAgICAgICAgJ2FyZ3MnOiBbcmV2ZXJzZV0sXG4gICAgICAgICAgJ3RoaXNBcmcnOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcih3cmFwcGVkLCB0aGlzLl9fY2hhaW5fXyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy50aHJ1KHJldmVyc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBjaGFpbiBzZXF1ZW5jZSB0byByZXNvbHZlIHRoZSB1bndyYXBwZWQgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSB2YWx1ZVxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGFsaWFzIHRvSlNPTiwgdmFsdWVPZlxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdW53cmFwcGVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfKFsxLCAyLCAzXSkudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyVmFsdWUoKSB7XG4gICAgICByZXR1cm4gYmFzZVdyYXBwZXJWYWx1ZSh0aGlzLl9fd3JhcHBlZF9fLCB0aGlzLl9fYWN0aW9uc19fKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmdcbiAgICAgKiBlYWNoIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYC4gVGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgb2ZcbiAgICAgKiBlYWNoIGtleSBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBrZXkgd2FzIHJldHVybmVkIGJ5IGBpdGVyYXRlZWAuIFRoZVxuICAgICAqIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC41LjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY291bnRCeShbNi4xLCA0LjIsIDYuM10sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IHsgJzQnOiAxLCAnNic6IDIgfVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5jb3VudEJ5KFsnb25lJywgJ3R3bycsICd0aHJlZSddLCAnbGVuZ3RoJyk7XG4gICAgICogLy8gPT4geyAnMyc6IDIsICc1JzogMSB9XG4gICAgICovXG4gICAgdmFyIGNvdW50QnkgPSBjcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBrZXkpKSB7XG4gICAgICAgICsrcmVzdWx0W2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBrZXksIDEpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciAqKmFsbCoqIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYC5cbiAgICAgKiBJdGVyYXRpb24gaXMgc3RvcHBlZCBvbmNlIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzXG4gICAgICogaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHJldHVybnMgYHRydWVgIGZvclxuICAgICAqIFtlbXB0eSBjb2xsZWN0aW9uc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRW1wdHlfc2V0KSBiZWNhdXNlXG4gICAgICogW2V2ZXJ5dGhpbmcgaXMgdHJ1ZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVmFjdW91c190cnV0aCkgb2ZcbiAgICAgKiBlbGVtZW50cyBvZiBlbXB0eSBjb2xsZWN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbGwgZWxlbWVudHMgcGFzcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZXZlcnkoW3RydWUsIDEsIG51bGwsICd5ZXMnXSwgQm9vbGVhbik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZXZlcnkodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5ldmVyeSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZXZlcnkodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV2ZXJ5KGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZ3VhcmQpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RXZlcnkgOiBiYXNlRXZlcnk7XG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkpIHtcbiAgICAgICAgcHJlZGljYXRlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyBhbiBhcnJheSBvZiBhbGwgZWxlbWVudHNcbiAgICAgKiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAgICogYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLnJlbW92ZWAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gICAgICogQHNlZSBfLnJlamVjdFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbHRlcih1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbHRlcih1c2VycywgeyAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbHRlcih1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbHRlcih1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgKlxuICAgICAqIC8vIENvbWJpbmluZyBzZXZlcmFsIHByZWRpY2F0ZXMgdXNpbmcgYF8ub3ZlckV2ZXJ5YCBvciBgXy5vdmVyU29tZWAuXG4gICAgICogXy5maWx0ZXIodXNlcnMsIF8ub3ZlclNvbWUoW3sgJ2FnZSc6IDM2IH0sIFsnYWdlJywgNDBdXSkpO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCcsICdiYXJuZXknXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbHRlcihjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RmlsdGVyIDogYmFzZUZpbHRlcjtcbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcgdGhlIGZpcnN0IGVsZW1lbnRcbiAgICAgKiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAgICogYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWF0Y2hlZCBlbGVtZW50LCBlbHNlIGB1bmRlZmluZWRgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEsICAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmluZCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2UgPCA0MDsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0IGZvciAnYmFybmV5J1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmQodXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiB0cnVlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdCBmb3IgJ3BlYmJsZXMnXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0IGZvciAnZnJlZCdcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZCh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IG9iamVjdCBmb3IgJ2Jhcm5leSdcbiAgICAgKi9cbiAgICB2YXIgZmluZCA9IGNyZWF0ZUZpbmQoZmluZEluZGV4KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZGAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICAgICAqIGBjb2xsZWN0aW9uYCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PWNvbGxlY3Rpb24ubGVuZ3RoLTFdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWF0Y2hlZCBlbGVtZW50LCBlbHNlIGB1bmRlZmluZWRgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmZpbmRMYXN0KFsxLCAyLCAzLCA0XSwgZnVuY3Rpb24obikge1xuICAgICAqICAgcmV0dXJuIG4gJSAyID09IDE7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIHZhciBmaW5kTGFzdCA9IGNyZWF0ZUZpbmQoZmluZExhc3RJbmRleCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZmxhdHRlbmVkIGFycmF5IG9mIHZhbHVlcyBieSBydW5uaW5nIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmBcbiAgICAgKiB0aHJ1IGBpdGVyYXRlZWAgYW5kIGZsYXR0ZW5pbmcgdGhlIG1hcHBlZCByZXN1bHRzLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGR1cGxpY2F0ZShuKSB7XG4gICAgICogICByZXR1cm4gW24sIG5dO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8uZmxhdE1hcChbMSwgMl0sIGR1cGxpY2F0ZSk7XG4gICAgICogLy8gPT4gWzEsIDEsIDIsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdE1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGJhc2VGbGF0dGVuKG1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSksIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmxhdE1hcGAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgZmxhdHRlbnMgdGhlXG4gICAgICogbWFwcGVkIHJlc3VsdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC43LjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGR1cGxpY2F0ZShuKSB7XG4gICAgICogICByZXR1cm4gW1tbbiwgbl1dXTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBfLmZsYXRNYXBEZWVwKFsxLCAyXSwgZHVwbGljYXRlKTtcbiAgICAgKiAvLyA9PiBbMSwgMSwgMiwgMl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0TWFwRGVlcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGJhc2VGbGF0dGVuKG1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSksIElORklOSVRZKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZsYXRNYXBgIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGZsYXR0ZW5zIHRoZVxuICAgICAqIG1hcHBlZCByZXN1bHRzIHVwIHRvIGBkZXB0aGAgdGltZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC43LjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2RlcHRoPTFdIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGR1cGxpY2F0ZShuKSB7XG4gICAgICogICByZXR1cm4gW1tbbiwgbl1dXTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBfLmZsYXRNYXBEZXB0aChbMSwgMl0sIGR1cGxpY2F0ZSwgMik7XG4gICAgICogLy8gPT4gW1sxLCAxXSwgWzIsIDJdXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXRNYXBEZXB0aChjb2xsZWN0aW9uLCBpdGVyYXRlZSwgZGVwdGgpIHtcbiAgICAgIGRlcHRoID0gZGVwdGggPT09IHVuZGVmaW5lZCA/IDEgOiB0b0ludGVnZXIoZGVwdGgpO1xuICAgICAgcmV0dXJuIGJhc2VGbGF0dGVuKG1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSksIGRlcHRoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIGVsZW1lbnQuXG4gICAgICogVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogQXMgd2l0aCBvdGhlciBcIkNvbGxlY3Rpb25zXCIgbWV0aG9kcywgb2JqZWN0cyB3aXRoIGEgXCJsZW5ndGhcIlxuICAgICAqIHByb3BlcnR5IGFyZSBpdGVyYXRlZCBsaWtlIGFycmF5cy4gVG8gYXZvaWQgdGhpcyBiZWhhdmlvciB1c2UgYF8uZm9ySW5gXG4gICAgICogb3IgYF8uZm9yT3duYCBmb3Igb2JqZWN0IGl0ZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBhbGlhcyBlYWNoXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gICAgICogQHNlZSBfLmZvckVhY2hSaWdodFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmZvckVhY2goWzEsIDJdLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAqICAgY29uc29sZS5sb2codmFsdWUpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgYDFgIHRoZW4gYDJgLlxuICAgICAqXG4gICAgICogXy5mb3JFYWNoKHsgJ2EnOiAxLCAnYic6IDIgfSwgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAqICAgY29uc29sZS5sb2coa2V5KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzICdhJyB0aGVuICdiJyAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JFYWNoKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUVhY2ggOiBiYXNlRWFjaDtcbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mb3JFYWNoYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICogYGNvbGxlY3Rpb25gIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBhbGlhcyBlYWNoUmlnaHRcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAgICAgKiBAc2VlIF8uZm9yRWFjaFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmZvckVhY2hSaWdodChbMSwgMl0sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICogICBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gTG9ncyBgMmAgdGhlbiBgMWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZm9yRWFjaFJpZ2h0KGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUVhY2hSaWdodCA6IGJhc2VFYWNoUmlnaHQ7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIGtleXMgZ2VuZXJhdGVkIGZyb20gdGhlIHJlc3VsdHMgb2YgcnVubmluZ1xuICAgICAqIGVhY2ggZWxlbWVudCBvZiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLiBUaGUgb3JkZXIgb2YgZ3JvdXBlZCB2YWx1ZXNcbiAgICAgKiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyIGluIGBjb2xsZWN0aW9uYC4gVGhlIGNvcnJlc3BvbmRpbmdcbiAgICAgKiB2YWx1ZSBvZiBlYWNoIGtleSBpcyBhbiBhcnJheSBvZiBlbGVtZW50cyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyB0aGVcbiAgICAgKiBrZXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb21wb3NlZCBhZ2dyZWdhdGUgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmdyb3VwQnkoWzYuMSwgNC4yLCA2LjNdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiB7ICc0JzogWzQuMl0sICc2JzogWzYuMSwgNi4zXSB9XG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmdyb3VwQnkoWydvbmUnLCAndHdvJywgJ3RocmVlJ10sICdsZW5ndGgnKTtcbiAgICAgKiAvLyA9PiB7ICczJzogWydvbmUnLCAndHdvJ10sICc1JzogWyd0aHJlZSddIH1cbiAgICAgKi9cbiAgICB2YXIgZ3JvdXBCeSA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsIGtleSkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBrZXksIFt2YWx1ZV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gYGNvbGxlY3Rpb25gLiBJZiBgY29sbGVjdGlvbmAgaXMgYSBzdHJpbmcsIGl0J3NcbiAgICAgKiBjaGVja2VkIGZvciBhIHN1YnN0cmluZyBvZiBgdmFsdWVgLCBvdGhlcndpc2VcbiAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGlzIHVzZWQgZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLiBJZiBgZnJvbUluZGV4YCBpcyBuZWdhdGl2ZSwgaXQncyB1c2VkIGFzXG4gICAgICogdGhlIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgYGNvbGxlY3Rpb25gLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5yZWR1Y2VgLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW5jbHVkZXMoWzEsIDIsIDNdLCAxKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmluY2x1ZGVzKFsxLCAyLCAzXSwgMSwgMik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaW5jbHVkZXMoeyAnYSc6IDEsICdiJzogMiB9LCAxKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmluY2x1ZGVzKCdhYmNkJywgJ2JjJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluY2x1ZGVzKGNvbGxlY3Rpb24sIHZhbHVlLCBmcm9tSW5kZXgsIGd1YXJkKSB7XG4gICAgICBjb2xsZWN0aW9uID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBjb2xsZWN0aW9uIDogdmFsdWVzKGNvbGxlY3Rpb24pO1xuICAgICAgZnJvbUluZGV4ID0gKGZyb21JbmRleCAmJiAhZ3VhcmQpID8gdG9JbnRlZ2VyKGZyb21JbmRleCkgOiAwO1xuXG4gICAgICB2YXIgbGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG4gICAgICBpZiAoZnJvbUluZGV4IDwgMCkge1xuICAgICAgICBmcm9tSW5kZXggPSBuYXRpdmVNYXgobGVuZ3RoICsgZnJvbUluZGV4LCAwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1N0cmluZyhjb2xsZWN0aW9uKVxuICAgICAgICA/IChmcm9tSW5kZXggPD0gbGVuZ3RoICYmIGNvbGxlY3Rpb24uaW5kZXhPZih2YWx1ZSwgZnJvbUluZGV4KSA+IC0xKVxuICAgICAgICA6ICghIWxlbmd0aCAmJiBiYXNlSW5kZXhPZihjb2xsZWN0aW9uLCB2YWx1ZSwgZnJvbUluZGV4KSA+IC0xKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIHRoZSBtZXRob2QgYXQgYHBhdGhgIG9mIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAsIHJldHVybmluZ1xuICAgICAqIGFuIGFycmF5IG9mIHRoZSByZXN1bHRzIG9mIGVhY2ggaW52b2tlZCBtZXRob2QuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgICAqIGFyZSBwcm92aWRlZCB0byBlYWNoIGludm9rZWQgbWV0aG9kLiBJZiBgcGF0aGAgaXMgYSBmdW5jdGlvbiwgaXQncyBpbnZva2VkXG4gICAgICogZm9yLCBhbmQgYHRoaXNgIGJvdW5kIHRvLCBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbnxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2Ugb3JcbiAgICAgKiAgdGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBlYWNoIG1ldGhvZCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pbnZva2VNYXAoW1s1LCAxLCA3XSwgWzMsIDIsIDFdXSwgJ3NvcnQnKTtcbiAgICAgKiAvLyA9PiBbWzEsIDUsIDddLCBbMSwgMiwgM11dXG4gICAgICpcbiAgICAgKiBfLmludm9rZU1hcChbMTIzLCA0NTZdLCBTdHJpbmcucHJvdG90eXBlLnNwbGl0LCAnJyk7XG4gICAgICogLy8gPT4gW1snMScsICcyJywgJzMnXSwgWyc0JywgJzUnLCAnNiddXVxuICAgICAqL1xuICAgIHZhciBpbnZva2VNYXAgPSBiYXNlUmVzdChmdW5jdGlvbihjb2xsZWN0aW9uLCBwYXRoLCBhcmdzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBpc0Z1bmMgPSB0eXBlb2YgcGF0aCA9PSAnZnVuY3Rpb24nLFxuICAgICAgICAgIHJlc3VsdCA9IGlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pID8gQXJyYXkoY29sbGVjdGlvbi5sZW5ndGgpIDogW107XG5cbiAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJlc3VsdFsrK2luZGV4XSA9IGlzRnVuYyA/IGFwcGx5KHBhdGgsIHZhbHVlLCBhcmdzKSA6IGJhc2VJbnZva2UodmFsdWUsIHBhdGgsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nXG4gICAgICogZWFjaCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9mXG4gICAgICogZWFjaCBrZXkgaXMgdGhlIGxhc3QgZWxlbWVudCByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyB0aGUga2V5LiBUaGVcbiAgICAgKiBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb21wb3NlZCBhZ2dyZWdhdGUgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbXG4gICAgICogICB7ICdkaXInOiAnbGVmdCcsICdjb2RlJzogOTcgfSxcbiAgICAgKiAgIHsgJ2Rpcic6ICdyaWdodCcsICdjb2RlJzogMTAwIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5rZXlCeShhcnJheSwgZnVuY3Rpb24obykge1xuICAgICAqICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoby5jb2RlKTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sICdkJzogeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfSB9XG4gICAgICpcbiAgICAgKiBfLmtleUJ5KGFycmF5LCAnZGlyJyk7XG4gICAgICogLy8gPT4geyAnbGVmdCc6IHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LCAncmlnaHQnOiB7ICdkaXInOiAncmlnaHQnLCAnY29kZSc6IDEwMCB9IH1cbiAgICAgKi9cbiAgICB2YXIga2V5QnkgPSBjcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHZhbHVlcyBieSBydW5uaW5nIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAgdGhydVxuICAgICAqIGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICAgICAqICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIE1hbnkgbG9kYXNoIG1ldGhvZHMgYXJlIGd1YXJkZWQgdG8gd29yayBhcyBpdGVyYXRlZXMgZm9yIG1ldGhvZHMgbGlrZVxuICAgICAqIGBfLmV2ZXJ5YCwgYF8uZmlsdGVyYCwgYF8ubWFwYCwgYF8ubWFwVmFsdWVzYCwgYF8ucmVqZWN0YCwgYW5kIGBfLnNvbWVgLlxuICAgICAqXG4gICAgICogVGhlIGd1YXJkZWQgbWV0aG9kcyBhcmU6XG4gICAgICogYGFyeWAsIGBjaHVua2AsIGBjdXJyeWAsIGBjdXJyeVJpZ2h0YCwgYGRyb3BgLCBgZHJvcFJpZ2h0YCwgYGV2ZXJ5YCxcbiAgICAgKiBgZmlsbGAsIGBpbnZlcnRgLCBgcGFyc2VJbnRgLCBgcmFuZG9tYCwgYHJhbmdlYCwgYHJhbmdlUmlnaHRgLCBgcmVwZWF0YCxcbiAgICAgKiBgc2FtcGxlU2l6ZWAsIGBzbGljZWAsIGBzb21lYCwgYHNvcnRCeWAsIGBzcGxpdGAsIGB0YWtlYCwgYHRha2VSaWdodGAsXG4gICAgICogYHRlbXBsYXRlYCwgYHRyaW1gLCBgdHJpbUVuZGAsIGB0cmltU3RhcnRgLCBhbmQgYHdvcmRzYFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8ubWFwKFs0LCA4XSwgc3F1YXJlKTtcbiAgICAgKiAvLyA9PiBbMTYsIDY0XVxuICAgICAqXG4gICAgICogXy5tYXAoeyAnYSc6IDQsICdiJzogOCB9LCBzcXVhcmUpO1xuICAgICAqIC8vID0+IFsxNiwgNjRdIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLm1hcCh1c2VycywgJ3VzZXInKTtcbiAgICAgKiAvLyA9PiBbJ2Jhcm5leScsICdmcmVkJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5TWFwIDogYmFzZU1hcDtcbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zb3J0QnlgIGV4Y2VwdCB0aGF0IGl0IGFsbG93cyBzcGVjaWZ5aW5nIHRoZSBzb3J0XG4gICAgICogb3JkZXJzIG9mIHRoZSBpdGVyYXRlZXMgdG8gc29ydCBieS4gSWYgYG9yZGVyc2AgaXMgdW5zcGVjaWZpZWQsIGFsbCB2YWx1ZXNcbiAgICAgKiBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci4gT3RoZXJ3aXNlLCBzcGVjaWZ5IGFuIG9yZGVyIG9mIFwiZGVzY1wiIGZvclxuICAgICAqIGRlc2NlbmRpbmcgb3IgXCJhc2NcIiBmb3IgYXNjZW5kaW5nIHNvcnQgb3JkZXIgb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FycmF5W118RnVuY3Rpb25bXXxPYmplY3RbXXxzdHJpbmdbXX0gW2l0ZXJhdGVlcz1bXy5pZGVudGl0eV1dXG4gICAgICogIFRoZSBpdGVyYXRlZXMgdG8gc29ydCBieS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbb3JkZXJzXSBUaGUgc29ydCBvcmRlcnMgb2YgYGl0ZXJhdGVlc2AuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ucmVkdWNlYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzb3J0ZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQ4IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNCB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gU29ydCBieSBgdXNlcmAgaW4gYXNjZW5kaW5nIG9yZGVyIGFuZCBieSBgYWdlYCBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICAgICAqIF8ub3JkZXJCeSh1c2VycywgWyd1c2VyJywgJ2FnZSddLCBbJ2FzYycsICdkZXNjJ10pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2Jhcm5leScsIDM2XSwgWydiYXJuZXknLCAzNF0sIFsnZnJlZCcsIDQ4XSwgWydmcmVkJywgNDBdXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG9yZGVyQnkoY29sbGVjdGlvbiwgaXRlcmF0ZWVzLCBvcmRlcnMsIGd1YXJkKSB7XG4gICAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBcnJheShpdGVyYXRlZXMpKSB7XG4gICAgICAgIGl0ZXJhdGVlcyA9IGl0ZXJhdGVlcyA9PSBudWxsID8gW10gOiBbaXRlcmF0ZWVzXTtcbiAgICAgIH1cbiAgICAgIG9yZGVycyA9IGd1YXJkID8gdW5kZWZpbmVkIDogb3JkZXJzO1xuICAgICAgaWYgKCFpc0FycmF5KG9yZGVycykpIHtcbiAgICAgICAgb3JkZXJzID0gb3JkZXJzID09IG51bGwgPyBbXSA6IFtvcmRlcnNdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VPcmRlckJ5KGNvbGxlY3Rpb24sIGl0ZXJhdGVlcywgb3JkZXJzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGVsZW1lbnRzIHNwbGl0IGludG8gdHdvIGdyb3VwcywgdGhlIGZpcnN0IG9mIHdoaWNoXG4gICAgICogY29udGFpbnMgZWxlbWVudHMgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yLCB0aGUgc2Vjb25kIG9mIHdoaWNoXG4gICAgICogY29udGFpbnMgZWxlbWVudHMgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkgZm9yLiBUaGUgcHJlZGljYXRlIGlzXG4gICAgICogaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSwgICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ucGFydGl0aW9uKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFjdGl2ZTsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgW1snZnJlZCddLCBbJ2Jhcm5leScsICdwZWJibGVzJ11dXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ucGFydGl0aW9uKHVzZXJzLCB7ICdhZ2UnOiAxLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgW1sncGViYmxlcyddLCBbJ2Jhcm5leScsICdmcmVkJ11dXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5wYXJ0aXRpb24odXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAncGViYmxlcyddLCBbJ2ZyZWQnXV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ucGFydGl0aW9uKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgW1snZnJlZCddLCBbJ2Jhcm5leScsICdwZWJibGVzJ11dXG4gICAgICovXG4gICAgdmFyIHBhcnRpdGlvbiA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICByZXN1bHRba2V5ID8gMCA6IDFdLnB1c2godmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uKCkgeyByZXR1cm4gW1tdLCBbXV07IH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVkdWNlcyBgY29sbGVjdGlvbmAgdG8gYSB2YWx1ZSB3aGljaCBpcyB0aGUgYWNjdW11bGF0ZWQgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgKiBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYCwgd2hlcmUgZWFjaCBzdWNjZXNzaXZlXG4gICAgICogaW52b2NhdGlvbiBpcyBzdXBwbGllZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcmV2aW91cy4gSWYgYGFjY3VtdWxhdG9yYFxuICAgICAqIGlzIG5vdCBnaXZlbiwgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIGlzIHVzZWQgYXMgdGhlIGluaXRpYWxcbiAgICAgKiB2YWx1ZS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBmb3VyIGFyZ3VtZW50czpcbiAgICAgKiAoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogTWFueSBsb2Rhc2ggbWV0aG9kcyBhcmUgZ3VhcmRlZCB0byB3b3JrIGFzIGl0ZXJhdGVlcyBmb3IgbWV0aG9kcyBsaWtlXG4gICAgICogYF8ucmVkdWNlYCwgYF8ucmVkdWNlUmlnaHRgLCBhbmQgYF8udHJhbnNmb3JtYC5cbiAgICAgKlxuICAgICAqIFRoZSBndWFyZGVkIG1ldGhvZHMgYXJlOlxuICAgICAqIGBhc3NpZ25gLCBgZGVmYXVsdHNgLCBgZGVmYXVsdHNEZWVwYCwgYGluY2x1ZGVzYCwgYG1lcmdlYCwgYG9yZGVyQnlgLFxuICAgICAqIGFuZCBgc29ydEJ5YFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICAgKiBAc2VlIF8ucmVkdWNlUmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yZWR1Y2UoWzEsIDJdLCBmdW5jdGlvbihzdW0sIG4pIHtcbiAgICAgKiAgIHJldHVybiBzdW0gKyBuO1xuICAgICAqIH0sIDApO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8ucmVkdWNlKHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMSB9LCBmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIChyZXN1bHRbdmFsdWVdIHx8IChyZXN1bHRbdmFsdWVdID0gW10pKS5wdXNoKGtleSk7XG4gICAgICogICByZXR1cm4gcmVzdWx0O1xuICAgICAqIH0sIHt9KTtcbiAgICAgKiAvLyA9PiB7ICcxJzogWydhJywgJ2MnXSwgJzInOiBbJ2InXSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVkdWNlKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlSZWR1Y2UgOiBiYXNlUmVkdWNlLFxuICAgICAgICAgIGluaXRBY2N1bSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzO1xuXG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgNCksIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0sIGJhc2VFYWNoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnJlZHVjZWAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICAgICAqIGBjb2xsZWN0aW9uYCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgICAqIEBzZWUgXy5yZWR1Y2VcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gW1swLCAxXSwgWzIsIDNdLCBbNCwgNV1dO1xuICAgICAqXG4gICAgICogXy5yZWR1Y2VSaWdodChhcnJheSwgZnVuY3Rpb24oZmxhdHRlbmVkLCBvdGhlcikge1xuICAgICAqICAgcmV0dXJuIGZsYXR0ZW5lZC5jb25jYXQob3RoZXIpO1xuICAgICAqIH0sIFtdKTtcbiAgICAgKiAvLyA9PiBbNCwgNSwgMiwgMywgMCwgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWR1Y2VSaWdodChjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5UmVkdWNlUmlnaHQgOiBiYXNlUmVkdWNlLFxuICAgICAgICAgIGluaXRBY2N1bSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzO1xuXG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgNCksIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0sIGJhc2VFYWNoUmlnaHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5maWx0ZXJgOyB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmBcbiAgICAgKiB0aGF0IGBwcmVkaWNhdGVgIGRvZXMgKipub3QqKiByZXR1cm4gdHJ1dGh5IGZvci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAgICAgKiBAc2VlIF8uZmlsdGVyXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ucmVqZWN0KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ucmVqZWN0KHVzZXJzLCB7ICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ucmVqZWN0KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ucmVqZWN0KHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlamVjdChjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RmlsdGVyIDogYmFzZUZpbHRlcjtcbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIG5lZ2F0ZShnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhIHJhbmRvbSBlbGVtZW50IGZyb20gYGNvbGxlY3Rpb25gLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBzYW1wbGUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNhbXBsZShbMSwgMiwgMywgNF0pO1xuICAgICAqIC8vID0+IDJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzYW1wbGUoY29sbGVjdGlvbikge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlTYW1wbGUgOiBiYXNlU2FtcGxlO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBgbmAgcmFuZG9tIGVsZW1lbnRzIGF0IHVuaXF1ZSBrZXlzIGZyb20gYGNvbGxlY3Rpb25gIHVwIHRvIHRoZVxuICAgICAqIHNpemUgb2YgYGNvbGxlY3Rpb25gLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBzYW1wbGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gc2FtcGxlLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc2FtcGxlU2l6ZShbMSwgMiwgM10sIDIpO1xuICAgICAqIC8vID0+IFszLCAxXVxuICAgICAqXG4gICAgICogXy5zYW1wbGVTaXplKFsxLCAyLCAzXSwgNCk7XG4gICAgICogLy8gPT4gWzIsIDMsIDFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2FtcGxlU2l6ZShjb2xsZWN0aW9uLCBuLCBndWFyZCkge1xuICAgICAgaWYgKChndWFyZCA/IGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIG4sIGd1YXJkKSA6IG4gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgbiA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuID0gdG9JbnRlZ2VyKG4pO1xuICAgICAgfVxuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlTYW1wbGVTaXplIDogYmFzZVNhbXBsZVNpemU7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHNodWZmbGVkIHZhbHVlcywgdXNpbmcgYSB2ZXJzaW9uIG9mIHRoZVxuICAgICAqIFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVyLVlhdGVzX3NodWZmbGUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBzaHVmZmxlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNodWZmbGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNodWZmbGUoWzEsIDIsIDMsIDRdKTtcbiAgICAgKiAvLyA9PiBbNCwgMSwgMywgMl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzaHVmZmxlKGNvbGxlY3Rpb24pIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5U2h1ZmZsZSA6IGJhc2VTaHVmZmxlO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc2l6ZSBvZiBgY29sbGVjdGlvbmAgYnkgcmV0dXJuaW5nIGl0cyBsZW5ndGggZm9yIGFycmF5LWxpa2VcbiAgICAgKiB2YWx1ZXMgb3IgdGhlIG51bWJlciBvZiBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBmb3Igb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29sbGVjdGlvbiBzaXplLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNpemUoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLnNpemUoeyAnYSc6IDEsICdiJzogMiB9KTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICpcbiAgICAgKiBfLnNpemUoJ3BlYmJsZXMnKTtcbiAgICAgKiAvLyA9PiA3XG4gICAgICovXG4gICAgZnVuY3Rpb24gc2l6ZShjb2xsZWN0aW9uKSB7XG4gICAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgICAgaWYgKGlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyhjb2xsZWN0aW9uKSA/IHN0cmluZ1NpemUoY29sbGVjdGlvbikgOiBjb2xsZWN0aW9uLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHZhciB0YWcgPSBnZXRUYWcoY29sbGVjdGlvbik7XG4gICAgICBpZiAodGFnID09IG1hcFRhZyB8fCB0YWcgPT0gc2V0VGFnKSB7XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uLnNpemU7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUtleXMoY29sbGVjdGlvbikubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgKiphbnkqKiBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYC5cbiAgICAgKiBJdGVyYXRpb24gaXMgc3RvcHBlZCBvbmNlIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5LiBUaGUgcHJlZGljYXRlIGlzXG4gICAgICogaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29tZShbbnVsbCwgMCwgJ3llcycsIGZhbHNlXSwgQm9vbGVhbik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc29tZSh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnNvbWUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnNvbWUodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29tZShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGd1YXJkKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNvbWUgOiBiYXNlU29tZTtcbiAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGd1YXJkKSkge1xuICAgICAgICBwcmVkaWNhdGUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGVsZW1lbnRzLCBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyIGJ5IHRoZSByZXN1bHRzIG9mXG4gICAgICogcnVubmluZyBlYWNoIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uIHRocnUgZWFjaCBpdGVyYXRlZS4gVGhpcyBtZXRob2RcbiAgICAgKiBwZXJmb3JtcyBhIHN0YWJsZSBzb3J0LCB0aGF0IGlzLCBpdCBwcmVzZXJ2ZXMgdGhlIG9yaWdpbmFsIHNvcnQgb3JkZXIgb2ZcbiAgICAgKiBlcXVhbCBlbGVtZW50cy4gVGhlIGl0ZXJhdGVlcyBhcmUgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbaXRlcmF0ZWVzPVtfLmlkZW50aXR5XV1cbiAgICAgKiAgVGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNvcnRlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDggfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiAzMCB9LFxuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzQgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLnNvcnRCeSh1c2VycywgW2Z1bmN0aW9uKG8pIHsgcmV0dXJuIG8udXNlcjsgfV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2Jhcm5leScsIDM2XSwgWydiYXJuZXknLCAzNF0sIFsnZnJlZCcsIDQ4XSwgWydmcmVkJywgMzBdXVxuICAgICAqXG4gICAgICogXy5zb3J0QnkodXNlcnMsIFsndXNlcicsICdhZ2UnXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgW1snYmFybmV5JywgMzRdLCBbJ2Jhcm5leScsIDM2XSwgWydmcmVkJywgMzBdLCBbJ2ZyZWQnLCA0OF1dXG4gICAgICovXG4gICAgdmFyIHNvcnRCeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlcykge1xuICAgICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgbGVuZ3RoID0gaXRlcmF0ZWVzLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggPiAxICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIGl0ZXJhdGVlc1swXSwgaXRlcmF0ZWVzWzFdKSkge1xuICAgICAgICBpdGVyYXRlZXMgPSBbXTtcbiAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID4gMiAmJiBpc0l0ZXJhdGVlQ2FsbChpdGVyYXRlZXNbMF0sIGl0ZXJhdGVlc1sxXSwgaXRlcmF0ZWVzWzJdKSkge1xuICAgICAgICBpdGVyYXRlZXMgPSBbaXRlcmF0ZWVzWzBdXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlT3JkZXJCeShjb2xsZWN0aW9uLCBiYXNlRmxhdHRlbihpdGVyYXRlZXMsIDEpLCBbXSk7XG4gICAgfSk7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB0aW1lc3RhbXAgb2YgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2VcbiAgICAgKiB0aGUgVW5peCBlcG9jaCAoMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjQuMFxuICAgICAqIEBjYXRlZ29yeSBEYXRlXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXN0YW1wLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlZmVyKGZ1bmN0aW9uKHN0YW1wKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhfLm5vdygpIC0gc3RhbXApO1xuICAgICAqIH0sIF8ubm93KCkpO1xuICAgICAqIC8vID0+IExvZ3MgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaXQgdG9vayBmb3IgdGhlIGRlZmVycmVkIGludm9jYXRpb24uXG4gICAgICovXG4gICAgdmFyIG5vdyA9IGN0eE5vdyB8fCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByb290LkRhdGUubm93KCk7XG4gICAgfTtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5iZWZvcmVgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzXG4gICAgICogYGZ1bmNgIG9uY2UgaXQncyBjYWxsZWQgYG5gIG9yIG1vcmUgdGltZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGNhbGxzIGJlZm9yZSBgZnVuY2AgaXMgaW52b2tlZC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByZXN0cmljdGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgc2F2ZXMgPSBbJ3Byb2ZpbGUnLCAnc2V0dGluZ3MnXTtcbiAgICAgKlxuICAgICAqIHZhciBkb25lID0gXy5hZnRlcihzYXZlcy5sZW5ndGgsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ2RvbmUgc2F2aW5nIScpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogXy5mb3JFYWNoKHNhdmVzLCBmdW5jdGlvbih0eXBlKSB7XG4gICAgICogICBhc3luY1NhdmUoeyAndHlwZSc6IHR5cGUsICdjb21wbGV0ZSc6IGRvbmUgfSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gTG9ncyAnZG9uZSBzYXZpbmchJyBhZnRlciB0aGUgdHdvIGFzeW5jIHNhdmVzIGhhdmUgY29tcGxldGVkLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFmdGVyKG4sIGZ1bmMpIHtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICgtLW4gPCAxKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCwgd2l0aCB1cCB0byBgbmAgYXJndW1lbnRzLFxuICAgICAqIGlnbm9yaW5nIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj1mdW5jLmxlbmd0aF0gVGhlIGFyaXR5IGNhcC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5tYXAoWyc2JywgJzgnLCAnMTAnXSwgXy5hcnkocGFyc2VJbnQsIDEpKTtcbiAgICAgKiAvLyA9PiBbNiwgOCwgMTBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJ5KGZ1bmMsIG4sIGd1YXJkKSB7XG4gICAgICBuID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBuO1xuICAgICAgbiA9IChmdW5jICYmIG4gPT0gbnVsbCkgPyBmdW5jLmxlbmd0aCA6IG47XG4gICAgICByZXR1cm4gY3JlYXRlV3JhcChmdW5jLCBXUkFQX0FSWV9GTEFHLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgLCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBhbmQgYXJndW1lbnRzXG4gICAgICogb2YgdGhlIGNyZWF0ZWQgZnVuY3Rpb24sIHdoaWxlIGl0J3MgY2FsbGVkIGxlc3MgdGhhbiBgbmAgdGltZXMuIFN1YnNlcXVlbnRcbiAgICAgKiBjYWxscyB0byB0aGUgY3JlYXRlZCBmdW5jdGlvbiByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBgZnVuY2AgaW52b2NhdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgY2FsbHMgYXQgd2hpY2ggYGZ1bmNgIGlzIG5vIGxvbmdlciBpbnZva2VkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJlc3RyaWN0ZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmJlZm9yZSg1LCBhZGRDb250YWN0VG9MaXN0KSk7XG4gICAgICogLy8gPT4gQWxsb3dzIGFkZGluZyB1cCB0byA0IGNvbnRhY3RzIHRvIHRoZSBsaXN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJlZm9yZShuLCBmdW5jKSB7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgbiA9IHRvSW50ZWdlcihuKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKC0tbiA+IDApIHtcbiAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG4gPD0gMSkge1xuICAgICAgICAgIGZ1bmMgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgXG4gICAgICogYW5kIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBUaGUgYF8uYmluZC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljIGJ1aWxkcyxcbiAgICAgKiBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIG5hdGl2ZSBgRnVuY3Rpb24jYmluZGAsIHRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiXG4gICAgICogcHJvcGVydHkgb2YgYm91bmQgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYmluZC5cbiAgICAgKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBib3VuZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZ3JlZXQoZ3JlZXRpbmcsIHB1bmN0dWF0aW9uKSB7XG4gICAgICogICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyB0aGlzLnVzZXIgKyBwdW5jdHVhdGlvbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAndXNlcic6ICdmcmVkJyB9O1xuICAgICAqXG4gICAgICogdmFyIGJvdW5kID0gXy5iaW5kKGdyZWV0LCBvYmplY3QsICdoaScpO1xuICAgICAqIGJvdW5kKCchJyk7XG4gICAgICogLy8gPT4gJ2hpIGZyZWQhJ1xuICAgICAqXG4gICAgICogLy8gQm91bmQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gICAgICogdmFyIGJvdW5kID0gXy5iaW5kKGdyZWV0LCBvYmplY3QsIF8sICchJyk7XG4gICAgICogYm91bmQoJ2hpJyk7XG4gICAgICogLy8gPT4gJ2hpIGZyZWQhJ1xuICAgICAqL1xuICAgIHZhciBiaW5kID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgdGhpc0FyZywgcGFydGlhbHMpIHtcbiAgICAgIHZhciBiaXRtYXNrID0gV1JBUF9CSU5EX0ZMQUc7XG4gICAgICBpZiAocGFydGlhbHMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGdldEhvbGRlcihiaW5kKSk7XG4gICAgICAgIGJpdG1hc2sgfD0gV1JBUF9QQVJUSUFMX0ZMQUc7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3JlYXRlV3JhcChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSBtZXRob2QgYXQgYG9iamVjdFtrZXldYCB3aXRoIGBwYXJ0aWFsc2BcbiAgICAgKiBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSBgXy5iaW5kYCBieSBhbGxvd2luZyBib3VuZCBmdW5jdGlvbnMgdG8gcmVmZXJlbmNlXG4gICAgICogbWV0aG9kcyB0aGF0IG1heSBiZSByZWRlZmluZWQgb3IgZG9uJ3QgeWV0IGV4aXN0LiBTZWVcbiAgICAgKiBbUGV0ZXIgTWljaGF1eCdzIGFydGljbGVdKGh0dHA6Ly9wZXRlci5taWNoYXV4LmNhL2FydGljbGVzL2xhenktZnVuY3Rpb24tZGVmaW5pdGlvbi1wYXR0ZXJuKVxuICAgICAqIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICpcbiAgICAgKiBUaGUgYF8uYmluZEtleS5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gICAgICogYnVpbGRzLCBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGludm9rZSB0aGUgbWV0aG9kIG9uLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5kIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0ge1xuICAgICAqICAgJ3VzZXInOiAnZnJlZCcsXG4gICAgICogICAnZ3JlZXQnOiBmdW5jdGlvbihncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAgICAgKiAgICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gICAgICogICB9XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIHZhciBib3VuZCA9IF8uYmluZEtleShvYmplY3QsICdncmVldCcsICdoaScpO1xuICAgICAqIGJvdW5kKCchJyk7XG4gICAgICogLy8gPT4gJ2hpIGZyZWQhJ1xuICAgICAqXG4gICAgICogb2JqZWN0LmdyZWV0ID0gZnVuY3Rpb24oZ3JlZXRpbmcsIHB1bmN0dWF0aW9uKSB7XG4gICAgICogICByZXR1cm4gZ3JlZXRpbmcgKyAneWEgJyArIHRoaXMudXNlciArIHB1bmN0dWF0aW9uO1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBib3VuZCgnIScpO1xuICAgICAqIC8vID0+ICdoaXlhIGZyZWQhJ1xuICAgICAqXG4gICAgICogLy8gQm91bmQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gICAgICogdmFyIGJvdW5kID0gXy5iaW5kS2V5KG9iamVjdCwgJ2dyZWV0JywgXywgJyEnKTtcbiAgICAgKiBib3VuZCgnaGknKTtcbiAgICAgKiAvLyA9PiAnaGl5YSBmcmVkISdcbiAgICAgKi9cbiAgICB2YXIgYmluZEtleSA9IGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwga2V5LCBwYXJ0aWFscykge1xuICAgICAgdmFyIGJpdG1hc2sgPSBXUkFQX0JJTkRfRkxBRyB8IFdSQVBfQklORF9LRVlfRkxBRztcbiAgICAgIGlmIChwYXJ0aWFscy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKGJpbmRLZXkpKTtcbiAgICAgICAgYml0bWFzayB8PSBXUkFQX1BBUlRJQUxfRkxBRztcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGtleSwgYml0bWFzaywgb2JqZWN0LCBwYXJ0aWFscywgaG9sZGVycyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGFyZ3VtZW50cyBvZiBgZnVuY2AgYW5kIGVpdGhlciBpbnZva2VzXG4gICAgICogYGZ1bmNgIHJldHVybmluZyBpdHMgcmVzdWx0LCBpZiBhdCBsZWFzdCBgYXJpdHlgIG51bWJlciBvZiBhcmd1bWVudHMgaGF2ZVxuICAgICAqIGJlZW4gcHJvdmlkZWQsIG9yIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIHJlbWFpbmluZyBgZnVuY2BcbiAgICAgKiBhcmd1bWVudHMsIGFuZCBzbyBvbi4gVGhlIGFyaXR5IG9mIGBmdW5jYCBtYXkgYmUgc3BlY2lmaWVkIGlmIGBmdW5jLmxlbmd0aGBcbiAgICAgKiBpcyBub3Qgc3VmZmljaWVudC5cbiAgICAgKlxuICAgICAqIFRoZSBgXy5jdXJyeS5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljIGJ1aWxkcyxcbiAgICAgKiBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgY3VycmllZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjdXJyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5PWZ1bmMubGVuZ3RoXSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY3VycmllZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFiYyA9IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgKiAgIHJldHVybiBbYSwgYiwgY107XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIHZhciBjdXJyaWVkID0gXy5jdXJyeShhYmMpO1xuICAgICAqXG4gICAgICogY3VycmllZCgxKSgyKSgzKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMSwgMikoMyk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDEsIDIsIDMpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogLy8gQ3VycmllZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgKiBjdXJyaWVkKDEpKF8sIDMpKDIpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGN1cnJ5KGZ1bmMsIGFyaXR5LCBndWFyZCkge1xuICAgICAgYXJpdHkgPSBndWFyZCA/IHVuZGVmaW5lZCA6IGFyaXR5O1xuICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9DVVJSWV9GTEFHLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYXJpdHkpO1xuICAgICAgcmVzdWx0LnBsYWNlaG9sZGVyID0gY3VycnkucGxhY2Vob2xkZXI7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY3VycnlgIGV4Y2VwdCB0aGF0IGFyZ3VtZW50cyBhcmUgYXBwbGllZCB0byBgZnVuY2BcbiAgICAgKiBpbiB0aGUgbWFubmVyIG9mIGBfLnBhcnRpYWxSaWdodGAgaW5zdGVhZCBvZiBgXy5wYXJ0aWFsYC5cbiAgICAgKlxuICAgICAqIFRoZSBgXy5jdXJyeVJpZ2h0LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAgICAgKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBjdXJyaWVkIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHk9ZnVuYy5sZW5ndGhdIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjdXJyaWVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYWJjID0gZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAqICAgcmV0dXJuIFthLCBiLCBjXTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIGN1cnJpZWQgPSBfLmN1cnJ5UmlnaHQoYWJjKTtcbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMykoMikoMSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDIsIDMpKDEpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogY3VycmllZCgxLCAyLCAzKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIC8vIEN1cnJpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gICAgICogY3VycmllZCgzKSgxLCBfKSgyKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjdXJyeVJpZ2h0KGZ1bmMsIGFyaXR5LCBndWFyZCkge1xuICAgICAgYXJpdHkgPSBndWFyZCA/IHVuZGVmaW5lZCA6IGFyaXR5O1xuICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9DVVJSWV9SSUdIVF9GTEFHLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYXJpdHkpO1xuICAgICAgcmVzdWx0LnBsYWNlaG9sZGVyID0gY3VycnlSaWdodC5wbGFjZWhvbGRlcjtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGRlYm91bmNlZCBmdW5jdGlvbiB0aGF0IGRlbGF5cyBpbnZva2luZyBgZnVuY2AgdW50aWwgYWZ0ZXIgYHdhaXRgXG4gICAgICogbWlsbGlzZWNvbmRzIGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gd2FzXG4gICAgICogaW52b2tlZC4gVGhlIGRlYm91bmNlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGAgbWV0aG9kIHRvIGNhbmNlbFxuICAgICAqIGRlbGF5ZWQgYGZ1bmNgIGludm9jYXRpb25zIGFuZCBhIGBmbHVzaGAgbWV0aG9kIHRvIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLlxuICAgICAqIFByb3ZpZGUgYG9wdGlvbnNgIHRvIGluZGljYXRlIHdoZXRoZXIgYGZ1bmNgIHNob3VsZCBiZSBpbnZva2VkIG9uIHRoZVxuICAgICAqIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YCB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50XG4gICAgICogY2FsbHMgdG8gdGhlIGRlYm91bmNlZCBmdW5jdGlvbiByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBgZnVuY2BcbiAgICAgKiBpbnZvY2F0aW9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIElmIGBsZWFkaW5nYCBhbmQgYHRyYWlsaW5nYCBvcHRpb25zIGFyZSBgdHJ1ZWAsIGBmdW5jYCBpc1xuICAgICAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uXG4gICAgICogaXMgaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxuICAgICAqXG4gICAgICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gICAgICogdW50aWwgdG8gdGhlIG5leHQgdGljaywgc2ltaWxhciB0byBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgLlxuICAgICAqXG4gICAgICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gICAgICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy5kZWJvdW5jZWAgYW5kIGBfLnRocm90dGxlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlYm91bmNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2FpdD0wXSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFsc2VdXG4gICAgICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2FpdF1cbiAgICAgKiAgVGhlIG1heGltdW0gdGltZSBgZnVuY2AgaXMgYWxsb3dlZCB0byBiZSBkZWxheWVkIGJlZm9yZSBpdCdzIGludm9rZWQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50cmFpbGluZz10cnVlXVxuICAgICAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGRlYm91bmNlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gQXZvaWQgY29zdGx5IGNhbGN1bGF0aW9ucyB3aGlsZSB0aGUgd2luZG93IHNpemUgaXMgaW4gZmx1eC5cbiAgICAgKiBqUXVlcnkod2luZG93KS5vbigncmVzaXplJywgXy5kZWJvdW5jZShjYWxjdWxhdGVMYXlvdXQsIDE1MCkpO1xuICAgICAqXG4gICAgICogLy8gSW52b2tlIGBzZW5kTWFpbGAgd2hlbiBjbGlja2VkLCBkZWJvdW5jaW5nIHN1YnNlcXVlbnQgY2FsbHMuXG4gICAgICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIF8uZGVib3VuY2Uoc2VuZE1haWwsIDMwMCwge1xuICAgICAqICAgJ2xlYWRpbmcnOiB0cnVlLFxuICAgICAqICAgJ3RyYWlsaW5nJzogZmFsc2VcbiAgICAgKiB9KSk7XG4gICAgICpcbiAgICAgKiAvLyBFbnN1cmUgYGJhdGNoTG9nYCBpcyBpbnZva2VkIG9uY2UgYWZ0ZXIgMSBzZWNvbmQgb2YgZGVib3VuY2VkIGNhbGxzLlxuICAgICAqIHZhciBkZWJvdW5jZWQgPSBfLmRlYm91bmNlKGJhdGNoTG9nLCAyNTAsIHsgJ21heFdhaXQnOiAxMDAwIH0pO1xuICAgICAqIHZhciBzb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9zdHJlYW0nKTtcbiAgICAgKiBqUXVlcnkoc291cmNlKS5vbignbWVzc2FnZScsIGRlYm91bmNlZCk7XG4gICAgICpcbiAgICAgKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIGRlYm91bmNlZCBpbnZvY2F0aW9uLlxuICAgICAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGRlYm91bmNlZC5jYW5jZWwpO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBsYXN0QXJncyxcbiAgICAgICAgICBsYXN0VGhpcyxcbiAgICAgICAgICBtYXhXYWl0LFxuICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICB0aW1lcklkLFxuICAgICAgICAgIGxhc3RDYWxsVGltZSxcbiAgICAgICAgICBsYXN0SW52b2tlVGltZSA9IDAsXG4gICAgICAgICAgbGVhZGluZyA9IGZhbHNlLFxuICAgICAgICAgIG1heGluZyA9IGZhbHNlLFxuICAgICAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgd2FpdCA9IHRvTnVtYmVyKHdhaXQpIHx8IDA7XG4gICAgICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgbGVhZGluZyA9ICEhb3B0aW9ucy5sZWFkaW5nO1xuICAgICAgICBtYXhpbmcgPSAnbWF4V2FpdCcgaW4gb3B0aW9ucztcbiAgICAgICAgbWF4V2FpdCA9IG1heGluZyA/IG5hdGl2ZU1heCh0b051bWJlcihvcHRpb25zLm1heFdhaXQpIHx8IDAsIHdhaXQpIDogbWF4V2FpdDtcbiAgICAgICAgdHJhaWxpbmcgPSAndHJhaWxpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMudHJhaWxpbmcgOiB0cmFpbGluZztcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKSB7XG4gICAgICAgIHZhciBhcmdzID0gbGFzdEFyZ3MsXG4gICAgICAgICAgICB0aGlzQXJnID0gbGFzdFRoaXM7XG5cbiAgICAgICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBsZWFkaW5nRWRnZSh0aW1lKSB7XG4gICAgICAgIC8vIFJlc2V0IGFueSBgbWF4V2FpdGAgdGltZXIuXG4gICAgICAgIGxhc3RJbnZva2VUaW1lID0gdGltZTtcbiAgICAgICAgLy8gU3RhcnQgdGhlIHRpbWVyIGZvciB0aGUgdHJhaWxpbmcgZWRnZS5cbiAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAgICAgLy8gSW52b2tlIHRoZSBsZWFkaW5nIGVkZ2UuXG4gICAgICAgIHJldHVybiBsZWFkaW5nID8gaW52b2tlRnVuYyh0aW1lKSA6IHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcmVtYWluaW5nV2FpdCh0aW1lKSB7XG4gICAgICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lLFxuICAgICAgICAgICAgdGltZVdhaXRpbmcgPSB3YWl0IC0gdGltZVNpbmNlTGFzdENhbGw7XG5cbiAgICAgICAgcmV0dXJuIG1heGluZ1xuICAgICAgICAgID8gbmF0aXZlTWluKHRpbWVXYWl0aW5nLCBtYXhXYWl0IC0gdGltZVNpbmNlTGFzdEludm9rZSlcbiAgICAgICAgICA6IHRpbWVXYWl0aW5nO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBzaG91bGRJbnZva2UodGltZSkge1xuICAgICAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICAgICAgdGltZVNpbmNlTGFzdEludm9rZSA9IHRpbWUgLSBsYXN0SW52b2tlVGltZTtcblxuICAgICAgICAvLyBFaXRoZXIgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCwgYWN0aXZpdHkgaGFzIHN0b3BwZWQgYW5kIHdlJ3JlIGF0IHRoZVxuICAgICAgICAvLyB0cmFpbGluZyBlZGdlLCB0aGUgc3lzdGVtIHRpbWUgaGFzIGdvbmUgYmFja3dhcmRzIGFuZCB3ZSdyZSB0cmVhdGluZ1xuICAgICAgICAvLyBpdCBhcyB0aGUgdHJhaWxpbmcgZWRnZSwgb3Igd2UndmUgaGl0IHRoZSBgbWF4V2FpdGAgbGltaXQuXG4gICAgICAgIHJldHVybiAobGFzdENhbGxUaW1lID09PSB1bmRlZmluZWQgfHwgKHRpbWVTaW5jZUxhc3RDYWxsID49IHdhaXQpIHx8XG4gICAgICAgICAgKHRpbWVTaW5jZUxhc3RDYWxsIDwgMCkgfHwgKG1heGluZyAmJiB0aW1lU2luY2VMYXN0SW52b2tlID49IG1heFdhaXQpKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdGltZXJFeHBpcmVkKCkge1xuICAgICAgICB2YXIgdGltZSA9IG5vdygpO1xuICAgICAgICBpZiAoc2hvdWxkSW52b2tlKHRpbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRyYWlsaW5nRWRnZSh0aW1lKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lci5cbiAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCByZW1haW5pbmdXYWl0KHRpbWUpKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdHJhaWxpbmdFZGdlKHRpbWUpIHtcbiAgICAgICAgdGltZXJJZCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAvLyBPbmx5IGludm9rZSBpZiB3ZSBoYXZlIGBsYXN0QXJnc2Agd2hpY2ggbWVhbnMgYGZ1bmNgIGhhcyBiZWVuXG4gICAgICAgIC8vIGRlYm91bmNlZCBhdCBsZWFzdCBvbmNlLlxuICAgICAgICBpZiAodHJhaWxpbmcgJiYgbGFzdEFyZ3MpIHtcbiAgICAgICAgICByZXR1cm4gaW52b2tlRnVuYyh0aW1lKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgICAgIGlmICh0aW1lcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdEludm9rZVRpbWUgPSAwO1xuICAgICAgICBsYXN0QXJncyA9IGxhc3RDYWxsVGltZSA9IGxhc3RUaGlzID0gdGltZXJJZCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgICAgIHJldHVybiB0aW1lcklkID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiB0cmFpbGluZ0VkZ2Uobm93KCkpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBkZWJvdW5jZWQoKSB7XG4gICAgICAgIHZhciB0aW1lID0gbm93KCksXG4gICAgICAgICAgICBpc0ludm9raW5nID0gc2hvdWxkSW52b2tlKHRpbWUpO1xuXG4gICAgICAgIGxhc3RBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgICAgIGxhc3RDYWxsVGltZSA9IHRpbWU7XG5cbiAgICAgICAgaWYgKGlzSW52b2tpbmcpIHtcbiAgICAgICAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbGVhZGluZ0VkZ2UobGFzdENhbGxUaW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1heGluZykge1xuICAgICAgICAgICAgLy8gSGFuZGxlIGludm9jYXRpb25zIGluIGEgdGlnaHQgbG9vcC5cbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgICAgICAgICByZXR1cm4gaW52b2tlRnVuYyhsYXN0Q2FsbFRpbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgZGVib3VuY2VkLmNhbmNlbCA9IGNhbmNlbDtcbiAgICAgIGRlYm91bmNlZC5mbHVzaCA9IGZsdXNoO1xuICAgICAgcmV0dXJuIGRlYm91bmNlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZlcnMgaW52b2tpbmcgdGhlIGBmdW5jYCB1bnRpbCB0aGUgY3VycmVudCBjYWxsIHN0YWNrIGhhcyBjbGVhcmVkLiBBbnlcbiAgICAgKiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdG8gYGZ1bmNgIHdoZW4gaXQncyBpbnZva2VkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVmZXIuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXIgaWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVmZXIoZnVuY3Rpb24odGV4dCkge1xuICAgICAqICAgY29uc29sZS5sb2codGV4dCk7XG4gICAgICogfSwgJ2RlZmVycmVkJyk7XG4gICAgICogLy8gPT4gTG9ncyAnZGVmZXJyZWQnIGFmdGVyIG9uZSBtaWxsaXNlY29uZC5cbiAgICAgKi9cbiAgICB2YXIgZGVmZXIgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBhcmdzKSB7XG4gICAgICByZXR1cm4gYmFzZURlbGF5KGZ1bmMsIDEsIGFyZ3MpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyBgZnVuY2AgYWZ0ZXIgYHdhaXRgIG1pbGxpc2Vjb25kcy4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZVxuICAgICAqIHByb3ZpZGVkIHRvIGBmdW5jYCB3aGVuIGl0J3MgaW52b2tlZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlbGF5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3YWl0IFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5IGludm9jYXRpb24uXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXIgaWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVsYXkoZnVuY3Rpb24odGV4dCkge1xuICAgICAqICAgY29uc29sZS5sb2codGV4dCk7XG4gICAgICogfSwgMTAwMCwgJ2xhdGVyJyk7XG4gICAgICogLy8gPT4gTG9ncyAnbGF0ZXInIGFmdGVyIG9uZSBzZWNvbmQuXG4gICAgICovXG4gICAgdmFyIGRlbGF5ID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgd2FpdCwgYXJncykge1xuICAgICAgcmV0dXJuIGJhc2VEZWxheShmdW5jLCB0b051bWJlcih3YWl0KSB8fCAwLCBhcmdzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggYXJndW1lbnRzIHJldmVyc2VkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZmxpcCBhcmd1bWVudHMgZm9yLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZsaXBwZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBmbGlwcGVkID0gXy5mbGlwKGZ1bmN0aW9uKCkge1xuICAgICAqICAgcmV0dXJuIF8udG9BcnJheShhcmd1bWVudHMpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogZmxpcHBlZCgnYScsICdiJywgJ2MnLCAnZCcpO1xuICAgICAqIC8vID0+IFsnZCcsICdjJywgJ2InLCAnYSddXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxpcChmdW5jKSB7XG4gICAgICByZXR1cm4gY3JlYXRlV3JhcChmdW5jLCBXUkFQX0ZMSVBfRkxBRyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAgICAgKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gICAgICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gICAgICogcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIG1hcCBjYWNoZSBrZXkuIFRoZSBgZnVuY2BcbiAgICAgKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAgICAgKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAgICAgKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICAgICAqIFtgTWFwYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcHJvcGVydGllcy1vZi10aGUtbWFwLXByb3RvdHlwZS1vYmplY3QpXG4gICAgICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICAgICAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAgICAgKlxuICAgICAqIHZhciB2YWx1ZXMgPSBfLm1lbW9pemUoXy52YWx1ZXMpO1xuICAgICAqIHZhbHVlcyhvYmplY3QpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqXG4gICAgICogdmFsdWVzKG90aGVyKTtcbiAgICAgKiAvLyA9PiBbMywgNF1cbiAgICAgKlxuICAgICAqIG9iamVjdC5hID0gMjtcbiAgICAgKiB2YWx1ZXMob2JqZWN0KTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKlxuICAgICAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICAgICAqIHZhbHVlcy5jYWNoZS5zZXQob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAgICAgKiB2YWx1ZXMob2JqZWN0KTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYiddXG4gICAgICpcbiAgICAgKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICAgICAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgICAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfVxuXG4gICAgLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG4gICAgbWVtb2l6ZS5DYWNoZSA9IE1hcENhY2hlO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbmVnYXRlcyB0aGUgcmVzdWx0IG9mIHRoZSBwcmVkaWNhdGUgYGZ1bmNgLiBUaGVcbiAgICAgKiBgZnVuY2AgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgYW5kIGFyZ3VtZW50cyBvZiB0aGVcbiAgICAgKiBjcmVhdGVkIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBwcmVkaWNhdGUgdG8gbmVnYXRlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG5lZ2F0ZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGlzRXZlbihuKSB7XG4gICAgICogICByZXR1cm4gbiAlIDIgPT0gMDtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBfLmZpbHRlcihbMSwgMiwgMywgNCwgNSwgNl0sIF8ubmVnYXRlKGlzRXZlbikpO1xuICAgICAqIC8vID0+IFsxLCAzLCA1XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5lZ2F0ZShwcmVkaWNhdGUpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJlZGljYXRlICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDogcmV0dXJuICFwcmVkaWNhdGUuY2FsbCh0aGlzKTtcbiAgICAgICAgICBjYXNlIDE6IHJldHVybiAhcHJlZGljYXRlLmNhbGwodGhpcywgYXJnc1swXSk7XG4gICAgICAgICAgY2FzZSAyOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuICFwcmVkaWNhdGUuY2FsbCh0aGlzLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIXByZWRpY2F0ZS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaXMgcmVzdHJpY3RlZCB0byBpbnZva2luZyBgZnVuY2Agb25jZS4gUmVwZWF0IGNhbGxzXG4gICAgICogdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGludm9jYXRpb24uIFRoZSBgZnVuY2AgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMgb2YgdGhlIGNyZWF0ZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByZXN0cmljdGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgaW5pdGlhbGl6ZSA9IF8ub25jZShjcmVhdGVBcHBsaWNhdGlvbik7XG4gICAgICogaW5pdGlhbGl6ZSgpO1xuICAgICAqIGluaXRpYWxpemUoKTtcbiAgICAgKiAvLyA9PiBgY3JlYXRlQXBwbGljYXRpb25gIGlzIGludm9rZWQgb25jZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG9uY2UoZnVuYykge1xuICAgICAgcmV0dXJuIGJlZm9yZSgyLCBmdW5jKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudHMgdHJhbnNmb3JtZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbdHJhbnNmb3Jtcz1bXy5pZGVudGl0eV1dXG4gICAgICogIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm1zLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBkb3VibGVkKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBmdW5jID0gXy5vdmVyQXJncyhmdW5jdGlvbih4LCB5KSB7XG4gICAgICogICByZXR1cm4gW3gsIHldO1xuICAgICAqIH0sIFtzcXVhcmUsIGRvdWJsZWRdKTtcbiAgICAgKlxuICAgICAqIGZ1bmMoOSwgMyk7XG4gICAgICogLy8gPT4gWzgxLCA2XVxuICAgICAqXG4gICAgICogZnVuYygxMCwgNSk7XG4gICAgICogLy8gPT4gWzEwMCwgMTBdXG4gICAgICovXG4gICAgdmFyIG92ZXJBcmdzID0gY2FzdFJlc3QoZnVuY3Rpb24oZnVuYywgdHJhbnNmb3Jtcykge1xuICAgICAgdHJhbnNmb3JtcyA9ICh0cmFuc2Zvcm1zLmxlbmd0aCA9PSAxICYmIGlzQXJyYXkodHJhbnNmb3Jtc1swXSkpXG4gICAgICAgID8gYXJyYXlNYXAodHJhbnNmb3Jtc1swXSwgYmFzZVVuYXJ5KGdldEl0ZXJhdGVlKCkpKVxuICAgICAgICA6IGFycmF5TWFwKGJhc2VGbGF0dGVuKHRyYW5zZm9ybXMsIDEpLCBiYXNlVW5hcnkoZ2V0SXRlcmF0ZWUoKSkpO1xuXG4gICAgICB2YXIgZnVuY3NMZW5ndGggPSB0cmFuc2Zvcm1zLmxlbmd0aDtcbiAgICAgIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWluKGFyZ3MubGVuZ3RoLCBmdW5jc0xlbmd0aCk7XG5cbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICBhcmdzW2luZGV4XSA9IHRyYW5zZm9ybXNbaW5kZXhdLmNhbGwodGhpcywgYXJnc1tpbmRleF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBgcGFydGlhbHNgIHByZXBlbmRlZCB0byB0aGVcbiAgICAgKiBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYmluZGAgZXhjZXB0IGl0IGRvZXMgKipub3QqKlxuICAgICAqIGFsdGVyIHRoZSBgdGhpc2AgYmluZGluZy5cbiAgICAgKlxuICAgICAqIFRoZSBgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAgICAgKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBwYXJ0aWFsbHlcbiAgICAgKiBhcHBsaWVkIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjIuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHBhcnRpYWxseSBhcHBseSBhcmd1bWVudHMgdG8uXG4gICAgICogQHBhcmFtIHsuLi4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFydGlhbGx5IGFwcGxpZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGdyZWV0KGdyZWV0aW5nLCBuYW1lKSB7XG4gICAgICogICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyBuYW1lO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBzYXlIZWxsb1RvID0gXy5wYXJ0aWFsKGdyZWV0LCAnaGVsbG8nKTtcbiAgICAgKiBzYXlIZWxsb1RvKCdmcmVkJyk7XG4gICAgICogLy8gPT4gJ2hlbGxvIGZyZWQnXG4gICAgICpcbiAgICAgKiAvLyBQYXJ0aWFsbHkgYXBwbGllZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgKiB2YXIgZ3JlZXRGcmVkID0gXy5wYXJ0aWFsKGdyZWV0LCBfLCAnZnJlZCcpO1xuICAgICAqIGdyZWV0RnJlZCgnaGknKTtcbiAgICAgKiAvLyA9PiAnaGkgZnJlZCdcbiAgICAgKi9cbiAgICB2YXIgcGFydGlhbCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgaG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLCBnZXRIb2xkZXIocGFydGlhbCkpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9QQVJUSUFMX0ZMQUcsIHVuZGVmaW5lZCwgcGFydGlhbHMsIGhvbGRlcnMpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5wYXJ0aWFsYCBleGNlcHQgdGhhdCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAgICAgKiBhcmUgYXBwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAgICAgKlxuICAgICAqIFRoZSBgXy5wYXJ0aWFsUmlnaHQucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpY1xuICAgICAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIHBhcnRpYWxseVxuICAgICAqIGFwcGxpZWQgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5IGFyZ3VtZW50cyB0by5cbiAgICAgKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBwYXJ0aWFsbHkgYXBwbGllZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZ3JlZXQoZ3JlZXRpbmcsIG5hbWUpIHtcbiAgICAgKiAgIHJldHVybiBncmVldGluZyArICcgJyArIG5hbWU7XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGdyZWV0RnJlZCA9IF8ucGFydGlhbFJpZ2h0KGdyZWV0LCAnZnJlZCcpO1xuICAgICAqIGdyZWV0RnJlZCgnaGknKTtcbiAgICAgKiAvLyA9PiAnaGkgZnJlZCdcbiAgICAgKlxuICAgICAqIC8vIFBhcnRpYWxseSBhcHBsaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICAgICAqIHZhciBzYXlIZWxsb1RvID0gXy5wYXJ0aWFsUmlnaHQoZ3JlZXQsICdoZWxsbycsIF8pO1xuICAgICAqIHNheUhlbGxvVG8oJ2ZyZWQnKTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gZnJlZCdcbiAgICAgKi9cbiAgICB2YXIgcGFydGlhbFJpZ2h0ID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgcGFydGlhbHMpIHtcbiAgICAgIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGdldEhvbGRlcihwYXJ0aWFsUmlnaHQpKTtcbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHLCB1bmRlZmluZWQsIHBhcnRpYWxzLCBob2xkZXJzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggYXJndW1lbnRzIGFycmFuZ2VkIGFjY29yZGluZ1xuICAgICAqIHRvIHRoZSBzcGVjaWZpZWQgYGluZGV4ZXNgIHdoZXJlIHRoZSBhcmd1bWVudCB2YWx1ZSBhdCB0aGUgZmlyc3QgaW5kZXggaXNcbiAgICAgKiBwcm92aWRlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIHRoZSBhcmd1bWVudCB2YWx1ZSBhdCB0aGUgc2Vjb25kIGluZGV4IGlzXG4gICAgICogcHJvdmlkZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCwgYW5kIHNvIG9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVhcnJhbmdlIGFyZ3VtZW50cyBmb3IuXG4gICAgICogQHBhcmFtIHsuLi4obnVtYmVyfG51bWJlcltdKX0gaW5kZXhlcyBUaGUgYXJyYW5nZWQgYXJndW1lbnQgaW5kZXhlcy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHJlYXJnZWQgPSBfLnJlYXJnKGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgKiAgIHJldHVybiBbYSwgYiwgY107XG4gICAgICogfSwgWzIsIDAsIDFdKTtcbiAgICAgKlxuICAgICAqIHJlYXJnZWQoJ2InLCAnYycsICdhJylcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAgICAgKi9cbiAgICB2YXIgcmVhcmcgPSBmbGF0UmVzdChmdW5jdGlvbihmdW5jLCBpbmRleGVzKSB7XG4gICAgICByZXR1cm4gY3JlYXRlV3JhcChmdW5jLCBXUkFQX1JFQVJHX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGluZGV4ZXMpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlXG4gICAgICogY3JlYXRlZCBmdW5jdGlvbiBhbmQgYXJndW1lbnRzIGZyb20gYHN0YXJ0YCBhbmQgYmV5b25kIHByb3ZpZGVkIGFzXG4gICAgICogYW4gYXJyYXkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb24gdGhlXG4gICAgICogW3Jlc3QgcGFyYW1ldGVyXShodHRwczovL21kbi5pby9yZXN0X3BhcmFtZXRlcnMpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBzYXkgPSBfLnJlc3QoZnVuY3Rpb24od2hhdCwgbmFtZXMpIHtcbiAgICAgKiAgIHJldHVybiB3aGF0ICsgJyAnICsgXy5pbml0aWFsKG5hbWVzKS5qb2luKCcsICcpICtcbiAgICAgKiAgICAgKF8uc2l6ZShuYW1lcykgPiAxID8gJywgJiAnIDogJycpICsgXy5sYXN0KG5hbWVzKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIHNheSgnaGVsbG8nLCAnZnJlZCcsICdiYXJuZXknLCAncGViYmxlcycpO1xuICAgICAqIC8vID0+ICdoZWxsbyBmcmVkLCBiYXJuZXksICYgcGViYmxlcydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICBzdGFydCA9IHN0YXJ0ID09PSB1bmRlZmluZWQgPyBzdGFydCA6IHRvSW50ZWdlcihzdGFydCk7XG4gICAgICByZXR1cm4gYmFzZVJlc3QoZnVuYywgc3RhcnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZVxuICAgICAqIGNyZWF0ZSBmdW5jdGlvbiBhbmQgYW4gYXJyYXkgb2YgYXJndW1lbnRzIG11Y2ggbGlrZVxuICAgICAqIFtgRnVuY3Rpb24jYXBwbHlgXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5KS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGVcbiAgICAgKiBbc3ByZWFkIG9wZXJhdG9yXShodHRwczovL21kbi5pby9zcHJlYWRfb3BlcmF0b3IpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMi4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gc3ByZWFkIGFyZ3VtZW50cyBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBzcHJlYWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBzYXkgPSBfLnNwcmVhZChmdW5jdGlvbih3aG8sIHdoYXQpIHtcbiAgICAgKiAgIHJldHVybiB3aG8gKyAnIHNheXMgJyArIHdoYXQ7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBzYXkoWydmcmVkJywgJ2hlbGxvJ10pO1xuICAgICAqIC8vID0+ICdmcmVkIHNheXMgaGVsbG8nXG4gICAgICpcbiAgICAgKiB2YXIgbnVtYmVycyA9IFByb21pc2UuYWxsKFtcbiAgICAgKiAgIFByb21pc2UucmVzb2x2ZSg0MCksXG4gICAgICogICBQcm9taXNlLnJlc29sdmUoMzYpXG4gICAgICogXSk7XG4gICAgICpcbiAgICAgKiBudW1iZXJzLnRoZW4oXy5zcHJlYWQoZnVuY3Rpb24oeCwgeSkge1xuICAgICAqICAgcmV0dXJuIHggKyB5O1xuICAgICAqIH0pKTtcbiAgICAgKiAvLyA9PiBhIFByb21pc2Ugb2YgNzZcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzcHJlYWQoZnVuYywgc3RhcnQpIHtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHN0YXJ0ID0gc3RhcnQgPT0gbnVsbCA/IDAgOiBuYXRpdmVNYXgodG9JbnRlZ2VyKHN0YXJ0KSwgMCk7XG4gICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgICAgICB2YXIgYXJyYXkgPSBhcmdzW3N0YXJ0XSxcbiAgICAgICAgICAgIG90aGVyQXJncyA9IGNhc3RTbGljZShhcmdzLCAwLCBzdGFydCk7XG5cbiAgICAgICAgaWYgKGFycmF5KSB7XG4gICAgICAgICAgYXJyYXlQdXNoKG90aGVyQXJncywgYXJyYXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHRocm90dGxlZCBmdW5jdGlvbiB0aGF0IG9ubHkgaW52b2tlcyBgZnVuY2AgYXQgbW9zdCBvbmNlIHBlclxuICAgICAqIGV2ZXJ5IGB3YWl0YCBtaWxsaXNlY29uZHMuIFRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gY29tZXMgd2l0aCBhIGBjYW5jZWxgXG4gICAgICogbWV0aG9kIHRvIGNhbmNlbCBkZWxheWVkIGBmdW5jYCBpbnZvY2F0aW9ucyBhbmQgYSBgZmx1c2hgIG1ldGhvZCB0b1xuICAgICAqIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYFxuICAgICAqIHNob3VsZCBiZSBpbnZva2VkIG9uIHRoZSBsZWFkaW5nIGFuZC9vciB0cmFpbGluZyBlZGdlIG9mIHRoZSBgd2FpdGBcbiAgICAgKiB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWQgd2l0aCB0aGUgbGFzdCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlXG4gICAgICogdGhyb3R0bGVkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50IGNhbGxzIHRvIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gcmV0dXJuIHRoZVxuICAgICAqIHJlc3VsdCBvZiB0aGUgbGFzdCBgZnVuY2AgaW52b2NhdGlvbi5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAgICAgKiBpbnZva2VkIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIHRocm90dGxlZCBmdW5jdGlvblxuICAgICAqIGlzIGludm9rZWQgbW9yZSB0aGFuIG9uY2UgZHVyaW5nIHRoZSBgd2FpdGAgdGltZW91dC5cbiAgICAgKlxuICAgICAqIElmIGB3YWl0YCBpcyBgMGAgYW5kIGBsZWFkaW5nYCBpcyBgZmFsc2VgLCBgZnVuY2AgaW52b2NhdGlvbiBpcyBkZWZlcnJlZFxuICAgICAqIHVudGlsIHRvIHRoZSBuZXh0IHRpY2ssIHNpbWlsYXIgdG8gYHNldFRpbWVvdXRgIHdpdGggYSB0aW1lb3V0IG9mIGAwYC5cbiAgICAgKlxuICAgICAqIFNlZSBbRGF2aWQgQ29yYmFjaG8ncyBhcnRpY2xlXShodHRwczovL2Nzcy10cmlja3MuY29tL2RlYm91bmNpbmctdGhyb3R0bGluZy1leHBsYWluZWQtZXhhbXBsZXMvKVxuICAgICAqIGZvciBkZXRhaWxzIG92ZXIgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYF8udGhyb3R0bGVgIGFuZCBgXy5kZWJvdW5jZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB0aHJvdHRsZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhyb3R0bGUgaW52b2NhdGlvbnMgdG8uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sZWFkaW5nPXRydWVdXG4gICAgICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWlsaW5nPXRydWVdXG4gICAgICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgdGhyb3R0bGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBBdm9pZCBleGNlc3NpdmVseSB1cGRhdGluZyB0aGUgcG9zaXRpb24gd2hpbGUgc2Nyb2xsaW5nLlxuICAgICAqIGpRdWVyeSh3aW5kb3cpLm9uKCdzY3JvbGwnLCBfLnRocm90dGxlKHVwZGF0ZVBvc2l0aW9uLCAxMDApKTtcbiAgICAgKlxuICAgICAqIC8vIEludm9rZSBgcmVuZXdUb2tlbmAgd2hlbiB0aGUgY2xpY2sgZXZlbnQgaXMgZmlyZWQsIGJ1dCBub3QgbW9yZSB0aGFuIG9uY2UgZXZlcnkgNSBtaW51dGVzLlxuICAgICAqIHZhciB0aHJvdHRsZWQgPSBfLnRocm90dGxlKHJlbmV3VG9rZW4sIDMwMDAwMCwgeyAndHJhaWxpbmcnOiBmYWxzZSB9KTtcbiAgICAgKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgdGhyb3R0bGVkKTtcbiAgICAgKlxuICAgICAqIC8vIENhbmNlbCB0aGUgdHJhaWxpbmcgdGhyb3R0bGVkIGludm9jYXRpb24uXG4gICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgdGhyb3R0bGVkLmNhbmNlbCk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gdGhyb3R0bGUoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgICAgdmFyIGxlYWRpbmcgPSB0cnVlLFxuICAgICAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICAgIGxlYWRpbmcgPSAnbGVhZGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy5sZWFkaW5nIDogbGVhZGluZztcbiAgICAgICAgdHJhaWxpbmcgPSAndHJhaWxpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMudHJhaWxpbmcgOiB0cmFpbGluZztcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWJvdW5jZShmdW5jLCB3YWl0LCB7XG4gICAgICAgICdsZWFkaW5nJzogbGVhZGluZyxcbiAgICAgICAgJ21heFdhaXQnOiB3YWl0LFxuICAgICAgICAndHJhaWxpbmcnOiB0cmFpbGluZ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB1cCB0byBvbmUgYXJndW1lbnQsIGlnbm9yaW5nIGFueVxuICAgICAqIGFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1hcChbJzYnLCAnOCcsICcxMCddLCBfLnVuYXJ5KHBhcnNlSW50KSk7XG4gICAgICogLy8gPT4gWzYsIDgsIDEwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuYXJ5KGZ1bmMpIHtcbiAgICAgIHJldHVybiBhcnkoZnVuYywgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgYHZhbHVlYCB0byBgd3JhcHBlcmAgYXMgaXRzIGZpcnN0XG4gICAgICogYXJndW1lbnQuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgZnVuY3Rpb24gYXJlIGFwcGVuZGVkXG4gICAgICogdG8gdGhvc2UgcHJvdmlkZWQgdG8gdGhlIGB3cmFwcGVyYC4gVGhlIHdyYXBwZXIgaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2BcbiAgICAgKiBiaW5kaW5nIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbd3JhcHBlcj1pZGVudGl0eV0gVGhlIHdyYXBwZXIgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBwID0gXy53cmFwKF8uZXNjYXBlLCBmdW5jdGlvbihmdW5jLCB0ZXh0KSB7XG4gICAgICogICByZXR1cm4gJzxwPicgKyBmdW5jKHRleHQpICsgJzwvcD4nO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogcCgnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAgICAgKiAvLyA9PiAnPHA+ZnJlZCwgYmFybmV5LCAmYW1wOyBwZWJibGVzPC9wPidcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwKHZhbHVlLCB3cmFwcGVyKSB7XG4gICAgICByZXR1cm4gcGFydGlhbChjYXN0RnVuY3Rpb24od3JhcHBlciksIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDYXN0cyBgdmFsdWVgIGFzIGFuIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjQuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KDEpO1xuICAgICAqIC8vID0+IFsxXVxuICAgICAqXG4gICAgICogXy5jYXN0QXJyYXkoeyAnYSc6IDEgfSk7XG4gICAgICogLy8gPT4gW3sgJ2EnOiAxIH1dXG4gICAgICpcbiAgICAgKiBfLmNhc3RBcnJheSgnYWJjJyk7XG4gICAgICogLy8gPT4gWydhYmMnXVxuICAgICAqXG4gICAgICogXy5jYXN0QXJyYXkobnVsbCk7XG4gICAgICogLy8gPT4gW251bGxdXG4gICAgICpcbiAgICAgKiBfLmNhc3RBcnJheSh1bmRlZmluZWQpO1xuICAgICAqIC8vID0+IFt1bmRlZmluZWRdXG4gICAgICpcbiAgICAgKiBfLmNhc3RBcnJheSgpO1xuICAgICAqIC8vID0+IFtdXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107XG4gICAgICogY29uc29sZS5sb2coXy5jYXN0QXJyYXkoYXJyYXkpID09PSBhcnJheSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhc3RBcnJheSgpIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgdmFsdWUgPSBhcmd1bWVudHNbMF07XG4gICAgICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNoYWxsb3cgY2xvbmUgb2YgYHZhbHVlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uIHRoZVxuICAgICAqIFtzdHJ1Y3R1cmVkIGNsb25lIGFsZ29yaXRobV0oaHR0cHM6Ly9tZG4uaW8vU3RydWN0dXJlZF9jbG9uZV9hbGdvcml0aG0pXG4gICAgICogYW5kIHN1cHBvcnRzIGNsb25pbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucywgZGF0ZSBvYmplY3RzLCBtYXBzLFxuICAgICAqIG51bWJlcnMsIGBPYmplY3RgIG9iamVjdHMsIHJlZ2V4ZXMsIHNldHMsIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCB0eXBlZFxuICAgICAqIGFycmF5cy4gVGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgYGFyZ3VtZW50c2Agb2JqZWN0cyBhcmUgY2xvbmVkXG4gICAgICogYXMgcGxhaW4gb2JqZWN0cy4gQW4gZW1wdHkgb2JqZWN0IGlzIHJldHVybmVkIGZvciB1bmNsb25lYWJsZSB2YWx1ZXMgc3VjaFxuICAgICAqIGFzIGVycm9yIG9iamVjdHMsIGZ1bmN0aW9ucywgRE9NIG5vZGVzLCBhbmQgV2Vha01hcHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gICAgICogQHNlZSBfLmNsb25lRGVlcFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICdhJzogMSB9LCB7ICdiJzogMiB9XTtcbiAgICAgKlxuICAgICAqIHZhciBzaGFsbG93ID0gXy5jbG9uZShvYmplY3RzKTtcbiAgICAgKiBjb25zb2xlLmxvZyhzaGFsbG93WzBdID09PSBvYmplY3RzWzBdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmUodmFsdWUpIHtcbiAgICAgIHJldHVybiBiYXNlQ2xvbmUodmFsdWUsIENMT05FX1NZTUJPTFNfRkxBRyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jbG9uZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcbiAgICAgKiBpcyBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIGNsb25lZCB2YWx1ZS4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsXG4gICAgICogY2xvbmluZyBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkIHdpdGhcbiAgICAgKiB1cCB0byBmb3VyIGFyZ3VtZW50czsgKHZhbHVlIFssIGluZGV4fGtleSwgb2JqZWN0LCBzdGFja10pLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gICAgICogQHNlZSBfLmNsb25lRGVlcFdpdGhcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gY3VzdG9taXplcih2YWx1ZSkge1xuICAgICAqICAgaWYgKF8uaXNFbGVtZW50KHZhbHVlKSkge1xuICAgICAqICAgICByZXR1cm4gdmFsdWUuY2xvbmVOb2RlKGZhbHNlKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgZWwgPSBfLmNsb25lV2l0aChkb2N1bWVudC5ib2R5LCBjdXN0b21pemVyKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGVsID09PSBkb2N1bWVudC5ib2R5KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqIGNvbnNvbGUubG9nKGVsLm5vZGVOYW1lKTtcbiAgICAgKiAvLyA9PiAnQk9EWSdcbiAgICAgKiBjb25zb2xlLmxvZyhlbC5jaGlsZE5vZGVzLmxlbmd0aCk7XG4gICAgICogLy8gPT4gMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lV2l0aCh2YWx1ZSwgY3VzdG9taXplcikge1xuICAgICAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfU1lNQk9MU19GTEFHLCBjdXN0b21pemVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmNsb25lYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBjbG9uZXMgYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmVjdXJzaXZlbHkgY2xvbmUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGRlZXAgY2xvbmVkIHZhbHVlLlxuICAgICAqIEBzZWUgXy5jbG9uZVxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICdhJzogMSB9LCB7ICdiJzogMiB9XTtcbiAgICAgKlxuICAgICAqIHZhciBkZWVwID0gXy5jbG9uZURlZXAob2JqZWN0cyk7XG4gICAgICogY29uc29sZS5sb2coZGVlcFswXSA9PT0gb2JqZWN0c1swXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZURlZXAodmFsdWUpIHtcbiAgICAgIHJldHVybiBiYXNlQ2xvbmUodmFsdWUsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jbG9uZVdpdGhgIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGNsb25lcyBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZWN1cnNpdmVseSBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBkZWVwIGNsb25lZCB2YWx1ZS5cbiAgICAgKiBAc2VlIF8uY2xvbmVXaXRoXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIodmFsdWUpIHtcbiAgICAgKiAgIGlmIChfLmlzRWxlbWVudCh2YWx1ZSkpIHtcbiAgICAgKiAgICAgcmV0dXJuIHZhbHVlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgZWwgPSBfLmNsb25lRGVlcFdpdGgoZG9jdW1lbnQuYm9keSwgY3VzdG9taXplcik7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhlbCA9PT0gZG9jdW1lbnQuYm9keSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKiBjb25zb2xlLmxvZyhlbC5ub2RlTmFtZSk7XG4gICAgICogLy8gPT4gJ0JPRFknXG4gICAgICogY29uc29sZS5sb2coZWwuY2hpbGROb2Rlcy5sZW5ndGgpO1xuICAgICAqIC8vID0+IDIwXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVEZWVwV2l0aCh2YWx1ZSwgY3VzdG9taXplcikge1xuICAgICAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHLCBjdXN0b21pemVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYG9iamVjdGAgY29uZm9ybXMgdG8gYHNvdXJjZWAgYnkgaW52b2tpbmcgdGhlIHByZWRpY2F0ZVxuICAgICAqIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB2YWx1ZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBgXy5jb25mb3Jtc2Agd2hlbiBgc291cmNlYCBpc1xuICAgICAqIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTQuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHByZWRpY2F0ZXMgdG8gY29uZm9ybSB0by5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgY29uZm9ybXMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAgICAgKlxuICAgICAqIF8uY29uZm9ybXNUbyhvYmplY3QsIHsgJ2InOiBmdW5jdGlvbihuKSB7IHJldHVybiBuID4gMTsgfSB9KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmNvbmZvcm1zVG8ob2JqZWN0LCB7ICdiJzogZnVuY3Rpb24obikgeyByZXR1cm4gbiA+IDI7IH0gfSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb25mb3Jtc1RvKG9iamVjdCwgc291cmNlKSB7XG4gICAgICByZXR1cm4gc291cmNlID09IG51bGwgfHwgYmFzZUNvbmZvcm1zVG8ob2JqZWN0LCBzb3VyY2UsIGtleXMoc291cmNlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYVxuICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAgICAgKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICAgICAqXG4gICAgICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5lcSgnYScsICdhJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5lcShOYU4sIE5hTik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIGBvdGhlcmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy45LjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gYG90aGVyYCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBzZWUgXy5sdFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmd0KDMsIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZ3QoMywgMyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uZ3QoMSwgMyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgZ3QgPSBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGJhc2VHdCk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYG90aGVyYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjkuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0b1xuICAgICAqICBgb3RoZXJgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQHNlZSBfLmx0ZVxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmd0ZSgzLCAxKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmd0ZSgzLCAzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmd0ZSgxLCAzKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBndGUgPSBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgcmV0dXJuIHZhbHVlID49IG90aGVyO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheSgnYWJjJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheShfLm5vb3ApO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlCdWZmZXJgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjMuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXkgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUJ1ZmZlcihuZXcgQXJyYXlCdWZmZXIoMikpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUJ1ZmZlcihuZXcgQXJyYXkoMikpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzQXJyYXlCdWZmZXIgPSBub2RlSXNBcnJheUJ1ZmZlciA/IGJhc2VVbmFyeShub2RlSXNBcnJheUJ1ZmZlcikgOiBiYXNlSXNBcnJheUJ1ZmZlcjtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAgICAgKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gICAgICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICAgICAqIGlzIGFuIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXktbGlrZSBvYmplY3QsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGJvb2xlYW4gcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBib29sZWFuLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNCb29sZWFuKGZhbHNlKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQm9vbGVhbihudWxsKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSB8fFxuICAgICAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBib29sVGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjMuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRGF0ZWAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGRhdGUgb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNEYXRlKG5ldyBEYXRlKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRGF0ZSgnTW9uIEFwcmlsIDIzIDIwMTInKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc0RhdGUgPSBub2RlSXNEYXRlID8gYmFzZVVuYXJ5KG5vZGVJc0RhdGUpIDogYmFzZUlzRGF0ZTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIERPTSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIERPTSBlbGVtZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNFbGVtZW50KGRvY3VtZW50LmJvZHkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNFbGVtZW50KCc8Ym9keT4nKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgdmFsdWUubm9kZVR5cGUgPT09IDEgJiYgIWlzUGxhaW5PYmplY3QodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFuIGVtcHR5IG9iamVjdCwgY29sbGVjdGlvbiwgbWFwLCBvciBzZXQuXG4gICAgICpcbiAgICAgKiBPYmplY3RzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBubyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWRcbiAgICAgKiBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogQXJyYXktbGlrZSB2YWx1ZXMgc3VjaCBhcyBgYXJndW1lbnRzYCBvYmplY3RzLCBhcnJheXMsIGJ1ZmZlcnMsIHN0cmluZ3MsIG9yXG4gICAgICogalF1ZXJ5LWxpa2UgY29sbGVjdGlvbnMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYGxlbmd0aGAgb2YgYDBgLlxuICAgICAqIFNpbWlsYXJseSwgbWFwcyBhbmQgc2V0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgc2l6ZWAgb2YgYDBgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBlbXB0eSwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRW1wdHkobnVsbCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0VtcHR5KHRydWUpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNFbXB0eSgxKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRW1wdHkoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0VtcHR5KHsgJ2EnOiAxIH0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmXG4gICAgICAgICAgKGlzQXJyYXkodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUuc3BsaWNlID09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgICAgIGlzQnVmZmVyKHZhbHVlKSB8fCBpc1R5cGVkQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICAgICAgcmV0dXJuICF2YWx1ZS5sZW5ndGg7XG4gICAgICB9XG4gICAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKTtcbiAgICAgIGlmICh0YWcgPT0gbWFwVGFnIHx8IHRhZyA9PSBzZXRUYWcpIHtcbiAgICAgICAgcmV0dXJuICF2YWx1ZS5zaXplO1xuICAgICAgfVxuICAgICAgaWYgKGlzUHJvdG90eXBlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gIWJhc2VLZXlzKHZhbHVlKS5sZW5ndGg7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmVcbiAgICAgKiBlcXVpdmFsZW50LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGNvbXBhcmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLFxuICAgICAqIGRhdGUgb2JqZWN0cywgZXJyb3Igb2JqZWN0cywgbWFwcywgbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcyxcbiAgICAgKiBzZXRzLCBzdHJpbmdzLCBzeW1ib2xzLCBhbmQgdHlwZWQgYXJyYXlzLiBgT2JqZWN0YCBvYmplY3RzIGFyZSBjb21wYXJlZFxuICAgICAqIGJ5IHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBGdW5jdGlvbnMgYW5kIERPTVxuICAgICAqIG5vZGVzIGFyZSBjb21wYXJlZCBieSBzdHJpY3QgZXF1YWxpdHksIGkuZS4gYD09PWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAgICAgKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICAgICAqXG4gICAgICogXy5pc0VxdWFsKG9iamVjdCwgb3RoZXIpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIG9iamVjdCA9PT0gb3RoZXI7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0VxdWFsKHZhbHVlLCBvdGhlcikge1xuICAgICAgcmV0dXJuIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0VxdWFsYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgdG8gY29tcGFyZSB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgLCBjb21wYXJpc29uc1xuICAgICAqIGFyZSBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkIHdpdGggdXAgdG9cbiAgICAgKiBzaXggYXJndW1lbnRzOiAob2JqVmFsdWUsIG90aFZhbHVlIFssIGluZGV4fGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2tdKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGlzR3JlZXRpbmcodmFsdWUpIHtcbiAgICAgKiAgIHJldHVybiAvXmgoPzppfGVsbG8pJC8udGVzdCh2YWx1ZSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUpIHtcbiAgICAgKiAgIGlmIChpc0dyZWV0aW5nKG9ialZhbHVlKSAmJiBpc0dyZWV0aW5nKG90aFZhbHVlKSkge1xuICAgICAqICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbJ2hlbGxvJywgJ2dvb2RieWUnXTtcbiAgICAgKiB2YXIgb3RoZXIgPSBbJ2hpJywgJ2dvb2RieWUnXTtcbiAgICAgKlxuICAgICAqIF8uaXNFcXVhbFdpdGgoYXJyYXksIG90aGVyLCBjdXN0b21pemVyKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFcXVhbFdpdGgodmFsdWUsIG90aGVyLCBjdXN0b21pemVyKSB7XG4gICAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgcmVzdWx0ID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIodmFsdWUsIG90aGVyKSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgdW5kZWZpbmVkLCBjdXN0b21pemVyKSA6ICEhcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFuIGBFcnJvcmAsIGBFdmFsRXJyb3JgLCBgUmFuZ2VFcnJvcmAsIGBSZWZlcmVuY2VFcnJvcmAsXG4gICAgICogYFN5bnRheEVycm9yYCwgYFR5cGVFcnJvcmAsIG9yIGBVUklFcnJvcmAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBlcnJvciBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0Vycm9yKG5ldyBFcnJvcik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0Vycm9yKEVycm9yKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRXJyb3IodmFsdWUpIHtcbiAgICAgIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gICAgICByZXR1cm4gdGFnID09IGVycm9yVGFnIHx8IHRhZyA9PSBkb21FeGNUYWcgfHxcbiAgICAgICAgKHR5cGVvZiB2YWx1ZS5tZXNzYWdlID09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZS5uYW1lID09ICdzdHJpbmcnICYmICFpc1BsYWluT2JqZWN0KHZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBmaW5pdGUgcHJpbWl0aXZlIG51bWJlci5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAqIFtgTnVtYmVyLmlzRmluaXRlYF0oaHR0cHM6Ly9tZG4uaW8vTnVtYmVyL2lzRmluaXRlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmaW5pdGUgbnVtYmVyLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNGaW5pdGUoMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRmluaXRlKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZSgnMycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNGaW5pdGUodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiYgbmF0aXZlSXNGaW5pdGUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRnVuY3Rpb24oXyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAgICAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gICAgICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gICAgICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFuIGludGVnZXIuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYE51bWJlci5pc0ludGVnZXJgXShodHRwczovL21kbi5pby9OdW1iZXIvaXNJbnRlZ2VyKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gaW50ZWdlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzSW50ZWdlcigzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0ludGVnZXIoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzSW50ZWdlcignMycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmIHZhbHVlID09IHRvSW50ZWdlcih2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gICAgICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0xlbmd0aCgzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0xlbmd0aCgnMycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICAgICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICAgICAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAgICAgKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0KHt9KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdChfLm5vb3ApO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3QobnVsbCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICAgICAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdExpa2Uoe30pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE1hcGAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMy4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTWFwKG5ldyBNYXApO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNNYXAobmV3IFdlYWtNYXApO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzTWFwID0gbm9kZUlzTWFwID8gYmFzZVVuYXJ5KG5vZGVJc01hcCkgOiBiYXNlSXNNYXA7XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyBhIHBhcnRpYWwgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gYG9iamVjdGAgYW5kIGBzb3VyY2VgIHRvXG4gICAgICogZGV0ZXJtaW5lIGlmIGBvYmplY3RgIGNvbnRhaW5zIGVxdWl2YWxlbnQgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8gYF8ubWF0Y2hlc2Agd2hlbiBgc291cmNlYCBpc1xuICAgICAqIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqXG4gICAgICogUGFydGlhbCBjb21wYXJpc29ucyB3aWxsIG1hdGNoIGVtcHR5IGFycmF5IGFuZCBlbXB0eSBvYmplY3QgYHNvdXJjZWBcbiAgICAgKiB2YWx1ZXMgYWdhaW5zdCBhbnkgYXJyYXkgb3Igb2JqZWN0IHZhbHVlLCByZXNwZWN0aXZlbHkuIFNlZSBgXy5pc0VxdWFsYFxuICAgICAqIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHZhbHVlIGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gICAgICpcbiAgICAgKiBfLmlzTWF0Y2gob2JqZWN0LCB7ICdiJzogMiB9KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTWF0Y2gob2JqZWN0LCB7ICdiJzogMSB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTWF0Y2gob2JqZWN0LCBzb3VyY2UpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT09IHNvdXJjZSB8fCBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgZ2V0TWF0Y2hEYXRhKHNvdXJjZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNNYXRjaGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcbiAgICAgKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCwgY29tcGFyaXNvbnNcbiAgICAgKiBhcmUgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoIGZpdmVcbiAgICAgKiBhcmd1bWVudHM6IChvYmpWYWx1ZSwgc3JjVmFsdWUsIGluZGV4fGtleSwgb2JqZWN0LCBzb3VyY2UpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGlzR3JlZXRpbmcodmFsdWUpIHtcbiAgICAgKiAgIHJldHVybiAvXmgoPzppfGVsbG8pJC8udGVzdCh2YWx1ZSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUpIHtcbiAgICAgKiAgIGlmIChpc0dyZWV0aW5nKG9ialZhbHVlKSAmJiBpc0dyZWV0aW5nKHNyY1ZhbHVlKSkge1xuICAgICAqICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnZ3JlZXRpbmcnOiAnaGVsbG8nIH07XG4gICAgICogdmFyIHNvdXJjZSA9IHsgJ2dyZWV0aW5nJzogJ2hpJyB9O1xuICAgICAqXG4gICAgICogXy5pc01hdGNoV2l0aChvYmplY3QsIHNvdXJjZSwgY3VzdG9taXplcik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTWF0Y2hXaXRoKG9iamVjdCwgc291cmNlLCBjdXN0b21pemVyKSB7XG4gICAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIGdldE1hdGNoRGF0YShzb3VyY2UpLCBjdXN0b21pemVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgTmFOYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAqIFtgTnVtYmVyLmlzTmFOYF0oaHR0cHM6Ly9tZG4uaW8vTnVtYmVyL2lzTmFOKSBhbmQgaXMgbm90IHRoZSBzYW1lIGFzXG4gICAgICogZ2xvYmFsIFtgaXNOYU5gXShodHRwczovL21kbi5pby9pc05hTikgd2hpY2ggcmV0dXJucyBgdHJ1ZWAgZm9yXG4gICAgICogYHVuZGVmaW5lZGAgYW5kIG90aGVyIG5vbi1udW1iZXIgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTmFOKE5hTik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc05hTihuZXcgTnVtYmVyKE5hTikpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIGlzTmFOKHVuZGVmaW5lZCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc05hTih1bmRlZmluZWQpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOYU4odmFsdWUpIHtcbiAgICAgIC8vIEFuIGBOYU5gIHByaW1pdGl2ZSBpcyB0aGUgb25seSB2YWx1ZSB0aGF0IGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuXG4gICAgICAvLyBQZXJmb3JtIHRoZSBgdG9TdHJpbmdUYWdgIGNoZWNrIGZpcnN0IHRvIGF2b2lkIGVycm9ycyB3aXRoIHNvbWVcbiAgICAgIC8vIEFjdGl2ZVggb2JqZWN0cyBpbiBJRS5cbiAgICAgIHJldHVybiBpc051bWJlcih2YWx1ZSkgJiYgdmFsdWUgIT0gK3ZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJpc3RpbmUgbmF0aXZlIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGNhbid0IHJlbGlhYmx5IGRldGVjdCBuYXRpdmUgZnVuY3Rpb25zIGluIHRoZSBwcmVzZW5jZVxuICAgICAqIG9mIHRoZSBjb3JlLWpzIHBhY2thZ2UgYmVjYXVzZSBjb3JlLWpzIGNpcmN1bXZlbnRzIHRoaXMga2luZCBvZiBkZXRlY3Rpb24uXG4gICAgICogRGVzcGl0ZSBtdWx0aXBsZSByZXF1ZXN0cywgdGhlIGNvcmUtanMgbWFpbnRhaW5lciBoYXMgbWFkZSBpdCBjbGVhcjogYW55XG4gICAgICogYXR0ZW1wdCB0byBmaXggdGhlIGRldGVjdGlvbiB3aWxsIGJlIG9ic3RydWN0ZWQuIEFzIGEgcmVzdWx0LCB3ZSdyZSBsZWZ0XG4gICAgICogd2l0aCBsaXR0bGUgY2hvaWNlIGJ1dCB0byB0aHJvdyBhbiBlcnJvci4gVW5mb3J0dW5hdGVseSwgdGhpcyBhbHNvIGFmZmVjdHNcbiAgICAgKiBwYWNrYWdlcywgbGlrZSBbYmFiZWwtcG9seWZpbGxdKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JhYmVsLXBvbHlmaWxsKSxcbiAgICAgKiB3aGljaCByZWx5IG9uIGNvcmUtanMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNOYXRpdmUoQXJyYXkucHJvdG90eXBlLnB1c2gpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOYXRpdmUoXyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc05hdGl2ZSh2YWx1ZSkge1xuICAgICAgaWYgKGlzTWFza2FibGUodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihDT1JFX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYG51bGxgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgbnVsbGAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc051bGwobnVsbCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc051bGwodm9pZCAwKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTnVsbCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgbnVsbGlzaCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTmlsKG51bGwpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOaWwodm9pZCAwKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTmlsKE5hTik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc05pbCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBOdW1iZXJgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVG8gZXhjbHVkZSBgSW5maW5pdHlgLCBgLUluZmluaXR5YCwgYW5kIGBOYU5gLCB3aGljaCBhcmVcbiAgICAgKiBjbGFzc2lmaWVkIGFzIG51bWJlcnMsIHVzZSB0aGUgYF8uaXNGaW5pdGVgIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBudW1iZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc051bWJlcigzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOdW1iZXIoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOdW1iZXIoJzMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInIHx8XG4gICAgICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IG51bWJlclRhZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICAgICAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjguMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgICAgIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgICAgIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gICAgICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgICAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgUmVnRXhwYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcmVnZXhwLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNSZWdFeHAoL2FiYy8pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNSZWdFeHAoJy9hYmMvJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNSZWdFeHAgPSBub2RlSXNSZWdFeHAgPyBiYXNlVW5hcnkobm9kZUlzUmVnRXhwKSA6IGJhc2VJc1JlZ0V4cDtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgc2FmZSBpbnRlZ2VyLiBBbiBpbnRlZ2VyIGlzIHNhZmUgaWYgaXQncyBhbiBJRUVFLTc1NFxuICAgICAqIGRvdWJsZSBwcmVjaXNpb24gbnVtYmVyIHdoaWNoIGlzbid0IHRoZSByZXN1bHQgb2YgYSByb3VuZGVkIHVuc2FmZSBpbnRlZ2VyLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BOdW1iZXIuaXNTYWZlSW50ZWdlcmBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc1NhZmVJbnRlZ2VyKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzYWZlIGludGVnZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1NhZmVJbnRlZ2VyKDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNTYWZlSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc1NhZmVJbnRlZ2VyKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc1NhZmVJbnRlZ2VyKCczJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSA+PSAtTUFYX1NBRkVfSU5URUdFUiAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU2V0YCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNTZXQobmV3IFNldCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1NldChuZXcgV2Vha1NldCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNTZXQgPSBub2RlSXNTZXQgPyBiYXNlVW5hcnkobm9kZUlzU2V0KSA6IGJhc2VJc1NldDtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3RyaW5nYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN0cmluZywgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzU3RyaW5nKCdhYmMnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzU3RyaW5nKDEpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHxcbiAgICAgICAgKCFpc0FycmF5KHZhbHVlKSAmJiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN0cmluZ1RhZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYHVuZGVmaW5lZGAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1VuZGVmaW5lZCh2b2lkIDApO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNVbmRlZmluZWQobnVsbCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBXZWFrTWFwYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgd2VhayBtYXAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1dlYWtNYXAobmV3IFdlYWtNYXApO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNXZWFrTWFwKG5ldyBNYXApO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNXZWFrTWFwKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IHdlYWtNYXBUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBXZWFrU2V0YCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgd2VhayBzZXQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1dlYWtTZXQobmV3IFdlYWtTZXQpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNXZWFrU2V0KG5ldyBTZXQpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNXZWFrU2V0KHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSB3ZWFrU2V0VGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIGBvdGhlcmAsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAc2VlIF8uZ3RcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sdCgxLCAzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmx0KDMsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmx0KDMsIDEpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGx0ID0gY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihiYXNlTHQpO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBvdGhlcmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy45LjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG9cbiAgICAgKiAgYG90aGVyYCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBzZWUgXy5ndGVcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sdGUoMSwgMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5sdGUoMywgMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5sdGUoMywgMSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgbHRlID0gY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA8PSBvdGhlcjtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9BcnJheSh7ICdhJzogMSwgJ2InOiAyIH0pO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqXG4gICAgICogXy50b0FycmF5KCdhYmMnKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAgICAgKlxuICAgICAqIF8udG9BcnJheSgxKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqXG4gICAgICogXy50b0FycmF5KG51bGwpO1xuICAgICAqIC8vID0+IFtdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyh2YWx1ZSkgPyBzdHJpbmdUb0FycmF5KHZhbHVlKSA6IGNvcHlBcnJheSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3ltSXRlcmF0b3IgJiYgdmFsdWVbc3ltSXRlcmF0b3JdKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvclRvQXJyYXkodmFsdWVbc3ltSXRlcmF0b3JdKCkpO1xuICAgICAgfVxuICAgICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICAgICAgZnVuYyA9IHRhZyA9PSBtYXBUYWcgPyBtYXBUb0FycmF5IDogKHRhZyA9PSBzZXRUYWcgPyBzZXRUb0FycmF5IDogdmFsdWVzKTtcblxuICAgICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBmaW5pdGUgbnVtYmVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTIuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvRmluaXRlKDMuMik7XG4gICAgICogLy8gPT4gMy4yXG4gICAgICpcbiAgICAgKiBfLnRvRmluaXRlKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IDVlLTMyNFxuICAgICAqXG4gICAgICogXy50b0Zpbml0ZShJbmZpbml0eSk7XG4gICAgICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAgICAgKlxuICAgICAqIF8udG9GaW5pdGUoJzMuMicpO1xuICAgICAqIC8vID0+IDMuMlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvRmluaXRlKHZhbHVlKSB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogMDtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xuICAgICAgaWYgKHZhbHVlID09PSBJTkZJTklUWSB8fCB2YWx1ZSA9PT0gLUlORklOSVRZKSB7XG4gICAgICAgIHZhciBzaWduID0gKHZhbHVlIDwgMCA/IC0xIDogMSk7XG4gICAgICAgIHJldHVybiBzaWduICogTUFYX0lOVEVHRVI7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gdmFsdWUgOiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gaW50ZWdlci5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gICAgICogW2BUb0ludGVnZXJgXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9pbnRlZ2VyKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b0ludGVnZXIoMy4yKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLnRvSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiBfLnRvSW50ZWdlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAgICAgKlxuICAgICAqIF8udG9JbnRlZ2VyKCczLjInKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gdG9GaW5pdGUodmFsdWUpLFxuICAgICAgICAgIHJlbWFpbmRlciA9IHJlc3VsdCAlIDE7XG5cbiAgICAgIHJldHVybiByZXN1bHQgPT09IHJlc3VsdCA/IChyZW1haW5kZXIgPyByZXN1bHQgLSByZW1haW5kZXIgOiByZXN1bHQpIDogMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGludGVnZXIgc3VpdGFibGUgZm9yIHVzZSBhcyB0aGUgbGVuZ3RoIG9mIGFuXG4gICAgICogYXJyYXktbGlrZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvTGVuZ3RoKDMuMik7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy50b0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiBfLnRvTGVuZ3RoKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiA0Mjk0OTY3Mjk1XG4gICAgICpcbiAgICAgKiBfLnRvTGVuZ3RoKCczLjInKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9MZW5ndGgodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA/IGJhc2VDbGFtcCh0b0ludGVnZXIodmFsdWUpLCAwLCBNQVhfQVJSQVlfTEVOR1RIKSA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBudW1iZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9OdW1iZXIoMy4yKTtcbiAgICAgKiAvLyA9PiAzLjJcbiAgICAgKlxuICAgICAqIF8udG9OdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gNWUtMzI0XG4gICAgICpcbiAgICAgKiBfLnRvTnVtYmVyKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiBJbmZpbml0eVxuICAgICAqXG4gICAgICogXy50b051bWJlcignMy4yJyk7XG4gICAgICogLy8gPT4gMy4yXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gTkFOO1xuICAgICAgfVxuICAgICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICB2YXIgb3RoZXIgPSB0eXBlb2YgdmFsdWUudmFsdWVPZiA9PSAnZnVuY3Rpb24nID8gdmFsdWUudmFsdWVPZigpIDogdmFsdWU7XG4gICAgICAgIHZhbHVlID0gaXNPYmplY3Qob3RoZXIpID8gKG90aGVyICsgJycpIDogb3RoZXI7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogK3ZhbHVlO1xuICAgICAgfVxuICAgICAgdmFsdWUgPSBiYXNlVHJpbSh2YWx1ZSk7XG4gICAgICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICAgICAgcmV0dXJuIChpc0JpbmFyeSB8fCByZUlzT2N0YWwudGVzdCh2YWx1ZSkpXG4gICAgICAgID8gZnJlZVBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCBpc0JpbmFyeSA/IDIgOiA4KVxuICAgICAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgcGxhaW4gb2JqZWN0IGZsYXR0ZW5pbmcgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nXG4gICAgICoga2V5ZWQgcHJvcGVydGllcyBvZiBgdmFsdWVgIHRvIG93biBwcm9wZXJ0aWVzIG9mIHRoZSBwbGFpbiBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29udmVydGVkIHBsYWluIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgbmV3IEZvbyk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICpcbiAgICAgKiBfLmFzc2lnbih7ICdhJzogMSB9LCBfLnRvUGxhaW5PYmplY3QobmV3IEZvbykpO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9QbGFpbk9iamVjdCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGNvcHlPYmplY3QodmFsdWUsIGtleXNJbih2YWx1ZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzYWZlIGludGVnZXIuIEEgc2FmZSBpbnRlZ2VyIGNhbiBiZSBjb21wYXJlZCBhbmRcbiAgICAgKiByZXByZXNlbnRlZCBjb3JyZWN0bHkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9TYWZlSW50ZWdlcigzLjIpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8udG9TYWZlSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiBfLnRvU2FmZUludGVnZXIoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IDkwMDcxOTkyNTQ3NDA5OTFcbiAgICAgKlxuICAgICAqIF8udG9TYWZlSW50ZWdlcignMy4yJyk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvU2FmZUludGVnZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICA/IGJhc2VDbGFtcCh0b0ludGVnZXIodmFsdWUpLCAtTUFYX1NBRkVfSU5URUdFUiwgTUFYX1NBRkVfSU5URUdFUilcbiAgICAgICAgOiAodmFsdWUgPT09IDAgPyB2YWx1ZSA6IDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG4gICAgICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b1N0cmluZyhudWxsKTtcbiAgICAgKiAvLyA9PiAnJ1xuICAgICAqXG4gICAgICogXy50b1N0cmluZygtMCk7XG4gICAgICogLy8gPT4gJy0wJ1xuICAgICAqXG4gICAgICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICAgICAqIC8vID0+ICcxLDIsMydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQXNzaWducyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0aGVcbiAgICAgKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC5cbiAgICAgKiBTdWJzZXF1ZW50IHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YCBhbmQgaXMgbG9vc2VseSBiYXNlZCBvblxuICAgICAqIFtgT2JqZWN0LmFzc2lnbmBdKGh0dHBzOi8vbWRuLmlvL09iamVjdC9hc3NpZ24pLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMTAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uYXNzaWduSW5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBCYXIoKSB7XG4gICAgICogICB0aGlzLmMgPSAzO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYiA9IDI7XG4gICAgICogQmFyLnByb3RvdHlwZS5kID0gNDtcbiAgICAgKlxuICAgICAqIF8uYXNzaWduKHsgJ2EnOiAwIH0sIG5ldyBGb28sIG5ldyBCYXIpO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYyc6IDMgfVxuICAgICAqL1xuICAgIHZhciBhc3NpZ24gPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSkge1xuICAgICAgaWYgKGlzUHJvdG90eXBlKHNvdXJjZSkgfHwgaXNBcnJheUxpa2Uoc291cmNlKSkge1xuICAgICAgICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIG93biBhbmRcbiAgICAgKiBpbmhlcml0ZWQgc291cmNlIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBhbGlhcyBleHRlbmRcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmFzc2lnblxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEJhcigpIHtcbiAgICAgKiAgIHRoaXMuYyA9IDM7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5iID0gMjtcbiAgICAgKiBCYXIucHJvdG90eXBlLmQgPSA0O1xuICAgICAqXG4gICAgICogXy5hc3NpZ25Jbih7ICdhJzogMCB9LCBuZXcgRm9vLCBuZXcgQmFyKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMsICdkJzogNCB9XG4gICAgICovXG4gICAgdmFyIGFzc2lnbkluID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UpIHtcbiAgICAgIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduSW5gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBhc3NpZ25lZCB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zXG4gICAgICogYHVuZGVmaW5lZGAsIGFzc2lnbm1lbnQgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmBcbiAgICAgKiBpcyBpbnZva2VkIHdpdGggZml2ZSBhcmd1bWVudHM6IChvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAYWxpYXMgZXh0ZW5kV2l0aFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IHNvdXJjZXMgVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5hc3NpZ25XaXRoXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gICAgICogICByZXR1cm4gXy5pc1VuZGVmaW5lZChvYmpWYWx1ZSkgPyBzcmNWYWx1ZSA6IG9ialZhbHVlO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBkZWZhdWx0cyA9IF8ucGFydGlhbFJpZ2h0KF8uYXNzaWduSW5XaXRoLCBjdXN0b21pemVyKTtcbiAgICAgKlxuICAgICAqIGRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICAgICAqL1xuICAgIHZhciBhc3NpZ25JbldpdGggPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0LCBjdXN0b21pemVyKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYFxuICAgICAqIHdoaWNoIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgYXNzaWduZWQgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJuc1xuICAgICAqIGB1bmRlZmluZWRgLCBhc3NpZ25tZW50IGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgXG4gICAgICogaXMgaW52b2tlZCB3aXRoIGZpdmUgYXJndW1lbnRzOiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gc291cmNlcyBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmFzc2lnbkluV2l0aFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICAgICAqICAgcmV0dXJuIF8uaXNVbmRlZmluZWQob2JqVmFsdWUpID8gc3JjVmFsdWUgOiBvYmpWYWx1ZTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgZGVmYXVsdHMgPSBfLnBhcnRpYWxSaWdodChfLmFzc2lnbldpdGgsIGN1c3RvbWl6ZXIpO1xuICAgICAqXG4gICAgICogZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICovXG4gICAgdmFyIGFzc2lnbldpdGggPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCwgY3VzdG9taXplcik7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIGBwYXRoc2Agb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcGlja2VkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfSwgNF0gfTtcbiAgICAgKlxuICAgICAqIF8uYXQob2JqZWN0LCBbJ2FbMF0uYi5jJywgJ2FbMV0nXSk7XG4gICAgICogLy8gPT4gWzMsIDRdXG4gICAgICovXG4gICAgdmFyIGF0ID0gZmxhdFJlc3QoYmFzZUF0KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUgYHByb3RvdHlwZWAgb2JqZWN0LiBJZiBhXG4gICAgICogYHByb3BlcnRpZXNgIG9iamVjdCBpcyBnaXZlbiwgaXRzIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzXG4gICAgICogYXJlIGFzc2lnbmVkIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjMuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvdG90eXBlIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllc10gVGhlIHByb3BlcnRpZXMgdG8gYXNzaWduIHRvIHRoZSBvYmplY3QuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gU2hhcGUoKSB7XG4gICAgICogICB0aGlzLnggPSAwO1xuICAgICAqICAgdGhpcy55ID0gMDtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBDaXJjbGUoKSB7XG4gICAgICogICBTaGFwZS5jYWxsKHRoaXMpO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIENpcmNsZS5wcm90b3R5cGUgPSBfLmNyZWF0ZShTaGFwZS5wcm90b3R5cGUsIHtcbiAgICAgKiAgICdjb25zdHJ1Y3Rvcic6IENpcmNsZVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogdmFyIGNpcmNsZSA9IG5ldyBDaXJjbGU7XG4gICAgICogY2lyY2xlIGluc3RhbmNlb2YgQ2lyY2xlO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIGNpcmNsZSBpbnN0YW5jZW9mIFNoYXBlO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wZXJ0aWVzKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgICAgcmV0dXJuIHByb3BlcnRpZXMgPT0gbnVsbCA/IHJlc3VsdCA6IGJhc2VBc3NpZ24ocmVzdWx0LCBwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBc3NpZ25zIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlXG4gICAgICogb2JqZWN0cyB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGZvciBhbGwgZGVzdGluYXRpb24gcHJvcGVydGllcyB0aGF0XG4gICAgICogcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICAgICAqIE9uY2UgYSBwcm9wZXJ0eSBpcyBzZXQsIGFkZGl0aW9uYWwgdmFsdWVzIG9mIHRoZSBzYW1lIHByb3BlcnR5IGFyZSBpZ25vcmVkLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmRlZmF1bHRzRGVlcFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICAgICAqL1xuICAgIHZhciBkZWZhdWx0cyA9IGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICAgICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xO1xuICAgICAgdmFyIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoO1xuICAgICAgdmFyIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgICAgbGVuZ3RoID0gMTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgICB2YXIgcHJvcHMgPSBrZXlzSW4oc291cmNlKTtcbiAgICAgICAgdmFyIHByb3BzSW5kZXggPSAtMTtcbiAgICAgICAgdmFyIHByb3BzTGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK3Byb3BzSW5kZXggPCBwcm9wc0xlbmd0aCkge1xuICAgICAgICAgIHZhciBrZXkgPSBwcm9wc1twcm9wc0luZGV4XTtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgIChlcSh2YWx1ZSwgb2JqZWN0UHJvdG9ba2V5XSkgJiYgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkge1xuICAgICAgICAgICAgb2JqZWN0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZGVmYXVsdHNgIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGFzc2lnbnNcbiAgICAgKiBkZWZhdWx0IHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmRlZmF1bHRzXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVmYXVsdHNEZWVwKHsgJ2EnOiB7ICdiJzogMiB9IH0sIHsgJ2EnOiB7ICdiJzogMSwgJ2MnOiAzIH0gfSk7XG4gICAgICogLy8gPT4geyAnYSc6IHsgJ2InOiAyLCAnYyc6IDMgfSB9XG4gICAgICovXG4gICAgdmFyIGRlZmF1bHRzRGVlcCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgIGFyZ3MucHVzaCh1bmRlZmluZWQsIGN1c3RvbURlZmF1bHRzTWVyZ2UpO1xuICAgICAgcmV0dXJuIGFwcGx5KG1lcmdlV2l0aCwgdW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUga2V5IG9mIHRoZSBmaXJzdFxuICAgICAqIGVsZW1lbnQgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yIGluc3RlYWQgb2YgdGhlIGVsZW1lbnQgaXRzZWxmLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMS4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gUmV0dXJucyB0aGUga2V5IG9mIHRoZSBtYXRjaGVkIGVsZW1lbnQsXG4gICAgICogIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IHtcbiAgICAgKiAgICdiYXJuZXknOiAgeyAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICAnZnJlZCc6ICAgIHsgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgICdwZWJibGVzJzogeyAnYWdlJzogMSwgICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5maW5kS2V5KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZSA8IDQwOyB9KTtcbiAgICAgKiAvLyA9PiAnYmFybmV5JyAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRLZXkodXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiB0cnVlIH0pO1xuICAgICAqIC8vID0+ICdwZWJibGVzJ1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZEtleSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+ICdmcmVkJ1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kS2V5KHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gJ2Jhcm5leSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kS2V5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gYmFzZUZpbmRLZXkob2JqZWN0LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBiYXNlRm9yT3duKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRLZXlgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAgICAgKiBhIGNvbGxlY3Rpb24gaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gUmV0dXJucyB0aGUga2V5IG9mIHRoZSBtYXRjaGVkIGVsZW1lbnQsXG4gICAgICogIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IHtcbiAgICAgKiAgICdiYXJuZXknOiAgeyAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICAnZnJlZCc6ICAgIHsgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgICdwZWJibGVzJzogeyAnYWdlJzogMSwgICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5maW5kTGFzdEtleSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2UgPCA0MDsgfSk7XG4gICAgICogLy8gPT4gcmV0dXJucyAncGViYmxlcycgYXNzdW1pbmcgYF8uZmluZEtleWAgcmV0dXJucyAnYmFybmV5J1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRMYXN0S2V5KHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICogLy8gPT4gJ2Jhcm5leSdcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRMYXN0S2V5KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gJ2ZyZWQnXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRMYXN0S2V5KHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gJ3BlYmJsZXMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmluZExhc3RLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiBiYXNlRmluZEtleShvYmplY3QsIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGJhc2VGb3JPd25SaWdodCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXRlcmF0ZXMgb3ZlciBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIGFuXG4gICAgICogb2JqZWN0IGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXRcbiAgICAgKiBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjMuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmZvckluUmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uZm9ySW4obmV3IEZvbywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAqICAgY29uc29sZS5sb2coa2V5KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzICdhJywgJ2InLCB0aGVuICdjJyAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JJbihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGxcbiAgICAgICAgPyBvYmplY3RcbiAgICAgICAgOiBiYXNlRm9yKG9iamVjdCwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpLCBrZXlzSW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZm9ySW5gIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgcHJvcGVydGllcyBvZlxuICAgICAqIGBvYmplY3RgIGluIHRoZSBvcHBvc2l0ZSBvcmRlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmZvckluXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmZvckluUmlnaHQobmV3IEZvbywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAqICAgY29uc29sZS5sb2coa2V5KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzICdjJywgJ2InLCB0aGVuICdhJyBhc3N1bWluZyBgXy5mb3JJbmAgbG9ncyAnYScsICdiJywgdGhlbiAnYycuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZm9ySW5SaWdodChvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGxcbiAgICAgICAgPyBvYmplY3RcbiAgICAgICAgOiBiYXNlRm9yUmlnaHQob2JqZWN0LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMyksIGtleXNJbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXRlcmF0ZXMgb3ZlciBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBhbiBvYmplY3QgYW5kXG4gICAgICogaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAgICogYXJndW1lbnRzOiAodmFsdWUsIGtleSwgb2JqZWN0KS4gSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvblxuICAgICAqIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5mb3JPd25SaWdodFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5mb3JPd24obmV3IEZvbywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAqICAgY29uc29sZS5sb2coa2V5KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzICdhJyB0aGVuICdiJyAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yT3duKG9iamVjdCwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZvck93bmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBwcm9wZXJ0aWVzIG9mXG4gICAgICogYG9iamVjdGAgaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZm9yT3duXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmZvck93blJpZ2h0KG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gTG9ncyAnYicgdGhlbiAnYScgYXNzdW1pbmcgYF8uZm9yT3duYCBsb2dzICdhJyB0aGVuICdiJy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JPd25SaWdodChvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3JPd25SaWdodChvYmplY3QsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBmdW5jdGlvbiBwcm9wZXJ0eSBuYW1lcyBmcm9tIG93biBlbnVtZXJhYmxlIHByb3BlcnRpZXNcbiAgICAgKiBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWVzLlxuICAgICAqIEBzZWUgXy5mdW5jdGlvbnNJblxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSBfLmNvbnN0YW50KCdhJyk7XG4gICAgICogICB0aGlzLmIgPSBfLmNvbnN0YW50KCdiJyk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gXy5jb25zdGFudCgnYycpO1xuICAgICAqXG4gICAgICogXy5mdW5jdGlvbnMobmV3IEZvbyk7XG4gICAgICogLy8gPT4gWydhJywgJ2InXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZ1bmN0aW9ucyhvYmplY3QpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZUZ1bmN0aW9ucyhvYmplY3QsIGtleXMob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBmdW5jdGlvbiBwcm9wZXJ0eSBuYW1lcyBmcm9tIG93biBhbmQgaW5oZXJpdGVkXG4gICAgICogZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgZnVuY3Rpb24gbmFtZXMuXG4gICAgICogQHNlZSBfLmZ1bmN0aW9uc1xuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSBfLmNvbnN0YW50KCdhJyk7XG4gICAgICogICB0aGlzLmIgPSBfLmNvbnN0YW50KCdiJyk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gXy5jb25zdGFudCgnYycpO1xuICAgICAqXG4gICAgICogXy5mdW5jdGlvbnNJbihuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmdW5jdGlvbnNJbihvYmplY3QpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZUZ1bmN0aW9ucyhvYmplY3QsIGtleXNJbihvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICAgICAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuNy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICAgICAqXG4gICAgICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gICAgICogLy8gPT4gJ2RlZmF1bHQnXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBwcm9wZXJ0eSBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiB7ICdiJzogMiB9IH07XG4gICAgICogdmFyIG90aGVyID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICAgICAqXG4gICAgICogXy5oYXMob2JqZWN0LCAnYScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaGFzKG9iamVjdCwgJ2EuYicpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaGFzKG9iamVjdCwgWydhJywgJ2InXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5oYXMob3RoZXIsICdhJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXMob2JqZWN0LCBwYXRoKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICAgICAqXG4gICAgICogXy5oYXNJbihvYmplY3QsICdhJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5oYXNJbihvYmplY3QsICdhLmInKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhc0luKG9iamVjdCwgWydhJywgJ2InXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5oYXNJbihvYmplY3QsICdiJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNJbihvYmplY3QsIHBhdGgpIHtcbiAgICAgIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgYmFzZUhhc0luKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgaW52ZXJ0ZWQga2V5cyBhbmQgdmFsdWVzIG9mIGBvYmplY3RgLlxuICAgICAqIElmIGBvYmplY3RgIGNvbnRhaW5zIGR1cGxpY2F0ZSB2YWx1ZXMsIHN1YnNlcXVlbnQgdmFsdWVzIG92ZXJ3cml0ZVxuICAgICAqIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjcuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW52ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBpbnZlcnRlZCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfTtcbiAgICAgKlxuICAgICAqIF8uaW52ZXJ0KG9iamVjdCk7XG4gICAgICogLy8gPT4geyAnMSc6ICdjJywgJzInOiAnYicgfVxuICAgICAqL1xuICAgIHZhciBpbnZlcnQgPSBjcmVhdGVJbnZlcnRlcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmXG4gICAgICAgICAgdHlwZW9mIHZhbHVlLnRvU3RyaW5nICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsdWUgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0W3ZhbHVlXSA9IGtleTtcbiAgICB9LCBjb25zdGFudChpZGVudGl0eSkpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbnZlcnRgIGV4Y2VwdCB0aGF0IHRoZSBpbnZlcnRlZCBvYmplY3QgaXMgZ2VuZXJhdGVkXG4gICAgICogZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nIGVhY2ggZWxlbWVudCBvZiBgb2JqZWN0YCB0aHJ1IGBpdGVyYXRlZWAuIFRoZVxuICAgICAqIGNvcnJlc3BvbmRpbmcgaW52ZXJ0ZWQgdmFsdWUgb2YgZWFjaCBpbnZlcnRlZCBrZXkgaXMgYW4gYXJyYXkgb2Yga2V5c1xuICAgICAqIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBpbnZlcnRlZCB2YWx1ZS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjEuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW52ZXJ0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgaW52ZXJ0ZWQgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAxIH07XG4gICAgICpcbiAgICAgKiBfLmludmVydEJ5KG9iamVjdCk7XG4gICAgICogLy8gPT4geyAnMSc6IFsnYScsICdjJ10sICcyJzogWydiJ10gfVxuICAgICAqXG4gICAgICogXy5pbnZlcnRCeShvYmplY3QsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICogICByZXR1cm4gJ2dyb3VwJyArIHZhbHVlO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IHsgJ2dyb3VwMSc6IFsnYScsICdjJ10sICdncm91cDInOiBbJ2InXSB9XG4gICAgICovXG4gICAgdmFyIGludmVydEJ5ID0gY3JlYXRlSW52ZXJ0ZXIoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJlxuICAgICAgICAgIHR5cGVvZiB2YWx1ZS50b1N0cmluZyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbHVlID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdFt2YWx1ZV0ucHVzaChrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W3ZhbHVlXSA9IFtrZXldO1xuICAgICAgfVxuICAgIH0sIGdldEl0ZXJhdGVlKTtcblxuICAgIC8qKlxuICAgICAqIEludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBtZXRob2Qgd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBpbnZva2VkIG1ldGhvZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiBbMSwgMiwgMywgNF0gfSB9XSB9O1xuICAgICAqXG4gICAgICogXy5pbnZva2Uob2JqZWN0LCAnYVswXS5iLmMuc2xpY2UnLCAxLCAzKTtcbiAgICAgKiAvLyA9PiBbMiwgM11cbiAgICAgKi9cbiAgICB2YXIgaW52b2tlID0gYmFzZVJlc3QoYmFzZUludm9rZSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gICAgICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICAgICAqIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmtleXMobmV3IEZvbyk7XG4gICAgICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqXG4gICAgICogXy5rZXlzKCdoaScpO1xuICAgICAqIC8vID0+IFsnMCcsICcxJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8ua2V5c0luKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgICAgIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QsIHRydWUpIDogYmFzZUtleXNJbihvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5tYXBWYWx1ZXNgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCB3aXRoIHRoZVxuICAgICAqIHNhbWUgdmFsdWVzIGFzIGBvYmplY3RgIGFuZCBrZXlzIGdlbmVyYXRlZCBieSBydW5uaW5nIGVhY2ggb3duIGVudW1lcmFibGVcbiAgICAgKiBzdHJpbmcga2V5ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAgdGhydSBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGtleSwgb2JqZWN0KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjguMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgb2JqZWN0LlxuICAgICAqIEBzZWUgXy5tYXBWYWx1ZXNcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5tYXBLZXlzKHsgJ2EnOiAxLCAnYic6IDIgfSwgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAqICAgcmV0dXJuIGtleSArIHZhbHVlO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IHsgJ2ExJzogMSwgJ2IyJzogMiB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwS2V5cyhvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICBpdGVyYXRlZSA9IGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKTtcblxuICAgICAgYmFzZUZvck93bihvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xuICAgICAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmplY3QpLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFzIGBvYmplY3RgIGFuZCB2YWx1ZXMgZ2VuZXJhdGVkXG4gICAgICogYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1XG4gICAgICogYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XG4gICAgICogKHZhbHVlLCBrZXksIG9iamVjdCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi40LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIG9iamVjdC5cbiAgICAgKiBAc2VlIF8ubWFwS2V5c1xuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSB7XG4gICAgICogICAnZnJlZCc6ICAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxuICAgICAqICAgJ3BlYmJsZXMnOiB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSB9XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIF8ubWFwVmFsdWVzKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZTsgfSk7XG4gICAgICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5tYXBWYWx1ZXModXNlcnMsICdhZ2UnKTtcbiAgICAgKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwVmFsdWVzKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIGl0ZXJhdGVlID0gZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpO1xuXG4gICAgICBiYXNlRm9yT3duKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gICAgICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqZWN0KSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXG4gICAgICogaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgaW50byB0aGVcbiAgICAgKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcbiAgICAgKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcbiAgICAgKiBhcmUgbWVyZ2VkIHJlY3Vyc2l2ZWx5LiBPdGhlciBvYmplY3RzIGFuZCB2YWx1ZSB0eXBlcyBhcmUgb3ZlcnJpZGRlbiBieVxuICAgICAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxuICAgICAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjUuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHtcbiAgICAgKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIHZhciBvdGhlciA9IHtcbiAgICAgKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XG4gICAgICogLy8gPT4geyAnYSc6IFt7ICdiJzogMiwgJ2MnOiAzIH0sIHsgJ2QnOiA0LCAnZSc6IDUgfV0gfVxuICAgICAqL1xuICAgIHZhciBtZXJnZSA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCkge1xuICAgICAgYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLm1lcmdlYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgbWVyZ2VkIHZhbHVlcyBvZiB0aGUgZGVzdGluYXRpb24gYW5kIHNvdXJjZVxuICAgICAqIHByb3BlcnRpZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgLCBtZXJnaW5nIGlzIGhhbmRsZWQgYnkgdGhlXG4gICAgICogbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoIHNpeCBhcmd1bWVudHM6XG4gICAgICogKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gICAgICogICBpZiAoXy5pc0FycmF5KG9ialZhbHVlKSkge1xuICAgICAqICAgICByZXR1cm4gb2JqVmFsdWUuY29uY2F0KHNyY1ZhbHVlKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFsxXSwgJ2InOiBbMl0gfTtcbiAgICAgKiB2YXIgb3RoZXIgPSB7ICdhJzogWzNdLCAnYic6IFs0XSB9O1xuICAgICAqXG4gICAgICogXy5tZXJnZVdpdGgob2JqZWN0LCBvdGhlciwgY3VzdG9taXplcik7XG4gICAgICogLy8gPT4geyAnYSc6IFsxLCAzXSwgJ2InOiBbMiwgNF0gfVxuICAgICAqL1xuICAgIHZhciBtZXJnZVdpdGggPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGVcbiAgICAgKiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IHBhdGhzIG9mIGBvYmplY3RgIHRoYXQgYXJlIG5vdCBvbWl0dGVkLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGNvbnNpZGVyYWJseSBzbG93ZXIgdGhhbiBgXy5waWNrYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIG9taXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gICAgICpcbiAgICAgKiBfLm9taXQob2JqZWN0LCBbJ2EnLCAnYyddKTtcbiAgICAgKiAvLyA9PiB7ICdiJzogJzInIH1cbiAgICAgKi9cbiAgICB2YXIgb21pdCA9IGZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCwgcGF0aHMpIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgdmFyIGlzRGVlcCA9IGZhbHNlO1xuICAgICAgcGF0aHMgPSBhcnJheU1hcChwYXRocywgZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgICAgICAgaXNEZWVwIHx8IChpc0RlZXAgPSBwYXRoLmxlbmd0aCA+IDEpO1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgIH0pO1xuICAgICAgY29weU9iamVjdChvYmplY3QsIGdldEFsbEtleXNJbihvYmplY3QpLCByZXN1bHQpO1xuICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICByZXN1bHQgPSBiYXNlQ2xvbmUocmVzdWx0LCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9GTEFUX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcsIGN1c3RvbU9taXRDbG9uZSk7XG4gICAgICB9XG4gICAgICB2YXIgbGVuZ3RoID0gcGF0aHMubGVuZ3RoO1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGJhc2VVbnNldChyZXN1bHQsIHBhdGhzW2xlbmd0aF0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5waWNrQnlgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZlxuICAgICAqIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIGBvYmplY3RgIHRoYXRcbiAgICAgKiBgcHJlZGljYXRlYCBkb2Vzbid0IHJldHVybiB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0d29cbiAgICAgKiBhcmd1bWVudHM6ICh2YWx1ZSwga2V5KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIHByb3BlcnR5LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICAgICAqXG4gICAgICogXy5vbWl0Qnkob2JqZWN0LCBfLmlzTnVtYmVyKTtcbiAgICAgKiAvLyA9PiB7ICdiJzogJzInIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvbWl0Qnkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiBwaWNrQnkob2JqZWN0LCBuZWdhdGUoZ2V0SXRlcmF0ZWUocHJlZGljYXRlKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBwaWNrZWQgYG9iamVjdGAgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gICAgICpcbiAgICAgKiBfLnBpY2sob2JqZWN0LCBbJ2EnLCAnYyddKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2MnOiAzIH1cbiAgICAgKi9cbiAgICB2YXIgcGljayA9IGZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCwgcGF0aHMpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHt9IDogYmFzZVBpY2sob2JqZWN0LCBwYXRocyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgYG9iamVjdGAgcHJvcGVydGllcyBgcHJlZGljYXRlYCByZXR1cm5zXG4gICAgICogdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdHdvIGFyZ3VtZW50czogKHZhbHVlLCBrZXkpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgcHJvcGVydHkuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gICAgICpcbiAgICAgKiBfLnBpY2tCeShvYmplY3QsIF8uaXNOdW1iZXIpO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYyc6IDMgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBpY2tCeShvYmplY3QsIHByZWRpY2F0ZSkge1xuICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wcyA9IGFycmF5TWFwKGdldEFsbEtleXNJbihvYmplY3QpLCBmdW5jdGlvbihwcm9wKSB7XG4gICAgICAgIHJldHVybiBbcHJvcF07XG4gICAgICB9KTtcbiAgICAgIHByZWRpY2F0ZSA9IGdldEl0ZXJhdGVlKHByZWRpY2F0ZSk7XG4gICAgICByZXR1cm4gYmFzZVBpY2tCeShvYmplY3QsIHByb3BzLCBmdW5jdGlvbih2YWx1ZSwgcGF0aCkge1xuICAgICAgICByZXR1cm4gcHJlZGljYXRlKHZhbHVlLCBwYXRoWzBdKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZ2V0YCBleGNlcHQgdGhhdCBpZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXMgYVxuICAgICAqIGZ1bmN0aW9uIGl0J3MgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBpdHMgcGFyZW50IG9iamVjdCBhbmRcbiAgICAgKiBpdHMgcmVzdWx0IGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gcmVzb2x2ZS5cbiAgICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MxJzogMywgJ2MyJzogXy5jb25zdGFudCg0KSB9IH1dIH07XG4gICAgICpcbiAgICAgKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzEnKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzInKTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICpcbiAgICAgKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzMnLCAnZGVmYXVsdCcpO1xuICAgICAqIC8vID0+ICdkZWZhdWx0J1xuICAgICAqXG4gICAgICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMzJywgXy5jb25zdGFudCgnZGVmYXVsdCcpKTtcbiAgICAgKiAvLyA9PiAnZGVmYXVsdCdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXN1bHQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICAgICAgLy8gRW5zdXJlIHRoZSBsb29wIGlzIGVudGVyZWQgd2hlbiBwYXRoIGlzIGVtcHR5LlxuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgbGVuZ3RoID0gMTtcbiAgICAgICAgb2JqZWN0ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3RbdG9LZXkocGF0aFtpbmRleF0pXTtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbmRleCA9IGxlbmd0aDtcbiAgICAgICAgICB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBvYmplY3QgPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlLmNhbGwob2JqZWN0KSA6IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIGEgcG9ydGlvbiBvZiBgcGF0aGAgZG9lc24ndCBleGlzdCxcbiAgICAgKiBpdCdzIGNyZWF0ZWQuIEFycmF5cyBhcmUgY3JlYXRlZCBmb3IgbWlzc2luZyBpbmRleCBwcm9wZXJ0aWVzIHdoaWxlIG9iamVjdHNcbiAgICAgKiBhcmUgY3JlYXRlZCBmb3IgYWxsIG90aGVyIG1pc3NpbmcgcHJvcGVydGllcy4gVXNlIGBfLnNldFdpdGhgIHRvIGN1c3RvbWl6ZVxuICAgICAqIGBwYXRoYCBjcmVhdGlvbi5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuNy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAgICAgKlxuICAgICAqIF8uc2V0KG9iamVjdCwgJ2FbMF0uYi5jJywgNCk7XG4gICAgICogY29uc29sZS5sb2cob2JqZWN0LmFbMF0uYi5jKTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICpcbiAgICAgKiBfLnNldChvYmplY3QsIFsneCcsICcwJywgJ3knLCAneiddLCA1KTtcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3QueFswXS55LnopO1xuICAgICAqIC8vID0+IDVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogYmFzZVNldChvYmplY3QsIHBhdGgsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNldGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIG9iamVjdHMgb2YgYHBhdGhgLiAgSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGBcbiAgICAgKiBwYXRoIGNyZWF0aW9uIGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKG5zVmFsdWUsIGtleSwgbnNPYmplY3QpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHt9O1xuICAgICAqXG4gICAgICogXy5zZXRXaXRoKG9iamVjdCwgJ1swXVsxXScsICdhJywgT2JqZWN0KTtcbiAgICAgKiAvLyA9PiB7ICcwJzogeyAnMSc6ICdhJyB9IH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXRXaXRoKG9iamVjdCwgcGF0aCwgdmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IGJhc2VTZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSwgY3VzdG9taXplcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQtdmFsdWUgcGFpcnMgZm9yIGBvYmplY3RgXG4gICAgICogd2hpY2ggY2FuIGJlIGNvbnN1bWVkIGJ5IGBfLmZyb21QYWlyc2AuIElmIGBvYmplY3RgIGlzIGEgbWFwIG9yIHNldCwgaXRzXG4gICAgICogZW50cmllcyBhcmUgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAYWxpYXMgZW50cmllc1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLnRvUGFpcnMobmV3IEZvbyk7XG4gICAgICogLy8gPT4gW1snYScsIDFdLCBbJ2InLCAyXV0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICB2YXIgdG9QYWlycyA9IGNyZWF0ZVRvUGFpcnMoa2V5cyk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkLXZhbHVlIHBhaXJzXG4gICAgICogZm9yIGBvYmplY3RgIHdoaWNoIGNhbiBiZSBjb25zdW1lZCBieSBgXy5mcm9tUGFpcnNgLiBJZiBgb2JqZWN0YCBpcyBhIG1hcFxuICAgICAqIG9yIHNldCwgaXRzIGVudHJpZXMgYXJlIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGFsaWFzIGVudHJpZXNJblxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLnRvUGFpcnNJbihuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbWydhJywgMV0sIFsnYicsIDJdLCBbJ2MnLCAzXV0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICB2YXIgdG9QYWlyc0luID0gY3JlYXRlVG9QYWlycyhrZXlzSW4pO1xuXG4gICAgLyoqXG4gICAgICogQW4gYWx0ZXJuYXRpdmUgdG8gYF8ucmVkdWNlYDsgdGhpcyBtZXRob2QgdHJhbnNmb3JtcyBgb2JqZWN0YCB0byBhIG5ld1xuICAgICAqIGBhY2N1bXVsYXRvcmAgb2JqZWN0IHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgcnVubmluZyBlYWNoIG9mIGl0cyBvd25cbiAgICAgKiBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIHRocnUgYGl0ZXJhdGVlYCwgd2l0aCBlYWNoIGludm9jYXRpb25cbiAgICAgKiBwb3RlbnRpYWxseSBtdXRhdGluZyB0aGUgYGFjY3VtdWxhdG9yYCBvYmplY3QuIElmIGBhY2N1bXVsYXRvcmAgaXMgbm90XG4gICAgICogcHJvdmlkZWQsIGEgbmV3IG9iamVjdCB3aXRoIHRoZSBzYW1lIGBbW1Byb3RvdHlwZV1dYCB3aWxsIGJlIHVzZWQuIFRoZVxuICAgICAqIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBmb3VyIGFyZ3VtZW50czogKGFjY3VtdWxhdG9yLCB2YWx1ZSwga2V5LCBvYmplY3QpLlxuICAgICAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjMuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgY3VzdG9tIGFjY3VtdWxhdG9yIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50cmFuc2Zvcm0oWzIsIDMsIDRdLCBmdW5jdGlvbihyZXN1bHQsIG4pIHtcbiAgICAgKiAgIHJlc3VsdC5wdXNoKG4gKj0gbik7XG4gICAgICogICByZXR1cm4gbiAlIDIgPT0gMDtcbiAgICAgKiB9LCBbXSk7XG4gICAgICogLy8gPT4gWzQsIDldXG4gICAgICpcbiAgICAgKiBfLnRyYW5zZm9ybSh7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfSwgZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICogICAocmVzdWx0W3ZhbHVlXSB8fCAocmVzdWx0W3ZhbHVlXSA9IFtdKSkucHVzaChrZXkpO1xuICAgICAqIH0sIHt9KTtcbiAgICAgKiAvLyA9PiB7ICcxJzogWydhJywgJ2MnXSwgJzInOiBbJ2InXSB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtKG9iamVjdCwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yKSB7XG4gICAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICAgICAgaXNBcnJMaWtlID0gaXNBcnIgfHwgaXNCdWZmZXIob2JqZWN0KSB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KTtcblxuICAgICAgaXRlcmF0ZWUgPSBnZXRJdGVyYXRlZShpdGVyYXRlZSwgNCk7XG4gICAgICBpZiAoYWNjdW11bGF0b3IgPT0gbnVsbCkge1xuICAgICAgICB2YXIgQ3RvciA9IG9iamVjdCAmJiBvYmplY3QuY29uc3RydWN0b3I7XG4gICAgICAgIGlmIChpc0Fyckxpa2UpIHtcbiAgICAgICAgICBhY2N1bXVsYXRvciA9IGlzQXJyID8gbmV3IEN0b3IgOiBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc09iamVjdChvYmplY3QpKSB7XG4gICAgICAgICAgYWNjdW11bGF0b3IgPSBpc0Z1bmN0aW9uKEN0b3IpID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSkgOiB7fTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBhY2N1bXVsYXRvciA9IHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAoaXNBcnJMaWtlID8gYXJyYXlFYWNoIDogYmFzZUZvck93bikob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgb2JqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIHByb3BlcnR5IGF0IGBwYXRoYCBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHVuc2V0LlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJvcGVydHkgaXMgZGVsZXRlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDcgfSB9XSB9O1xuICAgICAqIF8udW5zZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3QpO1xuICAgICAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IHt9IH1dIH07XG4gICAgICpcbiAgICAgKiBfLnVuc2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdCk7XG4gICAgICogLy8gPT4geyAnYSc6IFt7ICdiJzoge30gfV0gfTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bnNldChvYmplY3QsIHBhdGgpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHRydWUgOiBiYXNlVW5zZXQob2JqZWN0LCBwYXRoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNldGAgZXhjZXB0IHRoYXQgYWNjZXB0cyBgdXBkYXRlcmAgdG8gcHJvZHVjZSB0aGVcbiAgICAgKiB2YWx1ZSB0byBzZXQuIFVzZSBgXy51cGRhdGVXaXRoYCB0byBjdXN0b21pemUgYHBhdGhgIGNyZWF0aW9uLiBUaGUgYHVwZGF0ZXJgXG4gICAgICogaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNi4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB1cGRhdGVyIFRoZSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB1cGRhdGVkIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gICAgICpcbiAgICAgKiBfLnVwZGF0ZShvYmplY3QsICdhWzBdLmIuYycsIGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gKiBuOyB9KTtcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3QuYVswXS5iLmMpO1xuICAgICAqIC8vID0+IDlcbiAgICAgKlxuICAgICAqIF8udXBkYXRlKG9iamVjdCwgJ3hbMF0ueS56JywgZnVuY3Rpb24obikgeyByZXR1cm4gbiA/IG4gKyAxIDogMDsgfSk7XG4gICAgICogY29uc29sZS5sb2cob2JqZWN0LnhbMF0ueS56KTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICovXG4gICAgZnVuY3Rpb24gdXBkYXRlKG9iamVjdCwgcGF0aCwgdXBkYXRlcikge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogYmFzZVVwZGF0ZShvYmplY3QsIHBhdGgsIGNhc3RGdW5jdGlvbih1cGRhdGVyKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51cGRhdGVgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCB0byBwcm9kdWNlIHRoZSBvYmplY3RzIG9mIGBwYXRoYC4gIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgXG4gICAgICogcGF0aCBjcmVhdGlvbiBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6IChuc1ZhbHVlLCBrZXksIG5zT2JqZWN0KS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNi4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB1cGRhdGVyIFRoZSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB1cGRhdGVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0ge307XG4gICAgICpcbiAgICAgKiBfLnVwZGF0ZVdpdGgob2JqZWN0LCAnWzBdWzFdJywgXy5jb25zdGFudCgnYScpLCBPYmplY3QpO1xuICAgICAqIC8vID0+IHsgJzAnOiB7ICcxJzogJ2EnIH0gfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVwZGF0ZVdpdGgob2JqZWN0LCBwYXRoLCB1cGRhdGVyLCBjdXN0b21pemVyKSB7XG4gICAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlVXBkYXRlKG9iamVjdCwgcGF0aCwgY2FzdEZ1bmN0aW9uKHVwZGF0ZXIpLCBjdXN0b21pemVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHkgdmFsdWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy52YWx1ZXMobmV3IEZvbyk7XG4gICAgICogLy8gPT4gWzEsIDJdIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICpcbiAgICAgKiBfLnZhbHVlcygnaGknKTtcbiAgICAgKiAvLyA9PiBbJ2gnLCAnaSddXG4gICAgICovXG4gICAgZnVuY3Rpb24gdmFsdWVzKG9iamVjdCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlVmFsdWVzKG9iamVjdCwga2V5cyhvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eVxuICAgICAqIHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8udmFsdWVzSW4obmV3IEZvbyk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICovXG4gICAgZnVuY3Rpb24gdmFsdWVzSW4ob2JqZWN0KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VWYWx1ZXMob2JqZWN0LCBrZXlzSW4ob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ2xhbXBzIGBudW1iZXJgIHdpdGhpbiB0aGUgaW5jbHVzaXZlIGBsb3dlcmAgYW5kIGB1cHBlcmAgYm91bmRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE51bWJlclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byBjbGFtcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xvd2VyXSBUaGUgbG93ZXIgYm91bmQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHVwcGVyIFRoZSB1cHBlciBib3VuZC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjbGFtcGVkIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jbGFtcCgtMTAsIC01LCA1KTtcbiAgICAgKiAvLyA9PiAtNVxuICAgICAqXG4gICAgICogXy5jbGFtcCgxMCwgLTUsIDUpO1xuICAgICAqIC8vID0+IDVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbGFtcChudW1iZXIsIGxvd2VyLCB1cHBlcikge1xuICAgICAgaWYgKHVwcGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdXBwZXIgPSBsb3dlcjtcbiAgICAgICAgbG93ZXIgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAodXBwZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB1cHBlciA9IHRvTnVtYmVyKHVwcGVyKTtcbiAgICAgICAgdXBwZXIgPSB1cHBlciA9PT0gdXBwZXIgPyB1cHBlciA6IDA7XG4gICAgICB9XG4gICAgICBpZiAobG93ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsb3dlciA9IHRvTnVtYmVyKGxvd2VyKTtcbiAgICAgICAgbG93ZXIgPSBsb3dlciA9PT0gbG93ZXIgPyBsb3dlciA6IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUNsYW1wKHRvTnVtYmVyKG51bWJlciksIGxvd2VyLCB1cHBlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBuYCBpcyBiZXR3ZWVuIGBzdGFydGAgYW5kIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuIElmXG4gICAgICogYGVuZGAgaXMgbm90IHNwZWNpZmllZCwgaXQncyBzZXQgdG8gYHN0YXJ0YCB3aXRoIGBzdGFydGAgdGhlbiBzZXQgdG8gYDBgLlxuICAgICAqIElmIGBzdGFydGAgaXMgZ3JlYXRlciB0aGFuIGBlbmRgIHRoZSBwYXJhbXMgYXJlIHN3YXBwZWQgdG8gc3VwcG9ydFxuICAgICAqIG5lZ2F0aXZlIHJhbmdlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjMuMFxuICAgICAqIEBjYXRlZ29yeSBOdW1iZXJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIFRoZSBudW1iZXIgdG8gY2hlY2suXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBudW1iZXJgIGlzIGluIHRoZSByYW5nZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBzZWUgXy5yYW5nZSwgXy5yYW5nZVJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSgzLCAyLCA0KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmluUmFuZ2UoNCwgOCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDQsIDIpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmluUmFuZ2UoMiwgMik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSgxLjIsIDIpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSg1LjIsIDQpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmluUmFuZ2UoLTMsIC0yLCAtNik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluUmFuZ2UobnVtYmVyLCBzdGFydCwgZW5kKSB7XG4gICAgICBzdGFydCA9IHRvRmluaXRlKHN0YXJ0KTtcbiAgICAgIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlbmQgPSBzdGFydDtcbiAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5kID0gdG9GaW5pdGUoZW5kKTtcbiAgICAgIH1cbiAgICAgIG51bWJlciA9IHRvTnVtYmVyKG51bWJlcik7XG4gICAgICByZXR1cm4gYmFzZUluUmFuZ2UobnVtYmVyLCBzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9kdWNlcyBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiB0aGUgaW5jbHVzaXZlIGBsb3dlcmAgYW5kIGB1cHBlcmAgYm91bmRzLlxuICAgICAqIElmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHByb3ZpZGVkIGEgbnVtYmVyIGJldHdlZW4gYDBgIGFuZCB0aGUgZ2l2ZW4gbnVtYmVyXG4gICAgICogaXMgcmV0dXJuZWQuIElmIGBmbG9hdGluZ2AgaXMgYHRydWVgLCBvciBlaXRoZXIgYGxvd2VyYCBvciBgdXBwZXJgIGFyZVxuICAgICAqIGZsb2F0cywgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBpbnRlZ2VyLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIEphdmFTY3JpcHQgZm9sbG93cyB0aGUgSUVFRS03NTQgc3RhbmRhcmQgZm9yIHJlc29sdmluZ1xuICAgICAqIGZsb2F0aW5nLXBvaW50IHZhbHVlcyB3aGljaCBjYW4gcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC43LjBcbiAgICAgKiBAY2F0ZWdvcnkgTnVtYmVyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsb3dlcj0wXSBUaGUgbG93ZXIgYm91bmQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt1cHBlcj0xXSBUaGUgdXBwZXIgYm91bmQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZmxvYXRpbmddIFNwZWNpZnkgcmV0dXJuaW5nIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJhbmRvbSBudW1iZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmFuZG9tKDAsIDUpO1xuICAgICAqIC8vID0+IGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCA1XG4gICAgICpcbiAgICAgKiBfLnJhbmRvbSg1KTtcbiAgICAgKiAvLyA9PiBhbHNvIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCA1XG4gICAgICpcbiAgICAgKiBfLnJhbmRvbSg1LCB0cnVlKTtcbiAgICAgKiAvLyA9PiBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBiZXR3ZWVuIDAgYW5kIDVcbiAgICAgKlxuICAgICAqIF8ucmFuZG9tKDEuMiwgNS4yKTtcbiAgICAgKiAvLyA9PiBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBiZXR3ZWVuIDEuMiBhbmQgNS4yXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmFuZG9tKGxvd2VyLCB1cHBlciwgZmxvYXRpbmcpIHtcbiAgICAgIGlmIChmbG9hdGluZyAmJiB0eXBlb2YgZmxvYXRpbmcgIT0gJ2Jvb2xlYW4nICYmIGlzSXRlcmF0ZWVDYWxsKGxvd2VyLCB1cHBlciwgZmxvYXRpbmcpKSB7XG4gICAgICAgIHVwcGVyID0gZmxvYXRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoZmxvYXRpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIHVwcGVyID09ICdib29sZWFuJykge1xuICAgICAgICAgIGZsb2F0aW5nID0gdXBwZXI7XG4gICAgICAgICAgdXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGxvd2VyID09ICdib29sZWFuJykge1xuICAgICAgICAgIGZsb2F0aW5nID0gbG93ZXI7XG4gICAgICAgICAgbG93ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChsb3dlciA9PT0gdW5kZWZpbmVkICYmIHVwcGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG93ZXIgPSAwO1xuICAgICAgICB1cHBlciA9IDE7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbG93ZXIgPSB0b0Zpbml0ZShsb3dlcik7XG4gICAgICAgIGlmICh1cHBlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdXBwZXIgPSBsb3dlcjtcbiAgICAgICAgICBsb3dlciA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXBwZXIgPSB0b0Zpbml0ZSh1cHBlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChsb3dlciA+IHVwcGVyKSB7XG4gICAgICAgIHZhciB0ZW1wID0gbG93ZXI7XG4gICAgICAgIGxvd2VyID0gdXBwZXI7XG4gICAgICAgIHVwcGVyID0gdGVtcDtcbiAgICAgIH1cbiAgICAgIGlmIChmbG9hdGluZyB8fCBsb3dlciAlIDEgfHwgdXBwZXIgJSAxKSB7XG4gICAgICAgIHZhciByYW5kID0gbmF0aXZlUmFuZG9tKCk7XG4gICAgICAgIHJldHVybiBuYXRpdmVNaW4obG93ZXIgKyAocmFuZCAqICh1cHBlciAtIGxvd2VyICsgZnJlZVBhcnNlRmxvYXQoJzFlLScgKyAoKHJhbmQgKyAnJykubGVuZ3RoIC0gMSkpKSksIHVwcGVyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlUmFuZG9tKGxvd2VyLCB1cHBlcik7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gW2NhbWVsIGNhc2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NhbWVsQ2FzZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjYW1lbCBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY2FtZWxDYXNlKCdGb28gQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvb0JhcidcbiAgICAgKlxuICAgICAqIF8uY2FtZWxDYXNlKCctLWZvby1iYXItLScpO1xuICAgICAqIC8vID0+ICdmb29CYXInXG4gICAgICpcbiAgICAgKiBfLmNhbWVsQ2FzZSgnX19GT09fQkFSX18nKTtcbiAgICAgKiAvLyA9PiAnZm9vQmFyJ1xuICAgICAqL1xuICAgIHZhciBjYW1lbENhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgICAgIHdvcmQgPSB3b3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gY2FwaXRhbGl6ZSh3b3JkKSA6IHdvcmQpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byB1cHBlciBjYXNlIGFuZCB0aGUgcmVtYWluaW5nXG4gICAgICogdG8gbG93ZXIgY2FzZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjYXBpdGFsaXplLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNhcGl0YWxpemVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jYXBpdGFsaXplKCdGUkVEJyk7XG4gICAgICogLy8gPT4gJ0ZyZWQnXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHJpbmcpIHtcbiAgICAgIHJldHVybiB1cHBlckZpcnN0KHRvU3RyaW5nKHN0cmluZykudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVidXJycyBgc3RyaW5nYCBieSBjb252ZXJ0aW5nXG4gICAgICogW0xhdGluLTEgU3VwcGxlbWVudF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGF0aW4tMV9TdXBwbGVtZW50XyhVbmljb2RlX2Jsb2NrKSNDaGFyYWN0ZXJfdGFibGUpXG4gICAgICogYW5kIFtMYXRpbiBFeHRlbmRlZC1BXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MYXRpbl9FeHRlbmRlZC1BKVxuICAgICAqIGxldHRlcnMgdG8gYmFzaWMgTGF0aW4gbGV0dGVycyBhbmQgcmVtb3ZpbmdcbiAgICAgKiBbY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3MpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGRlYnVyci5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBkZWJ1cnJlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVidXJyKCdkw6lqw6AgdnUnKTtcbiAgICAgKiAvLyA9PiAnZGVqYSB2dSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkZWJ1cnIoc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgcmV0dXJuIHN0cmluZyAmJiBzdHJpbmcucmVwbGFjZShyZUxhdGluLCBkZWJ1cnJMZXR0ZXIpLnJlcGxhY2UocmVDb21ib01hcmssICcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHN0cmluZ2AgZW5kcyB3aXRoIHRoZSBnaXZlbiB0YXJnZXQgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0YXJnZXRdIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3Bvc2l0aW9uPXN0cmluZy5sZW5ndGhdIFRoZSBwb3NpdGlvbiB0byBzZWFyY2ggdXAgdG8uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBzdHJpbmdgIGVuZHMgd2l0aCBgdGFyZ2V0YCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmVuZHNXaXRoKCdhYmMnLCAnYycpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZW5kc1dpdGgoJ2FiYycsICdiJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uZW5kc1dpdGgoJ2FiYycsICdiJywgMik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVuZHNXaXRoKHN0cmluZywgdGFyZ2V0LCBwb3NpdGlvbikge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHRhcmdldCA9IGJhc2VUb1N0cmluZyh0YXJnZXQpO1xuXG4gICAgICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gPT09IHVuZGVmaW5lZFxuICAgICAgICA/IGxlbmd0aFxuICAgICAgICA6IGJhc2VDbGFtcCh0b0ludGVnZXIocG9zaXRpb24pLCAwLCBsZW5ndGgpO1xuXG4gICAgICB2YXIgZW5kID0gcG9zaXRpb247XG4gICAgICBwb3NpdGlvbiAtPSB0YXJnZXQubGVuZ3RoO1xuICAgICAgcmV0dXJuIHBvc2l0aW9uID49IDAgJiYgc3RyaW5nLnNsaWNlKHBvc2l0aW9uLCBlbmQpID09IHRhcmdldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgY2hhcmFjdGVycyBcIiZcIiwgXCI8XCIsIFwiPlwiLCAnXCInLCBhbmQgXCInXCIgaW4gYHN0cmluZ2AgdG8gdGhlaXJcbiAgICAgKiBjb3JyZXNwb25kaW5nIEhUTUwgZW50aXRpZXMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTm8gb3RoZXIgY2hhcmFjdGVycyBhcmUgZXNjYXBlZC4gVG8gZXNjYXBlIGFkZGl0aW9uYWxcbiAgICAgKiBjaGFyYWN0ZXJzIHVzZSBhIHRoaXJkLXBhcnR5IGxpYnJhcnkgbGlrZSBbX2hlX10oaHR0cHM6Ly9tdGhzLmJlL2hlKS5cbiAgICAgKlxuICAgICAqIFRob3VnaCB0aGUgXCI+XCIgY2hhcmFjdGVyIGlzIGVzY2FwZWQgZm9yIHN5bW1ldHJ5LCBjaGFyYWN0ZXJzIGxpa2VcbiAgICAgKiBcIj5cIiBhbmQgXCIvXCIgZG9uJ3QgbmVlZCBlc2NhcGluZyBpbiBIVE1MIGFuZCBoYXZlIG5vIHNwZWNpYWwgbWVhbmluZ1xuICAgICAqIHVubGVzcyB0aGV5J3JlIHBhcnQgb2YgYSB0YWcgb3IgdW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlLiBTZWVcbiAgICAgKiBbTWF0aGlhcyBCeW5lbnMncyBhcnRpY2xlXShodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvYW1iaWd1b3VzLWFtcGVyc2FuZHMpXG4gICAgICogKHVuZGVyIFwic2VtaS1yZWxhdGVkIGZ1biBmYWN0XCIpIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICpcbiAgICAgKiBXaGVuIHdvcmtpbmcgd2l0aCBIVE1MIHlvdSBzaG91bGQgYWx3YXlzXG4gICAgICogW3F1b3RlIGF0dHJpYnV0ZSB2YWx1ZXNdKGh0dHA6Ly93b25rby5jb20vcG9zdC9odG1sLWVzY2FwaW5nKSB0byByZWR1Y2VcbiAgICAgKiBYU1MgdmVjdG9ycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZXNjYXBlKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICAgICAqIC8vID0+ICdmcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXNjYXBlKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHJldHVybiAoc3RyaW5nICYmIHJlSGFzVW5lc2NhcGVkSHRtbC50ZXN0KHN0cmluZykpXG4gICAgICAgID8gc3RyaW5nLnJlcGxhY2UocmVVbmVzY2FwZWRIdG1sLCBlc2NhcGVIdG1sQ2hhcilcbiAgICAgICAgOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXNjYXBlcyB0aGUgYFJlZ0V4cGAgc3BlY2lhbCBjaGFyYWN0ZXJzIFwiXlwiLCBcIiRcIiwgXCJcXFwiLCBcIi5cIiwgXCIqXCIsIFwiK1wiLFxuICAgICAqIFwiP1wiLCBcIihcIiwgXCIpXCIsIFwiW1wiLCBcIl1cIiwgXCJ7XCIsIFwifVwiLCBhbmQgXCJ8XCIgaW4gYHN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmVzY2FwZVJlZ0V4cCgnW2xvZGFzaF0oaHR0cHM6Ly9sb2Rhc2guY29tLyknKTtcbiAgICAgKiAvLyA9PiAnXFxbbG9kYXNoXFxdXFwoaHR0cHM6Ly9sb2Rhc2hcXC5jb20vXFwpJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1JlZ0V4cENoYXIudGVzdChzdHJpbmcpKVxuICAgICAgICA/IHN0cmluZy5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gICAgICAgIDogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvXG4gICAgICogW2tlYmFiIGNhc2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xldHRlcl9jYXNlI1NwZWNpYWxfY2FzZV9zdHlsZXMpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUga2ViYWIgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmtlYmFiQ2FzZSgnRm9vIEJhcicpO1xuICAgICAqIC8vID0+ICdmb28tYmFyJ1xuICAgICAqXG4gICAgICogXy5rZWJhYkNhc2UoJ2Zvb0JhcicpO1xuICAgICAqIC8vID0+ICdmb28tYmFyJ1xuICAgICAqXG4gICAgICogXy5rZWJhYkNhc2UoJ19fRk9PX0JBUl9fJyk7XG4gICAgICogLy8gPT4gJ2Zvby1iYXInXG4gICAgICovXG4gICAgdmFyIGtlYmFiQ2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICctJyA6ICcnKSArIHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgLCBhcyBzcGFjZSBzZXBhcmF0ZWQgd29yZHMsIHRvIGxvd2VyIGNhc2UuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBsb3dlciBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubG93ZXJDYXNlKCctLUZvby1CYXItLScpO1xuICAgICAqIC8vID0+ICdmb28gYmFyJ1xuICAgICAqXG4gICAgICogXy5sb3dlckNhc2UoJ2Zvb0JhcicpO1xuICAgICAqIC8vID0+ICdmb28gYmFyJ1xuICAgICAqXG4gICAgICogXy5sb3dlckNhc2UoJ19fRk9PX0JBUl9fJyk7XG4gICAgICogLy8gPT4gJ2ZvbyBiYXInXG4gICAgICovXG4gICAgdmFyIGxvd2VyQ2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICcgJyA6ICcnKSArIHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYHN0cmluZ2AgdG8gbG93ZXIgY2FzZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubG93ZXJGaXJzdCgnRnJlZCcpO1xuICAgICAqIC8vID0+ICdmcmVkJ1xuICAgICAqXG4gICAgICogXy5sb3dlckZpcnN0KCdGUkVEJyk7XG4gICAgICogLy8gPT4gJ2ZSRUQnXG4gICAgICovXG4gICAgdmFyIGxvd2VyRmlyc3QgPSBjcmVhdGVDYXNlRmlyc3QoJ3RvTG93ZXJDYXNlJyk7XG5cbiAgICAvKipcbiAgICAgKiBQYWRzIGBzdHJpbmdgIG9uIHRoZSBsZWZ0IGFuZCByaWdodCBzaWRlcyBpZiBpdCdzIHNob3J0ZXIgdGhhbiBgbGVuZ3RoYC5cbiAgICAgKiBQYWRkaW5nIGNoYXJhY3RlcnMgYXJlIHRydW5jYXRlZCBpZiB0aGV5IGNhbid0IGJlIGV2ZW5seSBkaXZpZGVkIGJ5IGBsZW5ndGhgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHBhZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD0wXSBUaGUgcGFkZGluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucGFkKCdhYmMnLCA4KTtcbiAgICAgKiAvLyA9PiAnICBhYmMgICAnXG4gICAgICpcbiAgICAgKiBfLnBhZCgnYWJjJywgOCwgJ18tJyk7XG4gICAgICogLy8gPT4gJ18tYWJjXy1fJ1xuICAgICAqXG4gICAgICogXy5wYWQoJ2FiYycsIDMpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gcGFkKHN0cmluZywgbGVuZ3RoLCBjaGFycykge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGxlbmd0aCA9IHRvSW50ZWdlcihsZW5ndGgpO1xuXG4gICAgICB2YXIgc3RyTGVuZ3RoID0gbGVuZ3RoID8gc3RyaW5nU2l6ZShzdHJpbmcpIDogMDtcbiAgICAgIGlmICghbGVuZ3RoIHx8IHN0ckxlbmd0aCA+PSBsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIH1cbiAgICAgIHZhciBtaWQgPSAobGVuZ3RoIC0gc3RyTGVuZ3RoKSAvIDI7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBjcmVhdGVQYWRkaW5nKG5hdGl2ZUZsb29yKG1pZCksIGNoYXJzKSArXG4gICAgICAgIHN0cmluZyArXG4gICAgICAgIGNyZWF0ZVBhZGRpbmcobmF0aXZlQ2VpbChtaWQpLCBjaGFycylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFkcyBgc3RyaW5nYCBvbiB0aGUgcmlnaHQgc2lkZSBpZiBpdCdzIHNob3J0ZXIgdGhhbiBgbGVuZ3RoYC4gUGFkZGluZ1xuICAgICAqIGNoYXJhY3RlcnMgYXJlIHRydW5jYXRlZCBpZiB0aGV5IGV4Y2VlZCBgbGVuZ3RoYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBwYWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MF0gVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBwYWRkZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnBhZEVuZCgnYWJjJywgNik7XG4gICAgICogLy8gPT4gJ2FiYyAgICdcbiAgICAgKlxuICAgICAqIF8ucGFkRW5kKCdhYmMnLCA2LCAnXy0nKTtcbiAgICAgKiAvLyA9PiAnYWJjXy1fJ1xuICAgICAqXG4gICAgICogXy5wYWRFbmQoJ2FiYycsIDMpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gcGFkRW5kKHN0cmluZywgbGVuZ3RoLCBjaGFycykge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGxlbmd0aCA9IHRvSW50ZWdlcihsZW5ndGgpO1xuXG4gICAgICB2YXIgc3RyTGVuZ3RoID0gbGVuZ3RoID8gc3RyaW5nU2l6ZShzdHJpbmcpIDogMDtcbiAgICAgIHJldHVybiAobGVuZ3RoICYmIHN0ckxlbmd0aCA8IGxlbmd0aClcbiAgICAgICAgPyAoc3RyaW5nICsgY3JlYXRlUGFkZGluZyhsZW5ndGggLSBzdHJMZW5ndGgsIGNoYXJzKSlcbiAgICAgICAgOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFkcyBgc3RyaW5nYCBvbiB0aGUgbGVmdCBzaWRlIGlmIGl0J3Mgc2hvcnRlciB0aGFuIGBsZW5ndGhgLiBQYWRkaW5nXG4gICAgICogY2hhcmFjdGVycyBhcmUgdHJ1bmNhdGVkIGlmIHRoZXkgZXhjZWVkIGBsZW5ndGhgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHBhZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD0wXSBUaGUgcGFkZGluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucGFkU3RhcnQoJ2FiYycsIDYpO1xuICAgICAqIC8vID0+ICcgICBhYmMnXG4gICAgICpcbiAgICAgKiBfLnBhZFN0YXJ0KCdhYmMnLCA2LCAnXy0nKTtcbiAgICAgKiAvLyA9PiAnXy1fYWJjJ1xuICAgICAqXG4gICAgICogXy5wYWRTdGFydCgnYWJjJywgMyk7XG4gICAgICogLy8gPT4gJ2FiYydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYWRTdGFydChzdHJpbmcsIGxlbmd0aCwgY2hhcnMpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBsZW5ndGggPSB0b0ludGVnZXIobGVuZ3RoKTtcblxuICAgICAgdmFyIHN0ckxlbmd0aCA9IGxlbmd0aCA/IHN0cmluZ1NpemUoc3RyaW5nKSA6IDA7XG4gICAgICByZXR1cm4gKGxlbmd0aCAmJiBzdHJMZW5ndGggPCBsZW5ndGgpXG4gICAgICAgID8gKGNyZWF0ZVBhZGRpbmcobGVuZ3RoIC0gc3RyTGVuZ3RoLCBjaGFycykgKyBzdHJpbmcpXG4gICAgICAgIDogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGFuIGludGVnZXIgb2YgdGhlIHNwZWNpZmllZCByYWRpeC4gSWYgYHJhZGl4YCBpc1xuICAgICAqIGB1bmRlZmluZWRgIG9yIGAwYCwgYSBgcmFkaXhgIG9mIGAxMGAgaXMgdXNlZCB1bmxlc3MgYHZhbHVlYCBpcyBhXG4gICAgICogaGV4YWRlY2ltYWwsIGluIHdoaWNoIGNhc2UgYSBgcmFkaXhgIG9mIGAxNmAgaXMgdXNlZC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBhbGlnbnMgd2l0aCB0aGVcbiAgICAgKiBbRVM1IGltcGxlbWVudGF0aW9uXShodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS4xLjIuMikgb2YgYHBhcnNlSW50YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjEuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3JhZGl4PTEwXSBUaGUgcmFkaXggdG8gaW50ZXJwcmV0IGB2YWx1ZWAgYnkuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5wYXJzZUludCgnMDgnKTtcbiAgICAgKiAvLyA9PiA4XG4gICAgICpcbiAgICAgKiBfLm1hcChbJzYnLCAnMDgnLCAnMTAnXSwgXy5wYXJzZUludCk7XG4gICAgICogLy8gPT4gWzYsIDgsIDEwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcnNlSW50KHN0cmluZywgcmFkaXgsIGd1YXJkKSB7XG4gICAgICBpZiAoZ3VhcmQgfHwgcmFkaXggPT0gbnVsbCkge1xuICAgICAgICByYWRpeCA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHJhZGl4KSB7XG4gICAgICAgIHJhZGl4ID0gK3JhZGl4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5hdGl2ZVBhcnNlSW50KHRvU3RyaW5nKHN0cmluZykucmVwbGFjZShyZVRyaW1TdGFydCwgJycpLCByYWRpeCB8fCAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBlYXRzIHRoZSBnaXZlbiBzdHJpbmcgYG5gIHRpbWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHJlcGVhdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHN0cmluZy5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJlcGVhdGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yZXBlYXQoJyonLCAzKTtcbiAgICAgKiAvLyA9PiAnKioqJ1xuICAgICAqXG4gICAgICogXy5yZXBlYXQoJ2FiYycsIDIpO1xuICAgICAqIC8vID0+ICdhYmNhYmMnXG4gICAgICpcbiAgICAgKiBfLnJlcGVhdCgnYWJjJywgMCk7XG4gICAgICogLy8gPT4gJydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXBlYXQoc3RyaW5nLCBuLCBndWFyZCkge1xuICAgICAgaWYgKChndWFyZCA/IGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgbiwgZ3VhcmQpIDogbiA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBuID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVJlcGVhdCh0b1N0cmluZyhzdHJpbmcpLCBuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlcyBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHN0cmluZ2Agd2l0aCBgcmVwbGFjZW1lbnRgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BTdHJpbmcjcmVwbGFjZWBdKGh0dHBzOi8vbWRuLmlvL1N0cmluZy9yZXBsYWNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtSZWdFeHB8c3RyaW5nfSBwYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IHJlcGxhY2VtZW50IFRoZSBtYXRjaCByZXBsYWNlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBtb2RpZmllZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmVwbGFjZSgnSGkgRnJlZCcsICdGcmVkJywgJ0Jhcm5leScpO1xuICAgICAqIC8vID0+ICdIaSBCYXJuZXknXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVwbGFjZSgpIHtcbiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgIHN0cmluZyA9IHRvU3RyaW5nKGFyZ3NbMF0pO1xuXG4gICAgICByZXR1cm4gYXJncy5sZW5ndGggPCAzID8gc3RyaW5nIDogc3RyaW5nLnJlcGxhY2UoYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG9cbiAgICAgKiBbc25ha2UgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU25ha2VfY2FzZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzbmFrZSBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc25ha2VDYXNlKCdGb28gQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvb19iYXInXG4gICAgICpcbiAgICAgKiBfLnNuYWtlQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvb19iYXInXG4gICAgICpcbiAgICAgKiBfLnNuYWtlQ2FzZSgnLS1GT08tQkFSLS0nKTtcbiAgICAgKiAvLyA9PiAnZm9vX2JhcidcbiAgICAgKi9cbiAgICB2YXIgc25ha2VDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJ18nIDogJycpICsgd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogU3BsaXRzIGBzdHJpbmdgIGJ5IGBzZXBhcmF0b3JgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BTdHJpbmcjc3BsaXRgXShodHRwczovL21kbi5pby9TdHJpbmcvc3BsaXQpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHNwbGl0LlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gc2VwYXJhdG9yIFRoZSBzZXBhcmF0b3IgcGF0dGVybiB0byBzcGxpdCBieS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xpbWl0XSBUaGUgbGVuZ3RoIHRvIHRydW5jYXRlIHJlc3VsdHMgdG8uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzdHJpbmcgc2VnbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc3BsaXQoJ2EtYi1jJywgJy0nLCAyKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYiddXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3BsaXQoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICBpZiAobGltaXQgJiYgdHlwZW9mIGxpbWl0ICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCkpIHtcbiAgICAgICAgc2VwYXJhdG9yID0gbGltaXQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBsaW1pdCA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfQVJSQVlfTEVOR1RIIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAoIWxpbWl0KSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBpZiAoc3RyaW5nICYmIChcbiAgICAgICAgICAgIHR5cGVvZiBzZXBhcmF0b3IgPT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAgIChzZXBhcmF0b3IgIT0gbnVsbCAmJiAhaXNSZWdFeHAoc2VwYXJhdG9yKSlcbiAgICAgICAgICApKSB7XG4gICAgICAgIHNlcGFyYXRvciA9IGJhc2VUb1N0cmluZyhzZXBhcmF0b3IpO1xuICAgICAgICBpZiAoIXNlcGFyYXRvciAmJiBoYXNVbmljb2RlKHN0cmluZykpIHtcbiAgICAgICAgICByZXR1cm4gY2FzdFNsaWNlKHN0cmluZ1RvQXJyYXkoc3RyaW5nKSwgMCwgbGltaXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyaW5nLnNwbGl0KHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvXG4gICAgICogW3N0YXJ0IGNhc2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xldHRlcl9jYXNlI1N0eWxpc3RpY19vcl9zcGVjaWFsaXNlZF91c2FnZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdGFydCBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc3RhcnRDYXNlKCctLWZvby1iYXItLScpO1xuICAgICAqIC8vID0+ICdGb28gQmFyJ1xuICAgICAqXG4gICAgICogXy5zdGFydENhc2UoJ2Zvb0JhcicpO1xuICAgICAqIC8vID0+ICdGb28gQmFyJ1xuICAgICAqXG4gICAgICogXy5zdGFydENhc2UoJ19fRk9PX0JBUl9fJyk7XG4gICAgICogLy8gPT4gJ0ZPTyBCQVInXG4gICAgICovXG4gICAgdmFyIHN0YXJ0Q2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICcgJyA6ICcnKSArIHVwcGVyRmlyc3Qod29yZCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHN0cmluZ2Agc3RhcnRzIHdpdGggdGhlIGdpdmVuIHRhcmdldCBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhcmdldF0gVGhlIHN0cmluZyB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcG9zaXRpb249MF0gVGhlIHBvc2l0aW9uIHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgc3RyaW5nYCBzdGFydHMgd2l0aCBgdGFyZ2V0YCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0c1dpdGgoJ2FiYycsICdhJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5zdGFydHNXaXRoKCdhYmMnLCAnYicpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0c1dpdGgoJ2FiYycsICdiJywgMSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc3RyaW5nLCB0YXJnZXQsIHBvc2l0aW9uKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiA9PSBudWxsXG4gICAgICAgID8gMFxuICAgICAgICA6IGJhc2VDbGFtcCh0b0ludGVnZXIocG9zaXRpb24pLCAwLCBzdHJpbmcubGVuZ3RoKTtcblxuICAgICAgdGFyZ2V0ID0gYmFzZVRvU3RyaW5nKHRhcmdldCk7XG4gICAgICByZXR1cm4gc3RyaW5nLnNsaWNlKHBvc2l0aW9uLCBwb3NpdGlvbiArIHRhcmdldC5sZW5ndGgpID09IHRhcmdldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24gdGhhdCBjYW4gaW50ZXJwb2xhdGUgZGF0YSBwcm9wZXJ0aWVzXG4gICAgICogaW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlcnMsIEhUTUwtZXNjYXBlIGludGVycG9sYXRlZCBkYXRhIHByb3BlcnRpZXMgaW5cbiAgICAgKiBcImVzY2FwZVwiIGRlbGltaXRlcnMsIGFuZCBleGVjdXRlIEphdmFTY3JpcHQgaW4gXCJldmFsdWF0ZVwiIGRlbGltaXRlcnMuIERhdGFcbiAgICAgKiBwcm9wZXJ0aWVzIG1heSBiZSBhY2Nlc3NlZCBhcyBmcmVlIHZhcmlhYmxlcyBpbiB0aGUgdGVtcGxhdGUuIElmIGEgc2V0dGluZ1xuICAgICAqIG9iamVjdCBpcyBnaXZlbiwgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGBfLnRlbXBsYXRlU2V0dGluZ3NgIHZhbHVlcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBJbiB0aGUgZGV2ZWxvcG1lbnQgYnVpbGQgYF8udGVtcGxhdGVgIHV0aWxpemVzXG4gICAgICogW3NvdXJjZVVSTHNdKGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL2RldmVsb3BlcnRvb2xzL3NvdXJjZW1hcHMvI3RvYy1zb3VyY2V1cmwpXG4gICAgICogZm9yIGVhc2llciBkZWJ1Z2dpbmcuXG4gICAgICpcbiAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwcmVjb21waWxpbmcgdGVtcGxhdGVzIHNlZVxuICAgICAqIFtsb2Rhc2gncyBjdXN0b20gYnVpbGRzIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vbG9kYXNoLmNvbS9jdXN0b20tYnVpbGRzKS5cbiAgICAgKlxuICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIENocm9tZSBleHRlbnNpb24gc2FuZGJveGVzIHNlZVxuICAgICAqIFtDaHJvbWUncyBleHRlbnNpb25zIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLmNocm9tZS5jb20vZXh0ZW5zaW9ucy9zYW5kYm94aW5nRXZhbCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSB0ZW1wbGF0ZSBzdHJpbmcuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmVzY2FwZT1fLnRlbXBsYXRlU2V0dGluZ3MuZXNjYXBlXVxuICAgICAqICBUaGUgSFRNTCBcImVzY2FwZVwiIGRlbGltaXRlci5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXZhbHVhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmV2YWx1YXRlXVxuICAgICAqICBUaGUgXCJldmFsdWF0ZVwiIGRlbGltaXRlci5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuaW1wb3J0cz1fLnRlbXBsYXRlU2V0dGluZ3MuaW1wb3J0c11cbiAgICAgKiAgQW4gb2JqZWN0IHRvIGltcG9ydCBpbnRvIHRoZSB0ZW1wbGF0ZSBhcyBmcmVlIHZhcmlhYmxlcy5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuaW50ZXJwb2xhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlXVxuICAgICAqICBUaGUgXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlci5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc291cmNlVVJMPSdsb2Rhc2gudGVtcGxhdGVTb3VyY2VzW25dJ11cbiAgICAgKiAgVGhlIHNvdXJjZVVSTCBvZiB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnZhcmlhYmxlPSdvYmonXVxuICAgICAqICBUaGUgZGF0YSBvYmplY3QgdmFyaWFibGUgbmFtZS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlciB0byBjcmVhdGUgYSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnKTtcbiAgICAgKiBjb21waWxlZCh7ICd1c2VyJzogJ2ZyZWQnIH0pO1xuICAgICAqIC8vID0+ICdoZWxsbyBmcmVkISdcbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgSFRNTCBcImVzY2FwZVwiIGRlbGltaXRlciB0byBlc2NhcGUgZGF0YSBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPGI+PCUtIHZhbHVlICU+PC9iPicpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3ZhbHVlJzogJzxzY3JpcHQ+JyB9KTtcbiAgICAgKiAvLyA9PiAnPGI+Jmx0O3NjcmlwdCZndDs8L2I+J1xuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyIHRvIGV4ZWN1dGUgSmF2YVNjcmlwdCBhbmQgZ2VuZXJhdGUgSFRNTC5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8JSBfLmZvckVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPicpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXJzJzogWydmcmVkJywgJ2Jhcm5leSddIH0pO1xuICAgICAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBpbnRlcm5hbCBgcHJpbnRgIGZ1bmN0aW9uIGluIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXJzLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIHByaW50KFwiaGVsbG8gXCIgKyB1c2VyKTsgJT4hJyk7XG4gICAgICogY29tcGlsZWQoeyAndXNlcic6ICdiYXJuZXknIH0pO1xuICAgICAqIC8vID0+ICdoZWxsbyBiYXJuZXkhJ1xuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBFUyB0ZW1wbGF0ZSBsaXRlcmFsIGRlbGltaXRlciBhcyBhbiBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICAgICAqIC8vIERpc2FibGUgc3VwcG9ydCBieSByZXBsYWNpbmcgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gJHsgdXNlciB9IScpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXInOiAncGViYmxlcycgfSk7XG4gICAgICogLy8gPT4gJ2hlbGxvIHBlYmJsZXMhJ1xuICAgICAqXG4gICAgICogLy8gVXNlIGJhY2tzbGFzaGVzIHRvIHRyZWF0IGRlbGltaXRlcnMgYXMgcGxhaW4gdGV4dC5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8JT0gXCJcXFxcPCUtIHZhbHVlICVcXFxcPlwiICU+Jyk7XG4gICAgICogY29tcGlsZWQoeyAndmFsdWUnOiAnaWdub3JlZCcgfSk7XG4gICAgICogLy8gPT4gJzwlLSB2YWx1ZSAlPidcbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgYGltcG9ydHNgIG9wdGlvbiB0byBpbXBvcnQgYGpRdWVyeWAgYXMgYGpxYC5cbiAgICAgKiB2YXIgdGV4dCA9ICc8JSBqcS5lYWNoKHVzZXJzLCBmdW5jdGlvbih1c2VyKSB7ICU+PGxpPjwlLSB1c2VyICU+PC9saT48JSB9KTsgJT4nO1xuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUodGV4dCwgeyAnaW1wb3J0cyc6IHsgJ2pxJzogalF1ZXJ5IH0gfSk7XG4gICAgICogY29tcGlsZWQoeyAndXNlcnMnOiBbJ2ZyZWQnLCAnYmFybmV5J10gfSk7XG4gICAgICogLy8gPT4gJzxsaT5mcmVkPC9saT48bGk+YmFybmV5PC9saT4nXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIGBzb3VyY2VVUkxgIG9wdGlvbiB0byBzcGVjaWZ5IGEgY3VzdG9tIHNvdXJjZVVSTCBmb3IgdGhlIHRlbXBsYXRlLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvIDwlPSB1c2VyICU+IScsIHsgJ3NvdXJjZVVSTCc6ICcvYmFzaWMvZ3JlZXRpbmcuanN0JyB9KTtcbiAgICAgKiBjb21waWxlZChkYXRhKTtcbiAgICAgKiAvLyA9PiBGaW5kIHRoZSBzb3VyY2Ugb2YgXCJncmVldGluZy5qc3RcIiB1bmRlciB0aGUgU291cmNlcyB0YWIgb3IgUmVzb3VyY2VzIHBhbmVsIG9mIHRoZSB3ZWIgaW5zcGVjdG9yLlxuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBgdmFyaWFibGVgIG9wdGlvbiB0byBlbnN1cmUgYSB3aXRoLXN0YXRlbWVudCBpc24ndCB1c2VkIGluIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoaSA8JT0gZGF0YS51c2VyICU+IScsIHsgJ3ZhcmlhYmxlJzogJ2RhdGEnIH0pO1xuICAgICAqIGNvbXBpbGVkLnNvdXJjZTtcbiAgICAgKiAvLyA9PiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICogLy8gICB2YXIgX190LCBfX3AgPSAnJztcbiAgICAgKiAvLyAgIF9fcCArPSAnaGkgJyArICgoX190ID0gKCBkYXRhLnVzZXIgKSkgPT0gbnVsbCA/ICcnIDogX190KSArICchJztcbiAgICAgKiAvLyAgIHJldHVybiBfX3A7XG4gICAgICogLy8gfVxuICAgICAqXG4gICAgICogLy8gVXNlIGN1c3RvbSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLlxuICAgICAqIF8udGVtcGxhdGVTZXR0aW5ncy5pbnRlcnBvbGF0ZSA9IC97eyhbXFxzXFxTXSs/KX19L2c7XG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8ge3sgdXNlciB9fSEnKTtcbiAgICAgKiBjb21waWxlZCh7ICd1c2VyJzogJ211c3RhY2hlJyB9KTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gbXVzdGFjaGUhJ1xuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBgc291cmNlYCBwcm9wZXJ0eSB0byBpbmxpbmUgY29tcGlsZWQgdGVtcGxhdGVzIGZvciBtZWFuaW5nZnVsXG4gICAgICogLy8gbGluZSBudW1iZXJzIGluIGVycm9yIG1lc3NhZ2VzIGFuZCBzdGFjayB0cmFjZXMuXG4gICAgICogZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJ2pzdC5qcycpLCAnXFxcbiAgICAgKiAgIHZhciBKU1QgPSB7XFxcbiAgICAgKiAgICAgXCJtYWluXCI6ICcgKyBfLnRlbXBsYXRlKG1haW5UZXh0KS5zb3VyY2UgKyAnXFxcbiAgICAgKiAgIH07XFxcbiAgICAgKiAnKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0ZW1wbGF0ZShzdHJpbmcsIG9wdGlvbnMsIGd1YXJkKSB7XG4gICAgICAvLyBCYXNlZCBvbiBKb2huIFJlc2lnJ3MgYHRtcGxgIGltcGxlbWVudGF0aW9uXG4gICAgICAvLyAoaHR0cDovL2Vqb2huLm9yZy9ibG9nL2phdmFzY3JpcHQtbWljcm8tdGVtcGxhdGluZy8pXG4gICAgICAvLyBhbmQgTGF1cmEgRG9rdG9yb3ZhJ3MgZG9ULmpzIChodHRwczovL2dpdGh1Yi5jb20vb2xhZG8vZG9UKS5cbiAgICAgIHZhciBzZXR0aW5ncyA9IGxvZGFzaC50ZW1wbGF0ZVNldHRpbmdzO1xuXG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBvcHRpb25zLCBndWFyZCkpIHtcbiAgICAgICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBvcHRpb25zID0gYXNzaWduSW5XaXRoKHt9LCBvcHRpb25zLCBzZXR0aW5ncywgY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbik7XG5cbiAgICAgIHZhciBpbXBvcnRzID0gYXNzaWduSW5XaXRoKHt9LCBvcHRpb25zLmltcG9ydHMsIHNldHRpbmdzLmltcG9ydHMsIGN1c3RvbURlZmF1bHRzQXNzaWduSW4pLFxuICAgICAgICAgIGltcG9ydHNLZXlzID0ga2V5cyhpbXBvcnRzKSxcbiAgICAgICAgICBpbXBvcnRzVmFsdWVzID0gYmFzZVZhbHVlcyhpbXBvcnRzLCBpbXBvcnRzS2V5cyk7XG5cbiAgICAgIHZhciBpc0VzY2FwaW5nLFxuICAgICAgICAgIGlzRXZhbHVhdGluZyxcbiAgICAgICAgICBpbmRleCA9IDAsXG4gICAgICAgICAgaW50ZXJwb2xhdGUgPSBvcHRpb25zLmludGVycG9sYXRlIHx8IHJlTm9NYXRjaCxcbiAgICAgICAgICBzb3VyY2UgPSBcIl9fcCArPSAnXCI7XG5cbiAgICAgIC8vIENvbXBpbGUgdGhlIHJlZ2V4cCB0byBtYXRjaCBlYWNoIGRlbGltaXRlci5cbiAgICAgIHZhciByZURlbGltaXRlcnMgPSBSZWdFeHAoXG4gICAgICAgIChvcHRpb25zLmVzY2FwZSB8fCByZU5vTWF0Y2gpLnNvdXJjZSArICd8JyArXG4gICAgICAgIGludGVycG9sYXRlLnNvdXJjZSArICd8JyArXG4gICAgICAgIChpbnRlcnBvbGF0ZSA9PT0gcmVJbnRlcnBvbGF0ZSA/IHJlRXNUZW1wbGF0ZSA6IHJlTm9NYXRjaCkuc291cmNlICsgJ3wnICtcbiAgICAgICAgKG9wdGlvbnMuZXZhbHVhdGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCQnXG4gICAgICAsICdnJyk7XG5cbiAgICAgIC8vIFVzZSBhIHNvdXJjZVVSTCBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAgICAgIC8vIFRoZSBzb3VyY2VVUkwgZ2V0cyBpbmplY3RlZCBpbnRvIHRoZSBzb3VyY2UgdGhhdCdzIGV2YWwtZWQsIHNvIGJlIGNhcmVmdWxcbiAgICAgIC8vIHRvIG5vcm1hbGl6ZSBhbGwga2luZHMgb2Ygd2hpdGVzcGFjZSwgc28gZS5nLiBuZXdsaW5lcyAoYW5kIHVuaWNvZGUgdmVyc2lvbnMgb2YgaXQpIGNhbid0IHNuZWFrIGluXG4gICAgICAvLyBhbmQgZXNjYXBlIHRoZSBjb21tZW50LCB0aHVzIGluamVjdGluZyBjb2RlIHRoYXQgZ2V0cyBldmFsZWQuXG4gICAgICB2YXIgc291cmNlVVJMID0gJy8vIyBzb3VyY2VVUkw9JyArXG4gICAgICAgIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICdzb3VyY2VVUkwnKVxuICAgICAgICAgID8gKG9wdGlvbnMuc291cmNlVVJMICsgJycpLnJlcGxhY2UoL1xccy9nLCAnICcpXG4gICAgICAgICAgOiAoJ2xvZGFzaC50ZW1wbGF0ZVNvdXJjZXNbJyArICgrK3RlbXBsYXRlQ291bnRlcikgKyAnXScpXG4gICAgICAgICkgKyAnXFxuJztcblxuICAgICAgc3RyaW5nLnJlcGxhY2UocmVEZWxpbWl0ZXJzLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlVmFsdWUsIGludGVycG9sYXRlVmFsdWUsIGVzVGVtcGxhdGVWYWx1ZSwgZXZhbHVhdGVWYWx1ZSwgb2Zmc2V0KSB7XG4gICAgICAgIGludGVycG9sYXRlVmFsdWUgfHwgKGludGVycG9sYXRlVmFsdWUgPSBlc1RlbXBsYXRlVmFsdWUpO1xuXG4gICAgICAgIC8vIEVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgY2FuJ3QgYmUgaW5jbHVkZWQgaW4gc3RyaW5nIGxpdGVyYWxzLlxuICAgICAgICBzb3VyY2UgKz0gc3RyaW5nLnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UocmVVbmVzY2FwZWRTdHJpbmcsIGVzY2FwZVN0cmluZ0NoYXIpO1xuXG4gICAgICAgIC8vIFJlcGxhY2UgZGVsaW1pdGVycyB3aXRoIHNuaXBwZXRzLlxuICAgICAgICBpZiAoZXNjYXBlVmFsdWUpIHtcbiAgICAgICAgICBpc0VzY2FwaW5nID0gdHJ1ZTtcbiAgICAgICAgICBzb3VyY2UgKz0gXCInICtcXG5fX2UoXCIgKyBlc2NhcGVWYWx1ZSArIFwiKSArXFxuJ1wiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmFsdWF0ZVZhbHVlKSB7XG4gICAgICAgICAgaXNFdmFsdWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGVWYWx1ZSArIFwiO1xcbl9fcCArPSAnXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVycG9sYXRlVmFsdWUpIHtcbiAgICAgICAgICBzb3VyY2UgKz0gXCInICtcXG4oKF9fdCA9IChcIiArIGludGVycG9sYXRlVmFsdWUgKyBcIikpID09IG51bGwgPyAnJyA6IF9fdCkgK1xcbidcIjtcbiAgICAgICAgfVxuICAgICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcblxuICAgICAgICAvLyBUaGUgSlMgZW5naW5lIGVtYmVkZGVkIGluIEFkb2JlIHByb2R1Y3RzIG5lZWRzIGBtYXRjaGAgcmV0dXJuZWQgaW5cbiAgICAgICAgLy8gb3JkZXIgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBgb2Zmc2V0YCB2YWx1ZS5cbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgfSk7XG5cbiAgICAgIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgICAgIC8vIElmIGB2YXJpYWJsZWAgaXMgbm90IHNwZWNpZmllZCB3cmFwIGEgd2l0aC1zdGF0ZW1lbnQgYXJvdW5kIHRoZSBnZW5lcmF0ZWRcbiAgICAgIC8vIGNvZGUgdG8gYWRkIHRoZSBkYXRhIG9iamVjdCB0byB0aGUgdG9wIG9mIHRoZSBzY29wZSBjaGFpbi5cbiAgICAgIHZhciB2YXJpYWJsZSA9IGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3ZhcmlhYmxlJykgJiYgb3B0aW9ucy52YXJpYWJsZTtcbiAgICAgIGlmICghdmFyaWFibGUpIHtcbiAgICAgICAgc291cmNlID0gJ3dpdGggKG9iaikge1xcbicgKyBzb3VyY2UgKyAnXFxufVxcbic7XG4gICAgICB9XG4gICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiBhIGZvcmJpZGRlbiBjaGFyYWN0ZXIgd2FzIGZvdW5kIGluIGB2YXJpYWJsZWAsIHRvIHByZXZlbnRcbiAgICAgIC8vIHBvdGVudGlhbCBjb21tYW5kIGluamVjdGlvbiBhdHRhY2tzLlxuICAgICAgZWxzZSBpZiAocmVGb3JiaWRkZW5JZGVudGlmaWVyQ2hhcnMudGVzdCh2YXJpYWJsZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOVkFMSURfVEVNUExfVkFSX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGVhbnVwIGNvZGUgYnkgc3RyaXBwaW5nIGVtcHR5IHN0cmluZ3MuXG4gICAgICBzb3VyY2UgPSAoaXNFdmFsdWF0aW5nID8gc291cmNlLnJlcGxhY2UocmVFbXB0eVN0cmluZ0xlYWRpbmcsICcnKSA6IHNvdXJjZSlcbiAgICAgICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ01pZGRsZSwgJyQxJylcbiAgICAgICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ1RyYWlsaW5nLCAnJDE7Jyk7XG5cbiAgICAgIC8vIEZyYW1lIGNvZGUgYXMgdGhlIGZ1bmN0aW9uIGJvZHkuXG4gICAgICBzb3VyY2UgPSAnZnVuY3Rpb24oJyArICh2YXJpYWJsZSB8fCAnb2JqJykgKyAnKSB7XFxuJyArXG4gICAgICAgICh2YXJpYWJsZVxuICAgICAgICAgID8gJydcbiAgICAgICAgICA6ICdvYmogfHwgKG9iaiA9IHt9KTtcXG4nXG4gICAgICAgICkgK1xuICAgICAgICBcInZhciBfX3QsIF9fcCA9ICcnXCIgK1xuICAgICAgICAoaXNFc2NhcGluZ1xuICAgICAgICAgICA/ICcsIF9fZSA9IF8uZXNjYXBlJ1xuICAgICAgICAgICA6ICcnXG4gICAgICAgICkgK1xuICAgICAgICAoaXNFdmFsdWF0aW5nXG4gICAgICAgICAgPyAnLCBfX2ogPSBBcnJheS5wcm90b3R5cGUuam9pbjtcXG4nICtcbiAgICAgICAgICAgIFwiZnVuY3Rpb24gcHJpbnQoKSB7IF9fcCArPSBfX2ouY2FsbChhcmd1bWVudHMsICcnKSB9XFxuXCJcbiAgICAgICAgICA6ICc7XFxuJ1xuICAgICAgICApICtcbiAgICAgICAgc291cmNlICtcbiAgICAgICAgJ3JldHVybiBfX3BcXG59JztcblxuICAgICAgdmFyIHJlc3VsdCA9IGF0dGVtcHQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBGdW5jdGlvbihpbXBvcnRzS2V5cywgc291cmNlVVJMICsgJ3JldHVybiAnICsgc291cmNlKVxuICAgICAgICAgIC5hcHBseSh1bmRlZmluZWQsIGltcG9ydHNWYWx1ZXMpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uJ3Mgc291cmNlIGJ5IGl0cyBgdG9TdHJpbmdgIG1ldGhvZCBvclxuICAgICAgLy8gdGhlIGBzb3VyY2VgIHByb3BlcnR5IGFzIGEgY29udmVuaWVuY2UgZm9yIGlubGluaW5nIGNvbXBpbGVkIHRlbXBsYXRlcy5cbiAgICAgIHJlc3VsdC5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICBpZiAoaXNFcnJvcihyZXN1bHQpKSB7XG4gICAgICAgIHRocm93IHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AsIGFzIGEgd2hvbGUsIHRvIGxvd2VyIGNhc2UganVzdCBsaWtlXG4gICAgICogW1N0cmluZyN0b0xvd2VyQ2FzZV0oaHR0cHM6Ly9tZG4uaW8vdG9Mb3dlckNhc2UpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgbG93ZXIgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvTG93ZXIoJy0tRm9vLUJhci0tJyk7XG4gICAgICogLy8gPT4gJy0tZm9vLWJhci0tJ1xuICAgICAqXG4gICAgICogXy50b0xvd2VyKCdmb29CYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vYmFyJ1xuICAgICAqXG4gICAgICogXy50b0xvd2VyKCdfX0ZPT19CQVJfXycpO1xuICAgICAqIC8vID0+ICdfX2Zvb19iYXJfXydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0xvd2VyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdG9TdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AsIGFzIGEgd2hvbGUsIHRvIHVwcGVyIGNhc2UganVzdCBsaWtlXG4gICAgICogW1N0cmluZyN0b1VwcGVyQ2FzZV0oaHR0cHM6Ly9tZG4uaW8vdG9VcHBlckNhc2UpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdXBwZXIgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvVXBwZXIoJy0tZm9vLWJhci0tJyk7XG4gICAgICogLy8gPT4gJy0tRk9PLUJBUi0tJ1xuICAgICAqXG4gICAgICogXy50b1VwcGVyKCdmb29CYXInKTtcbiAgICAgKiAvLyA9PiAnRk9PQkFSJ1xuICAgICAqXG4gICAgICogXy50b1VwcGVyKCdfX2Zvb19iYXJfXycpO1xuICAgICAqIC8vID0+ICdfX0ZPT19CQVJfXydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b1VwcGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdG9TdHJpbmcodmFsdWUpLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIG9yIHNwZWNpZmllZCBjaGFyYWN0ZXJzIGZyb20gYHN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPXdoaXRlc3BhY2VdIFRoZSBjaGFyYWN0ZXJzIHRvIHRyaW0uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cmltbWVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50cmltKCcgIGFiYyAgJyk7XG4gICAgICogLy8gPT4gJ2FiYydcbiAgICAgKlxuICAgICAqIF8udHJpbSgnLV8tYWJjLV8tJywgJ18tJyk7XG4gICAgICogLy8gPT4gJ2FiYydcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnICBmb28gICcsICcgIGJhciAgJ10sIF8udHJpbSk7XG4gICAgICogLy8gPT4gWydmb28nLCAnYmFyJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmltKHN0cmluZywgY2hhcnMsIGd1YXJkKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgaWYgKHN0cmluZyAmJiAoZ3VhcmQgfHwgY2hhcnMgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VUcmltKHN0cmluZyk7XG4gICAgICB9XG4gICAgICBpZiAoIXN0cmluZyB8fCAhKGNoYXJzID0gYmFzZVRvU3RyaW5nKGNoYXJzKSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIH1cbiAgICAgIHZhciBzdHJTeW1ib2xzID0gc3RyaW5nVG9BcnJheShzdHJpbmcpLFxuICAgICAgICAgIGNoclN5bWJvbHMgPSBzdHJpbmdUb0FycmF5KGNoYXJzKSxcbiAgICAgICAgICBzdGFydCA9IGNoYXJzU3RhcnRJbmRleChzdHJTeW1ib2xzLCBjaHJTeW1ib2xzKSxcbiAgICAgICAgICBlbmQgPSBjaGFyc0VuZEluZGV4KHN0clN5bWJvbHMsIGNoclN5bWJvbHMpICsgMTtcblxuICAgICAgcmV0dXJuIGNhc3RTbGljZShzdHJTeW1ib2xzLCBzdGFydCwgZW5kKS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRyYWlsaW5nIHdoaXRlc3BhY2Ugb3Igc3BlY2lmaWVkIGNoYXJhY3RlcnMgZnJvbSBgc3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byB0cmltLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9d2hpdGVzcGFjZV0gVGhlIGNoYXJhY3RlcnMgdG8gdHJpbS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRyaW1tZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRyaW1FbmQoJyAgYWJjICAnKTtcbiAgICAgKiAvLyA9PiAnICBhYmMnXG4gICAgICpcbiAgICAgKiBfLnRyaW1FbmQoJy1fLWFiYy1fLScsICdfLScpO1xuICAgICAqIC8vID0+ICctXy1hYmMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJpbUVuZChzdHJpbmcsIGNoYXJzLCBndWFyZCkge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGlmIChzdHJpbmcgJiYgKGd1YXJkIHx8IGNoYXJzID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UoMCwgdHJpbW1lZEVuZEluZGV4KHN0cmluZykgKyAxKTtcbiAgICAgIH1cbiAgICAgIGlmICghc3RyaW5nIHx8ICEoY2hhcnMgPSBiYXNlVG9TdHJpbmcoY2hhcnMpKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgdmFyIHN0clN5bWJvbHMgPSBzdHJpbmdUb0FycmF5KHN0cmluZyksXG4gICAgICAgICAgZW5kID0gY2hhcnNFbmRJbmRleChzdHJTeW1ib2xzLCBzdHJpbmdUb0FycmF5KGNoYXJzKSkgKyAxO1xuXG4gICAgICByZXR1cm4gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDAsIGVuZCkuam9pbignJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBsZWFkaW5nIHdoaXRlc3BhY2Ugb3Igc3BlY2lmaWVkIGNoYXJhY3RlcnMgZnJvbSBgc3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byB0cmltLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9d2hpdGVzcGFjZV0gVGhlIGNoYXJhY3RlcnMgdG8gdHJpbS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRyaW1tZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRyaW1TdGFydCgnICBhYmMgICcpO1xuICAgICAqIC8vID0+ICdhYmMgICdcbiAgICAgKlxuICAgICAqIF8udHJpbVN0YXJ0KCctXy1hYmMtXy0nLCAnXy0nKTtcbiAgICAgKiAvLyA9PiAnYWJjLV8tJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyaW1TdGFydChzdHJpbmcsIGNoYXJzLCBndWFyZCkge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGlmIChzdHJpbmcgJiYgKGd1YXJkIHx8IGNoYXJzID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShyZVRyaW1TdGFydCwgJycpO1xuICAgICAgfVxuICAgICAgaWYgKCFzdHJpbmcgfHwgIShjaGFycyA9IGJhc2VUb1N0cmluZyhjaGFycykpKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICB9XG4gICAgICB2YXIgc3RyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoc3RyaW5nKSxcbiAgICAgICAgICBzdGFydCA9IGNoYXJzU3RhcnRJbmRleChzdHJTeW1ib2xzLCBzdHJpbmdUb0FycmF5KGNoYXJzKSk7XG5cbiAgICAgIHJldHVybiBjYXN0U2xpY2Uoc3RyU3ltYm9scywgc3RhcnQpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRydW5jYXRlcyBgc3RyaW5nYCBpZiBpdCdzIGxvbmdlciB0aGFuIHRoZSBnaXZlbiBtYXhpbXVtIHN0cmluZyBsZW5ndGguXG4gICAgICogVGhlIGxhc3QgY2hhcmFjdGVycyBvZiB0aGUgdHJ1bmNhdGVkIHN0cmluZyBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgb21pc3Npb25cbiAgICAgKiBzdHJpbmcgd2hpY2ggZGVmYXVsdHMgdG8gXCIuLi5cIi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byB0cnVuY2F0ZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubGVuZ3RoPTMwXSBUaGUgbWF4aW11bSBzdHJpbmcgbGVuZ3RoLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5vbWlzc2lvbj0nLi4uJ10gVGhlIHN0cmluZyB0byBpbmRpY2F0ZSB0ZXh0IGlzIG9taXR0ZWQuXG4gICAgICogQHBhcmFtIHtSZWdFeHB8c3RyaW5nfSBbb3B0aW9ucy5zZXBhcmF0b3JdIFRoZSBzZXBhcmF0b3IgcGF0dGVybiB0byB0cnVuY2F0ZSB0by5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cnVuY2F0ZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRydW5jYXRlKCdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm9yaW5vJyk7XG4gICAgICogLy8gPT4gJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hiby4uLidcbiAgICAgKlxuICAgICAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7XG4gICAgICogICAnbGVuZ3RoJzogMjQsXG4gICAgICogICAnc2VwYXJhdG9yJzogJyAnXG4gICAgICogfSk7XG4gICAgICogLy8gPT4gJ2hpLWRpZGRseS1obyB0aGVyZSwuLi4nXG4gICAgICpcbiAgICAgKiBfLnRydW5jYXRlKCdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm9yaW5vJywge1xuICAgICAqICAgJ2xlbmd0aCc6IDI0LFxuICAgICAqICAgJ3NlcGFyYXRvcic6IC8sPyArL1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUuLi4nXG4gICAgICpcbiAgICAgKiBfLnRydW5jYXRlKCdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm9yaW5vJywge1xuICAgICAqICAgJ29taXNzaW9uJzogJyBbLi4uXSdcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnIFsuLi5dJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRydW5jYXRlKHN0cmluZywgb3B0aW9ucykge1xuICAgICAgdmFyIGxlbmd0aCA9IERFRkFVTFRfVFJVTkNfTEVOR1RILFxuICAgICAgICAgIG9taXNzaW9uID0gREVGQVVMVF9UUlVOQ19PTUlTU0lPTjtcblxuICAgICAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICAgIHZhciBzZXBhcmF0b3IgPSAnc2VwYXJhdG9yJyBpbiBvcHRpb25zID8gb3B0aW9ucy5zZXBhcmF0b3IgOiBzZXBhcmF0b3I7XG4gICAgICAgIGxlbmd0aCA9ICdsZW5ndGgnIGluIG9wdGlvbnMgPyB0b0ludGVnZXIob3B0aW9ucy5sZW5ndGgpIDogbGVuZ3RoO1xuICAgICAgICBvbWlzc2lvbiA9ICdvbWlzc2lvbicgaW4gb3B0aW9ucyA/IGJhc2VUb1N0cmluZyhvcHRpb25zLm9taXNzaW9uKSA6IG9taXNzaW9uO1xuICAgICAgfVxuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcblxuICAgICAgdmFyIHN0ckxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gICAgICBpZiAoaGFzVW5pY29kZShzdHJpbmcpKSB7XG4gICAgICAgIHZhciBzdHJTeW1ib2xzID0gc3RyaW5nVG9BcnJheShzdHJpbmcpO1xuICAgICAgICBzdHJMZW5ndGggPSBzdHJTeW1ib2xzLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGlmIChsZW5ndGggPj0gc3RyTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICB9XG4gICAgICB2YXIgZW5kID0gbGVuZ3RoIC0gc3RyaW5nU2l6ZShvbWlzc2lvbik7XG4gICAgICBpZiAoZW5kIDwgMSkge1xuICAgICAgICByZXR1cm4gb21pc3Npb247XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gc3RyU3ltYm9sc1xuICAgICAgICA/IGNhc3RTbGljZShzdHJTeW1ib2xzLCAwLCBlbmQpLmpvaW4oJycpXG4gICAgICAgIDogc3RyaW5nLnNsaWNlKDAsIGVuZCk7XG5cbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0ICsgb21pc3Npb247XG4gICAgICB9XG4gICAgICBpZiAoc3RyU3ltYm9scykge1xuICAgICAgICBlbmQgKz0gKHJlc3VsdC5sZW5ndGggLSBlbmQpO1xuICAgICAgfVxuICAgICAgaWYgKGlzUmVnRXhwKHNlcGFyYXRvcikpIHtcbiAgICAgICAgaWYgKHN0cmluZy5zbGljZShlbmQpLnNlYXJjaChzZXBhcmF0b3IpKSB7XG4gICAgICAgICAgdmFyIG1hdGNoLFxuICAgICAgICAgICAgICBzdWJzdHJpbmcgPSByZXN1bHQ7XG5cbiAgICAgICAgICBpZiAoIXNlcGFyYXRvci5nbG9iYWwpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCB0b1N0cmluZyhyZUZsYWdzLmV4ZWMoc2VwYXJhdG9yKSkgKyAnZycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXBhcmF0b3IubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gc2VwYXJhdG9yLmV4ZWMoc3Vic3RyaW5nKSkpIHtcbiAgICAgICAgICAgIHZhciBuZXdFbmQgPSBtYXRjaC5pbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIG5ld0VuZCA9PT0gdW5kZWZpbmVkID8gZW5kIDogbmV3RW5kKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdHJpbmcuaW5kZXhPZihiYXNlVG9TdHJpbmcoc2VwYXJhdG9yKSwgZW5kKSAhPSBlbmQpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gcmVzdWx0Lmxhc3RJbmRleE9mKHNlcGFyYXRvcik7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdCArIG9taXNzaW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBpbnZlcnNlIG9mIGBfLmVzY2FwZWA7IHRoaXMgbWV0aG9kIGNvbnZlcnRzIHRoZSBIVE1MIGVudGl0aWVzXG4gICAgICogYCZhbXA7YCwgYCZsdDtgLCBgJmd0O2AsIGAmcXVvdDtgLCBhbmQgYCYjMzk7YCBpbiBgc3RyaW5nYCB0b1xuICAgICAqIHRoZWlyIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBObyBvdGhlciBIVE1MIGVudGl0aWVzIGFyZSB1bmVzY2FwZWQuIFRvIHVuZXNjYXBlIGFkZGl0aW9uYWxcbiAgICAgKiBIVE1MIGVudGl0aWVzIHVzZSBhIHRoaXJkLXBhcnR5IGxpYnJhcnkgbGlrZSBbX2hlX10oaHR0cHM6Ly9tdGhzLmJlL2hlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjYuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byB1bmVzY2FwZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1bmVzY2FwZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuZXNjYXBlKCdmcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXMnKTtcbiAgICAgKiAvLyA9PiAnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5lc2NhcGUoc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNFc2NhcGVkSHRtbC50ZXN0KHN0cmluZykpXG4gICAgICAgID8gc3RyaW5nLnJlcGxhY2UocmVFc2NhcGVkSHRtbCwgdW5lc2NhcGVIdG1sQ2hhcilcbiAgICAgICAgOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AsIGFzIHNwYWNlIHNlcGFyYXRlZCB3b3JkcywgdG8gdXBwZXIgY2FzZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVwcGVyIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51cHBlckNhc2UoJy0tZm9vLWJhcicpO1xuICAgICAqIC8vID0+ICdGT08gQkFSJ1xuICAgICAqXG4gICAgICogXy51cHBlckNhc2UoJ2Zvb0JhcicpO1xuICAgICAqIC8vID0+ICdGT08gQkFSJ1xuICAgICAqXG4gICAgICogXy51cHBlckNhc2UoJ19fZm9vX2Jhcl9fJyk7XG4gICAgICogLy8gPT4gJ0ZPTyBCQVInXG4gICAgICovXG4gICAgdmFyIHVwcGVyQ2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICcgJyA6ICcnKSArIHdvcmQudG9VcHBlckNhc2UoKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYHN0cmluZ2AgdG8gdXBwZXIgY2FzZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udXBwZXJGaXJzdCgnZnJlZCcpO1xuICAgICAqIC8vID0+ICdGcmVkJ1xuICAgICAqXG4gICAgICogXy51cHBlckZpcnN0KCdGUkVEJyk7XG4gICAgICogLy8gPT4gJ0ZSRUQnXG4gICAgICovXG4gICAgdmFyIHVwcGVyRmlyc3QgPSBjcmVhdGVDYXNlRmlyc3QoJ3RvVXBwZXJDYXNlJyk7XG5cbiAgICAvKipcbiAgICAgKiBTcGxpdHMgYHN0cmluZ2AgaW50byBhbiBhcnJheSBvZiBpdHMgd29yZHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cHxzdHJpbmd9IFtwYXR0ZXJuXSBUaGUgcGF0dGVybiB0byBtYXRjaCB3b3Jkcy5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ud29yZHMoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gICAgICogLy8gPT4gWydmcmVkJywgJ2Jhcm5leScsICdwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIF8ud29yZHMoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJywgL1teLCBdKy9nKTtcbiAgICAgKiAvLyA9PiBbJ2ZyZWQnLCAnYmFybmV5JywgJyYnLCAncGViYmxlcyddXG4gICAgICovXG4gICAgZnVuY3Rpb24gd29yZHMoc3RyaW5nLCBwYXR0ZXJuLCBndWFyZCkge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHBhdHRlcm4gPSBndWFyZCA/IHVuZGVmaW5lZCA6IHBhdHRlcm47XG5cbiAgICAgIGlmIChwYXR0ZXJuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGhhc1VuaWNvZGVXb3JkKHN0cmluZykgPyB1bmljb2RlV29yZHMoc3RyaW5nKSA6IGFzY2lpV29yZHMoc3RyaW5nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHJpbmcubWF0Y2gocGF0dGVybikgfHwgW107XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQXR0ZW1wdHMgdG8gaW52b2tlIGBmdW5jYCwgcmV0dXJuaW5nIGVpdGhlciB0aGUgcmVzdWx0IG9yIHRoZSBjYXVnaHQgZXJyb3JcbiAgICAgKiBvYmplY3QuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdG8gYGZ1bmNgIHdoZW4gaXQncyBpbnZva2VkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhdHRlbXB0LlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBgZnVuY2AgcmVzdWx0IG9yIGVycm9yIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gQXZvaWQgdGhyb3dpbmcgZXJyb3JzIGZvciBpbnZhbGlkIHNlbGVjdG9ycy5cbiAgICAgKiB2YXIgZWxlbWVudHMgPSBfLmF0dGVtcHQoZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgICAgKiAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgICAgKiB9LCAnPl8+Jyk7XG4gICAgICpcbiAgICAgKiBpZiAoXy5pc0Vycm9yKGVsZW1lbnRzKSkge1xuICAgICAqICAgZWxlbWVudHMgPSBbXTtcbiAgICAgKiB9XG4gICAgICovXG4gICAgdmFyIGF0dGVtcHQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBhcmdzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXBwbHkoZnVuYywgdW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGlzRXJyb3IoZSkgPyBlIDogbmV3IEVycm9yKGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQmluZHMgbWV0aG9kcyBvZiBhbiBvYmplY3QgdG8gdGhlIG9iamVjdCBpdHNlbGYsIG92ZXJ3cml0aW5nIHRoZSBleGlzdGluZ1xuICAgICAqIG1ldGhvZC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBiaW5kIGFuZCBhc3NpZ24gdGhlIGJvdW5kIG1ldGhvZHMgdG8uXG4gICAgICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gbWV0aG9kTmFtZXMgVGhlIG9iamVjdCBtZXRob2QgbmFtZXMgdG8gYmluZC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdmlldyA9IHtcbiAgICAgKiAgICdsYWJlbCc6ICdkb2NzJyxcbiAgICAgKiAgICdjbGljayc6IGZ1bmN0aW9uKCkge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnY2xpY2tlZCAnICsgdGhpcy5sYWJlbCk7XG4gICAgICogICB9XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIF8uYmluZEFsbCh2aWV3LCBbJ2NsaWNrJ10pO1xuICAgICAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCB2aWV3LmNsaWNrKTtcbiAgICAgKiAvLyA9PiBMb2dzICdjbGlja2VkIGRvY3MnIHdoZW4gY2xpY2tlZC5cbiAgICAgKi9cbiAgICB2YXIgYmluZEFsbCA9IGZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCwgbWV0aG9kTmFtZXMpIHtcbiAgICAgIGFycmF5RWFjaChtZXRob2ROYW1lcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIGtleSA9IHRvS2V5KGtleSk7XG4gICAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgYmluZChvYmplY3Rba2V5XSwgb2JqZWN0KSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpdGVyYXRlcyBvdmVyIGBwYWlyc2AgYW5kIGludm9rZXMgdGhlIGNvcnJlc3BvbmRpbmdcbiAgICAgKiBmdW5jdGlvbiBvZiB0aGUgZmlyc3QgcHJlZGljYXRlIHRvIHJldHVybiB0cnV0aHkuIFRoZSBwcmVkaWNhdGUtZnVuY3Rpb25cbiAgICAgKiBwYWlycyBhcmUgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBhbmQgYXJndW1lbnRzIG9mIHRoZSBjcmVhdGVkXG4gICAgICogZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhaXJzIFRoZSBwcmVkaWNhdGUtZnVuY3Rpb24gcGFpcnMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG9zaXRlIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgZnVuYyA9IF8uY29uZChbXG4gICAgICogICBbXy5tYXRjaGVzKHsgJ2EnOiAxIH0pLCAgICAgICAgICAgXy5jb25zdGFudCgnbWF0Y2hlcyBBJyldLFxuICAgICAqICAgW18uY29uZm9ybXMoeyAnYic6IF8uaXNOdW1iZXIgfSksIF8uY29uc3RhbnQoJ21hdGNoZXMgQicpXSxcbiAgICAgKiAgIFtfLnN0dWJUcnVlLCAgICAgICAgICAgICAgICAgICAgICBfLmNvbnN0YW50KCdubyBtYXRjaCcpXVxuICAgICAqIF0pO1xuICAgICAqXG4gICAgICogZnVuYyh7ICdhJzogMSwgJ2InOiAyIH0pO1xuICAgICAqIC8vID0+ICdtYXRjaGVzIEEnXG4gICAgICpcbiAgICAgKiBmdW5jKHsgJ2EnOiAwLCAnYic6IDEgfSk7XG4gICAgICogLy8gPT4gJ21hdGNoZXMgQidcbiAgICAgKlxuICAgICAqIGZ1bmMoeyAnYSc6ICcxJywgJ2InOiAnMicgfSk7XG4gICAgICogLy8gPT4gJ25vIG1hdGNoJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmQocGFpcnMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBwYWlycyA9PSBudWxsID8gMCA6IHBhaXJzLmxlbmd0aCxcbiAgICAgICAgICB0b0l0ZXJhdGVlID0gZ2V0SXRlcmF0ZWUoKTtcblxuICAgICAgcGFpcnMgPSAhbGVuZ3RoID8gW10gOiBhcnJheU1hcChwYWlycywgZnVuY3Rpb24ocGFpcikge1xuICAgICAgICBpZiAodHlwZW9mIHBhaXJbMV0gIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3RvSXRlcmF0ZWUocGFpclswXSksIHBhaXJbMV1dO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xO1xuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgIHZhciBwYWlyID0gcGFpcnNbaW5kZXhdO1xuICAgICAgICAgIGlmIChhcHBseShwYWlyWzBdLCB0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFwcGx5KHBhaXJbMV0sIHRoaXMsIGFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgcHJlZGljYXRlIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgd2l0aFxuICAgICAqIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHZhbHVlcyBvZiBhIGdpdmVuIG9iamVjdCwgcmV0dXJuaW5nIGB0cnVlYCBpZlxuICAgICAqIGFsbCBwcmVkaWNhdGVzIHJldHVybiB0cnV0aHksIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGUgY3JlYXRlZCBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGBfLmNvbmZvcm1zVG9gIHdpdGhcbiAgICAgKiBgc291cmNlYCBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHByZWRpY2F0ZXMgdG8gY29uZm9ybSB0by5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ2EnOiAyLCAnYic6IDEgfSxcbiAgICAgKiAgIHsgJ2EnOiAxLCAnYic6IDIgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbHRlcihvYmplY3RzLCBfLmNvbmZvcm1zKHsgJ2InOiBmdW5jdGlvbihuKSB7IHJldHVybiBuID4gMTsgfSB9KSk7XG4gICAgICogLy8gPT4gW3sgJ2EnOiAxLCAnYic6IDIgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb25mb3Jtcyhzb3VyY2UpIHtcbiAgICAgIHJldHVybiBiYXNlQ29uZm9ybXMoYmFzZUNsb25lKHNvdXJjZSwgQ0xPTkVfREVFUF9GTEFHKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuNC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAgICAgKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBgdmFsdWVgIHRvIGRldGVybWluZSB3aGV0aGVyIGEgZGVmYXVsdCB2YWx1ZSBzaG91bGQgYmUgcmV0dXJuZWQgaW5cbiAgICAgKiBpdHMgcGxhY2UuIFRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBgbnVsbGAsXG4gICAgICogb3IgYHVuZGVmaW5lZGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xNC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZSBUaGUgZGVmYXVsdCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVmYXVsdFRvKDEsIDEwKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICpcbiAgICAgKiBfLmRlZmF1bHRUbyh1bmRlZmluZWQsIDEwKTtcbiAgICAgKiAvLyA9PiAxMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRlZmF1bHRUbyh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICByZXR1cm4gKHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnZva2luZyB0aGUgZ2l2ZW4gZnVuY3Rpb25zXG4gICAgICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIGNyZWF0ZWQgZnVuY3Rpb24sIHdoZXJlIGVhY2ggc3VjY2Vzc2l2ZVxuICAgICAqIGludm9jYXRpb24gaXMgc3VwcGxpZWQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcHJldmlvdXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbZnVuY3NdIFRoZSBmdW5jdGlvbnMgdG8gaW52b2tlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbXBvc2l0ZSBmdW5jdGlvbi5cbiAgICAgKiBAc2VlIF8uZmxvd1JpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gICAgICogICByZXR1cm4gbiAqIG47XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGFkZFNxdWFyZSA9IF8uZmxvdyhbXy5hZGQsIHNxdWFyZV0pO1xuICAgICAqIGFkZFNxdWFyZSgxLCAyKTtcbiAgICAgKiAvLyA9PiA5XG4gICAgICovXG4gICAgdmFyIGZsb3cgPSBjcmVhdGVGbG93KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZsb3dgIGV4Y2VwdCB0aGF0IGl0IGNyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0XG4gICAgICogaW52b2tlcyB0aGUgZ2l2ZW4gZnVuY3Rpb25zIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtmdW5jc10gVGhlIGZ1bmN0aW9ucyB0byBpbnZva2UuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG9zaXRlIGZ1bmN0aW9uLlxuICAgICAqIEBzZWUgXy5mbG93XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gICAgICogICByZXR1cm4gbiAqIG47XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGFkZFNxdWFyZSA9IF8uZmxvd1JpZ2h0KFtzcXVhcmUsIF8uYWRkXSk7XG4gICAgICogYWRkU3F1YXJlKDEsIDIpO1xuICAgICAqIC8vID0+IDlcbiAgICAgKi9cbiAgICB2YXIgZmxvd1JpZ2h0ID0gY3JlYXRlRmxvdyh0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIHRoZSBhcmd1bWVudHMgb2YgdGhlIGNyZWF0ZWRcbiAgICAgKiBmdW5jdGlvbi4gSWYgYGZ1bmNgIGlzIGEgcHJvcGVydHkgbmFtZSwgdGhlIGNyZWF0ZWQgZnVuY3Rpb24gcmV0dXJucyB0aGVcbiAgICAgKiBwcm9wZXJ0eSB2YWx1ZSBmb3IgYSBnaXZlbiBlbGVtZW50LiBJZiBgZnVuY2AgaXMgYW4gYXJyYXkgb3Igb2JqZWN0LCB0aGVcbiAgICAgKiBjcmVhdGVkIGZ1bmN0aW9uIHJldHVybnMgYHRydWVgIGZvciBlbGVtZW50cyB0aGF0IGNvbnRhaW4gdGhlIGVxdWl2YWxlbnRcbiAgICAgKiBzb3VyY2UgcHJvcGVydGllcywgb3RoZXJ3aXNlIGl0IHJldHVybnMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsqfSBbZnVuYz1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhIGNhbGxiYWNrLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgY2FsbGJhY2suXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maWx0ZXIodXNlcnMsIF8uaXRlcmF0ZWUoeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogdHJ1ZSB9KSk7XG4gICAgICogLy8gPT4gW3sgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9XVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCBfLml0ZXJhdGVlKFsndXNlcicsICdmcmVkJ10pKTtcbiAgICAgKiAvLyA9PiBbeyAndXNlcic6ICdmcmVkJywgJ2FnZSc6IDQwIH1dXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLm1hcCh1c2VycywgXy5pdGVyYXRlZSgndXNlcicpKTtcbiAgICAgKiAvLyA9PiBbJ2Jhcm5leScsICdmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIENyZWF0ZSBjdXN0b20gaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKiBfLml0ZXJhdGVlID0gXy53cmFwKF8uaXRlcmF0ZWUsIGZ1bmN0aW9uKGl0ZXJhdGVlLCBmdW5jKSB7XG4gICAgICogICByZXR1cm4gIV8uaXNSZWdFeHAoZnVuYykgPyBpdGVyYXRlZShmdW5jKSA6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAqICAgICByZXR1cm4gZnVuYy50ZXN0KHN0cmluZyk7XG4gICAgICogICB9O1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogXy5maWx0ZXIoWydhYmMnLCAnZGVmJ10sIC9lZi8pO1xuICAgICAqIC8vID0+IFsnZGVmJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpdGVyYXRlZShmdW5jKSB7XG4gICAgICByZXR1cm4gYmFzZUl0ZXJhdGVlKHR5cGVvZiBmdW5jID09ICdmdW5jdGlvbicgPyBmdW5jIDogYmFzZUNsb25lKGZ1bmMsIENMT05FX0RFRVBfRkxBRykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgcGFydGlhbCBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiBhIGdpdmVuXG4gICAgICogb2JqZWN0IGFuZCBgc291cmNlYCwgcmV0dXJuaW5nIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gb2JqZWN0IGhhcyBlcXVpdmFsZW50XG4gICAgICogcHJvcGVydHkgdmFsdWVzLCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhlIGNyZWF0ZWQgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBgXy5pc01hdGNoYCB3aXRoIGBzb3VyY2VgXG4gICAgICogcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICpcbiAgICAgKiBQYXJ0aWFsIGNvbXBhcmlzb25zIHdpbGwgbWF0Y2ggZW1wdHkgYXJyYXkgYW5kIGVtcHR5IG9iamVjdCBgc291cmNlYFxuICAgICAqIHZhbHVlcyBhZ2FpbnN0IGFueSBhcnJheSBvciBvYmplY3QgdmFsdWUsIHJlc3BlY3RpdmVseS4gU2VlIGBfLmlzRXF1YWxgXG4gICAgICogZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgdmFsdWUgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTXVsdGlwbGUgdmFsdWVzIGNhbiBiZSBjaGVja2VkIGJ5IGNvbWJpbmluZyBzZXZlcmFsIG1hdGNoZXJzXG4gICAgICogdXNpbmcgYF8ub3ZlclNvbWVgXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbXG4gICAgICogICB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfSxcbiAgICAgKiAgIHsgJ2EnOiA0LCAnYic6IDUsICdjJzogNiB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmlsdGVyKG9iamVjdHMsIF8ubWF0Y2hlcyh7ICdhJzogNCwgJ2MnOiA2IH0pKTtcbiAgICAgKiAvLyA9PiBbeyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1dXG4gICAgICpcbiAgICAgKiAvLyBDaGVja2luZyBmb3Igc2V2ZXJhbCBwb3NzaWJsZSB2YWx1ZXNcbiAgICAgKiBfLmZpbHRlcihvYmplY3RzLCBfLm92ZXJTb21lKFtfLm1hdGNoZXMoeyAnYSc6IDEgfSksIF8ubWF0Y2hlcyh7ICdhJzogNCB9KV0pKTtcbiAgICAgKiAvLyA9PiBbeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH0sIHsgJ2EnOiA0LCAnYic6IDUsICdjJzogNiB9XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hdGNoZXMoc291cmNlKSB7XG4gICAgICByZXR1cm4gYmFzZU1hdGNoZXMoYmFzZUNsb25lKHNvdXJjZSwgQ0xPTkVfREVFUF9GTEFHKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYSBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHRoZVxuICAgICAqIHZhbHVlIGF0IGBwYXRoYCBvZiBhIGdpdmVuIG9iamVjdCB0byBgc3JjVmFsdWVgLCByZXR1cm5pbmcgYHRydWVgIGlmIHRoZVxuICAgICAqIG9iamVjdCB2YWx1ZSBpcyBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogUGFydGlhbCBjb21wYXJpc29ucyB3aWxsIG1hdGNoIGVtcHR5IGFycmF5IGFuZCBlbXB0eSBvYmplY3RcbiAgICAgKiBgc3JjVmFsdWVgIHZhbHVlcyBhZ2FpbnN0IGFueSBhcnJheSBvciBvYmplY3QgdmFsdWUsIHJlc3BlY3RpdmVseS4gU2VlXG4gICAgICogYF8uaXNFcXVhbGAgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgdmFsdWUgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTXVsdGlwbGUgdmFsdWVzIGNhbiBiZSBjaGVja2VkIGJ5IGNvbWJpbmluZyBzZXZlcmFsIG1hdGNoZXJzXG4gICAgICogdXNpbmcgYF8ub3ZlclNvbWVgXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbXG4gICAgICogICB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfSxcbiAgICAgKiAgIHsgJ2EnOiA0LCAnYic6IDUsICdjJzogNiB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmluZChvYmplY3RzLCBfLm1hdGNoZXNQcm9wZXJ0eSgnYScsIDQpKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfVxuICAgICAqXG4gICAgICogLy8gQ2hlY2tpbmcgZm9yIHNldmVyYWwgcG9zc2libGUgdmFsdWVzXG4gICAgICogXy5maWx0ZXIob2JqZWN0cywgXy5vdmVyU29tZShbXy5tYXRjaGVzUHJvcGVydHkoJ2EnLCAxKSwgXy5tYXRjaGVzUHJvcGVydHkoJ2EnLCA0KV0pKTtcbiAgICAgKiAvLyA9PiBbeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH0sIHsgJ2EnOiA0LCAnYic6IDUsICdjJzogNiB9XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICAgICAgcmV0dXJuIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgYmFzZUNsb25lKHNyY1ZhbHVlLCBDTE9ORV9ERUVQX0ZMQUcpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSBtZXRob2QgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICAgICAqIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdG8gdGhlIGludm9rZWQgbWV0aG9kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuNy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZS5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgaW52b2tlciBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbXG4gICAgICogICB7ICdhJzogeyAnYic6IF8uY29uc3RhbnQoMikgfSB9LFxuICAgICAqICAgeyAnYSc6IHsgJ2InOiBfLmNvbnN0YW50KDEpIH0gfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLm1hcChvYmplY3RzLCBfLm1ldGhvZCgnYS5iJykpO1xuICAgICAqIC8vID0+IFsyLCAxXVxuICAgICAqXG4gICAgICogXy5tYXAob2JqZWN0cywgXy5tZXRob2QoWydhJywgJ2InXSkpO1xuICAgICAqIC8vID0+IFsyLCAxXVxuICAgICAqL1xuICAgIHZhciBtZXRob2QgPSBiYXNlUmVzdChmdW5jdGlvbihwYXRoLCBhcmdzKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBiYXNlSW52b2tlKG9iamVjdCwgcGF0aCwgYXJncyk7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLm1ldGhvZGA7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXNcbiAgICAgKiB0aGUgbWV0aG9kIGF0IGEgZ2l2ZW4gcGF0aCBvZiBgb2JqZWN0YC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZVxuICAgICAqIHByb3ZpZGVkIHRvIHRoZSBpbnZva2VkIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjcuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBtZXRob2Qgd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBpbnZva2VyIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBfLnRpbWVzKDMsIF8uY29uc3RhbnQpLFxuICAgICAqICAgICBvYmplY3QgPSB7ICdhJzogYXJyYXksICdiJzogYXJyYXksICdjJzogYXJyYXkgfTtcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnYVsyXScsICdjWzBdJ10sIF8ubWV0aG9kT2Yob2JqZWN0KSk7XG4gICAgICogLy8gPT4gWzIsIDBdXG4gICAgICpcbiAgICAgKiBfLm1hcChbWydhJywgJzInXSwgWydjJywgJzAnXV0sIF8ubWV0aG9kT2Yob2JqZWN0KSk7XG4gICAgICogLy8gPT4gWzIsIDBdXG4gICAgICovXG4gICAgdmFyIG1ldGhvZE9mID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBhcmdzKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICByZXR1cm4gYmFzZUludm9rZShvYmplY3QsIHBhdGgsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEFkZHMgYWxsIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBmdW5jdGlvbiBwcm9wZXJ0aWVzIG9mIGEgc291cmNlXG4gICAgICogb2JqZWN0IHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QuIElmIGBvYmplY3RgIGlzIGEgZnVuY3Rpb24sIHRoZW4gbWV0aG9kc1xuICAgICAqIGFyZSBhZGRlZCB0byBpdHMgcHJvdG90eXBlIGFzIHdlbGwuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVXNlIGBfLnJ1bkluQ29udGV4dGAgdG8gY3JlYXRlIGEgcHJpc3RpbmUgYGxvZGFzaGAgZnVuY3Rpb24gdG9cbiAgICAgKiBhdm9pZCBjb25mbGljdHMgY2F1c2VkIGJ5IG1vZGlmeWluZyB0aGUgb3JpZ2luYWwuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBbb2JqZWN0PWxvZGFzaF0gVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgZnVuY3Rpb25zIHRvIGFkZC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNoYWluPXRydWVdIFNwZWNpZnkgd2hldGhlciBtaXhpbnMgYXJlIGNoYWluYWJsZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb258T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiB2b3dlbHMoc3RyaW5nKSB7XG4gICAgICogICByZXR1cm4gXy5maWx0ZXIoc3RyaW5nLCBmdW5jdGlvbih2KSB7XG4gICAgICogICAgIHJldHVybiAvW2FlaW91XS9pLnRlc3Qodik7XG4gICAgICogICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBfLm1peGluKHsgJ3Zvd2Vscyc6IHZvd2VscyB9KTtcbiAgICAgKiBfLnZvd2VscygnZnJlZCcpO1xuICAgICAqIC8vID0+IFsnZSddXG4gICAgICpcbiAgICAgKiBfKCdmcmVkJykudm93ZWxzKCkudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbJ2UnXVxuICAgICAqXG4gICAgICogXy5taXhpbih7ICd2b3dlbHMnOiB2b3dlbHMgfSwgeyAnY2hhaW4nOiBmYWxzZSB9KTtcbiAgICAgKiBfKCdmcmVkJykudm93ZWxzKCk7XG4gICAgICogLy8gPT4gWydlJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtaXhpbihvYmplY3QsIHNvdXJjZSwgb3B0aW9ucykge1xuICAgICAgdmFyIHByb3BzID0ga2V5cyhzb3VyY2UpLFxuICAgICAgICAgIG1ldGhvZE5hbWVzID0gYmFzZUZ1bmN0aW9ucyhzb3VyY2UsIHByb3BzKTtcblxuICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCAmJlxuICAgICAgICAgICEoaXNPYmplY3Qoc291cmNlKSAmJiAobWV0aG9kTmFtZXMubGVuZ3RoIHx8ICFwcm9wcy5sZW5ndGgpKSkge1xuICAgICAgICBvcHRpb25zID0gc291cmNlO1xuICAgICAgICBzb3VyY2UgPSBvYmplY3Q7XG4gICAgICAgIG9iamVjdCA9IHRoaXM7XG4gICAgICAgIG1ldGhvZE5hbWVzID0gYmFzZUZ1bmN0aW9ucyhzb3VyY2UsIGtleXMoc291cmNlKSk7XG4gICAgICB9XG4gICAgICB2YXIgY2hhaW4gPSAhKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjaGFpbicgaW4gb3B0aW9ucykgfHwgISFvcHRpb25zLmNoYWluLFxuICAgICAgICAgIGlzRnVuYyA9IGlzRnVuY3Rpb24ob2JqZWN0KTtcblxuICAgICAgYXJyYXlFYWNoKG1ldGhvZE5hbWVzLCBmdW5jdGlvbihtZXRob2ROYW1lKSB7XG4gICAgICAgIHZhciBmdW5jID0gc291cmNlW21ldGhvZE5hbWVdO1xuICAgICAgICBvYmplY3RbbWV0aG9kTmFtZV0gPSBmdW5jO1xuICAgICAgICBpZiAoaXNGdW5jKSB7XG4gICAgICAgICAgb2JqZWN0LnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGNoYWluQWxsID0gdGhpcy5fX2NoYWluX187XG4gICAgICAgICAgICBpZiAoY2hhaW4gfHwgY2hhaW5BbGwpIHtcbiAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG9iamVjdCh0aGlzLl9fd3JhcHBlZF9fKSxcbiAgICAgICAgICAgICAgICAgIGFjdGlvbnMgPSByZXN1bHQuX19hY3Rpb25zX18gPSBjb3B5QXJyYXkodGhpcy5fX2FjdGlvbnNfXyk7XG5cbiAgICAgICAgICAgICAgYWN0aW9ucy5wdXNoKHsgJ2Z1bmMnOiBmdW5jLCAnYXJncyc6IGFyZ3VtZW50cywgJ3RoaXNBcmcnOiBvYmplY3QgfSk7XG4gICAgICAgICAgICAgIHJlc3VsdC5fX2NoYWluX18gPSBjaGFpbkFsbDtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KG9iamVjdCwgYXJyYXlQdXNoKFt0aGlzLnZhbHVlKCldLCBhcmd1bWVudHMpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXZlcnRzIHRoZSBgX2AgdmFyaWFibGUgdG8gaXRzIHByZXZpb3VzIHZhbHVlIGFuZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvXG4gICAgICogdGhlIGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgbG9kYXNoID0gXy5ub0NvbmZsaWN0KCk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9Db25mbGljdCgpIHtcbiAgICAgIGlmIChyb290Ll8gPT09IHRoaXMpIHtcbiAgICAgICAgcm9vdC5fID0gb2xkRGFzaDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHVuZGVmaW5lZGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRpbWVzKDIsIF8ubm9vcCk7XG4gICAgICogLy8gPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7XG4gICAgICAvLyBObyBvcGVyYXRpb24gcGVyZm9ybWVkLlxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgdGhlIGFyZ3VtZW50IGF0IGluZGV4IGBuYC4gSWYgYG5gIGlzIG5lZ2F0aXZlLFxuICAgICAqIHRoZSBudGggYXJndW1lbnQgZnJvbSB0aGUgZW5kIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MF0gVGhlIGluZGV4IG9mIHRoZSBhcmd1bWVudCB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFzcy10aHJ1IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgZnVuYyA9IF8ubnRoQXJnKDEpO1xuICAgICAqIGZ1bmMoJ2EnLCAnYicsICdjJywgJ2QnKTtcbiAgICAgKiAvLyA9PiAnYidcbiAgICAgKlxuICAgICAqIHZhciBmdW5jID0gXy5udGhBcmcoLTIpO1xuICAgICAqIGZ1bmMoJ2EnLCAnYicsICdjJywgJ2QnKTtcbiAgICAgKiAvLyA9PiAnYydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBudGhBcmcobikge1xuICAgICAgbiA9IHRvSW50ZWdlcihuKTtcbiAgICAgIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgIHJldHVybiBiYXNlTnRoKGFyZ3MsIG4pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgaXRlcmF0ZWVzYCB3aXRoIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXNcbiAgICAgKiBhbmQgcmV0dXJucyB0aGVpciByZXN1bHRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW2l0ZXJhdGVlcz1bXy5pZGVudGl0eV1dXG4gICAgICogIFRoZSBpdGVyYXRlZXMgdG8gaW52b2tlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgZnVuYyA9IF8ub3ZlcihbTWF0aC5tYXgsIE1hdGgubWluXSk7XG4gICAgICpcbiAgICAgKiBmdW5jKDEsIDIsIDMsIDQpO1xuICAgICAqIC8vID0+IFs0LCAxXVxuICAgICAqL1xuICAgIHZhciBvdmVyID0gY3JlYXRlT3ZlcihhcnJheU1hcCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgKiphbGwqKiBvZiB0aGUgYHByZWRpY2F0ZXNgIHJldHVyblxuICAgICAqIHRydXRoeSB3aGVuIGludm9rZWQgd2l0aCB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogRm9sbG93aW5nIHNob3J0aGFuZHMgYXJlIHBvc3NpYmxlIGZvciBwcm92aWRpbmcgcHJlZGljYXRlcy5cbiAgICAgKiBQYXNzIGFuIGBPYmplY3RgIGFuZCBpdCB3aWxsIGJlIHVzZWQgYXMgYW4gcGFyYW1ldGVyIGZvciBgXy5tYXRjaGVzYCB0byBjcmVhdGUgdGhlIHByZWRpY2F0ZS5cbiAgICAgKiBQYXNzIGFuIGBBcnJheWAgb2YgcGFyYW1ldGVycyBmb3IgYF8ubWF0Y2hlc1Byb3BlcnR5YCBhbmQgdGhlIHByZWRpY2F0ZSB3aWxsIGJlIGNyZWF0ZWQgdXNpbmcgdGhlbS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtwcmVkaWNhdGVzPVtfLmlkZW50aXR5XV1cbiAgICAgKiAgVGhlIHByZWRpY2F0ZXMgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBmdW5jID0gXy5vdmVyRXZlcnkoW0Jvb2xlYW4sIGlzRmluaXRlXSk7XG4gICAgICpcbiAgICAgKiBmdW5jKCcxJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogZnVuYyhudWxsKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogZnVuYyhOYU4pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIG92ZXJFdmVyeSA9IGNyZWF0ZU92ZXIoYXJyYXlFdmVyeSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgKiphbnkqKiBvZiB0aGUgYHByZWRpY2F0ZXNgIHJldHVyblxuICAgICAqIHRydXRoeSB3aGVuIGludm9rZWQgd2l0aCB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogRm9sbG93aW5nIHNob3J0aGFuZHMgYXJlIHBvc3NpYmxlIGZvciBwcm92aWRpbmcgcHJlZGljYXRlcy5cbiAgICAgKiBQYXNzIGFuIGBPYmplY3RgIGFuZCBpdCB3aWxsIGJlIHVzZWQgYXMgYW4gcGFyYW1ldGVyIGZvciBgXy5tYXRjaGVzYCB0byBjcmVhdGUgdGhlIHByZWRpY2F0ZS5cbiAgICAgKiBQYXNzIGFuIGBBcnJheWAgb2YgcGFyYW1ldGVycyBmb3IgYF8ubWF0Y2hlc1Byb3BlcnR5YCBhbmQgdGhlIHByZWRpY2F0ZSB3aWxsIGJlIGNyZWF0ZWQgdXNpbmcgdGhlbS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtwcmVkaWNhdGVzPVtfLmlkZW50aXR5XV1cbiAgICAgKiAgVGhlIHByZWRpY2F0ZXMgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBmdW5jID0gXy5vdmVyU29tZShbQm9vbGVhbiwgaXNGaW5pdGVdKTtcbiAgICAgKlxuICAgICAqIGZ1bmMoJzEnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBmdW5jKG51bGwpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIGZ1bmMoTmFOKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogdmFyIG1hdGNoZXNGdW5jID0gXy5vdmVyU29tZShbeyAnYSc6IDEgfSwgeyAnYSc6IDIgfV0pXG4gICAgICogdmFyIG1hdGNoZXNQcm9wZXJ0eUZ1bmMgPSBfLm92ZXJTb21lKFtbJ2EnLCAxXSwgWydhJywgMl1dKVxuICAgICAqL1xuICAgIHZhciBvdmVyU29tZSA9IGNyZWF0ZU92ZXIoYXJyYXlTb21lKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBhIGdpdmVuIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjQuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbXG4gICAgICogICB7ICdhJzogeyAnYic6IDIgfSB9LFxuICAgICAqICAgeyAnYSc6IHsgJ2InOiAxIH0gfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLm1hcChvYmplY3RzLCBfLnByb3BlcnR5KCdhLmInKSk7XG4gICAgICogLy8gPT4gWzIsIDFdXG4gICAgICpcbiAgICAgKiBfLm1hcChfLnNvcnRCeShvYmplY3RzLCBfLnByb3BlcnR5KFsnYScsICdiJ10pKSwgJ2EuYicpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHByb3BlcnR5KHBhdGgpIHtcbiAgICAgIHJldHVybiBpc0tleShwYXRoKSA/IGJhc2VQcm9wZXJ0eSh0b0tleShwYXRoKSkgOiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5wcm9wZXJ0eWA7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnNcbiAgICAgKiB0aGUgdmFsdWUgYXQgYSBnaXZlbiBwYXRoIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFswLCAxLCAyXSxcbiAgICAgKiAgICAgb2JqZWN0ID0geyAnYSc6IGFycmF5LCAnYic6IGFycmF5LCAnYyc6IGFycmF5IH07XG4gICAgICpcbiAgICAgKiBfLm1hcChbJ2FbMl0nLCAnY1swXSddLCBfLnByb3BlcnR5T2Yob2JqZWN0KSk7XG4gICAgICogLy8gPT4gWzIsIDBdXG4gICAgICpcbiAgICAgKiBfLm1hcChbWydhJywgJzInXSwgWydjJywgJzAnXV0sIF8ucHJvcGVydHlPZihvYmplY3QpKTtcbiAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwcm9wZXJ0eU9mKG9iamVjdCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIG51bWJlcnMgKHBvc2l0aXZlIGFuZC9vciBuZWdhdGl2ZSkgcHJvZ3Jlc3NpbmcgZnJvbVxuICAgICAqIGBzdGFydGAgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCBgZW5kYC4gQSBzdGVwIG9mIGAtMWAgaXMgdXNlZCBpZiBhIG5lZ2F0aXZlXG4gICAgICogYHN0YXJ0YCBpcyBzcGVjaWZpZWQgd2l0aG91dCBhbiBgZW5kYCBvciBgc3RlcGAuIElmIGBlbmRgIGlzIG5vdCBzcGVjaWZpZWQsXG4gICAgICogaXQncyBzZXQgdG8gYHN0YXJ0YCB3aXRoIGBzdGFydGAgdGhlbiBzZXQgdG8gYDBgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIEphdmFTY3JpcHQgZm9sbG93cyB0aGUgSUVFRS03NTQgc3RhbmRhcmQgZm9yIHJlc29sdmluZ1xuICAgICAqIGZsb2F0aW5nLXBvaW50IHZhbHVlcyB3aGljaCBjYW4gcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0xXSBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gICAgICogQHNlZSBfLmluUmFuZ2UsIF8ucmFuZ2VSaWdodFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKDQpO1xuICAgICAqIC8vID0+IFswLCAxLCAyLCAzXVxuICAgICAqXG4gICAgICogXy5yYW5nZSgtNCk7XG4gICAgICogLy8gPT4gWzAsIC0xLCAtMiwgLTNdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKDEsIDUpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzLCA0XVxuICAgICAqXG4gICAgICogXy5yYW5nZSgwLCAyMCwgNSk7XG4gICAgICogLy8gPT4gWzAsIDUsIDEwLCAxNV1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoMCwgLTQsIC0xKTtcbiAgICAgKiAvLyA9PiBbMCwgLTEsIC0yLCAtM11cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoMSwgNCwgMCk7XG4gICAgICogLy8gPT4gWzEsIDEsIDFdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKDApO1xuICAgICAqIC8vID0+IFtdXG4gICAgICovXG4gICAgdmFyIHJhbmdlID0gY3JlYXRlUmFuZ2UoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucmFuZ2VgIGV4Y2VwdCB0aGF0IGl0IHBvcHVsYXRlcyB2YWx1ZXMgaW5cbiAgICAgKiBkZXNjZW5kaW5nIG9yZGVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MV0gVGhlIHZhbHVlIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgYnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5nZSBvZiBudW1iZXJzLlxuICAgICAqIEBzZWUgXy5pblJhbmdlLCBfLnJhbmdlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCg0KTtcbiAgICAgKiAvLyA9PiBbMywgMiwgMSwgMF1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCgtNCk7XG4gICAgICogLy8gPT4gWy0zLCAtMiwgLTEsIDBdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlUmlnaHQoMSwgNSk7XG4gICAgICogLy8gPT4gWzQsIDMsIDIsIDFdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlUmlnaHQoMCwgMjAsIDUpO1xuICAgICAqIC8vID0+IFsxNSwgMTAsIDUsIDBdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlUmlnaHQoMCwgLTQsIC0xKTtcbiAgICAgKiAvLyA9PiBbLTMsIC0yLCAtMSwgMF1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCgxLCA0LCAwKTtcbiAgICAgKiAvLyA9PiBbMSwgMSwgMV1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCgwKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIHZhciByYW5nZVJpZ2h0ID0gY3JlYXRlUmFuZ2UodHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5cyk7XG4gICAgICogLy8gPT4gW1tdLCBbXV1cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5c1swXSA9PT0gYXJyYXlzWzFdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0dWJBcnJheSgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAgICAgKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjEzLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLnN0dWJPYmplY3QpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gICAgICogLy8gPT4gW3t9LCB7fV1cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3R1Yk9iamVjdCgpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjEzLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVtcHR5IHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50aW1lcygyLCBfLnN0dWJTdHJpbmcpO1xuICAgICAqIC8vID0+IFsnJywgJyddXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3R1YlN0cmluZygpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB0cnVlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjEzLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50aW1lcygyLCBfLnN0dWJUcnVlKTtcbiAgICAgKiAvLyA9PiBbdHJ1ZSwgdHJ1ZV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdHViVHJ1ZSgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludm9rZXMgdGhlIGl0ZXJhdGVlIGBuYCB0aW1lcywgcmV0dXJuaW5nIGFuIGFycmF5IG9mIHRoZSByZXN1bHRzIG9mXG4gICAgICogZWFjaCBpbnZvY2F0aW9uLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDsgKGluZGV4KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGltZXMoMywgU3RyaW5nKTtcbiAgICAgKiAvLyA9PiBbJzAnLCAnMScsICcyJ11cbiAgICAgKlxuICAgICAqICBfLnRpbWVzKDQsIF8uY29uc3RhbnQoMCkpO1xuICAgICAqIC8vID0+IFswLCAwLCAwLCAwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gICAgICBuID0gdG9JbnRlZ2VyKG4pO1xuICAgICAgaWYgKG4gPCAxIHx8IG4gPiBNQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IE1BWF9BUlJBWV9MRU5HVEgsXG4gICAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWluKG4sIE1BWF9BUlJBWV9MRU5HVEgpO1xuXG4gICAgICBpdGVyYXRlZSA9IGdldEl0ZXJhdGVlKGl0ZXJhdGVlKTtcbiAgICAgIG4gLT0gTUFYX0FSUkFZX0xFTkdUSDtcblxuICAgICAgdmFyIHJlc3VsdCA9IGJhc2VUaW1lcyhsZW5ndGgsIGl0ZXJhdGVlKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgICAgICBpdGVyYXRlZShpbmRleCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9QYXRoKCdhLmIuYycpO1xuICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICAgICAqXG4gICAgICogXy50b1BhdGgoJ2FbMF0uYi5jJyk7XG4gICAgICogLy8gPT4gWydhJywgJzAnLCAnYicsICdjJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b1BhdGgodmFsdWUpIHtcbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIHRvS2V5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1N5bWJvbCh2YWx1ZSkgPyBbdmFsdWVdIDogY29weUFycmF5KHN0cmluZ1RvUGF0aCh0b1N0cmluZyh2YWx1ZSkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYSB1bmlxdWUgSUQuIElmIGBwcmVmaXhgIGlzIGdpdmVuLCB0aGUgSUQgaXMgYXBwZW5kZWQgdG8gaXQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbcHJlZml4PScnXSBUaGUgdmFsdWUgdG8gcHJlZml4IHRoZSBJRCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVuaXF1ZSBJRC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51bmlxdWVJZCgnY29udGFjdF8nKTtcbiAgICAgKiAvLyA9PiAnY29udGFjdF8xMDQnXG4gICAgICpcbiAgICAgKiBfLnVuaXF1ZUlkKCk7XG4gICAgICogLy8gPT4gJzEwNSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmlxdWVJZChwcmVmaXgpIHtcbiAgICAgIHZhciBpZCA9ICsraWRDb3VudGVyO1xuICAgICAgcmV0dXJuIHRvU3RyaW5nKHByZWZpeCkgKyBpZDtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHR3byBudW1iZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuNC4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYXVnZW5kIFRoZSBmaXJzdCBudW1iZXIgaW4gYW4gYWRkaXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFkZGVuZCBUaGUgc2Vjb25kIG51bWJlciBpbiBhbiBhZGRpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0b3RhbC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5hZGQoNiwgNCk7XG4gICAgICogLy8gPT4gMTBcbiAgICAgKi9cbiAgICB2YXIgYWRkID0gY3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihhdWdlbmQsIGFkZGVuZCkge1xuICAgICAgcmV0dXJuIGF1Z2VuZCArIGFkZGVuZDtcbiAgICB9LCAwKTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIGBudW1iZXJgIHJvdW5kZWQgdXAgdG8gYHByZWNpc2lvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4xMC4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIFRoZSBudW1iZXIgdG8gcm91bmQgdXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249MF0gVGhlIHByZWNpc2lvbiB0byByb3VuZCB1cCB0by5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByb3VuZGVkIHVwIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jZWlsKDQuMDA2KTtcbiAgICAgKiAvLyA9PiA1XG4gICAgICpcbiAgICAgKiBfLmNlaWwoNi4wMDQsIDIpO1xuICAgICAqIC8vID0+IDYuMDFcbiAgICAgKlxuICAgICAqIF8uY2VpbCg2MDQwLCAtMik7XG4gICAgICogLy8gPT4gNjEwMFxuICAgICAqL1xuICAgIHZhciBjZWlsID0gY3JlYXRlUm91bmQoJ2NlaWwnKTtcblxuICAgIC8qKlxuICAgICAqIERpdmlkZSB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjcuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRpdmlkZW5kIFRoZSBmaXJzdCBudW1iZXIgaW4gYSBkaXZpc2lvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGl2aXNvciBUaGUgc2Vjb25kIG51bWJlciBpbiBhIGRpdmlzaW9uLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHF1b3RpZW50LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRpdmlkZSg2LCA0KTtcbiAgICAgKiAvLyA9PiAxLjVcbiAgICAgKi9cbiAgICB2YXIgZGl2aWRlID0gY3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgcmV0dXJuIGRpdmlkZW5kIC8gZGl2aXNvcjtcbiAgICB9LCAxKTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIGBudW1iZXJgIHJvdW5kZWQgZG93biB0byBgcHJlY2lzaW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byByb3VuZCBkb3duLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPTBdIFRoZSBwcmVjaXNpb24gdG8gcm91bmQgZG93biB0by5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByb3VuZGVkIGRvd24gbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmZsb29yKDQuMDA2KTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICpcbiAgICAgKiBfLmZsb29yKDAuMDQ2LCAyKTtcbiAgICAgKiAvLyA9PiAwLjA0XG4gICAgICpcbiAgICAgKiBfLmZsb29yKDQwNjAsIC0yKTtcbiAgICAgKiAvLyA9PiA0MDAwXG4gICAgICovXG4gICAgdmFyIGZsb29yID0gY3JlYXRlUm91bmQoJ2Zsb29yJyk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgbWF4aW11bSB2YWx1ZSBvZiBgYXJyYXlgLiBJZiBgYXJyYXlgIGlzIGVtcHR5IG9yIGZhbHNleSxcbiAgICAgKiBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWF4aW11bSB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5tYXgoWzQsIDIsIDgsIDZdKTtcbiAgICAgKiAvLyA9PiA4XG4gICAgICpcbiAgICAgKiBfLm1heChbXSk7XG4gICAgICogLy8gPT4gdW5kZWZpbmVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWF4KGFycmF5KSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGlkZW50aXR5LCBiYXNlR3QpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ubWF4YCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoXG4gICAgICogdGhlIHZhbHVlIGlzIHJhbmtlZC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICduJzogMSB9LCB7ICduJzogMiB9XTtcbiAgICAgKlxuICAgICAqIF8ubWF4Qnkob2JqZWN0cywgZnVuY3Rpb24obykgeyByZXR1cm4gby5uOyB9KTtcbiAgICAgKiAvLyA9PiB7ICduJzogMiB9XG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLm1heEJ5KG9iamVjdHMsICduJyk7XG4gICAgICogLy8gPT4geyAnbic6IDIgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1heEJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZUV4dHJlbXVtKGFycmF5LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMiksIGJhc2VHdClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgdGhlIG1lYW4gb2YgdGhlIHZhbHVlcyBpbiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG1lYW4uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWVhbihbNCwgMiwgOCwgNl0pO1xuICAgICAqIC8vID0+IDVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtZWFuKGFycmF5KSB7XG4gICAgICByZXR1cm4gYmFzZU1lYW4oYXJyYXksIGlkZW50aXR5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLm1lYW5gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSB2YWx1ZSB0byBiZSBhdmVyYWdlZC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjcuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbWVhbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAnbic6IDQgfSwgeyAnbic6IDIgfSwgeyAnbic6IDggfSwgeyAnbic6IDYgfV07XG4gICAgICpcbiAgICAgKiBfLm1lYW5CeShvYmplY3RzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLm47IH0pO1xuICAgICAqIC8vID0+IDVcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWVhbkJ5KG9iamVjdHMsICduJyk7XG4gICAgICogLy8gPT4gNVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lYW5CeShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBiYXNlTWVhbihhcnJheSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgbWluaW11bSB2YWx1ZSBvZiBgYXJyYXlgLiBJZiBgYXJyYXlgIGlzIGVtcHR5IG9yIGZhbHNleSxcbiAgICAgKiBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWluaW11bSB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5taW4oWzQsIDIsIDgsIDZdKTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICpcbiAgICAgKiBfLm1pbihbXSk7XG4gICAgICogLy8gPT4gdW5kZWZpbmVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWluKGFycmF5KSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGlkZW50aXR5LCBiYXNlTHQpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ubWluYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoXG4gICAgICogdGhlIHZhbHVlIGlzIHJhbmtlZC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICduJzogMSB9LCB7ICduJzogMiB9XTtcbiAgICAgKlxuICAgICAqIF8ubWluQnkob2JqZWN0cywgZnVuY3Rpb24obykgeyByZXR1cm4gby5uOyB9KTtcbiAgICAgKiAvLyA9PiB7ICduJzogMSB9XG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLm1pbkJ5KG9iamVjdHMsICduJyk7XG4gICAgICogLy8gPT4geyAnbic6IDEgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1pbkJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZUV4dHJlbXVtKGFycmF5LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMiksIGJhc2VMdClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTXVsdGlwbHkgdHdvIG51bWJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC43LjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aXBsaWVyIFRoZSBmaXJzdCBudW1iZXIgaW4gYSBtdWx0aXBsaWNhdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbXVsdGlwbGljYW5kIFRoZSBzZWNvbmQgbnVtYmVyIGluIGEgbXVsdGlwbGljYXRpb24uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcHJvZHVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5tdWx0aXBseSg2LCA0KTtcbiAgICAgKiAvLyA9PiAyNFxuICAgICAqL1xuICAgIHZhciBtdWx0aXBseSA9IGNyZWF0ZU1hdGhPcGVyYXRpb24oZnVuY3Rpb24obXVsdGlwbGllciwgbXVsdGlwbGljYW5kKSB7XG4gICAgICByZXR1cm4gbXVsdGlwbGllciAqIG11bHRpcGxpY2FuZDtcbiAgICB9LCAxKTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIGBudW1iZXJgIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4xMC4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIFRoZSBudW1iZXIgdG8gcm91bmQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249MF0gVGhlIHByZWNpc2lvbiB0byByb3VuZCB0by5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByb3VuZGVkIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yb3VuZCg0LjAwNik7XG4gICAgICogLy8gPT4gNFxuICAgICAqXG4gICAgICogXy5yb3VuZCg0LjAwNiwgMik7XG4gICAgICogLy8gPT4gNC4wMVxuICAgICAqXG4gICAgICogXy5yb3VuZCg0MDYwLCAtMik7XG4gICAgICogLy8gPT4gNDEwMFxuICAgICAqL1xuICAgIHZhciByb3VuZCA9IGNyZWF0ZVJvdW5kKCdyb3VuZCcpO1xuXG4gICAgLyoqXG4gICAgICogU3VidHJhY3QgdHdvIG51bWJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaW51ZW5kIFRoZSBmaXJzdCBudW1iZXIgaW4gYSBzdWJ0cmFjdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3VidHJhaGVuZCBUaGUgc2Vjb25kIG51bWJlciBpbiBhIHN1YnRyYWN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGRpZmZlcmVuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc3VidHJhY3QoNiwgNCk7XG4gICAgICogLy8gPT4gMlxuICAgICAqL1xuICAgIHZhciBzdWJ0cmFjdCA9IGNyZWF0ZU1hdGhPcGVyYXRpb24oZnVuY3Rpb24obWludWVuZCwgc3VidHJhaGVuZCkge1xuICAgICAgcmV0dXJuIG1pbnVlbmQgLSBzdWJ0cmFoZW5kO1xuICAgIH0sIDApO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgdGhlIHN1bSBvZiB0aGUgdmFsdWVzIGluIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy40LjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3VtLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnN1bShbNCwgMiwgOCwgNl0pO1xuICAgICAqIC8vID0+IDIwXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3VtKGFycmF5KSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlU3VtKGFycmF5LCBpZGVudGl0eSlcbiAgICAgICAgOiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc3VtYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgdmFsdWUgdG8gYmUgc3VtbWVkLlxuICAgICAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdW0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ24nOiA0IH0sIHsgJ24nOiAyIH0sIHsgJ24nOiA4IH0sIHsgJ24nOiA2IH1dO1xuICAgICAqXG4gICAgICogXy5zdW1CeShvYmplY3RzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLm47IH0pO1xuICAgICAqIC8vID0+IDIwXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnN1bUJ5KG9iamVjdHMsICduJyk7XG4gICAgICogLy8gPT4gMjBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdW1CeShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VTdW0oYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSlcbiAgICAgICAgOiAwO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8vIEFkZCBtZXRob2RzIHRoYXQgcmV0dXJuIHdyYXBwZWQgdmFsdWVzIGluIGNoYWluIHNlcXVlbmNlcy5cbiAgICBsb2Rhc2guYWZ0ZXIgPSBhZnRlcjtcbiAgICBsb2Rhc2guYXJ5ID0gYXJ5O1xuICAgIGxvZGFzaC5hc3NpZ24gPSBhc3NpZ247XG4gICAgbG9kYXNoLmFzc2lnbkluID0gYXNzaWduSW47XG4gICAgbG9kYXNoLmFzc2lnbkluV2l0aCA9IGFzc2lnbkluV2l0aDtcbiAgICBsb2Rhc2guYXNzaWduV2l0aCA9IGFzc2lnbldpdGg7XG4gICAgbG9kYXNoLmF0ID0gYXQ7XG4gICAgbG9kYXNoLmJlZm9yZSA9IGJlZm9yZTtcbiAgICBsb2Rhc2guYmluZCA9IGJpbmQ7XG4gICAgbG9kYXNoLmJpbmRBbGwgPSBiaW5kQWxsO1xuICAgIGxvZGFzaC5iaW5kS2V5ID0gYmluZEtleTtcbiAgICBsb2Rhc2guY2FzdEFycmF5ID0gY2FzdEFycmF5O1xuICAgIGxvZGFzaC5jaGFpbiA9IGNoYWluO1xuICAgIGxvZGFzaC5jaHVuayA9IGNodW5rO1xuICAgIGxvZGFzaC5jb21wYWN0ID0gY29tcGFjdDtcbiAgICBsb2Rhc2guY29uY2F0ID0gY29uY2F0O1xuICAgIGxvZGFzaC5jb25kID0gY29uZDtcbiAgICBsb2Rhc2guY29uZm9ybXMgPSBjb25mb3JtcztcbiAgICBsb2Rhc2guY29uc3RhbnQgPSBjb25zdGFudDtcbiAgICBsb2Rhc2guY291bnRCeSA9IGNvdW50Qnk7XG4gICAgbG9kYXNoLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICBsb2Rhc2guY3VycnkgPSBjdXJyeTtcbiAgICBsb2Rhc2guY3VycnlSaWdodCA9IGN1cnJ5UmlnaHQ7XG4gICAgbG9kYXNoLmRlYm91bmNlID0gZGVib3VuY2U7XG4gICAgbG9kYXNoLmRlZmF1bHRzID0gZGVmYXVsdHM7XG4gICAgbG9kYXNoLmRlZmF1bHRzRGVlcCA9IGRlZmF1bHRzRGVlcDtcbiAgICBsb2Rhc2guZGVmZXIgPSBkZWZlcjtcbiAgICBsb2Rhc2guZGVsYXkgPSBkZWxheTtcbiAgICBsb2Rhc2guZGlmZmVyZW5jZSA9IGRpZmZlcmVuY2U7XG4gICAgbG9kYXNoLmRpZmZlcmVuY2VCeSA9IGRpZmZlcmVuY2VCeTtcbiAgICBsb2Rhc2guZGlmZmVyZW5jZVdpdGggPSBkaWZmZXJlbmNlV2l0aDtcbiAgICBsb2Rhc2guZHJvcCA9IGRyb3A7XG4gICAgbG9kYXNoLmRyb3BSaWdodCA9IGRyb3BSaWdodDtcbiAgICBsb2Rhc2guZHJvcFJpZ2h0V2hpbGUgPSBkcm9wUmlnaHRXaGlsZTtcbiAgICBsb2Rhc2guZHJvcFdoaWxlID0gZHJvcFdoaWxlO1xuICAgIGxvZGFzaC5maWxsID0gZmlsbDtcbiAgICBsb2Rhc2guZmlsdGVyID0gZmlsdGVyO1xuICAgIGxvZGFzaC5mbGF0TWFwID0gZmxhdE1hcDtcbiAgICBsb2Rhc2guZmxhdE1hcERlZXAgPSBmbGF0TWFwRGVlcDtcbiAgICBsb2Rhc2guZmxhdE1hcERlcHRoID0gZmxhdE1hcERlcHRoO1xuICAgIGxvZGFzaC5mbGF0dGVuID0gZmxhdHRlbjtcbiAgICBsb2Rhc2guZmxhdHRlbkRlZXAgPSBmbGF0dGVuRGVlcDtcbiAgICBsb2Rhc2guZmxhdHRlbkRlcHRoID0gZmxhdHRlbkRlcHRoO1xuICAgIGxvZGFzaC5mbGlwID0gZmxpcDtcbiAgICBsb2Rhc2guZmxvdyA9IGZsb3c7XG4gICAgbG9kYXNoLmZsb3dSaWdodCA9IGZsb3dSaWdodDtcbiAgICBsb2Rhc2guZnJvbVBhaXJzID0gZnJvbVBhaXJzO1xuICAgIGxvZGFzaC5mdW5jdGlvbnMgPSBmdW5jdGlvbnM7XG4gICAgbG9kYXNoLmZ1bmN0aW9uc0luID0gZnVuY3Rpb25zSW47XG4gICAgbG9kYXNoLmdyb3VwQnkgPSBncm91cEJ5O1xuICAgIGxvZGFzaC5pbml0aWFsID0gaW5pdGlhbDtcbiAgICBsb2Rhc2guaW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uO1xuICAgIGxvZGFzaC5pbnRlcnNlY3Rpb25CeSA9IGludGVyc2VjdGlvbkJ5O1xuICAgIGxvZGFzaC5pbnRlcnNlY3Rpb25XaXRoID0gaW50ZXJzZWN0aW9uV2l0aDtcbiAgICBsb2Rhc2guaW52ZXJ0ID0gaW52ZXJ0O1xuICAgIGxvZGFzaC5pbnZlcnRCeSA9IGludmVydEJ5O1xuICAgIGxvZGFzaC5pbnZva2VNYXAgPSBpbnZva2VNYXA7XG4gICAgbG9kYXNoLml0ZXJhdGVlID0gaXRlcmF0ZWU7XG4gICAgbG9kYXNoLmtleUJ5ID0ga2V5Qnk7XG4gICAgbG9kYXNoLmtleXMgPSBrZXlzO1xuICAgIGxvZGFzaC5rZXlzSW4gPSBrZXlzSW47XG4gICAgbG9kYXNoLm1hcCA9IG1hcDtcbiAgICBsb2Rhc2gubWFwS2V5cyA9IG1hcEtleXM7XG4gICAgbG9kYXNoLm1hcFZhbHVlcyA9IG1hcFZhbHVlcztcbiAgICBsb2Rhc2gubWF0Y2hlcyA9IG1hdGNoZXM7XG4gICAgbG9kYXNoLm1hdGNoZXNQcm9wZXJ0eSA9IG1hdGNoZXNQcm9wZXJ0eTtcbiAgICBsb2Rhc2gubWVtb2l6ZSA9IG1lbW9pemU7XG4gICAgbG9kYXNoLm1lcmdlID0gbWVyZ2U7XG4gICAgbG9kYXNoLm1lcmdlV2l0aCA9IG1lcmdlV2l0aDtcbiAgICBsb2Rhc2gubWV0aG9kID0gbWV0aG9kO1xuICAgIGxvZGFzaC5tZXRob2RPZiA9IG1ldGhvZE9mO1xuICAgIGxvZGFzaC5taXhpbiA9IG1peGluO1xuICAgIGxvZGFzaC5uZWdhdGUgPSBuZWdhdGU7XG4gICAgbG9kYXNoLm50aEFyZyA9IG50aEFyZztcbiAgICBsb2Rhc2gub21pdCA9IG9taXQ7XG4gICAgbG9kYXNoLm9taXRCeSA9IG9taXRCeTtcbiAgICBsb2Rhc2gub25jZSA9IG9uY2U7XG4gICAgbG9kYXNoLm9yZGVyQnkgPSBvcmRlckJ5O1xuICAgIGxvZGFzaC5vdmVyID0gb3ZlcjtcbiAgICBsb2Rhc2gub3ZlckFyZ3MgPSBvdmVyQXJncztcbiAgICBsb2Rhc2gub3ZlckV2ZXJ5ID0gb3ZlckV2ZXJ5O1xuICAgIGxvZGFzaC5vdmVyU29tZSA9IG92ZXJTb21lO1xuICAgIGxvZGFzaC5wYXJ0aWFsID0gcGFydGlhbDtcbiAgICBsb2Rhc2gucGFydGlhbFJpZ2h0ID0gcGFydGlhbFJpZ2h0O1xuICAgIGxvZGFzaC5wYXJ0aXRpb24gPSBwYXJ0aXRpb247XG4gICAgbG9kYXNoLnBpY2sgPSBwaWNrO1xuICAgIGxvZGFzaC5waWNrQnkgPSBwaWNrQnk7XG4gICAgbG9kYXNoLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgbG9kYXNoLnByb3BlcnR5T2YgPSBwcm9wZXJ0eU9mO1xuICAgIGxvZGFzaC5wdWxsID0gcHVsbDtcbiAgICBsb2Rhc2gucHVsbEFsbCA9IHB1bGxBbGw7XG4gICAgbG9kYXNoLnB1bGxBbGxCeSA9IHB1bGxBbGxCeTtcbiAgICBsb2Rhc2gucHVsbEFsbFdpdGggPSBwdWxsQWxsV2l0aDtcbiAgICBsb2Rhc2gucHVsbEF0ID0gcHVsbEF0O1xuICAgIGxvZGFzaC5yYW5nZSA9IHJhbmdlO1xuICAgIGxvZGFzaC5yYW5nZVJpZ2h0ID0gcmFuZ2VSaWdodDtcbiAgICBsb2Rhc2gucmVhcmcgPSByZWFyZztcbiAgICBsb2Rhc2gucmVqZWN0ID0gcmVqZWN0O1xuICAgIGxvZGFzaC5yZW1vdmUgPSByZW1vdmU7XG4gICAgbG9kYXNoLnJlc3QgPSByZXN0O1xuICAgIGxvZGFzaC5yZXZlcnNlID0gcmV2ZXJzZTtcbiAgICBsb2Rhc2guc2FtcGxlU2l6ZSA9IHNhbXBsZVNpemU7XG4gICAgbG9kYXNoLnNldCA9IHNldDtcbiAgICBsb2Rhc2guc2V0V2l0aCA9IHNldFdpdGg7XG4gICAgbG9kYXNoLnNodWZmbGUgPSBzaHVmZmxlO1xuICAgIGxvZGFzaC5zbGljZSA9IHNsaWNlO1xuICAgIGxvZGFzaC5zb3J0QnkgPSBzb3J0Qnk7XG4gICAgbG9kYXNoLnNvcnRlZFVuaXEgPSBzb3J0ZWRVbmlxO1xuICAgIGxvZGFzaC5zb3J0ZWRVbmlxQnkgPSBzb3J0ZWRVbmlxQnk7XG4gICAgbG9kYXNoLnNwbGl0ID0gc3BsaXQ7XG4gICAgbG9kYXNoLnNwcmVhZCA9IHNwcmVhZDtcbiAgICBsb2Rhc2gudGFpbCA9IHRhaWw7XG4gICAgbG9kYXNoLnRha2UgPSB0YWtlO1xuICAgIGxvZGFzaC50YWtlUmlnaHQgPSB0YWtlUmlnaHQ7XG4gICAgbG9kYXNoLnRha2VSaWdodFdoaWxlID0gdGFrZVJpZ2h0V2hpbGU7XG4gICAgbG9kYXNoLnRha2VXaGlsZSA9IHRha2VXaGlsZTtcbiAgICBsb2Rhc2gudGFwID0gdGFwO1xuICAgIGxvZGFzaC50aHJvdHRsZSA9IHRocm90dGxlO1xuICAgIGxvZGFzaC50aHJ1ID0gdGhydTtcbiAgICBsb2Rhc2gudG9BcnJheSA9IHRvQXJyYXk7XG4gICAgbG9kYXNoLnRvUGFpcnMgPSB0b1BhaXJzO1xuICAgIGxvZGFzaC50b1BhaXJzSW4gPSB0b1BhaXJzSW47XG4gICAgbG9kYXNoLnRvUGF0aCA9IHRvUGF0aDtcbiAgICBsb2Rhc2gudG9QbGFpbk9iamVjdCA9IHRvUGxhaW5PYmplY3Q7XG4gICAgbG9kYXNoLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICBsb2Rhc2gudW5hcnkgPSB1bmFyeTtcbiAgICBsb2Rhc2gudW5pb24gPSB1bmlvbjtcbiAgICBsb2Rhc2gudW5pb25CeSA9IHVuaW9uQnk7XG4gICAgbG9kYXNoLnVuaW9uV2l0aCA9IHVuaW9uV2l0aDtcbiAgICBsb2Rhc2gudW5pcSA9IHVuaXE7XG4gICAgbG9kYXNoLnVuaXFCeSA9IHVuaXFCeTtcbiAgICBsb2Rhc2gudW5pcVdpdGggPSB1bmlxV2l0aDtcbiAgICBsb2Rhc2gudW5zZXQgPSB1bnNldDtcbiAgICBsb2Rhc2gudW56aXAgPSB1bnppcDtcbiAgICBsb2Rhc2gudW56aXBXaXRoID0gdW56aXBXaXRoO1xuICAgIGxvZGFzaC51cGRhdGUgPSB1cGRhdGU7XG4gICAgbG9kYXNoLnVwZGF0ZVdpdGggPSB1cGRhdGVXaXRoO1xuICAgIGxvZGFzaC52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgbG9kYXNoLnZhbHVlc0luID0gdmFsdWVzSW47XG4gICAgbG9kYXNoLndpdGhvdXQgPSB3aXRob3V0O1xuICAgIGxvZGFzaC53b3JkcyA9IHdvcmRzO1xuICAgIGxvZGFzaC53cmFwID0gd3JhcDtcbiAgICBsb2Rhc2gueG9yID0geG9yO1xuICAgIGxvZGFzaC54b3JCeSA9IHhvckJ5O1xuICAgIGxvZGFzaC54b3JXaXRoID0geG9yV2l0aDtcbiAgICBsb2Rhc2guemlwID0gemlwO1xuICAgIGxvZGFzaC56aXBPYmplY3QgPSB6aXBPYmplY3Q7XG4gICAgbG9kYXNoLnppcE9iamVjdERlZXAgPSB6aXBPYmplY3REZWVwO1xuICAgIGxvZGFzaC56aXBXaXRoID0gemlwV2l0aDtcblxuICAgIC8vIEFkZCBhbGlhc2VzLlxuICAgIGxvZGFzaC5lbnRyaWVzID0gdG9QYWlycztcbiAgICBsb2Rhc2guZW50cmllc0luID0gdG9QYWlyc0luO1xuICAgIGxvZGFzaC5leHRlbmQgPSBhc3NpZ25JbjtcbiAgICBsb2Rhc2guZXh0ZW5kV2l0aCA9IGFzc2lnbkluV2l0aDtcblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBsb2Rhc2gucHJvdG90eXBlYC5cbiAgICBtaXhpbihsb2Rhc2gsIGxvZGFzaCk7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0aGF0IHJldHVybiB1bndyYXBwZWQgdmFsdWVzIGluIGNoYWluIHNlcXVlbmNlcy5cbiAgICBsb2Rhc2guYWRkID0gYWRkO1xuICAgIGxvZGFzaC5hdHRlbXB0ID0gYXR0ZW1wdDtcbiAgICBsb2Rhc2guY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xuICAgIGxvZGFzaC5jYXBpdGFsaXplID0gY2FwaXRhbGl6ZTtcbiAgICBsb2Rhc2guY2VpbCA9IGNlaWw7XG4gICAgbG9kYXNoLmNsYW1wID0gY2xhbXA7XG4gICAgbG9kYXNoLmNsb25lID0gY2xvbmU7XG4gICAgbG9kYXNoLmNsb25lRGVlcCA9IGNsb25lRGVlcDtcbiAgICBsb2Rhc2guY2xvbmVEZWVwV2l0aCA9IGNsb25lRGVlcFdpdGg7XG4gICAgbG9kYXNoLmNsb25lV2l0aCA9IGNsb25lV2l0aDtcbiAgICBsb2Rhc2guY29uZm9ybXNUbyA9IGNvbmZvcm1zVG87XG4gICAgbG9kYXNoLmRlYnVyciA9IGRlYnVycjtcbiAgICBsb2Rhc2guZGVmYXVsdFRvID0gZGVmYXVsdFRvO1xuICAgIGxvZGFzaC5kaXZpZGUgPSBkaXZpZGU7XG4gICAgbG9kYXNoLmVuZHNXaXRoID0gZW5kc1dpdGg7XG4gICAgbG9kYXNoLmVxID0gZXE7XG4gICAgbG9kYXNoLmVzY2FwZSA9IGVzY2FwZTtcbiAgICBsb2Rhc2guZXNjYXBlUmVnRXhwID0gZXNjYXBlUmVnRXhwO1xuICAgIGxvZGFzaC5ldmVyeSA9IGV2ZXJ5O1xuICAgIGxvZGFzaC5maW5kID0gZmluZDtcbiAgICBsb2Rhc2guZmluZEluZGV4ID0gZmluZEluZGV4O1xuICAgIGxvZGFzaC5maW5kS2V5ID0gZmluZEtleTtcbiAgICBsb2Rhc2guZmluZExhc3QgPSBmaW5kTGFzdDtcbiAgICBsb2Rhc2guZmluZExhc3RJbmRleCA9IGZpbmRMYXN0SW5kZXg7XG4gICAgbG9kYXNoLmZpbmRMYXN0S2V5ID0gZmluZExhc3RLZXk7XG4gICAgbG9kYXNoLmZsb29yID0gZmxvb3I7XG4gICAgbG9kYXNoLmZvckVhY2ggPSBmb3JFYWNoO1xuICAgIGxvZGFzaC5mb3JFYWNoUmlnaHQgPSBmb3JFYWNoUmlnaHQ7XG4gICAgbG9kYXNoLmZvckluID0gZm9ySW47XG4gICAgbG9kYXNoLmZvckluUmlnaHQgPSBmb3JJblJpZ2h0O1xuICAgIGxvZGFzaC5mb3JPd24gPSBmb3JPd247XG4gICAgbG9kYXNoLmZvck93blJpZ2h0ID0gZm9yT3duUmlnaHQ7XG4gICAgbG9kYXNoLmdldCA9IGdldDtcbiAgICBsb2Rhc2guZ3QgPSBndDtcbiAgICBsb2Rhc2guZ3RlID0gZ3RlO1xuICAgIGxvZGFzaC5oYXMgPSBoYXM7XG4gICAgbG9kYXNoLmhhc0luID0gaGFzSW47XG4gICAgbG9kYXNoLmhlYWQgPSBoZWFkO1xuICAgIGxvZGFzaC5pZGVudGl0eSA9IGlkZW50aXR5O1xuICAgIGxvZGFzaC5pbmNsdWRlcyA9IGluY2x1ZGVzO1xuICAgIGxvZGFzaC5pbmRleE9mID0gaW5kZXhPZjtcbiAgICBsb2Rhc2guaW5SYW5nZSA9IGluUmFuZ2U7XG4gICAgbG9kYXNoLmludm9rZSA9IGludm9rZTtcbiAgICBsb2Rhc2guaXNBcmd1bWVudHMgPSBpc0FyZ3VtZW50cztcbiAgICBsb2Rhc2guaXNBcnJheSA9IGlzQXJyYXk7XG4gICAgbG9kYXNoLmlzQXJyYXlCdWZmZXIgPSBpc0FycmF5QnVmZmVyO1xuICAgIGxvZGFzaC5pc0FycmF5TGlrZSA9IGlzQXJyYXlMaWtlO1xuICAgIGxvZGFzaC5pc0FycmF5TGlrZU9iamVjdCA9IGlzQXJyYXlMaWtlT2JqZWN0O1xuICAgIGxvZGFzaC5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG4gICAgbG9kYXNoLmlzQnVmZmVyID0gaXNCdWZmZXI7XG4gICAgbG9kYXNoLmlzRGF0ZSA9IGlzRGF0ZTtcbiAgICBsb2Rhc2guaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuICAgIGxvZGFzaC5pc0VtcHR5ID0gaXNFbXB0eTtcbiAgICBsb2Rhc2guaXNFcXVhbCA9IGlzRXF1YWw7XG4gICAgbG9kYXNoLmlzRXF1YWxXaXRoID0gaXNFcXVhbFdpdGg7XG4gICAgbG9kYXNoLmlzRXJyb3IgPSBpc0Vycm9yO1xuICAgIGxvZGFzaC5pc0Zpbml0ZSA9IGlzRmluaXRlO1xuICAgIGxvZGFzaC5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbiAgICBsb2Rhc2guaXNJbnRlZ2VyID0gaXNJbnRlZ2VyO1xuICAgIGxvZGFzaC5pc0xlbmd0aCA9IGlzTGVuZ3RoO1xuICAgIGxvZGFzaC5pc01hcCA9IGlzTWFwO1xuICAgIGxvZGFzaC5pc01hdGNoID0gaXNNYXRjaDtcbiAgICBsb2Rhc2guaXNNYXRjaFdpdGggPSBpc01hdGNoV2l0aDtcbiAgICBsb2Rhc2guaXNOYU4gPSBpc05hTjtcbiAgICBsb2Rhc2guaXNOYXRpdmUgPSBpc05hdGl2ZTtcbiAgICBsb2Rhc2guaXNOaWwgPSBpc05pbDtcbiAgICBsb2Rhc2guaXNOdWxsID0gaXNOdWxsO1xuICAgIGxvZGFzaC5pc051bWJlciA9IGlzTnVtYmVyO1xuICAgIGxvZGFzaC5pc09iamVjdCA9IGlzT2JqZWN0O1xuICAgIGxvZGFzaC5pc09iamVjdExpa2UgPSBpc09iamVjdExpa2U7XG4gICAgbG9kYXNoLmlzUGxhaW5PYmplY3QgPSBpc1BsYWluT2JqZWN0O1xuICAgIGxvZGFzaC5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuICAgIGxvZGFzaC5pc1NhZmVJbnRlZ2VyID0gaXNTYWZlSW50ZWdlcjtcbiAgICBsb2Rhc2guaXNTZXQgPSBpc1NldDtcbiAgICBsb2Rhc2guaXNTdHJpbmcgPSBpc1N0cmluZztcbiAgICBsb2Rhc2guaXNTeW1ib2wgPSBpc1N5bWJvbDtcbiAgICBsb2Rhc2guaXNUeXBlZEFycmF5ID0gaXNUeXBlZEFycmF5O1xuICAgIGxvZGFzaC5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuICAgIGxvZGFzaC5pc1dlYWtNYXAgPSBpc1dlYWtNYXA7XG4gICAgbG9kYXNoLmlzV2Vha1NldCA9IGlzV2Vha1NldDtcbiAgICBsb2Rhc2guam9pbiA9IGpvaW47XG4gICAgbG9kYXNoLmtlYmFiQ2FzZSA9IGtlYmFiQ2FzZTtcbiAgICBsb2Rhc2gubGFzdCA9IGxhc3Q7XG4gICAgbG9kYXNoLmxhc3RJbmRleE9mID0gbGFzdEluZGV4T2Y7XG4gICAgbG9kYXNoLmxvd2VyQ2FzZSA9IGxvd2VyQ2FzZTtcbiAgICBsb2Rhc2gubG93ZXJGaXJzdCA9IGxvd2VyRmlyc3Q7XG4gICAgbG9kYXNoLmx0ID0gbHQ7XG4gICAgbG9kYXNoLmx0ZSA9IGx0ZTtcbiAgICBsb2Rhc2gubWF4ID0gbWF4O1xuICAgIGxvZGFzaC5tYXhCeSA9IG1heEJ5O1xuICAgIGxvZGFzaC5tZWFuID0gbWVhbjtcbiAgICBsb2Rhc2gubWVhbkJ5ID0gbWVhbkJ5O1xuICAgIGxvZGFzaC5taW4gPSBtaW47XG4gICAgbG9kYXNoLm1pbkJ5ID0gbWluQnk7XG4gICAgbG9kYXNoLnN0dWJBcnJheSA9IHN0dWJBcnJheTtcbiAgICBsb2Rhc2guc3R1YkZhbHNlID0gc3R1YkZhbHNlO1xuICAgIGxvZGFzaC5zdHViT2JqZWN0ID0gc3R1Yk9iamVjdDtcbiAgICBsb2Rhc2guc3R1YlN0cmluZyA9IHN0dWJTdHJpbmc7XG4gICAgbG9kYXNoLnN0dWJUcnVlID0gc3R1YlRydWU7XG4gICAgbG9kYXNoLm11bHRpcGx5ID0gbXVsdGlwbHk7XG4gICAgbG9kYXNoLm50aCA9IG50aDtcbiAgICBsb2Rhc2gubm9Db25mbGljdCA9IG5vQ29uZmxpY3Q7XG4gICAgbG9kYXNoLm5vb3AgPSBub29wO1xuICAgIGxvZGFzaC5ub3cgPSBub3c7XG4gICAgbG9kYXNoLnBhZCA9IHBhZDtcbiAgICBsb2Rhc2gucGFkRW5kID0gcGFkRW5kO1xuICAgIGxvZGFzaC5wYWRTdGFydCA9IHBhZFN0YXJ0O1xuICAgIGxvZGFzaC5wYXJzZUludCA9IHBhcnNlSW50O1xuICAgIGxvZGFzaC5yYW5kb20gPSByYW5kb207XG4gICAgbG9kYXNoLnJlZHVjZSA9IHJlZHVjZTtcbiAgICBsb2Rhc2gucmVkdWNlUmlnaHQgPSByZWR1Y2VSaWdodDtcbiAgICBsb2Rhc2gucmVwZWF0ID0gcmVwZWF0O1xuICAgIGxvZGFzaC5yZXBsYWNlID0gcmVwbGFjZTtcbiAgICBsb2Rhc2gucmVzdWx0ID0gcmVzdWx0O1xuICAgIGxvZGFzaC5yb3VuZCA9IHJvdW5kO1xuICAgIGxvZGFzaC5ydW5JbkNvbnRleHQgPSBydW5JbkNvbnRleHQ7XG4gICAgbG9kYXNoLnNhbXBsZSA9IHNhbXBsZTtcbiAgICBsb2Rhc2guc2l6ZSA9IHNpemU7XG4gICAgbG9kYXNoLnNuYWtlQ2FzZSA9IHNuYWtlQ2FzZTtcbiAgICBsb2Rhc2guc29tZSA9IHNvbWU7XG4gICAgbG9kYXNoLnNvcnRlZEluZGV4ID0gc29ydGVkSW5kZXg7XG4gICAgbG9kYXNoLnNvcnRlZEluZGV4QnkgPSBzb3J0ZWRJbmRleEJ5O1xuICAgIGxvZGFzaC5zb3J0ZWRJbmRleE9mID0gc29ydGVkSW5kZXhPZjtcbiAgICBsb2Rhc2guc29ydGVkTGFzdEluZGV4ID0gc29ydGVkTGFzdEluZGV4O1xuICAgIGxvZGFzaC5zb3J0ZWRMYXN0SW5kZXhCeSA9IHNvcnRlZExhc3RJbmRleEJ5O1xuICAgIGxvZGFzaC5zb3J0ZWRMYXN0SW5kZXhPZiA9IHNvcnRlZExhc3RJbmRleE9mO1xuICAgIGxvZGFzaC5zdGFydENhc2UgPSBzdGFydENhc2U7XG4gICAgbG9kYXNoLnN0YXJ0c1dpdGggPSBzdGFydHNXaXRoO1xuICAgIGxvZGFzaC5zdWJ0cmFjdCA9IHN1YnRyYWN0O1xuICAgIGxvZGFzaC5zdW0gPSBzdW07XG4gICAgbG9kYXNoLnN1bUJ5ID0gc3VtQnk7XG4gICAgbG9kYXNoLnRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgbG9kYXNoLnRpbWVzID0gdGltZXM7XG4gICAgbG9kYXNoLnRvRmluaXRlID0gdG9GaW5pdGU7XG4gICAgbG9kYXNoLnRvSW50ZWdlciA9IHRvSW50ZWdlcjtcbiAgICBsb2Rhc2gudG9MZW5ndGggPSB0b0xlbmd0aDtcbiAgICBsb2Rhc2gudG9Mb3dlciA9IHRvTG93ZXI7XG4gICAgbG9kYXNoLnRvTnVtYmVyID0gdG9OdW1iZXI7XG4gICAgbG9kYXNoLnRvU2FmZUludGVnZXIgPSB0b1NhZmVJbnRlZ2VyO1xuICAgIGxvZGFzaC50b1N0cmluZyA9IHRvU3RyaW5nO1xuICAgIGxvZGFzaC50b1VwcGVyID0gdG9VcHBlcjtcbiAgICBsb2Rhc2gudHJpbSA9IHRyaW07XG4gICAgbG9kYXNoLnRyaW1FbmQgPSB0cmltRW5kO1xuICAgIGxvZGFzaC50cmltU3RhcnQgPSB0cmltU3RhcnQ7XG4gICAgbG9kYXNoLnRydW5jYXRlID0gdHJ1bmNhdGU7XG4gICAgbG9kYXNoLnVuZXNjYXBlID0gdW5lc2NhcGU7XG4gICAgbG9kYXNoLnVuaXF1ZUlkID0gdW5pcXVlSWQ7XG4gICAgbG9kYXNoLnVwcGVyQ2FzZSA9IHVwcGVyQ2FzZTtcbiAgICBsb2Rhc2gudXBwZXJGaXJzdCA9IHVwcGVyRmlyc3Q7XG5cbiAgICAvLyBBZGQgYWxpYXNlcy5cbiAgICBsb2Rhc2guZWFjaCA9IGZvckVhY2g7XG4gICAgbG9kYXNoLmVhY2hSaWdodCA9IGZvckVhY2hSaWdodDtcbiAgICBsb2Rhc2guZmlyc3QgPSBoZWFkO1xuXG4gICAgbWl4aW4obG9kYXNoLCAoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgc291cmNlID0ge307XG4gICAgICBiYXNlRm9yT3duKGxvZGFzaCwgZnVuY3Rpb24oZnVuYywgbWV0aG9kTmFtZSkge1xuICAgICAgICBpZiAoIWhhc093blByb3BlcnR5LmNhbGwobG9kYXNoLnByb3RvdHlwZSwgbWV0aG9kTmFtZSkpIHtcbiAgICAgICAgICBzb3VyY2VbbWV0aG9kTmFtZV0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgfSgpKSwgeyAnY2hhaW4nOiBmYWxzZSB9KTtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIFRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgbG9kYXNoLlZFUlNJT04gPSBWRVJTSU9OO1xuXG4gICAgLy8gQXNzaWduIGRlZmF1bHQgcGxhY2Vob2xkZXJzLlxuICAgIGFycmF5RWFjaChbJ2JpbmQnLCAnYmluZEtleScsICdjdXJyeScsICdjdXJyeVJpZ2h0JywgJ3BhcnRpYWwnLCAncGFydGlhbFJpZ2h0J10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHtcbiAgICAgIGxvZGFzaFttZXRob2ROYW1lXS5wbGFjZWhvbGRlciA9IGxvZGFzaDtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBgTGF6eVdyYXBwZXJgIG1ldGhvZHMgZm9yIGBfLmRyb3BgIGFuZCBgXy50YWtlYCB2YXJpYW50cy5cbiAgICBhcnJheUVhY2goWydkcm9wJywgJ3Rha2UnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSwgaW5kZXgpIHtcbiAgICAgIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgbiA9IG4gPT09IHVuZGVmaW5lZCA/IDEgOiBuYXRpdmVNYXgodG9JbnRlZ2VyKG4pLCAwKTtcblxuICAgICAgICB2YXIgcmVzdWx0ID0gKHRoaXMuX19maWx0ZXJlZF9fICYmICFpbmRleClcbiAgICAgICAgICA/IG5ldyBMYXp5V3JhcHBlcih0aGlzKVxuICAgICAgICAgIDogdGhpcy5jbG9uZSgpO1xuXG4gICAgICAgIGlmIChyZXN1bHQuX19maWx0ZXJlZF9fKSB7XG4gICAgICAgICAgcmVzdWx0Ll9fdGFrZUNvdW50X18gPSBuYXRpdmVNaW4obiwgcmVzdWx0Ll9fdGFrZUNvdW50X18pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdC5fX3ZpZXdzX18ucHVzaCh7XG4gICAgICAgICAgICAnc2l6ZSc6IG5hdGl2ZU1pbihuLCBNQVhfQVJSQVlfTEVOR1RIKSxcbiAgICAgICAgICAgICd0eXBlJzogbWV0aG9kTmFtZSArIChyZXN1bHQuX19kaXJfXyA8IDAgPyAnUmlnaHQnIDogJycpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG5cbiAgICAgIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lICsgJ1JpZ2h0J10gPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldmVyc2UoKVttZXRob2ROYW1lXShuKS5yZXZlcnNlKCk7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyB0aGF0IGFjY2VwdCBhbiBgaXRlcmF0ZWVgIHZhbHVlLlxuICAgIGFycmF5RWFjaChbJ2ZpbHRlcicsICdtYXAnLCAndGFrZVdoaWxlJ10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGluZGV4KSB7XG4gICAgICB2YXIgdHlwZSA9IGluZGV4ICsgMSxcbiAgICAgICAgICBpc0ZpbHRlciA9IHR5cGUgPT0gTEFaWV9GSUxURVJfRkxBRyB8fCB0eXBlID09IExBWllfV0hJTEVfRkxBRztcblxuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oaXRlcmF0ZWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0Ll9faXRlcmF0ZWVzX18ucHVzaCh7XG4gICAgICAgICAgJ2l0ZXJhdGVlJzogZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpLFxuICAgICAgICAgICd0eXBlJzogdHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0Ll9fZmlsdGVyZWRfXyA9IHJlc3VsdC5fX2ZpbHRlcmVkX18gfHwgaXNGaWx0ZXI7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyBmb3IgYF8uaGVhZGAgYW5kIGBfLmxhc3RgLlxuICAgIGFycmF5RWFjaChbJ2hlYWQnLCAnbGFzdCddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICAgICAgdmFyIHRha2VOYW1lID0gJ3Rha2UnICsgKGluZGV4ID8gJ1JpZ2h0JyA6ICcnKTtcblxuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzW3Rha2VOYW1lXSgxKS52YWx1ZSgpWzBdO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBgTGF6eVdyYXBwZXJgIG1ldGhvZHMgZm9yIGBfLmluaXRpYWxgIGFuZCBgXy50YWlsYC5cbiAgICBhcnJheUVhY2goWydpbml0aWFsJywgJ3RhaWwnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSwgaW5kZXgpIHtcbiAgICAgIHZhciBkcm9wTmFtZSA9ICdkcm9wJyArIChpbmRleCA/ICcnIDogJ1JpZ2h0Jyk7XG5cbiAgICAgIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18gPyBuZXcgTGF6eVdyYXBwZXIodGhpcykgOiB0aGlzW2Ryb3BOYW1lXSgxKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuY29tcGFjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGlkZW50aXR5KTtcbiAgICB9O1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlcihwcmVkaWNhdGUpLmhlYWQoKTtcbiAgICB9O1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLmZpbmRMYXN0ID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXZlcnNlKCkuZmluZChwcmVkaWNhdGUpO1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuaW52b2tlTWFwID0gYmFzZVJlc3QoZnVuY3Rpb24ocGF0aCwgYXJncykge1xuICAgICAgaWYgKHR5cGVvZiBwYXRoID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMYXp5V3JhcHBlcih0aGlzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYmFzZUludm9rZSh2YWx1ZSwgcGF0aCwgYXJncyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5yZWplY3QgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlcihuZWdhdGUoZ2V0SXRlcmF0ZWUocHJlZGljYXRlKSkpO1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgICBzdGFydCA9IHRvSW50ZWdlcihzdGFydCk7XG5cbiAgICAgIHZhciByZXN1bHQgPSB0aGlzO1xuICAgICAgaWYgKHJlc3VsdC5fX2ZpbHRlcmVkX18gJiYgKHN0YXJ0ID4gMCB8fCBlbmQgPCAwKSkge1xuICAgICAgICByZXR1cm4gbmV3IExhenlXcmFwcGVyKHJlc3VsdCk7XG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC50YWtlUmlnaHQoLXN0YXJ0KTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhcnQpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmRyb3Aoc3RhcnQpO1xuICAgICAgfVxuICAgICAgaWYgKGVuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVuZCA9IHRvSW50ZWdlcihlbmQpO1xuICAgICAgICByZXN1bHQgPSBlbmQgPCAwID8gcmVzdWx0LmRyb3BSaWdodCgtZW5kKSA6IHJlc3VsdC50YWtlKGVuZCAtIHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS50YWtlUmlnaHRXaGlsZSA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmV2ZXJzZSgpLnRha2VXaGlsZShwcmVkaWNhdGUpLnJldmVyc2UoKTtcbiAgICB9O1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRha2UoTUFYX0FSUkFZX0xFTkdUSCk7XG4gICAgfTtcblxuICAgIC8vIEFkZCBgTGF6eVdyYXBwZXJgIG1ldGhvZHMgdG8gYGxvZGFzaC5wcm90b3R5cGVgLlxuICAgIGJhc2VGb3JPd24oTGF6eVdyYXBwZXIucHJvdG90eXBlLCBmdW5jdGlvbihmdW5jLCBtZXRob2ROYW1lKSB7XG4gICAgICB2YXIgY2hlY2tJdGVyYXRlZSA9IC9eKD86ZmlsdGVyfGZpbmR8bWFwfHJlamVjdCl8V2hpbGUkLy50ZXN0KG1ldGhvZE5hbWUpLFxuICAgICAgICAgIGlzVGFrZXIgPSAvXig/OmhlYWR8bGFzdCkkLy50ZXN0KG1ldGhvZE5hbWUpLFxuICAgICAgICAgIGxvZGFzaEZ1bmMgPSBsb2Rhc2hbaXNUYWtlciA/ICgndGFrZScgKyAobWV0aG9kTmFtZSA9PSAnbGFzdCcgPyAnUmlnaHQnIDogJycpKSA6IG1ldGhvZE5hbWVdLFxuICAgICAgICAgIHJldFVud3JhcHBlZCA9IGlzVGFrZXIgfHwgL15maW5kLy50ZXN0KG1ldGhvZE5hbWUpO1xuXG4gICAgICBpZiAoIWxvZGFzaEZ1bmMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbG9kYXNoLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLl9fd3JhcHBlZF9fLFxuICAgICAgICAgICAgYXJncyA9IGlzVGFrZXIgPyBbMV0gOiBhcmd1bWVudHMsXG4gICAgICAgICAgICBpc0xhenkgPSB2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyLFxuICAgICAgICAgICAgaXRlcmF0ZWUgPSBhcmdzWzBdLFxuICAgICAgICAgICAgdXNlTGF6eSA9IGlzTGF6eSB8fCBpc0FycmF5KHZhbHVlKTtcblxuICAgICAgICB2YXIgaW50ZXJjZXB0b3IgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBsb2Rhc2hGdW5jLmFwcGx5KGxvZGFzaCwgYXJyYXlQdXNoKFt2YWx1ZV0sIGFyZ3MpKTtcbiAgICAgICAgICByZXR1cm4gKGlzVGFrZXIgJiYgY2hhaW5BbGwpID8gcmVzdWx0WzBdIDogcmVzdWx0O1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh1c2VMYXp5ICYmIGNoZWNrSXRlcmF0ZWUgJiYgdHlwZW9mIGl0ZXJhdGVlID09ICdmdW5jdGlvbicgJiYgaXRlcmF0ZWUubGVuZ3RoICE9IDEpIHtcbiAgICAgICAgICAvLyBBdm9pZCBsYXp5IHVzZSBpZiB0aGUgaXRlcmF0ZWUgaGFzIGEgXCJsZW5ndGhcIiB2YWx1ZSBvdGhlciB0aGFuIGAxYC5cbiAgICAgICAgICBpc0xhenkgPSB1c2VMYXp5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYWluQWxsID0gdGhpcy5fX2NoYWluX18sXG4gICAgICAgICAgICBpc0h5YnJpZCA9ICEhdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgsXG4gICAgICAgICAgICBpc1Vud3JhcHBlZCA9IHJldFVud3JhcHBlZCAmJiAhY2hhaW5BbGwsXG4gICAgICAgICAgICBvbmx5TGF6eSA9IGlzTGF6eSAmJiAhaXNIeWJyaWQ7XG5cbiAgICAgICAgaWYgKCFyZXRVbndyYXBwZWQgJiYgdXNlTGF6eSkge1xuICAgICAgICAgIHZhbHVlID0gb25seUxhenkgPyB2YWx1ZSA6IG5ldyBMYXp5V3JhcHBlcih0aGlzKTtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh2YWx1ZSwgYXJncyk7XG4gICAgICAgICAgcmVzdWx0Ll9fYWN0aW9uc19fLnB1c2goeyAnZnVuYyc6IHRocnUsICdhcmdzJzogW2ludGVyY2VwdG9yXSwgJ3RoaXNBcmcnOiB1bmRlZmluZWQgfSk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHJlc3VsdCwgY2hhaW5BbGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Vud3JhcHBlZCAmJiBvbmx5TGF6eSkge1xuICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHRoaXMudGhydShpbnRlcmNlcHRvcik7XG4gICAgICAgIHJldHVybiBpc1Vud3JhcHBlZCA/IChpc1Rha2VyID8gcmVzdWx0LnZhbHVlKClbMF0gOiByZXN1bHQudmFsdWUoKSkgOiByZXN1bHQ7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8gQWRkIGBBcnJheWAgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG4gICAgYXJyYXlFYWNoKFsncG9wJywgJ3B1c2gnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihtZXRob2ROYW1lKSB7XG4gICAgICB2YXIgZnVuYyA9IGFycmF5UHJvdG9bbWV0aG9kTmFtZV0sXG4gICAgICAgICAgY2hhaW5OYW1lID0gL14oPzpwdXNofHNvcnR8dW5zaGlmdCkkLy50ZXN0KG1ldGhvZE5hbWUpID8gJ3RhcCcgOiAndGhydScsXG4gICAgICAgICAgcmV0VW53cmFwcGVkID0gL14oPzpwb3B8c2hpZnQpJC8udGVzdChtZXRob2ROYW1lKTtcblxuICAgICAgbG9kYXNoLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgaWYgKHJldFVud3JhcHBlZCAmJiAhdGhpcy5fX2NoYWluX18pIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlKCk7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpc1tjaGFpbk5hbWVdKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdLCBhcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8gTWFwIG1pbmlmaWVkIG1ldGhvZCBuYW1lcyB0byB0aGVpciByZWFsIG5hbWVzLlxuICAgIGJhc2VGb3JPd24oTGF6eVdyYXBwZXIucHJvdG90eXBlLCBmdW5jdGlvbihmdW5jLCBtZXRob2ROYW1lKSB7XG4gICAgICB2YXIgbG9kYXNoRnVuYyA9IGxvZGFzaFttZXRob2ROYW1lXTtcbiAgICAgIGlmIChsb2Rhc2hGdW5jKSB7XG4gICAgICAgIHZhciBrZXkgPSBsb2Rhc2hGdW5jLm5hbWUgKyAnJztcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlYWxOYW1lcywga2V5KSkge1xuICAgICAgICAgIHJlYWxOYW1lc1trZXldID0gW107XG4gICAgICAgIH1cbiAgICAgICAgcmVhbE5hbWVzW2tleV0ucHVzaCh7ICduYW1lJzogbWV0aG9kTmFtZSwgJ2Z1bmMnOiBsb2Rhc2hGdW5jIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmVhbE5hbWVzW2NyZWF0ZUh5YnJpZCh1bmRlZmluZWQsIFdSQVBfQklORF9LRVlfRkxBRykubmFtZV0gPSBbe1xuICAgICAgJ25hbWUnOiAnd3JhcHBlcicsXG4gICAgICAnZnVuYyc6IHVuZGVmaW5lZFxuICAgIH1dO1xuXG4gICAgLy8gQWRkIG1ldGhvZHMgdG8gYExhenlXcmFwcGVyYC5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuY2xvbmUgPSBsYXp5Q2xvbmU7XG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnJldmVyc2UgPSBsYXp5UmV2ZXJzZTtcbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUudmFsdWUgPSBsYXp5VmFsdWU7XG5cbiAgICAvLyBBZGQgY2hhaW4gc2VxdWVuY2UgbWV0aG9kcyB0byB0aGUgYGxvZGFzaGAgd3JhcHBlci5cbiAgICBsb2Rhc2gucHJvdG90eXBlLmF0ID0gd3JhcHBlckF0O1xuICAgIGxvZGFzaC5wcm90b3R5cGUuY2hhaW4gPSB3cmFwcGVyQ2hhaW47XG4gICAgbG9kYXNoLnByb3RvdHlwZS5jb21taXQgPSB3cmFwcGVyQ29tbWl0O1xuICAgIGxvZGFzaC5wcm90b3R5cGUubmV4dCA9IHdyYXBwZXJOZXh0O1xuICAgIGxvZGFzaC5wcm90b3R5cGUucGxhbnQgPSB3cmFwcGVyUGxhbnQ7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5yZXZlcnNlID0gd3JhcHBlclJldmVyc2U7XG4gICAgbG9kYXNoLnByb3RvdHlwZS50b0pTT04gPSBsb2Rhc2gucHJvdG90eXBlLnZhbHVlT2YgPSBsb2Rhc2gucHJvdG90eXBlLnZhbHVlID0gd3JhcHBlclZhbHVlO1xuXG4gICAgLy8gQWRkIGxhenkgYWxpYXNlcy5cbiAgICBsb2Rhc2gucHJvdG90eXBlLmZpcnN0ID0gbG9kYXNoLnByb3RvdHlwZS5oZWFkO1xuXG4gICAgaWYgKHN5bUl0ZXJhdG9yKSB7XG4gICAgICBsb2Rhc2gucHJvdG90eXBlW3N5bUl0ZXJhdG9yXSA9IHdyYXBwZXJUb0l0ZXJhdG9yO1xuICAgIH1cbiAgICByZXR1cm4gbG9kYXNoO1xuICB9KTtcblxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAvLyBFeHBvcnQgbG9kYXNoLlxuICB2YXIgXyA9IHJ1bkluQ29udGV4dCgpO1xuXG4gIC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIGNvbmRpdGlvbiBwYXR0ZXJucyBsaWtlOlxuICBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcbiAgICAvLyBFeHBvc2UgTG9kYXNoIG9uIHRoZSBnbG9iYWwgb2JqZWN0IHRvIHByZXZlbnQgZXJyb3JzIHdoZW4gTG9kYXNoIGlzXG4gICAgLy8gbG9hZGVkIGJ5IGEgc2NyaXB0IHRhZyBpbiB0aGUgcHJlc2VuY2Ugb2YgYW4gQU1EIGxvYWRlci5cbiAgICAvLyBTZWUgaHR0cDovL3JlcXVpcmVqcy5vcmcvZG9jcy9lcnJvcnMuaHRtbCNtaXNtYXRjaCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIC8vIFVzZSBgXy5ub0NvbmZsaWN0YCB0byByZW1vdmUgTG9kYXNoIGZyb20gdGhlIGdsb2JhbCBvYmplY3QuXG4gICAgcm9vdC5fID0gXztcblxuICAgIC8vIERlZmluZSBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlIHNvLCB0aHJvdWdoIHBhdGggbWFwcGluZywgaXQgY2FuIGJlXG4gICAgLy8gcmVmZXJlbmNlZCBhcyB0aGUgXCJ1bmRlcnNjb3JlXCIgbW9kdWxlLlxuICAgIGRlZmluZShmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBfO1xuICAgIH0pO1xuICB9XG4gIC8vIENoZWNrIGZvciBgZXhwb3J0c2AgYWZ0ZXIgYGRlZmluZWAgaW4gY2FzZSBhIGJ1aWxkIG9wdGltaXplciBhZGRzIGl0LlxuICBlbHNlIGlmIChmcmVlTW9kdWxlKSB7XG4gICAgLy8gRXhwb3J0IGZvciBOb2RlLmpzLlxuICAgIChmcmVlTW9kdWxlLmV4cG9ydHMgPSBfKS5fID0gXztcbiAgICAvLyBFeHBvcnQgZm9yIENvbW1vbkpTIHN1cHBvcnQuXG4gICAgZnJlZUV4cG9ydHMuXyA9IF87XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gRXhwb3J0IHRvIHRoZSBnbG9iYWwgb2JqZWN0LlxuICAgIHJvb3QuXyA9IF87XG4gIH1cbn0uY2FsbCh0aGlzKSk7XG4iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5pc1JlYWR5XG4gICAgPyBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgeyBzdGF0aWNDbGFzczogXCJzdG9jay1hcHAgY29udGFpbmVyLWZsdWlkXCIsIGF0dHJzOiB7IGlkOiBcImFwcFwiIH0gfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiU3RvY2tIZWFkZXJcIiksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcIlNlYXJjaFwiLCB7XG4gICAgICAgICAgICBvbjogeyBzZWFyY2g6IF92bS5vblNlYXJjaCwgYXBwbHlGaWx0ZXI6IF92bS5hcHBseUZpbHRlciB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uaXNPdmVydmlld1xuICAgICAgICAgICAgPyBfYyhcIkxvd0ZpbHRlclwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgZmlsdGVyczogX3ZtLmZpbHRlcnMgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBsb3dTdG9ja0NoZWNrZWQ6IF92bS5vbkxvd1N0b2NrQ2hlY2tlZCB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJjYXJkIGNvbnRhaW5lci1mbHVpZCBwYS0yIGNsZWFyZml4XCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJyb3V0ZXItdmlld1wiLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwidmlld1wiLFxuICAgICAgICAgICAgICAgIG9uOiB7IHJlc2V0RmlsdGVyczogX3ZtLnJlc2V0RmlsdGVycywgZmV0Y2g6IF92bS5mZXRjaCB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcIlBTUGFnaW5hdGlvblwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIFwiY3VycmVudC1pbmRleFwiOiBfdm0uY3VycmVudFBhZ2luYXRpb24sXG4gICAgICAgICAgICAgICAgICBcInBhZ2VzLWNvdW50XCI6IF92bS5wYWdlc0NvdW50XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBwYWdlQ2hhbmdlZDogX3ZtLm9uUGFnZUNoYW5nZWQgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgIClcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hcHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9hcHAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTEzMTE3M2MyJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vYXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzEzMTE3M2MyJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzEzMTE3M2MyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzEzMTE3M2MyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9hcHAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTEzMTE3M2MyJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzEzMTE3M2MyJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJqcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9hcHAudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcIm5hdlwiLCB7IGF0dHJzOiB7IFwiYXJpYS1sYWJlbFwiOiBcIkJyZWFkY3J1bWJcIiB9IH0sIFtcbiAgICBfYyhcIm9sXCIsIHsgc3RhdGljQ2xhc3M6IFwiYnJlYWRjcnVtYlwiIH0sIFtcbiAgICAgIF9jKFwibGlcIiwgeyBzdGF0aWNDbGFzczogXCJicmVhZGNydW1iLWl0ZW1cIiB9LCBbXG4gICAgICAgIF9jKFwiYVwiLCB7IGF0dHJzOiB7IGhyZWY6IF92bS5jYXRhbG9nTGluayB9IH0sIFtcbiAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS50cmFucyhcImxpbmtfY2F0YWxvZ1wiKSkpXG4gICAgICAgIF0pXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImxpXCIsIHsgc3RhdGljQ2xhc3M6IFwiYnJlYWRjcnVtYi1pdGVtXCIgfSwgW1xuICAgICAgICBfYyhcImFcIiwgeyBhdHRyczogeyBocmVmOiBfdm0uc3RvY2tMaW5rIH0gfSwgW1xuICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnRyYW5zKFwibGlua19zdG9ja1wiKSkpXG4gICAgICAgIF0pXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImxpXCIsIHsgc3RhdGljQ2xhc3M6IFwiYnJlYWRjcnVtYi1pdGVtIGFjdGl2ZVwiIH0sIFtcbiAgICAgICAgX3ZtLmlzT3ZlcnZpZXdcbiAgICAgICAgICA/IF9jKFwic3BhblwiLCBbX3ZtLl92KF92bS5fcyhfdm0udHJhbnMoXCJsaW5rX292ZXJ2aWV3XCIpKSldKVxuICAgICAgICAgIDogX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS50cmFucyhcImxpbmtfbW92ZW1lbnRzXCIpKSldKVxuICAgICAgXSlcbiAgICBdKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9icmVhZGNydW1iLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2JyZWFkY3J1bWIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9icmVhZGNydW1iLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NzMxOThhNiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9icmVhZGNydW1iLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vYnJlYWRjcnVtYi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi90bXAvcHJlc3Rhc2hvcC9hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3NzMxOThhNicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3NzMxOThhNicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3NzMxOThhNicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vYnJlYWRjcnVtYi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzczMTk4YTYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNzczMTk4YTYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL2hlYWRlci9icmVhZGNydW1iLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBhdHRyczogeyBpZDogXCJmaWx0ZXJzLWNvbnRhaW5lclwiIH0gfSwgW1xuICAgIF9jKFxuICAgICAgXCJidXR0b25cIixcbiAgICAgIHtcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwic2VhcmNoLWlucHV0IGNvbGxhcHNlLWJ1dHRvblwiLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgXCJkYXRhLXRvZ2dsZVwiOiBcImNvbGxhcHNlXCIsXG4gICAgICAgICAgXCJkYXRhLXRhcmdldFwiOiBcIiNmaWx0ZXJzXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwibWF0ZXJpYWwtaWNvbnMgbXItMVwiIH0sIFtcbiAgICAgICAgICBfdm0uX3YoXCJmaWx0ZXJfbGlzdFwiKVxuICAgICAgICBdKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwibWF0ZXJpYWwtaWNvbnMgZmxvYXQtcmlnaHQgXCIgfSwgW1xuICAgICAgICAgIF92bS5fdihcImtleWJvYXJkX2Fycm93X2Rvd25cIilcbiAgICAgICAgXSksXG4gICAgICAgIF92bS5fdihcIlxcbiAgICBcIiArIF92bS5fcyhfdm0udHJhbnMoXCJidXR0b25fYWR2YW5jZWRfZmlsdGVyXCIpKSArIFwiXFxuICBcIilcbiAgICAgIF1cbiAgICApLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAgeyBzdGF0aWNDbGFzczogXCJjb250YWluZXItZmx1aWQgY29sbGFwc2VcIiwgYXR0cnM6IHsgaWQ6IFwiZmlsdGVyc1wiIH0gfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9LCBbXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjb2wtbGctNFwiIH0sIFtcbiAgICAgICAgICAgIF92bS5pc092ZXJ2aWV3XG4gICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJweS0zXCIgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJoMlwiLCBbX3ZtLl92KF92bS5fcyhfdm0udHJhbnMoXCJmaWx0ZXJfc3VwcGxpZXJzXCIpKSldKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJGaWx0ZXJDb21wb25lbnRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImZpbHRlci1zdXBwbGllcnNcIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IF92bS50cmFucyhcImZpbHRlcl9zZWFyY2hfc3VwcGxpZXJzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdDogdGhpcy4kc3RvcmUuZ2V0dGVycy5zdXBwbGllcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIml0ZW0taWRcIjogXCJzdXBwbGllcl9pZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjogeyBhY3RpdmU6IF92bS5vbkZpbHRlckFjdGl2ZSB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInB5LTNcIiB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcImgyXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS50cmFucyhcImZpbHRlcl9tb3ZlbWVudHNfdHlwZVwiKSkpXG4gICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICBcIlBTU2VsZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IF92bS5tb3ZlbWVudHNUeXBlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpdGVtLWlkXCI6IFwiaWRfc3RvY2tfbXZ0X3JlYXNvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIml0ZW0tbmFtZVwiOiBcIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNoYW5nZTogX3ZtLm9uQ2hhbmdlIH1cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS50cmFucyhcIm5vbmVcIikpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJoMlwiLCB7IHN0YXRpY0NsYXNzOiBcIm10LTRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udHJhbnMoXCJmaWx0ZXJfbW92ZW1lbnRzX2VtcGxveWVlXCIpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJQU1NlbGVjdFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBfdm0uZW1wbG95ZWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIml0ZW0taWRcIjogXCJpZF9lbXBsb3llZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIml0ZW0tbmFtZVwiOiBcIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNoYW5nZTogX3ZtLm9uQ2hhbmdlIH1cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS50cmFucyhcIm5vbmVcIikpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJoMlwiLCB7IHN0YXRpY0NsYXNzOiBcIm10LTRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udHJhbnMoXCJmaWx0ZXJfbW92ZW1lbnRzX3BlcmlvZFwiKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiZm9ybVwiLCB7IHN0YXRpY0NsYXNzOiBcInJvd1wiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImNvbC1tZC02XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJsYWJlbFwiLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0udHJhbnMoXCJmaWx0ZXJfZGF0ZXBpY2tlcl9mcm9tXCIpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiUFNEYXRlUGlja2VyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NhbGU6IF92bS5sb2NhbGUsIHR5cGU6IFwic3VwXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBkcENoYW5nZTogX3ZtLm9uRHBDaGFuZ2UsIHJlc2V0OiBfdm0ub25DbGVhciB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImNvbC1tZC02XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJsYWJlbFwiLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0udHJhbnMoXCJmaWx0ZXJfZGF0ZXBpY2tlcl90b1wiKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcIlBTRGF0ZVBpY2tlclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jYWxlOiBfdm0ubG9jYWxlLCB0eXBlOiBcImluZlwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgZHBDaGFuZ2U6IF92bS5vbkRwQ2hhbmdlLCByZXNldDogX3ZtLm9uQ2xlYXIgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29sLWxnLTRcIiB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJweS0zXCIgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwiaDJcIiwgW192bS5fdihfdm0uX3MoX3ZtLnRyYW5zKFwiZmlsdGVyX2NhdGVnb3JpZXNcIikpKV0pLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX2MoXCJGaWx0ZXJDb21wb25lbnRcIiwge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZmlsdGVyLWNhdGVnb3JpZXNcIixcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0udHJhbnMoXCJmaWx0ZXJfc2VhcmNoX2NhdGVnb3J5XCIpLFxuICAgICAgICAgICAgICAgICAgICBsaXN0OiBfdm0uY2F0ZWdvcmllc0xpc3QsXG4gICAgICAgICAgICAgICAgICAgIFwiaXRlbS1pZFwiOiBcImlkX2NhdGVnb3J5XCIsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7IGFjdGl2ZTogX3ZtLm9uRmlsdGVyQWN0aXZlIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImNvbC1sZy00XCIgfSwgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicHktM1wiIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcImgyXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS50cmFucyhcImZpbHRlcl9zdGF0dXNcIikpKV0pLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX2MoXCJQU1JhZGlvXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcImVuYWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogX3ZtLnRyYW5zKFwiZmlsdGVyX3N0YXR1c19lbmFibGVcIiksXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCIxXCJcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBvbjogeyBjaGFuZ2U6IF92bS5vblJhZGlvQ2hhbmdlIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF9jKFwiUFNSYWRpb1wiLCB7XG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCJkaXNhYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBfdm0udHJhbnMoXCJmaWx0ZXJfc3RhdHVzX2Rpc2FibGVcIiksXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCIwXCJcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBvbjogeyBjaGFuZ2U6IF92bS5vblJhZGlvQ2hhbmdlIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF9jKFwiUFNSYWRpb1wiLCB7XG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCJhbGxcIixcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF92bS50cmFucyhcImZpbHRlcl9zdGF0dXNfYWxsXCIpLFxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJudWxsXCJcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBvbjogeyBjaGFuZ2U6IF92bS5vblJhZGlvQ2hhbmdlIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSlcbiAgICAgIF1cbiAgICApXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2ZpbHRlcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmlsdGVycy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2ZpbHRlcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTllNTBkNTMwJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2ZpbHRlcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9maWx0ZXJzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzllNTBkNTMwJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzllNTBkNTMwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzllNTBkNTMwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9maWx0ZXJzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05ZTUwZDUzMCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc5ZTUwZDUzMCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvaGVhZGVyL2ZpbHRlcnMudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwiZmlsdGVyLWNvbnRhaW5lclwiIH0sXG4gICAgW1xuICAgICAgIV92bS5oYXNDaGlsZHJlblxuICAgICAgICA/IF9jKFwiUFNUYWdzXCIsIHtcbiAgICAgICAgICAgIHJlZjogXCJ0YWdzXCIsXG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJmb3JtLWNvbnRyb2wgc2VhcmNoIHNlYXJjaC1pbnB1dCBtYi0yXCIsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICB0YWdzOiBfdm0udGFncyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IF92bS5oYXNQbGFjZWhvbGRlciA/IF92bS5wbGFjZWhvbGRlciA6IFwiXCIsXG4gICAgICAgICAgICAgIFwiaGFzLWljb25cIjogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiB7IHRhZ0NoYW5nZTogX3ZtLm9uVGFnQ2hhbmdlZCwgdHlwaW5nOiBfdm0ub25UeXBpbmcgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmhhc0NoaWxkcmVuXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfdm0uaXNPdmVydmlld1xuICAgICAgICAgICAgICAgID8gX3ZtLl9tKDApXG4gICAgICAgICAgICAgICAgOiBfYyhcIlBTVHJlZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHJlZjogXCJ0cmVlXCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJoYXMtY2hlY2tib3hcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBtb2RlbDogX3ZtLmxpc3QsXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zOiBfdm0uUFNUcmVlVHJhbnNsYXRpb25zXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7IGNoZWNrZWQ6IF92bS5vbkNoZWNrIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfYyhcbiAgICAgICAgICAgIFwidWxcIixcbiAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwibXQtMVwiIH0sXG4gICAgICAgICAgICBfdm0uX2woX3ZtLmdldEl0ZW1zKCksIGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICBcImxpXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbS52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaXRlbS52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIGtleTogaW5kZXgsXG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJpdGVtXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiUFNUcmVlSXRlbVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGl0ZW1bX3ZtLmxhYmVsXSxcbiAgICAgICAgICAgICAgICAgICAgICBtb2RlbDogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBcImhhcy1jaGVja2JveFwiOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7IGNoZWNrZWQ6IF92bS5vbkNoZWNrIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgMFxuICAgICAgICAgIClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtcbiAgZnVuY3Rpb24oKSB7XG4gICAgdmFyIF92bSA9IHRoaXNcbiAgICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgICByZXR1cm4gX2MoXCJQU1RyZWVcIiwge1xuICAgICAgcmVmOiBcInRyZWVcIixcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIFwiaGFzLWNoZWNrYm94XCI6IHRydWUsXG4gICAgICAgIG1vZGVsOiBfdm0ubGlzdCxcbiAgICAgICAgdHJhbnNsYXRpb25zOiBfdm0uUFNUcmVlVHJhbnNsYXRpb25zXG4gICAgICB9LFxuICAgICAgb246IHsgY2hlY2tlZDogX3ZtLm9uQ2hlY2sgfVxuICAgIH0pXG4gIH1cbl1cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2ZpbHRlci1jb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmlsdGVyLWNvbXBvbmVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2ZpbHRlci1jb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE5N2UwNTQyJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2ZpbHRlci1jb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9maWx0ZXItY29tcG9uZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzE5N2UwNTQyJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzE5N2UwNTQyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzE5N2UwNTQyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9maWx0ZXItY29tcG9uZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xOTdlMDU0MiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcxOTdlMDU0MicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvaGVhZGVyL2ZpbHRlcnMvZmlsdGVyLWNvbXBvbmVudC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29udGVudC10b3BiYXIgY29udGFpbmVyLWZsdWlkXCIgfSwgW1xuICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93IHB5LTJcIiB9LCBbXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgeyBzdGF0aWNDbGFzczogXCJjb2wgcm93IG1sLTFcIiB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcIlBTQ2hlY2tib3hcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVmOiBcImxvdy1maWx0ZXJcIixcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwibXQtMVwiLFxuICAgICAgICAgICAgICBhdHRyczogeyBpZDogXCJsb3ctZmlsdGVyXCIgfSxcbiAgICAgICAgICAgICAgb246IHsgY2hlY2tlZDogX3ZtLm9uQ2hlY2sgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwibWwtMlwiLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc2xvdDogXCJsYWJlbFwiIH0sXG4gICAgICAgICAgICAgICAgICBzbG90OiBcImxhYmVsXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS50cmFucyhcImZpbHRlcl9sb3dfc3RvY2tcIikpKV1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXVxuICAgICAgICAgIClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgXCJjb250ZW50LXRvcGJhci1yaWdodCBjb2wgbXItMyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1lbmRcIlxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJhXCIsIHsgYXR0cnM6IHsgaHJlZjogX3ZtLnN0b2NrRXhwb3J0VXJsIH0gfSwgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIFwiZGF0YS10b2dnbGVcIjogXCJwc3Rvb2x0aXBcIixcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiBfdm0uc3RvY2tFeHBvcnRUaXRsZSxcbiAgICAgICAgICAgICAgICAgIFwiZGF0YS1odG1sXCI6IFwidHJ1ZVwiLFxuICAgICAgICAgICAgICAgICAgXCJkYXRhLXBsYWNlbWVudFwiOiBcInRvcFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwibWF0ZXJpYWwtaWNvbnNcIiB9LCBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCJjbG91ZF91cGxvYWRcIilcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiYVwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJtbC0yXCIsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IGhyZWY6IF92bS5zdG9ja0ltcG9ydFVybCwgdGFyZ2V0OiBcIl9ibGFua1wiIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiZGF0YS10b2dnbGVcIjogXCJwc3Rvb2x0aXBcIixcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF92bS5zdG9ja0ltcG9ydFRpdGxlLFxuICAgICAgICAgICAgICAgICAgICBcImRhdGEtaHRtbFwiOiBcInRydWVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJkYXRhLXBsYWNlbWVudFwiOiBcInRvcFwiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJtYXRlcmlhbC1pY29uc1wiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiY2xvdWRfZG93bmxvYWRcIilcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICApXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbG93LWZpbHRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9sb3ctZmlsdGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vbG93LWZpbHRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDI2MWViNDgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vbG93LWZpbHRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2xvdy1maWx0ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvdG1wL3ByZXN0YXNob3AvYWRtaW4tZGV2L3RoZW1lcy9uZXctdGhlbWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMDI2MWViNDgnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMDI2MWViNDgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMDI2MWViNDgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2xvdy1maWx0ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAyNjFlYjQ4JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzAyNjFlYjQ4Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJqcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9oZWFkZXIvZmlsdGVycy9sb3ctZmlsdGVyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJyb3cgbWItMlwiLCBhdHRyczogeyBpZDogXCJzZWFyY2hcIiB9IH0sIFtcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7IHN0YXRpY0NsYXNzOiBcImNvbC1tZC04XCIgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJtYi0yXCIgfSwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJmb3JtXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInNlYXJjaC1mb3JtXCIsXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgc3VibWl0OiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcImxhYmVsXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS50cmFucyhcInByb2R1Y3Rfc2VhcmNoXCIpKSldKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImlucHV0LWdyb3VwXCIgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcIlBTVGFnc1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIHJlZjogXCJwc1RhZ3NcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdGFnczogX3ZtLnRhZ3MgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHsgdGFnQ2hhbmdlOiBfdm0ub25TZWFyY2ggfVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiaW5wdXQtZ3JvdXAtYXBwZW5kXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQU0J1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzZWFyY2gtYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHByaW1hcnk6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5vbkNsaWNrIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm1hdGVyaWFsLWljb25zXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcInNlYXJjaFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnRyYW5zKFwiYnV0dG9uX3NlYXJjaFwiKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIF0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcIkZpbHRlcnNcIiwgeyBvbjogeyBhcHBseUZpbHRlcjogX3ZtLmFwcGx5RmlsdGVyIH0gfSlcbiAgICAgIF0sXG4gICAgICAxXG4gICAgKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFxuICAgICAgXCJkaXZcIixcbiAgICAgIHsgc3RhdGljQ2xhc3M6IFwiY29sLW1kLTQgYWxlcnQtYm94XCIgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJ0cmFuc2l0aW9uXCIsXG4gICAgICAgICAgeyBhdHRyczogeyBuYW1lOiBcImZhZGVcIiB9IH0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAgX3ZtLnNob3dBbGVydFxuICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgXCJQU0FsZXJ0XCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IFwiYWxlcnQtdHlwZVwiOiBfdm0uYWxlcnRUeXBlLCBcImhhcy1jbG9zZVwiOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsb3NlQWxlcnQ6IF92bS5vbkNsb3NlQWxlcnQgfVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS50cmFucyhcImFsZXJ0X2J1bGtfZWRpdFwiKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogX2MoXCJzcGFuXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udHJhbnMoXCJub3RpZmljYXRpb25fc3RvY2tfdXBkYXRlZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICBdLFxuICAgICAgICAgIDFcbiAgICAgICAgKVxuICAgICAgXSxcbiAgICAgIDFcbiAgICApXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NlYXJjaC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zZWFyY2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9zZWFyY2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI3NGFmMTRiJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3NlYXJjaC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3NlYXJjaC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi90bXAvcHJlc3Rhc2hvcC9hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcyNzRhZjE0YicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcyNzRhZjE0YicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcyNzRhZjE0YicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vc2VhcmNoLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNzRhZjE0YiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcyNzRhZjE0YicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvaGVhZGVyL3NlYXJjaC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJoZWFkZXItdG9vbGJhclwiIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiY29udGFpbmVyLWZsdWlkXCIgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiQnJlYWRjcnVtYlwiKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwidGl0bGUtcm93XCIgfSwgW1xuICAgICAgICAgICAgX2MoXCJoMVwiLCB7IHN0YXRpY0NsYXNzOiBcInRpdGxlXCIgfSwgW1xuICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiICsgX3ZtLl9zKF92bS50cmFucyhcImhlYWRfdGl0bGVcIikpICsgXCJcXG4gICAgICBcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJUYWJzXCIpXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3RvY2staGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N0b2NrLWhlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3N0b2NrLWhlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTMwNGVhZjImXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vc3RvY2staGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vc3RvY2staGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzkzMDRlYWYyJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzkzMDRlYWYyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzkzMDRlYWYyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9zdG9jay1oZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTkzMDRlYWYyJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzkzMDRlYWYyJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJqcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9oZWFkZXIvc3RvY2staGVhZGVyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcInBhZ2UtaGVhZC10YWJzXCIsIGF0dHJzOiB7IGlkOiBcImhlYWRfdGFic1wiIH0gfSxcbiAgICBbXG4gICAgICBfYyhcInVsXCIsIHsgc3RhdGljQ2xhc3M6IFwibmF2IG5hdi1waWxsc1wiIH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwibmF2LWl0ZW1cIiB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcInJvdXRlci1saW5rXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJuYXYtbGlua1wiLFxuICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZTogX3ZtLmlzT3ZlcnZpZXcgfSxcbiAgICAgICAgICAgICAgICBhdHRyczogeyBcImRhdGEtdG9nZ2xlXCI6IFwidGFiXCIsIHRvOiBcIi9cIiwgcm9sZTogXCJ0YWJcIiB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgKyBfdm0uX3MoX3ZtLnRyYW5zKFwibWVudV9zdG9ja1wiKSkgKyBcIlxcbiAgICAgIFwiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSxcbiAgICAgICAgICAxXG4gICAgICAgICksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcIm5hdi1pdGVtXCIgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJyb3V0ZXItbGlua1wiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwibmF2LWxpbmtcIixcbiAgICAgICAgICAgICAgICBjbGFzczogeyBhY3RpdmU6IF92bS5pc01vdmVtZW50cyB9LFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IFwiZGF0YS10b2dnbGVcIjogXCJ0YWJcIiwgdG86IFwiL21vdmVtZW50c1wiLCByb2xlOiBcInRhYlwiIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udHJhbnMoXCJtZW51X21vdmVtZW50c1wiKSkgK1xuICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgIFwiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSxcbiAgICAgICAgICAxXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3RhYnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGFicy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3RhYnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTkzMDRhYTNlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3RhYnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi90YWJzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzkzMDRhYTNlJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzkzMDRhYTNlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzkzMDRhYTNlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi90YWJzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05MzA0YWEzZSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc5MzA0YWEzZScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvaGVhZGVyL3RhYnMudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInNlY3Rpb25cIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcInN0b2NrLW1vdmVtZW50c1wiIH0sXG4gICAgW1xuICAgICAgX2MoXCJQU1RhYmxlXCIsIHsgc3RhdGljQ2xhc3M6IFwibXQtMVwiIH0sIFtcbiAgICAgICAgX2MoXCJ0aGVhZFwiLCBbXG4gICAgICAgICAgX2MoXCJ0clwiLCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJ0aFwiLFxuICAgICAgICAgICAgICB7IGF0dHJzOiB7IHdpZHRoOiBcIjMwJVwiIH0gfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJQU1NvcnRcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogXCJwcm9kdWN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJjdXJyZW50LXNvcnRcIjogX3ZtLmN1cnJlbnRTb3J0XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7IHNvcnQ6IF92bS5zb3J0IH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udHJhbnMoXCJ0aXRsZV9wcm9kdWN0XCIpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcInRoXCIsXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiUFNTb3J0XCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IFwicmVmZXJlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJjdXJyZW50LXNvcnRcIjogX3ZtLmN1cnJlbnRTb3J0XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7IHNvcnQ6IF92bS5zb3J0IH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udHJhbnMoXCJ0aXRsZV9yZWZlcmVuY2VcIikpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXCJ0aFwiLCBbXG4gICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnRyYW5zKFwidGl0bGVfbW92ZW1lbnRzX3R5cGVcIikpICtcbiAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcInRoXCIsIHsgc3RhdGljQ2xhc3M6IFwidGV4dC1jZW50ZXJcIiB9LCBbXG4gICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnRyYW5zKFwidGl0bGVfcXVhbnRpdHlcIikpICtcbiAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJ0aFwiLFxuICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInRleHQtY2VudGVyXCIgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJQU1NvcnRcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogXCJkYXRlX2FkZFwiLFxuICAgICAgICAgICAgICAgICAgICAgIFwiY3VycmVudC1zb3J0XCI6IF92bS5jdXJyZW50U29ydFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvbjogeyBzb3J0OiBfdm0uc29ydCB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnRyYW5zKFwidGl0bGVfZGF0ZVwiKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcInRoXCIsIFtcbiAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udHJhbnMoXCJ0aXRsZV9lbXBsb3llZVwiKSkgK1xuICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgXSlcbiAgICAgICAgXSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwidGJvZHlcIixcbiAgICAgICAgICBbXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ1xuICAgICAgICAgICAgICA/IF9jKFwidHJcIiwgW1xuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgICAgeyBhdHRyczogeyBjb2xzcGFuOiBcIjZcIiB9IH0sXG4gICAgICAgICAgICAgICAgICAgIF92bS5fbCgzLCBmdW5jdGlvbihuLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUFNMb2FkZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHsga2V5OiBpbmRleCwgc3RhdGljQ2xhc3M6IFwibXQtMVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJiYWNrZ3JvdW5kLW1hc2tlciBoZWFkZXItdG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJiYWNrZ3JvdW5kLW1hc2tlciBoZWFkZXItbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYmFja2dyb3VuZC1tYXNrZXIgaGVhZGVyLWJvdHRvbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYmFja2dyb3VuZC1tYXNrZXIgc3ViaGVhZGVyLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImJhY2tncm91bmQtbWFza2VyIHN1YmhlYWRlci1ib3R0b21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICA6IF92bS5lbXB0eU1vdmVtZW50c1xuICAgICAgICAgICAgICA/IF9jKFwidHJcIiwgW1xuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgICAgeyBhdHRyczogeyBjb2xzcGFuOiBcIjZcIiB9IH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUFNBbGVydFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWxlcnQtdHlwZVwiOiBcIkFMRVJUX1RZUEVfV0FSTklOR1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFzLWNsb3NlXCI6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udHJhbnMoXCJub19wcm9kdWN0XCIpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgOiBfdm0uX2woX3ZtLm1vdmVtZW50cywgZnVuY3Rpb24ocHJvZHVjdCwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcIk1vdmVtZW50TGluZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHByb2R1Y3Q6IHByb2R1Y3QgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgIF0sXG4gICAgICAgICAgMlxuICAgICAgICApXG4gICAgICBdKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA5ZGYwYzcwJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvdG1wL3ByZXN0YXNob3AvYWRtaW4tZGV2L3RoZW1lcy9uZXctdGhlbWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMDlkZjBjNzAnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMDlkZjBjNzAnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMDlkZjBjNzAnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wOWRmMGM3MCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcwOWRmMGM3MCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvbW92ZW1lbnRzL2luZGV4LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJ0clwiLCBbXG4gICAgX2MoXCJ0ZFwiLCBbXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgeyBzdGF0aWNDbGFzczogXCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJQU01lZGlhXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIixcbiAgICAgICAgICAgICAgYXR0cnM6IHsgdGh1bWJuYWlsOiBfdm0udGh1bWJuYWlsIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwicFwiLCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnByb2R1Y3QucHJvZHVjdF9uYW1lKSArXG4gICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBfdm0uaGFzQ29tYmluYXRpb25cbiAgICAgICAgICAgICAgICAgID8gX2MoXCJzbWFsbFwiLCBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJiclwiKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5jb21iaW5hdGlvbk5hbWUpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgXSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcInRkXCIsIFtcbiAgICAgIF92bS5fdihcIlxcbiAgICBcIiArIF92bS5fcyhfdm0ucHJvZHVjdC5wcm9kdWN0X3JlZmVyZW5jZSkgKyBcIlxcbiAgXCIpXG4gICAgXSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcInRkXCIsIFtcbiAgICAgIF92bS5vcmRlckxpbmtcbiAgICAgICAgPyBfYyhcImFcIiwgeyBhdHRyczogeyBocmVmOiBfdm0ub3JkZXJMaW5rLCB0YXJnZXQ6IFwiX2JsYW5rXCIgfSB9LCBbXG4gICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICBcIiArIF92bS5fcyhfdm0ucHJvZHVjdC5tb3ZlbWVudF9yZWFzb24pICsgXCJcXG4gICAgXCIpXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfYyhcInNwYW5cIiwgW192bS5fdihfdm0uX3MoX3ZtLnByb2R1Y3QubW92ZW1lbnRfcmVhc29uKSldKVxuICAgIF0pLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXCJ0ZFwiLCB7IHN0YXRpY0NsYXNzOiBcInRleHQtc20tY2VudGVyXCIgfSwgW1xuICAgICAgX2MoXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInF0eS1udW1iZXJcIiwgY2xhc3M6IHsgXCJpcy1wb3NpdGl2ZVwiOiBfdm0uaXNQb3NpdGl2ZSB9IH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0uaXNQb3NpdGl2ZVxuICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgW192bS5fdihcIitcIildKVxuICAgICAgICAgICAgOiBfYyhcInNwYW5cIiwgW192bS5fdihcIi1cIildKSxcbiAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICBcIiArIF92bS5fcyhfdm0ucXR5KSArIFwiXFxuICAgIFwiKVxuICAgICAgICBdXG4gICAgICApXG4gICAgXSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcInRkXCIsIHsgc3RhdGljQ2xhc3M6IFwidGV4dC1zbS1jZW50ZXJcIiB9LCBbXG4gICAgICBfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnByb2R1Y3QuZGF0ZV9hZGQpICsgXCJcXG4gIFwiKVxuICAgIF0pLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXCJ0ZFwiLCBbX3ZtLl92KFwiXFxuICAgIFwiICsgX3ZtLl9zKF92bS5lbXBsb3llZU5hbWUpICsgXCJcXG4gIFwiKV0pXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21vdmVtZW50LWxpbmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbW92ZW1lbnQtbGluZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL21vdmVtZW50LWxpbmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMyOGYzOTQ4JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL21vdmVtZW50LWxpbmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9tb3ZlbWVudC1saW5lLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzMyOGYzOTQ4JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzMyOGYzOTQ4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzMyOGYzOTQ4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9tb3ZlbWVudC1saW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zMjhmMzk0OCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCczMjhmMzk0OCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvbW92ZW1lbnRzL21vdmVtZW50LWxpbmUudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInNlY3Rpb25cIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcInN0b2NrLW92ZXJ2aWV3XCIgfSxcbiAgICBbXG4gICAgICBfYyhcIlByb2R1Y3RzQWN0aW9uc1wiKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcIlByb2R1Y3RzVGFibGVcIiwge1xuICAgICAgICBhdHRyczogeyBcImlzLWxvYWRpbmdcIjogX3ZtLmlzTG9hZGluZyB9LFxuICAgICAgICBvbjogeyBzb3J0OiBfdm0uc29ydCB9XG4gICAgICB9KVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJjYTRmMjJiJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvdG1wL3ByZXN0YXNob3AvYWRtaW4tZGV2L3RoZW1lcy9uZXctdGhlbWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMmNhNGYyMmInKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMmNhNGYyMmInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMmNhNGYyMmInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yY2E0ZjIyYiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcyY2E0ZjIyYicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvb3ZlcnZpZXcvaW5kZXgudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInRyXCIsIHsgY2xhc3M6IHsgXCJsb3ctc3RvY2tcIjogX3ZtLmxvd1N0b2NrIH0gfSwgW1xuICAgIF9jKFwidGRcIiwgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcIlBTQ2hlY2tib3hcIiwge1xuICAgICAgICAgICAgcmVmOiBfdm0uaWQsXG4gICAgICAgICAgICBhdHRyczogeyBpZDogX3ZtLmlkLCBtb2RlbDogX3ZtLnByb2R1Y3QgfSxcbiAgICAgICAgICAgIG9uOiB7IGNoZWNrZWQ6IF92bS5wcm9kdWN0Q2hlY2tlZCB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiUFNNZWRpYVwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1sLTJcIixcbiAgICAgICAgICAgICAgYXR0cnM6IHsgdGh1bWJuYWlsOiBfdm0udGh1bWJuYWlsIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwicFwiLCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnByb2R1Y3QucHJvZHVjdF9uYW1lKSArXG4gICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBfdm0uaGFzQ29tYmluYXRpb25cbiAgICAgICAgICAgICAgICAgID8gX2MoXCJzbWFsbFwiLCBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJiclwiKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5jb21iaW5hdGlvbk5hbWUpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgXSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcInRkXCIsIFtfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnJlZmVyZW5jZSkgKyBcIlxcbiAgXCIpXSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcInRkXCIsIFtfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnByb2R1Y3Quc3VwcGxpZXJfbmFtZSkgKyBcIlxcbiAgXCIpXSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0ucHJvZHVjdC5hY3RpdmVcbiAgICAgID8gX2MoXCJ0ZFwiLCB7IHN0YXRpY0NsYXNzOiBcInRleHQtc20tY2VudGVyXCIgfSwgW1xuICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm1hdGVyaWFsLWljb25zIGVuYWJsZVwiIH0sIFtfdm0uX3YoXCJjaGVja1wiKV0pXG4gICAgICAgIF0pXG4gICAgICA6IF9jKFwidGRcIiwgeyBzdGF0aWNDbGFzczogXCJ0ZXh0LXNtLWNlbnRlclwiIH0sIFtcbiAgICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJtYXRlcmlhbC1pY29ucyBkaXNhYmxlXCIgfSwgW192bS5fdihcImNsb3NlXCIpXSlcbiAgICAgICAgXSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcbiAgICAgIFwidGRcIixcbiAgICAgIHtcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwidGV4dC1zbS1jZW50ZXJcIixcbiAgICAgICAgY2xhc3M6IHsgXCJzdG9jay13YXJuaW5nXCI6IF92bS5sb3dTdG9jayB9XG4gICAgICB9LFxuICAgICAgW1xuICAgICAgICBfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnBoeXNpY2FsKSArIFwiXFxuICAgIFwiKSxcbiAgICAgICAgX3ZtLnVwZGF0ZWRRdHlcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInF0eS11cGRhdGVcIixcbiAgICAgICAgICAgICAgICBjbGFzczogeyBcInN0b2NrLXdhcm5pbmdcIjogX3ZtLmxvd1N0b2NrIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm1hdGVyaWFsLWljb25zXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwidHJlbmRpbmdfZmxhdFwiKVxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgIFwiICsgX3ZtLl9zKF92bS5waHlzaWNhbFF0eVVwZGF0ZWQpICsgXCJcXG4gICAgXCIpXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICBdXG4gICAgKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFxuICAgICAgXCJ0ZFwiLFxuICAgICAge1xuICAgICAgICBzdGF0aWNDbGFzczogXCJ0ZXh0LXNtLWNlbnRlclwiLFxuICAgICAgICBjbGFzczogeyBcInN0b2NrLXdhcm5pbmdcIjogX3ZtLmxvd1N0b2NrIH1cbiAgICAgIH0sXG4gICAgICBbXG4gICAgICAgIF92bS5fdihcbiAgICAgICAgICBcIlxcbiAgICBcIiArIF92bS5fcyhfdm0ucHJvZHVjdC5wcm9kdWN0X3Jlc2VydmVkX3F1YW50aXR5KSArIFwiXFxuICBcIlxuICAgICAgICApXG4gICAgICBdXG4gICAgKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFxuICAgICAgXCJ0ZFwiLFxuICAgICAge1xuICAgICAgICBzdGF0aWNDbGFzczogXCJ0ZXh0LXNtLWNlbnRlclwiLFxuICAgICAgICBjbGFzczogeyBcInN0b2NrLXdhcm5pbmdcIjogX3ZtLmxvd1N0b2NrIH1cbiAgICAgIH0sXG4gICAgICBbXG4gICAgICAgIF92bS5fdihcbiAgICAgICAgICBcIlxcbiAgICBcIiArIF92bS5fcyhfdm0ucHJvZHVjdC5wcm9kdWN0X2F2YWlsYWJsZV9xdWFudGl0eSkgKyBcIlxcbiAgICBcIlxuICAgICAgICApLFxuICAgICAgICBfdm0udXBkYXRlZFF0eVxuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwicXR5LXVwZGF0ZVwiLFxuICAgICAgICAgICAgICAgIGNsYXNzOiB7IFwic3RvY2std2FybmluZ1wiOiBfdm0ubG93U3RvY2sgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwibWF0ZXJpYWwtaWNvbnNcIiB9LCBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCJ0cmVuZGluZ19mbGF0XCIpXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgXCIgKyBfdm0uX3MoX3ZtLmF2YWlsYWJsZVF0eVVwZGF0ZWQpICsgXCJcXG4gICAgXCIpXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfdm0ubG93U3RvY2tcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN0b2NrLXdhcm5pbmcgaWNvIG1sLTJcIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgXCJkYXRhLXRvZ2dsZVwiOiBcInBzdG9vbHRpcFwiLFxuICAgICAgICAgICAgICAgICAgXCJkYXRhLXBsYWNlbWVudFwiOiBcInRvcFwiLFxuICAgICAgICAgICAgICAgICAgXCJkYXRhLWh0bWxcIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgICAgICB0aXRsZTogX3ZtLmxvd1N0b2NrTGV2ZWxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtfdm0uX3YoXCIhXCIpXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIF1cbiAgICApLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXG4gICAgICBcInRkXCIsXG4gICAgICB7IHN0YXRpY0NsYXNzOiBcInF0eS1zcGlubmVyIHRleHQtcmlnaHRcIiB9LFxuICAgICAgW1xuICAgICAgICBfYyhcIlNwaW5uZXJcIiwge1xuICAgICAgICAgIGF0dHJzOiB7IHByb2R1Y3Q6IF92bS5wcm9kdWN0IH0sXG4gICAgICAgICAgb246IHsgdXBkYXRlUHJvZHVjdFF0eTogX3ZtLnVwZGF0ZVByb2R1Y3RRdHkgfVxuICAgICAgICB9KVxuICAgICAgXSxcbiAgICAgIDFcbiAgICApXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3Byb2R1Y3QtbGluZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcm9kdWN0LWxpbmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcm9kdWN0LWxpbmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI1ZWM0MGM5JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3Byb2R1Y3QtbGluZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3Byb2R1Y3QtbGluZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi90bXAvcHJlc3Rhc2hvcC9hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcyNWVjNDBjOScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcyNWVjNDBjOScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcyNWVjNDBjOScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcHJvZHVjdC1saW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNWVjNDBjOSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcyNWVjNDBjOScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvYXBwL3BhZ2VzL3N0b2NrL2NvbXBvbmVudHMvb3ZlcnZpZXcvcHJvZHVjdC1saW5lLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJyb3cgcHJvZHVjdC1hY3Rpb25zXCIgfSwgW1xuICAgIF9jKFxuICAgICAgXCJkaXZcIixcbiAgICAgIHtcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwiY29sLW1kLTggcXR5IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIixcbiAgICAgICAgY2xhc3M6IHsgYWN0aXZlOiBfdm0uaXNGb2N1c2VkIH1cbiAgICAgIH0sXG4gICAgICBbXG4gICAgICAgIF9jKFwiUFNDaGVja2JveFwiLCB7XG4gICAgICAgICAgcmVmOiBcImJ1bGstYWN0aW9uXCIsXG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwibXQtM1wiLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBpZDogXCJidWxrLWFjdGlvblwiLFxuICAgICAgICAgICAgXCJpcy1pbmRldGVybWluYXRlXCI6IF92bS5pc0luZGV0ZXJtaW5hdGUoKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IHsgY2hlY2tlZDogX3ZtLmJ1bGtDaGVja2VkIH1cbiAgICAgICAgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJtbC0yXCIgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcInNtYWxsXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS50cmFucyhcInRpdGxlX2J1bGtcIikpKV0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFwiUFNOdW1iZXJcIiwge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJidWxrLXF0eVwiLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIGRhbmdlcjogX3ZtLmRhbmdlcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmJ1bGtFZGl0UXR5LFxuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IHRoaXMuaXNGb2N1c2VkXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgZm9jdXM6IF92bS5mb2N1c0luLFxuICAgICAgICAgICAgICAgIGJsdXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5mb2N1c091dCgkZXZlbnQpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjaGFuZ2U6IF92bS5vbkNoYW5nZSxcbiAgICAgICAgICAgICAgICBrZXl1cDogX3ZtLm9uS2V5VXBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdLFxuICAgICAgICAgIDFcbiAgICAgICAgKVxuICAgICAgXSxcbiAgICAgIDFcbiAgICApLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAgeyBzdGF0aWNDbGFzczogXCJjb2wtbWQtNFwiIH0sXG4gICAgICBbXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiUFNCdXR0b25cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJ1cGRhdGUtcXR5IGZsb2F0LXNtLXJpZ2h0IG15LTQgbXItMlwiLFxuICAgICAgICAgICAgY2xhc3M6IHsgXCJidG4tcHJpbWFyeVwiOiBfdm0uZGlzYWJsZWQgfSxcbiAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBfdm0uZGlzYWJsZWQsIHByaW1hcnk6IHRydWUgfSxcbiAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uc2VuZFF0eSB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJtYXRlcmlhbC1pY29uc1wiIH0sIFtfdm0uX3YoXCJlZGl0XCIpXSksXG4gICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgIFwiXFxuICAgICAgXCIgKyBfdm0uX3MoX3ZtLnRyYW5zKFwiYnV0dG9uX21vdmVtZW50X3R5cGVcIikpICsgXCJcXG4gICAgXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdXG4gICAgICAgIClcbiAgICAgIF0sXG4gICAgICAxXG4gICAgKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcm9kdWN0cy1hY3Rpb25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3Byb2R1Y3RzLWFjdGlvbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcm9kdWN0cy1hY3Rpb25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zMTMxOWZjYiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wcm9kdWN0cy1hY3Rpb25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcHJvZHVjdHMtYWN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi90bXAvcHJlc3Rhc2hvcC9hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCczMTMxOWZjYicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCczMTMxOWZjYicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCczMTMxOWZjYicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcHJvZHVjdHMtYWN0aW9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzEzMTlmY2ImXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMzEzMTlmY2InLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL292ZXJ2aWV3L3Byb2R1Y3RzLWFjdGlvbnMudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcIlBTVGFibGVcIiwgeyBzdGF0aWNDbGFzczogXCJtdC0xXCIgfSwgW1xuICAgIF9jKFwidGhlYWRcIiwgW1xuICAgICAgX2MoXCJ0clwiLCB7IHN0YXRpY0NsYXNzOiBcImNvbHVtbi1oZWFkZXJzXCIgfSwgW1xuICAgICAgICBfYyhcbiAgICAgICAgICBcInRoXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwicHJvZHVjdC10aXRsZVwiLFxuICAgICAgICAgICAgYXR0cnM6IHsgc2NvcGU6IFwiY29sXCIsIHdpZHRoOiBcIjI3JVwiIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcIlBTU29ydFwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgb3JkZXI6IFwicHJvZHVjdFwiLCBcImN1cnJlbnQtc29ydFwiOiBfdm0uY3VycmVudFNvcnQgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBzb3J0OiBfdm0uc29ydCB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udHJhbnMoXCJ0aXRsZV9wcm9kdWN0XCIpKSArXG4gICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0sXG4gICAgICAgICAgMVxuICAgICAgICApLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcInRoXCIsXG4gICAgICAgICAgeyBhdHRyczogeyBzY29wZTogXCJjb2xcIiB9IH0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiUFNTb3J0XCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBvcmRlcjogXCJyZWZlcmVuY2VcIiwgXCJjdXJyZW50LXNvcnRcIjogX3ZtLmN1cnJlbnRTb3J0IH0sXG4gICAgICAgICAgICAgICAgb246IHsgc29ydDogX3ZtLnNvcnQgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnRyYW5zKFwidGl0bGVfcmVmZXJlbmNlXCIpKSArXG4gICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0sXG4gICAgICAgICAgMVxuICAgICAgICApLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcInRoXCIsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiUFNTb3J0XCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBvcmRlcjogXCJzdXBwbGllclwiLCBcImN1cnJlbnQtc29ydFwiOiBfdm0uY3VycmVudFNvcnQgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBzb3J0OiBfdm0uc29ydCB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udHJhbnMoXCJ0aXRsZV9zdXBwbGllclwiKSkgK1xuICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICBdLFxuICAgICAgICAgIDFcbiAgICAgICAgKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXCJ0aFwiLCB7IHN0YXRpY0NsYXNzOiBcInRleHQtY2VudGVyXCIgfSwgW1xuICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgICAgXCIgKyBfdm0uX3MoX3ZtLnRyYW5zKFwidGl0bGVfc3RhdHVzXCIpKSArIFwiXFxuICAgICAgXCIpXG4gICAgICAgIF0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcInRoXCIsXG4gICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJ0ZXh0LWNlbnRlclwiIH0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiUFNTb3J0XCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgb3JkZXI6IFwicGh5c2ljYWxfcXVhbnRpdHlcIixcbiAgICAgICAgICAgICAgICAgIFwiY3VycmVudC1zb3J0XCI6IF92bS5jdXJyZW50U29ydFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHsgc29ydDogX3ZtLnNvcnQgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnRyYW5zKFwidGl0bGVfcGh5c2ljYWxcIikpICtcbiAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSxcbiAgICAgICAgICAxXG4gICAgICAgICksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwidGhcIiwgeyBzdGF0aWNDbGFzczogXCJ0ZXh0LWNlbnRlclwiIH0sIFtcbiAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgKyBfdm0uX3MoX3ZtLnRyYW5zKFwidGl0bGVfcmVzZXJ2ZWRcIikpICsgXCJcXG4gICAgICBcIlxuICAgICAgICAgIClcbiAgICAgICAgXSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwidGhcIixcbiAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInRleHQtY2VudGVyXCIgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJQU1NvcnRcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBvcmRlcjogXCJhdmFpbGFibGVfcXVhbnRpdHlcIixcbiAgICAgICAgICAgICAgICAgIFwiY3VycmVudC1zb3J0XCI6IF92bS5jdXJyZW50U29ydFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHsgc29ydDogX3ZtLnNvcnQgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnRyYW5zKFwidGl0bGVfYXZhaWxhYmxlXCIpKSArXG4gICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0sXG4gICAgICAgICAgMVxuICAgICAgICApLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcInRoXCIsIHsgYXR0cnM6IHsgdGl0bGU6IF92bS50cmFucyhcInRpdGxlX2VkaXRfcXVhbnRpdHlcIikgfSB9LCBbXG4gICAgICAgICAgX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwibWF0ZXJpYWwtaWNvbnNcIiB9LCBbX3ZtLl92KFwiZWRpdFwiKV0pLFxuICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgIFwiXFxuICAgICAgICBcIiArIF92bS5fcyhfdm0udHJhbnMoXCJ0aXRsZV9lZGl0X3F1YW50aXR5XCIpKSArIFwiXFxuICAgICAgXCJcbiAgICAgICAgICApXG4gICAgICAgIF0pXG4gICAgICBdKVxuICAgIF0pLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXG4gICAgICBcInRib2R5XCIsXG4gICAgICBbXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nXG4gICAgICAgICAgPyBfYyhcInRyXCIsIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAgICAgIHsgYXR0cnM6IHsgY29sc3BhbjogXCI4XCIgfSB9LFxuICAgICAgICAgICAgICAgIF92bS5fbCgzLCBmdW5jdGlvbihuLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFwiUFNMb2FkZXJcIiwgeyBrZXk6IGluZGV4LCBzdGF0aWNDbGFzczogXCJtdC0xXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImJhY2tncm91bmQtbWFza2VyIGhlYWRlci10b3BcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJiYWNrZ3JvdW5kLW1hc2tlciBoZWFkZXItbGVmdFwiIH0pLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYmFja2dyb3VuZC1tYXNrZXIgaGVhZGVyLWJvdHRvbVwiXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYmFja2dyb3VuZC1tYXNrZXIgc3ViaGVhZGVyLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImJhY2tncm91bmQtbWFza2VyIHN1YmhlYWRlci1ib3R0b21cIlxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgOiBfdm0uZW1wdHlQcm9kdWN0c1xuICAgICAgICAgID8gX2MoXCJ0clwiLCBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICB7IGF0dHJzOiB7IGNvbHNwYW46IFwiOFwiIH0gfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJQU0FsZXJ0XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhbGVydC10eXBlXCI6IFwiQUxFUlRfVFlQRV9XQVJOSU5HXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhhcy1jbG9zZVwiOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS50cmFucyhcIm5vX3Byb2R1Y3RcIikpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgOiBfdm0uX2woX3ZtLnByb2R1Y3RzLCBmdW5jdGlvbihwcm9kdWN0LCBpbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gX2MoXCJQcm9kdWN0TGluZVwiLCB7XG4gICAgICAgICAgICAgICAga2V5OiBpbmRleCxcbiAgICAgICAgICAgICAgICBhdHRyczogeyBwcm9kdWN0OiBwcm9kdWN0IH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICBdLFxuICAgICAgMlxuICAgIClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHJvZHVjdHMtdGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHJvZHVjdHMtdGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcm9kdWN0cy10YWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTIzZTEwYzgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcHJvZHVjdHMtdGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wcm9kdWN0cy10YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi90bXAvcHJlc3Rhc2hvcC9hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc1MjNlMTBjOCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc1MjNlMTBjOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc1MjNlMTBjOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcHJvZHVjdHMtdGFibGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUyM2UxMGM4JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzUyM2UxMGM4Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJqcy9hcHAvcGFnZXMvc3RvY2svY29tcG9uZW50cy9vdmVydmlldy9wcm9kdWN0cy10YWJsZS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZm9ybVwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcInF0eVwiLFxuICAgICAgY2xhc3M6IF92bS5jbGFzc09iamVjdCxcbiAgICAgIG9uOiB7XG4gICAgICAgIG1vdXNlb3ZlcjogX3ZtLmZvY3VzSW4sXG4gICAgICAgIG1vdXNlbGVhdmU6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdm0uZm9jdXNPdXQoJGV2ZW50KVxuICAgICAgICB9LFxuICAgICAgICBzdWJtaXQ6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgcmV0dXJuIF92bS5zZW5kUXR5KCRldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXCJQU051bWJlclwiLCB7XG4gICAgICAgIHN0YXRpY0NsYXNzOiBcImVkaXQtcXR5XCIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgbmFtZTogXCJxdHlcIixcbiAgICAgICAgICBwbGFjZWhvbGRlcjogXCIwXCIsXG4gICAgICAgICAgcGF0dGVybjogXCJcXFxcZCpcIixcbiAgICAgICAgICBzdGVwOiBcIjFcIixcbiAgICAgICAgICBidXR0b25zOiB0cnVlLFxuICAgICAgICAgIFwiaG92ZXItYnV0dG9uc1wiOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiBfdm0uZ2V0UXVhbnRpdHkoKVxuICAgICAgICB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIGNoYW5nZTogX3ZtLm9uQ2hhbmdlLFxuICAgICAgICAgIGtleXVwOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdm0ub25LZXl1cCgkZXZlbnQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmb2N1czogX3ZtLmZvY3VzSW4sXG4gICAgICAgICAgYmx1cjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3ZtLmZvY3VzT3V0KCRldmVudClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwidHJhbnNpdGlvblwiLCB7IGF0dHJzOiB7IG5hbWU6IFwiZmFkZVwiIH0gfSwgW1xuICAgICAgICBfdm0uaXNBY3RpdmVcbiAgICAgICAgICA/IF9jKFwiYnV0dG9uXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2hlY2stYnV0dG9uXCIgfSwgW1xuICAgICAgICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJtYXRlcmlhbC1pY29uc1wiIH0sIFtfdm0uX3YoXCJjaGVja1wiKV0pXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIF0pXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3Bpbm5lci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcGlubmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vc3Bpbm5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Mjk3NzkzYjImc2NvcGVkPXRydWUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vc3Bpbm5lci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3NwaW5uZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL3NwaW5uZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9Mjk3NzkzYjImbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCIyOTc3OTNiMlwiLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi90bXAvcHJlc3Rhc2hvcC9hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcyOTc3OTNiMicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcyOTc3OTNiMicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcyOTc3OTNiMicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vc3Bpbm5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Mjk3NzkzYjImc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMjk3NzkzYjInLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL2FwcC9wYWdlcy9zdG9jay9jb21wb25lbnRzL292ZXJ2aWV3L3NwaW5uZXIudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcInBzLWFsZXJ0IGFsZXJ0XCIsXG4gICAgICBjbGFzczogX3ZtLmNsYXNzT2JqZWN0LFxuICAgICAgYXR0cnM6IHsgcm9sZTogXCJhbGVydFwiIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF92bS5oYXNDbG9zZVxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiY2xvc2VcIixcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgIFwiZGF0YS1kaXNtaXNzXCI6IFwiYWxlcnRcIixcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogXCJDbG9zZVwiXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uQ2xpY2soJGV2ZW50KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJtYXRlcmlhbC1pY29uc1wiIH0sIFtfdm0uX3YoXCJjbG9zZVwiKV0pXVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInBcIiwgeyBzdGF0aWNDbGFzczogXCJhbGVydC10ZXh0XCIgfSwgW192bS5fdChcImRlZmF1bHRcIildLCAyKVxuICAgIF1cbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcy1hbGVydC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcy1hbGVydC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3BzLWFsZXJ0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYmEzODk4OCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wcy1hbGVydC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3BzLWFsZXJ0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzFiYTM4OTg4JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzFiYTM4OTg4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzFiYTM4OTg4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wcy1hbGVydC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWJhMzg5ODgmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMWJhMzg5ODgnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL2FwcC93aWRnZXRzL3BzLWFsZXJ0LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJidXR0b25cIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJidG5cIixcbiAgICAgIGNsYXNzOiBfdm0uY2xhc3NPYmplY3QsXG4gICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICBvbjogeyBjbGljazogX3ZtLm9uQ2xpY2sgfVxuICAgIH0sXG4gICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcy1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcHMtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wMzRiZjA5NCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wcy1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wcy1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvdG1wL3ByZXN0YXNob3AvYWRtaW4tZGV2L3RoZW1lcy9uZXctdGhlbWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMDM0YmYwOTQnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMDM0YmYwOTQnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMDM0YmYwOTQnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3BzLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDM0YmYwOTQmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMDM0YmYwOTQnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL2FwcC93aWRnZXRzL3BzLWJ1dHRvbi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwibWQtY2hlY2tib3hcIiB9LCBbXG4gICAgX2MoXG4gICAgICBcImxhYmVsXCIsXG4gICAgICBbXG4gICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5jaGVja2VkLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImNoZWNrZWRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgY2xhc3M6IHsgaW5kZXRlcm1pbmF0ZTogX3ZtLmlzSW5kZXRlcm1pbmF0ZSB9LFxuICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiY2hlY2tib3hcIiwgaWQ6IF92bS5pZCB9LFxuICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICBjaGVja2VkOiBBcnJheS5pc0FycmF5KF92bS5jaGVja2VkKVxuICAgICAgICAgICAgICA/IF92bS5faShfdm0uY2hlY2tlZCwgbnVsbCkgPiAtMVxuICAgICAgICAgICAgICA6IF92bS5jaGVja2VkXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgdmFyICQkYSA9IF92bS5jaGVja2VkLFxuICAgICAgICAgICAgICAgICQkZWwgPSAkZXZlbnQudGFyZ2V0LFxuICAgICAgICAgICAgICAgICQkYyA9ICQkZWwuY2hlY2tlZCA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICAgICAgdmFyICQkdiA9IG51bGwsXG4gICAgICAgICAgICAgICAgICAkJGkgPSBfdm0uX2koJCRhLCAkJHYpXG4gICAgICAgICAgICAgICAgaWYgKCQkZWwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgJCRpIDwgMCAmJiAoX3ZtLmNoZWNrZWQgPSAkJGEuY29uY2F0KFskJHZdKSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgJCRpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKF92bS5jaGVja2VkID0gJCRhLnNsaWNlKDAsICQkaSkuY29uY2F0KCQkYS5zbGljZSgkJGkgKyAxKSkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF92bS5jaGVja2VkID0gJCRjXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJtZC1jaGVja2JveC1jb250cm9sXCIgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF92bS5fdChcImxhYmVsXCIpXG4gICAgICBdLFxuICAgICAgMlxuICAgIClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcy1jaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzNjYTQwYzcmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcHMtY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wcy1jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi90bXAvcHJlc3Rhc2hvcC9hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3M2NhNDBjNycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3M2NhNDBjNycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3M2NhNDBjNycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcHMtY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTczY2E0MGM3JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzczY2E0MGM3Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJqcy9hcHAvd2lkZ2V0cy9wcy1jaGVja2JveC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiaW5wdXQtZ3JvdXAgZGF0ZVwiIH0sIFtcbiAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgIHJlZjogXCJkYXRlcGlja2VyXCIsXG4gICAgICBzdGF0aWNDbGFzczogXCJmb3JtLWNvbnRyb2xcIixcbiAgICAgIGF0dHJzOiB7IHR5cGU6IFwidGV4dFwiIH1cbiAgICB9KSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5fbSgwKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtcbiAgZnVuY3Rpb24oKSB7XG4gICAgdmFyIF92bSA9IHRoaXNcbiAgICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJpbnB1dC1ncm91cC1hcHBlbmRcIiB9LCBbXG4gICAgICBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJpbnB1dC1ncm91cC10ZXh0XCIgfSwgW1xuICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJtYXRlcmlhbC1pY29uc1wiIH0sIFtfdm0uX3YoXCJldmVudFwiKV0pXG4gICAgICBdKVxuICAgIF0pXG4gIH1cbl1cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BzLWRhdGVwaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtZGF0ZXBpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3BzLWRhdGVwaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ2NDkzMzQwJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3BzLWRhdGVwaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wcy1kYXRlcGlja2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9wcy1kYXRlcGlja2VyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzQ2NDkzMzQwJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzQ2NDkzMzQwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzQ2NDkzMzQwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wcy1kYXRlcGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NjQ5MzM0MCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc0NjQ5MzM0MCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvYXBwL3dpZGdldHMvcHMtZGF0ZXBpY2tlci52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicHMtbG9hZGVyXCIgfSwgW1xuICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwidGltZWxpbmUtaXRlbVwiIH0sIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiYW5pbWF0ZWQtYmFja2dyb3VuZFwiIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMilcbiAgICBdKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcHMtbG9hZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYWE4OGZkMiZzY29wZWQ9dHJ1ZSZcIlxudmFyIHNjcmlwdCA9IHt9XG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL3BzLWxvYWRlci52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0wYWE4OGZkMiZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjBhYTg4ZmQyXCIsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzBhYTg4ZmQyJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzBhYTg4ZmQyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzBhYTg4ZmQyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wcy1sb2FkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBhYTg4ZmQyJnNjb3BlZD10cnVlJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzBhYTg4ZmQyJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJqcy9hcHAvd2lkZ2V0cy9wcy1sb2FkZXIudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm1lZGlhXCIgfSwgW1xuICAgIF92bS5kaXNwbGF5VGh1bWJcbiAgICAgID8gX2MoXCJpbWdcIiwge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInRodW1ibmFpbCBkLWZsZXhcIixcbiAgICAgICAgICBhdHRyczogeyBzcmM6IF92bS50aHVtYm5haWwgfVxuICAgICAgICB9KVxuICAgICAgOiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5vLWltZ1wiIH0pLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJtbC0yIGRlc2MgbWVkaWEtYm9keVwiIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMilcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtbWVkaWEudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtbWVkaWEudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcy1tZWRpYS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWIzYTI3ZTAmc2NvcGVkPXRydWUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcHMtbWVkaWEudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wcy1tZWRpYS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vcHMtbWVkaWEudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MWIzYTI3ZTAmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCIxYjNhMjdlMFwiLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi90bXAvcHJlc3Rhc2hvcC9hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcxYjNhMjdlMCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcxYjNhMjdlMCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcxYjNhMjdlMCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcHMtbWVkaWEudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFiM2EyN2UwJnNjb3BlZD10cnVlJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzFiM2EyN2UwJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJqcy9hcHAvd2lkZ2V0cy9wcy1tZWRpYS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJwcy1udW1iZXJcIiwgY2xhc3M6IHsgXCJob3Zlci1idXR0b25zXCI6IF92bS5ob3ZlckJ1dHRvbnMgfSB9LFxuICAgIFtcbiAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICBzdGF0aWNDbGFzczogXCJmb3JtLWNvbnRyb2xcIixcbiAgICAgICAgY2xhc3M6IHsgZGFuZ2VyOiBfdm0uZGFuZ2VyIH0sXG4gICAgICAgIGF0dHJzOiB7IHR5cGU6IFwibnVtYmVyXCIsIHBsYWNlaG9sZGVyOiBcIjBcIiB9LFxuICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLnZhbHVlIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAga2V5dXA6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS5vbktleXVwKCRldmVudClcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZvY3VzOiBfdm0uZm9jdXNJblxuICAgICAgICB9LFxuICAgICAgICBuYXRpdmVPbjoge1xuICAgICAgICAgIGJsdXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS5mb2N1c091dCgkZXZlbnQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uYnV0dG9uc1xuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicHMtbnVtYmVyLXNwaW5uZXIgZC1mbGV4XCIgfSwgW1xuICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwicHMtbnVtYmVyLXVwXCIsXG4gICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uaW5jcmVtZW50IH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInBzLW51bWJlci1kb3duXCIsXG4gICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uZGVjcmVtZW50IH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF1cbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcy1udW1iZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtbnVtYmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcHMtbnVtYmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01Y2NhNGY2NiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wcy1udW1iZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wcy1udW1iZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvdG1wL3ByZXN0YXNob3AvYWRtaW4tZGV2L3RoZW1lcy9uZXctdGhlbWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNWNjYTRmNjYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNWNjYTRmNjYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNWNjYTRmNjYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3BzLW51bWJlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWNjYTRmNjYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNWNjYTRmNjYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL2FwcC93aWRnZXRzL3BzLW51bWJlci52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5kaXNwbGF5UGFnaW5hdGlvblxuICAgID8gX2MoXCJuYXZcIiwgeyBzdGF0aWNDbGFzczogXCJtdC0xIG14LWF1dG9cIiB9LCBbXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwidWxcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJwYWdpbmF0aW9uXCIsXG4gICAgICAgICAgICBjbGFzczogeyBtdWx0aTogX3ZtLmlzTXVsdGlQYWdpbmF0aW9uIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF92bS5pc011bHRpUGFnaW5hdGlvblxuICAgICAgICAgICAgICA/IF9jKFwibGlcIiwgeyBzdGF0aWNDbGFzczogXCJwYWdlLWl0ZW0gcHJldmlvdXNcIiB9LCBbXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJhXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmFjdGl2ZUxlZnRBcnJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJhY3RpdmVMZWZ0QXJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZmxvYXQtbGVmdCBwYWdlLWxpbmtcIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBocmVmOiBcIiNcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ucHJldigkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwic3Itb25seVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIlByZXZpb3VzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX3ZtLl9sKF92bS5wYWdlc0NvdW50LCBmdW5jdGlvbihpbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogaW5kZXgsXG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJwYWdlLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZTogX3ZtLmNoZWNrQ3VycmVudEluZGV4KGluZGV4KSB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uc2hvd0luZGV4KGluZGV4KVxuICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInBhZ2UtbGlua1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGwtMFwiOiBfdm0uc2hvd0ZpcnN0RG90cyhpbmRleCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwci0wXCI6IF92bS5zaG93TGFzdERvdHMoaW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGhyZWY6IFwiI1wiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uY2hhbmdlUGFnZShpbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5pc011bHRpUGFnaW5hdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5zaG93Rmlyc3REb3RzKGluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzaG93Rmlyc3REb3RzKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KFwiLi4uXCIpXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgICAgXCIgKyBfdm0uX3MoaW5kZXgpICsgXCJcXG4gICAgICAgIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmlzTXVsdGlQYWdpbmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dMYXN0RG90cyhpbmRleCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd0xhc3REb3RzKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KFwiLi4uXCIpXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF92bS5pc011bHRpUGFnaW5hdGlvblxuICAgICAgICAgICAgICA/IF9jKFwibGlcIiwgeyBzdGF0aWNDbGFzczogXCJwYWdlLWl0ZW0gbmV4dFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uYWN0aXZlUmlnaHRBcnJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJhY3RpdmVSaWdodEFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImZsb2F0LWxlZnQgcGFnZS1saW5rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgaHJlZjogXCIjXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm5leHQoJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW19jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcInNyLW9ubHlcIiB9LCBbX3ZtLl92KFwiTmV4dFwiKV0pXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICBdLFxuICAgICAgICAgIDJcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BzLXBhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtcGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3BzLXBhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYyZjU2M2M0JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3BzLXBhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wcy1wYWdpbmF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzYyZjU2M2M0JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzYyZjU2M2M0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzYyZjU2M2M0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wcy1wYWdpbmF0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02MmY1NjNjNCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc2MmY1NjNjNCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvYXBwL3dpZGdldHMvcHMtcGFnaW5hdGlvbi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicHMtcmFkaW9cIiB9LCBbXG4gICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICBhdHRyczogeyB0eXBlOiBcInJhZGlvXCIsIGlkOiBfdm0uaWQsIG5hbWU6IFwicmFkaW8tZ3JvdXBcIiB9LFxuICAgICAgZG9tUHJvcHM6IHsgY2hlY2tlZDogX3ZtLmNoZWNrZWQgfSxcbiAgICAgIG9uOiB7IGNoYW5nZTogX3ZtLm9uQ2hhbmdlIH1cbiAgICB9KSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFwibGFiZWxcIiwgeyBhdHRyczogeyBmb3I6IF92bS5pZCB9IH0sIFtfdm0uX3YoX3ZtLl9zKF92bS5sYWJlbCkpXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtcmFkaW8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtcmFkaW8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcy1yYWRpby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzhmOWFjYTcmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcHMtcmFkaW8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wcy1yYWRpby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi90bXAvcHJlc3Rhc2hvcC9hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCczOGY5YWNhNycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCczOGY5YWNhNycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCczOGY5YWNhNycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcHMtcmFkaW8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM4ZjlhY2E3JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzM4ZjlhY2E3Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJqcy9hcHAvd2lkZ2V0cy9wcy1yYWRpby52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicHMtc2VsZWN0XCIgfSwgW1xuICAgIF9jKFxuICAgICAgXCJzZWxlY3RcIixcbiAgICAgIHtcbiAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS5zZWxlY3RlZCxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2VsZWN0ZWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2hhbmdlOiBbXG4gICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgdmFyICQkc2VsZWN0ZWRWYWwgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gICAgICAgICAgICAgICAgLmNhbGwoJGV2ZW50LnRhcmdldC5vcHRpb25zLCBmdW5jdGlvbihvKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gby5zZWxlY3RlZFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbihvKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgdmFsID0gXCJfdmFsdWVcIiBpbiBvID8gby5fdmFsdWUgOiBvLnZhbHVlXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdmFsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgX3ZtLnNlbGVjdGVkID0gJGV2ZW50LnRhcmdldC5tdWx0aXBsZVxuICAgICAgICAgICAgICAgID8gJCRzZWxlY3RlZFZhbFxuICAgICAgICAgICAgICAgIDogJCRzZWxlY3RlZFZhbFswXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF92bS5vbkNoYW5nZVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJvcHRpb25cIixcbiAgICAgICAgICB7IGF0dHJzOiB7IHZhbHVlOiBcImRlZmF1bHRcIiwgc2VsZWN0ZWQ6IFwiXCIgfSB9LFxuICAgICAgICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSxcbiAgICAgICAgICAyXG4gICAgICAgICksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF92bS5fbChfdm0uaXRlbXMsIGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgXCJvcHRpb25cIixcbiAgICAgICAgICAgIHsga2V5OiBpbmRleCwgZG9tUHJvcHM6IHsgdmFsdWU6IGl0ZW1bX3ZtLml0ZW1JZF0gfSB9LFxuICAgICAgICAgICAgW192bS5fdihcIlxcbiAgICAgIFwiICsgX3ZtLl9zKGl0ZW1bX3ZtLml0ZW1OYW1lXSkgKyBcIlxcbiAgICBcIildXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgXSxcbiAgICAgIDJcbiAgICApXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BzLXNlbGVjdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcy1zZWxlY3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcy1zZWxlY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWYzNzFiZjAwJnNjb3BlZD10cnVlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3BzLXNlbGVjdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3BzLXNlbGVjdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vcHMtc2VsZWN0LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPWYzNzFiZjAwJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiZjM3MWJmMDBcIixcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvdG1wL3ByZXN0YXNob3AvYWRtaW4tZGV2L3RoZW1lcy9uZXctdGhlbWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnZjM3MWJmMDAnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnZjM3MWJmMDAnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnZjM3MWJmMDAnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3BzLXNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZjM3MWJmMDAmc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignZjM3MWJmMDAnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL2FwcC93aWRnZXRzL3BzLXNlbGVjdC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwicHMtc29ydGFibGUtY29sdW1uXCIsXG4gICAgICBhdHRyczoge1xuICAgICAgICBcImRhdGEtc29ydC1jb2wtbmFtZVwiOiBcImlkX3Byb2R1Y3RcIixcbiAgICAgICAgXCJkYXRhLXNvcnQtaXMtY3VycmVudFwiOiBfdm0uaXNDdXJyZW50LFxuICAgICAgICBcImRhdGEtc29ydC1kaXJlY3Rpb25cIjogX3ZtLnNvcnREaXJlY3Rpb25cbiAgICAgIH0sXG4gICAgICBvbjogeyBjbGljazogX3ZtLnNvcnRUb2dnbGUgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXCJzcGFuXCIsIHsgYXR0cnM6IHsgcm9sZTogXCJjb2x1bW5oZWFkZXJcIiB9IH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMiksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwicHMtc29ydFwiLFxuICAgICAgICBhdHRyczogeyByb2xlOiBcImJ1dHRvblwiLCBcImFyaWEtbGFiZWxcIjogXCJUcmlcIiB9XG4gICAgICB9KVxuICAgIF1cbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcy1zb3J0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BzLXNvcnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcy1zb3J0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04OWRkZTZkYSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wcy1zb3J0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcHMtc29ydC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi90bXAvcHJlc3Rhc2hvcC9hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc4OWRkZTZkYScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc4OWRkZTZkYScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc4OWRkZTZkYScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcHMtc29ydC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ODlkZGU2ZGEmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignODlkZGU2ZGEnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL2FwcC93aWRnZXRzL3BzLXRhYmxlL3BzLXNvcnQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInRhYmxlLXJlc3BvbnNpdmVcIiB9LCBbXG4gICAgX2MoXCJ0YWJsZVwiLCB7IHN0YXRpY0NsYXNzOiBcInRhYmxlXCIgfSwgW192bS5fdChcImRlZmF1bHRcIildLCAyKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcHMtdGFibGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMzZTA1ZmE5JlwiXG52YXIgc2NyaXB0ID0ge31cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi90bXAvcHJlc3Rhc2hvcC9hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCczM2UwNWZhOScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCczM2UwNWZhOScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCczM2UwNWZhOScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcHMtdGFibGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMzZTA1ZmE5JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzMzZTA1ZmE5Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJqcy9hcHAvd2lkZ2V0cy9wcy10YWJsZS9wcy10YWJsZS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwidGFncy1pbnB1dCBzZWFyY2gtaW5wdXQgc2VhcmNoIGQtZmxleCBmbGV4LXdyYXBcIixcbiAgICAgIGNsYXNzOiB7IFwic2VhcmNoLXdpdGgtaWNvblwiOiBfdm0uaGFzSWNvbiB9LFxuICAgICAgb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdm0uZm9jdXMoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgeyBzdGF0aWNDbGFzczogXCJ0YWdzLXdyYXBwZXJcIiB9LFxuICAgICAgICBfdm0uX2woX3ZtLnRhZ3MsIGZ1bmN0aW9uKHRhZywgaW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gX2MoXCJzcGFuXCIsIHsga2V5OiBpbmRleCwgc3RhdGljQ2xhc3M6IFwidGFnXCIgfSwgW1xuICAgICAgICAgICAgX3ZtLl92KF92bS5fcyh0YWcpKSxcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImlcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm1hdGVyaWFsLWljb25zXCIsXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5jbG9zZShpbmRleClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtfdm0uX3YoXCJjbG9zZVwiKV1cbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICB9KSxcbiAgICAgICAgMFxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS50YWcsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcInRhZ1wiXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWY6IFwidGFnc1wiLFxuICAgICAgICBzdGF0aWNDbGFzczogXCJmb3JtLWNvbnRyb2wgaW5wdXRcIixcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnBsYWNlaG9sZGVyVG9EaXNwbGF5LFxuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHNpemU6IF92bS5pbnB1dFNpemVcbiAgICAgICAgfSxcbiAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS50YWcgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBrZXl1cDogX3ZtLm9uS2V5VXAsXG4gICAgICAgICAga2V5ZG93bjogW1xuICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhJGV2ZW50LnR5cGUuaW5kZXhPZihcImtleVwiKSAmJlxuICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJlbnRlclwiLCAxMywgJGV2ZW50LmtleSwgXCJFbnRlclwiKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBfdm0uYWRkKF92bS50YWcpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhJGV2ZW50LnR5cGUuaW5kZXhPZihcImtleVwiKSAmJlxuICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJkZWxldGVcIiwgWzgsIDQ2XSwgJGV2ZW50LmtleSwgW1xuICAgICAgICAgICAgICAgICAgXCJCYWNrc3BhY2VcIixcbiAgICAgICAgICAgICAgICAgIFwiRGVsZXRlXCIsXG4gICAgICAgICAgICAgICAgICBcIkRlbFwiXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS5yZW1vdmUoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgaWYgKCRldmVudC50YXJnZXQuY29tcG9zaW5nKSB7XG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3ZtLnRhZyA9ICRldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BzLXRhZ3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtdGFncy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3BzLXRhZ3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBmOWZkN2M2JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3BzLXRhZ3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wcy10YWdzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzBmOWZkN2M2JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzBmOWZkN2M2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzBmOWZkN2M2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wcy10YWdzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wZjlmZDdjNiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcwZjlmZDdjNicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvYXBwL3dpZGdldHMvcHMtdGFncy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJwcy10cmVlLWl0ZW1zXCIsIGNsYXNzOiB7IGNsYXNzTmFtZTogX3ZtLmNsYXNzTmFtZSB9IH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJkLWZsZXggdHJlZS1uYW1lXCIsXG4gICAgICAgICAgY2xhc3M6IHsgYWN0aXZlOiBfdm0uYWN0aXZlLCBkaXNhYmxlOiBfdm0ubW9kZWwuZGlzYWJsZSB9LFxuICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2xpY2tFbGVtZW50IH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYnRuIGJ0bi10ZXh0XCIsXG4gICAgICAgICAgICAgIGNsYXNzOiBbeyBoaWRkZW46IF92bS5pc0hpZGRlbiB9LCBfdm0uY2hldnJvblN0YXR1c11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS50cmFuc2xhdGlvbnNcbiAgICAgICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcInNyLW9ubHlcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLm9wZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfdm0udHJhbnNsYXRpb25zLnJlZHVjZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS50cmFuc2xhdGlvbnMuZXhwYW5kXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLmhhc0NoZWNrYm94XG4gICAgICAgICAgICA/IF9jKFwiUFNDaGVja2JveFwiLCB7XG4gICAgICAgICAgICAgICAgcmVmOiBfdm0ubW9kZWwubmFtZSxcbiAgICAgICAgICAgICAgICBhdHRyczogeyBpZDogX3ZtLmlkLCBtb2RlbDogX3ZtLm1vZGVsIH0sXG4gICAgICAgICAgICAgICAgb246IHsgY2hlY2tlZDogX3ZtLm9uQ2hlY2sgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInRyZWUtbGFiZWxcIiwgY2xhc3M6IHsgd2FybmluZzogX3ZtLmlzV2FybmluZyB9IH0sXG4gICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0ubW9kZWwubmFtZSkpXVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uZGlzcGxheUV4dHJhTGFiZWxcbiAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJ0cmVlLWV4dHJhLWxhYmVsIGQtc20tbm9uZSBkLXhsLWlubGluZS1ibG9ja1wiIH0sXG4gICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLmdldEV4dHJhTGFiZWwpKV1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5kaXNwbGF5RXh0cmFMYWJlbFxuICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJ0cmVlLWV4dHJhLWxhYmVsLW1pbmkgZC14bC1ub25lXCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3ModGhpcy5tb2RlbC5leHRyYUxhYmVsKSlcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uaXNGb2xkZXJcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwidWxcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ub3BlbixcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwib3BlblwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJ0cmVlXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfdm0uX2woX3ZtLm1vZGVsLmNoaWxkcmVuLCBmdW5jdGlvbihlbGVtZW50LCBpbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogaW5kZXgsXG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJ0cmVlLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGRpc2FibGU6IF92bS5tb2RlbC5kaXNhYmxlIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiUFNUcmVlSXRlbVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHJlZjogZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgICAgICAgcmVmSW5Gb3I6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uY2xhc3NOYW1lLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIFwiaGFzLWNoZWNrYm94XCI6IF92bS5oYXNDaGVja2JveCxcbiAgICAgICAgICAgICAgICAgICAgICBtb2RlbDogZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZWxlbWVudC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uczogX3ZtLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICBcImN1cnJlbnQtaXRlbVwiOiBfdm0uY3VycmVudEl0ZW1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiBfdm0ub25DaGVjayxcbiAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50RWxlbWVudDogX3ZtLnNldEN1cnJlbnRFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgMFxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF1cbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcy10cmVlLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtdHJlZS1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcHMtdHJlZS1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1iMjBlNzFkNiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wcy10cmVlLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wcy10cmVlLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvdG1wL3ByZXN0YXNob3AvYWRtaW4tZGV2L3RoZW1lcy9uZXctdGhlbWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnYjIwZTcxZDYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnYjIwZTcxZDYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnYjIwZTcxZDYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3BzLXRyZWUtaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YjIwZTcxZDYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignYjIwZTcxZDYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL2FwcC93aWRnZXRzL3BzLXRyZWUvcHMtdHJlZS1pdGVtLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJwcy10cmVlXCIgfSwgW1xuICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwibWItMyB0cmVlLWhlYWRlclwiIH0sIFtcbiAgICAgIF9jKFxuICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYnRuIGJ0bi10ZXh0IHRleHQtdXBwZXJjYXNlIHBvaW50ZXJcIixcbiAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmV4cGFuZCB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJtYXRlcmlhbC1pY29uc1wiIH0sIFtcbiAgICAgICAgICAgIF92bS5fdihcImtleWJvYXJkX2Fycm93X2Rvd25cIilcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS50cmFuc2xhdGlvbnNcbiAgICAgICAgICAgID8gX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS50cmFuc2xhdGlvbnMuZXhwYW5kKSldKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYnRuIGJ0bi10ZXh0IGZsb2F0LXJpZ2h0IHRleHQtdXBwZXJjYXNlIHBvaW50ZXJcIixcbiAgICAgICAgICBvbjogeyBjbGljazogX3ZtLnJlZHVjZSB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJtYXRlcmlhbC1pY29uc1wiIH0sIFtcbiAgICAgICAgICAgIF92bS5fdihcImtleWJvYXJkX2Fycm93X3VwXCIpXG4gICAgICAgICAgXSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0udHJhbnNsYXRpb25zXG4gICAgICAgICAgICA/IF9jKFwic3BhblwiLCBbX3ZtLl92KF92bS5fcyhfdm0udHJhbnNsYXRpb25zLnJlZHVjZSkpXSlcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXVxuICAgICAgKVxuICAgIF0pLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXG4gICAgICBcInVsXCIsXG4gICAgICB7IHN0YXRpY0NsYXNzOiBcInRyZWVcIiwgY2xhc3M6IF92bS5jbGFzc05hbWUgfSxcbiAgICAgIF92bS5fbChfdm0ubW9kZWwsIGZ1bmN0aW9uKGVsZW1lbnQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICBcImxpXCIsXG4gICAgICAgICAgeyBrZXk6IGluZGV4IH0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAgX2MoXCJQU1RyZWVJdGVtXCIsIHtcbiAgICAgICAgICAgICAgcmVmOiBcIml0ZW1cIixcbiAgICAgICAgICAgICAgcmVmSW5Gb3I6IHRydWUsXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgXCJoYXMtY2hlY2tib3hcIjogX3ZtLmhhc0NoZWNrYm94LFxuICAgICAgICAgICAgICAgIG1vZGVsOiBlbGVtZW50LFxuICAgICAgICAgICAgICAgIGxhYmVsOiBlbGVtZW50Lm5hbWUsXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zOiBfdm0udHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgICAgIFwiY3VycmVudC1pdGVtXCI6IF92bS5jdXJyZW50SXRlbVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNoZWNrZWQ6IF92bS5vbkNoZWNrLFxuICAgICAgICAgICAgICAgIHNldEN1cnJlbnRFbGVtZW50OiBfdm0uc2V0Q3VycmVudEVsZW1lbnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdLFxuICAgICAgICAgIDFcbiAgICAgICAgKVxuICAgICAgfSksXG4gICAgICAwXG4gICAgKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcy10cmVlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BzLXRyZWUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcy10cmVlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYWJkOGU4YSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wcy10cmVlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcHMtdHJlZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi90bXAvcHJlc3Rhc2hvcC9hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdjYWJkOGU4YScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdjYWJkOGU4YScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdjYWJkOGU4YScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcHMtdHJlZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2FiZDhlOGEmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignY2FiZDhlOGEnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL2FwcC93aWRnZXRzL3BzLXRyZWUvcHMtdHJlZS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCIvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgKG9wdGlvbnMuZnVuY3Rpb25hbCA/IHRoaXMucGFyZW50IDogdGhpcykuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdFxuICAgICAgICApXG4gICAgICB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9uYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuIiwiLyohXG4gKiB2dWUtcmVzb3VyY2UgdjEuNS4xXG4gKiBodHRwczovL2dpdGh1Yi5jb20vcGFnZWtpdC92dWUtcmVzb3VyY2VcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG4vKipcbiAqIFByb21pc2VzL0ErIHBvbHlmaWxsIHYxLjEuNCAoaHR0cHM6Ly9naXRodWIuY29tL2JyYW1zdGVpbi9wcm9taXMpXG4gKi9cblxudmFyIFJFU09MVkVEID0gMDtcbnZhciBSRUpFQ1RFRCA9IDE7XG52YXIgUEVORElORyA9IDI7XG5cbmZ1bmN0aW9uIFByb21pc2UkMShleGVjdXRvcikge1xuXG4gICAgdGhpcy5zdGF0ZSA9IFBFTkRJTkc7XG4gICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlZmVycmVkID0gW107XG5cbiAgICB2YXIgcHJvbWlzZSA9IHRoaXM7XG5cbiAgICB0cnkge1xuICAgICAgICBleGVjdXRvcihmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKHgpO1xuICAgICAgICB9LCBmdW5jdGlvbiAocikge1xuICAgICAgICAgICAgcHJvbWlzZS5yZWplY3Qocik7XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcHJvbWlzZS5yZWplY3QoZSk7XG4gICAgfVxufVxuXG5Qcm9taXNlJDEucmVqZWN0ID0gZnVuY3Rpb24gKHIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHJlamVjdChyKTtcbiAgICB9KTtcbn07XG5cblByb21pc2UkMS5yZXNvbHZlID0gZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHJlc29sdmUoeCk7XG4gICAgfSk7XG59O1xuXG5Qcm9taXNlJDEuYWxsID0gZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgY291bnQgPSAwLCByZXN1bHQgPSBbXTtcblxuICAgICAgICBpZiAoaXRlcmFibGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiByZXNvbHZlcihpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSB4O1xuICAgICAgICAgICAgICAgIGNvdW50ICs9IDE7XG5cbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPT09IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlcmFibGUubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIFByb21pc2UkMS5yZXNvbHZlKGl0ZXJhYmxlW2ldKS50aGVuKHJlc29sdmVyKGkpLCByZWplY3QpO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG5Qcm9taXNlJDEucmFjZSA9IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlcmFibGUubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIFByb21pc2UkMS5yZXNvbHZlKGl0ZXJhYmxlW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cbnZhciBwID0gUHJvbWlzZSQxLnByb3RvdHlwZTtcblxucC5yZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgdmFyIHByb21pc2UgPSB0aGlzO1xuXG4gICAgaWYgKHByb21pc2Uuc3RhdGUgPT09IFBFTkRJTkcpIHtcbiAgICAgICAgaWYgKHggPT09IHByb21pc2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb21pc2Ugc2V0dGxlZCB3aXRoIGl0c2VsZi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHRoZW4gPSB4ICYmIHhbJ3RoZW4nXTtcblxuICAgICAgICAgICAgaWYgKHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhlbi5jYWxsKHgsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoeCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByb21pc2Uuc3RhdGUgPSBSRVNPTFZFRDtcbiAgICAgICAgcHJvbWlzZS52YWx1ZSA9IHg7XG4gICAgICAgIHByb21pc2Uubm90aWZ5KCk7XG4gICAgfVxufTtcblxucC5yZWplY3QgPSBmdW5jdGlvbiByZWplY3QocmVhc29uKSB7XG4gICAgdmFyIHByb21pc2UgPSB0aGlzO1xuXG4gICAgaWYgKHByb21pc2Uuc3RhdGUgPT09IFBFTkRJTkcpIHtcbiAgICAgICAgaWYgKHJlYXNvbiA9PT0gcHJvbWlzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvbWlzZSBzZXR0bGVkIHdpdGggaXRzZWxmLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvbWlzZS5zdGF0ZSA9IFJFSkVDVEVEO1xuICAgICAgICBwcm9taXNlLnZhbHVlID0gcmVhc29uO1xuICAgICAgICBwcm9taXNlLm5vdGlmeSgpO1xuICAgIH1cbn07XG5cbnAubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KCkge1xuICAgIHZhciBwcm9taXNlID0gdGhpcztcblxuICAgIG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHByb21pc2Uuc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICAgICAgICAgIHdoaWxlIChwcm9taXNlLmRlZmVycmVkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBkZWZlcnJlZCA9IHByb21pc2UuZGVmZXJyZWQuc2hpZnQoKSxcbiAgICAgICAgICAgICAgICAgICAgb25SZXNvbHZlZCA9IGRlZmVycmVkWzBdLFxuICAgICAgICAgICAgICAgICAgICBvblJlamVjdGVkID0gZGVmZXJyZWRbMV0sXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUgPSBkZWZlcnJlZFsyXSxcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0ID0gZGVmZXJyZWRbM107XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZS5zdGF0ZSA9PT0gUkVTT0xWRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb25SZXNvbHZlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUob25SZXNvbHZlZC5jYWxsKHVuZGVmaW5lZCwgcHJvbWlzZS52YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHByb21pc2UudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByb21pc2Uuc3RhdGUgPT09IFJFSkVDVEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG9uUmVqZWN0ZWQuY2FsbCh1bmRlZmluZWQsIHByb21pc2UudmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHByb21pc2UudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG5wLnRoZW4gPSBmdW5jdGlvbiB0aGVuKG9uUmVzb2x2ZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHRoaXM7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHByb21pc2UuZGVmZXJyZWQucHVzaChbb25SZXNvbHZlZCwgb25SZWplY3RlZCwgcmVzb2x2ZSwgcmVqZWN0XSk7XG4gICAgICAgIHByb21pc2Uubm90aWZ5KCk7XG4gICAgfSk7XG59O1xuXG5wLmNhdGNoID0gZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG59O1xuXG4vKipcbiAqIFByb21pc2UgYWRhcHRlci5cbiAqL1xuXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgd2luZG93LlByb21pc2UgPSBQcm9taXNlJDE7XG59XG5cbmZ1bmN0aW9uIFByb21pc2VPYmooZXhlY3V0b3IsIGNvbnRleHQpIHtcblxuICAgIGlmIChleGVjdXRvciBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gZXhlY3V0b3I7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZXhlY3V0b3IuYmluZChjb250ZXh0KSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbn1cblxuUHJvbWlzZU9iai5hbGwgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2VPYmooUHJvbWlzZS5hbGwoaXRlcmFibGUpLCBjb250ZXh0KTtcbn07XG5cblByb21pc2VPYmoucmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZU9iaihQcm9taXNlLnJlc29sdmUodmFsdWUpLCBjb250ZXh0KTtcbn07XG5cblByb21pc2VPYmoucmVqZWN0ID0gZnVuY3Rpb24gKHJlYXNvbiwgY29udGV4dCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZU9iaihQcm9taXNlLnJlamVjdChyZWFzb24pLCBjb250ZXh0KTtcbn07XG5cblByb21pc2VPYmoucmFjZSA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgY29udGV4dCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZU9iaihQcm9taXNlLnJhY2UoaXRlcmFibGUpLCBjb250ZXh0KTtcbn07XG5cbnZhciBwJDEgPSBQcm9taXNlT2JqLnByb3RvdHlwZTtcblxucCQxLmJpbmQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5wJDEudGhlbiA9IGZ1bmN0aW9uIChmdWxmaWxsZWQsIHJlamVjdGVkKSB7XG5cbiAgICBpZiAoZnVsZmlsbGVkICYmIGZ1bGZpbGxlZC5iaW5kICYmIHRoaXMuY29udGV4dCkge1xuICAgICAgICBmdWxmaWxsZWQgPSBmdWxmaWxsZWQuYmluZCh0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIGlmIChyZWplY3RlZCAmJiByZWplY3RlZC5iaW5kICYmIHRoaXMuY29udGV4dCkge1xuICAgICAgICByZWplY3RlZCA9IHJlamVjdGVkLmJpbmQodGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2VPYmoodGhpcy5wcm9taXNlLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCksIHRoaXMuY29udGV4dCk7XG59O1xuXG5wJDEuY2F0Y2ggPSBmdW5jdGlvbiAocmVqZWN0ZWQpIHtcblxuICAgIGlmIChyZWplY3RlZCAmJiByZWplY3RlZC5iaW5kICYmIHRoaXMuY29udGV4dCkge1xuICAgICAgICByZWplY3RlZCA9IHJlamVjdGVkLmJpbmQodGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2VPYmoodGhpcy5wcm9taXNlLmNhdGNoKHJlamVjdGVkKSwgdGhpcy5jb250ZXh0KTtcbn07XG5cbnAkMS5maW5hbGx5ID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cbiAgICByZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgICB9XG4gICAgKTtcbn07XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbnMuXG4gKi9cblxudmFyIHJlZiA9IHt9O1xudmFyIGhhc093blByb3BlcnR5ID0gcmVmLmhhc093blByb3BlcnR5O1xudmFyIHJlZiQxID0gW107XG52YXIgc2xpY2UgPSByZWYkMS5zbGljZTtcbnZhciBkZWJ1ZyA9IGZhbHNlLCBudGljaztcblxudmFyIGluQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuXG5mdW5jdGlvbiBVdGlsIChyZWYpIHtcbiAgICB2YXIgY29uZmlnID0gcmVmLmNvbmZpZztcbiAgICB2YXIgbmV4dFRpY2sgPSByZWYubmV4dFRpY2s7XG5cbiAgICBudGljayA9IG5leHRUaWNrO1xuICAgIGRlYnVnID0gY29uZmlnLmRlYnVnIHx8ICFjb25maWcuc2lsZW50O1xufVxuXG5mdW5jdGlvbiB3YXJuKG1zZykge1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVidWcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbVnVlUmVzb3VyY2Ugd2Fybl06ICcgKyBtc2cpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZXJyb3IobXNnKSB7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBuZXh0VGljayhjYiwgY3R4KSB7XG4gICAgcmV0dXJuIG50aWNrKGNiLCBjdHgpO1xufVxuXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICAgIHJldHVybiBzdHIgPyBzdHIucmVwbGFjZSgvXlxccyp8XFxzKiQvZywgJycpIDogJyc7XG59XG5cbmZ1bmN0aW9uIHRyaW1FbmQoc3RyLCBjaGFycykge1xuXG4gICAgaWYgKHN0ciAmJiBjaGFycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvXFxzKyQvLCAnJyk7XG4gICAgfVxuXG4gICAgaWYgKCFzdHIgfHwgIWNoYXJzKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoKFwiW1wiICsgY2hhcnMgKyBcIl0rJFwiKSksICcnKTtcbn1cblxuZnVuY3Rpb24gdG9Mb3dlcihzdHIpIHtcbiAgICByZXR1cm4gc3RyID8gc3RyLnRvTG93ZXJDYXNlKCkgOiAnJztcbn1cblxuZnVuY3Rpb24gdG9VcHBlcihzdHIpIHtcbiAgICByZXR1cm4gc3RyID8gc3RyLnRvVXBwZXJDYXNlKCkgOiAnJztcbn1cblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5mdW5jdGlvbiBpc1N0cmluZyh2YWwpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICAgIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCc7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KG9iaikgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikgPT0gT2JqZWN0LnByb3RvdHlwZTtcbn1cblxuZnVuY3Rpb24gaXNCbG9iKG9iaikge1xuICAgIHJldHVybiB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgb2JqIGluc3RhbmNlb2YgQmxvYjtcbn1cblxuZnVuY3Rpb24gaXNGb3JtRGF0YShvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyAmJiBvYmogaW5zdGFuY2VvZiBGb3JtRGF0YTtcbn1cblxuZnVuY3Rpb24gd2hlbih2YWx1ZSwgZnVsZmlsbGVkLCByZWplY3RlZCkge1xuXG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlT2JqLnJlc29sdmUodmFsdWUpO1xuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7XG59XG5cbmZ1bmN0aW9uIG9wdGlvbnMoZm4sIG9iaiwgb3B0cykge1xuXG4gICAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgICBpZiAoaXNGdW5jdGlvbihvcHRzKSkge1xuICAgICAgICBvcHRzID0gb3B0cy5jYWxsKG9iaik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlKGZuLmJpbmQoeyR2bTogb2JqLCAkb3B0aW9uczogb3B0c30pLCBmbiwgeyRvcHRpb25zOiBvcHRzfSk7XG59XG5cbmZ1bmN0aW9uIGVhY2gob2JqLCBpdGVyYXRvcikge1xuXG4gICAgdmFyIGksIGtleTtcblxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChvYmpbaV0sIG9ialtpXSwgaSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KG9iaikpIHtcbiAgICAgICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgICAgICBpdGVyYXRvci5jYWxsKG9ialtrZXldLCBvYmpba2V5XSwga2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59XG5cbnZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IF9hc3NpZ247XG5cbmZ1bmN0aW9uIG1lcmdlKHRhcmdldCkge1xuXG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG5cbiAgICBhcmdzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICBfbWVyZ2UodGFyZ2V0LCBzb3VyY2UsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdHModGFyZ2V0KSB7XG5cbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICAgIGFyZ3MuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKHRhcmdldFtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9KTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9hc3NpZ24odGFyZ2V0KSB7XG5cbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICAgIGFyZ3MuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIF9tZXJnZSh0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfbWVyZ2UodGFyZ2V0LCBzb3VyY2UsIGRlZXApIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChkZWVwICYmIChpc1BsYWluT2JqZWN0KHNvdXJjZVtrZXldKSB8fCBpc0FycmF5KHNvdXJjZVtrZXldKSkpIHtcbiAgICAgICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHNvdXJjZVtrZXldKSAmJiAhaXNQbGFpbk9iamVjdCh0YXJnZXRba2V5XSkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzQXJyYXkoc291cmNlW2tleV0pICYmICFpc0FycmF5KHRhcmdldFtrZXldKSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfbWVyZ2UodGFyZ2V0W2tleV0sIHNvdXJjZVtrZXldLCBkZWVwKTtcbiAgICAgICAgfSBlbHNlIGlmIChzb3VyY2Vba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIFJvb3QgUHJlZml4IFRyYW5zZm9ybS5cbiAqL1xuXG5mdW5jdGlvbiByb290IChvcHRpb25zJCQxLCBuZXh0KSB7XG5cbiAgICB2YXIgdXJsID0gbmV4dChvcHRpb25zJCQxKTtcblxuICAgIGlmIChpc1N0cmluZyhvcHRpb25zJCQxLnJvb3QpICYmICEvXihodHRwcz86KT9cXC8vLnRlc3QodXJsKSkge1xuICAgICAgICB1cmwgPSB0cmltRW5kKG9wdGlvbnMkJDEucm9vdCwgJy8nKSArICcvJyArIHVybDtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsO1xufVxuXG4vKipcbiAqIFF1ZXJ5IFBhcmFtZXRlciBUcmFuc2Zvcm0uXG4gKi9cblxuZnVuY3Rpb24gcXVlcnkgKG9wdGlvbnMkJDEsIG5leHQpIHtcblxuICAgIHZhciB1cmxQYXJhbXMgPSBPYmplY3Qua2V5cyhVcmwub3B0aW9ucy5wYXJhbXMpLCBxdWVyeSA9IHt9LCB1cmwgPSBuZXh0KG9wdGlvbnMkJDEpO1xuXG4gICAgZWFjaChvcHRpb25zJCQxLnBhcmFtcywgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgaWYgKHVybFBhcmFtcy5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICAgICAgICBxdWVyeVtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHF1ZXJ5ID0gVXJsLnBhcmFtcyhxdWVyeSk7XG5cbiAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09IC0xID8gJz8nIDogJyYnKSArIHF1ZXJ5O1xuICAgIH1cblxuICAgIHJldHVybiB1cmw7XG59XG5cbi8qKlxuICogVVJMIFRlbXBsYXRlIHYyLjAuNiAoaHR0cHM6Ly9naXRodWIuY29tL2JyYW1zdGVpbi91cmwtdGVtcGxhdGUpXG4gKi9cblxuZnVuY3Rpb24gZXhwYW5kKHVybCwgcGFyYW1zLCB2YXJpYWJsZXMpIHtcblxuICAgIHZhciB0bXBsID0gcGFyc2UodXJsKSwgZXhwYW5kZWQgPSB0bXBsLmV4cGFuZChwYXJhbXMpO1xuXG4gICAgaWYgKHZhcmlhYmxlcykge1xuICAgICAgICB2YXJpYWJsZXMucHVzaC5hcHBseSh2YXJpYWJsZXMsIHRtcGwudmFycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cGFuZGVkO1xufVxuXG5mdW5jdGlvbiBwYXJzZSh0ZW1wbGF0ZSkge1xuXG4gICAgdmFyIG9wZXJhdG9ycyA9IFsnKycsICcjJywgJy4nLCAnLycsICc7JywgJz8nLCAnJiddLCB2YXJpYWJsZXMgPSBbXTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHZhcnM6IHZhcmlhYmxlcyxcbiAgICAgICAgZXhwYW5kOiBmdW5jdGlvbiBleHBhbmQoY29udGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL1xceyhbXnt9XSspXFx9fChbXnt9XSspL2csIGZ1bmN0aW9uIChfLCBleHByZXNzaW9uLCBsaXRlcmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24pIHtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgb3BlcmF0b3IgPSBudWxsLCB2YWx1ZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3JzLmluZGV4T2YoZXhwcmVzc2lvbi5jaGFyQXQoMCkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmNoYXJBdCgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24uc3BsaXQoLywvZykuZm9yRWFjaChmdW5jdGlvbiAodmFyaWFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXAgPSAvKFteOipdKikoPzo6KFxcZCspfChcXCopKT8vLmV4ZWModmFyaWFibGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2guYXBwbHkodmFsdWVzLCBnZXRWYWx1ZXMoY29udGV4dCwgb3BlcmF0b3IsIHRtcFsxXSwgdG1wWzJdIHx8IHRtcFszXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLnB1c2godG1wWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yICYmIG9wZXJhdG9yICE9PSAnKycpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlcGFyYXRvciA9ICcsJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09PSAnPycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3IgPSAnJic7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yICE9PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoICE9PSAwID8gb3BlcmF0b3IgOiAnJykgKyB2YWx1ZXMuam9pbihzZXBhcmF0b3IpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKCcsJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXNlcnZlZChsaXRlcmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwga2V5LCBtb2RpZmllcikge1xuXG4gICAgdmFyIHZhbHVlID0gY29udGV4dFtrZXldLCByZXN1bHQgPSBbXTtcblxuICAgIGlmIChpc0RlZmluZWQodmFsdWUpICYmIHZhbHVlICE9PSAnJykge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChtb2RpZmllciAmJiBtb2RpZmllciAhPT0gJyonKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgcGFyc2VJbnQobW9kaWZpZXIsIDEwKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZSwgaXNLZXlPcGVyYXRvcihvcGVyYXRvcikgPyBrZXkgOiBudWxsKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobW9kaWZpZXIgPT09ICcqJykge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5maWx0ZXIoaXNEZWZpbmVkKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IG51bGwpKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLCBrKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIHRtcCA9IFtdO1xuXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLmZpbHRlcihpc0RlZmluZWQpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGspKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWVba10udG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgKyAnPScgKyB0bXAuam9pbignLCcpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRtcC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godG1wLmpvaW4oJywnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wZXJhdG9yID09PSAnOycpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChrZXkpKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJycgJiYgKG9wZXJhdG9yID09PSAnJicgfHwgb3BlcmF0b3IgPT09ICc/JykpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgJz0nKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSB7XG4gICAgcmV0dXJuIG9wZXJhdG9yID09PSAnOycgfHwgb3BlcmF0b3IgPT09ICcmJyB8fCBvcGVyYXRvciA9PT0gJz8nO1xufVxuXG5mdW5jdGlvbiBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGtleSkge1xuXG4gICAgdmFsdWUgPSAob3BlcmF0b3IgPT09ICcrJyB8fCBvcGVyYXRvciA9PT0gJyMnKSA/IGVuY29kZVJlc2VydmVkKHZhbHVlKSA6IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGVuY29kZVJlc2VydmVkKHN0cikge1xuICAgIHJldHVybiBzdHIuc3BsaXQoLyglWzAtOUEtRmEtZl17Mn0pL2cpLm1hcChmdW5jdGlvbiAocGFydCkge1xuICAgICAgICBpZiAoIS8lWzAtOUEtRmEtZl0vLnRlc3QocGFydCkpIHtcbiAgICAgICAgICAgIHBhcnQgPSBlbmNvZGVVUkkocGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgfSkuam9pbignJyk7XG59XG5cbi8qKlxuICogVVJMIFRlbXBsYXRlIChSRkMgNjU3MCkgVHJhbnNmb3JtLlxuICovXG5cbmZ1bmN0aW9uIHRlbXBsYXRlIChvcHRpb25zKSB7XG5cbiAgICB2YXIgdmFyaWFibGVzID0gW10sIHVybCA9IGV4cGFuZChvcHRpb25zLnVybCwgb3B0aW9ucy5wYXJhbXMsIHZhcmlhYmxlcyk7XG5cbiAgICB2YXJpYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLnBhcmFtc1trZXldO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVybDtcbn1cblxuLyoqXG4gKiBTZXJ2aWNlIGZvciBVUkwgdGVtcGxhdGluZy5cbiAqL1xuXG5mdW5jdGlvbiBVcmwodXJsLCBwYXJhbXMpIHtcblxuICAgIHZhciBzZWxmID0gdGhpcyB8fCB7fSwgb3B0aW9ucyQkMSA9IHVybCwgdHJhbnNmb3JtO1xuXG4gICAgaWYgKGlzU3RyaW5nKHVybCkpIHtcbiAgICAgICAgb3B0aW9ucyQkMSA9IHt1cmw6IHVybCwgcGFyYW1zOiBwYXJhbXN9O1xuICAgIH1cblxuICAgIG9wdGlvbnMkJDEgPSBtZXJnZSh7fSwgVXJsLm9wdGlvbnMsIHNlbGYuJG9wdGlvbnMsIG9wdGlvbnMkJDEpO1xuXG4gICAgVXJsLnRyYW5zZm9ybXMuZm9yRWFjaChmdW5jdGlvbiAoaGFuZGxlcikge1xuXG4gICAgICAgIGlmIChpc1N0cmluZyhoYW5kbGVyKSkge1xuICAgICAgICAgICAgaGFuZGxlciA9IFVybC50cmFuc2Zvcm1baGFuZGxlcl07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkge1xuICAgICAgICAgICAgdHJhbnNmb3JtID0gZmFjdG9yeShoYW5kbGVyLCB0cmFuc2Zvcm0sIHNlbGYuJHZtKTtcbiAgICAgICAgfVxuXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtKG9wdGlvbnMkJDEpO1xufVxuXG4vKipcbiAqIFVybCBvcHRpb25zLlxuICovXG5cblVybC5vcHRpb25zID0ge1xuICAgIHVybDogJycsXG4gICAgcm9vdDogbnVsbCxcbiAgICBwYXJhbXM6IHt9XG59O1xuXG4vKipcbiAqIFVybCB0cmFuc2Zvcm1zLlxuICovXG5cblVybC50cmFuc2Zvcm0gPSB7dGVtcGxhdGU6IHRlbXBsYXRlLCBxdWVyeTogcXVlcnksIHJvb3Q6IHJvb3R9O1xuVXJsLnRyYW5zZm9ybXMgPSBbJ3RlbXBsYXRlJywgJ3F1ZXJ5JywgJ3Jvb3QnXTtcblxuLyoqXG4gKiBFbmNvZGVzIGEgVXJsIHBhcmFtZXRlciBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cblVybC5wYXJhbXMgPSBmdW5jdGlvbiAob2JqKSB7XG5cbiAgICB2YXIgcGFyYW1zID0gW10sIGVzY2FwZSA9IGVuY29kZVVSSUNvbXBvbmVudDtcblxuICAgIHBhcmFtcy5hZGQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wdXNoKGVzY2FwZShrZXkpICsgJz0nICsgZXNjYXBlKHZhbHVlKSk7XG4gICAgfTtcblxuICAgIHNlcmlhbGl6ZShwYXJhbXMsIG9iaik7XG5cbiAgICByZXR1cm4gcGFyYW1zLmpvaW4oJyYnKS5yZXBsYWNlKC8lMjAvZywgJysnKTtcbn07XG5cbi8qKlxuICogUGFyc2UgYSBVUkwgYW5kIHJldHVybiBpdHMgY29tcG9uZW50cy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKi9cblxuVXJsLnBhcnNlID0gZnVuY3Rpb24gKHVybCkge1xuXG4gICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuXG4gICAgaWYgKGRvY3VtZW50LmRvY3VtZW50TW9kZSkge1xuICAgICAgICBlbC5ocmVmID0gdXJsO1xuICAgICAgICB1cmwgPSBlbC5ocmVmO1xuICAgIH1cblxuICAgIGVsLmhyZWYgPSB1cmw7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBocmVmOiBlbC5ocmVmLFxuICAgICAgICBwcm90b2NvbDogZWwucHJvdG9jb2wgPyBlbC5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICBwb3J0OiBlbC5wb3J0LFxuICAgICAgICBob3N0OiBlbC5ob3N0LFxuICAgICAgICBob3N0bmFtZTogZWwuaG9zdG5hbWUsXG4gICAgICAgIHBhdGhuYW1lOiBlbC5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJyA/IGVsLnBhdGhuYW1lIDogJy8nICsgZWwucGF0aG5hbWUsXG4gICAgICAgIHNlYXJjaDogZWwuc2VhcmNoID8gZWwuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgaGFzaDogZWwuaGFzaCA/IGVsLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJ1xuICAgIH07XG59O1xuXG5mdW5jdGlvbiBmYWN0b3J5KGhhbmRsZXIsIG5leHQsIHZtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChvcHRpb25zJCQxKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVyLmNhbGwodm0sIG9wdGlvbnMkJDEsIG5leHQpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZShwYXJhbXMsIG9iaiwgc2NvcGUpIHtcblxuICAgIHZhciBhcnJheSA9IGlzQXJyYXkob2JqKSwgcGxhaW4gPSBpc1BsYWluT2JqZWN0KG9iaiksIGhhc2g7XG5cbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcblxuICAgICAgICBoYXNoID0gaXNPYmplY3QodmFsdWUpIHx8IGlzQXJyYXkodmFsdWUpO1xuXG4gICAgICAgIGlmIChzY29wZSkge1xuICAgICAgICAgICAga2V5ID0gc2NvcGUgKyAnWycgKyAocGxhaW4gfHwgaGFzaCA/IGtleSA6ICcnKSArICddJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2NvcGUgJiYgYXJyYXkpIHtcbiAgICAgICAgICAgIHBhcmFtcy5hZGQodmFsdWUubmFtZSwgdmFsdWUudmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhc2gpIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZShwYXJhbXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyYW1zLmFkZChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vKipcbiAqIFhEb21haW4gY2xpZW50IChJbnRlcm5ldCBFeHBsb3JlcikuXG4gKi9cblxuZnVuY3Rpb24geGRyQ2xpZW50IChyZXF1ZXN0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlT2JqKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cbiAgICAgICAgdmFyIHhkciA9IG5ldyBYRG9tYWluUmVxdWVzdCgpLCBoYW5kbGVyID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVmLnR5cGU7XG5cblxuICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSAwO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdsb2FkJykge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAyMDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDUwMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlcXVlc3QucmVzcG9uZFdpdGgoeGRyLnJlc3BvbnNlVGV4dCwge3N0YXR1czogc3RhdHVzfSkpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICByZXF1ZXN0LmFib3J0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geGRyLmFib3J0KCk7IH07XG5cbiAgICAgICAgeGRyLm9wZW4ocmVxdWVzdC5tZXRob2QsIHJlcXVlc3QuZ2V0VXJsKCkpO1xuXG4gICAgICAgIGlmIChyZXF1ZXN0LnRpbWVvdXQpIHtcbiAgICAgICAgICAgIHhkci50aW1lb3V0ID0gcmVxdWVzdC50aW1lb3V0O1xuICAgICAgICB9XG5cbiAgICAgICAgeGRyLm9ubG9hZCA9IGhhbmRsZXI7XG4gICAgICAgIHhkci5vbmFib3J0ID0gaGFuZGxlcjtcbiAgICAgICAgeGRyLm9uZXJyb3IgPSBoYW5kbGVyO1xuICAgICAgICB4ZHIub250aW1lb3V0ID0gaGFuZGxlcjtcbiAgICAgICAgeGRyLm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgeGRyLnNlbmQocmVxdWVzdC5nZXRCb2R5KCkpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIENPUlMgSW50ZXJjZXB0b3IuXG4gKi9cblxudmFyIFNVUFBPUlRTX0NPUlMgPSBpbkJyb3dzZXIgJiYgJ3dpdGhDcmVkZW50aWFscycgaW4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbmZ1bmN0aW9uIGNvcnMgKHJlcXVlc3QpIHtcblxuICAgIGlmIChpbkJyb3dzZXIpIHtcblxuICAgICAgICB2YXIgb3JnVXJsID0gVXJsLnBhcnNlKGxvY2F0aW9uLmhyZWYpO1xuICAgICAgICB2YXIgcmVxVXJsID0gVXJsLnBhcnNlKHJlcXVlc3QuZ2V0VXJsKCkpO1xuXG4gICAgICAgIGlmIChyZXFVcmwucHJvdG9jb2wgIT09IG9yZ1VybC5wcm90b2NvbCB8fCByZXFVcmwuaG9zdCAhPT0gb3JnVXJsLmhvc3QpIHtcblxuICAgICAgICAgICAgcmVxdWVzdC5jcm9zc09yaWdpbiA9IHRydWU7XG4gICAgICAgICAgICByZXF1ZXN0LmVtdWxhdGVIVFRQID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICghU1VQUE9SVFNfQ09SUykge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuY2xpZW50ID0geGRyQ2xpZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbi8qKlxuICogRm9ybSBkYXRhIEludGVyY2VwdG9yLlxuICovXG5cbmZ1bmN0aW9uIGZvcm0gKHJlcXVlc3QpIHtcblxuICAgIGlmIChpc0Zvcm1EYXRhKHJlcXVlc3QuYm9keSkpIHtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmRlbGV0ZSgnQ29udGVudC1UeXBlJyk7XG4gICAgfSBlbHNlIGlmIChpc09iamVjdChyZXF1ZXN0LmJvZHkpICYmIHJlcXVlc3QuZW11bGF0ZUpTT04pIHtcbiAgICAgICAgcmVxdWVzdC5ib2R5ID0gVXJsLnBhcmFtcyhyZXF1ZXN0LmJvZHkpO1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XG4gICAgfVxuXG59XG5cbi8qKlxuICogSlNPTiBJbnRlcmNlcHRvci5cbiAqL1xuXG5mdW5jdGlvbiBqc29uIChyZXF1ZXN0KSB7XG5cbiAgICB2YXIgdHlwZSA9IHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpIHx8ICcnO1xuXG4gICAgaWYgKGlzT2JqZWN0KHJlcXVlc3QuYm9keSkgJiYgdHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi9qc29uJykgPT09IDApIHtcbiAgICAgICAgcmVxdWVzdC5ib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5ib2R5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHlUZXh0ID8gd2hlbihyZXNwb25zZS50ZXh0KCksIGZ1bmN0aW9uICh0ZXh0KSB7XG5cbiAgICAgICAgICAgIHZhciB0eXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpIHx8ICcnO1xuXG4gICAgICAgICAgICBpZiAodHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi9qc29uJykgPT09IDAgfHwgaXNKc29uKHRleHQpKSB7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5ib2R5ID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmJvZHkgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZS5ib2R5ID0gdGV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuXG4gICAgICAgIH0pIDogcmVzcG9uc2U7XG5cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpc0pzb24oc3RyKSB7XG5cbiAgICB2YXIgc3RhcnQgPSBzdHIubWF0Y2goL15cXHMqKFxcW3xcXHspLyk7XG4gICAgdmFyIGVuZCA9IHsnWyc6IC9dXFxzKiQvLCAneyc6IC99XFxzKiQvfTtcblxuICAgIHJldHVybiBzdGFydCAmJiBlbmRbc3RhcnRbMV1dLnRlc3Qoc3RyKTtcbn1cblxuLyoqXG4gKiBKU09OUCBjbGllbnQgKEJyb3dzZXIpLlxuICovXG5cbmZ1bmN0aW9uIGpzb25wQ2xpZW50IChyZXF1ZXN0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlT2JqKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cbiAgICAgICAgdmFyIG5hbWUgPSByZXF1ZXN0Lmpzb25wIHx8ICdjYWxsYmFjaycsIGNhbGxiYWNrID0gcmVxdWVzdC5qc29ucENhbGxiYWNrIHx8ICdfanNvbnAnICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIpLCBib2R5ID0gbnVsbCwgaGFuZGxlciwgc2NyaXB0O1xuXG4gICAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICB2YXIgdHlwZSA9IHJlZi50eXBlO1xuXG5cbiAgICAgICAgICAgIHZhciBzdGF0dXMgPSAwO1xuXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2xvYWQnICYmIGJvZHkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMgPSAyMDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMgPSA1MDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdGF0dXMgJiYgd2luZG93W2NhbGxiYWNrXSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB3aW5kb3dbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzb2x2ZShyZXF1ZXN0LnJlc3BvbmRXaXRoKGJvZHksIHtzdGF0dXM6IHN0YXR1c30pKTtcbiAgICAgICAgfTtcblxuICAgICAgICB3aW5kb3dbY2FsbGJhY2tdID0gZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVxdWVzdC5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGhhbmRsZXIoe3R5cGU6ICdhYm9ydCd9KTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXF1ZXN0LnBhcmFtc1tuYW1lXSA9IGNhbGxiYWNrO1xuXG4gICAgICAgIGlmIChyZXF1ZXN0LnRpbWVvdXQpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQocmVxdWVzdC5hYm9ydCwgcmVxdWVzdC50aW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICBzY3JpcHQuc3JjID0gcmVxdWVzdC5nZXRVcmwoKTtcbiAgICAgICAgc2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICAgICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGhhbmRsZXI7XG4gICAgICAgIHNjcmlwdC5vbmVycm9yID0gaGFuZGxlcjtcblxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogSlNPTlAgSW50ZXJjZXB0b3IuXG4gKi9cblxuZnVuY3Rpb24ganNvbnAgKHJlcXVlc3QpIHtcblxuICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCA9PSAnSlNPTlAnKSB7XG4gICAgICAgIHJlcXVlc3QuY2xpZW50ID0ganNvbnBDbGllbnQ7XG4gICAgfVxuXG59XG5cbi8qKlxuICogQmVmb3JlIEludGVyY2VwdG9yLlxuICovXG5cbmZ1bmN0aW9uIGJlZm9yZSAocmVxdWVzdCkge1xuXG4gICAgaWYgKGlzRnVuY3Rpb24ocmVxdWVzdC5iZWZvcmUpKSB7XG4gICAgICAgIHJlcXVlc3QuYmVmb3JlLmNhbGwodGhpcywgcmVxdWVzdCk7XG4gICAgfVxuXG59XG5cbi8qKlxuICogSFRUUCBtZXRob2Qgb3ZlcnJpZGUgSW50ZXJjZXB0b3IuXG4gKi9cblxuZnVuY3Rpb24gbWV0aG9kIChyZXF1ZXN0KSB7XG5cbiAgICBpZiAocmVxdWVzdC5lbXVsYXRlSFRUUCAmJiAvXihQVVR8UEFUQ0h8REVMRVRFKSQvaS50ZXN0KHJlcXVlc3QubWV0aG9kKSkge1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KCdYLUhUVFAtTWV0aG9kLU92ZXJyaWRlJywgcmVxdWVzdC5tZXRob2QpO1xuICAgICAgICByZXF1ZXN0Lm1ldGhvZCA9ICdQT1NUJztcbiAgICB9XG5cbn1cblxuLyoqXG4gKiBIZWFkZXIgSW50ZXJjZXB0b3IuXG4gKi9cblxuZnVuY3Rpb24gaGVhZGVyIChyZXF1ZXN0KSB7XG5cbiAgICB2YXIgaGVhZGVycyA9IGFzc2lnbih7fSwgSHR0cC5oZWFkZXJzLmNvbW1vbixcbiAgICAgICAgIXJlcXVlc3QuY3Jvc3NPcmlnaW4gPyBIdHRwLmhlYWRlcnMuY3VzdG9tIDoge30sXG4gICAgICAgIEh0dHAuaGVhZGVyc1t0b0xvd2VyKHJlcXVlc3QubWV0aG9kKV1cbiAgICApO1xuXG4gICAgZWFjaChoZWFkZXJzLCBmdW5jdGlvbiAodmFsdWUsIG5hbWUpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0LmhlYWRlcnMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG59XG5cbi8qKlxuICogWE1MSHR0cCBjbGllbnQgKEJyb3dzZXIpLlxuICovXG5cbmZ1bmN0aW9uIHhockNsaWVudCAocmVxdWVzdCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZU9iaihmdW5jdGlvbiAocmVzb2x2ZSkge1xuXG4gICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKSwgaGFuZGxlciA9IGZ1bmN0aW9uIChldmVudCkge1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVxdWVzdC5yZXNwb25kV2l0aChcbiAgICAgICAgICAgICAgICAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHQsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzID09PSAxMjIzID8gMjA0IDogeGhyLnN0YXR1cywgLy8gSUU5IHN0YXR1cyBidWdcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1cyA9PT0gMTIyMyA/ICdObyBDb250ZW50JyA6IHRyaW0oeGhyLnN0YXR1c1RleHQpXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBlYWNoKHRyaW0oeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKS5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVycy5hcHBlbmQocm93LnNsaWNlKDAsIHJvdy5pbmRleE9mKCc6JykpLCByb3cuc2xpY2Uocm93LmluZGV4T2YoJzonKSArIDEpKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICByZXF1ZXN0LmFib3J0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geGhyLmFib3J0KCk7IH07XG5cbiAgICAgICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIHJlcXVlc3QuZ2V0VXJsKCksIHRydWUpO1xuXG4gICAgICAgIGlmIChyZXF1ZXN0LnRpbWVvdXQpIHtcbiAgICAgICAgICAgIHhoci50aW1lb3V0ID0gcmVxdWVzdC50aW1lb3V0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3QucmVzcG9uc2VUeXBlICYmICdyZXNwb25zZVR5cGUnIGluIHhocikge1xuICAgICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHJlcXVlc3QucmVzcG9uc2VUeXBlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzIHx8IHJlcXVlc3QuY3JlZGVudGlhbHMpIHtcbiAgICAgICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZXF1ZXN0LmNyb3NzT3JpZ2luKSB7XG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KCdYLVJlcXVlc3RlZC1XaXRoJywgJ1hNTEh0dHBSZXF1ZXN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkZXByZWNhdGVkIHVzZSBkb3dubG9hZFByb2dyZXNzXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlcXVlc3QucHJvZ3Jlc3MpICYmIHJlcXVlc3QubWV0aG9kID09PSAnR0VUJykge1xuICAgICAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcmVxdWVzdC5wcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXF1ZXN0LmRvd25sb2FkUHJvZ3Jlc3MpKSB7XG4gICAgICAgICAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCByZXF1ZXN0LmRvd25sb2FkUHJvZ3Jlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVwcmVjYXRlZCB1c2UgdXBsb2FkUHJvZ3Jlc3NcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ocmVxdWVzdC5wcm9ncmVzcykgJiYgL14oUE9TVHxQVVQpJC9pLnRlc3QocmVxdWVzdC5tZXRob2QpKSB7XG4gICAgICAgICAgICB4aHIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcmVxdWVzdC5wcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXF1ZXN0LnVwbG9hZFByb2dyZXNzKSAmJiB4aHIudXBsb2FkKSB7XG4gICAgICAgICAgICB4aHIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcmVxdWVzdC51cGxvYWRQcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIG5hbWUpIHtcbiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgeGhyLm9ubG9hZCA9IGhhbmRsZXI7XG4gICAgICAgIHhoci5vbmFib3J0ID0gaGFuZGxlcjtcbiAgICAgICAgeGhyLm9uZXJyb3IgPSBoYW5kbGVyO1xuICAgICAgICB4aHIub250aW1lb3V0ID0gaGFuZGxlcjtcbiAgICAgICAgeGhyLnNlbmQocmVxdWVzdC5nZXRCb2R5KCkpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEh0dHAgY2xpZW50IChOb2RlKS5cbiAqL1xuXG5mdW5jdGlvbiBub2RlQ2xpZW50IChyZXF1ZXN0KSB7XG5cbiAgICB2YXIgY2xpZW50ID0gcmVxdWlyZSgnZ290Jyk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2VPYmooZnVuY3Rpb24gKHJlc29sdmUpIHtcblxuICAgICAgICB2YXIgdXJsID0gcmVxdWVzdC5nZXRVcmwoKTtcbiAgICAgICAgdmFyIGJvZHkgPSByZXF1ZXN0LmdldEJvZHkoKTtcbiAgICAgICAgdmFyIG1ldGhvZCA9IHJlcXVlc3QubWV0aG9kO1xuICAgICAgICB2YXIgaGVhZGVycyA9IHt9LCBoYW5kbGVyO1xuXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSkge1xuICAgICAgICAgICAgaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBjbGllbnQodXJsLCB7Ym9keTogYm9keSwgbWV0aG9kOiBtZXRob2QsIGhlYWRlcnM6IGhlYWRlcnN9KS50aGVuKGhhbmRsZXIgPSBmdW5jdGlvbiAocmVzcCkge1xuXG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXF1ZXN0LnJlc3BvbmRXaXRoKHJlc3AuYm9keSwge1xuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzcC5zdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgIHN0YXR1c1RleHQ6IHRyaW0ocmVzcC5zdGF0dXNNZXNzYWdlKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGVhY2gocmVzcC5oZWFkZXJzLCBmdW5jdGlvbiAodmFsdWUsIG5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZS5oZWFkZXJzLnNldChuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG5cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yJCQxKSB7IHJldHVybiBoYW5kbGVyKGVycm9yJCQxLnJlc3BvbnNlKTsgfSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQmFzZSBjbGllbnQuXG4gKi9cblxuZnVuY3Rpb24gQ2xpZW50IChjb250ZXh0KSB7XG5cbiAgICB2YXIgcmVxSGFuZGxlcnMgPSBbc2VuZFJlcXVlc3RdLCByZXNIYW5kbGVycyA9IFtdO1xuXG4gICAgaWYgKCFpc09iamVjdChjb250ZXh0KSkge1xuICAgICAgICBjb250ZXh0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBDbGllbnQocmVxdWVzdCkge1xuICAgICAgICB3aGlsZSAocmVxSGFuZGxlcnMubGVuZ3RoKSB7XG5cbiAgICAgICAgICAgIHZhciBoYW5kbGVyID0gcmVxSGFuZGxlcnMucG9wKCk7XG5cbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGhhbmRsZXIpKSB7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSAodm9pZCAwKSwgbmV4dCA9ICh2b2lkIDApO1xuXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBoYW5kbGVyLmNhbGwoY29udGV4dCwgcmVxdWVzdCwgZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbmV4dCA9IHZhbDsgfSkgfHwgbmV4dDtcblxuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlT2JqKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzSGFuZGxlcnMuZm9yRWFjaChmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gd2hlbihyZXNwb25zZSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyLmNhbGwoY29udGV4dCwgcmVzcG9uc2UpIHx8IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlbihyZXNwb25zZSwgcmVzb2x2ZSwgcmVqZWN0KTtcblxuICAgICAgICAgICAgICAgICAgICB9LCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzSGFuZGxlcnMudW5zaGlmdChyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdhcm4oKFwiSW52YWxpZCBpbnRlcmNlcHRvciBvZiB0eXBlIFwiICsgKHR5cGVvZiBoYW5kbGVyKSArIFwiLCBtdXN0IGJlIGEgZnVuY3Rpb25cIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQ2xpZW50LnVzZSA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICAgIHJlcUhhbmRsZXJzLnB1c2goaGFuZGxlcik7XG4gICAgfTtcblxuICAgIHJldHVybiBDbGllbnQ7XG59XG5cbmZ1bmN0aW9uIHNlbmRSZXF1ZXN0KHJlcXVlc3QpIHtcblxuICAgIHZhciBjbGllbnQgPSByZXF1ZXN0LmNsaWVudCB8fCAoaW5Ccm93c2VyID8geGhyQ2xpZW50IDogbm9kZUNsaWVudCk7XG5cbiAgICByZXR1cm4gY2xpZW50KHJlcXVlc3QpO1xufVxuXG4vKipcbiAqIEhUVFAgSGVhZGVycy5cbiAqL1xuXG52YXIgSGVhZGVycyA9IGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG5cbiAgICB0aGlzLm1hcCA9IHt9O1xuXG4gICAgZWFjaChoZWFkZXJzLCBmdW5jdGlvbiAodmFsdWUsIG5hbWUpIHsgcmV0dXJuIHRoaXMkMS5hcHBlbmQobmFtZSwgdmFsdWUpOyB9KTtcbn07XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIGhhcyAobmFtZSkge1xuICAgIHJldHVybiBnZXROYW1lKHRoaXMubWFwLCBuYW1lKSAhPT0gbnVsbDtcbn07XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldCAobmFtZSkge1xuXG4gICAgdmFyIGxpc3QgPSB0aGlzLm1hcFtnZXROYW1lKHRoaXMubWFwLCBuYW1lKV07XG5cbiAgICByZXR1cm4gbGlzdCA/IGxpc3Quam9pbigpIDogbnVsbDtcbn07XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldEFsbCA9IGZ1bmN0aW9uIGdldEFsbCAobmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hcFtnZXROYW1lKHRoaXMubWFwLCBuYW1lKV0gfHwgW107XG59O1xuXG5IZWFkZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShnZXROYW1lKHRoaXMubWFwLCBuYW1lKSB8fCBuYW1lKV0gPSBbdHJpbSh2YWx1ZSldO1xufTtcblxuSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuXG4gICAgdmFyIGxpc3QgPSB0aGlzLm1hcFtnZXROYW1lKHRoaXMubWFwLCBuYW1lKV07XG5cbiAgICBpZiAobGlzdCkge1xuICAgICAgICBsaXN0LnB1c2godHJpbSh2YWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICB9XG59O1xuXG5IZWFkZXJzLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbiBkZWxldGUkMSAobmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLm1hcFtnZXROYW1lKHRoaXMubWFwLCBuYW1lKV07XG59O1xuXG5IZWFkZXJzLnByb3RvdHlwZS5kZWxldGVBbGwgPSBmdW5jdGlvbiBkZWxldGVBbGwgKCkge1xuICAgIHRoaXMubWFwID0ge307XG59O1xuXG5IZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaCAoY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICBlYWNoKHRoaXMubWFwLCBmdW5jdGlvbiAobGlzdCwgbmFtZSkge1xuICAgICAgICBlYWNoKGxpc3QsIGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB2YWx1ZSwgbmFtZSwgdGhpcyQxKTsgfSk7XG4gICAgfSk7XG59O1xuXG5mdW5jdGlvbiBnZXROYW1lKG1hcCwgbmFtZSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhtYXApLnJlZHVjZShmdW5jdGlvbiAocHJldiwgY3Vycikge1xuICAgICAgICByZXR1cm4gdG9Mb3dlcihuYW1lKSA9PT0gdG9Mb3dlcihjdXJyKSA/IGN1cnIgOiBwcmV2O1xuICAgIH0sIG51bGwpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcblxuICAgIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+XS9pLnRlc3QobmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJpbShuYW1lKTtcbn1cblxuLyoqXG4gKiBIVFRQIFJlc3BvbnNlLlxuICovXG5cbnZhciBSZXNwb25zZSA9IGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHksIHJlZikge1xuICAgIHZhciB1cmwgPSByZWYudXJsO1xuICAgIHZhciBoZWFkZXJzID0gcmVmLmhlYWRlcnM7XG4gICAgdmFyIHN0YXR1cyA9IHJlZi5zdGF0dXM7XG4gICAgdmFyIHN0YXR1c1RleHQgPSByZWYuc3RhdHVzVGV4dDtcblxuXG4gICAgdGhpcy51cmwgPSB1cmw7XG4gICAgdGhpcy5vayA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzIHx8IDA7XG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gc3RhdHVzVGV4dCB8fCAnJztcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhoZWFkZXJzKTtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuXG4gICAgaWYgKGlzU3RyaW5nKGJvZHkpKSB7XG5cbiAgICAgICAgdGhpcy5ib2R5VGV4dCA9IGJvZHk7XG5cbiAgICB9IGVsc2UgaWYgKGlzQmxvYihib2R5KSkge1xuXG4gICAgICAgIHRoaXMuYm9keUJsb2IgPSBib2R5O1xuXG4gICAgICAgIGlmIChpc0Jsb2JUZXh0KGJvZHkpKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHlUZXh0ID0gYmxvYlRleHQoYm9keSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5SZXNwb25zZS5wcm90b3R5cGUuYmxvYiA9IGZ1bmN0aW9uIGJsb2IgKCkge1xuICAgIHJldHVybiB3aGVuKHRoaXMuYm9keUJsb2IpO1xufTtcblxuUmVzcG9uc2UucHJvdG90eXBlLnRleHQgPSBmdW5jdGlvbiB0ZXh0ICgpIHtcbiAgICByZXR1cm4gd2hlbih0aGlzLmJvZHlUZXh0KTtcbn07XG5cblJlc3BvbnNlLnByb3RvdHlwZS5qc29uID0gZnVuY3Rpb24ganNvbiAoKSB7XG4gICAgcmV0dXJuIHdoZW4odGhpcy50ZXh0KCksIGZ1bmN0aW9uICh0ZXh0KSB7IHJldHVybiBKU09OLnBhcnNlKHRleHQpOyB9KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZXNwb25zZS5wcm90b3R5cGUsICdkYXRhJywge1xuXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJvZHk7XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24gc2V0KGJvZHkpIHtcbiAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB9XG5cbn0pO1xuXG5mdW5jdGlvbiBibG9iVGV4dChib2R5KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlT2JqKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cbiAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoYm9keSk7XG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpO1xuICAgICAgICB9O1xuXG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzQmxvYlRleHQoYm9keSkge1xuICAgIHJldHVybiBib2R5LnR5cGUuaW5kZXhPZigndGV4dCcpID09PSAwIHx8IGJvZHkudHlwZS5pbmRleE9mKCdqc29uJykgIT09IC0xO1xufVxuXG4vKipcbiAqIEhUVFAgUmVxdWVzdC5cbiAqL1xuXG52YXIgUmVxdWVzdCA9IGZ1bmN0aW9uIFJlcXVlc3Qob3B0aW9ucyQkMSkge1xuXG4gICAgdGhpcy5ib2R5ID0gbnVsbDtcbiAgICB0aGlzLnBhcmFtcyA9IHt9O1xuXG4gICAgYXNzaWduKHRoaXMsIG9wdGlvbnMkJDEsIHtcbiAgICAgICAgbWV0aG9kOiB0b1VwcGVyKG9wdGlvbnMkJDEubWV0aG9kIHx8ICdHRVQnKVxuICAgIH0pO1xuXG4gICAgaWYgKCEodGhpcy5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKTtcbiAgICB9XG59O1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5nZXRVcmwgPSBmdW5jdGlvbiBnZXRVcmwgKCkge1xuICAgIHJldHVybiBVcmwodGhpcyk7XG59O1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5nZXRCb2R5ID0gZnVuY3Rpb24gZ2V0Qm9keSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYm9keTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLnJlc3BvbmRXaXRoID0gZnVuY3Rpb24gcmVzcG9uZFdpdGggKGJvZHksIG9wdGlvbnMkJDEpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGJvZHksIGFzc2lnbihvcHRpb25zJCQxIHx8IHt9LCB7dXJsOiB0aGlzLmdldFVybCgpfSkpO1xufTtcblxuLyoqXG4gKiBTZXJ2aWNlIGZvciBzZW5kaW5nIG5ldHdvcmsgcmVxdWVzdHMuXG4gKi9cblxudmFyIENPTU1PTl9IRUFERVJTID0geydBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ307XG52YXIgSlNPTl9DT05URU5UX1RZUEUgPSB7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTgnfTtcblxuZnVuY3Rpb24gSHR0cChvcHRpb25zJCQxKSB7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXMgfHwge30sIGNsaWVudCA9IENsaWVudChzZWxmLiR2bSk7XG5cbiAgICBkZWZhdWx0cyhvcHRpb25zJCQxIHx8IHt9LCBzZWxmLiRvcHRpb25zLCBIdHRwLm9wdGlvbnMpO1xuXG4gICAgSHR0cC5pbnRlcmNlcHRvcnMuZm9yRWFjaChmdW5jdGlvbiAoaGFuZGxlcikge1xuXG4gICAgICAgIGlmIChpc1N0cmluZyhoYW5kbGVyKSkge1xuICAgICAgICAgICAgaGFuZGxlciA9IEh0dHAuaW50ZXJjZXB0b3JbaGFuZGxlcl07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkge1xuICAgICAgICAgICAgY2xpZW50LnVzZShoYW5kbGVyKTtcbiAgICAgICAgfVxuXG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2xpZW50KG5ldyBSZXF1ZXN0KG9wdGlvbnMkJDEpKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuXG4gICAgICAgIHJldHVybiByZXNwb25zZS5vayA/IHJlc3BvbnNlIDogUHJvbWlzZU9iai5yZWplY3QocmVzcG9uc2UpO1xuXG4gICAgfSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIGVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlT2JqLnJlamVjdChyZXNwb25zZSk7XG4gICAgfSk7XG59XG5cbkh0dHAub3B0aW9ucyA9IHt9O1xuXG5IdHRwLmhlYWRlcnMgPSB7XG4gICAgcHV0OiBKU09OX0NPTlRFTlRfVFlQRSxcbiAgICBwb3N0OiBKU09OX0NPTlRFTlRfVFlQRSxcbiAgICBwYXRjaDogSlNPTl9DT05URU5UX1RZUEUsXG4gICAgZGVsZXRlOiBKU09OX0NPTlRFTlRfVFlQRSxcbiAgICBjb21tb246IENPTU1PTl9IRUFERVJTLFxuICAgIGN1c3RvbToge31cbn07XG5cbkh0dHAuaW50ZXJjZXB0b3IgPSB7YmVmb3JlOiBiZWZvcmUsIG1ldGhvZDogbWV0aG9kLCBqc29ucDoganNvbnAsIGpzb246IGpzb24sIGZvcm06IGZvcm0sIGhlYWRlcjogaGVhZGVyLCBjb3JzOiBjb3JzfTtcbkh0dHAuaW50ZXJjZXB0b3JzID0gWydiZWZvcmUnLCAnbWV0aG9kJywgJ2pzb25wJywgJ2pzb24nLCAnZm9ybScsICdoZWFkZXInLCAnY29ycyddO1xuXG5bJ2dldCcsICdkZWxldGUnLCAnaGVhZCcsICdqc29ucCddLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCQkMSkge1xuXG4gICAgSHR0cFttZXRob2QkJDFdID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucyQkMSkge1xuICAgICAgICByZXR1cm4gdGhpcyhhc3NpZ24ob3B0aW9ucyQkMSB8fCB7fSwge3VybDogdXJsLCBtZXRob2Q6IG1ldGhvZCQkMX0pKTtcbiAgICB9O1xuXG59KTtcblxuWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCQkMSkge1xuXG4gICAgSHR0cFttZXRob2QkJDFdID0gZnVuY3Rpb24gKHVybCwgYm9keSwgb3B0aW9ucyQkMSkge1xuICAgICAgICByZXR1cm4gdGhpcyhhc3NpZ24ob3B0aW9ucyQkMSB8fCB7fSwge3VybDogdXJsLCBtZXRob2Q6IG1ldGhvZCQkMSwgYm9keTogYm9keX0pKTtcbiAgICB9O1xuXG59KTtcblxuLyoqXG4gKiBTZXJ2aWNlIGZvciBpbnRlcmFjdGluZyB3aXRoIFJFU1RmdWwgc2VydmljZXMuXG4gKi9cblxuZnVuY3Rpb24gUmVzb3VyY2UodXJsLCBwYXJhbXMsIGFjdGlvbnMsIG9wdGlvbnMkJDEpIHtcblxuICAgIHZhciBzZWxmID0gdGhpcyB8fCB7fSwgcmVzb3VyY2UgPSB7fTtcblxuICAgIGFjdGlvbnMgPSBhc3NpZ24oe30sXG4gICAgICAgIFJlc291cmNlLmFjdGlvbnMsXG4gICAgICAgIGFjdGlvbnNcbiAgICApO1xuXG4gICAgZWFjaChhY3Rpb25zLCBmdW5jdGlvbiAoYWN0aW9uLCBuYW1lKSB7XG5cbiAgICAgICAgYWN0aW9uID0gbWVyZ2Uoe3VybDogdXJsLCBwYXJhbXM6IGFzc2lnbih7fSwgcGFyYW1zKX0sIG9wdGlvbnMkJDEsIGFjdGlvbik7XG5cbiAgICAgICAgcmVzb3VyY2VbbmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKHNlbGYuJGh0dHAgfHwgSHR0cCkob3B0cyhhY3Rpb24sIGFyZ3VtZW50cykpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc291cmNlO1xufVxuXG5mdW5jdGlvbiBvcHRzKGFjdGlvbiwgYXJncykge1xuXG4gICAgdmFyIG9wdGlvbnMkJDEgPSBhc3NpZ24oe30sIGFjdGlvbiksIHBhcmFtcyA9IHt9LCBib2R5O1xuXG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuXG4gICAgICAgIGNhc2UgMjpcblxuICAgICAgICAgICAgcGFyYW1zID0gYXJnc1swXTtcbiAgICAgICAgICAgIGJvZHkgPSBhcmdzWzFdO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDE6XG5cbiAgICAgICAgICAgIGlmICgvXihQT1NUfFBVVHxQQVRDSCkkL2kudGVzdChvcHRpb25zJCQxLm1ldGhvZCkpIHtcbiAgICAgICAgICAgICAgICBib2R5ID0gYXJnc1swXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0gYXJnc1swXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAwOlxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuXG4gICAgICAgICAgICB0aHJvdyAnRXhwZWN0ZWQgdXAgdG8gMiBhcmd1bWVudHMgW3BhcmFtcywgYm9keV0sIGdvdCAnICsgYXJncy5sZW5ndGggKyAnIGFyZ3VtZW50cyc7XG4gICAgfVxuXG4gICAgb3B0aW9ucyQkMS5ib2R5ID0gYm9keTtcbiAgICBvcHRpb25zJCQxLnBhcmFtcyA9IGFzc2lnbih7fSwgb3B0aW9ucyQkMS5wYXJhbXMsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gb3B0aW9ucyQkMTtcbn1cblxuUmVzb3VyY2UuYWN0aW9ucyA9IHtcblxuICAgIGdldDoge21ldGhvZDogJ0dFVCd9LFxuICAgIHNhdmU6IHttZXRob2Q6ICdQT1NUJ30sXG4gICAgcXVlcnk6IHttZXRob2Q6ICdHRVQnfSxcbiAgICB1cGRhdGU6IHttZXRob2Q6ICdQVVQnfSxcbiAgICByZW1vdmU6IHttZXRob2Q6ICdERUxFVEUnfSxcbiAgICBkZWxldGU6IHttZXRob2Q6ICdERUxFVEUnfVxuXG59O1xuXG4vKipcbiAqIEluc3RhbGwgcGx1Z2luLlxuICovXG5cbmZ1bmN0aW9uIHBsdWdpbihWdWUpIHtcblxuICAgIGlmIChwbHVnaW4uaW5zdGFsbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBVdGlsKFZ1ZSk7XG5cbiAgICBWdWUudXJsID0gVXJsO1xuICAgIFZ1ZS5odHRwID0gSHR0cDtcbiAgICBWdWUucmVzb3VyY2UgPSBSZXNvdXJjZTtcbiAgICBWdWUuUHJvbWlzZSA9IFByb21pc2VPYmo7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhWdWUucHJvdG90eXBlLCB7XG5cbiAgICAgICAgJHVybDoge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMoVnVlLnVybCwgdGhpcywgdGhpcy4kb3B0aW9ucy51cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgICRodHRwOiB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucyhWdWUuaHR0cCwgdGhpcywgdGhpcy4kb3B0aW9ucy5odHRwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAkcmVzb3VyY2U6IHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBWdWUucmVzb3VyY2UuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAkcHJvbWlzZToge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGV4ZWN1dG9yKSB7IHJldHVybiBuZXcgVnVlLlByb21pc2UoZXhlY3V0b3IsIHRoaXMkMSk7IH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH0pO1xufVxuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LlZ1ZSkge1xuICAgIHdpbmRvdy5WdWUudXNlKHBsdWdpbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBsdWdpbjtcbmV4cG9ydCB7IFVybCwgSHR0cCwgUmVzb3VyY2UgfTtcbiIsIi8qKlxuICAqIHZ1ZS1yb3V0ZXIgdjIuOC4xXG4gICogKGMpIDIwMTcgRXZhbiBZb3VcbiAgKiBAbGljZW5zZSBNSVRcbiAgKi9cbi8qICAqL1xuXG5mdW5jdGlvbiBhc3NlcnQgKGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcigoXCJbdnVlLXJvdXRlcl0gXCIgKyBtZXNzYWdlKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuIChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbmRpdGlvbikge1xuICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4oKFwiW3Z1ZS1yb3V0ZXJdIFwiICsgbWVzc2FnZSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzRXJyb3IgKGVycikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVycikuaW5kZXhPZignRXJyb3InKSA+IC0xXG59XG5cbnZhciBWaWV3ID0ge1xuICBuYW1lOiAncm91dGVyLXZpZXcnLFxuICBmdW5jdGlvbmFsOiB0cnVlLFxuICBwcm9wczoge1xuICAgIG5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdkZWZhdWx0J1xuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKF8sIHJlZikge1xuICAgIHZhciBwcm9wcyA9IHJlZi5wcm9wcztcbiAgICB2YXIgY2hpbGRyZW4gPSByZWYuY2hpbGRyZW47XG4gICAgdmFyIHBhcmVudCA9IHJlZi5wYXJlbnQ7XG4gICAgdmFyIGRhdGEgPSByZWYuZGF0YTtcblxuICAgIGRhdGEucm91dGVyVmlldyA9IHRydWU7XG5cbiAgICAvLyBkaXJlY3RseSB1c2UgcGFyZW50IGNvbnRleHQncyBjcmVhdGVFbGVtZW50KCkgZnVuY3Rpb25cbiAgICAvLyBzbyB0aGF0IGNvbXBvbmVudHMgcmVuZGVyZWQgYnkgcm91dGVyLXZpZXcgY2FuIHJlc29sdmUgbmFtZWQgc2xvdHNcbiAgICB2YXIgaCA9IHBhcmVudC4kY3JlYXRlRWxlbWVudDtcbiAgICB2YXIgbmFtZSA9IHByb3BzLm5hbWU7XG4gICAgdmFyIHJvdXRlID0gcGFyZW50LiRyb3V0ZTtcbiAgICB2YXIgY2FjaGUgPSBwYXJlbnQuX3JvdXRlclZpZXdDYWNoZSB8fCAocGFyZW50Ll9yb3V0ZXJWaWV3Q2FjaGUgPSB7fSk7XG5cbiAgICAvLyBkZXRlcm1pbmUgY3VycmVudCB2aWV3IGRlcHRoLCBhbHNvIGNoZWNrIHRvIHNlZSBpZiB0aGUgdHJlZVxuICAgIC8vIGhhcyBiZWVuIHRvZ2dsZWQgaW5hY3RpdmUgYnV0IGtlcHQtYWxpdmUuXG4gICAgdmFyIGRlcHRoID0gMDtcbiAgICB2YXIgaW5hY3RpdmUgPSBmYWxzZTtcbiAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5fcm91dGVyUm9vdCAhPT0gcGFyZW50KSB7XG4gICAgICBpZiAocGFyZW50LiR2bm9kZSAmJiBwYXJlbnQuJHZub2RlLmRhdGEucm91dGVyVmlldykge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudC5faW5hY3RpdmUpIHtcbiAgICAgICAgaW5hY3RpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgfVxuICAgIGRhdGEucm91dGVyVmlld0RlcHRoID0gZGVwdGg7XG5cbiAgICAvLyByZW5kZXIgcHJldmlvdXMgdmlldyBpZiB0aGUgdHJlZSBpcyBpbmFjdGl2ZSBhbmQga2VwdC1hbGl2ZVxuICAgIGlmIChpbmFjdGl2ZSkge1xuICAgICAgcmV0dXJuIGgoY2FjaGVbbmFtZV0sIGRhdGEsIGNoaWxkcmVuKVxuICAgIH1cblxuICAgIHZhciBtYXRjaGVkID0gcm91dGUubWF0Y2hlZFtkZXB0aF07XG4gICAgLy8gcmVuZGVyIGVtcHR5IG5vZGUgaWYgbm8gbWF0Y2hlZCByb3V0ZVxuICAgIGlmICghbWF0Y2hlZCkge1xuICAgICAgY2FjaGVbbmFtZV0gPSBudWxsO1xuICAgICAgcmV0dXJuIGgoKVxuICAgIH1cblxuICAgIHZhciBjb21wb25lbnQgPSBjYWNoZVtuYW1lXSA9IG1hdGNoZWQuY29tcG9uZW50c1tuYW1lXTtcblxuICAgIC8vIGF0dGFjaCBpbnN0YW5jZSByZWdpc3RyYXRpb24gaG9va1xuICAgIC8vIHRoaXMgd2lsbCBiZSBjYWxsZWQgaW4gdGhlIGluc3RhbmNlJ3MgaW5qZWN0ZWQgbGlmZWN5Y2xlIGhvb2tzXG4gICAgZGF0YS5yZWdpc3RlclJvdXRlSW5zdGFuY2UgPSBmdW5jdGlvbiAodm0sIHZhbCkge1xuICAgICAgLy8gdmFsIGNvdWxkIGJlIHVuZGVmaW5lZCBmb3IgdW5yZWdpc3RyYXRpb25cbiAgICAgIHZhciBjdXJyZW50ID0gbWF0Y2hlZC5pbnN0YW5jZXNbbmFtZV07XG4gICAgICBpZiAoXG4gICAgICAgICh2YWwgJiYgY3VycmVudCAhPT0gdm0pIHx8XG4gICAgICAgICghdmFsICYmIGN1cnJlbnQgPT09IHZtKVxuICAgICAgKSB7XG4gICAgICAgIG1hdGNoZWQuaW5zdGFuY2VzW25hbWVdID0gdmFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFsc28gcmVnaXN0ZXIgaW5zdGFuY2UgaW4gcHJlcGF0Y2ggaG9va1xuICAgIC8vIGluIGNhc2UgdGhlIHNhbWUgY29tcG9uZW50IGluc3RhbmNlIGlzIHJldXNlZCBhY3Jvc3MgZGlmZmVyZW50IHJvdXRlc1xuICAgIDsoZGF0YS5ob29rIHx8IChkYXRhLmhvb2sgPSB7fSkpLnByZXBhdGNoID0gZnVuY3Rpb24gKF8sIHZub2RlKSB7XG4gICAgICBtYXRjaGVkLmluc3RhbmNlc1tuYW1lXSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIH07XG5cbiAgICAvLyByZXNvbHZlIHByb3BzXG4gICAgdmFyIHByb3BzVG9QYXNzID0gZGF0YS5wcm9wcyA9IHJlc29sdmVQcm9wcyhyb3V0ZSwgbWF0Y2hlZC5wcm9wcyAmJiBtYXRjaGVkLnByb3BzW25hbWVdKTtcbiAgICBpZiAocHJvcHNUb1Bhc3MpIHtcbiAgICAgIC8vIGNsb25lIHRvIHByZXZlbnQgbXV0YXRpb25cbiAgICAgIHByb3BzVG9QYXNzID0gZGF0YS5wcm9wcyA9IGV4dGVuZCh7fSwgcHJvcHNUb1Bhc3MpO1xuICAgICAgLy8gcGFzcyBub24tZGVjbGFyZWQgcHJvcHMgYXMgYXR0cnNcbiAgICAgIHZhciBhdHRycyA9IGRhdGEuYXR0cnMgPSBkYXRhLmF0dHJzIHx8IHt9O1xuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BzVG9QYXNzKSB7XG4gICAgICAgIGlmICghY29tcG9uZW50LnByb3BzIHx8ICEoa2V5IGluIGNvbXBvbmVudC5wcm9wcykpIHtcbiAgICAgICAgICBhdHRyc1trZXldID0gcHJvcHNUb1Bhc3Nba2V5XTtcbiAgICAgICAgICBkZWxldGUgcHJvcHNUb1Bhc3Nba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoKGNvbXBvbmVudCwgZGF0YSwgY2hpbGRyZW4pXG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlc29sdmVQcm9wcyAocm91dGUsIGNvbmZpZykge1xuICBzd2l0Y2ggKHR5cGVvZiBjb25maWcpIHtcbiAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgcmV0dXJuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHJldHVybiBjb25maWdcbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICByZXR1cm4gY29uZmlnKHJvdXRlKVxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIGNvbmZpZyA/IHJvdXRlLnBhcmFtcyA6IHVuZGVmaW5lZFxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIFwicHJvcHMgaW4gXFxcIlwiICsgKHJvdXRlLnBhdGgpICsgXCJcXFwiIGlzIGEgXCIgKyAodHlwZW9mIGNvbmZpZykgKyBcIiwgXCIgK1xuICAgICAgICAgIFwiZXhwZWN0aW5nIGFuIG9iamVjdCwgZnVuY3Rpb24gb3IgYm9vbGVhbi5cIlxuICAgICAgICApO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGV4dGVuZCAodG8sIGZyb20pIHtcbiAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICB0b1trZXldID0gZnJvbVtrZXldO1xuICB9XG4gIHJldHVybiB0b1xufVxuXG4vKiAgKi9cblxudmFyIGVuY29kZVJlc2VydmVSRSA9IC9bIScoKSpdL2c7XG52YXIgZW5jb2RlUmVzZXJ2ZVJlcGxhY2VyID0gZnVuY3Rpb24gKGMpIHsgcmV0dXJuICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNik7IH07XG52YXIgY29tbWFSRSA9IC8lMkMvZztcblxuLy8gZml4ZWQgZW5jb2RlVVJJQ29tcG9uZW50IHdoaWNoIGlzIG1vcmUgY29uZm9ybWFudCB0byBSRkMzOTg2OlxuLy8gLSBlc2NhcGVzIFshJygpKl1cbi8vIC0gcHJlc2VydmUgY29tbWFzXG52YXIgZW5jb2RlID0gZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cilcbiAgLnJlcGxhY2UoZW5jb2RlUmVzZXJ2ZVJFLCBlbmNvZGVSZXNlcnZlUmVwbGFjZXIpXG4gIC5yZXBsYWNlKGNvbW1hUkUsICcsJyk7IH07XG5cbnZhciBkZWNvZGUgPSBkZWNvZGVVUklDb21wb25lbnQ7XG5cbmZ1bmN0aW9uIHJlc29sdmVRdWVyeSAoXG4gIHF1ZXJ5LFxuICBleHRyYVF1ZXJ5LFxuICBfcGFyc2VRdWVyeVxuKSB7XG4gIGlmICggZXh0cmFRdWVyeSA9PT0gdm9pZCAwICkgZXh0cmFRdWVyeSA9IHt9O1xuXG4gIHZhciBwYXJzZSA9IF9wYXJzZVF1ZXJ5IHx8IHBhcnNlUXVlcnk7XG4gIHZhciBwYXJzZWRRdWVyeTtcbiAgdHJ5IHtcbiAgICBwYXJzZWRRdWVyeSA9IHBhcnNlKHF1ZXJ5IHx8ICcnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihmYWxzZSwgZS5tZXNzYWdlKTtcbiAgICBwYXJzZWRRdWVyeSA9IHt9O1xuICB9XG4gIGZvciAodmFyIGtleSBpbiBleHRyYVF1ZXJ5KSB7XG4gICAgcGFyc2VkUXVlcnlba2V5XSA9IGV4dHJhUXVlcnlba2V5XTtcbiAgfVxuICByZXR1cm4gcGFyc2VkUXVlcnlcbn1cblxuZnVuY3Rpb24gcGFyc2VRdWVyeSAocXVlcnkpIHtcbiAgdmFyIHJlcyA9IHt9O1xuXG4gIHF1ZXJ5ID0gcXVlcnkudHJpbSgpLnJlcGxhY2UoL14oXFw/fCN8JikvLCAnJyk7XG5cbiAgaWYgKCFxdWVyeSkge1xuICAgIHJldHVybiByZXNcbiAgfVxuXG4gIHF1ZXJ5LnNwbGl0KCcmJykuZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICB2YXIgcGFydHMgPSBwYXJhbS5yZXBsYWNlKC9cXCsvZywgJyAnKS5zcGxpdCgnPScpO1xuICAgIHZhciBrZXkgPSBkZWNvZGUocGFydHMuc2hpZnQoKSk7XG4gICAgdmFyIHZhbCA9IHBhcnRzLmxlbmd0aCA+IDBcbiAgICAgID8gZGVjb2RlKHBhcnRzLmpvaW4oJz0nKSlcbiAgICAgIDogbnVsbDtcblxuICAgIGlmIChyZXNba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXNba2V5XSA9IHZhbDtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzW2tleV0pKSB7XG4gICAgICByZXNba2V5XS5wdXNoKHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc1trZXldID0gW3Jlc1trZXldLCB2YWxdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlRdWVyeSAob2JqKSB7XG4gIHZhciByZXMgPSBvYmogPyBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbCA9IG9ialtrZXldO1xuXG4gICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZW5jb2RlKGtleSlcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICB2YWwuZm9yRWFjaChmdW5jdGlvbiAodmFsMikge1xuICAgICAgICBpZiAodmFsMiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbDIgPT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGUoa2V5KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodmFsMikpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQuam9pbignJicpXG4gICAgfVxuXG4gICAgcmV0dXJuIGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHZhbClcbiAgfSkuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4Lmxlbmd0aCA+IDA7IH0pLmpvaW4oJyYnKSA6IG51bGw7XG4gIHJldHVybiByZXMgPyAoXCI/XCIgKyByZXMpIDogJydcbn1cblxuLyogICovXG5cblxudmFyIHRyYWlsaW5nU2xhc2hSRSA9IC9cXC8/JC87XG5cbmZ1bmN0aW9uIGNyZWF0ZVJvdXRlIChcbiAgcmVjb3JkLFxuICBsb2NhdGlvbixcbiAgcmVkaXJlY3RlZEZyb20sXG4gIHJvdXRlclxuKSB7XG4gIHZhciBzdHJpbmdpZnlRdWVyeSQkMSA9IHJvdXRlciAmJiByb3V0ZXIub3B0aW9ucy5zdHJpbmdpZnlRdWVyeTtcblxuICB2YXIgcXVlcnkgPSBsb2NhdGlvbi5xdWVyeSB8fCB7fTtcbiAgdHJ5IHtcbiAgICBxdWVyeSA9IGNsb25lKHF1ZXJ5KTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcm91dGUgPSB7XG4gICAgbmFtZTogbG9jYXRpb24ubmFtZSB8fCAocmVjb3JkICYmIHJlY29yZC5uYW1lKSxcbiAgICBtZXRhOiAocmVjb3JkICYmIHJlY29yZC5tZXRhKSB8fCB7fSxcbiAgICBwYXRoOiBsb2NhdGlvbi5wYXRoIHx8ICcvJyxcbiAgICBoYXNoOiBsb2NhdGlvbi5oYXNoIHx8ICcnLFxuICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICBwYXJhbXM6IGxvY2F0aW9uLnBhcmFtcyB8fCB7fSxcbiAgICBmdWxsUGF0aDogZ2V0RnVsbFBhdGgobG9jYXRpb24sIHN0cmluZ2lmeVF1ZXJ5JCQxKSxcbiAgICBtYXRjaGVkOiByZWNvcmQgPyBmb3JtYXRNYXRjaChyZWNvcmQpIDogW11cbiAgfTtcbiAgaWYgKHJlZGlyZWN0ZWRGcm9tKSB7XG4gICAgcm91dGUucmVkaXJlY3RlZEZyb20gPSBnZXRGdWxsUGF0aChyZWRpcmVjdGVkRnJvbSwgc3RyaW5naWZ5UXVlcnkkJDEpO1xuICB9XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHJvdXRlKVxufVxuXG5mdW5jdGlvbiBjbG9uZSAodmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcChjbG9uZSlcbiAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgcmVzW2tleV0gPSBjbG9uZSh2YWx1ZVtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG5cbi8vIHRoZSBzdGFydGluZyByb3V0ZSB0aGF0IHJlcHJlc2VudHMgdGhlIGluaXRpYWwgc3RhdGVcbnZhciBTVEFSVCA9IGNyZWF0ZVJvdXRlKG51bGwsIHtcbiAgcGF0aDogJy8nXG59KTtcblxuZnVuY3Rpb24gZm9ybWF0TWF0Y2ggKHJlY29yZCkge1xuICB2YXIgcmVzID0gW107XG4gIHdoaWxlIChyZWNvcmQpIHtcbiAgICByZXMudW5zaGlmdChyZWNvcmQpO1xuICAgIHJlY29yZCA9IHJlY29yZC5wYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBnZXRGdWxsUGF0aCAoXG4gIHJlZixcbiAgX3N0cmluZ2lmeVF1ZXJ5XG4pIHtcbiAgdmFyIHBhdGggPSByZWYucGF0aDtcbiAgdmFyIHF1ZXJ5ID0gcmVmLnF1ZXJ5OyBpZiAoIHF1ZXJ5ID09PSB2b2lkIDAgKSBxdWVyeSA9IHt9O1xuICB2YXIgaGFzaCA9IHJlZi5oYXNoOyBpZiAoIGhhc2ggPT09IHZvaWQgMCApIGhhc2ggPSAnJztcblxuICB2YXIgc3RyaW5naWZ5ID0gX3N0cmluZ2lmeVF1ZXJ5IHx8IHN0cmluZ2lmeVF1ZXJ5O1xuICByZXR1cm4gKHBhdGggfHwgJy8nKSArIHN0cmluZ2lmeShxdWVyeSkgKyBoYXNoXG59XG5cbmZ1bmN0aW9uIGlzU2FtZVJvdXRlIChhLCBiKSB7XG4gIGlmIChiID09PSBTVEFSVCkge1xuICAgIHJldHVybiBhID09PSBiXG4gIH0gZWxzZSBpZiAoIWIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIGlmIChhLnBhdGggJiYgYi5wYXRoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGEucGF0aC5yZXBsYWNlKHRyYWlsaW5nU2xhc2hSRSwgJycpID09PSBiLnBhdGgucmVwbGFjZSh0cmFpbGluZ1NsYXNoUkUsICcnKSAmJlxuICAgICAgYS5oYXNoID09PSBiLmhhc2ggJiZcbiAgICAgIGlzT2JqZWN0RXF1YWwoYS5xdWVyeSwgYi5xdWVyeSlcbiAgICApXG4gIH0gZWxzZSBpZiAoYS5uYW1lICYmIGIubmFtZSkge1xuICAgIHJldHVybiAoXG4gICAgICBhLm5hbWUgPT09IGIubmFtZSAmJlxuICAgICAgYS5oYXNoID09PSBiLmhhc2ggJiZcbiAgICAgIGlzT2JqZWN0RXF1YWwoYS5xdWVyeSwgYi5xdWVyeSkgJiZcbiAgICAgIGlzT2JqZWN0RXF1YWwoYS5wYXJhbXMsIGIucGFyYW1zKVxuICAgIClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBpc09iamVjdEVxdWFsIChhLCBiKSB7XG4gIGlmICggYSA9PT0gdm9pZCAwICkgYSA9IHt9O1xuICBpZiAoIGIgPT09IHZvaWQgMCApIGIgPSB7fTtcblxuICAvLyBoYW5kbGUgbnVsbCB2YWx1ZSAjMTU2NlxuICBpZiAoIWEgfHwgIWIpIHsgcmV0dXJuIGEgPT09IGIgfVxuICB2YXIgYUtleXMgPSBPYmplY3Qua2V5cyhhKTtcbiAgdmFyIGJLZXlzID0gT2JqZWN0LmtleXMoYik7XG4gIGlmIChhS2V5cy5sZW5ndGggIT09IGJLZXlzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiBhS2V5cy5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGFWYWwgPSBhW2tleV07XG4gICAgdmFyIGJWYWwgPSBiW2tleV07XG4gICAgLy8gY2hlY2sgbmVzdGVkIGVxdWFsaXR5XG4gICAgaWYgKHR5cGVvZiBhVmFsID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgYlZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBpc09iamVjdEVxdWFsKGFWYWwsIGJWYWwpXG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcoYVZhbCkgPT09IFN0cmluZyhiVmFsKVxuICB9KVxufVxuXG5mdW5jdGlvbiBpc0luY2x1ZGVkUm91dGUgKGN1cnJlbnQsIHRhcmdldCkge1xuICByZXR1cm4gKFxuICAgIGN1cnJlbnQucGF0aC5yZXBsYWNlKHRyYWlsaW5nU2xhc2hSRSwgJy8nKS5pbmRleE9mKFxuICAgICAgdGFyZ2V0LnBhdGgucmVwbGFjZSh0cmFpbGluZ1NsYXNoUkUsICcvJylcbiAgICApID09PSAwICYmXG4gICAgKCF0YXJnZXQuaGFzaCB8fCBjdXJyZW50Lmhhc2ggPT09IHRhcmdldC5oYXNoKSAmJlxuICAgIHF1ZXJ5SW5jbHVkZXMoY3VycmVudC5xdWVyeSwgdGFyZ2V0LnF1ZXJ5KVxuICApXG59XG5cbmZ1bmN0aW9uIHF1ZXJ5SW5jbHVkZXMgKGN1cnJlbnQsIHRhcmdldCkge1xuICBmb3IgKHZhciBrZXkgaW4gdGFyZ2V0KSB7XG4gICAgaWYgKCEoa2V5IGluIGN1cnJlbnQpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyogICovXG5cbi8vIHdvcmsgYXJvdW5kIHdlaXJkIGZsb3cgYnVnXG52YXIgdG9UeXBlcyA9IFtTdHJpbmcsIE9iamVjdF07XG52YXIgZXZlbnRUeXBlcyA9IFtTdHJpbmcsIEFycmF5XTtcblxudmFyIExpbmsgPSB7XG4gIG5hbWU6ICdyb3V0ZXItbGluaycsXG4gIHByb3BzOiB7XG4gICAgdG86IHtcbiAgICAgIHR5cGU6IHRvVHlwZXMsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgdGFnOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnYSdcbiAgICB9LFxuICAgIGV4YWN0OiBCb29sZWFuLFxuICAgIGFwcGVuZDogQm9vbGVhbixcbiAgICByZXBsYWNlOiBCb29sZWFuLFxuICAgIGFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gICAgZXhhY3RBY3RpdmVDbGFzczogU3RyaW5nLFxuICAgIGV2ZW50OiB7XG4gICAgICB0eXBlOiBldmVudFR5cGVzLFxuICAgICAgZGVmYXVsdDogJ2NsaWNrJ1xuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKGgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByb3V0ZXIgPSB0aGlzLiRyb3V0ZXI7XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLiRyb3V0ZTtcbiAgICB2YXIgcmVmID0gcm91dGVyLnJlc29sdmUodGhpcy50bywgY3VycmVudCwgdGhpcy5hcHBlbmQpO1xuICAgIHZhciBsb2NhdGlvbiA9IHJlZi5sb2NhdGlvbjtcbiAgICB2YXIgcm91dGUgPSByZWYucm91dGU7XG4gICAgdmFyIGhyZWYgPSByZWYuaHJlZjtcblxuICAgIHZhciBjbGFzc2VzID0ge307XG4gICAgdmFyIGdsb2JhbEFjdGl2ZUNsYXNzID0gcm91dGVyLm9wdGlvbnMubGlua0FjdGl2ZUNsYXNzO1xuICAgIHZhciBnbG9iYWxFeGFjdEFjdGl2ZUNsYXNzID0gcm91dGVyLm9wdGlvbnMubGlua0V4YWN0QWN0aXZlQ2xhc3M7XG4gICAgLy8gU3VwcG9ydCBnbG9iYWwgZW1wdHkgYWN0aXZlIGNsYXNzXG4gICAgdmFyIGFjdGl2ZUNsYXNzRmFsbGJhY2sgPSBnbG9iYWxBY3RpdmVDbGFzcyA9PSBudWxsXG4gICAgICAgICAgICA/ICdyb3V0ZXItbGluay1hY3RpdmUnXG4gICAgICAgICAgICA6IGdsb2JhbEFjdGl2ZUNsYXNzO1xuICAgIHZhciBleGFjdEFjdGl2ZUNsYXNzRmFsbGJhY2sgPSBnbG9iYWxFeGFjdEFjdGl2ZUNsYXNzID09IG51bGxcbiAgICAgICAgICAgID8gJ3JvdXRlci1saW5rLWV4YWN0LWFjdGl2ZSdcbiAgICAgICAgICAgIDogZ2xvYmFsRXhhY3RBY3RpdmVDbGFzcztcbiAgICB2YXIgYWN0aXZlQ2xhc3MgPSB0aGlzLmFjdGl2ZUNsYXNzID09IG51bGxcbiAgICAgICAgICAgID8gYWN0aXZlQ2xhc3NGYWxsYmFja1xuICAgICAgICAgICAgOiB0aGlzLmFjdGl2ZUNsYXNzO1xuICAgIHZhciBleGFjdEFjdGl2ZUNsYXNzID0gdGhpcy5leGFjdEFjdGl2ZUNsYXNzID09IG51bGxcbiAgICAgICAgICAgID8gZXhhY3RBY3RpdmVDbGFzc0ZhbGxiYWNrXG4gICAgICAgICAgICA6IHRoaXMuZXhhY3RBY3RpdmVDbGFzcztcbiAgICB2YXIgY29tcGFyZVRhcmdldCA9IGxvY2F0aW9uLnBhdGhcbiAgICAgID8gY3JlYXRlUm91dGUobnVsbCwgbG9jYXRpb24sIG51bGwsIHJvdXRlcilcbiAgICAgIDogcm91dGU7XG5cbiAgICBjbGFzc2VzW2V4YWN0QWN0aXZlQ2xhc3NdID0gaXNTYW1lUm91dGUoY3VycmVudCwgY29tcGFyZVRhcmdldCk7XG4gICAgY2xhc3Nlc1thY3RpdmVDbGFzc10gPSB0aGlzLmV4YWN0XG4gICAgICA/IGNsYXNzZXNbZXhhY3RBY3RpdmVDbGFzc11cbiAgICAgIDogaXNJbmNsdWRlZFJvdXRlKGN1cnJlbnQsIGNvbXBhcmVUYXJnZXQpO1xuXG4gICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGd1YXJkRXZlbnQoZSkpIHtcbiAgICAgICAgaWYgKHRoaXMkMS5yZXBsYWNlKSB7XG4gICAgICAgICAgcm91dGVyLnJlcGxhY2UobG9jYXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvdXRlci5wdXNoKGxvY2F0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgb24gPSB7IGNsaWNrOiBndWFyZEV2ZW50IH07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5ldmVudCkpIHtcbiAgICAgIHRoaXMuZXZlbnQuZm9yRWFjaChmdW5jdGlvbiAoZSkgeyBvbltlXSA9IGhhbmRsZXI7IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBvblt0aGlzLmV2ZW50XSA9IGhhbmRsZXI7XG4gICAgfVxuXG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBjbGFzczogY2xhc3Nlc1xuICAgIH07XG5cbiAgICBpZiAodGhpcy50YWcgPT09ICdhJykge1xuICAgICAgZGF0YS5vbiA9IG9uO1xuICAgICAgZGF0YS5hdHRycyA9IHsgaHJlZjogaHJlZiB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmaW5kIHRoZSBmaXJzdCA8YT4gY2hpbGQgYW5kIGFwcGx5IGxpc3RlbmVyIGFuZCBocmVmXG4gICAgICB2YXIgYSA9IGZpbmRBbmNob3IodGhpcy4kc2xvdHMuZGVmYXVsdCk7XG4gICAgICBpZiAoYSkge1xuICAgICAgICAvLyBpbiBjYXNlIHRoZSA8YT4gaXMgYSBzdGF0aWMgbm9kZVxuICAgICAgICBhLmlzU3RhdGljID0gZmFsc2U7XG4gICAgICAgIHZhciBleHRlbmQgPSBfVnVlLnV0aWwuZXh0ZW5kO1xuICAgICAgICB2YXIgYURhdGEgPSBhLmRhdGEgPSBleHRlbmQoe30sIGEuZGF0YSk7XG4gICAgICAgIGFEYXRhLm9uID0gb247XG4gICAgICAgIHZhciBhQXR0cnMgPSBhLmRhdGEuYXR0cnMgPSBleHRlbmQoe30sIGEuZGF0YS5hdHRycyk7XG4gICAgICAgIGFBdHRycy5ocmVmID0gaHJlZjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvZXNuJ3QgaGF2ZSA8YT4gY2hpbGQsIGFwcGx5IGxpc3RlbmVyIHRvIHNlbGZcbiAgICAgICAgZGF0YS5vbiA9IG9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoKHRoaXMudGFnLCBkYXRhLCB0aGlzLiRzbG90cy5kZWZhdWx0KVxuICB9XG59O1xuXG5mdW5jdGlvbiBndWFyZEV2ZW50IChlKSB7XG4gIC8vIGRvbid0IHJlZGlyZWN0IHdpdGggY29udHJvbCBrZXlzXG4gIGlmIChlLm1ldGFLZXkgfHwgZS5hbHRLZXkgfHwgZS5jdHJsS2V5IHx8IGUuc2hpZnRLZXkpIHsgcmV0dXJuIH1cbiAgLy8gZG9uJ3QgcmVkaXJlY3Qgd2hlbiBwcmV2ZW50RGVmYXVsdCBjYWxsZWRcbiAgaWYgKGUuZGVmYXVsdFByZXZlbnRlZCkgeyByZXR1cm4gfVxuICAvLyBkb24ndCByZWRpcmVjdCBvbiByaWdodCBjbGlja1xuICBpZiAoZS5idXR0b24gIT09IHVuZGVmaW5lZCAmJiBlLmJ1dHRvbiAhPT0gMCkgeyByZXR1cm4gfVxuICAvLyBkb24ndCByZWRpcmVjdCBpZiBgdGFyZ2V0PVwiX2JsYW5rXCJgXG4gIGlmIChlLmN1cnJlbnRUYXJnZXQgJiYgZS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSkge1xuICAgIHZhciB0YXJnZXQgPSBlLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCd0YXJnZXQnKTtcbiAgICBpZiAoL1xcYl9ibGFua1xcYi9pLnRlc3QodGFyZ2V0KSkgeyByZXR1cm4gfVxuICB9XG4gIC8vIHRoaXMgbWF5IGJlIGEgV2VleCBldmVudCB3aGljaCBkb2Vzbid0IGhhdmUgdGhpcyBtZXRob2RcbiAgaWYgKGUucHJldmVudERlZmF1bHQpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gZmluZEFuY2hvciAoY2hpbGRyZW4pIHtcbiAgaWYgKGNoaWxkcmVuKSB7XG4gICAgdmFyIGNoaWxkO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBpZiAoY2hpbGQudGFnID09PSAnYScpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkXG4gICAgICB9XG4gICAgICBpZiAoY2hpbGQuY2hpbGRyZW4gJiYgKGNoaWxkID0gZmluZEFuY2hvcihjaGlsZC5jaGlsZHJlbikpKSB7XG4gICAgICAgIHJldHVybiBjaGlsZFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgX1Z1ZTtcblxuZnVuY3Rpb24gaW5zdGFsbCAoVnVlKSB7XG4gIGlmIChpbnN0YWxsLmluc3RhbGxlZCAmJiBfVnVlID09PSBWdWUpIHsgcmV0dXJuIH1cbiAgaW5zdGFsbC5pbnN0YWxsZWQgPSB0cnVlO1xuXG4gIF9WdWUgPSBWdWU7XG5cbiAgdmFyIGlzRGVmID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgIT09IHVuZGVmaW5lZDsgfTtcblxuICB2YXIgcmVnaXN0ZXJJbnN0YW5jZSA9IGZ1bmN0aW9uICh2bSwgY2FsbFZhbCkge1xuICAgIHZhciBpID0gdm0uJG9wdGlvbnMuX3BhcmVudFZub2RlO1xuICAgIGlmIChpc0RlZihpKSAmJiBpc0RlZihpID0gaS5kYXRhKSAmJiBpc0RlZihpID0gaS5yZWdpc3RlclJvdXRlSW5zdGFuY2UpKSB7XG4gICAgICBpKHZtLCBjYWxsVmFsKTtcbiAgICB9XG4gIH07XG5cbiAgVnVlLm1peGluKHtcbiAgICBiZWZvcmVDcmVhdGU6IGZ1bmN0aW9uIGJlZm9yZUNyZWF0ZSAoKSB7XG4gICAgICBpZiAoaXNEZWYodGhpcy4kb3B0aW9ucy5yb3V0ZXIpKSB7XG4gICAgICAgIHRoaXMuX3JvdXRlclJvb3QgPSB0aGlzO1xuICAgICAgICB0aGlzLl9yb3V0ZXIgPSB0aGlzLiRvcHRpb25zLnJvdXRlcjtcbiAgICAgICAgdGhpcy5fcm91dGVyLmluaXQodGhpcyk7XG4gICAgICAgIFZ1ZS51dGlsLmRlZmluZVJlYWN0aXZlKHRoaXMsICdfcm91dGUnLCB0aGlzLl9yb3V0ZXIuaGlzdG9yeS5jdXJyZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3JvdXRlclJvb3QgPSAodGhpcy4kcGFyZW50ICYmIHRoaXMuJHBhcmVudC5fcm91dGVyUm9vdCkgfHwgdGhpcztcbiAgICAgIH1cbiAgICAgIHJlZ2lzdGVySW5zdGFuY2UodGhpcywgdGhpcyk7XG4gICAgfSxcbiAgICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCAoKSB7XG4gICAgICByZWdpc3Rlckluc3RhbmNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckcm91dGVyJywge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0ICgpIHsgcmV0dXJuIHRoaXMuX3JvdXRlclJvb3QuX3JvdXRlciB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHJvdXRlJywge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0ICgpIHsgcmV0dXJuIHRoaXMuX3JvdXRlclJvb3QuX3JvdXRlIH1cbiAgfSk7XG5cbiAgVnVlLmNvbXBvbmVudCgncm91dGVyLXZpZXcnLCBWaWV3KTtcbiAgVnVlLmNvbXBvbmVudCgncm91dGVyLWxpbmsnLCBMaW5rKTtcblxuICB2YXIgc3RyYXRzID0gVnVlLmNvbmZpZy5vcHRpb25NZXJnZVN0cmF0ZWdpZXM7XG4gIC8vIHVzZSB0aGUgc2FtZSBob29rIG1lcmdpbmcgc3RyYXRlZ3kgZm9yIHJvdXRlIGhvb2tzXG4gIHN0cmF0cy5iZWZvcmVSb3V0ZUVudGVyID0gc3RyYXRzLmJlZm9yZVJvdXRlTGVhdmUgPSBzdHJhdHMuYmVmb3JlUm91dGVVcGRhdGUgPSBzdHJhdHMuY3JlYXRlZDtcbn1cblxuLyogICovXG5cbnZhciBpbkJyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcblxuLyogICovXG5cbmZ1bmN0aW9uIHJlc29sdmVQYXRoIChcbiAgcmVsYXRpdmUsXG4gIGJhc2UsXG4gIGFwcGVuZFxuKSB7XG4gIHZhciBmaXJzdENoYXIgPSByZWxhdGl2ZS5jaGFyQXQoMCk7XG4gIGlmIChmaXJzdENoYXIgPT09ICcvJykge1xuICAgIHJldHVybiByZWxhdGl2ZVxuICB9XG5cbiAgaWYgKGZpcnN0Q2hhciA9PT0gJz8nIHx8IGZpcnN0Q2hhciA9PT0gJyMnKSB7XG4gICAgcmV0dXJuIGJhc2UgKyByZWxhdGl2ZVxuICB9XG5cbiAgdmFyIHN0YWNrID0gYmFzZS5zcGxpdCgnLycpO1xuXG4gIC8vIHJlbW92ZSB0cmFpbGluZyBzZWdtZW50IGlmOlxuICAvLyAtIG5vdCBhcHBlbmRpbmdcbiAgLy8gLSBhcHBlbmRpbmcgdG8gdHJhaWxpbmcgc2xhc2ggKGxhc3Qgc2VnbWVudCBpcyBlbXB0eSlcbiAgaWYgKCFhcHBlbmQgfHwgIXN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICAvLyByZXNvbHZlIHJlbGF0aXZlIHBhdGhcbiAgdmFyIHNlZ21lbnRzID0gcmVsYXRpdmUucmVwbGFjZSgvXlxcLy8sICcnKS5zcGxpdCgnLycpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBzZWdtZW50c1tpXTtcbiAgICBpZiAoc2VnbWVudCA9PT0gJy4uJykge1xuICAgICAgc3RhY2sucG9wKCk7XG4gICAgfSBlbHNlIGlmIChzZWdtZW50ICE9PSAnLicpIHtcbiAgICAgIHN0YWNrLnB1c2goc2VnbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gZW5zdXJlIGxlYWRpbmcgc2xhc2hcbiAgaWYgKHN0YWNrWzBdICE9PSAnJykge1xuICAgIHN0YWNrLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgcmV0dXJuIHN0YWNrLmpvaW4oJy8nKVxufVxuXG5mdW5jdGlvbiBwYXJzZVBhdGggKHBhdGgpIHtcbiAgdmFyIGhhc2ggPSAnJztcbiAgdmFyIHF1ZXJ5ID0gJyc7XG5cbiAgdmFyIGhhc2hJbmRleCA9IHBhdGguaW5kZXhPZignIycpO1xuICBpZiAoaGFzaEluZGV4ID49IDApIHtcbiAgICBoYXNoID0gcGF0aC5zbGljZShoYXNoSW5kZXgpO1xuICAgIHBhdGggPSBwYXRoLnNsaWNlKDAsIGhhc2hJbmRleCk7XG4gIH1cblxuICB2YXIgcXVlcnlJbmRleCA9IHBhdGguaW5kZXhPZignPycpO1xuICBpZiAocXVlcnlJbmRleCA+PSAwKSB7XG4gICAgcXVlcnkgPSBwYXRoLnNsaWNlKHF1ZXJ5SW5kZXggKyAxKTtcbiAgICBwYXRoID0gcGF0aC5zbGljZSgwLCBxdWVyeUluZGV4KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGF0aDogcGF0aCxcbiAgICBxdWVyeTogcXVlcnksXG4gICAgaGFzaDogaGFzaFxuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFuUGF0aCAocGF0aCkge1xuICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC9cXC8vZywgJy8nKVxufVxuXG52YXIgaXNhcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cbi8qKlxuICogRXhwb3NlIGBwYXRoVG9SZWdleHBgLlxuICovXG52YXIgcGF0aFRvUmVnZXhwXzEgPSBwYXRoVG9SZWdleHA7XG52YXIgcGFyc2VfMSA9IHBhcnNlO1xudmFyIGNvbXBpbGVfMSA9IGNvbXBpbGU7XG52YXIgdG9rZW5zVG9GdW5jdGlvbl8xID0gdG9rZW5zVG9GdW5jdGlvbjtcbnZhciB0b2tlbnNUb1JlZ0V4cF8xID0gdG9rZW5zVG9SZWdFeHA7XG5cbi8qKlxuICogVGhlIG1haW4gcGF0aCBtYXRjaGluZyByZWdleHAgdXRpbGl0eS5cbiAqXG4gKiBAdHlwZSB7UmVnRXhwfVxuICovXG52YXIgUEFUSF9SRUdFWFAgPSBuZXcgUmVnRXhwKFtcbiAgLy8gTWF0Y2ggZXNjYXBlZCBjaGFyYWN0ZXJzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGFwcGVhciBpbiBmdXR1cmUgbWF0Y2hlcy5cbiAgLy8gVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gZXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0IHdvbid0IHRyYW5zZm9ybS5cbiAgJyhcXFxcXFxcXC4pJyxcbiAgLy8gTWF0Y2ggRXhwcmVzcy1zdHlsZSBwYXJhbWV0ZXJzIGFuZCB1bi1uYW1lZCBwYXJhbWV0ZXJzIHdpdGggYSBwcmVmaXhcbiAgLy8gYW5kIG9wdGlvbmFsIHN1ZmZpeGVzLiBNYXRjaGVzIGFwcGVhciBhczpcbiAgLy9cbiAgLy8gXCIvOnRlc3QoXFxcXGQrKT9cIiA9PiBbXCIvXCIsIFwidGVzdFwiLCBcIlxcZCtcIiwgdW5kZWZpbmVkLCBcIj9cIiwgdW5kZWZpbmVkXVxuICAvLyBcIi9yb3V0ZShcXFxcZCspXCIgID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBcIlxcZCtcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWRdXG4gIC8vIFwiLypcIiAgICAgICAgICAgID0+IFtcIi9cIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBcIipcIl1cbiAgJyhbXFxcXC8uXSk/KD86KD86XFxcXDooXFxcXHcrKSg/OlxcXFwoKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKCldKSspXFxcXCkpP3xcXFxcKCgoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpXSkrKVxcXFwpKShbKyo/XSk/fChcXFxcKikpJ1xuXS5qb2luKCd8JyksICdnJyk7XG5cbi8qKlxuICogUGFyc2UgYSBzdHJpbmcgZm9yIHRoZSByYXcgdG9rZW5zLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gIHN0clxuICogQHBhcmFtICB7T2JqZWN0PX0gb3B0aW9uc1xuICogQHJldHVybiB7IUFycmF5fVxuICovXG5mdW5jdGlvbiBwYXJzZSAoc3RyLCBvcHRpb25zKSB7XG4gIHZhciB0b2tlbnMgPSBbXTtcbiAgdmFyIGtleSA9IDA7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBwYXRoID0gJyc7XG4gIHZhciBkZWZhdWx0RGVsaW1pdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmRlbGltaXRlciB8fCAnLyc7XG4gIHZhciByZXM7XG5cbiAgd2hpbGUgKChyZXMgPSBQQVRIX1JFR0VYUC5leGVjKHN0cikpICE9IG51bGwpIHtcbiAgICB2YXIgbSA9IHJlc1swXTtcbiAgICB2YXIgZXNjYXBlZCA9IHJlc1sxXTtcbiAgICB2YXIgb2Zmc2V0ID0gcmVzLmluZGV4O1xuICAgIHBhdGggKz0gc3RyLnNsaWNlKGluZGV4LCBvZmZzZXQpO1xuICAgIGluZGV4ID0gb2Zmc2V0ICsgbS5sZW5ndGg7XG5cbiAgICAvLyBJZ25vcmUgYWxyZWFkeSBlc2NhcGVkIHNlcXVlbmNlcy5cbiAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgcGF0aCArPSBlc2NhcGVkWzFdO1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB2YXIgbmV4dCA9IHN0cltpbmRleF07XG4gICAgdmFyIHByZWZpeCA9IHJlc1syXTtcbiAgICB2YXIgbmFtZSA9IHJlc1szXTtcbiAgICB2YXIgY2FwdHVyZSA9IHJlc1s0XTtcbiAgICB2YXIgZ3JvdXAgPSByZXNbNV07XG4gICAgdmFyIG1vZGlmaWVyID0gcmVzWzZdO1xuICAgIHZhciBhc3RlcmlzayA9IHJlc1s3XTtcblxuICAgIC8vIFB1c2ggdGhlIGN1cnJlbnQgcGF0aCBvbnRvIHRoZSB0b2tlbnMuXG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIHRva2Vucy5wdXNoKHBhdGgpO1xuICAgICAgcGF0aCA9ICcnO1xuICAgIH1cblxuICAgIHZhciBwYXJ0aWFsID0gcHJlZml4ICE9IG51bGwgJiYgbmV4dCAhPSBudWxsICYmIG5leHQgIT09IHByZWZpeDtcbiAgICB2YXIgcmVwZWF0ID0gbW9kaWZpZXIgPT09ICcrJyB8fCBtb2RpZmllciA9PT0gJyonO1xuICAgIHZhciBvcHRpb25hbCA9IG1vZGlmaWVyID09PSAnPycgfHwgbW9kaWZpZXIgPT09ICcqJztcbiAgICB2YXIgZGVsaW1pdGVyID0gcmVzWzJdIHx8IGRlZmF1bHREZWxpbWl0ZXI7XG4gICAgdmFyIHBhdHRlcm4gPSBjYXB0dXJlIHx8IGdyb3VwO1xuXG4gICAgdG9rZW5zLnB1c2goe1xuICAgICAgbmFtZTogbmFtZSB8fCBrZXkrKyxcbiAgICAgIHByZWZpeDogcHJlZml4IHx8ICcnLFxuICAgICAgZGVsaW1pdGVyOiBkZWxpbWl0ZXIsXG4gICAgICBvcHRpb25hbDogb3B0aW9uYWwsXG4gICAgICByZXBlYXQ6IHJlcGVhdCxcbiAgICAgIHBhcnRpYWw6IHBhcnRpYWwsXG4gICAgICBhc3RlcmlzazogISFhc3RlcmlzayxcbiAgICAgIHBhdHRlcm46IHBhdHRlcm4gPyBlc2NhcGVHcm91cChwYXR0ZXJuKSA6IChhc3RlcmlzayA/ICcuKicgOiAnW14nICsgZXNjYXBlU3RyaW5nKGRlbGltaXRlcikgKyAnXSs/JylcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE1hdGNoIGFueSBjaGFyYWN0ZXJzIHN0aWxsIHJlbWFpbmluZy5cbiAgaWYgKGluZGV4IDwgc3RyLmxlbmd0aCkge1xuICAgIHBhdGggKz0gc3RyLnN1YnN0cihpbmRleCk7XG4gIH1cblxuICAvLyBJZiB0aGUgcGF0aCBleGlzdHMsIHB1c2ggaXQgb250byB0aGUgZW5kLlxuICBpZiAocGF0aCkge1xuICAgIHRva2Vucy5wdXNoKHBhdGgpO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vuc1xufVxuXG4vKipcbiAqIENvbXBpbGUgYSBzdHJpbmcgdG8gYSB0ZW1wbGF0ZSBmdW5jdGlvbiBmb3IgdGhlIHBhdGguXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgICAgICAgICAgICBzdHJcbiAqIEBwYXJhbSAge09iamVjdD19ICAgICAgICAgICAgb3B0aW9uc1xuICogQHJldHVybiB7IWZ1bmN0aW9uKE9iamVjdD0sIE9iamVjdD0pfVxuICovXG5mdW5jdGlvbiBjb21waWxlIChzdHIsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRva2Vuc1RvRnVuY3Rpb24ocGFyc2Uoc3RyLCBvcHRpb25zKSlcbn1cblxuLyoqXG4gKiBQcmV0dGllciBlbmNvZGluZyBvZiBVUkkgcGF0aCBzZWdtZW50cy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVuY29kZVVSSUNvbXBvbmVudFByZXR0eSAoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUkkoc3RyKS5yZXBsYWNlKC9bXFwvPyNdL2csIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKVxuICB9KVxufVxuXG4vKipcbiAqIEVuY29kZSB0aGUgYXN0ZXJpc2sgcGFyYW1ldGVyLiBTaW1pbGFyIHRvIGBwcmV0dHlgLCBidXQgYWxsb3dzIHNsYXNoZXMuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlbmNvZGVBc3RlcmlzayAoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUkkoc3RyKS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKVxuICB9KVxufVxuXG4vKipcbiAqIEV4cG9zZSBhIG1ldGhvZCBmb3IgdHJhbnNmb3JtaW5nIHRva2VucyBpbnRvIHRoZSBwYXRoIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiB0b2tlbnNUb0Z1bmN0aW9uICh0b2tlbnMpIHtcbiAgLy8gQ29tcGlsZSBhbGwgdGhlIHRva2VucyBpbnRvIHJlZ2V4cHMuXG4gIHZhciBtYXRjaGVzID0gbmV3IEFycmF5KHRva2Vucy5sZW5ndGgpO1xuXG4gIC8vIENvbXBpbGUgYWxsIHRoZSBwYXR0ZXJucyBiZWZvcmUgY29tcGlsYXRpb24uXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHR5cGVvZiB0b2tlbnNbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICBtYXRjaGVzW2ldID0gbmV3IFJlZ0V4cCgnXig/OicgKyB0b2tlbnNbaV0ucGF0dGVybiArICcpJCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAob2JqLCBvcHRzKSB7XG4gICAgdmFyIHBhdGggPSAnJztcbiAgICB2YXIgZGF0YSA9IG9iaiB8fCB7fTtcbiAgICB2YXIgb3B0aW9ucyA9IG9wdHMgfHwge307XG4gICAgdmFyIGVuY29kZSA9IG9wdGlvbnMucHJldHR5ID8gZW5jb2RlVVJJQ29tcG9uZW50UHJldHR5IDogZW5jb2RlVVJJQ29tcG9uZW50O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcblxuICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcGF0aCArPSB0b2tlbjtcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWUgPSBkYXRhW3Rva2VuLm5hbWVdO1xuICAgICAgdmFyIHNlZ21lbnQ7XG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICAgIC8vIFByZXBlbmQgcGFydGlhbCBzZWdtZW50IHByZWZpeGVzLlxuICAgICAgICAgIGlmICh0b2tlbi5wYXJ0aWFsKSB7XG4gICAgICAgICAgICBwYXRoICs9IHRva2VuLnByZWZpeDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gYmUgZGVmaW5lZCcpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzYXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGlmICghdG9rZW4ucmVwZWF0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBub3QgcmVwZWF0LCBidXQgcmVjZWl2ZWQgYCcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgKyAnYCcpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG5vdCBiZSBlbXB0eScpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHNlZ21lbnQgPSBlbmNvZGUodmFsdWVbal0pO1xuXG4gICAgICAgICAgaWYgKCFtYXRjaGVzW2ldLnRlc3Qoc2VnbWVudCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGFsbCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG1hdGNoIFwiJyArIHRva2VuLnBhdHRlcm4gKyAnXCIsIGJ1dCByZWNlaXZlZCBgJyArIEpTT04uc3RyaW5naWZ5KHNlZ21lbnQpICsgJ2AnKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhdGggKz0gKGogPT09IDAgPyB0b2tlbi5wcmVmaXggOiB0b2tlbi5kZWxpbWl0ZXIpICsgc2VnbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHNlZ21lbnQgPSB0b2tlbi5hc3RlcmlzayA/IGVuY29kZUFzdGVyaXNrKHZhbHVlKSA6IGVuY29kZSh2YWx1ZSk7XG5cbiAgICAgIGlmICghbWF0Y2hlc1tpXS50ZXN0KHNlZ21lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbWF0Y2ggXCInICsgdG9rZW4ucGF0dGVybiArICdcIiwgYnV0IHJlY2VpdmVkIFwiJyArIHNlZ21lbnQgKyAnXCInKVxuICAgICAgfVxuXG4gICAgICBwYXRoICs9IHRva2VuLnByZWZpeCArIHNlZ21lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGhcbiAgfVxufVxuXG4vKipcbiAqIEVzY2FwZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4rKj89XiE6JHt9KClbXFxdfFxcL1xcXFxdKS9nLCAnXFxcXCQxJylcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGhlIGNhcHR1cmluZyBncm91cCBieSBlc2NhcGluZyBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIG1lYW5pbmcuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBncm91cFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVHcm91cCAoZ3JvdXApIHtcbiAgcmV0dXJuIGdyb3VwLnJlcGxhY2UoLyhbPSE6JFxcLygpXSkvZywgJ1xcXFwkMScpXG59XG5cbi8qKlxuICogQXR0YWNoIHRoZSBrZXlzIGFzIGEgcHJvcGVydHkgb2YgdGhlIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHshUmVnRXhwfSByZVxuICogQHBhcmFtICB7QXJyYXl9ICAga2V5c1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gYXR0YWNoS2V5cyAocmUsIGtleXMpIHtcbiAgcmUua2V5cyA9IGtleXM7XG4gIHJldHVybiByZVxufVxuXG4vKipcbiAqIEdldCB0aGUgZmxhZ3MgZm9yIGEgcmVnZXhwIGZyb20gdGhlIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZsYWdzIChvcHRpb25zKSB7XG4gIHJldHVybiBvcHRpb25zLnNlbnNpdGl2ZSA/ICcnIDogJ2knXG59XG5cbi8qKlxuICogUHVsbCBvdXQga2V5cyBmcm9tIGEgcmVnZXhwLlxuICpcbiAqIEBwYXJhbSAgeyFSZWdFeHB9IHBhdGhcbiAqIEBwYXJhbSAgeyFBcnJheX0gIGtleXNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHJlZ2V4cFRvUmVnZXhwIChwYXRoLCBrZXlzKSB7XG4gIC8vIFVzZSBhIG5lZ2F0aXZlIGxvb2thaGVhZCB0byBtYXRjaCBvbmx5IGNhcHR1cmluZyBncm91cHMuXG4gIHZhciBncm91cHMgPSBwYXRoLnNvdXJjZS5tYXRjaCgvXFwoKD8hXFw/KS9nKTtcblxuICBpZiAoZ3JvdXBzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleXMucHVzaCh7XG4gICAgICAgIG5hbWU6IGksXG4gICAgICAgIHByZWZpeDogbnVsbCxcbiAgICAgICAgZGVsaW1pdGVyOiBudWxsLFxuICAgICAgICBvcHRpb25hbDogZmFsc2UsXG4gICAgICAgIHJlcGVhdDogZmFsc2UsXG4gICAgICAgIHBhcnRpYWw6IGZhbHNlLFxuICAgICAgICBhc3RlcmlzazogZmFsc2UsXG4gICAgICAgIHBhdHRlcm46IG51bGxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhdHRhY2hLZXlzKHBhdGgsIGtleXMpXG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGFuIGFycmF5IGludG8gYSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7IUFycmF5fSAgcGF0aFxuICogQHBhcmFtICB7QXJyYXl9ICAga2V5c1xuICogQHBhcmFtICB7IU9iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb1JlZ2V4cCAocGF0aCwga2V5cywgb3B0aW9ucykge1xuICB2YXIgcGFydHMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICBwYXJ0cy5wdXNoKHBhdGhUb1JlZ2V4cChwYXRoW2ldLCBrZXlzLCBvcHRpb25zKS5zb3VyY2UpO1xuICB9XG5cbiAgdmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAoJyg/OicgKyBwYXJ0cy5qb2luKCd8JykgKyAnKScsIGZsYWdzKG9wdGlvbnMpKTtcblxuICByZXR1cm4gYXR0YWNoS2V5cyhyZWdleHAsIGtleXMpXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcGF0aCByZWdleHAgZnJvbSBzdHJpbmcgaW5wdXQuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgcGF0aFxuICogQHBhcmFtICB7IUFycmF5fSAga2V5c1xuICogQHBhcmFtICB7IU9iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gc3RyaW5nVG9SZWdleHAgKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRva2Vuc1RvUmVnRXhwKHBhcnNlKHBhdGgsIG9wdGlvbnMpLCBrZXlzLCBvcHRpb25zKVxufVxuXG4vKipcbiAqIEV4cG9zZSBhIGZ1bmN0aW9uIGZvciB0YWtpbmcgdG9rZW5zIGFuZCByZXR1cm5pbmcgYSBSZWdFeHAuXG4gKlxuICogQHBhcmFtICB7IUFycmF5fSAgICAgICAgICB0b2tlbnNcbiAqIEBwYXJhbSAgeyhBcnJheXxPYmplY3QpPX0ga2V5c1xuICogQHBhcmFtICB7T2JqZWN0PX0gICAgICAgICBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiB0b2tlbnNUb1JlZ0V4cCAodG9rZW5zLCBrZXlzLCBvcHRpb25zKSB7XG4gIGlmICghaXNhcnJheShrZXlzKSkge1xuICAgIG9wdGlvbnMgPSAvKiogQHR5cGUgeyFPYmplY3R9ICovIChrZXlzIHx8IG9wdGlvbnMpO1xuICAgIGtleXMgPSBbXTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBzdHJpY3QgPSBvcHRpb25zLnN0cmljdDtcbiAgdmFyIGVuZCA9IG9wdGlvbnMuZW5kICE9PSBmYWxzZTtcbiAgdmFyIHJvdXRlID0gJyc7XG5cbiAgLy8gSXRlcmF0ZSBvdmVyIHRoZSB0b2tlbnMgYW5kIGNyZWF0ZSBvdXIgcmVnZXhwIHN0cmluZy5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG5cbiAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgcm91dGUgKz0gZXNjYXBlU3RyaW5nKHRva2VuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHByZWZpeCA9IGVzY2FwZVN0cmluZyh0b2tlbi5wcmVmaXgpO1xuICAgICAgdmFyIGNhcHR1cmUgPSAnKD86JyArIHRva2VuLnBhdHRlcm4gKyAnKSc7XG5cbiAgICAgIGtleXMucHVzaCh0b2tlbik7XG5cbiAgICAgIGlmICh0b2tlbi5yZXBlYXQpIHtcbiAgICAgICAgY2FwdHVyZSArPSAnKD86JyArIHByZWZpeCArIGNhcHR1cmUgKyAnKSonO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9rZW4ub3B0aW9uYWwpIHtcbiAgICAgICAgaWYgKCF0b2tlbi5wYXJ0aWFsKSB7XG4gICAgICAgICAgY2FwdHVyZSA9ICcoPzonICsgcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpKT8nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcHR1cmUgPSBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJyk/JztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FwdHVyZSA9IHByZWZpeCArICcoJyArIGNhcHR1cmUgKyAnKSc7XG4gICAgICB9XG5cbiAgICAgIHJvdXRlICs9IGNhcHR1cmU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGRlbGltaXRlciA9IGVzY2FwZVN0cmluZyhvcHRpb25zLmRlbGltaXRlciB8fCAnLycpO1xuICB2YXIgZW5kc1dpdGhEZWxpbWl0ZXIgPSByb3V0ZS5zbGljZSgtZGVsaW1pdGVyLmxlbmd0aCkgPT09IGRlbGltaXRlcjtcblxuICAvLyBJbiBub24tc3RyaWN0IG1vZGUgd2UgYWxsb3cgYSBzbGFzaCBhdCB0aGUgZW5kIG9mIG1hdGNoLiBJZiB0aGUgcGF0aCB0b1xuICAvLyBtYXRjaCBhbHJlYWR5IGVuZHMgd2l0aCBhIHNsYXNoLCB3ZSByZW1vdmUgaXQgZm9yIGNvbnNpc3RlbmN5LiBUaGUgc2xhc2hcbiAgLy8gaXMgdmFsaWQgYXQgdGhlIGVuZCBvZiBhIHBhdGggbWF0Y2gsIG5vdCBpbiB0aGUgbWlkZGxlLiBUaGlzIGlzIGltcG9ydGFudFxuICAvLyBpbiBub24tZW5kaW5nIG1vZGUsIHdoZXJlIFwiL3Rlc3QvXCIgc2hvdWxkbid0IG1hdGNoIFwiL3Rlc3QvL3JvdXRlXCIuXG4gIGlmICghc3RyaWN0KSB7XG4gICAgcm91dGUgPSAoZW5kc1dpdGhEZWxpbWl0ZXIgPyByb3V0ZS5zbGljZSgwLCAtZGVsaW1pdGVyLmxlbmd0aCkgOiByb3V0ZSkgKyAnKD86JyArIGRlbGltaXRlciArICcoPz0kKSk/JztcbiAgfVxuXG4gIGlmIChlbmQpIHtcbiAgICByb3V0ZSArPSAnJCc7XG4gIH0gZWxzZSB7XG4gICAgLy8gSW4gbm9uLWVuZGluZyBtb2RlLCB3ZSBuZWVkIHRoZSBjYXB0dXJpbmcgZ3JvdXBzIHRvIG1hdGNoIGFzIG11Y2ggYXNcbiAgICAvLyBwb3NzaWJsZSBieSB1c2luZyBhIHBvc2l0aXZlIGxvb2thaGVhZCB0byB0aGUgZW5kIG9yIG5leHQgcGF0aCBzZWdtZW50LlxuICAgIHJvdXRlICs9IHN0cmljdCAmJiBlbmRzV2l0aERlbGltaXRlciA/ICcnIDogJyg/PScgKyBkZWxpbWl0ZXIgKyAnfCQpJztcbiAgfVxuXG4gIHJldHVybiBhdHRhY2hLZXlzKG5ldyBSZWdFeHAoJ14nICsgcm91dGUsIGZsYWdzKG9wdGlvbnMpKSwga2V5cylcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIGdpdmVuIHBhdGggc3RyaW5nLCByZXR1cm5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gKlxuICogQW4gZW1wdHkgYXJyYXkgY2FuIGJlIHBhc3NlZCBpbiBmb3IgdGhlIGtleXMsIHdoaWNoIHdpbGwgaG9sZCB0aGVcbiAqIHBsYWNlaG9sZGVyIGtleSBkZXNjcmlwdGlvbnMuIEZvciBleGFtcGxlLCB1c2luZyBgL3VzZXIvOmlkYCwgYGtleXNgIHdpbGxcbiAqIGNvbnRhaW4gYFt7IG5hbWU6ICdpZCcsIGRlbGltaXRlcjogJy8nLCBvcHRpb25hbDogZmFsc2UsIHJlcGVhdDogZmFsc2UgfV1gLlxuICpcbiAqIEBwYXJhbSAgeyhzdHJpbmd8UmVnRXhwfEFycmF5KX0gcGF0aFxuICogQHBhcmFtICB7KEFycmF5fE9iamVjdCk9fSAgICAgICBrZXlzXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSAgICAgICAgICAgICAgIG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHBhdGhUb1JlZ2V4cCAocGF0aCwga2V5cywgb3B0aW9ucykge1xuICBpZiAoIWlzYXJyYXkoa2V5cykpIHtcbiAgICBvcHRpb25zID0gLyoqIEB0eXBlIHshT2JqZWN0fSAqLyAoa2V5cyB8fCBvcHRpb25zKTtcbiAgICBrZXlzID0gW107XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBpZiAocGF0aCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiByZWdleHBUb1JlZ2V4cChwYXRoLCAvKiogQHR5cGUgeyFBcnJheX0gKi8gKGtleXMpKVxuICB9XG5cbiAgaWYgKGlzYXJyYXkocGF0aCkpIHtcbiAgICByZXR1cm4gYXJyYXlUb1JlZ2V4cCgvKiogQHR5cGUgeyFBcnJheX0gKi8gKHBhdGgpLCAvKiogQHR5cGUgeyFBcnJheX0gKi8gKGtleXMpLCBvcHRpb25zKVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZ1RvUmVnZXhwKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocGF0aCksIC8qKiBAdHlwZSB7IUFycmF5fSAqLyAoa2V5cyksIG9wdGlvbnMpXG59XG5cbnBhdGhUb1JlZ2V4cF8xLnBhcnNlID0gcGFyc2VfMTtcbnBhdGhUb1JlZ2V4cF8xLmNvbXBpbGUgPSBjb21waWxlXzE7XG5wYXRoVG9SZWdleHBfMS50b2tlbnNUb0Z1bmN0aW9uID0gdG9rZW5zVG9GdW5jdGlvbl8xO1xucGF0aFRvUmVnZXhwXzEudG9rZW5zVG9SZWdFeHAgPSB0b2tlbnNUb1JlZ0V4cF8xO1xuXG4vKiAgKi9cblxuLy8gJGZsb3ctZGlzYWJsZS1saW5lXG52YXIgcmVnZXhwQ29tcGlsZUNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZnVuY3Rpb24gZmlsbFBhcmFtcyAoXG4gIHBhdGgsXG4gIHBhcmFtcyxcbiAgcm91dGVNc2dcbikge1xuICB0cnkge1xuICAgIHZhciBmaWxsZXIgPVxuICAgICAgcmVnZXhwQ29tcGlsZUNhY2hlW3BhdGhdIHx8XG4gICAgICAocmVnZXhwQ29tcGlsZUNhY2hlW3BhdGhdID0gcGF0aFRvUmVnZXhwXzEuY29tcGlsZShwYXRoKSk7XG4gICAgcmV0dXJuIGZpbGxlcihwYXJhbXMgfHwge30sIHsgcHJldHR5OiB0cnVlIH0pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybihmYWxzZSwgKFwibWlzc2luZyBwYXJhbSBmb3IgXCIgKyByb3V0ZU1zZyArIFwiOiBcIiArIChlLm1lc3NhZ2UpKSk7XG4gICAgfVxuICAgIHJldHVybiAnJ1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBjcmVhdGVSb3V0ZU1hcCAoXG4gIHJvdXRlcyxcbiAgb2xkUGF0aExpc3QsXG4gIG9sZFBhdGhNYXAsXG4gIG9sZE5hbWVNYXBcbikge1xuICAvLyB0aGUgcGF0aCBsaXN0IGlzIHVzZWQgdG8gY29udHJvbCBwYXRoIG1hdGNoaW5nIHByaW9yaXR5XG4gIHZhciBwYXRoTGlzdCA9IG9sZFBhdGhMaXN0IHx8IFtdO1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgdmFyIHBhdGhNYXAgPSBvbGRQYXRoTWFwIHx8IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICB2YXIgbmFtZU1hcCA9IG9sZE5hbWVNYXAgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByb3V0ZXMuZm9yRWFjaChmdW5jdGlvbiAocm91dGUpIHtcbiAgICBhZGRSb3V0ZVJlY29yZChwYXRoTGlzdCwgcGF0aE1hcCwgbmFtZU1hcCwgcm91dGUpO1xuICB9KTtcblxuICAvLyBlbnN1cmUgd2lsZGNhcmQgcm91dGVzIGFyZSBhbHdheXMgYXQgdGhlIGVuZFxuICBmb3IgKHZhciBpID0gMCwgbCA9IHBhdGhMaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChwYXRoTGlzdFtpXSA9PT0gJyonKSB7XG4gICAgICBwYXRoTGlzdC5wdXNoKHBhdGhMaXN0LnNwbGljZShpLCAxKVswXSk7XG4gICAgICBsLS07XG4gICAgICBpLS07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoTGlzdDogcGF0aExpc3QsXG4gICAgcGF0aE1hcDogcGF0aE1hcCxcbiAgICBuYW1lTWFwOiBuYW1lTWFwXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkUm91dGVSZWNvcmQgKFxuICBwYXRoTGlzdCxcbiAgcGF0aE1hcCxcbiAgbmFtZU1hcCxcbiAgcm91dGUsXG4gIHBhcmVudCxcbiAgbWF0Y2hBc1xuKSB7XG4gIHZhciBwYXRoID0gcm91dGUucGF0aDtcbiAgdmFyIG5hbWUgPSByb3V0ZS5uYW1lO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydChwYXRoICE9IG51bGwsIFwiXFxcInBhdGhcXFwiIGlzIHJlcXVpcmVkIGluIGEgcm91dGUgY29uZmlndXJhdGlvbi5cIik7XG4gICAgYXNzZXJ0KFxuICAgICAgdHlwZW9mIHJvdXRlLmNvbXBvbmVudCAhPT0gJ3N0cmluZycsXG4gICAgICBcInJvdXRlIGNvbmZpZyBcXFwiY29tcG9uZW50XFxcIiBmb3IgcGF0aDogXCIgKyAoU3RyaW5nKHBhdGggfHwgbmFtZSkpICsgXCIgY2Fubm90IGJlIGEgXCIgK1xuICAgICAgXCJzdHJpbmcgaWQuIFVzZSBhbiBhY3R1YWwgY29tcG9uZW50IGluc3RlYWQuXCJcbiAgICApO1xuICB9XG5cbiAgdmFyIHBhdGhUb1JlZ2V4cE9wdGlvbnMgPSByb3V0ZS5wYXRoVG9SZWdleHBPcHRpb25zIHx8IHt9O1xuICB2YXIgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKFxuICAgIHBhdGgsXG4gICAgcGFyZW50LFxuICAgIHBhdGhUb1JlZ2V4cE9wdGlvbnMuc3RyaWN0XG4gICk7XG5cbiAgaWYgKHR5cGVvZiByb3V0ZS5jYXNlU2Vuc2l0aXZlID09PSAnYm9vbGVhbicpIHtcbiAgICBwYXRoVG9SZWdleHBPcHRpb25zLnNlbnNpdGl2ZSA9IHJvdXRlLmNhc2VTZW5zaXRpdmU7XG4gIH1cblxuICB2YXIgcmVjb3JkID0ge1xuICAgIHBhdGg6IG5vcm1hbGl6ZWRQYXRoLFxuICAgIHJlZ2V4OiBjb21waWxlUm91dGVSZWdleChub3JtYWxpemVkUGF0aCwgcGF0aFRvUmVnZXhwT3B0aW9ucyksXG4gICAgY29tcG9uZW50czogcm91dGUuY29tcG9uZW50cyB8fCB7IGRlZmF1bHQ6IHJvdXRlLmNvbXBvbmVudCB9LFxuICAgIGluc3RhbmNlczoge30sXG4gICAgbmFtZTogbmFtZSxcbiAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICBtYXRjaEFzOiBtYXRjaEFzLFxuICAgIHJlZGlyZWN0OiByb3V0ZS5yZWRpcmVjdCxcbiAgICBiZWZvcmVFbnRlcjogcm91dGUuYmVmb3JlRW50ZXIsXG4gICAgbWV0YTogcm91dGUubWV0YSB8fCB7fSxcbiAgICBwcm9wczogcm91dGUucHJvcHMgPT0gbnVsbFxuICAgICAgPyB7fVxuICAgICAgOiByb3V0ZS5jb21wb25lbnRzXG4gICAgICAgID8gcm91dGUucHJvcHNcbiAgICAgICAgOiB7IGRlZmF1bHQ6IHJvdXRlLnByb3BzIH1cbiAgfTtcblxuICBpZiAocm91dGUuY2hpbGRyZW4pIHtcbiAgICAvLyBXYXJuIGlmIHJvdXRlIGlzIG5hbWVkLCBkb2VzIG5vdCByZWRpcmVjdCBhbmQgaGFzIGEgZGVmYXVsdCBjaGlsZCByb3V0ZS5cbiAgICAvLyBJZiB1c2VycyBuYXZpZ2F0ZSB0byB0aGlzIHJvdXRlIGJ5IG5hbWUsIHRoZSBkZWZhdWx0IGNoaWxkIHdpbGxcbiAgICAvLyBub3QgYmUgcmVuZGVyZWQgKEdIIElzc3VlICM2MjkpXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChyb3V0ZS5uYW1lICYmICFyb3V0ZS5yZWRpcmVjdCAmJiByb3V0ZS5jaGlsZHJlbi5zb21lKGZ1bmN0aW9uIChjaGlsZCkgeyByZXR1cm4gL15cXC8/JC8udGVzdChjaGlsZC5wYXRoKTsgfSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBcIk5hbWVkIFJvdXRlICdcIiArIChyb3V0ZS5uYW1lKSArIFwiJyBoYXMgYSBkZWZhdWx0IGNoaWxkIHJvdXRlLiBcIiArXG4gICAgICAgICAgXCJXaGVuIG5hdmlnYXRpbmcgdG8gdGhpcyBuYW1lZCByb3V0ZSAoOnRvPVxcXCJ7bmFtZTogJ1wiICsgKHJvdXRlLm5hbWUpICsgXCInXFxcIiksIFwiICtcbiAgICAgICAgICBcInRoZSBkZWZhdWx0IGNoaWxkIHJvdXRlIHdpbGwgbm90IGJlIHJlbmRlcmVkLiBSZW1vdmUgdGhlIG5hbWUgZnJvbSBcIiArXG4gICAgICAgICAgXCJ0aGlzIHJvdXRlIGFuZCB1c2UgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgY2hpbGQgcm91dGUgZm9yIG5hbWVkIFwiICtcbiAgICAgICAgICBcImxpbmtzIGluc3RlYWQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcm91dGUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIHZhciBjaGlsZE1hdGNoQXMgPSBtYXRjaEFzXG4gICAgICAgID8gY2xlYW5QYXRoKChtYXRjaEFzICsgXCIvXCIgKyAoY2hpbGQucGF0aCkpKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGFkZFJvdXRlUmVjb3JkKHBhdGhMaXN0LCBwYXRoTWFwLCBuYW1lTWFwLCBjaGlsZCwgcmVjb3JkLCBjaGlsZE1hdGNoQXMpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJvdXRlLmFsaWFzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgYWxpYXNlcyA9IEFycmF5LmlzQXJyYXkocm91dGUuYWxpYXMpXG4gICAgICA/IHJvdXRlLmFsaWFzXG4gICAgICA6IFtyb3V0ZS5hbGlhc107XG5cbiAgICBhbGlhc2VzLmZvckVhY2goZnVuY3Rpb24gKGFsaWFzKSB7XG4gICAgICB2YXIgYWxpYXNSb3V0ZSA9IHtcbiAgICAgICAgcGF0aDogYWxpYXMsXG4gICAgICAgIGNoaWxkcmVuOiByb3V0ZS5jaGlsZHJlblxuICAgICAgfTtcbiAgICAgIGFkZFJvdXRlUmVjb3JkKFxuICAgICAgICBwYXRoTGlzdCxcbiAgICAgICAgcGF0aE1hcCxcbiAgICAgICAgbmFtZU1hcCxcbiAgICAgICAgYWxpYXNSb3V0ZSxcbiAgICAgICAgcGFyZW50LFxuICAgICAgICByZWNvcmQucGF0aCB8fCAnLycgLy8gbWF0Y2hBc1xuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmICghcGF0aE1hcFtyZWNvcmQucGF0aF0pIHtcbiAgICBwYXRoTGlzdC5wdXNoKHJlY29yZC5wYXRoKTtcbiAgICBwYXRoTWFwW3JlY29yZC5wYXRoXSA9IHJlY29yZDtcbiAgfVxuXG4gIGlmIChuYW1lKSB7XG4gICAgaWYgKCFuYW1lTWFwW25hbWVdKSB7XG4gICAgICBuYW1lTWFwW25hbWVdID0gcmVjb3JkO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhbWF0Y2hBcykge1xuICAgICAgd2FybihcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIFwiRHVwbGljYXRlIG5hbWVkIHJvdXRlcyBkZWZpbml0aW9uOiBcIiArXG4gICAgICAgIFwieyBuYW1lOiBcXFwiXCIgKyBuYW1lICsgXCJcXFwiLCBwYXRoOiBcXFwiXCIgKyAocmVjb3JkLnBhdGgpICsgXCJcXFwiIH1cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGlsZVJvdXRlUmVnZXggKHBhdGgsIHBhdGhUb1JlZ2V4cE9wdGlvbnMpIHtcbiAgdmFyIHJlZ2V4ID0gcGF0aFRvUmVnZXhwXzEocGF0aCwgW10sIHBhdGhUb1JlZ2V4cE9wdGlvbnMpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICByZWdleC5rZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgd2Fybigha2V5c1trZXkubmFtZV0sIChcIkR1cGxpY2F0ZSBwYXJhbSBrZXlzIGluIHJvdXRlIHdpdGggcGF0aDogXFxcIlwiICsgcGF0aCArIFwiXFxcIlwiKSk7XG4gICAgICBrZXlzW2tleS5uYW1lXSA9IHRydWU7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJlZ2V4XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGggKHBhdGgsIHBhcmVudCwgc3RyaWN0KSB7XG4gIGlmICghc3RyaWN0KSB7IHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcLyQvLCAnJyk7IH1cbiAgaWYgKHBhdGhbMF0gPT09ICcvJykgeyByZXR1cm4gcGF0aCB9XG4gIGlmIChwYXJlbnQgPT0gbnVsbCkgeyByZXR1cm4gcGF0aCB9XG4gIHJldHVybiBjbGVhblBhdGgoKChwYXJlbnQucGF0aCkgKyBcIi9cIiArIHBhdGgpKVxufVxuXG4vKiAgKi9cblxuXG5mdW5jdGlvbiBub3JtYWxpemVMb2NhdGlvbiAoXG4gIHJhdyxcbiAgY3VycmVudCxcbiAgYXBwZW5kLFxuICByb3V0ZXJcbikge1xuICB2YXIgbmV4dCA9IHR5cGVvZiByYXcgPT09ICdzdHJpbmcnID8geyBwYXRoOiByYXcgfSA6IHJhdztcbiAgLy8gbmFtZWQgdGFyZ2V0XG4gIGlmIChuZXh0Lm5hbWUgfHwgbmV4dC5fbm9ybWFsaXplZCkge1xuICAgIHJldHVybiBuZXh0XG4gIH1cblxuICAvLyByZWxhdGl2ZSBwYXJhbXNcbiAgaWYgKCFuZXh0LnBhdGggJiYgbmV4dC5wYXJhbXMgJiYgY3VycmVudCkge1xuICAgIG5leHQgPSBhc3NpZ24oe30sIG5leHQpO1xuICAgIG5leHQuX25vcm1hbGl6ZWQgPSB0cnVlO1xuICAgIHZhciBwYXJhbXMgPSBhc3NpZ24oYXNzaWduKHt9LCBjdXJyZW50LnBhcmFtcyksIG5leHQucGFyYW1zKTtcbiAgICBpZiAoY3VycmVudC5uYW1lKSB7XG4gICAgICBuZXh0Lm5hbWUgPSBjdXJyZW50Lm5hbWU7XG4gICAgICBuZXh0LnBhcmFtcyA9IHBhcmFtcztcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnQubWF0Y2hlZC5sZW5ndGgpIHtcbiAgICAgIHZhciByYXdQYXRoID0gY3VycmVudC5tYXRjaGVkW2N1cnJlbnQubWF0Y2hlZC5sZW5ndGggLSAxXS5wYXRoO1xuICAgICAgbmV4dC5wYXRoID0gZmlsbFBhcmFtcyhyYXdQYXRoLCBwYXJhbXMsIChcInBhdGggXCIgKyAoY3VycmVudC5wYXRoKSkpO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybihmYWxzZSwgXCJyZWxhdGl2ZSBwYXJhbXMgbmF2aWdhdGlvbiByZXF1aXJlcyBhIGN1cnJlbnQgcm91dGUuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dFxuICB9XG5cbiAgdmFyIHBhcnNlZFBhdGggPSBwYXJzZVBhdGgobmV4dC5wYXRoIHx8ICcnKTtcbiAgdmFyIGJhc2VQYXRoID0gKGN1cnJlbnQgJiYgY3VycmVudC5wYXRoKSB8fCAnLyc7XG4gIHZhciBwYXRoID0gcGFyc2VkUGF0aC5wYXRoXG4gICAgPyByZXNvbHZlUGF0aChwYXJzZWRQYXRoLnBhdGgsIGJhc2VQYXRoLCBhcHBlbmQgfHwgbmV4dC5hcHBlbmQpXG4gICAgOiBiYXNlUGF0aDtcblxuICB2YXIgcXVlcnkgPSByZXNvbHZlUXVlcnkoXG4gICAgcGFyc2VkUGF0aC5xdWVyeSxcbiAgICBuZXh0LnF1ZXJ5LFxuICAgIHJvdXRlciAmJiByb3V0ZXIub3B0aW9ucy5wYXJzZVF1ZXJ5XG4gICk7XG5cbiAgdmFyIGhhc2ggPSBuZXh0Lmhhc2ggfHwgcGFyc2VkUGF0aC5oYXNoO1xuICBpZiAoaGFzaCAmJiBoYXNoLmNoYXJBdCgwKSAhPT0gJyMnKSB7XG4gICAgaGFzaCA9IFwiI1wiICsgaGFzaDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgX25vcm1hbGl6ZWQ6IHRydWUsXG4gICAgcGF0aDogcGF0aCxcbiAgICBxdWVyeTogcXVlcnksXG4gICAgaGFzaDogaGFzaFxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2lnbiAoYSwgYikge1xuICBmb3IgKHZhciBrZXkgaW4gYikge1xuICAgIGFba2V5XSA9IGJba2V5XTtcbiAgfVxuICByZXR1cm4gYVxufVxuXG4vKiAgKi9cblxuXG5mdW5jdGlvbiBjcmVhdGVNYXRjaGVyIChcbiAgcm91dGVzLFxuICByb3V0ZXJcbikge1xuICB2YXIgcmVmID0gY3JlYXRlUm91dGVNYXAocm91dGVzKTtcbiAgdmFyIHBhdGhMaXN0ID0gcmVmLnBhdGhMaXN0O1xuICB2YXIgcGF0aE1hcCA9IHJlZi5wYXRoTWFwO1xuICB2YXIgbmFtZU1hcCA9IHJlZi5uYW1lTWFwO1xuXG4gIGZ1bmN0aW9uIGFkZFJvdXRlcyAocm91dGVzKSB7XG4gICAgY3JlYXRlUm91dGVNYXAocm91dGVzLCBwYXRoTGlzdCwgcGF0aE1hcCwgbmFtZU1hcCk7XG4gIH1cblxuICBmdW5jdGlvbiBtYXRjaCAoXG4gICAgcmF3LFxuICAgIGN1cnJlbnRSb3V0ZSxcbiAgICByZWRpcmVjdGVkRnJvbVxuICApIHtcbiAgICB2YXIgbG9jYXRpb24gPSBub3JtYWxpemVMb2NhdGlvbihyYXcsIGN1cnJlbnRSb3V0ZSwgZmFsc2UsIHJvdXRlcik7XG4gICAgdmFyIG5hbWUgPSBsb2NhdGlvbi5uYW1lO1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHZhciByZWNvcmQgPSBuYW1lTWFwW25hbWVdO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybihyZWNvcmQsIChcIlJvdXRlIHdpdGggbmFtZSAnXCIgKyBuYW1lICsgXCInIGRvZXMgbm90IGV4aXN0XCIpKTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjb3JkKSB7IHJldHVybiBfY3JlYXRlUm91dGUobnVsbCwgbG9jYXRpb24pIH1cbiAgICAgIHZhciBwYXJhbU5hbWVzID0gcmVjb3JkLnJlZ2V4LmtleXNcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7IHJldHVybiAha2V5Lm9wdGlvbmFsOyB9KVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleS5uYW1lOyB9KTtcblxuICAgICAgaWYgKHR5cGVvZiBsb2NhdGlvbi5wYXJhbXMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGxvY2F0aW9uLnBhcmFtcyA9IHt9O1xuICAgICAgfVxuXG4gICAgICBpZiAoY3VycmVudFJvdXRlICYmIHR5cGVvZiBjdXJyZW50Um91dGUucGFyYW1zID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gY3VycmVudFJvdXRlLnBhcmFtcykge1xuICAgICAgICAgIGlmICghKGtleSBpbiBsb2NhdGlvbi5wYXJhbXMpICYmIHBhcmFtTmFtZXMuaW5kZXhPZihrZXkpID4gLTEpIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnBhcmFtc1trZXldID0gY3VycmVudFJvdXRlLnBhcmFtc1trZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkKSB7XG4gICAgICAgIGxvY2F0aW9uLnBhdGggPSBmaWxsUGFyYW1zKHJlY29yZC5wYXRoLCBsb2NhdGlvbi5wYXJhbXMsIChcIm5hbWVkIHJvdXRlIFxcXCJcIiArIG5hbWUgKyBcIlxcXCJcIikpO1xuICAgICAgICByZXR1cm4gX2NyZWF0ZVJvdXRlKHJlY29yZCwgbG9jYXRpb24sIHJlZGlyZWN0ZWRGcm9tKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobG9jYXRpb24ucGF0aCkge1xuICAgICAgbG9jYXRpb24ucGFyYW1zID0ge307XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwYXRoID0gcGF0aExpc3RbaV07XG4gICAgICAgIHZhciByZWNvcmQkMSA9IHBhdGhNYXBbcGF0aF07XG4gICAgICAgIGlmIChtYXRjaFJvdXRlKHJlY29yZCQxLnJlZ2V4LCBsb2NhdGlvbi5wYXRoLCBsb2NhdGlvbi5wYXJhbXMpKSB7XG4gICAgICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShyZWNvcmQkMSwgbG9jYXRpb24sIHJlZGlyZWN0ZWRGcm9tKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG5vIG1hdGNoXG4gICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbilcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZGlyZWN0IChcbiAgICByZWNvcmQsXG4gICAgbG9jYXRpb25cbiAgKSB7XG4gICAgdmFyIG9yaWdpbmFsUmVkaXJlY3QgPSByZWNvcmQucmVkaXJlY3Q7XG4gICAgdmFyIHJlZGlyZWN0ID0gdHlwZW9mIG9yaWdpbmFsUmVkaXJlY3QgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBvcmlnaW5hbFJlZGlyZWN0KGNyZWF0ZVJvdXRlKHJlY29yZCwgbG9jYXRpb24sIG51bGwsIHJvdXRlcikpXG4gICAgICAgIDogb3JpZ2luYWxSZWRpcmVjdDtcblxuICAgIGlmICh0eXBlb2YgcmVkaXJlY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZWRpcmVjdCA9IHsgcGF0aDogcmVkaXJlY3QgfTtcbiAgICB9XG5cbiAgICBpZiAoIXJlZGlyZWN0IHx8IHR5cGVvZiByZWRpcmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgZmFsc2UsIChcImludmFsaWQgcmVkaXJlY3Qgb3B0aW9uOiBcIiArIChKU09OLnN0cmluZ2lmeShyZWRpcmVjdCkpKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICB2YXIgcmUgPSByZWRpcmVjdDtcbiAgICB2YXIgbmFtZSA9IHJlLm5hbWU7XG4gICAgdmFyIHBhdGggPSByZS5wYXRoO1xuICAgIHZhciBxdWVyeSA9IGxvY2F0aW9uLnF1ZXJ5O1xuICAgIHZhciBoYXNoID0gbG9jYXRpb24uaGFzaDtcbiAgICB2YXIgcGFyYW1zID0gbG9jYXRpb24ucGFyYW1zO1xuICAgIHF1ZXJ5ID0gcmUuaGFzT3duUHJvcGVydHkoJ3F1ZXJ5JykgPyByZS5xdWVyeSA6IHF1ZXJ5O1xuICAgIGhhc2ggPSByZS5oYXNPd25Qcm9wZXJ0eSgnaGFzaCcpID8gcmUuaGFzaCA6IGhhc2g7XG4gICAgcGFyYW1zID0gcmUuaGFzT3duUHJvcGVydHkoJ3BhcmFtcycpID8gcmUucGFyYW1zIDogcGFyYW1zO1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIC8vIHJlc29sdmVkIG5hbWVkIGRpcmVjdFxuICAgICAgdmFyIHRhcmdldFJlY29yZCA9IG5hbWVNYXBbbmFtZV07XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBhc3NlcnQodGFyZ2V0UmVjb3JkLCAoXCJyZWRpcmVjdCBmYWlsZWQ6IG5hbWVkIHJvdXRlIFxcXCJcIiArIG5hbWUgKyBcIlxcXCIgbm90IGZvdW5kLlwiKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF0Y2goe1xuICAgICAgICBfbm9ybWFsaXplZDogdHJ1ZSxcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgcXVlcnk6IHF1ZXJ5LFxuICAgICAgICBoYXNoOiBoYXNoLFxuICAgICAgICBwYXJhbXM6IHBhcmFtc1xuICAgICAgfSwgdW5kZWZpbmVkLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKHBhdGgpIHtcbiAgICAgIC8vIDEuIHJlc29sdmUgcmVsYXRpdmUgcmVkaXJlY3RcbiAgICAgIHZhciByYXdQYXRoID0gcmVzb2x2ZVJlY29yZFBhdGgocGF0aCwgcmVjb3JkKTtcbiAgICAgIC8vIDIuIHJlc29sdmUgcGFyYW1zXG4gICAgICB2YXIgcmVzb2x2ZWRQYXRoID0gZmlsbFBhcmFtcyhyYXdQYXRoLCBwYXJhbXMsIChcInJlZGlyZWN0IHJvdXRlIHdpdGggcGF0aCBcXFwiXCIgKyByYXdQYXRoICsgXCJcXFwiXCIpKTtcbiAgICAgIC8vIDMuIHJlbWF0Y2ggd2l0aCBleGlzdGluZyBxdWVyeSBhbmQgaGFzaFxuICAgICAgcmV0dXJuIG1hdGNoKHtcbiAgICAgICAgX25vcm1hbGl6ZWQ6IHRydWUsXG4gICAgICAgIHBhdGg6IHJlc29sdmVkUGF0aCxcbiAgICAgICAgcXVlcnk6IHF1ZXJ5LFxuICAgICAgICBoYXNoOiBoYXNoXG4gICAgICB9LCB1bmRlZmluZWQsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKGZhbHNlLCAoXCJpbnZhbGlkIHJlZGlyZWN0IG9wdGlvbjogXCIgKyAoSlNPTi5zdHJpbmdpZnkocmVkaXJlY3QpKSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhbGlhcyAoXG4gICAgcmVjb3JkLFxuICAgIGxvY2F0aW9uLFxuICAgIG1hdGNoQXNcbiAgKSB7XG4gICAgdmFyIGFsaWFzZWRQYXRoID0gZmlsbFBhcmFtcyhtYXRjaEFzLCBsb2NhdGlvbi5wYXJhbXMsIChcImFsaWFzZWQgcm91dGUgd2l0aCBwYXRoIFxcXCJcIiArIG1hdGNoQXMgKyBcIlxcXCJcIikpO1xuICAgIHZhciBhbGlhc2VkTWF0Y2ggPSBtYXRjaCh7XG4gICAgICBfbm9ybWFsaXplZDogdHJ1ZSxcbiAgICAgIHBhdGg6IGFsaWFzZWRQYXRoXG4gICAgfSk7XG4gICAgaWYgKGFsaWFzZWRNYXRjaCkge1xuICAgICAgdmFyIG1hdGNoZWQgPSBhbGlhc2VkTWF0Y2gubWF0Y2hlZDtcbiAgICAgIHZhciBhbGlhc2VkUmVjb3JkID0gbWF0Y2hlZFttYXRjaGVkLmxlbmd0aCAtIDFdO1xuICAgICAgbG9jYXRpb24ucGFyYW1zID0gYWxpYXNlZE1hdGNoLnBhcmFtcztcbiAgICAgIHJldHVybiBfY3JlYXRlUm91dGUoYWxpYXNlZFJlY29yZCwgbG9jYXRpb24pXG4gICAgfVxuICAgIHJldHVybiBfY3JlYXRlUm91dGUobnVsbCwgbG9jYXRpb24pXG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlUm91dGUgKFxuICAgIHJlY29yZCxcbiAgICBsb2NhdGlvbixcbiAgICByZWRpcmVjdGVkRnJvbVxuICApIHtcbiAgICBpZiAocmVjb3JkICYmIHJlY29yZC5yZWRpcmVjdCkge1xuICAgICAgcmV0dXJuIHJlZGlyZWN0KHJlY29yZCwgcmVkaXJlY3RlZEZyb20gfHwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChyZWNvcmQgJiYgcmVjb3JkLm1hdGNoQXMpIHtcbiAgICAgIHJldHVybiBhbGlhcyhyZWNvcmQsIGxvY2F0aW9uLCByZWNvcmQubWF0Y2hBcylcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZVJvdXRlKHJlY29yZCwgbG9jYXRpb24sIHJlZGlyZWN0ZWRGcm9tLCByb3V0ZXIpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1hdGNoOiBtYXRjaCxcbiAgICBhZGRSb3V0ZXM6IGFkZFJvdXRlc1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hdGNoUm91dGUgKFxuICByZWdleCxcbiAgcGF0aCxcbiAgcGFyYW1zXG4pIHtcbiAgdmFyIG0gPSBwYXRoLm1hdGNoKHJlZ2V4KTtcblxuICBpZiAoIW0pIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBtLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIGtleSA9IHJlZ2V4LmtleXNbaSAtIDFdO1xuICAgIHZhciB2YWwgPSB0eXBlb2YgbVtpXSA9PT0gJ3N0cmluZycgPyBkZWNvZGVVUklDb21wb25lbnQobVtpXSkgOiBtW2ldO1xuICAgIGlmIChrZXkpIHtcbiAgICAgIHBhcmFtc1trZXkubmFtZV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVJlY29yZFBhdGggKHBhdGgsIHJlY29yZCkge1xuICByZXR1cm4gcmVzb2x2ZVBhdGgocGF0aCwgcmVjb3JkLnBhcmVudCA/IHJlY29yZC5wYXJlbnQucGF0aCA6ICcvJywgdHJ1ZSlcbn1cblxuLyogICovXG5cblxudmFyIHBvc2l0aW9uU3RvcmUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5mdW5jdGlvbiBzZXR1cFNjcm9sbCAoKSB7XG4gIC8vIEZpeCBmb3IgIzE1ODUgZm9yIEZpcmVmb3hcbiAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHsga2V5OiBnZXRTdGF0ZUtleSgpIH0sICcnKTtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgZnVuY3Rpb24gKGUpIHtcbiAgICBzYXZlU2Nyb2xsUG9zaXRpb24oKTtcbiAgICBpZiAoZS5zdGF0ZSAmJiBlLnN0YXRlLmtleSkge1xuICAgICAgc2V0U3RhdGVLZXkoZS5zdGF0ZS5rZXkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVNjcm9sbCAoXG4gIHJvdXRlcixcbiAgdG8sXG4gIGZyb20sXG4gIGlzUG9wXG4pIHtcbiAgaWYgKCFyb3V0ZXIuYXBwKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgYmVoYXZpb3IgPSByb3V0ZXIub3B0aW9ucy5zY3JvbGxCZWhhdmlvcjtcbiAgaWYgKCFiZWhhdmlvcikge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJlaGF2aW9yID09PSAnZnVuY3Rpb24nLCBcInNjcm9sbEJlaGF2aW9yIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIC8vIHdhaXQgdW50aWwgcmUtcmVuZGVyIGZpbmlzaGVzIGJlZm9yZSBzY3JvbGxpbmdcbiAgcm91dGVyLmFwcC4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBwb3NpdGlvbiA9IGdldFNjcm9sbFBvc2l0aW9uKCk7XG4gICAgdmFyIHNob3VsZFNjcm9sbCA9IGJlaGF2aW9yKHRvLCBmcm9tLCBpc1BvcCA/IHBvc2l0aW9uIDogbnVsbCk7XG5cbiAgICBpZiAoIXNob3VsZFNjcm9sbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzaG91bGRTY3JvbGwudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgc2hvdWxkU2Nyb2xsLnRoZW4oZnVuY3Rpb24gKHNob3VsZFNjcm9sbCkge1xuICAgICAgICBzY3JvbGxUb1Bvc2l0aW9uKChzaG91bGRTY3JvbGwpLCBwb3NpdGlvbik7XG4gICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgYXNzZXJ0KGZhbHNlLCBlcnIudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY3JvbGxUb1Bvc2l0aW9uKHNob3VsZFNjcm9sbCwgcG9zaXRpb24pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNhdmVTY3JvbGxQb3NpdGlvbiAoKSB7XG4gIHZhciBrZXkgPSBnZXRTdGF0ZUtleSgpO1xuICBpZiAoa2V5KSB7XG4gICAgcG9zaXRpb25TdG9yZVtrZXldID0ge1xuICAgICAgeDogd2luZG93LnBhZ2VYT2Zmc2V0LFxuICAgICAgeTogd2luZG93LnBhZ2VZT2Zmc2V0XG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxQb3NpdGlvbiAoKSB7XG4gIHZhciBrZXkgPSBnZXRTdGF0ZUtleSgpO1xuICBpZiAoa2V5KSB7XG4gICAgcmV0dXJuIHBvc2l0aW9uU3RvcmVba2V5XVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRQb3NpdGlvbiAoZWwsIG9mZnNldCkge1xuICB2YXIgZG9jRWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciBkb2NSZWN0ID0gZG9jRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBlbFJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIHtcbiAgICB4OiBlbFJlY3QubGVmdCAtIGRvY1JlY3QubGVmdCAtIG9mZnNldC54LFxuICAgIHk6IGVsUmVjdC50b3AgLSBkb2NSZWN0LnRvcCAtIG9mZnNldC55XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWxpZFBvc2l0aW9uIChvYmopIHtcbiAgcmV0dXJuIGlzTnVtYmVyKG9iai54KSB8fCBpc051bWJlcihvYmoueSlcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUG9zaXRpb24gKG9iaikge1xuICByZXR1cm4ge1xuICAgIHg6IGlzTnVtYmVyKG9iai54KSA/IG9iai54IDogd2luZG93LnBhZ2VYT2Zmc2V0LFxuICAgIHk6IGlzTnVtYmVyKG9iai55KSA/IG9iai55IDogd2luZG93LnBhZ2VZT2Zmc2V0XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplT2Zmc2V0IChvYmopIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBpc051bWJlcihvYmoueCkgPyBvYmoueCA6IDAsXG4gICAgeTogaXNOdW1iZXIob2JqLnkpID8gb2JqLnkgOiAwXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIgKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnbnVtYmVyJ1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1Bvc2l0aW9uIChzaG91bGRTY3JvbGwsIHBvc2l0aW9uKSB7XG4gIHZhciBpc09iamVjdCA9IHR5cGVvZiBzaG91bGRTY3JvbGwgPT09ICdvYmplY3QnO1xuICBpZiAoaXNPYmplY3QgJiYgdHlwZW9mIHNob3VsZFNjcm9sbC5zZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNob3VsZFNjcm9sbC5zZWxlY3Rvcik7XG4gICAgaWYgKGVsKSB7XG4gICAgICB2YXIgb2Zmc2V0ID0gc2hvdWxkU2Nyb2xsLm9mZnNldCAmJiB0eXBlb2Ygc2hvdWxkU2Nyb2xsLm9mZnNldCA9PT0gJ29iamVjdCcgPyBzaG91bGRTY3JvbGwub2Zmc2V0IDoge307XG4gICAgICBvZmZzZXQgPSBub3JtYWxpemVPZmZzZXQob2Zmc2V0KTtcbiAgICAgIHBvc2l0aW9uID0gZ2V0RWxlbWVudFBvc2l0aW9uKGVsLCBvZmZzZXQpO1xuICAgIH0gZWxzZSBpZiAoaXNWYWxpZFBvc2l0aW9uKHNob3VsZFNjcm9sbCkpIHtcbiAgICAgIHBvc2l0aW9uID0gbm9ybWFsaXplUG9zaXRpb24oc2hvdWxkU2Nyb2xsKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QgJiYgaXNWYWxpZFBvc2l0aW9uKHNob3VsZFNjcm9sbCkpIHtcbiAgICBwb3NpdGlvbiA9IG5vcm1hbGl6ZVBvc2l0aW9uKHNob3VsZFNjcm9sbCk7XG4gIH1cblxuICBpZiAocG9zaXRpb24pIHtcbiAgICB3aW5kb3cuc2Nyb2xsVG8ocG9zaXRpb24ueCwgcG9zaXRpb24ueSk7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBzdXBwb3J0c1B1c2hTdGF0ZSA9IGluQnJvd3NlciAmJiAoZnVuY3Rpb24gKCkge1xuICB2YXIgdWEgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcblxuICBpZiAoXG4gICAgKHVhLmluZGV4T2YoJ0FuZHJvaWQgMi4nKSAhPT0gLTEgfHwgdWEuaW5kZXhPZignQW5kcm9pZCA0LjAnKSAhPT0gLTEpICYmXG4gICAgdWEuaW5kZXhPZignTW9iaWxlIFNhZmFyaScpICE9PSAtMSAmJlxuICAgIHVhLmluZGV4T2YoJ0Nocm9tZScpID09PSAtMSAmJlxuICAgIHVhLmluZGV4T2YoJ1dpbmRvd3MgUGhvbmUnKSA9PT0gLTFcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gd2luZG93Lmhpc3RvcnkgJiYgJ3B1c2hTdGF0ZScgaW4gd2luZG93Lmhpc3Rvcnlcbn0pKCk7XG5cbi8vIHVzZSBVc2VyIFRpbWluZyBhcGkgKGlmIHByZXNlbnQpIGZvciBtb3JlIGFjY3VyYXRlIGtleSBwcmVjaXNpb25cbnZhciBUaW1lID0gaW5Ccm93c2VyICYmIHdpbmRvdy5wZXJmb3JtYW5jZSAmJiB3aW5kb3cucGVyZm9ybWFuY2Uubm93XG4gID8gd2luZG93LnBlcmZvcm1hbmNlXG4gIDogRGF0ZTtcblxudmFyIF9rZXkgPSBnZW5LZXkoKTtcblxuZnVuY3Rpb24gZ2VuS2V5ICgpIHtcbiAgcmV0dXJuIFRpbWUubm93KCkudG9GaXhlZCgzKVxufVxuXG5mdW5jdGlvbiBnZXRTdGF0ZUtleSAoKSB7XG4gIHJldHVybiBfa2V5XG59XG5cbmZ1bmN0aW9uIHNldFN0YXRlS2V5IChrZXkpIHtcbiAgX2tleSA9IGtleTtcbn1cblxuZnVuY3Rpb24gcHVzaFN0YXRlICh1cmwsIHJlcGxhY2UpIHtcbiAgc2F2ZVNjcm9sbFBvc2l0aW9uKCk7XG4gIC8vIHRyeS4uLmNhdGNoIHRoZSBwdXNoU3RhdGUgY2FsbCB0byBnZXQgYXJvdW5kIFNhZmFyaVxuICAvLyBET00gRXhjZXB0aW9uIDE4IHdoZXJlIGl0IGxpbWl0cyB0byAxMDAgcHVzaFN0YXRlIGNhbGxzXG4gIHZhciBoaXN0b3J5ID0gd2luZG93Lmhpc3Rvcnk7XG4gIHRyeSB7XG4gICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKHsga2V5OiBfa2V5IH0sICcnLCB1cmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfa2V5ID0gZ2VuS2V5KCk7XG4gICAgICBoaXN0b3J5LnB1c2hTdGF0ZSh7IGtleTogX2tleSB9LCAnJywgdXJsKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB3aW5kb3cubG9jYXRpb25bcmVwbGFjZSA/ICdyZXBsYWNlJyA6ICdhc3NpZ24nXSh1cmwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VTdGF0ZSAodXJsKSB7XG4gIHB1c2hTdGF0ZSh1cmwsIHRydWUpO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcnVuUXVldWUgKHF1ZXVlLCBmbiwgY2IpIHtcbiAgdmFyIHN0ZXAgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPj0gcXVldWUubGVuZ3RoKSB7XG4gICAgICBjYigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocXVldWVbaW5kZXhdKSB7XG4gICAgICAgIGZuKHF1ZXVlW2luZGV4XSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHN0ZXAoaW5kZXggKyAxKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGVwKGluZGV4ICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBzdGVwKDApO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcmVzb2x2ZUFzeW5jQ29tcG9uZW50cyAobWF0Y2hlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdmFyIGhhc0FzeW5jID0gZmFsc2U7XG4gICAgdmFyIHBlbmRpbmcgPSAwO1xuICAgIHZhciBlcnJvciA9IG51bGw7XG5cbiAgICBmbGF0TWFwQ29tcG9uZW50cyhtYXRjaGVkLCBmdW5jdGlvbiAoZGVmLCBfLCBtYXRjaCwga2V5KSB7XG4gICAgICAvLyBpZiBpdCdzIGEgZnVuY3Rpb24gYW5kIGRvZXNuJ3QgaGF2ZSBjaWQgYXR0YWNoZWQsXG4gICAgICAvLyBhc3N1bWUgaXQncyBhbiBhc3luYyBjb21wb25lbnQgcmVzb2x2ZSBmdW5jdGlvbi5cbiAgICAgIC8vIHdlIGFyZSBub3QgdXNpbmcgVnVlJ3MgZGVmYXVsdCBhc3luYyByZXNvbHZpbmcgbWVjaGFuaXNtIGJlY2F1c2VcbiAgICAgIC8vIHdlIHdhbnQgdG8gaGFsdCB0aGUgbmF2aWdhdGlvbiB1bnRpbCB0aGUgaW5jb21pbmcgY29tcG9uZW50IGhhcyBiZWVuXG4gICAgICAvLyByZXNvbHZlZC5cbiAgICAgIGlmICh0eXBlb2YgZGVmID09PSAnZnVuY3Rpb24nICYmIGRlZi5jaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoYXNBc3luYyA9IHRydWU7XG4gICAgICAgIHBlbmRpbmcrKztcblxuICAgICAgICB2YXIgcmVzb2x2ZSA9IG9uY2UoZnVuY3Rpb24gKHJlc29sdmVkRGVmKSB7XG4gICAgICAgICAgaWYgKGlzRVNNb2R1bGUocmVzb2x2ZWREZWYpKSB7XG4gICAgICAgICAgICByZXNvbHZlZERlZiA9IHJlc29sdmVkRGVmLmRlZmF1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNhdmUgcmVzb2x2ZWQgb24gYXN5bmMgZmFjdG9yeSBpbiBjYXNlIGl0J3MgdXNlZCBlbHNld2hlcmVcbiAgICAgICAgICBkZWYucmVzb2x2ZWQgPSB0eXBlb2YgcmVzb2x2ZWREZWYgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gcmVzb2x2ZWREZWZcbiAgICAgICAgICAgIDogX1Z1ZS5leHRlbmQocmVzb2x2ZWREZWYpO1xuICAgICAgICAgIG1hdGNoLmNvbXBvbmVudHNba2V5XSA9IHJlc29sdmVkRGVmO1xuICAgICAgICAgIHBlbmRpbmctLTtcbiAgICAgICAgICBpZiAocGVuZGluZyA8PSAwKSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgcmVqZWN0ID0gb25jZShmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgdmFyIG1zZyA9IFwiRmFpbGVkIHRvIHJlc29sdmUgYXN5bmMgY29tcG9uZW50IFwiICsga2V5ICsgXCI6IFwiICsgcmVhc29uO1xuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihmYWxzZSwgbXNnKTtcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBlcnJvciA9IGlzRXJyb3IocmVhc29uKVxuICAgICAgICAgICAgICA/IHJlYXNvblxuICAgICAgICAgICAgICA6IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICAgICAgbmV4dChlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgcmVzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlcyA9IGRlZihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlcy50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXMudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBuZXcgc3ludGF4IGluIFZ1ZSAyLjNcbiAgICAgICAgICAgIHZhciBjb21wID0gcmVzLmNvbXBvbmVudDtcbiAgICAgICAgICAgIGlmIChjb21wICYmIHR5cGVvZiBjb21wLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgY29tcC50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWhhc0FzeW5jKSB7IG5leHQoKTsgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsYXRNYXBDb21wb25lbnRzIChcbiAgbWF0Y2hlZCxcbiAgZm5cbikge1xuICByZXR1cm4gZmxhdHRlbihtYXRjaGVkLm1hcChmdW5jdGlvbiAobSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhtLmNvbXBvbmVudHMpLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBmbihcbiAgICAgIG0uY29tcG9uZW50c1trZXldLFxuICAgICAgbS5pbnN0YW5jZXNba2V5XSxcbiAgICAgIG0sIGtleVxuICAgICk7IH0pXG4gIH0pKVxufVxuXG5mdW5jdGlvbiBmbGF0dGVuIChhcnIpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGFycilcbn1cblxudmFyIGhhc1N5bWJvbCA9XG4gIHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiZcbiAgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gJ3N5bWJvbCc7XG5cbmZ1bmN0aW9uIGlzRVNNb2R1bGUgKG9iaikge1xuICByZXR1cm4gb2JqLl9fZXNNb2R1bGUgfHwgKGhhc1N5bWJvbCAmJiBvYmpbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ01vZHVsZScpXG59XG5cbi8vIGluIFdlYnBhY2sgMiwgcmVxdWlyZS5lbnN1cmUgbm93IGFsc28gcmV0dXJucyBhIFByb21pc2Vcbi8vIHNvIHRoZSByZXNvbHZlL3JlamVjdCBmdW5jdGlvbnMgbWF5IGdldCBjYWxsZWQgYW4gZXh0cmEgdGltZVxuLy8gaWYgdGhlIHVzZXIgdXNlcyBhbiBhcnJvdyBmdW5jdGlvbiBzaG9ydGhhbmQgdGhhdCBoYXBwZW5zIHRvXG4vLyByZXR1cm4gdGhhdCBQcm9taXNlLlxuZnVuY3Rpb24gb25jZSAoZm4pIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgIGlmIChjYWxsZWQpIHsgcmV0dXJuIH1cbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmdzKVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgSGlzdG9yeSA9IGZ1bmN0aW9uIEhpc3RvcnkgKHJvdXRlciwgYmFzZSkge1xuICB0aGlzLnJvdXRlciA9IHJvdXRlcjtcbiAgdGhpcy5iYXNlID0gbm9ybWFsaXplQmFzZShiYXNlKTtcbiAgLy8gc3RhcnQgd2l0aCBhIHJvdXRlIG9iamVjdCB0aGF0IHN0YW5kcyBmb3IgXCJub3doZXJlXCJcbiAgdGhpcy5jdXJyZW50ID0gU1RBUlQ7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucmVhZHkgPSBmYWxzZTtcbiAgdGhpcy5yZWFkeUNicyA9IFtdO1xuICB0aGlzLnJlYWR5RXJyb3JDYnMgPSBbXTtcbiAgdGhpcy5lcnJvckNicyA9IFtdO1xufTtcblxuSGlzdG9yeS5wcm90b3R5cGUubGlzdGVuID0gZnVuY3Rpb24gbGlzdGVuIChjYikge1xuICB0aGlzLmNiID0gY2I7XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS5vblJlYWR5ID0gZnVuY3Rpb24gb25SZWFkeSAoY2IsIGVycm9yQ2IpIHtcbiAgaWYgKHRoaXMucmVhZHkpIHtcbiAgICBjYigpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVhZHlDYnMucHVzaChjYik7XG4gICAgaWYgKGVycm9yQ2IpIHtcbiAgICAgIHRoaXMucmVhZHlFcnJvckNicy5wdXNoKGVycm9yQ2IpO1xuICAgIH1cbiAgfVxufTtcblxuSGlzdG9yeS5wcm90b3R5cGUub25FcnJvciA9IGZ1bmN0aW9uIG9uRXJyb3IgKGVycm9yQ2IpIHtcbiAgdGhpcy5lcnJvckNicy5wdXNoKGVycm9yQ2IpO1xufTtcblxuSGlzdG9yeS5wcm90b3R5cGUudHJhbnNpdGlvblRvID0gZnVuY3Rpb24gdHJhbnNpdGlvblRvIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciByb3V0ZSA9IHRoaXMucm91dGVyLm1hdGNoKGxvY2F0aW9uLCB0aGlzLmN1cnJlbnQpO1xuICB0aGlzLmNvbmZpcm1UcmFuc2l0aW9uKHJvdXRlLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcyQxLnVwZGF0ZVJvdXRlKHJvdXRlKTtcbiAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgIHRoaXMkMS5lbnN1cmVVUkwoKTtcblxuICAgIC8vIGZpcmUgcmVhZHkgY2JzIG9uY2VcbiAgICBpZiAoIXRoaXMkMS5yZWFkeSkge1xuICAgICAgdGhpcyQxLnJlYWR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMkMS5yZWFkeUNicy5mb3JFYWNoKGZ1bmN0aW9uIChjYikgeyBjYihyb3V0ZSk7IH0pO1xuICAgIH1cbiAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChvbkFib3J0KSB7XG4gICAgICBvbkFib3J0KGVycik7XG4gICAgfVxuICAgIGlmIChlcnIgJiYgIXRoaXMkMS5yZWFkeSkge1xuICAgICAgdGhpcyQxLnJlYWR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMkMS5yZWFkeUVycm9yQ2JzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7IGNiKGVycik7IH0pO1xuICAgIH1cbiAgfSk7XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS5jb25maXJtVHJhbnNpdGlvbiA9IGZ1bmN0aW9uIGNvbmZpcm1UcmFuc2l0aW9uIChyb3V0ZSwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICB2YXIgYWJvcnQgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGlzRXJyb3IoZXJyKSkge1xuICAgICAgaWYgKHRoaXMkMS5lcnJvckNicy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcyQxLmVycm9yQ2JzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7IGNiKGVycik7IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2FybihmYWxzZSwgJ3VuY2F1Z2h0IGVycm9yIGR1cmluZyByb3V0ZSBuYXZpZ2F0aW9uOicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9XG4gICAgfVxuICAgIG9uQWJvcnQgJiYgb25BYm9ydChlcnIpO1xuICB9O1xuICBpZiAoXG4gICAgaXNTYW1lUm91dGUocm91dGUsIGN1cnJlbnQpICYmXG4gICAgLy8gaW4gdGhlIGNhc2UgdGhlIHJvdXRlIG1hcCBoYXMgYmVlbiBkeW5hbWljYWxseSBhcHBlbmRlZCB0b1xuICAgIHJvdXRlLm1hdGNoZWQubGVuZ3RoID09PSBjdXJyZW50Lm1hdGNoZWQubGVuZ3RoXG4gICkge1xuICAgIHRoaXMuZW5zdXJlVVJMKCk7XG4gICAgcmV0dXJuIGFib3J0KClcbiAgfVxuXG4gIHZhciByZWYgPSByZXNvbHZlUXVldWUodGhpcy5jdXJyZW50Lm1hdGNoZWQsIHJvdXRlLm1hdGNoZWQpO1xuICAgIHZhciB1cGRhdGVkID0gcmVmLnVwZGF0ZWQ7XG4gICAgdmFyIGRlYWN0aXZhdGVkID0gcmVmLmRlYWN0aXZhdGVkO1xuICAgIHZhciBhY3RpdmF0ZWQgPSByZWYuYWN0aXZhdGVkO1xuXG4gIHZhciBxdWV1ZSA9IFtdLmNvbmNhdChcbiAgICAvLyBpbi1jb21wb25lbnQgbGVhdmUgZ3VhcmRzXG4gICAgZXh0cmFjdExlYXZlR3VhcmRzKGRlYWN0aXZhdGVkKSxcbiAgICAvLyBnbG9iYWwgYmVmb3JlIGhvb2tzXG4gICAgdGhpcy5yb3V0ZXIuYmVmb3JlSG9va3MsXG4gICAgLy8gaW4tY29tcG9uZW50IHVwZGF0ZSBob29rc1xuICAgIGV4dHJhY3RVcGRhdGVIb29rcyh1cGRhdGVkKSxcbiAgICAvLyBpbi1jb25maWcgZW50ZXIgZ3VhcmRzXG4gICAgYWN0aXZhdGVkLm1hcChmdW5jdGlvbiAobSkgeyByZXR1cm4gbS5iZWZvcmVFbnRlcjsgfSksXG4gICAgLy8gYXN5bmMgY29tcG9uZW50c1xuICAgIHJlc29sdmVBc3luY0NvbXBvbmVudHMoYWN0aXZhdGVkKVxuICApO1xuXG4gIHRoaXMucGVuZGluZyA9IHJvdXRlO1xuICB2YXIgaXRlcmF0b3IgPSBmdW5jdGlvbiAoaG9vaywgbmV4dCkge1xuICAgIGlmICh0aGlzJDEucGVuZGluZyAhPT0gcm91dGUpIHtcbiAgICAgIHJldHVybiBhYm9ydCgpXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBob29rKHJvdXRlLCBjdXJyZW50LCBmdW5jdGlvbiAodG8pIHtcbiAgICAgICAgaWYgKHRvID09PSBmYWxzZSB8fCBpc0Vycm9yKHRvKSkge1xuICAgICAgICAgIC8vIG5leHQoZmFsc2UpIC0+IGFib3J0IG5hdmlnYXRpb24sIGVuc3VyZSBjdXJyZW50IFVSTFxuICAgICAgICAgIHRoaXMkMS5lbnN1cmVVUkwodHJ1ZSk7XG4gICAgICAgICAgYWJvcnQodG8pO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHR5cGVvZiB0byA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAodHlwZW9mIHRvID09PSAnb2JqZWN0JyAmJiAoXG4gICAgICAgICAgICB0eXBlb2YgdG8ucGF0aCA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAgIHR5cGVvZiB0by5uYW1lID09PSAnc3RyaW5nJ1xuICAgICAgICAgICkpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIG5leHQoJy8nKSBvciBuZXh0KHsgcGF0aDogJy8nIH0pIC0+IHJlZGlyZWN0XG4gICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHRvID09PSAnb2JqZWN0JyAmJiB0by5yZXBsYWNlKSB7XG4gICAgICAgICAgICB0aGlzJDEucmVwbGFjZSh0byk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMkMS5wdXNoKHRvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gY29uZmlybSB0cmFuc2l0aW9uIGFuZCBwYXNzIG9uIHRoZSB2YWx1ZVxuICAgICAgICAgIG5leHQodG8pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhYm9ydChlKTtcbiAgICB9XG4gIH07XG5cbiAgcnVuUXVldWUocXVldWUsIGl0ZXJhdG9yLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBvc3RFbnRlckNicyA9IFtdO1xuICAgIHZhciBpc1ZhbGlkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcyQxLmN1cnJlbnQgPT09IHJvdXRlOyB9O1xuICAgIC8vIHdhaXQgdW50aWwgYXN5bmMgY29tcG9uZW50cyBhcmUgcmVzb2x2ZWQgYmVmb3JlXG4gICAgLy8gZXh0cmFjdGluZyBpbi1jb21wb25lbnQgZW50ZXIgZ3VhcmRzXG4gICAgdmFyIGVudGVyR3VhcmRzID0gZXh0cmFjdEVudGVyR3VhcmRzKGFjdGl2YXRlZCwgcG9zdEVudGVyQ2JzLCBpc1ZhbGlkKTtcbiAgICB2YXIgcXVldWUgPSBlbnRlckd1YXJkcy5jb25jYXQodGhpcyQxLnJvdXRlci5yZXNvbHZlSG9va3MpO1xuICAgIHJ1blF1ZXVlKHF1ZXVlLCBpdGVyYXRvciwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHRoaXMkMS5wZW5kaW5nICE9PSByb3V0ZSkge1xuICAgICAgICByZXR1cm4gYWJvcnQoKVxuICAgICAgfVxuICAgICAgdGhpcyQxLnBlbmRpbmcgPSBudWxsO1xuICAgICAgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgICBpZiAodGhpcyQxLnJvdXRlci5hcHApIHtcbiAgICAgICAgdGhpcyQxLnJvdXRlci5hcHAuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwb3N0RW50ZXJDYnMuZm9yRWFjaChmdW5jdGlvbiAoY2IpIHsgY2IoKTsgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn07XG5cbkhpc3RvcnkucHJvdG90eXBlLnVwZGF0ZVJvdXRlID0gZnVuY3Rpb24gdXBkYXRlUm91dGUgKHJvdXRlKSB7XG4gIHZhciBwcmV2ID0gdGhpcy5jdXJyZW50O1xuICB0aGlzLmN1cnJlbnQgPSByb3V0ZTtcbiAgdGhpcy5jYiAmJiB0aGlzLmNiKHJvdXRlKTtcbiAgdGhpcy5yb3V0ZXIuYWZ0ZXJIb29rcy5mb3JFYWNoKGZ1bmN0aW9uIChob29rKSB7XG4gICAgaG9vayAmJiBob29rKHJvdXRlLCBwcmV2KTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBub3JtYWxpemVCYXNlIChiYXNlKSB7XG4gIGlmICghYmFzZSkge1xuICAgIGlmIChpbkJyb3dzZXIpIHtcbiAgICAgIC8vIHJlc3BlY3QgPGJhc2U+IHRhZ1xuICAgICAgdmFyIGJhc2VFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Jhc2UnKTtcbiAgICAgIGJhc2UgPSAoYmFzZUVsICYmIGJhc2VFbC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSkgfHwgJy8nO1xuICAgICAgLy8gc3RyaXAgZnVsbCBVUkwgb3JpZ2luXG4gICAgICBiYXNlID0gYmFzZS5yZXBsYWNlKC9eaHR0cHM/OlxcL1xcL1teXFwvXSsvLCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2UgPSAnLyc7XG4gICAgfVxuICB9XG4gIC8vIG1ha2Ugc3VyZSB0aGVyZSdzIHRoZSBzdGFydGluZyBzbGFzaFxuICBpZiAoYmFzZS5jaGFyQXQoMCkgIT09ICcvJykge1xuICAgIGJhc2UgPSAnLycgKyBiYXNlO1xuICB9XG4gIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaFxuICByZXR1cm4gYmFzZS5yZXBsYWNlKC9cXC8kLywgJycpXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVRdWV1ZSAoXG4gIGN1cnJlbnQsXG4gIG5leHRcbikge1xuICB2YXIgaTtcbiAgdmFyIG1heCA9IE1hdGgubWF4KGN1cnJlbnQubGVuZ3RoLCBuZXh0Lmxlbmd0aCk7XG4gIGZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykge1xuICAgIGlmIChjdXJyZW50W2ldICE9PSBuZXh0W2ldKSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHVwZGF0ZWQ6IG5leHQuc2xpY2UoMCwgaSksXG4gICAgYWN0aXZhdGVkOiBuZXh0LnNsaWNlKGkpLFxuICAgIGRlYWN0aXZhdGVkOiBjdXJyZW50LnNsaWNlKGkpXG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEd1YXJkcyAoXG4gIHJlY29yZHMsXG4gIG5hbWUsXG4gIGJpbmQsXG4gIHJldmVyc2Vcbikge1xuICB2YXIgZ3VhcmRzID0gZmxhdE1hcENvbXBvbmVudHMocmVjb3JkcywgZnVuY3Rpb24gKGRlZiwgaW5zdGFuY2UsIG1hdGNoLCBrZXkpIHtcbiAgICB2YXIgZ3VhcmQgPSBleHRyYWN0R3VhcmQoZGVmLCBuYW1lKTtcbiAgICBpZiAoZ3VhcmQpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGd1YXJkKVxuICAgICAgICA/IGd1YXJkLm1hcChmdW5jdGlvbiAoZ3VhcmQpIHsgcmV0dXJuIGJpbmQoZ3VhcmQsIGluc3RhbmNlLCBtYXRjaCwga2V5KTsgfSlcbiAgICAgICAgOiBiaW5kKGd1YXJkLCBpbnN0YW5jZSwgbWF0Y2gsIGtleSlcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZmxhdHRlbihyZXZlcnNlID8gZ3VhcmRzLnJldmVyc2UoKSA6IGd1YXJkcylcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEd1YXJkIChcbiAgZGVmLFxuICBrZXlcbikge1xuICBpZiAodHlwZW9mIGRlZiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIGV4dGVuZCBub3cgc28gdGhhdCBnbG9iYWwgbWl4aW5zIGFyZSBhcHBsaWVkLlxuICAgIGRlZiA9IF9WdWUuZXh0ZW5kKGRlZik7XG4gIH1cbiAgcmV0dXJuIGRlZi5vcHRpb25zW2tleV1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdExlYXZlR3VhcmRzIChkZWFjdGl2YXRlZCkge1xuICByZXR1cm4gZXh0cmFjdEd1YXJkcyhkZWFjdGl2YXRlZCwgJ2JlZm9yZVJvdXRlTGVhdmUnLCBiaW5kR3VhcmQsIHRydWUpXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RVcGRhdGVIb29rcyAodXBkYXRlZCkge1xuICByZXR1cm4gZXh0cmFjdEd1YXJkcyh1cGRhdGVkLCAnYmVmb3JlUm91dGVVcGRhdGUnLCBiaW5kR3VhcmQpXG59XG5cbmZ1bmN0aW9uIGJpbmRHdWFyZCAoZ3VhcmQsIGluc3RhbmNlKSB7XG4gIGlmIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBib3VuZFJvdXRlR3VhcmQgKCkge1xuICAgICAgcmV0dXJuIGd1YXJkLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RFbnRlckd1YXJkcyAoXG4gIGFjdGl2YXRlZCxcbiAgY2JzLFxuICBpc1ZhbGlkXG4pIHtcbiAgcmV0dXJuIGV4dHJhY3RHdWFyZHMoYWN0aXZhdGVkLCAnYmVmb3JlUm91dGVFbnRlcicsIGZ1bmN0aW9uIChndWFyZCwgXywgbWF0Y2gsIGtleSkge1xuICAgIHJldHVybiBiaW5kRW50ZXJHdWFyZChndWFyZCwgbWF0Y2gsIGtleSwgY2JzLCBpc1ZhbGlkKVxuICB9KVxufVxuXG5mdW5jdGlvbiBiaW5kRW50ZXJHdWFyZCAoXG4gIGd1YXJkLFxuICBtYXRjaCxcbiAga2V5LFxuICBjYnMsXG4gIGlzVmFsaWRcbikge1xuICByZXR1cm4gZnVuY3Rpb24gcm91dGVFbnRlckd1YXJkICh0bywgZnJvbSwgbmV4dCkge1xuICAgIHJldHVybiBndWFyZCh0bywgZnJvbSwgZnVuY3Rpb24gKGNiKSB7XG4gICAgICBuZXh0KGNiKTtcbiAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2JzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vICM3NTBcbiAgICAgICAgICAvLyBpZiBhIHJvdXRlci12aWV3IGlzIHdyYXBwZWQgd2l0aCBhbiBvdXQtaW4gdHJhbnNpdGlvbixcbiAgICAgICAgICAvLyB0aGUgaW5zdGFuY2UgbWF5IG5vdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBhdCB0aGlzIHRpbWUuXG4gICAgICAgICAgLy8gd2Ugd2lsbCBuZWVkIHRvIHBvbGwgZm9yIHJlZ2lzdHJhdGlvbiB1bnRpbCBjdXJyZW50IHJvdXRlXG4gICAgICAgICAgLy8gaXMgbm8gbG9uZ2VyIHZhbGlkLlxuICAgICAgICAgIHBvbGwoY2IsIG1hdGNoLmluc3RhbmNlcywga2V5LCBpc1ZhbGlkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBwb2xsIChcbiAgY2IsIC8vIHNvbWVob3cgZmxvdyBjYW5ub3QgaW5mZXIgdGhpcyBpcyBhIGZ1bmN0aW9uXG4gIGluc3RhbmNlcyxcbiAga2V5LFxuICBpc1ZhbGlkXG4pIHtcbiAgaWYgKGluc3RhbmNlc1trZXldKSB7XG4gICAgY2IoaW5zdGFuY2VzW2tleV0pO1xuICB9IGVsc2UgaWYgKGlzVmFsaWQoKSkge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgcG9sbChjYiwgaW5zdGFuY2VzLCBrZXksIGlzVmFsaWQpO1xuICAgIH0sIDE2KTtcbiAgfVxufVxuXG4vKiAgKi9cblxuXG52YXIgSFRNTDVIaXN0b3J5ID0gKGZ1bmN0aW9uIChIaXN0b3J5JCQxKSB7XG4gIGZ1bmN0aW9uIEhUTUw1SGlzdG9yeSAocm91dGVyLCBiYXNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICBIaXN0b3J5JCQxLmNhbGwodGhpcywgcm91dGVyLCBiYXNlKTtcblxuICAgIHZhciBleHBlY3RTY3JvbGwgPSByb3V0ZXIub3B0aW9ucy5zY3JvbGxCZWhhdmlvcjtcblxuICAgIGlmIChleHBlY3RTY3JvbGwpIHtcbiAgICAgIHNldHVwU2Nyb2xsKCk7XG4gICAgfVxuXG4gICAgdmFyIGluaXRMb2NhdGlvbiA9IGdldExvY2F0aW9uKHRoaXMuYmFzZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gdGhpcyQxLmN1cnJlbnQ7XG5cbiAgICAgIC8vIEF2b2lkaW5nIGZpcnN0IGBwb3BzdGF0ZWAgZXZlbnQgZGlzcGF0Y2hlZCBpbiBzb21lIGJyb3dzZXJzIGJ1dCBmaXJzdFxuICAgICAgLy8gaGlzdG9yeSByb3V0ZSBub3QgdXBkYXRlZCBzaW5jZSBhc3luYyBndWFyZCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgICAgdmFyIGxvY2F0aW9uID0gZ2V0TG9jYXRpb24odGhpcyQxLmJhc2UpO1xuICAgICAgaWYgKHRoaXMkMS5jdXJyZW50ID09PSBTVEFSVCAmJiBsb2NhdGlvbiA9PT0gaW5pdExvY2F0aW9uKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aGlzJDEudHJhbnNpdGlvblRvKGxvY2F0aW9uLCBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgICAgaWYgKGV4cGVjdFNjcm9sbCkge1xuICAgICAgICAgIGhhbmRsZVNjcm9sbChyb3V0ZXIsIHJvdXRlLCBjdXJyZW50LCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIEhpc3RvcnkkJDEgKSBIVE1MNUhpc3RvcnkuX19wcm90b19fID0gSGlzdG9yeSQkMTtcbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEhpc3RvcnkkJDEgJiYgSGlzdG9yeSQkMS5wcm90b3R5cGUgKTtcbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEhUTUw1SGlzdG9yeTtcblxuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlLmdvID0gZnVuY3Rpb24gZ28gKG4pIHtcbiAgICB3aW5kb3cuaGlzdG9yeS5nbyhuKTtcbiAgfTtcblxuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgdmFyIGZyb21Sb3V0ZSA9IHJlZi5jdXJyZW50O1xuICAgIHRoaXMudHJhbnNpdGlvblRvKGxvY2F0aW9uLCBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgIHB1c2hTdGF0ZShjbGVhblBhdGgodGhpcyQxLmJhc2UgKyByb3V0ZS5mdWxsUGF0aCkpO1xuICAgICAgaGFuZGxlU2Nyb2xsKHRoaXMkMS5yb3V0ZXIsIHJvdXRlLCBmcm9tUm91dGUsIGZhbHNlKTtcbiAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgfSwgb25BYm9ydCk7XG4gIH07XG5cbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZSAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByZWYgPSB0aGlzO1xuICAgIHZhciBmcm9tUm91dGUgPSByZWYuY3VycmVudDtcbiAgICB0aGlzLnRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICByZXBsYWNlU3RhdGUoY2xlYW5QYXRoKHRoaXMkMS5iYXNlICsgcm91dGUuZnVsbFBhdGgpKTtcbiAgICAgIGhhbmRsZVNjcm9sbCh0aGlzJDEucm91dGVyLCByb3V0ZSwgZnJvbVJvdXRlLCBmYWxzZSk7XG4gICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgIH0sIG9uQWJvcnQpO1xuICB9O1xuXG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUuZW5zdXJlVVJMID0gZnVuY3Rpb24gZW5zdXJlVVJMIChwdXNoKSB7XG4gICAgaWYgKGdldExvY2F0aW9uKHRoaXMuYmFzZSkgIT09IHRoaXMuY3VycmVudC5mdWxsUGF0aCkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBjbGVhblBhdGgodGhpcy5iYXNlICsgdGhpcy5jdXJyZW50LmZ1bGxQYXRoKTtcbiAgICAgIHB1c2ggPyBwdXNoU3RhdGUoY3VycmVudCkgOiByZXBsYWNlU3RhdGUoY3VycmVudCk7XG4gICAgfVxuICB9O1xuXG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUuZ2V0Q3VycmVudExvY2F0aW9uID0gZnVuY3Rpb24gZ2V0Q3VycmVudExvY2F0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0TG9jYXRpb24odGhpcy5iYXNlKVxuICB9O1xuXG4gIHJldHVybiBIVE1MNUhpc3Rvcnk7XG59KEhpc3RvcnkpKTtcblxuZnVuY3Rpb24gZ2V0TG9jYXRpb24gKGJhc2UpIHtcbiAgdmFyIHBhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XG4gIGlmIChiYXNlICYmIHBhdGguaW5kZXhPZihiYXNlKSA9PT0gMCkge1xuICAgIHBhdGggPSBwYXRoLnNsaWNlKGJhc2UubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gKHBhdGggfHwgJy8nKSArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggKyB3aW5kb3cubG9jYXRpb24uaGFzaFxufVxuXG4vKiAgKi9cblxuXG52YXIgSGFzaEhpc3RvcnkgPSAoZnVuY3Rpb24gKEhpc3RvcnkkJDEpIHtcbiAgZnVuY3Rpb24gSGFzaEhpc3RvcnkgKHJvdXRlciwgYmFzZSwgZmFsbGJhY2spIHtcbiAgICBIaXN0b3J5JCQxLmNhbGwodGhpcywgcm91dGVyLCBiYXNlKTtcbiAgICAvLyBjaGVjayBoaXN0b3J5IGZhbGxiYWNrIGRlZXBsaW5raW5nXG4gICAgaWYgKGZhbGxiYWNrICYmIGNoZWNrRmFsbGJhY2sodGhpcy5iYXNlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGVuc3VyZVNsYXNoKCk7XG4gIH1cblxuICBpZiAoIEhpc3RvcnkkJDEgKSBIYXNoSGlzdG9yeS5fX3Byb3RvX18gPSBIaXN0b3J5JCQxO1xuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBIaXN0b3J5JCQxICYmIEhpc3RvcnkkJDEucHJvdG90eXBlICk7XG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEhhc2hIaXN0b3J5O1xuXG4gIC8vIHRoaXMgaXMgZGVsYXllZCB1bnRpbCB0aGUgYXBwIG1vdW50c1xuICAvLyB0byBhdm9pZCB0aGUgaGFzaGNoYW5nZSBsaXN0ZW5lciBiZWluZyBmaXJlZCB0b28gZWFybHlcbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLnNldHVwTGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0dXBMaXN0ZW5lcnMgKCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHJvdXRlciA9IHRoaXMucm91dGVyO1xuICAgIHZhciBleHBlY3RTY3JvbGwgPSByb3V0ZXIub3B0aW9ucy5zY3JvbGxCZWhhdmlvcjtcbiAgICB2YXIgc3VwcG9ydHNTY3JvbGwgPSBzdXBwb3J0c1B1c2hTdGF0ZSAmJiBleHBlY3RTY3JvbGw7XG5cbiAgICBpZiAoc3VwcG9ydHNTY3JvbGwpIHtcbiAgICAgIHNldHVwU2Nyb2xsKCk7XG4gICAgfVxuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoc3VwcG9ydHNQdXNoU3RhdGUgPyAncG9wc3RhdGUnIDogJ2hhc2hjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY3VycmVudCA9IHRoaXMkMS5jdXJyZW50O1xuICAgICAgaWYgKCFlbnN1cmVTbGFzaCgpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhpcyQxLnRyYW5zaXRpb25UbyhnZXRIYXNoKCksIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgICBpZiAoc3VwcG9ydHNTY3JvbGwpIHtcbiAgICAgICAgICBoYW5kbGVTY3JvbGwodGhpcyQxLnJvdXRlciwgcm91dGUsIGN1cnJlbnQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3VwcG9ydHNQdXNoU3RhdGUpIHtcbiAgICAgICAgICByZXBsYWNlSGFzaChyb3V0ZS5mdWxsUGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gcHVzaCAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByZWYgPSB0aGlzO1xuICAgIHZhciBmcm9tUm91dGUgPSByZWYuY3VycmVudDtcbiAgICB0aGlzLnRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICBwdXNoSGFzaChyb3V0ZS5mdWxsUGF0aCk7XG4gICAgICBoYW5kbGVTY3JvbGwodGhpcyQxLnJvdXRlciwgcm91dGUsIGZyb21Sb3V0ZSwgZmFsc2UpO1xuICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICB9LCBvbkFib3J0KTtcbiAgfTtcblxuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2UgKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcmVmID0gdGhpcztcbiAgICB2YXIgZnJvbVJvdXRlID0gcmVmLmN1cnJlbnQ7XG4gICAgdGhpcy50cmFuc2l0aW9uVG8obG9jYXRpb24sIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgcmVwbGFjZUhhc2gocm91dGUuZnVsbFBhdGgpO1xuICAgICAgaGFuZGxlU2Nyb2xsKHRoaXMkMS5yb3V0ZXIsIHJvdXRlLCBmcm9tUm91dGUsIGZhbHNlKTtcbiAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgfSwgb25BYm9ydCk7XG4gIH07XG5cbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLmdvID0gZnVuY3Rpb24gZ28gKG4pIHtcbiAgICB3aW5kb3cuaGlzdG9yeS5nbyhuKTtcbiAgfTtcblxuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUuZW5zdXJlVVJMID0gZnVuY3Rpb24gZW5zdXJlVVJMIChwdXNoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQuZnVsbFBhdGg7XG4gICAgaWYgKGdldEhhc2goKSAhPT0gY3VycmVudCkge1xuICAgICAgcHVzaCA/IHB1c2hIYXNoKGN1cnJlbnQpIDogcmVwbGFjZUhhc2goY3VycmVudCk7XG4gICAgfVxuICB9O1xuXG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5nZXRDdXJyZW50TG9jYXRpb24gPSBmdW5jdGlvbiBnZXRDdXJyZW50TG9jYXRpb24gKCkge1xuICAgIHJldHVybiBnZXRIYXNoKClcbiAgfTtcblxuICByZXR1cm4gSGFzaEhpc3Rvcnk7XG59KEhpc3RvcnkpKTtcblxuZnVuY3Rpb24gY2hlY2tGYWxsYmFjayAoYmFzZSkge1xuICB2YXIgbG9jYXRpb24gPSBnZXRMb2NhdGlvbihiYXNlKTtcbiAgaWYgKCEvXlxcLyMvLnRlc3QobG9jYXRpb24pKSB7XG4gICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UoXG4gICAgICBjbGVhblBhdGgoYmFzZSArICcvIycgKyBsb2NhdGlvbilcbiAgICApO1xuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZnVuY3Rpb24gZW5zdXJlU2xhc2ggKCkge1xuICB2YXIgcGF0aCA9IGdldEhhc2goKTtcbiAgaWYgKHBhdGguY2hhckF0KDApID09PSAnLycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJlcGxhY2VIYXNoKCcvJyArIHBhdGgpO1xuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gZ2V0SGFzaCAoKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB3aW5kb3cubG9jYXRpb24uaGFzaCBoZXJlIGJlY2F1c2UgaXQncyBub3RcbiAgLy8gY29uc2lzdGVudCBhY3Jvc3MgYnJvd3NlcnMgLSBGaXJlZm94IHdpbGwgcHJlLWRlY29kZSBpdCFcbiAgdmFyIGhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgdmFyIGluZGV4ID0gaHJlZi5pbmRleE9mKCcjJyk7XG4gIHJldHVybiBpbmRleCA9PT0gLTEgPyAnJyA6IGhyZWYuc2xpY2UoaW5kZXggKyAxKVxufVxuXG5mdW5jdGlvbiBnZXRVcmwgKHBhdGgpIHtcbiAgdmFyIGhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgdmFyIGkgPSBocmVmLmluZGV4T2YoJyMnKTtcbiAgdmFyIGJhc2UgPSBpID49IDAgPyBocmVmLnNsaWNlKDAsIGkpIDogaHJlZjtcbiAgcmV0dXJuIChiYXNlICsgXCIjXCIgKyBwYXRoKVxufVxuXG5mdW5jdGlvbiBwdXNoSGFzaCAocGF0aCkge1xuICBpZiAoc3VwcG9ydHNQdXNoU3RhdGUpIHtcbiAgICBwdXNoU3RhdGUoZ2V0VXJsKHBhdGgpKTtcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IHBhdGg7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZUhhc2ggKHBhdGgpIHtcbiAgaWYgKHN1cHBvcnRzUHVzaFN0YXRlKSB7XG4gICAgcmVwbGFjZVN0YXRlKGdldFVybChwYXRoKSk7XG4gIH0gZWxzZSB7XG4gICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UoZ2V0VXJsKHBhdGgpKTtcbiAgfVxufVxuXG4vKiAgKi9cblxuXG52YXIgQWJzdHJhY3RIaXN0b3J5ID0gKGZ1bmN0aW9uIChIaXN0b3J5JCQxKSB7XG4gIGZ1bmN0aW9uIEFic3RyYWN0SGlzdG9yeSAocm91dGVyLCBiYXNlKSB7XG4gICAgSGlzdG9yeSQkMS5jYWxsKHRoaXMsIHJvdXRlciwgYmFzZSk7XG4gICAgdGhpcy5zdGFjayA9IFtdO1xuICAgIHRoaXMuaW5kZXggPSAtMTtcbiAgfVxuXG4gIGlmICggSGlzdG9yeSQkMSApIEFic3RyYWN0SGlzdG9yeS5fX3Byb3RvX18gPSBIaXN0b3J5JCQxO1xuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggSGlzdG9yeSQkMSAmJiBIaXN0b3J5JCQxLnByb3RvdHlwZSApO1xuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RIaXN0b3J5O1xuXG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2ggKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB0aGlzLnRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICB0aGlzJDEuc3RhY2sgPSB0aGlzJDEuc3RhY2suc2xpY2UoMCwgdGhpcyQxLmluZGV4ICsgMSkuY29uY2F0KHJvdXRlKTtcbiAgICAgIHRoaXMkMS5pbmRleCsrO1xuICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICB9LCBvbkFib3J0KTtcbiAgfTtcblxuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdGhpcy50cmFuc2l0aW9uVG8obG9jYXRpb24sIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgdGhpcyQxLnN0YWNrID0gdGhpcyQxLnN0YWNrLnNsaWNlKDAsIHRoaXMkMS5pbmRleCkuY29uY2F0KHJvdXRlKTtcbiAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgfSwgb25BYm9ydCk7XG4gIH07XG5cbiAgQWJzdHJhY3RIaXN0b3J5LnByb3RvdHlwZS5nbyA9IGZ1bmN0aW9uIGdvIChuKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgdGFyZ2V0SW5kZXggPSB0aGlzLmluZGV4ICsgbjtcbiAgICBpZiAodGFyZ2V0SW5kZXggPCAwIHx8IHRhcmdldEluZGV4ID49IHRoaXMuc3RhY2subGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIHJvdXRlID0gdGhpcy5zdGFja1t0YXJnZXRJbmRleF07XG4gICAgdGhpcy5jb25maXJtVHJhbnNpdGlvbihyb3V0ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcyQxLmluZGV4ID0gdGFyZ2V0SW5kZXg7XG4gICAgICB0aGlzJDEudXBkYXRlUm91dGUocm91dGUpO1xuICAgIH0pO1xuICB9O1xuXG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUuZ2V0Q3VycmVudExvY2F0aW9uID0gZnVuY3Rpb24gZ2V0Q3VycmVudExvY2F0aW9uICgpIHtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gY3VycmVudCA/IGN1cnJlbnQuZnVsbFBhdGggOiAnLydcbiAgfTtcblxuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLmVuc3VyZVVSTCA9IGZ1bmN0aW9uIGVuc3VyZVVSTCAoKSB7XG4gICAgLy8gbm9vcFxuICB9O1xuXG4gIHJldHVybiBBYnN0cmFjdEhpc3Rvcnk7XG59KEhpc3RvcnkpKTtcblxuLyogICovXG5cbnZhciBWdWVSb3V0ZXIgPSBmdW5jdGlvbiBWdWVSb3V0ZXIgKG9wdGlvbnMpIHtcbiAgaWYgKCBvcHRpb25zID09PSB2b2lkIDAgKSBvcHRpb25zID0ge307XG5cbiAgdGhpcy5hcHAgPSBudWxsO1xuICB0aGlzLmFwcHMgPSBbXTtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgdGhpcy5iZWZvcmVIb29rcyA9IFtdO1xuICB0aGlzLnJlc29sdmVIb29rcyA9IFtdO1xuICB0aGlzLmFmdGVySG9va3MgPSBbXTtcbiAgdGhpcy5tYXRjaGVyID0gY3JlYXRlTWF0Y2hlcihvcHRpb25zLnJvdXRlcyB8fCBbXSwgdGhpcyk7XG5cbiAgdmFyIG1vZGUgPSBvcHRpb25zLm1vZGUgfHwgJ2hhc2gnO1xuICB0aGlzLmZhbGxiYWNrID0gbW9kZSA9PT0gJ2hpc3RvcnknICYmICFzdXBwb3J0c1B1c2hTdGF0ZSAmJiBvcHRpb25zLmZhbGxiYWNrICE9PSBmYWxzZTtcbiAgaWYgKHRoaXMuZmFsbGJhY2spIHtcbiAgICBtb2RlID0gJ2hhc2gnO1xuICB9XG4gIGlmICghaW5Ccm93c2VyKSB7XG4gICAgbW9kZSA9ICdhYnN0cmFjdCc7XG4gIH1cbiAgdGhpcy5tb2RlID0gbW9kZTtcblxuICBzd2l0Y2ggKG1vZGUpIHtcbiAgICBjYXNlICdoaXN0b3J5JzpcbiAgICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBIVE1MNUhpc3RvcnkodGhpcywgb3B0aW9ucy5iYXNlKTtcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnaGFzaCc6XG4gICAgICB0aGlzLmhpc3RvcnkgPSBuZXcgSGFzaEhpc3RvcnkodGhpcywgb3B0aW9ucy5iYXNlLCB0aGlzLmZhbGxiYWNrKTtcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnYWJzdHJhY3QnOlxuICAgICAgdGhpcy5oaXN0b3J5ID0gbmV3IEFic3RyYWN0SGlzdG9yeSh0aGlzLCBvcHRpb25zLmJhc2UpO1xuICAgICAgYnJlYWtcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgYXNzZXJ0KGZhbHNlLCAoXCJpbnZhbGlkIG1vZGU6IFwiICsgbW9kZSkpO1xuICAgICAgfVxuICB9XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyBjdXJyZW50Um91dGU6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5tYXRjaCA9IGZ1bmN0aW9uIG1hdGNoIChcbiAgcmF3LFxuICBjdXJyZW50LFxuICByZWRpcmVjdGVkRnJvbVxuKSB7XG4gIHJldHVybiB0aGlzLm1hdGNoZXIubWF0Y2gocmF3LCBjdXJyZW50LCByZWRpcmVjdGVkRnJvbSlcbn07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5jdXJyZW50Um91dGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5oaXN0b3J5ICYmIHRoaXMuaGlzdG9yeS5jdXJyZW50XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiBpbml0IChhcHAgLyogVnVlIGNvbXBvbmVudCBpbnN0YW5jZSAqLykge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgYXNzZXJ0KFxuICAgIGluc3RhbGwuaW5zdGFsbGVkLFxuICAgIFwibm90IGluc3RhbGxlZC4gTWFrZSBzdXJlIHRvIGNhbGwgYFZ1ZS51c2UoVnVlUm91dGVyKWAgXCIgK1xuICAgIFwiYmVmb3JlIGNyZWF0aW5nIHJvb3QgaW5zdGFuY2UuXCJcbiAgKTtcblxuICB0aGlzLmFwcHMucHVzaChhcHApO1xuXG4gIC8vIG1haW4gYXBwIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4gIGlmICh0aGlzLmFwcCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdGhpcy5hcHAgPSBhcHA7XG5cbiAgdmFyIGhpc3RvcnkgPSB0aGlzLmhpc3Rvcnk7XG5cbiAgaWYgKGhpc3RvcnkgaW5zdGFuY2VvZiBIVE1MNUhpc3RvcnkpIHtcbiAgICBoaXN0b3J5LnRyYW5zaXRpb25UbyhoaXN0b3J5LmdldEN1cnJlbnRMb2NhdGlvbigpKTtcbiAgfSBlbHNlIGlmIChoaXN0b3J5IGluc3RhbmNlb2YgSGFzaEhpc3RvcnkpIHtcbiAgICB2YXIgc2V0dXBIYXNoTGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBoaXN0b3J5LnNldHVwTGlzdGVuZXJzKCk7XG4gICAgfTtcbiAgICBoaXN0b3J5LnRyYW5zaXRpb25UbyhcbiAgICAgIGhpc3RvcnkuZ2V0Q3VycmVudExvY2F0aW9uKCksXG4gICAgICBzZXR1cEhhc2hMaXN0ZW5lcixcbiAgICAgIHNldHVwSGFzaExpc3RlbmVyXG4gICAgKTtcbiAgfVxuXG4gIGhpc3RvcnkubGlzdGVuKGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgIHRoaXMkMS5hcHBzLmZvckVhY2goZnVuY3Rpb24gKGFwcCkge1xuICAgICAgYXBwLl9yb3V0ZSA9IHJvdXRlO1xuICAgIH0pO1xuICB9KTtcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuYmVmb3JlRWFjaCA9IGZ1bmN0aW9uIGJlZm9yZUVhY2ggKGZuKSB7XG4gIHJldHVybiByZWdpc3Rlckhvb2sodGhpcy5iZWZvcmVIb29rcywgZm4pXG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmJlZm9yZVJlc29sdmUgPSBmdW5jdGlvbiBiZWZvcmVSZXNvbHZlIChmbikge1xuICByZXR1cm4gcmVnaXN0ZXJIb29rKHRoaXMucmVzb2x2ZUhvb2tzLCBmbilcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuYWZ0ZXJFYWNoID0gZnVuY3Rpb24gYWZ0ZXJFYWNoIChmbikge1xuICByZXR1cm4gcmVnaXN0ZXJIb29rKHRoaXMuYWZ0ZXJIb29rcywgZm4pXG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLm9uUmVhZHkgPSBmdW5jdGlvbiBvblJlYWR5IChjYiwgZXJyb3JDYikge1xuICB0aGlzLmhpc3Rvcnkub25SZWFkeShjYiwgZXJyb3JDYik7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLm9uRXJyb3IgPSBmdW5jdGlvbiBvbkVycm9yIChlcnJvckNiKSB7XG4gIHRoaXMuaGlzdG9yeS5vbkVycm9yKGVycm9yQ2IpO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gcHVzaCAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgdGhpcy5oaXN0b3J5LnB1c2gobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZSAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgdGhpcy5oaXN0b3J5LnJlcGxhY2UobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5nbyA9IGZ1bmN0aW9uIGdvIChuKSB7XG4gIHRoaXMuaGlzdG9yeS5nbyhuKTtcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuYmFjayA9IGZ1bmN0aW9uIGJhY2sgKCkge1xuICB0aGlzLmdvKC0xKTtcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuZm9yd2FyZCA9IGZ1bmN0aW9uIGZvcndhcmQgKCkge1xuICB0aGlzLmdvKDEpO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5nZXRNYXRjaGVkQ29tcG9uZW50cyA9IGZ1bmN0aW9uIGdldE1hdGNoZWRDb21wb25lbnRzICh0bykge1xuICB2YXIgcm91dGUgPSB0b1xuICAgID8gdG8ubWF0Y2hlZFxuICAgICAgPyB0b1xuICAgICAgOiB0aGlzLnJlc29sdmUodG8pLnJvdXRlXG4gICAgOiB0aGlzLmN1cnJlbnRSb3V0ZTtcbiAgaWYgKCFyb3V0ZSkge1xuICAgIHJldHVybiBbXVxuICB9XG4gIHJldHVybiBbXS5jb25jYXQuYXBwbHkoW10sIHJvdXRlLm1hdGNoZWQubWFwKGZ1bmN0aW9uIChtKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG0uY29tcG9uZW50cykubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBtLmNvbXBvbmVudHNba2V5XVxuICAgIH0pXG4gIH0pKVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZSAoXG4gIHRvLFxuICBjdXJyZW50LFxuICBhcHBlbmRcbikge1xuICB2YXIgbG9jYXRpb24gPSBub3JtYWxpemVMb2NhdGlvbihcbiAgICB0byxcbiAgICBjdXJyZW50IHx8IHRoaXMuaGlzdG9yeS5jdXJyZW50LFxuICAgIGFwcGVuZCxcbiAgICB0aGlzXG4gICk7XG4gIHZhciByb3V0ZSA9IHRoaXMubWF0Y2gobG9jYXRpb24sIGN1cnJlbnQpO1xuICB2YXIgZnVsbFBhdGggPSByb3V0ZS5yZWRpcmVjdGVkRnJvbSB8fCByb3V0ZS5mdWxsUGF0aDtcbiAgdmFyIGJhc2UgPSB0aGlzLmhpc3RvcnkuYmFzZTtcbiAgdmFyIGhyZWYgPSBjcmVhdGVIcmVmKGJhc2UsIGZ1bGxQYXRoLCB0aGlzLm1vZGUpO1xuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICByb3V0ZTogcm91dGUsXG4gICAgaHJlZjogaHJlZixcbiAgICAvLyBmb3IgYmFja3dhcmRzIGNvbXBhdFxuICAgIG5vcm1hbGl6ZWRUbzogbG9jYXRpb24sXG4gICAgcmVzb2x2ZWQ6IHJvdXRlXG4gIH1cbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuYWRkUm91dGVzID0gZnVuY3Rpb24gYWRkUm91dGVzIChyb3V0ZXMpIHtcbiAgdGhpcy5tYXRjaGVyLmFkZFJvdXRlcyhyb3V0ZXMpO1xuICBpZiAodGhpcy5oaXN0b3J5LmN1cnJlbnQgIT09IFNUQVJUKSB7XG4gICAgdGhpcy5oaXN0b3J5LnRyYW5zaXRpb25Ubyh0aGlzLmhpc3RvcnkuZ2V0Q3VycmVudExvY2F0aW9uKCkpO1xuICB9XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggVnVlUm91dGVyLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVySG9vayAobGlzdCwgZm4pIHtcbiAgbGlzdC5wdXNoKGZuKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IGxpc3QuaW5kZXhPZihmbik7XG4gICAgaWYgKGkgPiAtMSkgeyBsaXN0LnNwbGljZShpLCAxKTsgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhyZWYgKGJhc2UsIGZ1bGxQYXRoLCBtb2RlKSB7XG4gIHZhciBwYXRoID0gbW9kZSA9PT0gJ2hhc2gnID8gJyMnICsgZnVsbFBhdGggOiBmdWxsUGF0aDtcbiAgcmV0dXJuIGJhc2UgPyBjbGVhblBhdGgoYmFzZSArICcvJyArIHBhdGgpIDogcGF0aFxufVxuXG5WdWVSb3V0ZXIuaW5zdGFsbCA9IGluc3RhbGw7XG5WdWVSb3V0ZXIudmVyc2lvbiA9ICcyLjguMSc7XG5cbmlmIChpbkJyb3dzZXIgJiYgd2luZG93LlZ1ZSkge1xuICB3aW5kb3cuVnVlLnVzZShWdWVSb3V0ZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWdWVSb3V0ZXI7XG4iLCIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FwcC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCIpO1xuaWYoY29udGVudC5fX2VzTW9kdWxlKSBjb250ZW50ID0gY29udGVudC5kZWZhdWx0O1xuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2Fscztcbi8vIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSBET01cbnZhciBhZGQgPSByZXF1aXJlKFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcIikuZGVmYXVsdFxudmFyIHVwZGF0ZSA9IGFkZChcIjNlNDBkOTE4XCIsIGNvbnRlbnQsIGZhbHNlLCB7fSk7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG4gLy8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3NcbiBpZighY29udGVudC5sb2NhbHMpIHtcbiAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIiwgZnVuY3Rpb24oKSB7XG4gICAgIHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FwcC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCIpO1xuICAgICBpZihuZXdDb250ZW50Ll9fZXNNb2R1bGUpIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LmRlZmF1bHQ7XG4gICAgIGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuICAgICB1cGRhdGUobmV3Q29udGVudCk7XG4gICB9KTtcbiB9XG4gLy8gV2hlbiB0aGUgbW9kdWxlIGlzIGRpc3Bvc2VkLCByZW1vdmUgdGhlIDxzdHlsZT4gdGFnc1xuIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3Bpbm5lci52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0yOTc3OTNiMiZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCIpO1xuaWYoY29udGVudC5fX2VzTW9kdWxlKSBjb250ZW50ID0gY29udGVudC5kZWZhdWx0O1xuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2Fscztcbi8vIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSBET01cbnZhciBhZGQgPSByZXF1aXJlKFwiIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcIikuZGVmYXVsdFxudmFyIHVwZGF0ZSA9IGFkZChcIjAwMWVmMGQ0XCIsIGNvbnRlbnQsIGZhbHNlLCB7fSk7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG4gLy8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3NcbiBpZighY29udGVudC5sb2NhbHMpIHtcbiAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3Bpbm5lci52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0yOTc3OTNiMiZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zcGlubmVyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTI5Nzc5M2IyJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIik7XG4gICAgIGlmKG5ld0NvbnRlbnQuX19lc01vZHVsZSkgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQuZGVmYXVsdDtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcy1kYXRlcGlja2VyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIik7XG5pZihjb250ZW50Ll9fZXNNb2R1bGUpIGNvbnRlbnQgPSBjb250ZW50LmRlZmF1bHQ7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIGFkZCA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qc1wiKS5kZWZhdWx0XG52YXIgdXBkYXRlID0gYWRkKFwiNzU3NDZjNmVcIiwgY29udGVudCwgZmFsc2UsIHt9KTtcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcbiAvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuIGlmKCFjb250ZW50LmxvY2Fscykge1xuICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcy1kYXRlcGlja2VyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIiwgZnVuY3Rpb24oKSB7XG4gICAgIHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BzLWRhdGVwaWNrZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1zY3NzJlwiKTtcbiAgICAgaWYobmV3Q29udGVudC5fX2VzTW9kdWxlKSBuZXdDb250ZW50ID0gbmV3Q29udGVudC5kZWZhdWx0O1xuICAgICBpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcbiAgICAgdXBkYXRlKG5ld0NvbnRlbnQpO1xuICAgfSk7XG4gfVxuIC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+IHRhZ3NcbiBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BzLWxvYWRlci52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0wYWE4OGZkMiZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCIpO1xuaWYoY29udGVudC5fX2VzTW9kdWxlKSBjb250ZW50ID0gY29udGVudC5kZWZhdWx0O1xuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2Fscztcbi8vIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSBET01cbnZhciBhZGQgPSByZXF1aXJlKFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcIikuZGVmYXVsdFxudmFyIHVwZGF0ZSA9IGFkZChcIjIwOWU0ZGZlXCIsIGNvbnRlbnQsIGZhbHNlLCB7fSk7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG4gLy8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3NcbiBpZighY29udGVudC5sb2NhbHMpIHtcbiAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtbG9hZGVyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTBhYTg4ZmQyJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIiwgZnVuY3Rpb24oKSB7XG4gICAgIHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BzLWxvYWRlci52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0wYWE4OGZkMiZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCIpO1xuICAgICBpZihuZXdDb250ZW50Ll9fZXNNb2R1bGUpIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LmRlZmF1bHQ7XG4gICAgIGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuICAgICB1cGRhdGUobmV3Q29udGVudCk7XG4gICB9KTtcbiB9XG4gLy8gV2hlbiB0aGUgbW9kdWxlIGlzIGRpc3Bvc2VkLCByZW1vdmUgdGhlIDxzdHlsZT4gdGFnc1xuIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHMtbWVkaWEudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MWIzYTI3ZTAmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiKTtcbmlmKGNvbnRlbnQuX19lc01vZHVsZSkgY29udGVudCA9IGNvbnRlbnQuZGVmYXVsdDtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCJhNzIwY2IxYVwiLCBjb250ZW50LCBmYWxzZSwge30pO1xuLy8gSG90IE1vZHVsZSBSZXBsYWNlbWVudFxuaWYobW9kdWxlLmhvdCkge1xuIC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG4gaWYoIWNvbnRlbnQubG9jYWxzKSB7XG4gICBtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BzLW1lZGlhLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTFiM2EyN2UwJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIiwgZnVuY3Rpb24oKSB7XG4gICAgIHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BzLW1lZGlhLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTFiM2EyN2UwJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIik7XG4gICAgIGlmKG5ld0NvbnRlbnQuX19lc01vZHVsZSkgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQuZGVmYXVsdDtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcy1zZWxlY3QudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZjM3MWJmMDAmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiKTtcbmlmKGNvbnRlbnQuX19lc01vZHVsZSkgY29udGVudCA9IGNvbnRlbnQuZGVmYXVsdDtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCJlM2JjNzAzNlwiLCBjb250ZW50LCBmYWxzZSwge30pO1xuLy8gSG90IE1vZHVsZSBSZXBsYWNlbWVudFxuaWYobW9kdWxlLmhvdCkge1xuIC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG4gaWYoIWNvbnRlbnQubG9jYWxzKSB7XG4gICBtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BzLXNlbGVjdC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD1mMzcxYmYwMCZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcy1zZWxlY3QudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZjM3MWJmMDAmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiKTtcbiAgICAgaWYobmV3Q29udGVudC5fX2VzTW9kdWxlKSBuZXdDb250ZW50ID0gbmV3Q29udGVudC5kZWZhdWx0O1xuICAgICBpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcbiAgICAgdXBkYXRlKG5ld0NvbnRlbnQpO1xuICAgfSk7XG4gfVxuIC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+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+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5ubWQgPSAobW9kdWxlKSA9PiB7XG5cdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdHJldHVybiBtb2R1bGU7XG59OyIsInZhciBzY3JpcHRVcmw7XG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5nLmltcG9ydFNjcmlwdHMpIHNjcmlwdFVybCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbiArIFwiXCI7XG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7XG5pZiAoIXNjcmlwdFVybCAmJiBkb2N1bWVudCkge1xuXHRpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdClcblx0XHRzY3JpcHRVcmwgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyY1xuXHRpZiAoIXNjcmlwdFVybCkge1xuXHRcdHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG5cdFx0aWYoc2NyaXB0cy5sZW5ndGgpIHNjcmlwdFVybCA9IHNjcmlwdHNbc2NyaXB0cy5sZW5ndGggLSAxXS5zcmNcblx0fVxufVxuLy8gV2hlbiBzdXBwb3J0aW5nIGJyb3dzZXJzIHdoZXJlIGFuIGF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgeW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQucHVibGljUGF0aCBtYW51YWxseSB2aWEgY29uZmlndXJhdGlvblxuLy8gb3IgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKFwiXCIpIGFuZCBzZXQgdGhlIF9fd2VicGFja19wdWJsaWNfcGF0aF9fIHZhcmlhYmxlIGZyb20geW91ciBjb2RlIHRvIHVzZSB5b3VyIG93biBsb2dpYy5cbmlmICghc2NyaXB0VXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKTtcbnNjcmlwdFVybCA9IHNjcmlwdFVybC5yZXBsYWNlKC8jLiokLywgXCJcIikucmVwbGFjZSgvXFw/LiokLywgXCJcIikucmVwbGFjZSgvXFwvW15cXC9dKyQvLCBcIi9cIik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBzY3JpcHRVcmw7IiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IGFwcCBmcm9tICcuL2NvbXBvbmVudHMvYXBwJztcbmltcG9ydCBzdG9yZSBmcm9tICcuL3N0b3JlJztcbmltcG9ydCByb3V0ZXIgZnJvbSAnLi9yb3V0ZXInO1xuaW1wb3J0IFRyYW5zbGF0aW9uIGZyb20gJy4vbWl4aW5zL3RyYW5zbGF0ZSc7XG5cblZ1ZS5taXhpbihUcmFuc2xhdGlvbik7XG5cbm5ldyBWdWUoe1xuICByb3V0ZXIsXG4gIHN0b3JlLFxuICBlbDogJyNzdG9jay1hcHAnLFxuICB0ZW1wbGF0ZTogJzxhcHAgLz4nLFxuICBjb21wb25lbnRzOiB7YXBwfSxcbiAgYmVmb3JlTW91bnQoKSB7XG4gICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldFRyYW5zbGF0aW9ucycpO1xuICB9LFxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9