react-bootstrap-table-ng-paginator 4.19.0 → 4.19.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
1
  /*! For license information please see react-bootstrap-table-ng-paginator.js.LICENSE.txt */
2
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactBootstrapTableNgPaginator=t(require("react")):e.ReactBootstrapTableNgPaginator=t(e.React)}(self,e=>{return t={7(e){"use strict";var t,a="object"==typeof Reflect?Reflect:null,n=a&&"function"==typeof a.apply?a.apply:function(e,t,a){return Function.prototype.apply.call(e,t,a)};t=a&&"function"==typeof a.ownKeys?a.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var r=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}e.exports=i,e.exports.once=function(e,t){return new Promise(function(a,n){function r(a){e.removeListener(t,i),n(a)}function i(){"function"==typeof e.removeListener&&e.removeListener("error",r),a([].slice.call(arguments))}h(e,t,i,{once:!0}),"error"!==t&&function(e,t,a){"function"==typeof e.on&&h(e,"error",t,a)}(e,r,{once:!0})})},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var o=10;function s(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function u(e,t,a,n){var r,i,o,u;if(s(a),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,a.listener?a.listener:a),i=e._events),o=i[t]),void 0===o)o=i[t]=a,++e._eventsCount;else if("function"==typeof o?o=i[t]=n?[a,o]:[o,a]:n?o.unshift(a):o.push(a),(r=l(e))>0&&o.length>r&&!o.warned){o.warned=!0;var d=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");d.name="MaxListenersExceededWarning",d.emitter=e,d.type=t,d.count=o.length,u=d,console&&console.warn&&console.warn(u)}return e}function d(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,a){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:a},r=d.bind(n);return r.listener=a,n.wrapFn=r,r}function c(e,t,a){var n=e._events;if(void 0===n)return[];var r=n[t];return void 0===r?[]:"function"==typeof r?a?[r.listener||r]:[r]:a?function(e){for(var t=new Array(e.length),a=0;a<t.length;++a)t[a]=e[a].listener||e[a];return t}(r):f(r,r.length)}function g(e){var t=this._events;if(void 0!==t){var a=t[e];if("function"==typeof a)return 1;if(void 0!==a)return a.length}return 0}function f(e,t){for(var a=new Array(t),n=0;n<t;++n)a[n]=e[n];return a}function h(e,t,a,n){if("function"==typeof e.on)n.once?e.once(t,a):e.on(t,a);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,function r(i){n.once&&e.removeEventListener(t,r),a(i)})}}Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return o},set:function(e){if("number"!=typeof e||e<0||r(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");o=e}}),i.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},i.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||r(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},i.prototype.getMaxListeners=function(){return l(this)},i.prototype.emit=function(e){for(var t=[],a=1;a<arguments.length;a++)t.push(arguments[a]);var r="error"===e,i=this._events;if(void 0!==i)r=r&&void 0===i.error;else if(!r)return!1;if(r){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var s=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw s.context=o,s}var l=i[e];if(void 0===l)return!1;if("function"==typeof l)n(l,this,t);else{var u=l.length,d=f(l,u);for(a=0;a<u;++a)n(d[a],this,t)}return!0},i.prototype.addListener=function(e,t){return u(this,e,t,!1)},i.prototype.on=i.prototype.addListener,i.prototype.prependListener=function(e,t){return u(this,e,t,!0)},i.prototype.once=function(e,t){return s(t),this.on(e,p(this,e,t)),this},i.prototype.prependOnceListener=function(e,t){return s(t),this.prependListener(e,p(this,e,t)),this},i.prototype.removeListener=function(e,t){var a,n,r,i,o;if(s(t),void 0===(n=this._events))return this;if(void 0===(a=n[e]))return this;if(a===t||a.listener===t)0===--this._eventsCount?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,a.listener||t));else if("function"!=typeof a){for(r=-1,i=a.length-1;i>=0;i--)if(a[i]===t||a[i].listener===t){o=a[i].listener,r=i;break}if(r<0)return this;0===r?a.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(a,r),1===a.length&&(n[e]=a[0]),void 0!==n.removeListener&&this.emit("removeListener",e,o||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,a,n;if(void 0===(a=this._events))return this;if(void 0===a.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==a[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete a[e]),this;if(0===arguments.length){var r,i=Object.keys(a);for(n=0;n<i.length;++n)"removeListener"!==(r=i[n])&&this.removeAllListeners(r);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=a[e]))this.removeListener(e,t);else if(void 0!==t)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this},i.prototype.listeners=function(e){return c(this,e,!0)},i.prototype.rawListeners=function(e){return c(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):g.call(e,t)},i.prototype.listenerCount=g,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},38(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=s(a(942)),u=o(a(442)),d=s(a(971)),p=s(a(316)),c=s(a(881)),g=a(147),f=a(681),h=a(527);class P extends((0,p.default)(u.Component)){render(){const{tableId:e,currPage:t,pageStartIndex:a=d.default.PAGE_START_INDEX,showTotal:n=d.default.SHOW_TOTAL,dataSize:r,pageListRenderer:i=null,pageButtonRenderer:o=null,paginationTotalRenderer:s=d.default.PAGINATION_TOTAL,hidePageListOnlyOnePage:p=d.default.HIDE_PAGE_LIST_ONLY_ONE_PAGE,totalPages:c,lastPage:P,onPageChange:_,sizePerPageList:v=d.default.SIZE_PER_PAGE_LIST,currSizePerPage:m,hideSizePerPage:S=d.default.HIDE_SIZE_PER_PAGE,sizePerPageRenderer:b=null,sizePerPageOptionRenderer:T=null,onSizePerPageChange:E,bootstrap4:y=!1,disablePageTitle:O=!1,paginationSize:z=d.default.PAGINATION_SIZE,withFirstAndLast:x=d.default.With_FIRST_AND_LAST,alwaysShowAllBtns:R=d.default.SHOW_ALL_PAGE_BTNS,firstPageText:w=d.default.FIRST_PAGE_TEXT,prePageText:L=d.default.PRE_PAGE_TEXT,nextPageText:A=d.default.NEXT_PAGE_TEXT,lastPageText:C=d.default.LAST_PAGE_TEXT,nextPageTitle:I=d.default.NEXT_PAGE_TITLE,prePageTitle:D=d.default.PRE_PAGE_TITLE,firstPageTitle:j=d.default.FIRST_PAGE_TITLE,lastPageTitle:M=d.default.LAST_PAGE_TITLE,...N}=this.props,G=this.calculatePageStatus(this.calculatePages(c,P),P),B=(0,l.default)("react-bootstrap-table-pagination-list","col-md-6 col-xs-6 col-sm-6 col-lg-6",{"react-bootstrap-table-pagination-list-hidden":p&&1===c});return u.default.createElement("div",{className:"row react-bootstrap-table-pagination"},u.default.createElement("div",{className:"col-md-6 col-xs-6 col-sm-6 col-lg-6"},u.default.createElement(h.SizePerPageDropdownWithAdapter,{bootstrap4:y,tableId:e,sizePerPageList:v,currSizePerPage:m,hideSizePerPage:S,sizePerPageRenderer:b,sizePerPageOptionRenderer:T,onSizePerPageChange:E}),n?u.default.createElement(f.PaginationTotalWithAdapter,{currPage:t,currSizePerPage:m,pageStartIndex:a,dataSize:r,paginationTotalRenderer:s}):null),i?i({pages:G,onPageChange:_}):u.default.createElement("div",{className:B},u.default.createElement(g.PaginationListWithAdapter,{...N,currPage:t,currSizePerPage:m,pageStartIndex:a,lastPage:P,totalPages:c,pageButtonRenderer:o,onPageChange:_,paginationSize:z,withFirstAndLast:x,firstPageText:w,prePageText:L,nextPageText:A,lastPageText:C,alwaysShowAllBtns:R})))}}t.default=(0,c.default)(P)},147(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PaginationListWithAdapter=void 0;const l=o(a(442)),u=s(a(316)),d=s(a(285)),p=e=>class extends((0,u.default)(l.Component)){render(){const{lastPage:t,totalPages:a,pageButtonRenderer:n,onPageChange:r,disablePageTitle:i,hidePageListOnlyOnePage:o}=this.props,s=this.calculatePageStatus(this.calculatePages(a,t),t,i);return 1===a&&o?null:l.default.createElement(e,{pageButtonRenderer:n,onPageChange:r,pages:s})}};t.PaginationListWithAdapter=p(d.default),t.default=p},285(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(556)),i=n(a(442)),o=n(a(374)),s=e=>i.default.createElement("ul",{className:"pagination react-bootstrap-table-page-btns-ul"},e.pages.map(t=>e.pageButtonRenderer?i.default.cloneElement(e.pageButtonRenderer({...t,onPageChange:e.onPageChange}),{key:t.page}):i.default.createElement(o.default,{key:t.page,...t,onPageChange:e.onPageChange})));s.propTypes={pages:r.default.arrayOf(r.default.shape({page:r.default.oneOfType([r.default.node,r.default.number,r.default.string]),active:r.default.bool,disable:r.default.bool,title:r.default.string})).isRequired,onPageChange:r.default.func.isRequired,pageButtonRenderer:r.default.func},t.default=s},316(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(971));t.default=e=>class extends r.default.Component{backToPrevPage(){const{currPage:e,pageStartIndex:t}=this.props;return e-1<t?t:e-1}initialState(){const e=this.calculateTotalPage();return{totalPages:e,lastPage:this.calculateLastPage(e)}}calculateTotalPage(e=this.props.currSizePerPage,t=this.props.dataSize){return Math.ceil(t/e)}calculateLastPage(e){const{pageStartIndex:t}=this.props;return t+e-1}calculateFromTo(){const{dataSize:e,currPage:t,currSizePerPage:a,pageStartIndex:n}=this.props,r=Math.abs(i.default.PAGE_START_INDEX-n);let o=(t-n)*a;o=0===e?0:o+1;let s=Math.min(a*(t+r),e);return s>e&&(s=e),[o,s]}calculatePages(e,t){const{currPage:a,paginationSize:n,pageStartIndex:r,withFirstAndLast:i,firstPageText:o,prePageText:s,nextPageText:l,lastPageText:u,alwaysShowAllBtns:d}=this.props;let p=[],c=e;if(c<=0)return[];let g=Math.max(a-Math.floor(n/2),r);c=g+n-1,c>t&&(c=t,g=c-n+1),d&&(p=i?[o,s]:[s]),g!==r&&e>n&&i&&0===p.length?p=[o,s]:e>1&&0===p.length&&(p=[s]);for(let e=g;e<=c;e+=1)e>=r&&p.push(e);return(d||c<=t&&p.length>1)&&p.push(l),(c!==t&&i||i&&d)&&p.push(u),p}calculatePageStatus(e=[],t,a=!1){const{currPage:n,pageStartIndex:r,firstPageText:i,prePageText:o,nextPageText:s,lastPageText:l,alwaysShowAllBtns:u}=this.props,d=e=>n===r&&(e===i||e===o),p=e=>n===t&&(e===s||e===l);return e.filter(e=>!!u||!(d(e)||p(e))).map(e=>{let t;const r=e===n,u=d(e)||p(e);t=e===s?this.props.nextPageTitle:e===o?this.props.prePageTitle:e===i?this.props.firstPageTitle:e===l?this.props.lastPageTitle:`${e}`;const c={page:e,active:r,disabled:u,title:t};return a||(c.title=t),c})}calculateSizePerPageStatus(){const{sizePerPageList:e}=this.props;return e.map(e=>({text:`${void 0!==e.text?e.text:e}`,page:void 0!==e.value?e.value:e}))}}},320(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(556)),i=n(a(442)),o=n(a(971)),s=a(933),l=n(a(38)),u=n(a(973)),{Provider:d}=(0,u.default)(),p=i.default.createContext(null);class c extends d{constructor(){super(...arguments),this.isRemotePagination=()=>this.props.isRemotePagination(),this.renderDefaultPagination=()=>{if(!this.props.pagination.options.custom){const{page:e,sizePerPage:t,dataSize:a,...n}=this.getPaginationProps();return i.default.createElement(l.default,{...n,key:"pagination",dataSize:a||this.props.data.length,currPage:e,currSizePerPage:t})}return null}}componentDidUpdate(e){super.componentDidUpdate(e);const{currSizePerPage:t}=this,{custom:a,onPageChange:n}=e.pagination.options,r=void 0!==e.pagination.options.pageStartIndex?e.pagination.options.pageStartIndex:o.default.PAGE_START_INDEX;if(!this.isRemotePagination()&&!a){const a=(0,s.alignPage)(e.data.length,this.props.data.length,this.currPage,t,r);this.currPage!==a&&(n&&n(a,t),this.currPage=a)}e.onDataSizeChange&&e.data.length!==this.props.data.length&&e.onDataSizeChange({dataSize:this.props.data.length})}render(){const e=this.props.pagination.options,t=e.sizePerPage??this.currSizePerPage,a=void 0===e.pageStartIndex?o.default.PAGE_START_INDEX:e.pageStartIndex;let{data:n}=this.props,r=e.page??this.currPage;if(!this.isRemotePagination()&&n.length<=(r-1)*t){const e=Math.floor(n.length/t)+1;r=r>e?e:r,this.currPage=r}return this.isRemotePagination()&&(this.currPage=r),n=this.isRemotePagination()?n:(0,s.getByCurrPage)(n,r,t,a),i.default.createElement(p.Provider,{value:{data:n,setRemoteEmitter:this.setPaginationRemoteEmitter}},this.props.children,this.renderDefaultPagination())}}c.propTypes={data:r.default.array.isRequired,remoteEmitter:r.default.object.isRequired,isRemotePagination:r.default.func.isRequired},t.default=()=>({Provider:c,Consumer:p.Consumer})},374(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=s(a(942)),u=o(a(442));class d extends u.Component{constructor(e){super(e),this.handleClick=this.handleClick.bind(this)}handleClick(e){e.preventDefault(),this.props.onPageChange(this.props.page)}render(){const{page:e,title:t,active:a,disabled:n,className:r}=this.props,i=(0,l.default)({active:a,disabled:n,"page-item":!0},r);return u.default.createElement("li",{className:i,title:t},u.default.createElement("a",{href:"#",onClick:this.handleClick,className:"page-link"},e))}}t.default=d},429(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(881)),o=n(a(609)),s=n(a(527)),l=n(a(885));t.default=(0,l.default)((0,i.default)((0,s.default)(e=>r.default.createElement(o.default,{...e}))))},442(t){"use strict";t.exports=e},519(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(556)),i=n(a(442)),o=e=>e.paginationTotalRenderer?e.paginationTotalRenderer(e.from,e.to,e.dataSize):i.default.createElement("span",{className:"react-bootstrap-table-pagination-total"}," Showing rows ",e.from," to ",e.to," of ",e.dataSize);o.propTypes={from:r.default.number.isRequired,to:r.default.number.isRequired,dataSize:r.default.number.isRequired,paginationTotalRenderer:r.default.func},t.default=o},527(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SizePerPageDropdownWithAdapter=void 0;const l=o(a(442)),u=s(a(316)),d=s(a(609)),p=e=>class extends((0,u.default)(l.Component)){constructor(e){super(e),this.state={dropdownOpen:!1},this.closeDropDown=this.closeDropDown.bind(this),this.toggleDropDown=this.toggleDropDown.bind(this),this.handleChangeSizePerPage=this.handleChangeSizePerPage.bind(this),this.state={dropdownOpen:!1}}toggleDropDown(){const e=!this.state.dropdownOpen;this.setState(()=>({dropdownOpen:e}))}closeDropDown(){this.setState(()=>({dropdownOpen:!1}))}handleChangeSizePerPage(e){this.props.onSizePerPageChange(e),this.closeDropDown()}render(){const{tableId:t,bootstrap4:a,sizePerPageList:n,currSizePerPage:r,hideSizePerPage:i,sizePerPageRenderer:o,sizePerPageOptionRenderer:s}=this.props,{dropdownOpen:u}=this.state;return n.length>1&&!i?o?o({options:this.calculateSizePerPageStatus(),currSizePerPage:`${r}`,onSizePerPageChange:this.handleChangeSizePerPage}):l.default.createElement(e,{...this.props,currSizePerPage:`${r}`,options:this.calculateSizePerPageStatus(),optionRenderer:s,onSizePerPageChange:this.handleChangeSizePerPage,onClick:this.toggleDropDown,onBlur:this.closeDropDown,open:u,tableId:t,bootstrap4:a}):null}};t.SizePerPageDropdownWithAdapter=p(d.default),t.default=p},556(e,t,a){e.exports=a(694)()},609(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(942)),i=n(a(556)),o=n(a(442)),s=n(a(869)),l={open:!1,hidden:!1,btnContextual:"btn-default btn-secondary",variation:"dropdown",className:"",optionRenderer:null,bootstrap4:!1,tableId:null},u=e=>{const{open:t,tableId:a,hidden:n,onClick:i,onBlur:u,options:d,className:p,variation:c,bootstrap4:g,btnContextual:f,optionRenderer:h,currSizePerPage:P,onSizePerPageChange:_}={...l,...e},v=t?"open show":"",m=(0,r.default)(v,"react-bs-table-sizePerPage-dropdown",c,p),S=a?`${a}-pageDropDown`:"pageDropDown";return o.default.createElement("span",{style:{visibility:n?"hidden":"visible"},className:m,"data-testid":"size-per-page-dropdown"},o.default.createElement("button",{id:S,type:"button",className:`btn ${f} dropdown-toggle`,"data-toggle":"dropdown","aria-expanded":t,onClick:i,onBlur:u},P," ",g?null:o.default.createElement("span",null,o.default.createElement("span",{className:"caret"}))),o.default.createElement("ul",{className:`dropdown-menu ${v}`,role:"menu","aria-labelledby":S},d.map(e=>h?h({...e,onSizePerPageChange:_}):o.default.createElement(s.default,{...e,key:e.text,bootstrap4:g,onSizePerPageChange:_}))))};u.propTypes={currSizePerPage:i.default.string.isRequired,options:i.default.array.isRequired,onClick:i.default.func.isRequired,onBlur:i.default.func.isRequired,onSizePerPageChange:i.default.func.isRequired,bootstrap4:i.default.bool,tableId:i.default.string,open:i.default.bool,hidden:i.default.bool,btnContextual:i.default.string,variation:i.default.oneOf(["dropdown","dropup"]),className:i.default.string,optionRenderer:i.default.func},t.default=u},657(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(881)),o=n(a(285)),s=n(a(147)),l=n(a(885));t.default=(0,l.default)((0,i.default)((0,s.default)(e=>r.default.createElement(o.default,{...e}))))},681(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PaginationTotalWithAdapter=void 0;const l=o(a(442)),u=s(a(316)),d=s(a(519)),p=e=>class extends((0,u.default)(l.Component)){render(){const[t,a]=this.calculateFromTo();return l.default.createElement(e,{from:t,to:a,dataSize:this.props.dataSize,paginationTotalRenderer:this.props.paginationTotalRenderer})}};t.PaginationTotalWithAdapter=p(d.default),t.default=p},694(e,t,a){"use strict";var n=a(925);function r(){}function i(){}i.resetWarningCache=r,e.exports=function(){function e(e,t,a,r,i,o){if(o!==n){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var a={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:r};return a.PropTypes=a,a}},869(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(556)),i=n(a(442)),o=({text:e,page:t,onSizePerPageChange:a,bootstrap4:n=!1})=>n?i.default.createElement("a",{href:"#",tabIndex:-1,role:"menuitem",className:"dropdown-item","data-page":t,onMouseDown:e=>{e.preventDefault(),a(t)}},e):i.default.createElement("li",{key:e,role:"presentation",className:"dropdown-item"},i.default.createElement("a",{href:"#",tabIndex:-1,role:"menuitem","data-page":t,onMouseDown:e=>{e.preventDefault(),a(t)}},e));o.propTypes={text:r.default.string.isRequired,page:r.default.number.isRequired,onSizePerPageChange:r.default.func.isRequired,bootstrap4:r.default.bool},t.default=o},881(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=o(a(442)),u=s(a(316));t.default=e=>class extends((0,u.default)(l.Component)){constructor(e){super(e),this.handleChangePage=this.handleChangePage.bind(this),this.handleChangeSizePerPage=this.handleChangeSizePerPage.bind(this),this.state=this.initialState()}componentDidUpdate(e){const{currSizePerPage:t,dataSize:a,totalSize:n}=e;let r=0;t!==this.props.currSizePerPage||a!==this.props.dataSize||n!==this.props.totalSize?t!==this.props.currSizePerPage?r=this.calculateTotalPage(this.props.currSizePerPage,this.props.totalSize??this.props.dataSize):a!==this.props.dataSize?r=this.calculateTotalPage(this.props.currSizePerPage,this.props.dataSize):n!==this.props.totalSize&&(r=this.calculateTotalPage(this.props.currSizePerPage,this.props.totalSize)):r=this.calculateTotalPage(this.props.currSizePerPage,this.props.dataSize);const i=this.calculateLastPage(r);r===this.state.totalPages&&i===this.state.lastPage||this.setState({totalPages:r,lastPage:i})}handleChangeSizePerPage(e){const{currSizePerPage:t,onSizePerPageChange:a}=this.props,n="string"==typeof e?parseInt(e,10):e;let{currPage:r}=this.props;if(n!==t){const e=this.calculateTotalPage(n),t=this.calculateLastPage(e);r>t&&(r=t),a(n,r)}}handleChangePage(e){let t;const{currPage:a,pageStartIndex:n,prePageText:r,nextPageText:i,lastPageText:o,firstPageText:s,onPageChange:l}=this.props,{lastPage:u}=this.state;t=e===r?this.backToPrevPage():e===i?a+1>u?u:a+1:e===o?u:e===s?n:parseInt(e,10),t!==a&&l(t)}render(){return l.default.createElement(e,{...this.props,lastPage:this.state.lastPage,totalPages:this.state.totalPages,onPageChange:this.handleChangePage,onSizePerPageChange:this.handleChangeSizePerPage})}}},885(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442));t.default=e=>({page:t,sizePerPage:a,...n})=>r.default.createElement(e,{...n,currPage:t,currSizePerPage:a})},925(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},933(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getByCurrPage=t.alignPage=void 0;const r=n(a(971)),i=(e,t,a)=>((e,t)=>e+Math.abs(1-t))(e,a)*t-1;t.alignPage=(e,t,a,n,i)=>t<e?a:a<i||e<=0?i:a>=Math.floor(e/n)+i&&1===i?Math.ceil(e/n):a>=Math.floor(e/n)&&0===i?Math.ceil(e/n)-Math.abs(r.default.PAGE_START_INDEX-i):a,t.getByCurrPage=(e,t,a,n)=>{const r=e.length;if(!r)return[];const o=i(t,a,n),s=((e,t)=>e-(t-1))(o,a),l=[];for(let t=s;t<=o&&(l.push(e[t]),t+1!==r);t+=1);return l}},942(e,t){var a;!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e="",t=0;t<arguments.length;t++){var a=arguments[t];a&&(e=o(e,i(a)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return r.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var a in e)n.call(e,a)&&e[a]&&(t=o(t,a));return t}function o(e,t){return t?e?e+" "+t:e+t:e}e.exports?(r.default=r,e.exports=r):void 0===(a=function(){return r}.apply(t,[]))||(e.exports=a)}()},971(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={PAGINATION_SIZE:5,PAGE_START_INDEX:1,With_FIRST_AND_LAST:!0,SHOW_ALL_PAGE_BTNS:!1,SHOW_TOTAL:!1,PAGINATION_TOTAL:null,FIRST_PAGE_TEXT:"<<",PRE_PAGE_TEXT:"<",NEXT_PAGE_TEXT:">",LAST_PAGE_TEXT:">>",NEXT_PAGE_TITLE:"next page",LAST_PAGE_TITLE:"last page",PRE_PAGE_TITLE:"previous page",FIRST_PAGE_TITLE:"first page",SIZE_PER_PAGE_LIST:[10,25,30,50],HIDE_SIZE_PER_PAGE:!1,HIDE_PAGE_LIST_ONLY_ONE_PAGE:!1}},973(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(7)),i=n(a(442)),o=n(a(971)),s=a(933),l=i.default.createContext(null);class u extends i.default.Component{constructor(e){let t,a;super(e),this.getPaginationProps=()=>{const{bootstrap4:e,tableId:t}=this.props,a=this.props.pagination.options,{currPage:n,currSizePerPage:r}=this;let i;i=this.isRemotePagination()?a.totalSize:this.dataSize;const s=void 0===a.withFirstAndLast?o.default.With_FIRST_AND_LAST:a.withFirstAndLast,l=void 0===a.alwaysShowAllBtns?o.default.SHOW_ALL_PAGE_BTNS:a.alwaysShowAllBtns,u=void 0===a.hideSizePerPage?o.default.HIDE_SIZE_PER_PAGE:a.hideSizePerPage,d=void 0===a.hidePageListOnlyOnePage?o.default.HIDE_PAGE_LIST_ONLY_ONE_PAGE:a.hidePageListOnlyOnePage,p=void 0===a.pageStartIndex?o.default.PAGE_START_INDEX:a.pageStartIndex;return{...a,bootstrap4:e,tableId:t,page:n,sizePerPage:r,pageStartIndex:p,hidePageListOnlyOnePage:d,hideSizePerPage:u,alwaysShowAllBtns:l,withFirstAndLast:s,dataSize:i,sizePerPageList:a.sizePerPageList||o.default.SIZE_PER_PAGE_LIST,paginationSize:a.paginationSize||o.default.PAGINATION_SIZE,showTotal:a.showTotal,pageListRenderer:a.pageListRenderer,pageButtonRenderer:a.pageButtonRenderer,sizePerPageRenderer:a.sizePerPageRenderer,paginationTotalRenderer:a.paginationTotalRenderer,sizePerPageOptionRenderer:a.sizePerPageOptionRenderer,firstPageText:a.firstPageText||o.default.FIRST_PAGE_TEXT,prePageText:a.prePageText||o.default.PRE_PAGE_TEXT,nextPageText:a.nextPageText||o.default.NEXT_PAGE_TEXT,lastPageText:a.lastPageText||o.default.LAST_PAGE_TEXT,prePageTitle:a.prePageTitle||o.default.PRE_PAGE_TITLE,nextPageTitle:a.nextPageTitle||o.default.NEXT_PAGE_TITLE,firstPageTitle:a.firstPageTitle||o.default.FIRST_PAGE_TITLE,lastPageTitle:a.lastPageTitle||o.default.LAST_PAGE_TITLE,onPageChange:this.handleChangePage,onSizePerPageChange:this.handleChangeSizePerPage}},this.setPaginationRemoteEmitter=e=>{this.remoteEmitter=e},this.getPaginationRemoteEmitter=()=>this.remoteEmitter||this.props.remoteEmitter,this.isRemotePagination=()=>{const e={result:void 0};return this.remoteEmitter?.emit("isRemotePagination",e),e.result},this.handleChangePage=this.handleChangePage.bind(this),this.handleDataSizeChange=this.handleDataSizeChange.bind(this),this.handleChangeSizePerPage=this.handleChangeSizePerPage.bind(this);const n=e.pagination.options,i=n.sizePerPageList||o.default.SIZE_PER_PAGE_LIST;t=void 0!==n.page?n.page:void 0!==n.pageStartIndex?n.pageStartIndex:o.default.PAGE_START_INDEX,a=void 0!==n.sizePerPage?n.sizePerPage:"object"==typeof i[0]?i[0].value:i[0],this.currPage=t,this.dataSize=n.totalSize,this.currSizePerPage=a,this.dataChangeListener=new r.default,this.dataChangeListener.on("filterChanged",this.handleDataSizeChange)}componentDidUpdate(e){const{custom:t}=e.pagination.options;(this.isRemotePagination()||t)&&(e.pagination.options.page,e.pagination.options.sizePerPage,e.pagination.options.totalSize)}handleDataSizeChange(e){const t=this.props.pagination.options,a=void 0===t.pageStartIndex?o.default.PAGE_START_INDEX:t.pageStartIndex;this.currPage=(0,s.alignPage)(e,this.dataSize,this.currPage,this.currSizePerPage,a),this.dataSize=e,this.forceUpdate()}handleChangePage(e){const{currSizePerPage:t}=this,a=this.props.pagination.options;a.onPageChange&&a.onPageChange(e,t),this.currPage=e,this.isRemotePagination()?this.getPaginationRemoteEmitter().emit("paginationChange",e,t):this.forceUpdate()}handleChangeSizePerPage(e,t){const a=this.props.pagination.options;a.onSizePerPageChange&&a.onSizePerPageChange(e,t),this.currPage=t,this.currSizePerPage=e,this.isRemotePagination()?this.getPaginationRemoteEmitter().emit("paginationChange",t,e):this.forceUpdate()}render(){const e=this.getPaginationProps(),t={...this.props.pagination,options:e};return i.default.createElement(l.Provider,{value:{paginationProps:e,paginationTableProps:{pagination:t,setPaginationRemoteEmitter:this.setPaginationRemoteEmitter,dataChangeListener:this.dataChangeListener}}},this.props.children)}}t.default=()=>({Provider:u,Consumer:l.Consumer})},987(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SizePerPageDropdownStandalone=t.PaginationTotalStandalone=t.PaginationListStandalone=t.PaginationProvider=void 0;const r=n(a(556)),i=n(a(442)),o=n(a(320)),s=n(a(657));t.PaginationListStandalone=s.default;const l=n(a(991));t.PaginationTotalStandalone=l.default;const u=n(a(429));t.SizePerPageDropdownStandalone=u.default;const d=n(a(973));t.default=(e={})=>({createContext:o.default,options:e});const{Provider:p,Consumer:c}=(0,d.default)(),g=e=>i.default.createElement(p,{...e},i.default.createElement(c,null,t=>e.children(t)));g.propTypes={children:r.default.func.isRequired},t.PaginationProvider=g},991(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(519)),o=n(a(681)),s=n(a(885));t.default=(0,s.default)((0,o.default)(e=>r.default.createElement(i.default,{...e})))}},a={},function e(n){var r=a[n];if(void 0!==r)return r.exports;var i=a[n]={exports:{}};return t[n].call(i.exports,i,i.exports,e),i.exports}(987);var t,a});
3
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3IuanMiLCJtYXBwaW5ncyI6IjtDQUFBLFNBQTJDQSxFQUFNQyxHQUMxQixpQkFBWkMsU0FBMEMsaUJBQVhDLE9BQ3hDQSxPQUFPRCxRQUFVRCxFQUFRRyxRQUFRLFVBQ1IsbUJBQVhDLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxDQUFDLFNBQVVKLEdBQ1EsaUJBQVpDLFFBQ2RBLFFBQXdDLCtCQUFJRCxFQUFRRyxRQUFRLFVBRTVESixFQUFxQywrQkFBSUMsRUFBUUQsRUFBWSxNQUM5RCxDQVRELENBU0dPLEtBQU9DLElBQ1YsTyxxQkNhQSxJQU9JQyxFQVBBQyxFQUF1QixpQkFBWkMsUUFBdUJBLFFBQVUsS0FDNUNDLEVBQWVGLEdBQXdCLG1CQUFaQSxFQUFFRyxNQUM3QkgsRUFBRUcsTUFDRixTQUFzQkMsRUFBUUMsRUFBVUMsR0FDeEMsT0FBT0MsU0FBU0MsVUFBVUwsTUFBTU0sS0FBS0wsRUFBUUMsRUFBVUMsRUFDekQsRUFJQVAsRUFERUMsR0FBMEIsbUJBQWRBLEVBQUVVLFFBQ0NWLEVBQUVVLFFBQ1ZDLE9BQU9DLHNCQUNDLFNBQXdCUixHQUN2QyxPQUFPTyxPQUFPRSxvQkFBb0JULEdBQy9CVSxPQUFPSCxPQUFPQyxzQkFBc0JSLEdBQ3pDLEVBRWlCLFNBQXdCQSxHQUN2QyxPQUFPTyxPQUFPRSxvQkFBb0JULEVBQ3BDLEVBT0YsSUFBSVcsRUFBY0MsT0FBT0MsT0FBUyxTQUFxQkMsR0FDckQsT0FBT0EsR0FBVUEsQ0FDbkIsRUFFQSxTQUFTQyxJQUNQQSxFQUFhQyxLQUFLWCxLQUFLWSxLQUN6QixDQUNBNUIsRUFBT0QsUUFBVTJCLEVBQ2pCMUIsRUFBT0QsUUFBUThCLEtBd1lmLFNBQWNDLEVBQVNDLEdBQ3JCLE9BQU8sSUFBSUMsUUFBUSxTQUFVQyxFQUFTQyxHQUNwQyxTQUFTQyxFQUFjQyxHQUNyQk4sRUFBUU8s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LEVBQXFCN0osVUFBWSxDQUMvQjJELFNBQVUsVUFBVS9DLEtBQUtELFlBR2QsRUFBQW1KLG1CQUFxQkQsQywrSkNwRWxDLGtCQUNBLFlBQ0EsWUFDQSxZQU1BLFdBQWUsY0FDYixhQUxpQzdLLEdBQ2pDLHdCQUFDLFVBQWUsSUFBS0EsSyxHQ0xuQitLLEVBQTJCLENBQUMsRUFHaEMsU0FBU0MsRUFBb0JDLEdBRTVCLElBQUlDLEVBQWVILEVBQXlCRSxHQUM1QyxRQUFxQnhULElBQWpCeVQsRUFDSCxPQUFPQSxFQUFhelcsUUFHckIsSUFBSUMsRUFBU3FXLEVBQXlCRSxHQUFZLENBR2pEeFcsUUFBUyxDQUFDLEdBT1gsT0FIQTBXLEVBQW9CRixHQUFVdlYsS0FBS2hCLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVN1VyxHQUdwRXRXLEVBQU9ELE9BQ2YsQ0NuQjBCdVcsQ0FBb0IsSyxNREYxQ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24tbGlzdC1hZGFwdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLWxpc3QudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2UtcmVzb2x2ZXIudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvZGF0YS1jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdlLWJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc2l6ZS1wZXItcGFnZS1kcm9wZG93bi1zdGFuZGFsb25lLnRzeCIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgdW1kIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi10b3RhbC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc2l6ZS1wZXItcGFnZS1kcm9wZG93bi1hZGFwdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9zaXplLXBlci1wYWdlLWRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLWxpc3Qtc3RhbmRhbG9uZS50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi10b3RhbC1hZGFwdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc2l6ZS1wZXItcGFnZS1vcHRpb24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24taGFuZGxlci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc3RhbmRhbG9uZS1hZGFwdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnZS50cyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9jb25zdC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9zdGF0ZS1jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL2luZGV4LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLXRvdGFsLXN0YW5kYWxvbmUudHN4Iiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcInJlYWN0XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ1BhZ2luYXRvclwiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSZWFjdEJvb3RzdHJhcFRhYmxlTmdQYWdpbmF0b3JcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSk7XG59KShzZWxmLCAoX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18pID0+IHtcbnJldHVybiAiLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGVycikge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCByZXNvbHZlcik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgZXJyb3JMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGhhbmRsZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCAnZXJyb3InLCBoYW5kbGVyLCBmbGFncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIGxpc3RlbmVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgZW1pdHRlci5vbmNlKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBFdmVudFRhcmdldCBkb2VzIG5vdCBoYXZlIGBlcnJvcmAgZXZlbnQgc2VtYW50aWNzIGxpa2UgTm9kZVxuICAgIC8vIEV2ZW50RW1pdHRlcnMsIHdlIGRvIG5vdCBsaXN0ZW4gZm9yIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgYnVpbHRpbiBgeyBvbmNlOiB0cnVlIH1gIHN1cHBvcnQgc28gd2VcbiAgICAgIC8vIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuXG4gICAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW1pdHRlclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBlbWl0dGVyKTtcbiAgfVxufVxuIiwiLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IGFycm93LWJvZHktc3R5bGU6IDAgKi9cbmltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IENvbnN0IGZyb20gXCIuL2NvbnN0XCI7XG5pbXBvcnQgcGFnZVJlc29sdmVyIGZyb20gXCIuL3BhZ2UtcmVzb2x2ZXJcIjtcbmltcG9ydCBwYWdpbmF0aW9uSGFuZGxlciBmcm9tIFwiLi9wYWdpbmF0aW9uLWhhbmRsZXJcIjtcbmltcG9ydCB7IFBhZ2luYXRpb25MaXN0V2l0aEFkYXB0ZXIgfSBmcm9tIFwiLi9wYWdpbmF0aW9uLWxpc3QtYWRhcHRlclwiO1xuaW1wb3J0IHsgUGFnaW5hdGlvblRvdGFsV2l0aEFkYXB0ZXIgfSBmcm9tIFwiLi9wYWdpbmF0aW9uLXRvdGFsLWFkYXB0ZXJcIjtcbmltcG9ydCB7IFNpemVQZXJQYWdlRHJvcGRvd25XaXRoQWRhcHRlciB9IGZyb20gXCIuL3NpemUtcGVyLXBhZ2UtZHJvcGRvd24tYWRhcHRlclwiO1xuXG5jbGFzcyBQYWdpbmF0aW9uIGV4dGVuZHMgcGFnZVJlc29sdmVyKENvbXBvbmVudCkge1xuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgdGFibGVJZCxcbiAgICAgIGN1cnJQYWdlLFxuICAgICAgcGFnZVN0YXJ0SW5kZXggPSBDb25zdC5QQUdFX1NUQVJUX0lOREVYLFxuICAgICAgc2hvd1RvdGFsID0gQ29uc3QuU0hPV19UT1RBTCxcbiAgICAgIGRhdGFTaXplLFxuICAgICAgcGFnZUxpc3RSZW5kZXJlciA9IG51bGwsXG4gICAgICBwYWdlQnV0dG9uUmVuZGVyZXIgPSBudWxsLFxuICAgICAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXIgPSBDb25zdC5QQUdJTkFUSU9OX1RPVEFMLFxuICAgICAgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UgPSBDb25zdC5ISURFX1BBR0VfTElTVF9PTkxZX09ORV9QQUdFLFxuICAgICAgdG90YWxQYWdlcyxcbiAgICAgIGxhc3RQYWdlLFxuICAgICAgb25QYWdlQ2hhbmdlLFxuICAgICAgc2l6ZVBlclBhZ2VMaXN0ID0gQ29uc3QuU0laRV9QRVJfUEFHRV9MSVNULFxuICAgICAgY3VyclNpemVQZXJQYWdlLFxuICAgICAgaGlkZVNpemVQZXJQYWdlID0gQ29uc3QuSElERV9TSVpFX1BFUl9QQUdFLFxuICAgICAgc2l6ZVBlclBhZ2VSZW5kZXJlciA9IG51bGwsXG4gICAgICBzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyID0gbnVsbCxcbiAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2UsXG4gICAgICBib290c3RyYXA0ID0gZmFsc2UsXG4gICAgICBkaXNhYmxlUGFnZVRpdGxlID0gZmFsc2UsXG4gICAgICBwYWdpbmF0aW9uU2l6ZSA9IENvbnN0LlBBR0lOQVRJT05fU0laRSxcbiAgICAgIHdpdGhGaXJzdEFuZExhc3QgPSBDb25zdC5XaXRoX0ZJUlNUX0FORF9MQVNULFxuICAgICAgYWx3YXlzU2hvd0FsbEJ0bnMgPSBDb25zdC5TSE9XX0FMTF9QQUdFX0JUTlMsXG4gICAgICBmaXJzdFBhZ2VUZXh0ID0gQ29uc3QuRklSU1RfUEFHRV9URVhULFxuICAgICAgcHJlUGFnZVRleHQgPSBDb25zdC5QUkVfUEFHRV9URVhULFxuICAgICAgbmV4dFBhZ2VUZXh0ID0gQ29uc3QuTkVYVF9QQUdFX1RFWFQsXG4gICAgICBsYXN0UGFnZVRleHQgPSBDb25zdC5MQVNUX1BBR0VfVEVYVCxcbiAgICAgIG5leHRQYWdlVGl0bGUgPSBDb25zdC5ORVhUX1BBR0VfVElUTEUsXG4gICAgICBwcmVQYWdlVGl0bGUgPSBDb25zdC5QUkVfUEFHRV9USVRMRSxcbiAgICAgIGZpcnN0UGFnZVRpdGxlID0gQ29uc3QuRklSU1RfUEFHRV9USVRMRSxcbiAgICAgIGxhc3RQYWdlVGl0bGUgPSBDb25zdC5MQVNUX1BBR0VfVElUTEUsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBwYWdlcyA9IHRoaXMuY2FsY3VsYXRlUGFnZVN0YXR1cyhcbiAgICAgIHRoaXMuY2FsY3VsYXRlUGFnZXModG90YWxQYWdlcywgbGFzdFBhZ2UpLFxuICAgICAgbGFzdFBhZ2VcbiAgICApO1xuICAgIGNvbnN0IHBhZ2VMaXN0Q2xhc3MgPSBjcyhcbiAgICAgIFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLXBhZ2luYXRpb24tbGlzdFwiLFxuICAgICAgXCJjb2wtbWQtNiBjb2wteHMtNiBjb2wtc20tNiBjb2wtbGctNlwiLFxuICAgICAge1xuICAgICAgICBcInJlYWN0LWJvb3RzdHJhcC10YWJsZS1wYWdpbmF0aW9uLWxpc3QtaGlkZGVuXCI6XG4gICAgICAgICAgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UgJiYgdG90YWxQYWdlcyA9PT0gMSxcbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvdyByZWFjdC1ib290c3RyYXAtdGFibGUtcGFnaW5hdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC02IGNvbC14cy02IGNvbC1zbS02IGNvbC1sZy02XCI+XG4gICAgICAgICAgPFNpemVQZXJQYWdlRHJvcGRvd25XaXRoQWRhcHRlclxuICAgICAgICAgICAgYm9vdHN0cmFwND17Ym9vdHN0cmFwNH1cbiAgICAgICAgICAgIHRhYmxlSWQ9e3RhYmxlSWR9XG4gICAgICAgICAgICBzaXplUGVyUGFnZUxpc3Q9e3NpemVQZXJQYWdlTGlzdH1cbiAgICAgICAgICAgIGN1cnJTaXplUGVyUGFnZT17Y3VyclNpemVQZXJQYWdlfVxuICAgICAgICAgICAgaGlkZVNpemVQZXJQYWdlPXtoaWRlU2l6ZVBlclBhZ2V9XG4gICAgICAgICAgICBzaXplUGVyUGFnZVJlbmRlcmVyPXtzaXplUGVyUGFnZVJlbmRlcmVyfVxuICAgICAgICAgICAgc2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcj17c2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcn1cbiAgICAgICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2U9e29uU2l6ZVBlclBhZ2VDaGFuZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7c2hvd1RvdGFsID8gKFxuICAgICAgICAgICAgPFBhZ2luYXRpb25Ub3RhbFdpdGhBZGFwdGVyXG4gICAgICAgICAgICAgIGN1cnJQYWdlPXtjdXJyUGFnZX1cbiAgICAgICAgICAgICAgY3VyclNpemVQZXJQYWdlPXtjdXJyU2l6ZVBlclBhZ2V9XG4gICAgICAgICAgICAgIHBhZ2VTdGFydEluZGV4PXtwYWdlU3RhcnRJbmRleH1cbiAgICAgICAgICAgICAgZGF0YVNpemU9e2RhdGFTaXplfVxuICAgICAgICAgICAgICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlcj17cGFnaW5hdGlvblRvdGFsUmVuZGVyZXJ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3BhZ2VMaXN0UmVuZGVyZXIgPyAoXG4gICAgICAgICAgcGFnZUxpc3RSZW5kZXJlcih7XG4gICAgICAgICAgICBwYWdlcyxcbiAgICAgICAgICAgIG9uUGFnZUNoYW5nZSxcbiAgICAgICAgICB9KVxuICAgICAgICApIDogKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtwYWdlTGlzdENsYXNzfT5cbiAgICAgICAgICAgIDxQYWdpbmF0aW9uTGlzdFdpdGhBZGFwdGVyXG4gICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICBjdXJyUGFnZT17Y3VyclBhZ2V9XG4gICAgICAgICAgICAgIGN1cnJTaXplUGVyUGFnZT17Y3VyclNpemVQZXJQYWdlfVxuICAgICAgICAgICAgICBwYWdlU3RhcnRJbmRleD17cGFnZVN0YXJ0SW5kZXh9XG4gICAgICAgICAgICAgIGxhc3RQYWdlPXtsYXN0UGFnZX1cbiAgICAgICAgICAgICAgdG90YWxQYWdlcz17dG90YWxQYWdlc31cbiAgICAgICAgICAgICAgcGFnZUJ1dHRvblJlbmRlcmVyPXtwYWdlQnV0dG9uUmVuZGVyZXJ9XG4gICAgICAgICAgICAgIG9uUGFnZUNoYW5nZT17b25QYWdlQ2hhbmdlfVxuICAgICAgICAgICAgICBwYWdpbmF0aW9uU2l6ZT17cGFnaW5hdGlvblNpemV9XG4gICAgICAgICAgICAgIHdpdGhGaXJzdEFuZExhc3Q9e3dpdGhGaXJzdEFuZExhc3R9XG4gICAgICAgICAgICAgIGZpcnN0UGFnZVRleHQ9e2ZpcnN0UGFnZVRleHR9XG4gICAgICAgICAgICAgIHByZVBhZ2VUZXh0PXtwcmVQYWdlVGV4dH1cbiAgICAgICAgICAgICAgbmV4dFBhZ2VUZXh0PXtuZXh0UGFnZVRleHR9XG4gICAgICAgICAgICAgIGxhc3RQYWdlVGV4dD17bGFzdFBhZ2VUZXh0fVxuICAgICAgICAgICAgICBhbHdheXNTaG93QWxsQnRucz17YWx3YXlzU2hvd0FsbEJ0bnN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG4vLyBQYWdpbmF0aW9uLnByb3BUeXBlcyA9IHtcbi8vICAgZGF0YVNpemU6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbi8vICAgc2l6ZVBlclBhZ2VMaXN0OiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbi8vICAgY3VyclBhZ2U6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbi8vICAgY3VyclNpemVQZXJQYWdlOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4vLyAgIG9uUGFnZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbi8vICAgb25TaXplUGVyUGFnZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbi8vICAgZGlzYWJsZVBhZ2VUaXRsZTogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIHBhZ2VTdGFydEluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuLy8gICBwYWdpbmF0aW9uU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcbi8vICAgc2hvd1RvdGFsOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgcGFnZUxpc3RSZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG4vLyAgIHBhZ2VCdXR0b25SZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG4vLyAgIHNpemVQZXJQYWdlUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuLy8gICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG4vLyAgIHNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuLy8gICBmaXJzdFBhZ2VUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubm9kZV0pLFxuLy8gICBwcmVQYWdlVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm5vZGVdKSxcbi8vICAgbmV4dFBhZ2VUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubm9kZV0pLFxuLy8gICBsYXN0UGFnZVRleHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5ub2RlXSksXG4vLyAgIG5leHRQYWdlVGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHByZVBhZ2VUaXRsZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZmlyc3RQYWdlVGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGxhc3RQYWdlVGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHdpdGhGaXJzdEFuZExhc3Q6IFByb3BUeXBlcy5ib29sLFxuLy8gICBhbHdheXNTaG93QWxsQnRuczogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGhpZGVTaXplUGVyUGFnZTogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgYm9vdHN0cmFwNDogUHJvcFR5cGVzLmJvb2wsXG4vLyB9O1xuXG4vLyBQYWdpbmF0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgZGlzYWJsZVBhZ2VUaXRsZTogZmFsc2UsXG4vLyAgIGJvb3RzdHJhcDQ6IGZhbHNlLFxuLy8gICBwYWdlU3RhcnRJbmRleDogQ29uc3QuUEFHRV9TVEFSVF9JTkRFWCxcbi8vICAgcGFnaW5hdGlvblNpemU6IENvbnN0LlBBR0lOQVRJT05fU0laRSxcbi8vICAgd2l0aEZpcnN0QW5kTGFzdDogQ29uc3QuV2l0aF9GSVJTVF9BTkRfTEFTVCxcbi8vICAgYWx3YXlzU2hvd0FsbEJ0bnM6IENvbnN0LlNIT1dfQUxMX1BBR0VfQlROUyxcbi8vICAgc2hvd1RvdGFsOiBDb25zdC5TSE9XX1RPVEFMLFxuLy8gICBwYWdlTGlzdFJlbmRlcmVyOiBudWxsLFxuLy8gICBwYWdlQnV0dG9uUmVuZGVyZXI6IG51bGwsXG4vLyAgIHNpemVQZXJQYWdlUmVuZGVyZXI6IG51bGwsXG4vLyAgIHBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyOiBDb25zdC5QQUdJTkFUSU9OX1RPVEFMLFxuLy8gICBzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyOiBudWxsLFxuLy8gICBmaXJzdFBhZ2VUZXh0OiBDb25zdC5GSVJTVF9QQUdFX1RFWFQsXG4vLyAgIHByZVBhZ2VUZXh0OiBDb25zdC5QUkVfUEFHRV9URVhULFxuLy8gICBuZXh0UGFnZVRleHQ6IENvbnN0Lk5FWFRfUEFHRV9URVhULFxuLy8gICBsYXN0UGFnZVRleHQ6IENvbnN0LkxBU1RfUEFHRV9URVhULFxuLy8gICBzaXplUGVyUGFnZUxpc3Q6IENvbnN0LlNJWkVfUEVSX1BBR0VfTElTVCxcbi8vICAgbmV4dFBhZ2VUaXRsZTogQ29uc3QuTkVYVF9QQUdFX1RJVExFLFxuLy8gICBwcmVQYWdlVGl0bGU6IENvbnN0LlBSRV9QQUdFX1RJVExFLFxuLy8gICBmaXJzdFBhZ2VUaXRsZTogQ29uc3QuRklSU1RfUEFHRV9USVRMRSxcbi8vICAgbGFzdFBhZ2VUaXRsZTogQ29uc3QuTEFTVF9QQUdFX1RJVExFLFxuLy8gICBoaWRlU2l6ZVBlclBhZ2U6IENvbnN0LkhJREVfU0laRV9QRVJfUEFHRSxcbi8vICAgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2U6IENvbnN0LkhJREVfUEFHRV9MSVNUX09OTFlfT05FX1BBR0UsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBwYWdpbmF0aW9uSGFuZGxlcihQYWdpbmF0aW9uKTtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBwYWdlUmVzb2x2ZXIgZnJvbSBcIi4vcGFnZS1yZXNvbHZlclwiO1xuaW1wb3J0IFBhZ2luYXRpb25MaXN0IGZyb20gXCIuL3BhZ2luYXRpb24tbGlzdFwiO1xuXG5jb25zdCBwYWdpbmF0aW9uTGlzdEFkYXB0ZXIgPSAoV3JhcHBlZENvbXBvbmVudDogYW55KSA9PlxuICBjbGFzcyBQYWdpbmF0aW9uTGlzdEFkYXB0ZXIgZXh0ZW5kcyBwYWdlUmVzb2x2ZXIoQ29tcG9uZW50KSB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBsYXN0UGFnZSxcbiAgICAgICAgdG90YWxQYWdlcyxcbiAgICAgICAgcGFnZUJ1dHRvblJlbmRlcmVyLFxuICAgICAgICBvblBhZ2VDaGFuZ2UsXG4gICAgICAgIGRpc2FibGVQYWdlVGl0bGUsXG4gICAgICAgIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBwYWdlcyA9IHRoaXMuY2FsY3VsYXRlUGFnZVN0YXR1cyhcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVQYWdlcyh0b3RhbFBhZ2VzLCBsYXN0UGFnZSksXG4gICAgICAgIGxhc3RQYWdlLFxuICAgICAgICBkaXNhYmxlUGFnZVRpdGxlXG4gICAgICApO1xuICAgICAgaWYgKHRvdGFsUGFnZXMgPT09IDEgJiYgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8V3JhcHBlZENvbXBvbmVudFxuICAgICAgICAgIHBhZ2VCdXR0b25SZW5kZXJlcj17cGFnZUJ1dHRvblJlbmRlcmVyfVxuICAgICAgICAgIG9uUGFnZUNoYW5nZT17b25QYWdlQ2hhbmdlfVxuICAgICAgICAgIHBhZ2VzPXtwYWdlc31cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG5leHBvcnQgY29uc3QgUGFnaW5hdGlvbkxpc3RXaXRoQWRhcHRlciA9IHBhZ2luYXRpb25MaXN0QWRhcHRlcihQYWdpbmF0aW9uTGlzdCk7XG5leHBvcnQgZGVmYXVsdCBwYWdpbmF0aW9uTGlzdEFkYXB0ZXI7XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBQYWdlQnV0dG9uIGZyb20gXCIuL3BhZ2UtYnV0dG9uXCI7XG5cbmNvbnN0IFBhZ2luYXRvbkxpc3QgPSAocHJvcHM6IGFueSkgPT4gKFxuICA8dWwgY2xhc3NOYW1lPVwicGFnaW5hdGlvbiByZWFjdC1ib290c3RyYXAtdGFibGUtcGFnZS1idG5zLXVsXCI+XG4gICAge3Byb3BzLnBhZ2VzLm1hcCgocGFnZVByb3BzOiBhbnkpID0+IHtcbiAgICAgIGlmIChwcm9wcy5wYWdlQnV0dG9uUmVuZGVyZXIpIHtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChcbiAgICAgICAgICBwcm9wcy5wYWdlQnV0dG9uUmVuZGVyZXIoe1xuICAgICAgICAgICAgLi4ucGFnZVByb3BzLFxuICAgICAgICAgICAgb25QYWdlQ2hhbmdlOiBwcm9wcy5vblBhZ2VDaGFuZ2UsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgeyBrZXk6IHBhZ2VQcm9wcy5wYWdlIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxQYWdlQnV0dG9uXG4gICAgICAgICAga2V5PXtwYWdlUHJvcHMucGFnZX1cbiAgICAgICAgICB7Li4ucGFnZVByb3BzfVxuICAgICAgICAgIG9uUGFnZUNoYW5nZT17cHJvcHMub25QYWdlQ2hhbmdlfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9KX1cbiAgPC91bD5cbik7XG5cblBhZ2luYXRvbkxpc3QucHJvcFR5cGVzID0ge1xuICBwYWdlczogUHJvcFR5cGVzLmFycmF5T2YoXG4gICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHBhZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgICBQcm9wVHlwZXMubm9kZSxcbiAgICAgICAgUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIF0pLFxuICAgICAgYWN0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGRpc2FibGU6IFByb3BUeXBlcy5ib29sLFxuICAgICAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgfSlcbiAgKS5pc1JlcXVpcmVkLFxuICBvblBhZ2VDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHBhZ2VCdXR0b25SZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG59O1xuXG4vLyBQYWdpbmF0b25MaXN0LmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgcGFnZUJ1dHRvblJlbmRlcmVyOiBudWxsLFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgUGFnaW5hdG9uTGlzdDtcbiIsIi8qIGVzbGludCBuby1taXhlZC1vcGVyYXRvcnM6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBDb25zdCBmcm9tIFwiLi9jb25zdFwiO1xuXG5leHBvcnQgZGVmYXVsdCAoRXh0ZW5kQmFzZTogYW55KSA9PlxuICBjbGFzcyBQYWdlUmVzb2x2ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8dHlwZW9mIEV4dGVuZEJhc2U+IHtcbiAgICBiYWNrVG9QcmV2UGFnZSgpIHtcbiAgICAgIGNvbnN0IHsgY3VyclBhZ2UsIHBhZ2VTdGFydEluZGV4IH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIGN1cnJQYWdlIC0gMSA8IHBhZ2VTdGFydEluZGV4ID8gcGFnZVN0YXJ0SW5kZXggOiBjdXJyUGFnZSAtIDE7XG4gICAgfVxuXG4gICAgaW5pdGlhbFN0YXRlKCkge1xuICAgICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlKCk7XG4gICAgICBjb25zdCBsYXN0UGFnZSA9IHRoaXMuY2FsY3VsYXRlTGFzdFBhZ2UodG90YWxQYWdlcyk7XG4gICAgICByZXR1cm4geyB0b3RhbFBhZ2VzLCBsYXN0UGFnZSB9O1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZVRvdGFsUGFnZShcbiAgICAgIHNpemVQZXJQYWdlID0gdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UsXG4gICAgICBkYXRhU2l6ZSA9IHRoaXMucHJvcHMuZGF0YVNpemVcbiAgICApIHtcbiAgICAgIHJldHVybiBNYXRoLmNlaWwoZGF0YVNpemUgLyBzaXplUGVyUGFnZSk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlTGFzdFBhZ2UodG90YWxQYWdlczogYW55KSB7XG4gICAgICBjb25zdCB7IHBhZ2VTdGFydEluZGV4IH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIHBhZ2VTdGFydEluZGV4ICsgdG90YWxQYWdlcyAtIDE7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlRnJvbVRvKCkge1xuICAgICAgY29uc3QgeyBkYXRhU2l6ZSwgY3VyclBhZ2UsIGN1cnJTaXplUGVyUGFnZSwgcGFnZVN0YXJ0SW5kZXggfSA9XG4gICAgICAgIHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmFicyhDb25zdC5QQUdFX1NUQVJUX0lOREVYIC0gcGFnZVN0YXJ0SW5kZXgpO1xuXG4gICAgICBsZXQgZnJvbSA9IChjdXJyUGFnZSAtIHBhZ2VTdGFydEluZGV4KSAqIGN1cnJTaXplUGVyUGFnZTtcbiAgICAgIGZyb20gPSBkYXRhU2l6ZSA9PT0gMCA/IDAgOiBmcm9tICsgMTtcbiAgICAgIGxldCB0byA9IE1hdGgubWluKGN1cnJTaXplUGVyUGFnZSAqIChjdXJyUGFnZSArIG9mZnNldCksIGRhdGFTaXplKTtcbiAgICAgIGlmICh0byA+IGRhdGFTaXplKSB0byA9IGRhdGFTaXplO1xuXG4gICAgICByZXR1cm4gW2Zyb20sIHRvXTtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVQYWdlcyh0b3RhbFBhZ2VzOiBhbnksIGxhc3RQYWdlOiBhbnkpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3VyclBhZ2UsXG4gICAgICAgIHBhZ2luYXRpb25TaXplLFxuICAgICAgICBwYWdlU3RhcnRJbmRleCxcbiAgICAgICAgd2l0aEZpcnN0QW5kTGFzdCxcbiAgICAgICAgZmlyc3RQYWdlVGV4dCxcbiAgICAgICAgcHJlUGFnZVRleHQsXG4gICAgICAgIG5leHRQYWdlVGV4dCxcbiAgICAgICAgbGFzdFBhZ2VUZXh0LFxuICAgICAgICBhbHdheXNTaG93QWxsQnRucyxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBsZXQgcGFnZXM6IGFueSA9IFtdO1xuICAgICAgbGV0IGVuZFBhZ2UgPSB0b3RhbFBhZ2VzO1xuICAgICAgaWYgKGVuZFBhZ2UgPD0gMCkgcmV0dXJuIFtdO1xuXG4gICAgICBsZXQgc3RhcnRQYWdlID0gTWF0aC5tYXgoXG4gICAgICAgIGN1cnJQYWdlIC0gTWF0aC5mbG9vcihwYWdpbmF0aW9uU2l6ZSAvIDIpLFxuICAgICAgICBwYWdlU3RhcnRJbmRleFxuICAgICAgKTtcbiAgICAgIGVuZFBhZ2UgPSBzdGFydFBhZ2UgKyBwYWdpbmF0aW9uU2l6ZSAtIDE7XG5cbiAgICAgIGlmIChlbmRQYWdlID4gbGFzdFBhZ2UpIHtcbiAgICAgICAgZW5kUGFnZSA9IGxhc3RQYWdlO1xuICAgICAgICBzdGFydFBhZ2UgPSBlbmRQYWdlIC0gcGFnaW5hdGlvblNpemUgKyAxO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWx3YXlzU2hvd0FsbEJ0bnMpIHtcbiAgICAgICAgaWYgKHdpdGhGaXJzdEFuZExhc3QpIHtcbiAgICAgICAgICBwYWdlcyA9IFtmaXJzdFBhZ2VUZXh0LCBwcmVQYWdlVGV4dF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFnZXMgPSBbcHJlUGFnZVRleHRdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgc3RhcnRQYWdlICE9PSBwYWdlU3RhcnRJbmRleCAmJlxuICAgICAgICB0b3RhbFBhZ2VzID4gcGFnaW5hdGlvblNpemUgJiZcbiAgICAgICAgd2l0aEZpcnN0QW5kTGFzdCAmJlxuICAgICAgICBwYWdlcy5sZW5ndGggPT09IDBcbiAgICAgICkge1xuICAgICAgICBwYWdlcyA9IFtmaXJzdFBhZ2VUZXh0LCBwcmVQYWdlVGV4dF07XG4gICAgICB9IGVsc2UgaWYgKHRvdGFsUGFnZXMgPiAxICYmIHBhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBwYWdlcyA9IFtwcmVQYWdlVGV4dF07XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSBzdGFydFBhZ2U7IGkgPD0gZW5kUGFnZTsgaSArPSAxKSB7XG4gICAgICAgIGlmIChpID49IHBhZ2VTdGFydEluZGV4KSBwYWdlcy5wdXNoKGkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWx3YXlzU2hvd0FsbEJ0bnMgfHwgKGVuZFBhZ2UgPD0gbGFzdFBhZ2UgJiYgcGFnZXMubGVuZ3RoID4gMSkpIHtcbiAgICAgICAgcGFnZXMucHVzaChuZXh0UGFnZVRleHQpO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICAoZW5kUGFnZSAhPT0gbGFzdFBhZ2UgJiYgd2l0aEZpcnN0QW5kTGFzdCkgfHxcbiAgICAgICAgKHdpdGhGaXJzdEFuZExhc3QgJiYgYWx3YXlzU2hvd0FsbEJ0bnMpXG4gICAgICApIHtcbiAgICAgICAgcGFnZXMucHVzaChsYXN0UGFnZVRleHQpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiAoKGVuZFBhZ2UgPD0gbGFzdFBhZ2UgJiYgcGFnZXMubGVuZ3RoID4gMSkgfHwgYWx3YXlzU2hvd0FsbEJ0bnMpIHtcbiAgICAgIC8vICAgcGFnZXMucHVzaChuZXh0UGFnZVRleHQpO1xuICAgICAgLy8gfVxuICAgICAgLy8gaWYgKGVuZFBhZ2UgIT09IGxhc3RQYWdlICYmIHdpdGhGaXJzdEFuZExhc3QpIHtcbiAgICAgIC8vICAgcGFnZXMucHVzaChsYXN0UGFnZVRleHQpO1xuICAgICAgLy8gfVxuXG4gICAgICByZXR1cm4gcGFnZXM7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlUGFnZVN0YXR1cyhwYWdlcyA9IFtdLCBsYXN0UGFnZTogYW55LCBkaXNhYmxlUGFnZVRpdGxlID0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3VyclBhZ2UsXG4gICAgICAgIHBhZ2VTdGFydEluZGV4LFxuICAgICAgICBmaXJzdFBhZ2VUZXh0LFxuICAgICAgICBwcmVQYWdlVGV4dCxcbiAgICAgICAgbmV4dFBhZ2VUZXh0LFxuICAgICAgICBsYXN0UGFnZVRleHQsXG4gICAgICAgIGFsd2F5c1Nob3dBbGxCdG5zLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBpc1N0YXJ0ID0gKHBhZ2U6IGFueSkgPT5cbiAgICAgICAgY3VyclBhZ2UgPT09IHBhZ2VTdGFydEluZGV4ICYmXG4gICAgICAgIChwYWdlID09PSBmaXJzdFBhZ2VUZXh0IHx8IHBhZ2UgPT09IHByZVBhZ2VUZXh0KTtcbiAgICAgIGNvbnN0IGlzRW5kID0gKHBhZ2U6IGFueSkgPT5cbiAgICAgICAgY3VyclBhZ2UgPT09IGxhc3RQYWdlICYmXG4gICAgICAgIChwYWdlID09PSBuZXh0UGFnZVRleHQgfHwgcGFnZSA9PT0gbGFzdFBhZ2VUZXh0KTtcblxuICAgICAgcmV0dXJuIHBhZ2VzXG4gICAgICAgIC5maWx0ZXIoKHBhZ2UpID0+IHtcbiAgICAgICAgICBpZiAoYWx3YXlzU2hvd0FsbEJ0bnMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gIShpc1N0YXJ0KHBhZ2UpIHx8IGlzRW5kKHBhZ2UpKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCgocGFnZSkgPT4ge1xuICAgICAgICAgIGxldCB0aXRsZTogYW55O1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHBhZ2UgPT09IGN1cnJQYWdlO1xuICAgICAgICAgIGNvbnN0IGRpc2FibGVkID0gaXNTdGFydChwYWdlKSB8fCBpc0VuZChwYWdlKTtcblxuICAgICAgICAgIGlmIChwYWdlID09PSBuZXh0UGFnZVRleHQpIHtcbiAgICAgICAgICAgIHRpdGxlID0gdGhpcy5wcm9wcy5uZXh0UGFnZVRpdGxlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFnZSA9PT0gcHJlUGFnZVRleHQpIHtcbiAgICAgICAgICAgIHRpdGxlID0gdGhpcy5wcm9wcy5wcmVQYWdlVGl0bGU7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYWdlID09PSBmaXJzdFBhZ2VUZXh0KSB7XG4gICAgICAgICAgICB0aXRsZSA9IHRoaXMucHJvcHMuZmlyc3RQYWdlVGl0bGU7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYWdlID09PSBsYXN0UGFnZVRleHQpIHtcbiAgICAgICAgICAgIHRpdGxlID0gdGhpcy5wcm9wcy5sYXN0UGFnZVRpdGxlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aXRsZSA9IGAke3BhZ2V9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBwYWdlUmVzdWx0ID0geyBwYWdlLCBhY3RpdmUsIGRpc2FibGVkLCB0aXRsZSB9O1xuICAgICAgICAgIGlmICghZGlzYWJsZVBhZ2VUaXRsZSkge1xuICAgICAgICAgICAgcGFnZVJlc3VsdC50aXRsZSA9IHRpdGxlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcGFnZVJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlU2l6ZVBlclBhZ2VTdGF0dXMoKSB7XG4gICAgICBjb25zdCB7IHNpemVQZXJQYWdlTGlzdCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiBzaXplUGVyUGFnZUxpc3QubWFwKChfc2l6ZVBlclBhZ2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwYWdlVGV4dCA9XG4gICAgICAgICAgdHlwZW9mIF9zaXplUGVyUGFnZS50ZXh0ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICA/IF9zaXplUGVyUGFnZS50ZXh0XG4gICAgICAgICAgICA6IF9zaXplUGVyUGFnZTtcbiAgICAgICAgY29uc3QgcGFnZU51bWJlciA9XG4gICAgICAgICAgdHlwZW9mIF9zaXplUGVyUGFnZS52YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgPyBfc2l6ZVBlclBhZ2UudmFsdWVcbiAgICAgICAgICAgIDogX3NpemVQZXJQYWdlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRleHQ6IGAke3BhZ2VUZXh0fWAsXG4gICAgICAgICAgcGFnZTogcGFnZU51bWJlcixcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgbm8tbG9uZWx5LWlmOiAwICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IFBhZ2luYXRpb25EYXRhUHJvdmlkZXJQcm9wcyB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IENvbnN0IGZyb20gXCIuL2NvbnN0XCI7XG5pbXBvcnQgeyBhbGlnblBhZ2UsIGdldEJ5Q3VyclBhZ2UgfSBmcm9tIFwiLi9wYWdlXCI7XG5pbXBvcnQgUGFnaW5hdGlvbiBmcm9tIFwiLi9wYWdpbmF0aW9uXCI7XG5pbXBvcnQgY3JlYXRlQmFzZUNvbnRleHQgZnJvbSBcIi4vc3RhdGUtY29udGV4dFwiO1xuXG5jb25zdCB7IFByb3ZpZGVyIH0gPSBjcmVhdGVCYXNlQ29udGV4dCgpO1xuXG5jb25zdCBQYWdpbmF0aW9uRGF0YUNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PGFueT4obnVsbCk7XG5cbmNsYXNzIFBhZ2luYXRpb25EYXRhUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlciB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgZGF0YTogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgcmVtb3RlRW1pdHRlcjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIGlzUmVtb3RlUGFnaW5hdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgfTtcblxuICBjb21wb25lbnREaWRVcGRhdGUobmV4dFByb3BzOiBQYWdpbmF0aW9uRGF0YVByb3ZpZGVyUHJvcHMpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUobmV4dFByb3BzKTtcbiAgICBjb25zdCB7IGN1cnJTaXplUGVyUGFnZSB9ID0gdGhpcztcbiAgICBjb25zdCB7IGN1c3RvbSwgb25QYWdlQ2hhbmdlIH0gPSBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zO1xuXG4gICAgY29uc3QgcGFnZVN0YXJ0SW5kZXggPVxuICAgICAgdHlwZW9mIG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMucGFnZVN0YXJ0SW5kZXggIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zLnBhZ2VTdGFydEluZGV4XG4gICAgICAgIDogQ29uc3QuUEFHRV9TVEFSVF9JTkRFWDtcblxuICAgIC8vIHVzZXIgc2hvdWxkIGFsaWduIHRoZSBwYWdlIHdoZW4gdGhlIHBhZ2UgaXMgbm90IGZpdCB0byB0aGUgZGF0YSBzaXplIHdoZW4gcmVtb3RlIGVuYWJsZVxuICAgIGlmICghdGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKSAmJiAhY3VzdG9tKSB7XG4gICAgICBjb25zdCBuZXdQYWdlID0gYWxpZ25QYWdlKFxuICAgICAgICBuZXh0UHJvcHMuZGF0YS5sZW5ndGgsXG4gICAgICAgIHRoaXMucHJvcHMuZGF0YS5sZW5ndGgsXG4gICAgICAgIHRoaXMuY3VyclBhZ2UsXG4gICAgICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICAgICAgcGFnZVN0YXJ0SW5kZXhcbiAgICAgICk7XG5cbiAgICAgIGlmICh0aGlzLmN1cnJQYWdlICE9PSBuZXdQYWdlKSB7XG4gICAgICAgIGlmIChvblBhZ2VDaGFuZ2UpIHtcbiAgICAgICAgICBvblBhZ2VDaGFuZ2UobmV3UGFnZSwgY3VyclNpemVQZXJQYWdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJQYWdlID0gbmV3UGFnZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgbmV4dFByb3BzLm9uRGF0YVNpemVDaGFuZ2UgJiZcbiAgICAgIG5leHRQcm9wcy5kYXRhLmxlbmd0aCAhPT0gdGhpcy5wcm9wcy5kYXRhLmxlbmd0aFxuICAgICkge1xuICAgICAgbmV4dFByb3BzLm9uRGF0YVNpemVDaGFuZ2UoeyBkYXRhU2l6ZTogdGhpcy5wcm9wcy5kYXRhLmxlbmd0aCB9KTtcbiAgICB9XG4gIH1cblxuICBpc1JlbW90ZVBhZ2luYXRpb24gPSAoKSA9PiB0aGlzLnByb3BzLmlzUmVtb3RlUGFnaW5hdGlvbigpO1xuXG4gIHJlbmRlckRlZmF1bHRQYWdpbmF0aW9uID0gKCkgPT4ge1xuICAgIGlmICghdGhpcy5wcm9wcy5wYWdpbmF0aW9uIS5vcHRpb25zIS5jdXN0b20pIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGFnZTogY3VyclBhZ2UsXG4gICAgICAgIHNpemVQZXJQYWdlOiBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgIGRhdGFTaXplLFxuICAgICAgICAuLi5yZXN0XG4gICAgICB9ID0gdGhpcy5nZXRQYWdpbmF0aW9uUHJvcHMoKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxQYWdpbmF0aW9uXG4gICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAga2V5PVwicGFnaW5hdGlvblwiXG4gICAgICAgICAgZGF0YVNpemU9e2RhdGFTaXplIHx8IHRoaXMucHJvcHMuZGF0YS5sZW5ndGh9XG4gICAgICAgICAgY3VyclBhZ2U9e2N1cnJQYWdlfVxuICAgICAgICAgIGN1cnJTaXplUGVyUGFnZT17Y3VyclNpemVQZXJQYWdlfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BzLnBhZ2luYXRpb24hLm9wdGlvbnMhO1xuICAgIGNvbnN0IGN1cnJTaXplUGVyUGFnZSA9IG9wdGlvbnMuc2l6ZVBlclBhZ2UgPz8gdGhpcy5jdXJyU2l6ZVBlclBhZ2U7XG4gICAgY29uc3QgcGFnZVN0YXJ0SW5kZXggPVxuICAgICAgdHlwZW9mIG9wdGlvbnMucGFnZVN0YXJ0SW5kZXggPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBDb25zdC5QQUdFX1NUQVJUX0lOREVYXG4gICAgICAgIDogb3B0aW9ucy5wYWdlU3RhcnRJbmRleDtcblxuICAgIC8vIHdvcmthcm91bmQgYW4gaXNzdWUgd2l0aCBjdXJyUGFnZSBpcyBub3QgMSwgYnV0IGRhdGEgc2l6ZSBpcyBsZXNzIHRoYW4gY3VyclNpemVQZXJQYWdlXG4gICAgLy8gd2hlbiBTZWFyY2hCYXIgaW5wdXQgY2hhbmdlZCwgY29tcG9uZW50RGlkVXBkYXRlIGluIHRoZSBTQU1FIFRvb2xraXQgdXBkYXRlZCAoc2VhcmNoaW5nIHRoZSBkYXRhKVxuICAgIC8vIHNlY29uZGx5IGFmdGVyIGNvbXBvbmVudERpZFVwZGF0ZSAoY2FsY3VsYXRpbmcgY3VyclBhZ2UpIGluIHRoaXMgcGFja2FnZSB0cmlnZ2VyZWQgYXQgZmlyc3RcbiAgICBsZXQgeyBkYXRhIH0gPSB0aGlzLnByb3BzO1xuICAgIGxldCBjdXJyUGFnZSA9IG9wdGlvbnMucGFnZSA/PyB0aGlzLmN1cnJQYWdlO1xuXG4gICAgaWYgKCF0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpICYmIGRhdGEubGVuZ3RoIDw9IChjdXJyUGFnZSAtIDEpICogY3VyclNpemVQZXJQYWdlKSB7XG4gICAgICBjb25zdCB0b3RhbFBhZ2VzID0gTWF0aC5mbG9vcihkYXRhLmxlbmd0aCAvIGN1cnJTaXplUGVyUGFnZSkgKyAxO1xuICAgICAgY3VyclBhZ2UgPSBjdXJyUGFnZSA+IHRvdGFsUGFnZXMgPyB0b3RhbFBhZ2VzIDogY3VyclBhZ2U7XG4gICAgICB0aGlzLmN1cnJQYWdlID0gY3VyclBhZ2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKCkpIHtcbiAgICAgIHRoaXMuY3VyclBhZ2UgPSBjdXJyUGFnZTtcbiAgICB9XG5cbiAgICBkYXRhID0gdGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKVxuICAgICAgPyBkYXRhXG4gICAgICA6IGdldEJ5Q3VyclBhZ2UoZGF0YSwgY3VyclBhZ2UsIGN1cnJTaXplUGVyUGFnZSwgcGFnZVN0YXJ0SW5kZXgpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxQYWdpbmF0aW9uRGF0YUNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgdmFsdWU9e3sgZGF0YSwgc2V0UmVtb3RlRW1pdHRlcjogdGhpcy5zZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlciB9fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAge3RoaXMucmVuZGVyRGVmYXVsdFBhZ2luYXRpb24oKX1cbiAgICAgIDwvUGFnaW5hdGlvbkRhdGFDb250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4gKHtcbiAgUHJvdmlkZXI6IFBhZ2luYXRpb25EYXRhUHJvdmlkZXIsXG4gIENvbnN1bWVyOiBQYWdpbmF0aW9uRGF0YUNvbnRleHQuQ29uc3VtZXIsXG59KTtcbiIsIi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbmltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgUGFnZUJ1dHRvblByb3BzIHtcbiAgb25QYWdlQ2hhbmdlOiAocGFnZTogYW55KSA9PiB2b2lkO1xuICBwYWdlOiBSZWFjdC5SZWFjdE5vZGUgfCBudW1iZXIgfCBzdHJpbmc7XG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG59XG5cbmNsYXNzIFBhZ2VCdXR0b24gZXh0ZW5kcyBDb21wb25lbnQ8UGFnZUJ1dHRvblByb3BzPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVDbGljayA9IHRoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuXG4gIGhhbmRsZUNsaWNrKGU6IGFueSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnByb3BzLm9uUGFnZUNoYW5nZSh0aGlzLnByb3BzLnBhZ2UpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgcGFnZSwgdGl0bGUsIGFjdGl2ZSwgZGlzYWJsZWQsIGNsYXNzTmFtZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjbGFzc2VzID0gY3MoXG4gICAgICB7XG4gICAgICAgIGFjdGl2ZSxcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIFwicGFnZS1pdGVtXCI6IHRydWUsXG4gICAgICB9LFxuICAgICAgY2xhc3NOYW1lXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2VzfSB0aXRsZT17dGl0bGV9PlxuICAgICAgICA8YSBocmVmPVwiI1wiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9IGNsYXNzTmFtZT1cInBhZ2UtbGlua1wiPlxuICAgICAgICAgIHtwYWdlfVxuICAgICAgICA8L2E+XG4gICAgICA8L2xpPlxuICAgICk7XG4gIH1cbn1cblxuLy8gUGFnZUJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4vLyAgIG9uUGFnZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbi8vICAgcGFnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLm5vZGUsXG4vLyAgICAgUHJvcFR5cGVzLm51bWJlcixcbi8vICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBdKS5pc1JlcXVpcmVkLFxuLy8gICBhY3RpdmU6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4vLyAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgUGFnZUJ1dHRvbjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBwYWdpbmF0aW9uSGFuZGxlciBmcm9tIFwiLi9wYWdpbmF0aW9uLWhhbmRsZXJcIjtcbmltcG9ydCBTaXplUGVyUGFnZURyb3Bkb3duIGZyb20gXCIuL3NpemUtcGVyLXBhZ2UtZHJvcGRvd25cIjtcbmltcG9ydCBzaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlciBmcm9tIFwiLi9zaXplLXBlci1wYWdlLWRyb3Bkb3duLWFkYXB0ZXJcIjtcbmltcG9ydCBzdGFuZGFsb25lQWRhcHRlciBmcm9tIFwiLi9zdGFuZGFsb25lLWFkYXB0ZXJcIjtcblxuY29uc3QgU2l6ZVBlclBhZ2VEcm9wZG93blN0YW5kYWxvbmUgPSAocHJvcHM6IGFueSkgPT4gKFxuICA8U2l6ZVBlclBhZ2VEcm9wZG93biB7Li4ucHJvcHN9IC8+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBzdGFuZGFsb25lQWRhcHRlcihcbiAgcGFnaW5hdGlvbkhhbmRsZXIoc2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXIoU2l6ZVBlclBhZ2VEcm9wZG93blN0YW5kYWxvbmUpKVxuKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX187IiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5jb25zdCBQYWdpbmF0aW9uVG90YWwgPSAocHJvcHM6IGFueSkgPT4ge1xuICBpZiAocHJvcHMucGFnaW5hdGlvblRvdGFsUmVuZGVyZXIpIHtcbiAgICByZXR1cm4gcHJvcHMucGFnaW5hdGlvblRvdGFsUmVuZGVyZXIocHJvcHMuZnJvbSwgcHJvcHMudG8sIHByb3BzLmRhdGFTaXplKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxzcGFuIGNsYXNzTmFtZT1cInJlYWN0LWJvb3RzdHJhcC10YWJsZS1wYWdpbmF0aW9uLXRvdGFsXCI+XG4gICAgICAmbmJzcDtTaG93aW5nIHJvd3Mge3Byb3BzLmZyb219IHRvJm5ic3A7e3Byb3BzLnRvfSBvZiZuYnNwO1xuICAgICAge3Byb3BzLmRhdGFTaXplfVxuICAgIDwvc3Bhbj5cbiAgKTtcbn07XG5cblBhZ2luYXRpb25Ub3RhbC5wcm9wVHlwZXMgPSB7XG4gIGZyb206IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgdG86IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgZGF0YVNpemU6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxufTtcblxuLy8gUGFnaW5hdGlvblRvdGFsLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI6IHVuZGVmaW5lZCxcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2luYXRpb25Ub3RhbDtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IFBhZ2luYXRpb25DaGlsZFByb3BzIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgcGFnZVJlc29sdmVyIGZyb20gXCIuL3BhZ2UtcmVzb2x2ZXJcIjtcbmltcG9ydCBTaXplUGVyUGFnZURyb3BEb3duIGZyb20gXCIuL3NpemUtcGVyLXBhZ2UtZHJvcGRvd25cIjtcblxuY29uc3Qgc2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXIgPSAoV3JhcHBlZENvbXBvbmVudDogYW55KSA9PlxuICBjbGFzcyBTaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlciBleHRlbmRzIHBhZ2VSZXNvbHZlcihDb21wb25lbnQpIHtcbiAgICBzdGF0ZSA9IHsgZHJvcGRvd25PcGVuOiBmYWxzZSB9O1xuXG4gICAgY29uc3RydWN0b3IocHJvcHM6IFBhZ2luYXRpb25DaGlsZFByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICB0aGlzLmNsb3NlRHJvcERvd24gPSB0aGlzLmNsb3NlRHJvcERvd24uYmluZCh0aGlzKTtcbiAgICAgIHRoaXMudG9nZ2xlRHJvcERvd24gPSB0aGlzLnRvZ2dsZURyb3BEb3duLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlID0gdGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5zdGF0ZSA9IHsgZHJvcGRvd25PcGVuOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIHRvZ2dsZURyb3BEb3duKCkge1xuICAgICAgY29uc3QgZHJvcGRvd25PcGVuID0gIXRoaXMuc3RhdGUuZHJvcGRvd25PcGVuO1xuICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBkcm9wZG93bk9wZW4gfSkpO1xuICAgIH1cblxuICAgIGNsb3NlRHJvcERvd24oKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGRyb3Bkb3duT3BlbjogZmFsc2UgfSkpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZVNpemVQZXJQYWdlKHNpemVQZXJQYWdlOiBhbnkpIHtcbiAgICAgIHRoaXMucHJvcHMub25TaXplUGVyUGFnZUNoYW5nZShzaXplUGVyUGFnZSk7XG4gICAgICB0aGlzLmNsb3NlRHJvcERvd24oKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHRhYmxlSWQsXG4gICAgICAgIGJvb3RzdHJhcDQsXG4gICAgICAgIHNpemVQZXJQYWdlTGlzdCxcbiAgICAgICAgY3VyclNpemVQZXJQYWdlLFxuICAgICAgICBoaWRlU2l6ZVBlclBhZ2UsXG4gICAgICAgIHNpemVQZXJQYWdlUmVuZGVyZXIsXG4gICAgICAgIHNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXIsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgZHJvcGRvd25PcGVuOiBvcGVuIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoc2l6ZVBlclBhZ2VMaXN0Lmxlbmd0aCA+IDEgJiYgIWhpZGVTaXplUGVyUGFnZSkge1xuICAgICAgICBpZiAoc2l6ZVBlclBhZ2VSZW5kZXJlcikge1xuICAgICAgICAgIHJldHVybiBzaXplUGVyUGFnZVJlbmRlcmVyKHtcbiAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuY2FsY3VsYXRlU2l6ZVBlclBhZ2VTdGF0dXMoKSxcbiAgICAgICAgICAgIGN1cnJTaXplUGVyUGFnZTogYCR7Y3VyclNpemVQZXJQYWdlfWAsXG4gICAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFdyYXBwZWRDb21wb25lbnRcbiAgICAgICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgICAgICAgY3VyclNpemVQZXJQYWdlPXtgJHtjdXJyU2l6ZVBlclBhZ2V9YH1cbiAgICAgICAgICAgIG9wdGlvbnM9e3RoaXMuY2FsY3VsYXRlU2l6ZVBlclBhZ2VTdGF0dXMoKX1cbiAgICAgICAgICAgIG9wdGlvblJlbmRlcmVyPXtzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyfVxuICAgICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMudG9nZ2xlRHJvcERvd259XG4gICAgICAgICAgICBvbkJsdXI9e3RoaXMuY2xvc2VEcm9wRG93bn1cbiAgICAgICAgICAgIG9wZW49e29wZW59XG4gICAgICAgICAgICB0YWJsZUlkPXt0YWJsZUlkfVxuICAgICAgICAgICAgYm9vdHN0cmFwND17Ym9vdHN0cmFwNH1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG5leHBvcnQgY29uc3QgU2l6ZVBlclBhZ2VEcm9wZG93bldpdGhBZGFwdGVyID1cbiAgc2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXIoU2l6ZVBlclBhZ2VEcm9wRG93bik7XG5leHBvcnQgZGVmYXVsdCBzaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzJykoUmVhY3RJcy5pc0VsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xufSBlbHNlIHtcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgcHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zJykoKTtcbn1cbiIsImltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFNpemVQZXJQYWdlT3B0aW9uIGZyb20gXCIuL3NpemUtcGVyLXBhZ2Utb3B0aW9uXCI7XG5cbmNvbnN0IHNpemVQZXJQYWdlRGVmYXVsdENsYXNzID0gXCJyZWFjdC1icy10YWJsZS1zaXplUGVyUGFnZS1kcm9wZG93blwiO1xuXG5jb25zdCBzaXplUGVyUGFnZURyb3BEb3duRGVmYXVsdFByb3BzID0ge1xuICBvcGVuOiBmYWxzZSxcbiAgaGlkZGVuOiBmYWxzZSxcbiAgYnRuQ29udGV4dHVhbDogXCJidG4tZGVmYXVsdCBidG4tc2Vjb25kYXJ5XCIsXG4gIHZhcmlhdGlvbjogXCJkcm9wZG93blwiLFxuICBjbGFzc05hbWU6IFwiXCIsXG4gIG9wdGlvblJlbmRlcmVyOiBudWxsLFxuICBib290c3RyYXA0OiBmYWxzZSxcbiAgdGFibGVJZDogbnVsbCxcbn07XG5cbmNvbnN0IFNpemVQZXJQYWdlRHJvcERvd24gPSAocHJvcHM6IGFueSkgPT4ge1xuICBjb25zdCB7XG4gICAgb3BlbixcbiAgICB0YWJsZUlkLFxuICAgIGhpZGRlbixcbiAgICBvbkNsaWNrLFxuICAgIG9uQmx1cixcbiAgICBvcHRpb25zLFxuICAgIGNsYXNzTmFtZSxcbiAgICB2YXJpYXRpb24sXG4gICAgYm9vdHN0cmFwNCxcbiAgICBidG5Db250ZXh0dWFsLFxuICAgIG9wdGlvblJlbmRlcmVyLFxuICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICBvblNpemVQZXJQYWdlQ2hhbmdlLFxuICB9ID0geyAuLi5zaXplUGVyUGFnZURyb3BEb3duRGVmYXVsdFByb3BzLCAuLi5wcm9wcyB9O1xuXG4gIGNvbnN0IG9wZW5DbGFzcyA9IG9wZW4gPyBcIm9wZW4gc2hvd1wiIDogXCJcIjtcbiAgY29uc3QgZHJvcGRvd25DbGFzc2VzID0gY3MoXG4gICAgb3BlbkNsYXNzLFxuICAgIHNpemVQZXJQYWdlRGVmYXVsdENsYXNzLFxuICAgIHZhcmlhdGlvbixcbiAgICBjbGFzc05hbWVcbiAgKTtcblxuICBjb25zdCBpZCA9IHRhYmxlSWQgPyBgJHt0YWJsZUlkfS1wYWdlRHJvcERvd25gIDogXCJwYWdlRHJvcERvd25cIjtcblxuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBzdHlsZT17eyB2aXNpYmlsaXR5OiBoaWRkZW4gPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCIgfX1cbiAgICAgIGNsYXNzTmFtZT17ZHJvcGRvd25DbGFzc2VzfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJzaXplLXBlci1wYWdlLWRyb3Bkb3duXCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT17YGJ0biAke2J0bkNvbnRleHR1YWx9IGRyb3Bkb3duLXRvZ2dsZWB9XG4gICAgICAgIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIlxuICAgICAgICBhcmlhLWV4cGFuZGVkPXtvcGVufVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgID5cbiAgICAgICAge2N1cnJTaXplUGVyUGFnZX17XCIgXCJ9XG4gICAgICAgIHtib290c3RyYXA0ID8gbnVsbCA6IChcbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImNhcmV0XCIgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDx1bFxuICAgICAgICBjbGFzc05hbWU9e2Bkcm9wZG93bi1tZW51ICR7b3BlbkNsYXNzfWB9XG4gICAgICAgIHJvbGU9XCJtZW51XCJcbiAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtpZH1cbiAgICAgID5cbiAgICAgICAge29wdGlvbnMubWFwKChvcHRpb246IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChvcHRpb25SZW5kZXJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblJlbmRlcmVyKHtcbiAgICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8U2l6ZVBlclBhZ2VPcHRpb25cbiAgICAgICAgICAgICAgey4uLm9wdGlvbn1cbiAgICAgICAgICAgICAga2V5PXtvcHRpb24udGV4dH1cbiAgICAgICAgICAgICAgYm9vdHN0cmFwND17Ym9vdHN0cmFwNH1cbiAgICAgICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZT17b25TaXplUGVyUGFnZUNoYW5nZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L3VsPlxuICAgIDwvc3Bhbj5cbiAgKTtcbn07XG5cblNpemVQZXJQYWdlRHJvcERvd24ucHJvcFR5cGVzID0ge1xuICBjdXJyU2l6ZVBlclBhZ2U6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25TaXplUGVyUGFnZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgYm9vdHN0cmFwNDogUHJvcFR5cGVzLmJvb2wsXG4gIHRhYmxlSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICBoaWRkZW46IFByb3BUeXBlcy5ib29sLFxuICBidG5Db250ZXh0dWFsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB2YXJpYXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJkcm9wZG93blwiLCBcImRyb3B1cFwiXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgb3B0aW9uUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgU2l6ZVBlclBhZ2VEcm9wRG93bjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQYWdpbmF0aW9uSGFuZGxlciBmcm9tIFwiLi9wYWdpbmF0aW9uLWhhbmRsZXJcIjtcbmltcG9ydCBQYWdpbmF0aW9uTGlzdCBmcm9tIFwiLi9wYWdpbmF0aW9uLWxpc3RcIjtcbmltcG9ydCBwYWdpbmF0aW9uTGlzdEFkYXB0ZXIgZnJvbSBcIi4vcGFnaW5hdGlvbi1saXN0LWFkYXB0ZXJcIjtcbmltcG9ydCBzdGFuZGFsb25lQWRhcHRlciBmcm9tIFwiLi9zdGFuZGFsb25lLWFkYXB0ZXJcIjtcblxuY29uc3QgUGFnaW5hdGlvbkxpc3RTdGFuZGFsb25lID0gKHByb3BzOiBhbnkpID0+IDxQYWdpbmF0aW9uTGlzdCB7Li4ucHJvcHN9IC8+O1xuXG5leHBvcnQgZGVmYXVsdCBzdGFuZGFsb25lQWRhcHRlcihcbiAgUGFnaW5hdGlvbkhhbmRsZXIocGFnaW5hdGlvbkxpc3RBZGFwdGVyKFBhZ2luYXRpb25MaXN0U3RhbmRhbG9uZSkpXG4pO1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHBhZ2VSZXNvbHZlciBmcm9tIFwiLi9wYWdlLXJlc29sdmVyXCI7XG5pbXBvcnQgUGFnaW5hdGlvblRvdGFsIGZyb20gXCIuL3BhZ2luYXRpb24tdG90YWxcIjtcblxuY29uc3QgcGFnaW5hdGlvblRvdGFsQWRhcHRlciA9IChXcmFwcGVkQ29tcG9uZW50OiBhbnkpID0+XG4gIGNsYXNzIFBhZ2luYXRpb25Ub3RhbEFkYXB0ZXIgZXh0ZW5kcyBwYWdlUmVzb2x2ZXIoQ29tcG9uZW50KSB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3QgW2Zyb20sIHRvXSA9IHRoaXMuY2FsY3VsYXRlRnJvbVRvKCk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8V3JhcHBlZENvbXBvbmVudFxuICAgICAgICAgIGZyb209e2Zyb219XG4gICAgICAgICAgdG89e3RvfVxuICAgICAgICAgIGRhdGFTaXplPXt0aGlzLnByb3BzLmRhdGFTaXplfVxuICAgICAgICAgIHBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyPXt0aGlzLnByb3BzLnBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbmV4cG9ydCBjb25zdCBQYWdpbmF0aW9uVG90YWxXaXRoQWRhcHRlciA9XG4gIHBhZ2luYXRpb25Ub3RhbEFkYXB0ZXIoUGFnaW5hdGlvblRvdGFsKTtcbmV4cG9ydCBkZWZhdWx0IHBhZ2luYXRpb25Ub3RhbEFkYXB0ZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0KCkge31cbmVtcHR5RnVuY3Rpb25XaXRoUmVzZXQucmVzZXRXYXJuaW5nQ2FjaGUgPSBlbXB0eUZ1bmN0aW9uO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICk7XG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgdGhyb3cgZXJyO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYmlnaW50OiBzaGltLFxuICAgIGJvb2w6IHNoaW0sXG4gICAgZnVuYzogc2hpbSxcbiAgICBudW1iZXI6IHNoaW0sXG4gICAgb2JqZWN0OiBzaGltLFxuICAgIHN0cmluZzogc2hpbSxcbiAgICBzeW1ib2w6IHNoaW0sXG5cbiAgICBhbnk6IHNoaW0sXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcbiAgICBlbGVtZW50OiBzaGltLFxuICAgIGVsZW1lbnRUeXBlOiBzaGltLFxuICAgIGluc3RhbmNlT2Y6IGdldFNoaW0sXG4gICAgbm9kZTogc2hpbSxcbiAgICBvYmplY3RPZjogZ2V0U2hpbSxcbiAgICBvbmVPZjogZ2V0U2hpbSxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXG4gICAgc2hhcGU6IGdldFNoaW0sXG4gICAgZXhhY3Q6IGdldFNoaW0sXG5cbiAgICBjaGVja1Byb3BUeXBlczogZW1wdHlGdW5jdGlvbldpdGhSZXNldCxcbiAgICByZXNldFdhcm5pbmdDYWNoZTogZW1wdHlGdW5jdGlvblxuICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmNvbnN0IFNpemVQZXJQYWdlT3B0aW9uID0gKHtcbiAgdGV4dCxcbiAgcGFnZSxcbiAgb25TaXplUGVyUGFnZUNoYW5nZSxcbiAgYm9vdHN0cmFwNCA9IGZhbHNlLFxufTogYW55KSA9PlxuICBib290c3RyYXA0ID8gKFxuICAgIDxhXG4gICAgICBocmVmPVwiI1wiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgICByb2xlPVwibWVudWl0ZW1cIlxuICAgICAgY2xhc3NOYW1lPVwiZHJvcGRvd24taXRlbVwiXG4gICAgICBkYXRhLXBhZ2U9e3BhZ2V9XG4gICAgICBvbk1vdXNlRG93bj17KGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlKHBhZ2UpO1xuICAgICAgfX1cbiAgICA+XG4gICAgICB7dGV4dH1cbiAgICA8L2E+XG4gICkgOiAoXG4gICAgPGxpIGtleT17dGV4dH0gcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzTmFtZT1cImRyb3Bkb3duLWl0ZW1cIj5cbiAgICAgIDxhXG4gICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxuICAgICAgICBkYXRhLXBhZ2U9e3BhZ2V9XG4gICAgICAgIG9uTW91c2VEb3duPXsoZSkgPT4ge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlKHBhZ2UpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGV4dH1cbiAgICAgIDwvYT5cbiAgICA8L2xpPlxuICApO1xuXG5TaXplUGVyUGFnZU9wdGlvbi5wcm9wVHlwZXMgPSB7XG4gIHRleHQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgcGFnZTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBvblNpemVQZXJQYWdlQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBib290c3RyYXA0OiBQcm9wVHlwZXMuYm9vbCxcbn07XG5cbi8vIFNpemVQZXJQYWdlT3B0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgYm9vdHN0cmFwNDogZmFsc2UsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBTaXplUGVyUGFnZU9wdGlvbjtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBwYWdlUmVzb2x2ZXIgZnJvbSBcIi4vcGFnZS1yZXNvbHZlclwiO1xuXG5leHBvcnQgZGVmYXVsdCAoV3JhcHBlZENvbXBvbmVudDogYW55KSA9PlxuICBjbGFzcyBQYWdpbmF0aW9uSGFuZGxlciBleHRlbmRzIHBhZ2VSZXNvbHZlcihDb21wb25lbnQpIHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICB0aGlzLmhhbmRsZUNoYW5nZVBhZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZVBhZ2UuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLnN0YXRlID0gdGhpcy5pbml0aWFsU3RhdGUoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUoY3VyclByb3BzOiBhbnkpIHtcbiAgICAgIGNvbnN0IHsgY3VyclNpemVQZXJQYWdlLCBkYXRhU2l6ZSwgdG90YWxTaXplIH0gPSBjdXJyUHJvcHM7XG4gICAgICBsZXQgdG90YWxQYWdlcyA9IDA7XG5cbiAgICAgIGlmIChcbiAgICAgICAgY3VyclNpemVQZXJQYWdlICE9PSB0aGlzLnByb3BzLmN1cnJTaXplUGVyUGFnZSB8fFxuICAgICAgICBkYXRhU2l6ZSAhPT0gdGhpcy5wcm9wcy5kYXRhU2l6ZSB8fFxuICAgICAgICB0b3RhbFNpemUgIT09IHRoaXMucHJvcHMudG90YWxTaXplXG4gICAgICApIHtcbiAgICAgICAgaWYgKGN1cnJTaXplUGVyUGFnZSAhPT0gdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UpIHtcbiAgICAgICAgICB0b3RhbFBhZ2VzID0gdGhpcy5jYWxjdWxhdGVUb3RhbFBhZ2UoXG4gICAgICAgICAgICB0aGlzLnByb3BzLmN1cnJTaXplUGVyUGFnZSxcbiAgICAgICAgICAgIHRoaXMucHJvcHMudG90YWxTaXplID8/IHRoaXMucHJvcHMuZGF0YVNpemVcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGFTaXplICE9PSB0aGlzLnByb3BzLmRhdGFTaXplKSB7XG4gICAgICAgICAgdG90YWxQYWdlcyA9IHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlKFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgICAgICB0aGlzLnByb3BzLmRhdGFTaXplXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0b3RhbFNpemUgIT09IHRoaXMucHJvcHMudG90YWxTaXplKSB7XG4gICAgICAgICAgdG90YWxQYWdlcyA9IHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlKFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRvdGFsU2l6ZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvdGFsUGFnZXMgPSB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZShcbiAgICAgICAgICB0aGlzLnByb3BzLmN1cnJTaXplUGVyUGFnZSxcbiAgICAgICAgICB0aGlzLnByb3BzLmRhdGFTaXplXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxhc3RQYWdlID0gdGhpcy5jYWxjdWxhdGVMYXN0UGFnZSh0b3RhbFBhZ2VzKTtcblxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaWYgKHRvdGFsUGFnZXMgIT09IHRoaXMuc3RhdGUudG90YWxQYWdlcyB8fCBsYXN0UGFnZSAhPT0gdGhpcy5zdGF0ZS5sYXN0UGFnZSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdG90YWxQYWdlcywgbGFzdFBhZ2UgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2Uoc2l6ZVBlclBhZ2U6IGFueSkge1xuICAgICAgY29uc3QgeyBjdXJyU2l6ZVBlclBhZ2UsIG9uU2l6ZVBlclBhZ2VDaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBzZWxlY3RlZFNpemUgPVxuICAgICAgICB0eXBlb2Ygc2l6ZVBlclBhZ2UgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICA/IHBhcnNlSW50KHNpemVQZXJQYWdlLCAxMClcbiAgICAgICAgICA6IHNpemVQZXJQYWdlO1xuICAgICAgbGV0IHsgY3VyclBhZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoc2VsZWN0ZWRTaXplICE9PSBjdXJyU2l6ZVBlclBhZ2UpIHtcbiAgICAgICAgY29uc3QgbmV3VG90YWxQYWdlcyA9IHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlKHNlbGVjdGVkU2l6ZSk7XG4gICAgICAgIGNvbnN0IG5ld0xhc3RQYWdlID0gdGhpcy5jYWxjdWxhdGVMYXN0UGFnZShuZXdUb3RhbFBhZ2VzKTtcbiAgICAgICAgaWYgKGN1cnJQYWdlID4gbmV3TGFzdFBhZ2UpIGN1cnJQYWdlID0gbmV3TGFzdFBhZ2U7XG4gICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2Uoc2VsZWN0ZWRTaXplLCBjdXJyUGFnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlUGFnZShuZXdQYWdlOiBhbnkpIHtcbiAgICAgIGxldCBwYWdlOiBhbnk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGN1cnJQYWdlLFxuICAgICAgICBwYWdlU3RhcnRJbmRleCxcbiAgICAgICAgcHJlUGFnZVRleHQsXG4gICAgICAgIG5leHRQYWdlVGV4dCxcbiAgICAgICAgbGFzdFBhZ2VUZXh0LFxuICAgICAgICBmaXJzdFBhZ2VUZXh0LFxuICAgICAgICBvblBhZ2VDaGFuZ2UsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IHsgbGFzdFBhZ2UgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGlmIChuZXdQYWdlID09PSBwcmVQYWdlVGV4dCkge1xuICAgICAgICBwYWdlID0gdGhpcy5iYWNrVG9QcmV2UGFnZSgpO1xuICAgICAgfSBlbHNlIGlmIChuZXdQYWdlID09PSBuZXh0UGFnZVRleHQpIHtcbiAgICAgICAgcGFnZSA9IGN1cnJQYWdlICsgMSA+IGxhc3RQYWdlID8gbGFzdFBhZ2UgOiBjdXJyUGFnZSArIDE7XG4gICAgICB9IGVsc2UgaWYgKG5ld1BhZ2UgPT09IGxhc3RQYWdlVGV4dCkge1xuICAgICAgICBwYWdlID0gbGFzdFBhZ2U7XG4gICAgICB9IGVsc2UgaWYgKG5ld1BhZ2UgPT09IGZpcnN0UGFnZVRleHQpIHtcbiAgICAgICAgcGFnZSA9IHBhZ2VTdGFydEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFnZSA9IHBhcnNlSW50KG5ld1BhZ2UsIDEwKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYWdlICE9PSBjdXJyUGFnZSkge1xuICAgICAgICBvblBhZ2VDaGFuZ2UocGFnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFdyYXBwZWRDb21wb25lbnRcbiAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgbGFzdFBhZ2U9e3RoaXMuc3RhdGUubGFzdFBhZ2V9XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHRvdGFsUGFnZXM9e3RoaXMuc3RhdGUudG90YWxQYWdlc31cbiAgICAgICAgICBvblBhZ2VDaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlUGFnZX1cbiAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gIH07XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5leHBvcnQgZGVmYXVsdCAoV3JhcHBlZENvbXBvbmVudDogYW55KSA9PlxuICAoeyBwYWdlLCBzaXplUGVyUGFnZSwgLi4ucmVzdCB9OiBhbnkpID0+XG4gICAgKFxuICAgICAgPFdyYXBwZWRDb21wb25lbnRcbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIGN1cnJQYWdlPXtwYWdlfVxuICAgICAgICBjdXJyU2l6ZVBlclBhZ2U9e3NpemVQZXJQYWdlfVxuICAgICAgLz5cbiAgICApO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCJpbXBvcnQgQ29uc3QgZnJvbSBcIi4vY29uc3RcIjtcblxuY29uc3QgZ2V0Tm9ybWFsaXplZFBhZ2UgPSAocGFnZTogYW55LCBwYWdlU3RhcnRJbmRleDogYW55KSA9PiB7XG4gIGNvbnN0IG9mZnNldCA9IE1hdGguYWJzKDEgLSBwYWdlU3RhcnRJbmRleCk7XG4gIHJldHVybiBwYWdlICsgb2Zmc2V0O1xufTtcblxuY29uc3QgZW5kSW5kZXggPSAocGFnZTogYW55LCBzaXplUGVyUGFnZTogYW55LCBwYWdlU3RhcnRJbmRleDogYW55KSA9PlxuICBnZXROb3JtYWxpemVkUGFnZShwYWdlLCBwYWdlU3RhcnRJbmRleCkgKiBzaXplUGVyUGFnZSAtIDE7XG5cbmNvbnN0IHN0YXJ0SW5kZXggPSAoZW5kOiBhbnksIHNpemVQZXJQYWdlOiBhbnkpID0+IGVuZCAtIChzaXplUGVyUGFnZSAtIDEpO1xuXG5leHBvcnQgY29uc3QgYWxpZ25QYWdlID0gKFxuICBkYXRhU2l6ZTogYW55LFxuICBwcmV2RGF0YVNpemU6IGFueSxcbiAgcGFnZTogYW55LFxuICBzaXplUGVyUGFnZTogYW55LFxuICBwYWdlU3RhcnRJbmRleDogYW55XG4pID0+IHtcbiAgaWYgKHByZXZEYXRhU2l6ZSA8IGRhdGFTaXplKSByZXR1cm4gcGFnZTtcbiAgaWYgKHBhZ2UgPCBwYWdlU3RhcnRJbmRleCkgcmV0dXJuIHBhZ2VTdGFydEluZGV4O1xuICBpZiAoZGF0YVNpemUgPD0gMCkgcmV0dXJuIHBhZ2VTdGFydEluZGV4O1xuICBpZiAoXG4gICAgcGFnZSA+PSBNYXRoLmZsb29yKGRhdGFTaXplIC8gc2l6ZVBlclBhZ2UpICsgcGFnZVN0YXJ0SW5kZXggJiZcbiAgICBwYWdlU3RhcnRJbmRleCA9PT0gMVxuICApIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKGRhdGFTaXplIC8gc2l6ZVBlclBhZ2UpO1xuICB9XG4gIGlmIChwYWdlID49IE1hdGguZmxvb3IoZGF0YVNpemUgLyBzaXplUGVyUGFnZSkgJiYgcGFnZVN0YXJ0SW5kZXggPT09IDApIHtcbiAgICBjb25zdCBuZXdQYWdlID0gTWF0aC5jZWlsKGRhdGFTaXplIC8gc2l6ZVBlclBhZ2UpO1xuICAgIHJldHVybiBuZXdQYWdlIC0gTWF0aC5hYnMoQ29uc3QuUEFHRV9TVEFSVF9JTkRFWCAtIHBhZ2VTdGFydEluZGV4KTtcbiAgfVxuICByZXR1cm4gcGFnZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCeUN1cnJQYWdlID0gKFxuICBkYXRhOiBhbnksXG4gIHBhZ2U6IGFueSxcbiAgc2l6ZVBlclBhZ2U6IGFueSxcbiAgcGFnZVN0YXJ0SW5kZXg6IGFueVxuKSA9PiB7XG4gIGNvbnN0IGRhdGFTaXplID0gZGF0YS5sZW5ndGg7XG4gIGlmICghZGF0YVNpemUpIHJldHVybiBbXTtcblxuICBjb25zdCBlbmQgPSBlbmRJbmRleChwYWdlLCBzaXplUGVyUGFnZSwgcGFnZVN0YXJ0SW5kZXgpO1xuICBjb25zdCBzdGFydCA9IHN0YXJ0SW5kZXgoZW5kLCBzaXplUGVyUGFnZSk7XG5cbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkgKz0gMSkge1xuICAgIHJlc3VsdC5wdXNoKGRhdGFbaV0pO1xuICAgIGlmIChpICsgMSA9PT0gZGF0YVNpemUpIGJyZWFrO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLyohXG5cdENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuXHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuXHRodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmIChhcmcpIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIHBhcnNlVmFsdWUoYXJnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBwYXJzZVZhbHVlIChhcmcpIHtcblx0XHRpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiBhcmc7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBhcmcgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHR9XG5cblx0XHRpZiAoYXJnLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICYmICFhcmcudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpKSB7XG5cdFx0XHRyZXR1cm4gYXJnLnRvU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIGtleSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmRDbGFzcyAodmFsdWUsIG5ld0NsYXNzKSB7XG5cdFx0aWYgKCFuZXdDbGFzcykge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgKyAnICcgKyBuZXdDbGFzcztcblx0XHR9XG5cdFxuXHRcdHJldHVybiB2YWx1ZSArIG5ld0NsYXNzO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBQQUdJTkFUSU9OX1NJWkU6IDUsXG4gIFBBR0VfU1RBUlRfSU5ERVg6IDEsXG4gIFdpdGhfRklSU1RfQU5EX0xBU1Q6IHRydWUsXG4gIFNIT1dfQUxMX1BBR0VfQlROUzogZmFsc2UsXG4gIFNIT1dfVE9UQUw6IGZhbHNlLFxuICBQQUdJTkFUSU9OX1RPVEFMOiBudWxsLFxuICBGSVJTVF9QQUdFX1RFWFQ6IFwiPDxcIixcbiAgUFJFX1BBR0VfVEVYVDogXCI8XCIsXG4gIE5FWFRfUEFHRV9URVhUOiBcIj5cIixcbiAgTEFTVF9QQUdFX1RFWFQ6IFwiPj5cIixcbiAgTkVYVF9QQUdFX1RJVExFOiBcIm5leHQgcGFnZVwiLFxuICBMQVNUX1BBR0VfVElUTEU6IFwibGFzdCBwYWdlXCIsXG4gIFBSRV9QQUdFX1RJVExFOiBcInByZXZpb3VzIHBhZ2VcIixcbiAgRklSU1RfUEFHRV9USVRMRTogXCJmaXJzdCBwYWdlXCIsXG4gIFNJWkVfUEVSX1BBR0VfTElTVDogWzEwLCAyNSwgMzAsIDUwXSxcbiAgSElERV9TSVpFX1BFUl9QQUdFOiBmYWxzZSxcbiAgSElERV9QQUdFX0xJU1RfT05MWV9PTkVfUEFHRTogZmFsc2UsXG59O1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBuby1sb25lbHktaWY6IDAgKi9cbi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IENvbnN0IGZyb20gXCIuL2NvbnN0XCI7XG5cbmltcG9ydCB7IFBhZ2luYXRpb25Qcm92aWRlclByb3BzIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgeyBhbGlnblBhZ2UgfSBmcm9tIFwiLi9wYWdlXCI7XG5cbmNvbnN0IFN0YXRlQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8YW55PihudWxsKTtcblxuY2xhc3MgU3RhdGVQcm92aWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQYWdpbmF0aW9uUHJvdmlkZXJQcm9wcz4ge1xuICBjdXJyUGFnZTogbnVtYmVyO1xuICBjdXJyU2l6ZVBlclBhZ2U6IG51bWJlcjtcbiAgZGF0YUNoYW5nZUxpc3RlbmVyOiBhbnk7XG4gIGRhdGFTaXplOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHJlbW90ZUVtaXR0ZXI6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUGFnaW5hdGlvblByb3ZpZGVyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVDaGFuZ2VQYWdlID0gdGhpcy5oYW5kbGVDaGFuZ2VQYWdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVEYXRhU2l6ZUNoYW5nZSA9IHRoaXMuaGFuZGxlRGF0YVNpemVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlID0gdGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZS5iaW5kKHRoaXMpO1xuXG4gICAgbGV0IGN1cnJQYWdlOiBhbnk7XG4gICAgbGV0IGN1cnJTaXplUGVyUGFnZTogYW55O1xuICAgIGNvbnN0IG9wdGlvbnMgPSBwcm9wcy5wYWdpbmF0aW9uIS5vcHRpb25zITtcbiAgICBjb25zdCBzaXplUGVyUGFnZUxpc3QgPSBvcHRpb25zLnNpemVQZXJQYWdlTGlzdCB8fCBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1Q7XG5cbiAgICAvLyBpbml0aWFsaXplIGN1cnJlbnQgcGFnZVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wYWdlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjdXJyUGFnZSA9IG9wdGlvbnMucGFnZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLnBhZ2VTdGFydEluZGV4ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjdXJyUGFnZSA9IG9wdGlvbnMucGFnZVN0YXJ0SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJQYWdlID0gQ29uc3QuUEFHRV9TVEFSVF9JTkRFWDtcbiAgICB9XG5cbiAgICAvLyBpbml0aWFsaXplIGN1cnJlbnQgc2l6ZVBlclBhZ2VcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2l6ZVBlclBhZ2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGN1cnJTaXplUGVyUGFnZSA9IG9wdGlvbnMuc2l6ZVBlclBhZ2U7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc2l6ZVBlclBhZ2VMaXN0WzBdID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBjdXJyU2l6ZVBlclBhZ2UgPSBzaXplUGVyUGFnZUxpc3RbMF0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJTaXplUGVyUGFnZSA9IHNpemVQZXJQYWdlTGlzdFswXTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJQYWdlID0gY3VyclBhZ2U7XG4gICAgdGhpcy5kYXRhU2l6ZSA9IG9wdGlvbnMudG90YWxTaXplO1xuICAgIHRoaXMuY3VyclNpemVQZXJQYWdlID0gY3VyclNpemVQZXJQYWdlO1xuICAgIHRoaXMuZGF0YUNoYW5nZUxpc3RlbmVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHRoaXMuZGF0YUNoYW5nZUxpc3RlbmVyLm9uKFwiZmlsdGVyQ2hhbmdlZFwiLCB0aGlzLmhhbmRsZURhdGFTaXplQ2hhbmdlKTtcbiAgfVxuXG4gIGdldFBhZ2luYXRpb25Qcm9wcyA9ICgpID0+IHtcbiAgICBjb25zdCB7IGJvb3RzdHJhcDQsIHRhYmxlSWQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucHJvcHMucGFnaW5hdGlvbiEub3B0aW9ucyE7XG4gICAgY29uc3QgeyBjdXJyUGFnZSwgY3VyclNpemVQZXJQYWdlIH0gPSB0aGlzO1xuICAgIGxldCBkYXRhU2l6ZTogbnVtYmVyO1xuICAgIGlmICh0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpKSB7XG4gICAgICBkYXRhU2l6ZSA9IG9wdGlvbnMudG90YWxTaXplITtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YVNpemUgPSB0aGlzLmRhdGFTaXplITtcbiAgICB9XG4gICAgY29uc3Qgd2l0aEZpcnN0QW5kTGFzdCA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy53aXRoRmlyc3RBbmRMYXN0ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gQ29uc3QuV2l0aF9GSVJTVF9BTkRfTEFTVFxuICAgICAgICA6IG9wdGlvbnMud2l0aEZpcnN0QW5kTGFzdDtcbiAgICBjb25zdCBhbHdheXNTaG93QWxsQnRucyA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5hbHdheXNTaG93QWxsQnRucyA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IENvbnN0LlNIT1dfQUxMX1BBR0VfQlROU1xuICAgICAgICA6IG9wdGlvbnMuYWx3YXlzU2hvd0FsbEJ0bnM7XG4gICAgY29uc3QgaGlkZVNpemVQZXJQYWdlID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLmhpZGVTaXplUGVyUGFnZSA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IENvbnN0LkhJREVfU0laRV9QRVJfUEFHRVxuICAgICAgICA6IG9wdGlvbnMuaGlkZVNpemVQZXJQYWdlO1xuICAgIGNvbnN0IGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLmhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gQ29uc3QuSElERV9QQUdFX0xJU1RfT05MWV9PTkVfUEFHRVxuICAgICAgICA6IG9wdGlvbnMuaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2U7XG4gICAgY29uc3QgcGFnZVN0YXJ0SW5kZXggPVxuICAgICAgdHlwZW9mIG9wdGlvbnMucGFnZVN0YXJ0SW5kZXggPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBDb25zdC5QQUdFX1NUQVJUX0lOREVYXG4gICAgICAgIDogb3B0aW9ucy5wYWdlU3RhcnRJbmRleDtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGJvb3RzdHJhcDQsXG4gICAgICB0YWJsZUlkLFxuICAgICAgcGFnZTogY3VyclBhZ2UsXG4gICAgICBzaXplUGVyUGFnZTogY3VyclNpemVQZXJQYWdlLFxuICAgICAgcGFnZVN0YXJ0SW5kZXgsXG4gICAgICBoaWRlUGFnZUxpc3RPbmx5T25lUGFnZSxcbiAgICAgIGhpZGVTaXplUGVyUGFnZSxcbiAgICAgIGFsd2F5c1Nob3dBbGxCdG5zLFxuICAgICAgd2l0aEZpcnN0QW5kTGFzdCxcbiAgICAgIGRhdGFTaXplLFxuICAgICAgc2l6ZVBlclBhZ2VMaXN0OiBvcHRpb25zLnNpemVQZXJQYWdlTGlzdCB8fCBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1QsXG4gICAgICBwYWdpbmF0aW9uU2l6ZTogb3B0aW9ucy5wYWdpbmF0aW9uU2l6ZSB8fCBDb25zdC5QQUdJTkFUSU9OX1NJWkUsXG4gICAgICBzaG93VG90YWw6IG9wdGlvbnMuc2hvd1RvdGFsLFxuICAgICAgcGFnZUxpc3RSZW5kZXJlcjogb3B0aW9ucy5wYWdlTGlzdFJlbmRlcmVyLFxuICAgICAgcGFnZUJ1dHRvblJlbmRlcmVyOiBvcHRpb25zLnBhZ2VCdXR0b25SZW5kZXJlcixcbiAgICAgIHNpemVQZXJQYWdlUmVuZGVyZXI6IG9wdGlvbnMuc2l6ZVBlclBhZ2VSZW5kZXJlcixcbiAgICAgIHBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyOiBvcHRpb25zLnBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyLFxuICAgICAgc2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcjogb3B0aW9ucy5zaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyLFxuICAgICAgZmlyc3RQYWdlVGV4dDogb3B0aW9ucy5maXJzdFBhZ2VUZXh0IHx8IENvbnN0LkZJUlNUX1BBR0VfVEVYVCxcbiAgICAgIHByZVBhZ2VUZXh0OiBvcHRpb25zLnByZVBhZ2VUZXh0IHx8IENvbnN0LlBSRV9QQUdFX1RFWFQsXG4gICAgICBuZXh0UGFnZVRleHQ6IG9wdGlvbnMubmV4dFBhZ2VUZXh0IHx8IENvbnN0Lk5FWFRfUEFHRV9URVhULFxuICAgICAgbGFzdFBhZ2VUZXh0OiBvcHRpb25zLmxhc3RQYWdlVGV4dCB8fCBDb25zdC5MQVNUX1BBR0VfVEVYVCxcbiAgICAgIHByZVBhZ2VUaXRsZTogb3B0aW9ucy5wcmVQYWdlVGl0bGUgfHwgQ29uc3QuUFJFX1BBR0VfVElUTEUsXG4gICAgICBuZXh0UGFnZVRpdGxlOiBvcHRpb25zLm5leHRQYWdlVGl0bGUgfHwgQ29uc3QuTkVYVF9QQUdFX1RJVExFLFxuICAgICAgZmlyc3RQYWdlVGl0bGU6IG9wdGlvbnMuZmlyc3RQYWdlVGl0bGUgfHwgQ29uc3QuRklSU1RfUEFHRV9USVRMRSxcbiAgICAgIGxhc3RQYWdlVGl0bGU6IG9wdGlvbnMubGFzdFBhZ2VUaXRsZSB8fCBDb25zdC5MQVNUX1BBR0VfVElUTEUsXG4gICAgICBvblBhZ2VDaGFuZ2U6IHRoaXMuaGFuZGxlQ2hhbmdlUGFnZSxcbiAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2U6IHRoaXMuaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UsXG4gICAgfTtcbiAgfTtcblxuICBzZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlciA9IChyZW1vdGVFbWl0dGVyOiBhbnkpID0+IHtcbiAgICB0aGlzLnJlbW90ZUVtaXR0ZXIgPSByZW1vdGVFbWl0dGVyO1xuICB9O1xuXG4gIGdldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyID0gKCkgPT5cbiAgICB0aGlzLnJlbW90ZUVtaXR0ZXIgfHwgdGhpcy5wcm9wcy5yZW1vdGVFbWl0dGVyO1xuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShuZXh0UHJvcHM6IGFueSkge1xuICAgIGNvbnN0IHsgY3VzdG9tIH0gPSBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zO1xuXG4gICAgLy8gdXNlciBzaG91bGQgYWxpZ24gdGhlIHBhZ2Ugd2hlbiB0aGUgcGFnZSBpcyBub3QgZml0IHRvIHRoZSBkYXRhIHNpemUgd2hlbiByZW1vdGUgZW5hYmxlXG4gICAgaWYgKHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKCkgfHwgY3VzdG9tKSB7XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMucGFnZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyB0aGlzLmN1cnJQYWdlID0gbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucy5wYWdlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zLnNpemVQZXJQYWdlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIC8vIHRoaXMuY3VyclNpemVQZXJQYWdlID0gbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucy5zaXplUGVyUGFnZTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucy50b3RhbFNpemUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgLy8gdGhpcy5kYXRhU2l6ZSA9IG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMudG90YWxTaXplO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzUmVtb3RlUGFnaW5hdGlvbiA9ICgpID0+IHtcbiAgICBjb25zdCBlID0geyByZXN1bHQ6IHVuZGVmaW5lZCB9O1xuICAgIHRoaXMucmVtb3RlRW1pdHRlcj8uZW1pdChcImlzUmVtb3RlUGFnaW5hdGlvblwiLCBlKTtcbiAgICByZXR1cm4gZS5yZXN1bHQ7XG4gIH07XG5cbiAgaGFuZGxlRGF0YVNpemVDaGFuZ2UobmV3RGF0YVNpemU6IGFueSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BzLnBhZ2luYXRpb24hLm9wdGlvbnMhO1xuICAgIGNvbnN0IHBhZ2VTdGFydEluZGV4ID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLnBhZ2VTdGFydEluZGV4ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gQ29uc3QuUEFHRV9TVEFSVF9JTkRFWFxuICAgICAgICA6IG9wdGlvbnMucGFnZVN0YXJ0SW5kZXg7XG4gICAgdGhpcy5jdXJyUGFnZSA9IGFsaWduUGFnZShcbiAgICAgIG5ld0RhdGFTaXplLFxuICAgICAgdGhpcy5kYXRhU2l6ZSxcbiAgICAgIHRoaXMuY3VyclBhZ2UsXG4gICAgICB0aGlzLmN1cnJTaXplUGVyUGFnZSxcbiAgICAgIHBhZ2VTdGFydEluZGV4XG4gICAgKTtcbiAgICB0aGlzLmRhdGFTaXplID0gbmV3RGF0YVNpemU7XG4gICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlUGFnZShjdXJyUGFnZTogYW55KSB7XG4gICAgY29uc3QgeyBjdXJyU2l6ZVBlclBhZ2UgfSA9IHRoaXM7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucHJvcHMucGFnaW5hdGlvbiEub3B0aW9ucyE7XG5cbiAgICBpZiAob3B0aW9ucy5vblBhZ2VDaGFuZ2UpIHtcbiAgICAgIG9wdGlvbnMub25QYWdlQ2hhbmdlKGN1cnJQYWdlLCBjdXJyU2l6ZVBlclBhZ2UpO1xuICAgIH1cblxuICAgIHRoaXMuY3VyclBhZ2UgPSBjdXJyUGFnZTtcblxuICAgIGlmICh0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpKSB7XG4gICAgICB0aGlzLmdldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyKCkuZW1pdChcbiAgICAgICAgXCJwYWdpbmF0aW9uQ2hhbmdlXCIsXG4gICAgICAgIGN1cnJQYWdlLFxuICAgICAgICBjdXJyU2l6ZVBlclBhZ2VcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZVNpemVQZXJQYWdlKGN1cnJTaXplUGVyUGFnZTogYW55LCBjdXJyUGFnZTogYW55KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucHJvcHMucGFnaW5hdGlvbiEub3B0aW9ucyE7XG5cbiAgICBpZiAob3B0aW9ucy5vblNpemVQZXJQYWdlQ2hhbmdlKSB7XG4gICAgICBvcHRpb25zLm9uU2l6ZVBlclBhZ2VDaGFuZ2UoY3VyclNpemVQZXJQYWdlLCBjdXJyUGFnZSk7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyUGFnZSA9IGN1cnJQYWdlO1xuICAgIHRoaXMuY3VyclNpemVQZXJQYWdlID0gY3VyclNpemVQZXJQYWdlO1xuXG4gICAgaWYgKHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKCkpIHtcbiAgICAgIHRoaXMuZ2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIoKS5lbWl0KFxuICAgICAgICBcInBhZ2luYXRpb25DaGFuZ2VcIixcbiAgICAgICAgY3VyclBhZ2UsXG4gICAgICAgIGN1cnJTaXplUGVyUGFnZVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHBhZ2luYXRpb25Qcm9wcyA9IHRoaXMuZ2V0UGFnaW5hdGlvblByb3BzKCk7XG4gICAgY29uc3QgcGFnaW5hdGlvbiA9IHtcbiAgICAgIC4uLnRoaXMucHJvcHMucGFnaW5hdGlvbixcbiAgICAgIG9wdGlvbnM6IHBhZ2luYXRpb25Qcm9wcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdGF0ZUNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgdmFsdWU9e3tcbiAgICAgICAgICBwYWdpbmF0aW9uUHJvcHMsXG4gICAgICAgICAgcGFnaW5hdGlvblRhYmxlUHJvcHM6IHtcbiAgICAgICAgICAgIHBhZ2luYXRpb24sXG4gICAgICAgICAgICBzZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlcjogdGhpcy5zZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlcixcbiAgICAgICAgICAgIGRhdGFDaGFuZ2VMaXN0ZW5lcjogdGhpcy5kYXRhQ2hhbmdlTGlzdGVuZXIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L1N0YXRlQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+ICh7XG4gIFByb3ZpZGVyOiBTdGF0ZVByb3ZpZGVyLFxuICBDb25zdW1lcjogU3RhdGVDb250ZXh0LkNvbnN1bWVyLFxufSk7XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQYWdpbmF0aW9uT3B0aW9ucyB9IGZyb20gXCJyZWFjdC1ib290c3RyYXAtdGFibGUtbmdcIjtcblxuaW1wb3J0IGNyZWF0ZURhdGFDb250ZXh0IGZyb20gXCIuL3NyYy9kYXRhLWNvbnRleHRcIjtcbmltcG9ydCBQYWdpbmF0aW9uTGlzdFN0YW5kYWxvbmUgZnJvbSBcIi4vc3JjL3BhZ2luYXRpb24tbGlzdC1zdGFuZGFsb25lXCI7XG5pbXBvcnQgUGFnaW5hdGlvblRvdGFsU3RhbmRhbG9uZSBmcm9tIFwiLi9zcmMvcGFnaW5hdGlvbi10b3RhbC1zdGFuZGFsb25lXCI7XG5pbXBvcnQgU2l6ZVBlclBhZ2VEcm9wZG93blN0YW5kYWxvbmUgZnJvbSBcIi4vc3JjL3NpemUtcGVyLXBhZ2UtZHJvcGRvd24tc3RhbmRhbG9uZVwiO1xuaW1wb3J0IGNyZWF0ZUJhc2VDb250ZXh0IGZyb20gXCIuL3NyYy9zdGF0ZS1jb250ZXh0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbkN0eE9wdGlvbnMge1xuICBvcHRpb25zPzogUGFnaW5hdGlvbk9wdGlvbnMgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbkNoaWxkUHJvcHMgZXh0ZW5kcyBQYWdpbmF0aW9uT3B0aW9ucyB7XG4gIHRhYmxlSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGJvb3RzdHJhcDQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25Qcm92aWRlclByb3BzIHtcbiAgcGFnaW5hdGlvbj86IFBhZ2luYXRpb25DdHhPcHRpb25zIHwgdW5kZWZpbmVkO1xuICAvLyBUT0RPXG4gIC8vIGNoaWxkcmVuOiAoY2hpbGRQcm9wczoge1xuICAvLyAgIHBhZ2luYXRpb25Qcm9wczogUGFnaW5hdGlvbkNoaWxkUHJvcHM7XG4gIC8vICAgcGFnaW5hdGlvblRhYmxlUHJvcHM6IEJvb3RzdHJhcFRhYmxlUHJvcHM7XG4gIC8vIH0pID0+IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGw7XG4gIGNoaWxkcmVuOiBhbnk7XG4gIHRhYmxlSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGJvb3RzdHJhcDQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICByZW1vdGVFbWl0dGVyOiBhbnk7XG4gIGRhdGE6IGFueVtdO1xuICBpc1JlbW90ZVBhZ2luYXRpb246IEZ1bmN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25EYXRhUHJvdmlkZXJQcm9wcyB7XG4gIGRhdGE6IGFueVtdO1xuICByZW1vdGVFbWl0dGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpc1JlbW90ZVBhZ2luYXRpb246ICgpID0+IGJvb2xlYW47XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHBhZ2luYXRpb246IHtcbiAgICBvcHRpb25zOiB7XG4gICAgICBjdXN0b20/OiBib29sZWFuO1xuICAgICAgcGFnZVN0YXJ0SW5kZXg/OiBudW1iZXI7XG4gICAgICBvblBhZ2VDaGFuZ2U6IChuZXdQYWdlOiBhbnksIGN1cnJTaXplUGVyUGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICAgIH07XG4gIH07XG4gIG9uRGF0YVNpemVDaGFuZ2U/OiAoZGF0YVNpemU6IHsgZGF0YVNpemU6IG51bWJlciB9KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCAob3B0aW9ucyA9IHt9KSA9PiAoe1xuICBjcmVhdGVDb250ZXh0OiBjcmVhdGVEYXRhQ29udGV4dCxcbiAgb3B0aW9ucyxcbn0pO1xuXG5jb25zdCB7IFByb3ZpZGVyLCBDb25zdW1lciB9ID0gY3JlYXRlQmFzZUNvbnRleHQoKTtcblxuY29uc3QgQ3VzdG9taXphYmxlUHJvdmlkZXIgPSAocHJvcHM6IFBhZ2luYXRpb25Qcm92aWRlclByb3BzKSA9PiAoXG4gIDxQcm92aWRlciB7Li4ucHJvcHN9PlxuICAgIDxDb25zdW1lcj5cbiAgICAgIHsocGFnaW5hdGlvblByb3BzOiBhbnkpID0+IHByb3BzLmNoaWxkcmVuKHBhZ2luYXRpb25Qcm9wcyl9XG4gICAgPC9Db25zdW1lcj5cbiAgPC9Qcm92aWRlcj5cbik7XG5cbkN1c3RvbWl6YWJsZVByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgY29uc3QgUGFnaW5hdGlvblByb3ZpZGVyID0gQ3VzdG9taXphYmxlUHJvdmlkZXI7XG5leHBvcnQge1xuICBQYWdpbmF0aW9uTGlzdFN0YW5kYWxvbmUsXG4gIFBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUsXG4gIFNpemVQZXJQYWdlRHJvcGRvd25TdGFuZGFsb25lLFxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQYWdpbmF0aW9uVG90YWwgZnJvbSBcIi4vcGFnaW5hdGlvbi10b3RhbFwiO1xuaW1wb3J0IHBhZ2luYXRpb25Ub3RhbEFkYXB0ZXIgZnJvbSBcIi4vcGFnaW5hdGlvbi10b3RhbC1hZGFwdGVyXCI7XG5pbXBvcnQgc3RhbmRhbG9uZUFkYXB0ZXIgZnJvbSBcIi4vc3RhbmRhbG9uZS1hZGFwdGVyXCI7XG5cbmNvbnN0IFBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUgPSAocHJvcHM6IGFueSkgPT4gKFxuICA8UGFnaW5hdGlvblRvdGFsIHsuLi5wcm9wc30gLz5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IHN0YW5kYWxvbmVBZGFwdGVyKFxuICBwYWdpbmF0aW9uVG90YWxBZGFwdGVyKFBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUpXG4pO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5ODcpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18iLCJSZWZsZWN0T3duS2V5cyIsIlIiLCJSZWZsZWN0IiwiUmVmbGVjdEFwcGx5IiwiYXBwbHkiLCJ0YXJnZXQiLCJyZWNlaXZlciIsImFyZ3MiLCJGdW5jdGlvbiIsInByb3RvdHlwZSIsImNhbGwiLCJvd25LZXlzIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImNvbmNhdCIsIk51bWJlcklzTmFOIiwiTnVtYmVyIiwiaXNOYU4iLCJ2YWx1ZSIsIkV2ZW50RW1pdHRlciIsImluaXQiLCJ0aGlzIiwib25jZSIsImVtaXR0ZXIiLCJuYW1lIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJlcnJvckxpc3RlbmVyIiwiZXJyIiwicmVtb3ZlTGlzdGVuZXIiLCJyZXNvbHZlciIsInNsaWNlIiwiYXJndW1lbnRzIiwiZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyIiwiaGFuZGxlciIsImZsYWdzIiwib24iLCJhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlciIsIl9ldmVudHMiLCJ1bmRlZmluZWQiLCJfZXZlbnRzQ291bnQiLCJfbWF4TGlzdGVuZXJzIiwiZGVmYXVsdE1heExpc3RlbmVycyIsImNoZWNrTGlzdGVuZXIiLCJsaXN0ZW5lciIsIlR5cGVFcnJvciIsIl9nZXRNYXhMaXN0ZW5lcnMiLCJ0aGF0IiwiX2FkZExpc3RlbmVyIiwidHlwZSIsInByZXBlbmQiLCJtIiwiZXZlbnRzIiwiZXhpc3RpbmciLCJ3YXJuaW5nIiwiY3JlYXRlIiwibmV3TGlzdGVuZXIiLCJlbWl0IiwidW5zaGlmdCIsInB1c2giLCJsZW5ndGgiLCJ3YXJuZWQiLCJ3IiwiRXJyb3IiLCJTdHJpbmciLCJjb3VudCIsImNvbnNvbGUiLCJ3YXJuIiwib25jZVdyYXBwZXIiLCJmaXJlZCIsIndyYXBGbiIsIl9vbmNlV3JhcCIsInN0YXRlIiwid3JhcHBlZCIsImJpbmQiLCJfbGlzdGVuZXJzIiwidW53cmFwIiwiZXZsaXN0ZW5lciIsImFyciIsInJldCIsIkFycmF5IiwiaSIsInVud3JhcExpc3RlbmVycyIsImFycmF5Q2xvbmUiLCJsaXN0ZW5lckNvdW50IiwibiIsImNvcHkiLCJhZGRFdmVudExpc3RlbmVyIiwid3JhcExpc3RlbmVyIiwiYXJnIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInNldCIsIlJhbmdlRXJyb3IiLCJnZXRQcm90b3R5cGVPZiIsInNldE1heExpc3RlbmVycyIsImdldE1heExpc3RlbmVycyIsImRvRXJyb3IiLCJlcnJvciIsImVyIiwibWVzc2FnZSIsImNvbnRleHQiLCJsZW4iLCJsaXN0ZW5lcnMiLCJhZGRMaXN0ZW5lciIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0IiwicG9zaXRpb24iLCJvcmlnaW5hbExpc3RlbmVyIiwic2hpZnQiLCJpbmRleCIsInBvcCIsInNwbGljZU9uZSIsIm9mZiIsInJlbW92ZUFsbExpc3RlbmVycyIsImtleSIsImtleXMiLCJyYXdMaXN0ZW5lcnMiLCJldmVudE5hbWVzIiwiUGFnaW5hdGlvbiIsIkNvbXBvbmVudCIsInJlbmRlciIsInRhYmxlSWQiLCJjdXJyUGFnZSIsInBhZ2VTdGFydEluZGV4IiwiUEFHRV9TVEFSVF9JTkRFWCIsInNob3dUb3RhbCIsIlNIT1dfVE9UQUwiLCJkYXRhU2l6ZSIsInBhZ2VMaXN0UmVuZGVyZXIiLCJwYWdlQnV0dG9uUmVuZGVyZXIiLCJwYWdpbmF0aW9uVG90YWxSZW5kZXJlciIsIlBBR0lOQVRJT05fVE9UQUwiLCJoaWRlUGFnZUxpc3RPbmx5T25lUGFnZSIsIkhJREVfUEFHRV9MSVNUX09OTFlfT05FX1BBR0UiLCJ0b3RhbFBhZ2VzIiwibGFzdFBhZ2UiLCJvblBhZ2VDaGFuZ2UiLCJzaXplUGVyUGFnZUxpc3QiLCJTSVpFX1BFUl9QQUdFX0xJU1QiLCJjdXJyU2l6ZVBlclBhZ2UiLCJoaWRlU2l6ZVBlclBhZ2UiLCJISURFX1NJWkVfUEVSX1BBR0UiLCJzaXplUGVyUGFnZVJlbmRlcmVyIiwic2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlciIsIm9uU2l6ZVBlclBhZ2VDaGFuZ2UiLCJib290c3RyYXA0IiwiZGlzYWJsZVBhZ2VUaXRsZSIsInBhZ2luYXRpb25TaXplIiwiUEFHSU5BVElPTl9TSVpFIiwid2l0aEZpcnN0QW5kTGFzdCIsIldpdGhfRklSU1RfQU5EX0xBU1QiLCJhbHdheXNTaG93QWxsQnRucyIsIlNIT1dfQUxMX1BBR0VfQlROUyIsImZpcnN0UGFnZVRleHQiLCJGSVJTVF9QQUdFX1RFWFQiLCJwcmVQYWdlVGV4dCIsIlBSRV9QQUdFX1RFWFQiLCJuZXh0UGFnZVRleHQiLCJORVhUX1BBR0VfVEVYVCIsImxhc3RQYWdlVGV4dCIsIkxBU1RfUEFHRV9URVhUIiwibmV4dFBhZ2VUaXRsZSIsIk5FWFRfUEFHRV9USVRMRSIsInByZVBhZ2VUaXRsZSIsIlBSRV9QQUdFX1RJVExFIiwiZmlyc3RQYWdlVGl0bGUiLCJGSVJTVF9QQUdFX1RJVExFIiwibGFzdFBhZ2VUaXRsZSIsIkxBU1RfUEFHRV9USVRMRSIsInJlc3QiLCJwcm9wcyIsInBhZ2VzIiwiY2FsY3VsYXRlUGFnZVN0YXR1cyIsImNhbGN1bGF0ZVBhZ2VzIiwicGFnZUxpc3RDbGFzcyIsImNsYXNzTmFtZSIsIlNpemVQZXJQYWdlRHJvcGRvd25XaXRoQWRhcHRlciIsIlBhZ2luYXRpb25Ub3RhbFdpdGhBZGFwdGVyIiwiUGFnaW5hdGlvbkxpc3RXaXRoQWRhcHRlciIsInBhZ2luYXRpb25MaXN0QWRhcHRlciIsIldyYXBwZWRDb21wb25lbnQiLCJQYWdpbmF0b25MaXN0IiwibWFwIiwicGFnZVByb3BzIiwiY2xvbmVFbGVtZW50IiwicGFnZSIsInByb3BUeXBlcyIsImFycmF5T2YiLCJzaGFwZSIsIm9uZU9mVHlwZSIsIm5vZGUiLCJudW1iZXIiLCJzdHJpbmciLCJhY3RpdmUiLCJib29sIiwiZGlzYWJsZSIsInRpdGxlIiwiaXNSZXF1aXJlZCIsImZ1bmMiLCJFeHRlbmRCYXNlIiwiYmFja1RvUHJldlBhZ2UiLCJpbml0aWFsU3RhdGUiLCJjYWxjdWxhdGVUb3RhbFBhZ2UiLCJjYWxjdWxhdGVMYXN0UGFnZSIsInNpemVQZXJQYWdlIiwiTWF0aCIsImNlaWwiLCJjYWxjdWxhdGVGcm9tVG8iLCJvZmZzZXQiLCJhYnMiLCJmcm9tIiwidG8iLCJtaW4iLCJlbmRQYWdlIiwic3RhcnRQYWdlIiwibWF4IiwiZmxvb3IiLCJpc1N0YXJ0IiwiaXNFbmQiLCJmaWx0ZXIiLCJkaXNhYmxlZCIsInBhZ2VSZXN1bHQiLCJjYWxjdWxhdGVTaXplUGVyUGFnZVN0YXR1cyIsIl9zaXplUGVyUGFnZSIsInRleHQiLCJQcm92aWRlciIsIlBhZ2luYXRpb25EYXRhQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJQYWdpbmF0aW9uRGF0YVByb3ZpZGVyIiwiaXNSZW1vdGVQYWdpbmF0aW9uIiwicmVuZGVyRGVmYXVsdFBhZ2luYXRpb24iLCJwYWdpbmF0aW9uIiwib3B0aW9ucyIsImN1c3RvbSIsImdldFBhZ2luYXRpb25Qcm9wcyIsImRhdGEiLCJjb21wb25lbnREaWRVcGRhdGUiLCJuZXh0UHJvcHMiLCJzdXBlciIsIm5ld1BhZ2UiLCJhbGlnblBhZ2UiLCJvbkRhdGFTaXplQ2hhbmdlIiwiZ2V0QnlDdXJyUGFnZSIsInNldFJlbW90ZUVtaXR0ZXIiLCJzZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlciIsImNoaWxkcmVuIiwiYXJyYXkiLCJyZW1vdGVFbWl0dGVyIiwib2JqZWN0IiwiQ29uc3VtZXIiLCJQYWdlQnV0dG9uIiwiY29uc3RydWN0b3IiLCJoYW5kbGVDbGljayIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImNsYXNzZXMiLCJocmVmIiwib25DbGljayIsIlBhZ2luYXRpb25Ub3RhbCIsInNpemVQZXJQYWdlRHJvcGRvd25BZGFwdGVyIiwiZHJvcGRvd25PcGVuIiwiY2xvc2VEcm9wRG93biIsInRvZ2dsZURyb3BEb3duIiwiaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UiLCJzZXRTdGF0ZSIsIm9wZW4iLCJvcHRpb25SZW5kZXJlciIsIm9uQmx1ciIsInNpemVQZXJQYWdlRHJvcERvd25EZWZhdWx0UHJvcHMiLCJoaWRkZW4iLCJidG5Db250ZXh0dWFsIiwidmFyaWF0aW9uIiwiU2l6ZVBlclBhZ2VEcm9wRG93biIsIm9wZW5DbGFzcyIsImRyb3Bkb3duQ2xhc3NlcyIsImlkIiwic3R5bGUiLCJ2aXNpYmlsaXR5Iiwicm9sZSIsIm9wdGlvbiIsIm9uZU9mIiwicGFnaW5hdGlvblRvdGFsQWRhcHRlciIsIlJlYWN0UHJvcFR5cGVzU2VjcmV0IiwiZW1wdHlGdW5jdGlvbiIsImVtcHR5RnVuY3Rpb25XaXRoUmVzZXQiLCJyZXNldFdhcm5pbmdDYWNoZSIsInNoaW0iLCJwcm9wTmFtZSIsImNvbXBvbmVudE5hbWUiLCJsb2NhdGlvbiIsInByb3BGdWxsTmFtZSIsInNlY3JldCIsImdldFNoaW0iLCJSZWFjdFByb3BUeXBlcyIsImJpZ2ludCIsInN5bWJvbCIsImFueSIsImVsZW1lbnQiLCJlbGVtZW50VHlwZSIsImluc3RhbmNlT2YiLCJvYmplY3RPZiIsImV4YWN0IiwiY2hlY2tQcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJTaXplUGVyUGFnZU9wdGlvbiIsInRhYkluZGV4Iiwib25Nb3VzZURvd24iLCJoYW5kbGVDaGFuZ2VQYWdlIiwiY3VyclByb3BzIiwidG90YWxTaXplIiwic2VsZWN0ZWRTaXplIiwicGFyc2VJbnQiLCJuZXdUb3RhbFBhZ2VzIiwibmV3TGFzdFBhZ2UiLCJlbmRJbmRleCIsImdldE5vcm1hbGl6ZWRQYWdlIiwicHJldkRhdGFTaXplIiwiZW5kIiwic3RhcnQiLCJzdGFydEluZGV4IiwicmVzdWx0IiwiaGFzT3duIiwiaGFzT3duUHJvcGVydHkiLCJjbGFzc05hbWVzIiwiYXBwZW5kQ2xhc3MiLCJwYXJzZVZhbHVlIiwiaXNBcnJheSIsInRvU3RyaW5nIiwiaW5jbHVkZXMiLCJuZXdDbGFzcyIsImRlZmF1bHQiLCJTdGF0ZUNvbnRleHQiLCJTdGF0ZVByb3ZpZGVyIiwiZ2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIiLCJoYW5kbGVEYXRhU2l6ZUNoYW5nZSIsImRhdGFDaGFuZ2VMaXN0ZW5lciIsIm5ld0RhdGFTaXplIiwiZm9yY2VVcGRhdGUiLCJwYWdpbmF0aW9uUHJvcHMiLCJwYWdpbmF0aW9uVGFibGVQcm9wcyIsIlBhZ2luYXRpb25MaXN0U3RhbmRhbG9uZSIsIlBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUiLCJTaXplUGVyUGFnZURyb3Bkb3duU3RhbmRhbG9uZSIsIkN1c3RvbWl6YWJsZVByb3ZpZGVyIiwiUGFnaW5hdGlvblByb3ZpZGVyIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactBootstrapTableNgPaginator=t(require("react")):e.ReactBootstrapTableNgPaginator=t(e.React)}(self,e=>{return t={7(e){"use strict";var t,a="object"==typeof Reflect?Reflect:null,n=a&&"function"==typeof a.apply?a.apply:function(e,t,a){return Function.prototype.apply.call(e,t,a)};t=a&&"function"==typeof a.ownKeys?a.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var r=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}e.exports=i,e.exports.once=function(e,t){return new Promise(function(a,n){function r(a){e.removeListener(t,i),n(a)}function i(){"function"==typeof e.removeListener&&e.removeListener("error",r),a([].slice.call(arguments))}f(e,t,i,{once:!0}),"error"!==t&&function(e,t,a){"function"==typeof e.on&&f(e,"error",t,a)}(e,r,{once:!0})})},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var o=10;function s(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function u(e,t,a,n){var r,i,o,u;if(s(a),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,a.listener?a.listener:a),i=e._events),o=i[t]),void 0===o)o=i[t]=a,++e._eventsCount;else if("function"==typeof o?o=i[t]=n?[a,o]:[o,a]:n?o.unshift(a):o.push(a),(r=l(e))>0&&o.length>r&&!o.warned){o.warned=!0;var d=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");d.name="MaxListenersExceededWarning",d.emitter=e,d.type=t,d.count=o.length,u=d,console&&console.warn&&console.warn(u)}return e}function d(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,a){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:a},r=d.bind(n);return r.listener=a,n.wrapFn=r,r}function g(e,t,a){var n=e._events;if(void 0===n)return[];var r=n[t];return void 0===r?[]:"function"==typeof r?a?[r.listener||r]:[r]:a?function(e){for(var t=new Array(e.length),a=0;a<t.length;++a)t[a]=e[a].listener||e[a];return t}(r):P(r,r.length)}function c(e){var t=this._events;if(void 0!==t){var a=t[e];if("function"==typeof a)return 1;if(void 0!==a)return a.length}return 0}function P(e,t){for(var a=new Array(t),n=0;n<t;++n)a[n]=e[n];return a}function f(e,t,a,n){if("function"==typeof e.on)n.once?e.once(t,a):e.on(t,a);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,function r(i){n.once&&e.removeEventListener(t,r),a(i)})}}Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return o},set:function(e){if("number"!=typeof e||e<0||r(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");o=e}}),i.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},i.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||r(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},i.prototype.getMaxListeners=function(){return l(this)},i.prototype.emit=function(e){for(var t=[],a=1;a<arguments.length;a++)t.push(arguments[a]);var r="error"===e,i=this._events;if(void 0!==i)r=r&&void 0===i.error;else if(!r)return!1;if(r){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var s=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw s.context=o,s}var l=i[e];if(void 0===l)return!1;if("function"==typeof l)n(l,this,t);else{var u=l.length,d=P(l,u);for(a=0;a<u;++a)n(d[a],this,t)}return!0},i.prototype.addListener=function(e,t){return u(this,e,t,!1)},i.prototype.on=i.prototype.addListener,i.prototype.prependListener=function(e,t){return u(this,e,t,!0)},i.prototype.once=function(e,t){return s(t),this.on(e,p(this,e,t)),this},i.prototype.prependOnceListener=function(e,t){return s(t),this.prependListener(e,p(this,e,t)),this},i.prototype.removeListener=function(e,t){var a,n,r,i,o;if(s(t),void 0===(n=this._events))return this;if(void 0===(a=n[e]))return this;if(a===t||a.listener===t)0===--this._eventsCount?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,a.listener||t));else if("function"!=typeof a){for(r=-1,i=a.length-1;i>=0;i--)if(a[i]===t||a[i].listener===t){o=a[i].listener,r=i;break}if(r<0)return this;0===r?a.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(a,r),1===a.length&&(n[e]=a[0]),void 0!==n.removeListener&&this.emit("removeListener",e,o||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,a,n;if(void 0===(a=this._events))return this;if(void 0===a.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==a[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete a[e]),this;if(0===arguments.length){var r,i=Object.keys(a);for(n=0;n<i.length;++n)"removeListener"!==(r=i[n])&&this.removeAllListeners(r);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=a[e]))this.removeListener(e,t);else if(void 0!==t)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this},i.prototype.listeners=function(e){return g(this,e,!0)},i.prototype.rawListeners=function(e){return g(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):c.call(e,t)},i.prototype.listenerCount=c,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},38(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=s(a(942)),u=o(a(442)),d=s(a(971)),p=s(a(316)),g=s(a(881)),c=a(147),P=a(681),f=a(527);class h extends((0,p.default)(u.Component)){render(){const{tableId:e,currPage:t,pageStartIndex:a=d.default.PAGE_START_INDEX,showTotal:n=d.default.SHOW_TOTAL,dataSize:r,pageListRenderer:i=null,pageButtonRenderer:o=null,paginationTotalRenderer:s=d.default.PAGINATION_TOTAL,hidePageListOnlyOnePage:p=d.default.HIDE_PAGE_LIST_ONLY_ONE_PAGE,totalPages:g,lastPage:h,onPageChange:_,sizePerPageList:v=d.default.SIZE_PER_PAGE_LIST,currSizePerPage:T,hideSizePerPage:S=d.default.HIDE_SIZE_PER_PAGE,sizePerPageRenderer:m=null,sizePerPageOptionRenderer:E=null,onSizePerPageChange:b,bootstrap4:y=!1,disablePageTitle:O=!1,paginationSize:A=d.default.PAGINATION_SIZE,withFirstAndLast:z=d.default.With_FIRST_AND_LAST,alwaysShowAllBtns:L=d.default.SHOW_ALL_PAGE_BTNS,firstPageText:x=d.default.FIRST_PAGE_TEXT,prePageText:w=d.default.PRE_PAGE_TEXT,nextPageText:I=d.default.NEXT_PAGE_TEXT,lastPageText:R=d.default.LAST_PAGE_TEXT,nextPageTitle:C=d.default.NEXT_PAGE_TITLE,prePageTitle:D=d.default.PRE_PAGE_TITLE,firstPageTitle:j=d.default.FIRST_PAGE_TITLE,lastPageTitle:M=d.default.LAST_PAGE_TITLE,...N}=this.props,G=this.calculatePageStatus(this.calculatePages(g,h),h),B=(0,l.default)("react-bootstrap-table-pagination-list","col-md-6 col-xs-6 col-sm-6 col-lg-6",{"react-bootstrap-table-pagination-list-hidden":p&&1===g});return u.default.createElement("div",{className:"row react-bootstrap-table-pagination"},u.default.createElement("div",{className:"col-md-6 col-xs-6 col-sm-6 col-lg-6"},u.default.createElement(f.SizePerPageDropdownWithAdapter,{bootstrap4:y,tableId:e,sizePerPageList:v,currSizePerPage:T,hideSizePerPage:S,sizePerPageRenderer:m,sizePerPageOptionRenderer:E,onSizePerPageChange:b}),n?u.default.createElement(P.PaginationTotalWithAdapter,{currPage:t,currSizePerPage:T,pageStartIndex:a,dataSize:r,paginationTotalRenderer:s}):null),i?i({pages:G,onPageChange:_}):u.default.createElement("div",{className:B},u.default.createElement(c.PaginationListWithAdapter,{...N,currPage:t,currSizePerPage:T,pageStartIndex:a,lastPage:h,totalPages:g,pageButtonRenderer:o,onPageChange:_,paginationSize:A,withFirstAndLast:z,firstPageText:x,prePageText:w,nextPageText:I,lastPageText:R,alwaysShowAllBtns:L})))}static defaultProps={disablePageTitle:!1,bootstrap4:!1,pageStartIndex:d.default.PAGE_START_INDEX,paginationSize:d.default.PAGINATION_SIZE,withFirstAndLast:d.default.With_FIRST_AND_LAST,alwaysShowAllBtns:d.default.SHOW_ALL_PAGE_BTNS,showTotal:d.default.SHOW_TOTAL,pageListRenderer:null,pageButtonRenderer:null,sizePerPageRenderer:null,paginationTotalRenderer:d.default.PAGINATION_TOTAL,sizePerPageOptionRenderer:null,firstPageText:d.default.FIRST_PAGE_TEXT,prePageText:d.default.PRE_PAGE_TEXT,nextPageText:d.default.NEXT_PAGE_TEXT,lastPageText:d.default.LAST_PAGE_TEXT,sizePerPageList:d.default.SIZE_PER_PAGE_LIST,nextPageTitle:d.default.NEXT_PAGE_TITLE,prePageTitle:d.default.PRE_PAGE_TITLE,firstPageTitle:d.default.FIRST_PAGE_TITLE,lastPageTitle:d.default.LAST_PAGE_TITLE,hideSizePerPage:d.default.HIDE_SIZE_PER_PAGE,hidePageListOnlyOnePage:d.default.HIDE_PAGE_LIST_ONLY_ONE_PAGE}}t.default=(0,g.default)(h)},147(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PaginationListWithAdapter=void 0;const l=o(a(442)),u=s(a(316)),d=s(a(285)),p=e=>class extends((0,u.default)(l.Component)){render(){const{lastPage:t,totalPages:a,pageButtonRenderer:n,onPageChange:r,disablePageTitle:i,hidePageListOnlyOnePage:o}=this.props,s=this.calculatePageStatus(this.calculatePages(a,t),t,i);return 1===a&&o?null:l.default.createElement(e,{pageButtonRenderer:n,onPageChange:r,pages:s})}};t.PaginationListWithAdapter=p(d.default),t.default=p},285(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(374)),o=e=>r.default.createElement("ul",{className:"pagination react-bootstrap-table-page-btns-ul"},e.pages.map(t=>{if(e.pageButtonRenderer){const a=e.pageButtonRenderer({...t,onPageChange:e.onPageChange});return a?r.default.cloneElement(a,{key:t.page}):null}return r.default.createElement(i.default,{key:t.page,...t,onPageChange:e.onPageChange})}));o.defaultProps={pageButtonRenderer:null},t.default=o},316(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(971));t.default=e=>class extends r.default.Component{backToPrevPage(){const{currPage:e,pageStartIndex:t}=this.props;return e-1<t?t:e-1}initialState(){const e=this.calculateTotalPage();return{totalPages:e,lastPage:this.calculateLastPage(e)}}calculateTotalPage(e=this.props.currSizePerPage,t=this.props.dataSize){return Math.ceil(t/e)}calculateLastPage(e){const{pageStartIndex:t}=this.props;return t+e-1}calculateFromTo(){const{dataSize:e,currPage:t,currSizePerPage:a,pageStartIndex:n}=this.props,r=Math.abs(i.default.PAGE_START_INDEX-n);let o=(t-n)*a;o=0===e?0:o+1;let s=Math.min(a*(t+r),e);return s>e&&(s=e),[o,s]}calculatePages(e,t){const{currPage:a,paginationSize:n,pageStartIndex:r,withFirstAndLast:i,firstPageText:o,prePageText:s,nextPageText:l,lastPageText:u,alwaysShowAllBtns:d}=this.props;let p=[],g=e;if(g<=0)return[];let c=Math.max(a-Math.floor(n/2),r);g=c+n-1,g>t&&(g=t,c=g-n+1),d&&(p=i?[o,s]:[s]),c!==r&&e>n&&i&&0===p.length?p=[o,s]:e>1&&0===p.length&&(p=[s]);for(let e=c;e<=g;e+=1)e>=r&&p.push(e);return(d||g<=t&&p.length>1)&&p.push(l),(g!==t&&i||i&&d)&&p.push(u),p}calculatePageStatus(e=[],t,a=!1){const{currPage:n,pageStartIndex:r,firstPageText:i,prePageText:o,nextPageText:s,lastPageText:l,alwaysShowAllBtns:u}=this.props,d=e=>n===r&&(e===i||e===o),p=e=>n===t&&(e===s||e===l);return e.filter(e=>!!u||!(d(e)||p(e))).map(e=>{let t;const r=e===n,u=d(e)||p(e);t=e===s?this.props.nextPageTitle:e===o?this.props.prePageTitle:e===i?this.props.firstPageTitle:e===l?this.props.lastPageTitle:`${e}`;const g={page:e,active:r,disabled:u,title:t};return a||(g.title=t),g})}calculateSizePerPageStatus(){const{sizePerPageList:e}=this.props;return e.map(e=>({text:`${void 0!==e.text?e.text:e}`,page:void 0!==e.value?e.value:e}))}}},320(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(971)),o=a(933),s=n(a(38)),l=n(a(973)),{Provider:u}=(0,l.default)(),d=r.default.createContext(null);class p extends u{componentDidUpdate(e){super.componentDidUpdate(e);const{currSizePerPage:t}=this,{custom:a,onPageChange:n}=e.pagination.options,r=void 0!==e.pagination.options.pageStartIndex?e.pagination.options.pageStartIndex:i.default.PAGE_START_INDEX;if(!this.isRemotePagination()&&!a){const a=(0,o.alignPage)(e.data.length,this.props.data.length,this.currPage,t,r);this.currPage!==a&&(n&&n(a,t),this.currPage=a)}e.onDataSizeChange&&e.data.length!==this.props.data.length&&e.onDataSizeChange({dataSize:this.props.data.length})}isRemotePagination=()=>this.props.isRemotePagination();renderDefaultPagination=()=>{if(!this.props.pagination.options.custom){const{page:e,sizePerPage:t,dataSize:a,...n}=this.getPaginationProps();return r.default.createElement(s.default,{...n,key:"pagination",dataSize:a||this.props.data.length,currPage:e,currSizePerPage:t})}return null};render(){const e=this.props.pagination.options,t=e.sizePerPage??this.currSizePerPage,a=void 0===e.pageStartIndex?i.default.PAGE_START_INDEX:e.pageStartIndex;let{data:n}=this.props,s=e.page??this.currPage;if(!this.isRemotePagination()&&n.length<=(s-1)*t){const e=Math.floor(n.length/t)+1;s=s>e?e:s,this.currPage=s}return this.isRemotePagination()&&(this.currPage=s),n=this.isRemotePagination()?n:(0,o.getByCurrPage)(n,s,t,a),r.default.createElement(d.Provider,{value:{data:n,setRemoteEmitter:this.setPaginationRemoteEmitter}},this.props.children,this.renderDefaultPagination())}}t.default=()=>({Provider:p,Consumer:d.Consumer})},374(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=s(a(942)),u=o(a(442));class d extends u.Component{constructor(e){super(e),this.handleClick=this.handleClick.bind(this)}handleClick(e){e.preventDefault(),this.props.onPageChange(this.props.page)}render(){const{page:e,title:t,active:a,disabled:n,className:r}=this.props,i=(0,l.default)({active:a,disabled:n,"page-item":!0},r);return u.default.createElement("li",{className:i,title:t},u.default.createElement("a",{href:"#",onClick:this.handleClick,className:"page-link"},e))}}t.default=d},429(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(881)),o=n(a(609)),s=n(a(527)),l=n(a(885));t.default=(0,l.default)((0,i.default)((0,s.default)(e=>r.default.createElement(o.default,{...e}))))},442(t){"use strict";t.exports=e},519(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=e=>e.paginationTotalRenderer?e.paginationTotalRenderer(e.from,e.to,e.dataSize):r.default.createElement("span",{className:"react-bootstrap-table-pagination-total"}," Showing rows ",e.from," to ",e.to," of ",e.dataSize);i.defaultProps={paginationTotalRenderer:void 0},t.default=i},527(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SizePerPageDropdownWithAdapter=void 0;const l=o(a(442)),u=s(a(316)),d=s(a(609)),p=e=>class extends((0,u.default)(l.Component)){state={dropdownOpen:!1};constructor(e){super(e),this.closeDropDown=this.closeDropDown.bind(this),this.toggleDropDown=this.toggleDropDown.bind(this),this.handleChangeSizePerPage=this.handleChangeSizePerPage.bind(this),this.state={dropdownOpen:!1}}toggleDropDown(){const e=!this.state.dropdownOpen;this.setState(()=>({dropdownOpen:e}))}closeDropDown(){this.setState(()=>({dropdownOpen:!1}))}handleChangeSizePerPage(e){this.props.onSizePerPageChange(e),this.closeDropDown()}render(){const{tableId:t,bootstrap4:a,sizePerPageList:n,currSizePerPage:r,hideSizePerPage:i,sizePerPageRenderer:o,sizePerPageOptionRenderer:s}=this.props,{dropdownOpen:u}=this.state;return n.length>1&&!i?o?o({options:this.calculateSizePerPageStatus(),currSizePerPage:`${r}`,onSizePerPageChange:this.handleChangeSizePerPage}):l.default.createElement(e,{...this.props,currSizePerPage:`${r}`,options:this.calculateSizePerPageStatus(),optionRenderer:s,onSizePerPageChange:this.handleChangeSizePerPage,onClick:this.toggleDropDown,onBlur:this.closeDropDown,open:u,tableId:t,bootstrap4:a}):null}};t.SizePerPageDropdownWithAdapter=p(d.default),t.default=p},609(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(942)),i=n(a(442)),o=n(a(869)),s={open:!1,hidden:!1,btnContextual:"btn-default btn-secondary",variation:"dropdown",className:"",optionRenderer:null,bootstrap4:!1,tableId:null};t.default=e=>{const{open:t,tableId:a,hidden:n,onClick:l,onBlur:u,options:d,className:p,variation:g,bootstrap4:c,btnContextual:P,optionRenderer:f,currSizePerPage:h,onSizePerPageChange:_}={...s,...e},v=t?"open show":"",T=(0,r.default)(v,"react-bs-table-sizePerPage-dropdown",g,p),S=a?`${a}-pageDropDown`:"pageDropDown";return i.default.createElement("span",{style:{visibility:n?"hidden":"visible"},className:T,"data-testid":"size-per-page-dropdown"},i.default.createElement("button",{id:S,type:"button",className:`btn ${P} dropdown-toggle`,"data-toggle":"dropdown","aria-expanded":t,onClick:l,onBlur:u},h," ",c?null:i.default.createElement("span",null,i.default.createElement("span",{className:"caret"}))),i.default.createElement("ul",{className:`dropdown-menu ${v}`,role:"menu","aria-labelledby":S},d.map(e=>f?f({...e,onSizePerPageChange:_}):i.default.createElement(o.default,{...e,key:e.text,bootstrap4:c,onSizePerPageChange:_}))))}},657(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(881)),o=n(a(285)),s=n(a(147)),l=n(a(885));t.default=(0,l.default)((0,i.default)((0,s.default)(e=>r.default.createElement(o.default,{...e}))))},681(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PaginationTotalWithAdapter=void 0;const l=o(a(442)),u=s(a(316)),d=s(a(519)),p=e=>class extends((0,u.default)(l.Component)){render(){const[t,a]=this.calculateFromTo();return l.default.createElement(e,{from:t,to:a,dataSize:this.props.dataSize,paginationTotalRenderer:this.props.paginationTotalRenderer})}};t.PaginationTotalWithAdapter=p(d.default),t.default=p},869(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=({text:e,page:t,onSizePerPageChange:a,bootstrap4:n=!1})=>n?r.default.createElement("a",{href:"#",tabIndex:-1,role:"menuitem",className:"dropdown-item","data-page":t,onMouseDown:e=>{e.preventDefault(),a(t)}},e):r.default.createElement("li",{key:e,role:"presentation",className:"dropdown-item"},r.default.createElement("a",{href:"#",tabIndex:-1,role:"menuitem","data-page":t,onMouseDown:e=>{e.preventDefault(),a(t)}},e));i.defaultProps={bootstrap4:!1},t.default=i},881(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=o(a(442)),u=s(a(316));t.default=e=>class extends((0,u.default)(l.Component)){constructor(e){super(e),this.handleChangePage=this.handleChangePage.bind(this),this.handleChangeSizePerPage=this.handleChangeSizePerPage.bind(this),this.state=this.initialState()}componentDidUpdate(e){const{currSizePerPage:t,dataSize:a,totalSize:n}=e;let r=0;t!==this.props.currSizePerPage||a!==this.props.dataSize||n!==this.props.totalSize?t!==this.props.currSizePerPage?r=this.calculateTotalPage(this.props.currSizePerPage,this.props.totalSize??this.props.dataSize):a!==this.props.dataSize?r=this.calculateTotalPage(this.props.currSizePerPage,this.props.dataSize):n!==this.props.totalSize&&(r=this.calculateTotalPage(this.props.currSizePerPage,this.props.totalSize)):r=this.calculateTotalPage(this.props.currSizePerPage,this.props.dataSize);const i=this.calculateLastPage(r);r===this.state.totalPages&&i===this.state.lastPage||this.setState({totalPages:r,lastPage:i})}handleChangeSizePerPage(e){const{currSizePerPage:t,onSizePerPageChange:a}=this.props,n="string"==typeof e?parseInt(e,10):e;let{currPage:r}=this.props;if(n!==t){const e=this.calculateTotalPage(n),t=this.calculateLastPage(e);r>t&&(r=t),a(n,r)}}handleChangePage(e){let t;const{currPage:a,pageStartIndex:n,prePageText:r,nextPageText:i,lastPageText:o,firstPageText:s,onPageChange:l}=this.props,{lastPage:u}=this.state;t=e===r?this.backToPrevPage():e===i?a+1>u?u:a+1:e===o?u:e===s?n:parseInt(e,10),t!==a&&l(t)}render(){return l.default.createElement(e,{...this.props,lastPage:this.state.lastPage,totalPages:this.state.totalPages,onPageChange:this.handleChangePage,onSizePerPageChange:this.handleChangeSizePerPage})}}},885(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442));t.default=e=>({page:t,sizePerPage:a,...n})=>r.default.createElement(e,{...n,currPage:t,currSizePerPage:a})},933(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getByCurrPage=t.alignPage=void 0;const r=n(a(971)),i=(e,t,a)=>((e,t)=>e+Math.abs(1-t))(e,a)*t-1;t.alignPage=(e,t,a,n,i)=>t<e?a:a<i||e<=0?i:a>=Math.floor(e/n)+i&&1===i?Math.ceil(e/n):a>=Math.floor(e/n)&&0===i?Math.ceil(e/n)-Math.abs(r.default.PAGE_START_INDEX-i):a,t.getByCurrPage=(e,t,a,n)=>{const r=e.length;if(!r)return[];const o=i(t,a,n),s=((e,t)=>e-(t-1))(o,a),l=[];for(let t=s;t<=o&&(l.push(e[t]),t+1!==r);t+=1);return l}},942(e,t){var a;!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e="",t=0;t<arguments.length;t++){var a=arguments[t];a&&(e=o(e,i(a)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return r.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var a in e)n.call(e,a)&&e[a]&&(t=o(t,a));return t}function o(e,t){return t?e?e+" "+t:e+t:e}e.exports?(r.default=r,e.exports=r):void 0===(a=function(){return r}.apply(t,[]))||(e.exports=a)}()},971(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={PAGINATION_SIZE:5,PAGE_START_INDEX:1,With_FIRST_AND_LAST:!0,SHOW_ALL_PAGE_BTNS:!1,SHOW_TOTAL:!1,PAGINATION_TOTAL:null,FIRST_PAGE_TEXT:"<<",PRE_PAGE_TEXT:"<",NEXT_PAGE_TEXT:">",LAST_PAGE_TEXT:">>",NEXT_PAGE_TITLE:"next page",LAST_PAGE_TITLE:"last page",PRE_PAGE_TITLE:"previous page",FIRST_PAGE_TITLE:"first page",SIZE_PER_PAGE_LIST:[10,25,30,50],HIDE_SIZE_PER_PAGE:!1,HIDE_PAGE_LIST_ONLY_ONE_PAGE:!1}},973(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(7)),i=n(a(442)),o=n(a(971)),s=a(933),l=i.default.createContext(null);class u extends i.default.Component{currPage;currSizePerPage;dataChangeListener;dataSize;remoteEmitter;constructor(e){let t,a;super(e),this.handleChangePage=this.handleChangePage.bind(this),this.handleDataSizeChange=this.handleDataSizeChange.bind(this),this.handleChangeSizePerPage=this.handleChangeSizePerPage.bind(this);const n=e.pagination.options,i=n.sizePerPageList||o.default.SIZE_PER_PAGE_LIST;t=void 0!==n.page?n.page:void 0!==n.pageStartIndex?n.pageStartIndex:o.default.PAGE_START_INDEX,a=void 0!==n.sizePerPage?n.sizePerPage:"object"==typeof i[0]?i[0].value:i[0],this.currPage=t,this.dataSize=n.totalSize,this.currSizePerPage=a,this.dataChangeListener=new r.default,this.dataChangeListener.on("filterChanged",this.handleDataSizeChange)}getPaginationProps=()=>{const{bootstrap4:e,tableId:t}=this.props,a=this.props.pagination.options,{currPage:n,currSizePerPage:r}=this;let i;i=this.isRemotePagination()?a.totalSize:this.dataSize;const s=void 0===a.withFirstAndLast?o.default.With_FIRST_AND_LAST:a.withFirstAndLast,l=void 0===a.alwaysShowAllBtns?o.default.SHOW_ALL_PAGE_BTNS:a.alwaysShowAllBtns,u=void 0===a.hideSizePerPage?o.default.HIDE_SIZE_PER_PAGE:a.hideSizePerPage,d=void 0===a.hidePageListOnlyOnePage?o.default.HIDE_PAGE_LIST_ONLY_ONE_PAGE:a.hidePageListOnlyOnePage,p=void 0===a.pageStartIndex?o.default.PAGE_START_INDEX:a.pageStartIndex;return{...a,bootstrap4:e,tableId:t,page:n,sizePerPage:r,pageStartIndex:p,hidePageListOnlyOnePage:d,hideSizePerPage:u,alwaysShowAllBtns:l,withFirstAndLast:s,dataSize:i,sizePerPageList:a.sizePerPageList||o.default.SIZE_PER_PAGE_LIST,paginationSize:a.paginationSize||o.default.PAGINATION_SIZE,showTotal:a.showTotal,pageListRenderer:a.pageListRenderer,pageButtonRenderer:a.pageButtonRenderer,sizePerPageRenderer:a.sizePerPageRenderer,paginationTotalRenderer:a.paginationTotalRenderer,sizePerPageOptionRenderer:a.sizePerPageOptionRenderer,firstPageText:a.firstPageText||o.default.FIRST_PAGE_TEXT,prePageText:a.prePageText||o.default.PRE_PAGE_TEXT,nextPageText:a.nextPageText||o.default.NEXT_PAGE_TEXT,lastPageText:a.lastPageText||o.default.LAST_PAGE_TEXT,prePageTitle:a.prePageTitle||o.default.PRE_PAGE_TITLE,nextPageTitle:a.nextPageTitle||o.default.NEXT_PAGE_TITLE,firstPageTitle:a.firstPageTitle||o.default.FIRST_PAGE_TITLE,lastPageTitle:a.lastPageTitle||o.default.LAST_PAGE_TITLE,onPageChange:this.handleChangePage,onSizePerPageChange:this.handleChangeSizePerPage}};setPaginationRemoteEmitter=e=>{this.remoteEmitter=e};getPaginationRemoteEmitter=()=>this.remoteEmitter||this.props.remoteEmitter;componentDidUpdate(e){const{custom:t}=e.pagination.options;(this.isRemotePagination()||t)&&(e.pagination.options.page,e.pagination.options.sizePerPage,e.pagination.options.totalSize)}isRemotePagination=()=>{const e={result:void 0};return this.remoteEmitter?.emit("isRemotePagination",e),e.result};handleDataSizeChange(e){const t=this.props.pagination.options,a=void 0===t.pageStartIndex?o.default.PAGE_START_INDEX:t.pageStartIndex;this.currPage=(0,s.alignPage)(e,this.dataSize,this.currPage,this.currSizePerPage,a),this.dataSize=e,this.forceUpdate()}handleChangePage(e){const{currSizePerPage:t}=this,a=this.props.pagination.options;a.onPageChange&&a.onPageChange(e,t),this.currPage=e,this.isRemotePagination()?this.getPaginationRemoteEmitter().emit("paginationChange",e,t):this.forceUpdate()}handleChangeSizePerPage(e,t){const a=this.props.pagination.options;a.onSizePerPageChange&&a.onSizePerPageChange(e,t),this.currPage=t,this.currSizePerPage=e,this.isRemotePagination()?this.getPaginationRemoteEmitter().emit("paginationChange",t,e):this.forceUpdate()}render(){const e=this.getPaginationProps(),t={...this.props.pagination,options:e};return i.default.createElement(l.Provider,{value:{paginationProps:e,paginationTableProps:{pagination:t,setPaginationRemoteEmitter:this.setPaginationRemoteEmitter,dataChangeListener:this.dataChangeListener}}},this.props.children)}}t.default=()=>({Provider:u,Consumer:l.Consumer})},987(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SizePerPageDropdownStandalone=t.PaginationTotalStandalone=t.PaginationListStandalone=t.PaginationProvider=void 0;const r=n(a(442)),i=n(a(320)),o=n(a(657));t.PaginationListStandalone=o.default;const s=n(a(991));t.PaginationTotalStandalone=s.default;const l=n(a(429));t.SizePerPageDropdownStandalone=l.default;const u=n(a(973));t.default=(e={})=>({createContext:i.default,options:e});const{Provider:d,Consumer:p}=(0,u.default)();t.PaginationProvider=e=>r.default.createElement(d,{...e},r.default.createElement(p,null,t=>e.children(t)))},991(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(519)),o=n(a(681)),s=n(a(885));t.default=(0,s.default)((0,o.default)(e=>r.default.createElement(i.default,{...e})))}},a={},function e(n){var r=a[n];if(void 0!==r)return r.exports;var i=a[n]={exports:{}};return t[n].call(i.exports,i,i.exports,e),i.exports}(987);var t,a});
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3IuanMiLCJtYXBwaW5ncyI6IjtDQUFBLFNBQTJDQSxFQUFNQyxHQUMxQixpQkFBWkMsU0FBMEMsaUJBQVhDLE9BQ3hDQSxPQUFPRCxRQUFVRCxFQUFRRyxRQUFRLFVBQ1IsbUJBQVhDLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxDQUFDLFNBQVVKLEdBQ1EsaUJBQVpDLFFBQ2RBLFFBQXdDLCtCQUFJRCxFQUFRRyxRQUFRLFVBRTVESixFQUFxQywrQkFBSUMsRUFBUUQsRUFBWSxNQUM5RCxDQVRELENBU0dPLEtBQU9DLElBQ1YsTyxxQkNhQSxJQU9JQyxFQVBBQyxFQUF1QixpQkFBWkMsUUFBdUJBLFFBQVUsS0FDNUNDLEVBQWVGLEdBQXdCLG1CQUFaQSxFQUFFRyxNQUM3QkgsRUFBRUcsTUFDRixTQUFzQkMsRUFBUUMsRUFBVUMsR0FDeEMsT0FBT0MsU0FBU0MsVUFBVUwsTUFBTU0sS0FBS0wsRUFBUUMsRUFBVUMsRUFDekQsRUFJQVAsRUFERUMsR0FBMEIsbUJBQWRBLEVBQUVVLFFBQ0NWLEVBQUVVLFFBQ1ZDLE9BQU9DLHNCQUNDLFNBQXdCUixHQUN2QyxPQUFPTyxPQUFPRSxvQkFBb0JULEdBQy9CVSxPQUFPSCxPQUFPQyxzQkFBc0JSLEdBQ3pDLEVBRWlCLFNBQXdCQSxHQUN2QyxPQUFPTyxPQUFPRSxvQkFBb0JULEVBQ3BDLEVBT0YsSUFBSVcsRUFBY0MsT0FBT0MsT0FBUyxTQUFxQkMsR0FDckQsT0FBT0EsR0FBVUEsQ0FDbkIsRUFFQSxTQUFTQyxJQUNQQSxFQUFhQyxLQUFLWCxLQUFLWSxLQUN6QixDQUNBNUIsRUFBT0QsUUFBVTJCLEVBQ2pCMUIsRUFBT0QsUUFBUThCLEtBd1lmLFNBQWNDLEVBQVNDLEdBQ3JCLE9BQU8sSUFBSUMsUUFBUSxTQUFVQyxFQUFTQyxHQUNwQyxTQUFTQyxFQUFjQyxHQUNyQk4sRUFBUU8s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LElBQWpCc1IsRUFDSCxPQUFPQSxFQUFhdFUsUUFHckIsSUFBSUMsRUFBU2tVLEVBQXlCRSxHQUFZLENBR2pEclUsUUFBUyxDQUFDLEdBT1gsT0FIQXVVLEVBQW9CRixHQUFVcFQsS0FBS2hCLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNvVSxHQUdwRW5VLEVBQU9ELE9BQ2YsQ0NuQjBCb1UsQ0FBb0IsSyxNREYxQ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24tbGlzdC1hZGFwdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLWxpc3QudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2UtcmVzb2x2ZXIudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvZGF0YS1jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdlLWJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc2l6ZS1wZXItcGFnZS1kcm9wZG93bi1zdGFuZGFsb25lLnRzeCIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgdW1kIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi10b3RhbC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc2l6ZS1wZXItcGFnZS1kcm9wZG93bi1hZGFwdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9zaXplLXBlci1wYWdlLWRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLWxpc3Qtc3RhbmRhbG9uZS50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi10b3RhbC1hZGFwdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9zaXplLXBlci1wYWdlLW9wdGlvbi50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi1oYW5kbGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9zdGFuZGFsb25lLWFkYXB0ZXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2UudHMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvY29uc3QudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc3RhdGUtY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9pbmRleC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi10b3RhbC1zdGFuZGFsb25lLnRzeCIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJyZWFjdFwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJSZWFjdEJvb3RzdHJhcFRhYmxlTmdQYWdpbmF0b3JcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUmVhY3RCb290c3RyYXBUYWJsZU5nUGFnaW5hdG9yXCJdID0gZmFjdG9yeShyb290W1wiUmVhY3RcIl0pO1xufSkoc2VsZiwgKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fKSA9PiB7XG5yZXR1cm4gIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFIgPSB0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgPyBSZWZsZWN0IDogbnVsbFxudmFyIFJlZmxlY3RBcHBseSA9IFIgJiYgdHlwZW9mIFIuYXBwbHkgPT09ICdmdW5jdGlvbidcbiAgPyBSLmFwcGx5XG4gIDogZnVuY3Rpb24gUmVmbGVjdEFwcGx5KHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwodGFyZ2V0LCByZWNlaXZlciwgYXJncyk7XG4gIH1cblxudmFyIFJlZmxlY3RPd25LZXlzXG5pZiAoUiAmJiB0eXBlb2YgUi5vd25LZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gUi5vd25LZXlzXG59IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KVxuICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkpO1xuICB9O1xufSBlbHNlIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUHJvY2Vzc0VtaXRXYXJuaW5nKHdhcm5pbmcpIHtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS53YXJuKSBjb25zb2xlLndhcm4od2FybmluZyk7XG59XG5cbnZhciBOdW1iZXJJc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiBOdW1iZXJJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIEV2ZW50RW1pdHRlci5pbml0LmNhbGwodGhpcyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbm1vZHVsZS5leHBvcnRzLm9uY2UgPSBvbmNlO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuZnVuY3Rpb24gY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcikge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gX2dldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgaWYgKCF0aGlzLmZpcmVkKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLCB0aGlzLndyYXBGbik7XG4gICAgdGhpcy5maXJlZCA9IHRydWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc3RhdGUgPSB7IGZpcmVkOiBmYWxzZSwgd3JhcEZuOiB1bmRlZmluZWQsIHRhcmdldDogdGFyZ2V0LCB0eXBlOiB0eXBlLCBsaXN0ZW5lcjogbGlzdGVuZXIgfTtcbiAgdmFyIHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgdGhpcy5vbih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRPbmNlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBFbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gb25jZShlbWl0dGVyLCBuYW1lKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZXJyb3JMaXN0ZW5lcihlcnIpIHtcbiAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIobmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICBpZiAodHlwZW9mIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBlcnJvckxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIHJlc29sdmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgaWYgKG5hbWUgIT09ICdlcnJvcicpIHtcbiAgICAgIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGVycm9yTGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBoYW5kbGVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgJ2Vycm9yJywgaGFuZGxlciwgZmxhZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCBsaXN0ZW5lciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgIGVtaXR0ZXIub25jZShuYW1lLCBsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXR0ZXIub24obmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gRXZlbnRUYXJnZXQgZG9lcyBub3QgaGF2ZSBgZXJyb3JgIGV2ZW50IHNlbWFudGljcyBsaWtlIE5vZGVcbiAgICAvLyBFdmVudEVtaXR0ZXJzLCB3ZSBkbyBub3QgbGlzdGVuIGZvciBgZXJyb3JgIGV2ZW50cyBoZXJlLlxuICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jdGlvbiB3cmFwTGlzdGVuZXIoYXJnKSB7XG4gICAgICAvLyBJRSBkb2VzIG5vdCBoYXZlIGJ1aWx0aW4gYHsgb25jZTogdHJ1ZSB9YCBzdXBwb3J0IHNvIHdlXG4gICAgICAvLyBoYXZlIHRvIGRvIGl0IG1hbnVhbGx5LlxuICAgICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIHdyYXBMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICBsaXN0ZW5lcihhcmcpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImVtaXR0ZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgZW1pdHRlcik7XG4gIH1cbn1cbiIsIi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBhcnJvdy1ib2R5LXN0eWxlOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBDb25zdCBmcm9tIFwiLi9jb25zdFwiO1xuaW1wb3J0IHBhZ2VSZXNvbHZlciBmcm9tIFwiLi9wYWdlLXJlc29sdmVyXCI7XG5pbXBvcnQgcGFnaW5hdGlvbkhhbmRsZXIgZnJvbSBcIi4vcGFnaW5hdGlvbi1oYW5kbGVyXCI7XG5pbXBvcnQgeyBQYWdpbmF0aW9uTGlzdFdpdGhBZGFwdGVyIH0gZnJvbSBcIi4vcGFnaW5hdGlvbi1saXN0LWFkYXB0ZXJcIjtcbmltcG9ydCB7IFBhZ2luYXRpb25Ub3RhbFdpdGhBZGFwdGVyIH0gZnJvbSBcIi4vcGFnaW5hdGlvbi10b3RhbC1hZGFwdGVyXCI7XG5pbXBvcnQgeyBTaXplUGVyUGFnZURyb3Bkb3duV2l0aEFkYXB0ZXIgfSBmcm9tIFwiLi9zaXplLXBlci1wYWdlLWRyb3Bkb3duLWFkYXB0ZXJcIjtcblxuY2xhc3MgUGFnaW5hdGlvbiBleHRlbmRzIHBhZ2VSZXNvbHZlcihDb21wb25lbnQpIHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHRhYmxlSWQsXG4gICAgICBjdXJyUGFnZSxcbiAgICAgIHBhZ2VTdGFydEluZGV4ID0gQ29uc3QuUEFHRV9TVEFSVF9JTkRFWCxcbiAgICAgIHNob3dUb3RhbCA9IENvbnN0LlNIT1dfVE9UQUwsXG4gICAgICBkYXRhU2l6ZSxcbiAgICAgIHBhZ2VMaXN0UmVuZGVyZXIgPSBudWxsLFxuICAgICAgcGFnZUJ1dHRvblJlbmRlcmVyID0gbnVsbCxcbiAgICAgIHBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyID0gQ29uc3QuUEFHSU5BVElPTl9UT1RBTCxcbiAgICAgIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlID0gQ29uc3QuSElERV9QQUdFX0xJU1RfT05MWV9PTkVfUEFHRSxcbiAgICAgIHRvdGFsUGFnZXMsXG4gICAgICBsYXN0UGFnZSxcbiAgICAgIG9uUGFnZUNoYW5nZSxcbiAgICAgIHNpemVQZXJQYWdlTGlzdCA9IENvbnN0LlNJWkVfUEVSX1BBR0VfTElTVCxcbiAgICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICAgIGhpZGVTaXplUGVyUGFnZSA9IENvbnN0LkhJREVfU0laRV9QRVJfUEFHRSxcbiAgICAgIHNpemVQZXJQYWdlUmVuZGVyZXIgPSBudWxsLFxuICAgICAgc2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlciA9IG51bGwsXG4gICAgICBvblNpemVQZXJQYWdlQ2hhbmdlLFxuICAgICAgYm9vdHN0cmFwNCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVBhZ2VUaXRsZSA9IGZhbHNlLFxuICAgICAgcGFnaW5hdGlvblNpemUgPSBDb25zdC5QQUdJTkFUSU9OX1NJWkUsXG4gICAgICB3aXRoRmlyc3RBbmRMYXN0ID0gQ29uc3QuV2l0aF9GSVJTVF9BTkRfTEFTVCxcbiAgICAgIGFsd2F5c1Nob3dBbGxCdG5zID0gQ29uc3QuU0hPV19BTExfUEFHRV9CVE5TLFxuICAgICAgZmlyc3RQYWdlVGV4dCA9IENvbnN0LkZJUlNUX1BBR0VfVEVYVCxcbiAgICAgIHByZVBhZ2VUZXh0ID0gQ29uc3QuUFJFX1BBR0VfVEVYVCxcbiAgICAgIG5leHRQYWdlVGV4dCA9IENvbnN0Lk5FWFRfUEFHRV9URVhULFxuICAgICAgbGFzdFBhZ2VUZXh0ID0gQ29uc3QuTEFTVF9QQUdFX1RFWFQsXG4gICAgICBuZXh0UGFnZVRpdGxlID0gQ29uc3QuTkVYVF9QQUdFX1RJVExFLFxuICAgICAgcHJlUGFnZVRpdGxlID0gQ29uc3QuUFJFX1BBR0VfVElUTEUsXG4gICAgICBmaXJzdFBhZ2VUaXRsZSA9IENvbnN0LkZJUlNUX1BBR0VfVElUTEUsXG4gICAgICBsYXN0UGFnZVRpdGxlID0gQ29uc3QuTEFTVF9QQUdFX1RJVExFLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgcGFnZXMgPSB0aGlzLmNhbGN1bGF0ZVBhZ2VTdGF0dXMoXG4gICAgICB0aGlzLmNhbGN1bGF0ZVBhZ2VzKHRvdGFsUGFnZXMsIGxhc3RQYWdlKSxcbiAgICAgIGxhc3RQYWdlXG4gICAgKTtcbiAgICBjb25zdCBwYWdlTGlzdENsYXNzID0gY3MoXG4gICAgICBcInJlYWN0LWJvb3RzdHJhcC10YWJsZS1wYWdpbmF0aW9uLWxpc3RcIixcbiAgICAgIFwiY29sLW1kLTYgY29sLXhzLTYgY29sLXNtLTYgY29sLWxnLTZcIixcbiAgICAgIHtcbiAgICAgICAgXCJyZWFjdC1ib290c3RyYXAtdGFibGUtcGFnaW5hdGlvbi1saXN0LWhpZGRlblwiOlxuICAgICAgICAgIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlICYmIHRvdGFsUGFnZXMgPT09IDEsXG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3cgcmVhY3QtYm9vdHN0cmFwLXRhYmxlLXBhZ2luYXRpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNiBjb2wteHMtNiBjb2wtc20tNiBjb2wtbGctNlwiPlxuICAgICAgICAgIDxTaXplUGVyUGFnZURyb3Bkb3duV2l0aEFkYXB0ZXJcbiAgICAgICAgICAgIGJvb3RzdHJhcDQ9e2Jvb3RzdHJhcDR9XG4gICAgICAgICAgICB0YWJsZUlkPXt0YWJsZUlkfVxuICAgICAgICAgICAgc2l6ZVBlclBhZ2VMaXN0PXtzaXplUGVyUGFnZUxpc3R9XG4gICAgICAgICAgICBjdXJyU2l6ZVBlclBhZ2U9e2N1cnJTaXplUGVyUGFnZX1cbiAgICAgICAgICAgIGhpZGVTaXplUGVyUGFnZT17aGlkZVNpemVQZXJQYWdlfVxuICAgICAgICAgICAgc2l6ZVBlclBhZ2VSZW5kZXJlcj17c2l6ZVBlclBhZ2VSZW5kZXJlcn1cbiAgICAgICAgICAgIHNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXI9e3NpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXJ9XG4gICAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlPXtvblNpemVQZXJQYWdlQ2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge3Nob3dUb3RhbCA/IChcbiAgICAgICAgICAgIDxQYWdpbmF0aW9uVG90YWxXaXRoQWRhcHRlclxuICAgICAgICAgICAgICBjdXJyUGFnZT17Y3VyclBhZ2V9XG4gICAgICAgICAgICAgIGN1cnJTaXplUGVyUGFnZT17Y3VyclNpemVQZXJQYWdlfVxuICAgICAgICAgICAgICBwYWdlU3RhcnRJbmRleD17cGFnZVN0YXJ0SW5kZXh9XG4gICAgICAgICAgICAgIGRhdGFTaXplPXtkYXRhU2l6ZX1cbiAgICAgICAgICAgICAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI9e3BhZ2luYXRpb25Ub3RhbFJlbmRlcmVyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtwYWdlTGlzdFJlbmRlcmVyID8gKFxuICAgICAgICAgIHBhZ2VMaXN0UmVuZGVyZXIoe1xuICAgICAgICAgICAgcGFnZXMsXG4gICAgICAgICAgICBvblBhZ2VDaGFuZ2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cGFnZUxpc3RDbGFzc30+XG4gICAgICAgICAgICA8UGFnaW5hdGlvbkxpc3RXaXRoQWRhcHRlclxuICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgY3VyclBhZ2U9e2N1cnJQYWdlfVxuICAgICAgICAgICAgICBjdXJyU2l6ZVBlclBhZ2U9e2N1cnJTaXplUGVyUGFnZX1cbiAgICAgICAgICAgICAgcGFnZVN0YXJ0SW5kZXg9e3BhZ2VTdGFydEluZGV4fVxuICAgICAgICAgICAgICBsYXN0UGFnZT17bGFzdFBhZ2V9XG4gICAgICAgICAgICAgIHRvdGFsUGFnZXM9e3RvdGFsUGFnZXN9XG4gICAgICAgICAgICAgIHBhZ2VCdXR0b25SZW5kZXJlcj17cGFnZUJ1dHRvblJlbmRlcmVyfVxuICAgICAgICAgICAgICBvblBhZ2VDaGFuZ2U9e29uUGFnZUNoYW5nZX1cbiAgICAgICAgICAgICAgcGFnaW5hdGlvblNpemU9e3BhZ2luYXRpb25TaXplfVxuICAgICAgICAgICAgICB3aXRoRmlyc3RBbmRMYXN0PXt3aXRoRmlyc3RBbmRMYXN0fVxuICAgICAgICAgICAgICBmaXJzdFBhZ2VUZXh0PXtmaXJzdFBhZ2VUZXh0fVxuICAgICAgICAgICAgICBwcmVQYWdlVGV4dD17cHJlUGFnZVRleHR9XG4gICAgICAgICAgICAgIG5leHRQYWdlVGV4dD17bmV4dFBhZ2VUZXh0fVxuICAgICAgICAgICAgICBsYXN0UGFnZVRleHQ9e2xhc3RQYWdlVGV4dH1cbiAgICAgICAgICAgICAgYWx3YXlzU2hvd0FsbEJ0bnM9e2Fsd2F5c1Nob3dBbGxCdG5zfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGRpc2FibGVQYWdlVGl0bGU6IGZhbHNlLFxuICAgIGJvb3RzdHJhcDQ6IGZhbHNlLFxuICAgIHBhZ2VTdGFydEluZGV4OiBDb25zdC5QQUdFX1NUQVJUX0lOREVYLFxuICAgIHBhZ2luYXRpb25TaXplOiBDb25zdC5QQUdJTkFUSU9OX1NJWkUsXG4gICAgd2l0aEZpcnN0QW5kTGFzdDogQ29uc3QuV2l0aF9GSVJTVF9BTkRfTEFTVCxcbiAgICBhbHdheXNTaG93QWxsQnRuczogQ29uc3QuU0hPV19BTExfUEFHRV9CVE5TLFxuICAgIHNob3dUb3RhbDogQ29uc3QuU0hPV19UT1RBTCxcbiAgICBwYWdlTGlzdFJlbmRlcmVyOiBudWxsLFxuICAgIHBhZ2VCdXR0b25SZW5kZXJlcjogbnVsbCxcbiAgICBzaXplUGVyUGFnZVJlbmRlcmVyOiBudWxsLFxuICAgIHBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyOiBDb25zdC5QQUdJTkFUSU9OX1RPVEFMLFxuICAgIHNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXI6IG51bGwsXG4gICAgZmlyc3RQYWdlVGV4dDogQ29uc3QuRklSU1RfUEFHRV9URVhULFxuICAgIHByZVBhZ2VUZXh0OiBDb25zdC5QUkVfUEFHRV9URVhULFxuICAgIG5leHRQYWdlVGV4dDogQ29uc3QuTkVYVF9QQUdFX1RFWFQsXG4gICAgbGFzdFBhZ2VUZXh0OiBDb25zdC5MQVNUX1BBR0VfVEVYVCxcbiAgICBzaXplUGVyUGFnZUxpc3Q6IENvbnN0LlNJWkVfUEVSX1BBR0VfTElTVCxcbiAgICBuZXh0UGFnZVRpdGxlOiBDb25zdC5ORVhUX1BBR0VfVElUTEUsXG4gICAgcHJlUGFnZVRpdGxlOiBDb25zdC5QUkVfUEFHRV9USVRMRSxcbiAgICBmaXJzdFBhZ2VUaXRsZTogQ29uc3QuRklSU1RfUEFHRV9USVRMRSxcbiAgICBsYXN0UGFnZVRpdGxlOiBDb25zdC5MQVNUX1BBR0VfVElUTEUsXG4gICAgaGlkZVNpemVQZXJQYWdlOiBDb25zdC5ISURFX1NJWkVfUEVSX1BBR0UsXG4gICAgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2U6IENvbnN0LkhJREVfUEFHRV9MSVNUX09OTFlfT05FX1BBR0UsXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBhZ2luYXRpb25IYW5kbGVyKFBhZ2luYXRpb24pO1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHBhZ2VSZXNvbHZlciBmcm9tIFwiLi9wYWdlLXJlc29sdmVyXCI7XG5pbXBvcnQgUGFnaW5hdGlvbkxpc3QgZnJvbSBcIi4vcGFnaW5hdGlvbi1saXN0XCI7XG5cbmNvbnN0IHBhZ2luYXRpb25MaXN0QWRhcHRlciA9IChXcmFwcGVkQ29tcG9uZW50OiBhbnkpID0+XG4gIGNsYXNzIFBhZ2luYXRpb25MaXN0QWRhcHRlciBleHRlbmRzIHBhZ2VSZXNvbHZlcihDb21wb25lbnQpIHtcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGxhc3RQYWdlLFxuICAgICAgICB0b3RhbFBhZ2VzLFxuICAgICAgICBwYWdlQnV0dG9uUmVuZGVyZXIsXG4gICAgICAgIG9uUGFnZUNoYW5nZSxcbiAgICAgICAgZGlzYWJsZVBhZ2VUaXRsZSxcbiAgICAgICAgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5jYWxjdWxhdGVQYWdlU3RhdHVzKFxuICAgICAgICB0aGlzLmNhbGN1bGF0ZVBhZ2VzKHRvdGFsUGFnZXMsIGxhc3RQYWdlKSxcbiAgICAgICAgbGFzdFBhZ2UsXG4gICAgICAgIGRpc2FibGVQYWdlVGl0bGVcbiAgICAgICk7XG4gICAgICBpZiAodG90YWxQYWdlcyA9PT0gMSAmJiBoaWRlUGFnZUxpc3RPbmx5T25lUGFnZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxXcmFwcGVkQ29tcG9uZW50XG4gICAgICAgICAgcGFnZUJ1dHRvblJlbmRlcmVyPXtwYWdlQnV0dG9uUmVuZGVyZXJ9XG4gICAgICAgICAgb25QYWdlQ2hhbmdlPXtvblBhZ2VDaGFuZ2V9XG4gICAgICAgICAgcGFnZXM9e3BhZ2VzfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbmV4cG9ydCBjb25zdCBQYWdpbmF0aW9uTGlzdFdpdGhBZGFwdGVyID0gcGFnaW5hdGlvbkxpc3RBZGFwdGVyKFBhZ2luYXRpb25MaXN0KTtcbmV4cG9ydCBkZWZhdWx0IHBhZ2luYXRpb25MaXN0QWRhcHRlcjtcbiIsIlxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgUGFnZUJ1dHRvbiBmcm9tIFwiLi9wYWdlLWJ1dHRvblwiO1xuXG5pbnRlcmZhY2UgUGFnaW5hdGlvbkxpc3RQcm9wcyB7XG4gIHBhZ2VzOiBBcnJheTx7XG4gICAgcGFnZTogUmVhY3QuUmVhY3ROb2RlIHwgbnVtYmVyIHwgc3RyaW5nO1xuICAgIGFjdGl2ZT86IGJvb2xlYW47XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICB9PjtcbiAgb25QYWdlQ2hhbmdlOiAocGFnZTogYW55KSA9PiB2b2lkO1xuICBwYWdlQnV0dG9uUmVuZGVyZXI/OiAocHJvcHM6IGFueSkgPT4gUmVhY3QuUmVhY3RFbGVtZW50IHwgbnVsbDtcbn1cblxuY29uc3QgUGFnaW5hdG9uTGlzdCA9IChwcm9wczogUGFnaW5hdGlvbkxpc3RQcm9wcykgPT4gKFxuICA8dWwgY2xhc3NOYW1lPVwicGFnaW5hdGlvbiByZWFjdC1ib290c3RyYXAtdGFibGUtcGFnZS1idG5zLXVsXCI+XG4gICAge3Byb3BzLnBhZ2VzLm1hcCgocGFnZVByb3BzOiBhbnkpID0+IHtcbiAgICAgIGlmIChwcm9wcy5wYWdlQnV0dG9uUmVuZGVyZXIpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHByb3BzLnBhZ2VCdXR0b25SZW5kZXJlcih7XG4gICAgICAgICAgLi4ucGFnZVByb3BzLFxuICAgICAgICAgIG9uUGFnZUNoYW5nZTogcHJvcHMub25QYWdlQ2hhbmdlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgPyBSZWFjdC5jbG9uZUVsZW1lbnQoZWxlbWVudCwgeyBrZXk6IHBhZ2VQcm9wcy5wYWdlIH0pIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxQYWdlQnV0dG9uXG4gICAgICAgICAga2V5PXtwYWdlUHJvcHMucGFnZX1cbiAgICAgICAgICB7Li4ucGFnZVByb3BzfVxuICAgICAgICAgIG9uUGFnZUNoYW5nZT17cHJvcHMub25QYWdlQ2hhbmdlfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9KX1cbiAgPC91bD5cbik7XG5cblBhZ2luYXRvbkxpc3QuZGVmYXVsdFByb3BzID0ge1xuICBwYWdlQnV0dG9uUmVuZGVyZXI6IG51bGwsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBQYWdpbmF0b25MaXN0O1xuIiwiLyogZXNsaW50IG5vLW1peGVkLW9wZXJhdG9yczogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IENvbnN0IGZyb20gXCIuL2NvbnN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IChFeHRlbmRCYXNlOiBhbnkpID0+XG4gIGNsYXNzIFBhZ2VSZXNvbHZlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx0eXBlb2YgRXh0ZW5kQmFzZT4ge1xuICAgIGJhY2tUb1ByZXZQYWdlKCkge1xuICAgICAgY29uc3QgeyBjdXJyUGFnZSwgcGFnZVN0YXJ0SW5kZXggfSA9IHRoaXMucHJvcHM7XG4gICAgICByZXR1cm4gY3VyclBhZ2UgLSAxIDwgcGFnZVN0YXJ0SW5kZXggPyBwYWdlU3RhcnRJbmRleCA6IGN1cnJQYWdlIC0gMTtcbiAgICB9XG5cbiAgICBpbml0aWFsU3RhdGUoKSB7XG4gICAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5jYWxjdWxhdGVUb3RhbFBhZ2UoKTtcbiAgICAgIGNvbnN0IGxhc3RQYWdlID0gdGhpcy5jYWxjdWxhdGVMYXN0UGFnZSh0b3RhbFBhZ2VzKTtcbiAgICAgIHJldHVybiB7IHRvdGFsUGFnZXMsIGxhc3RQYWdlIH07XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlVG90YWxQYWdlKFxuICAgICAgc2l6ZVBlclBhZ2UgPSB0aGlzLnByb3BzLmN1cnJTaXplUGVyUGFnZSxcbiAgICAgIGRhdGFTaXplID0gdGhpcy5wcm9wcy5kYXRhU2l6ZVxuICAgICkge1xuICAgICAgcmV0dXJuIE1hdGguY2VpbChkYXRhU2l6ZSAvIHNpemVQZXJQYWdlKTtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVMYXN0UGFnZSh0b3RhbFBhZ2VzOiBhbnkpIHtcbiAgICAgIGNvbnN0IHsgcGFnZVN0YXJ0SW5kZXggfSA9IHRoaXMucHJvcHM7XG4gICAgICByZXR1cm4gcGFnZVN0YXJ0SW5kZXggKyB0b3RhbFBhZ2VzIC0gMTtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVGcm9tVG8oKSB7XG4gICAgICBjb25zdCB7IGRhdGFTaXplLCBjdXJyUGFnZSwgY3VyclNpemVQZXJQYWdlLCBwYWdlU3RhcnRJbmRleCB9ID1cbiAgICAgICAgdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IG9mZnNldCA9IE1hdGguYWJzKENvbnN0LlBBR0VfU1RBUlRfSU5ERVggLSBwYWdlU3RhcnRJbmRleCk7XG5cbiAgICAgIGxldCBmcm9tID0gKGN1cnJQYWdlIC0gcGFnZVN0YXJ0SW5kZXgpICogY3VyclNpemVQZXJQYWdlO1xuICAgICAgZnJvbSA9IGRhdGFTaXplID09PSAwID8gMCA6IGZyb20gKyAxO1xuICAgICAgbGV0IHRvID0gTWF0aC5taW4oY3VyclNpemVQZXJQYWdlICogKGN1cnJQYWdlICsgb2Zmc2V0KSwgZGF0YVNpemUpO1xuICAgICAgaWYgKHRvID4gZGF0YVNpemUpIHRvID0gZGF0YVNpemU7XG5cbiAgICAgIHJldHVybiBbZnJvbSwgdG9dO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZVBhZ2VzKHRvdGFsUGFnZXM6IGFueSwgbGFzdFBhZ2U6IGFueSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjdXJyUGFnZSxcbiAgICAgICAgcGFnaW5hdGlvblNpemUsXG4gICAgICAgIHBhZ2VTdGFydEluZGV4LFxuICAgICAgICB3aXRoRmlyc3RBbmRMYXN0LFxuICAgICAgICBmaXJzdFBhZ2VUZXh0LFxuICAgICAgICBwcmVQYWdlVGV4dCxcbiAgICAgICAgbmV4dFBhZ2VUZXh0LFxuICAgICAgICBsYXN0UGFnZVRleHQsXG4gICAgICAgIGFsd2F5c1Nob3dBbGxCdG5zLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGxldCBwYWdlczogYW55ID0gW107XG4gICAgICBsZXQgZW5kUGFnZSA9IHRvdGFsUGFnZXM7XG4gICAgICBpZiAoZW5kUGFnZSA8PSAwKSByZXR1cm4gW107XG5cbiAgICAgIGxldCBzdGFydFBhZ2UgPSBNYXRoLm1heChcbiAgICAgICAgY3VyclBhZ2UgLSBNYXRoLmZsb29yKHBhZ2luYXRpb25TaXplIC8gMiksXG4gICAgICAgIHBhZ2VTdGFydEluZGV4XG4gICAgICApO1xuICAgICAgZW5kUGFnZSA9IHN0YXJ0UGFnZSArIHBhZ2luYXRpb25TaXplIC0gMTtcblxuICAgICAgaWYgKGVuZFBhZ2UgPiBsYXN0UGFnZSkge1xuICAgICAgICBlbmRQYWdlID0gbGFzdFBhZ2U7XG4gICAgICAgIHN0YXJ0UGFnZSA9IGVuZFBhZ2UgLSBwYWdpbmF0aW9uU2l6ZSArIDE7XG4gICAgICB9XG5cbiAgICAgIGlmIChhbHdheXNTaG93QWxsQnRucykge1xuICAgICAgICBpZiAod2l0aEZpcnN0QW5kTGFzdCkge1xuICAgICAgICAgIHBhZ2VzID0gW2ZpcnN0UGFnZVRleHQsIHByZVBhZ2VUZXh0XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYWdlcyA9IFtwcmVQYWdlVGV4dF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBzdGFydFBhZ2UgIT09IHBhZ2VTdGFydEluZGV4ICYmXG4gICAgICAgIHRvdGFsUGFnZXMgPiBwYWdpbmF0aW9uU2l6ZSAmJlxuICAgICAgICB3aXRoRmlyc3RBbmRMYXN0ICYmXG4gICAgICAgIHBhZ2VzLmxlbmd0aCA9PT0gMFxuICAgICAgKSB7XG4gICAgICAgIHBhZ2VzID0gW2ZpcnN0UGFnZVRleHQsIHByZVBhZ2VUZXh0XTtcbiAgICAgIH0gZWxzZSBpZiAodG90YWxQYWdlcyA+IDEgJiYgcGFnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHBhZ2VzID0gW3ByZVBhZ2VUZXh0XTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0UGFnZTsgaSA8PSBlbmRQYWdlOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKGkgPj0gcGFnZVN0YXJ0SW5kZXgpIHBhZ2VzLnB1c2goaSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhbHdheXNTaG93QWxsQnRucyB8fCAoZW5kUGFnZSA8PSBsYXN0UGFnZSAmJiBwYWdlcy5sZW5ndGggPiAxKSkge1xuICAgICAgICBwYWdlcy5wdXNoKG5leHRQYWdlVGV4dCk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIChlbmRQYWdlICE9PSBsYXN0UGFnZSAmJiB3aXRoRmlyc3RBbmRMYXN0KSB8fFxuICAgICAgICAod2l0aEZpcnN0QW5kTGFzdCAmJiBhbHdheXNTaG93QWxsQnRucylcbiAgICAgICkge1xuICAgICAgICBwYWdlcy5wdXNoKGxhc3RQYWdlVGV4dCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmICgoZW5kUGFnZSA8PSBsYXN0UGFnZSAmJiBwYWdlcy5sZW5ndGggPiAxKSB8fCBhbHdheXNTaG93QWxsQnRucykge1xuICAgICAgLy8gICBwYWdlcy5wdXNoKG5leHRQYWdlVGV4dCk7XG4gICAgICAvLyB9XG4gICAgICAvLyBpZiAoZW5kUGFnZSAhPT0gbGFzdFBhZ2UgJiYgd2l0aEZpcnN0QW5kTGFzdCkge1xuICAgICAgLy8gICBwYWdlcy5wdXNoKGxhc3RQYWdlVGV4dCk7XG4gICAgICAvLyB9XG5cbiAgICAgIHJldHVybiBwYWdlcztcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVQYWdlU3RhdHVzKHBhZ2VzID0gW10sIGxhc3RQYWdlOiBhbnksIGRpc2FibGVQYWdlVGl0bGUgPSBmYWxzZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjdXJyUGFnZSxcbiAgICAgICAgcGFnZVN0YXJ0SW5kZXgsXG4gICAgICAgIGZpcnN0UGFnZVRleHQsXG4gICAgICAgIHByZVBhZ2VUZXh0LFxuICAgICAgICBuZXh0UGFnZVRleHQsXG4gICAgICAgIGxhc3RQYWdlVGV4dCxcbiAgICAgICAgYWx3YXlzU2hvd0FsbEJ0bnMsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGlzU3RhcnQgPSAocGFnZTogYW55KSA9PlxuICAgICAgICBjdXJyUGFnZSA9PT0gcGFnZVN0YXJ0SW5kZXggJiZcbiAgICAgICAgKHBhZ2UgPT09IGZpcnN0UGFnZVRleHQgfHwgcGFnZSA9PT0gcHJlUGFnZVRleHQpO1xuICAgICAgY29uc3QgaXNFbmQgPSAocGFnZTogYW55KSA9PlxuICAgICAgICBjdXJyUGFnZSA9PT0gbGFzdFBhZ2UgJiZcbiAgICAgICAgKHBhZ2UgPT09IG5leHRQYWdlVGV4dCB8fCBwYWdlID09PSBsYXN0UGFnZVRleHQpO1xuXG4gICAgICByZXR1cm4gcGFnZXNcbiAgICAgICAgLmZpbHRlcigocGFnZSkgPT4ge1xuICAgICAgICAgIGlmIChhbHdheXNTaG93QWxsQnRucykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAhKGlzU3RhcnQocGFnZSkgfHwgaXNFbmQocGFnZSkpO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKChwYWdlKSA9PiB7XG4gICAgICAgICAgbGV0IHRpdGxlOiBhbnk7XG4gICAgICAgICAgY29uc3QgYWN0aXZlID0gcGFnZSA9PT0gY3VyclBhZ2U7XG4gICAgICAgICAgY29uc3QgZGlzYWJsZWQgPSBpc1N0YXJ0KHBhZ2UpIHx8IGlzRW5kKHBhZ2UpO1xuXG4gICAgICAgICAgaWYgKHBhZ2UgPT09IG5leHRQYWdlVGV4dCkge1xuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLnByb3BzLm5leHRQYWdlVGl0bGU7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYWdlID09PSBwcmVQYWdlVGV4dCkge1xuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLnByb3BzLnByZVBhZ2VUaXRsZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBhZ2UgPT09IGZpcnN0UGFnZVRleHQpIHtcbiAgICAgICAgICAgIHRpdGxlID0gdGhpcy5wcm9wcy5maXJzdFBhZ2VUaXRsZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBhZ2UgPT09IGxhc3RQYWdlVGV4dCkge1xuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLnByb3BzLmxhc3RQYWdlVGl0bGU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpdGxlID0gYCR7cGFnZX1gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHBhZ2VSZXN1bHQgPSB7IHBhZ2UsIGFjdGl2ZSwgZGlzYWJsZWQsIHRpdGxlIH07XG4gICAgICAgICAgaWYgKCFkaXNhYmxlUGFnZVRpdGxlKSB7XG4gICAgICAgICAgICBwYWdlUmVzdWx0LnRpdGxlID0gdGl0bGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBwYWdlUmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVTaXplUGVyUGFnZVN0YXR1cygpIHtcbiAgICAgIGNvbnN0IHsgc2l6ZVBlclBhZ2VMaXN0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIHNpemVQZXJQYWdlTGlzdC5tYXAoKF9zaXplUGVyUGFnZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2VUZXh0ID1cbiAgICAgICAgICB0eXBlb2YgX3NpemVQZXJQYWdlLnRleHQgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgID8gX3NpemVQZXJQYWdlLnRleHRcbiAgICAgICAgICAgIDogX3NpemVQZXJQYWdlO1xuICAgICAgICBjb25zdCBwYWdlTnVtYmVyID1cbiAgICAgICAgICB0eXBlb2YgX3NpemVQZXJQYWdlLnZhbHVlICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICA/IF9zaXplUGVyUGFnZS52YWx1ZVxuICAgICAgICAgICAgOiBfc2l6ZVBlclBhZ2U7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGV4dDogYCR7cGFnZVRleHR9YCxcbiAgICAgICAgICBwYWdlOiBwYWdlTnVtYmVyLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBuby1sb25lbHktaWY6IDAgKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBQYWdpbmF0aW9uRGF0YVByb3ZpZGVyUHJvcHMgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCBDb25zdCBmcm9tIFwiLi9jb25zdFwiO1xuaW1wb3J0IHsgYWxpZ25QYWdlLCBnZXRCeUN1cnJQYWdlIH0gZnJvbSBcIi4vcGFnZVwiO1xuaW1wb3J0IFBhZ2luYXRpb24gZnJvbSBcIi4vcGFnaW5hdGlvblwiO1xuaW1wb3J0IGNyZWF0ZUJhc2VDb250ZXh0IGZyb20gXCIuL3N0YXRlLWNvbnRleHRcIjtcblxuY29uc3QgeyBQcm92aWRlciB9ID0gY3JlYXRlQmFzZUNvbnRleHQoKTtcblxuY29uc3QgUGFnaW5hdGlvbkRhdGFDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxhbnk+KG51bGwpO1xuXG5jbGFzcyBQYWdpbmF0aW9uRGF0YVByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXIge1xuXG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKG5leHRQcm9wczogUGFnaW5hdGlvbkRhdGFQcm92aWRlclByb3BzKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKG5leHRQcm9wcyk7XG4gICAgY29uc3QgeyBjdXJyU2l6ZVBlclBhZ2UgfSA9IHRoaXM7XG4gICAgY29uc3QgeyBjdXN0b20sIG9uUGFnZUNoYW5nZSB9ID0gbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucztcblxuICAgIGNvbnN0IHBhZ2VTdGFydEluZGV4ID1cbiAgICAgIHR5cGVvZiBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zLnBhZ2VTdGFydEluZGV4ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucy5wYWdlU3RhcnRJbmRleFxuICAgICAgICA6IENvbnN0LlBBR0VfU1RBUlRfSU5ERVg7XG5cbiAgICAvLyB1c2VyIHNob3VsZCBhbGlnbiB0aGUgcGFnZSB3aGVuIHRoZSBwYWdlIGlzIG5vdCBmaXQgdG8gdGhlIGRhdGEgc2l6ZSB3aGVuIHJlbW90ZSBlbmFibGVcbiAgICBpZiAoIXRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKCkgJiYgIWN1c3RvbSkge1xuICAgICAgY29uc3QgbmV3UGFnZSA9IGFsaWduUGFnZShcbiAgICAgICAgbmV4dFByb3BzLmRhdGEubGVuZ3RoLFxuICAgICAgICB0aGlzLnByb3BzLmRhdGEubGVuZ3RoLFxuICAgICAgICB0aGlzLmN1cnJQYWdlLFxuICAgICAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgIHBhZ2VTdGFydEluZGV4XG4gICAgICApO1xuXG4gICAgICBpZiAodGhpcy5jdXJyUGFnZSAhPT0gbmV3UGFnZSkge1xuICAgICAgICBpZiAob25QYWdlQ2hhbmdlKSB7XG4gICAgICAgICAgb25QYWdlQ2hhbmdlKG5ld1BhZ2UsIGN1cnJTaXplUGVyUGFnZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyUGFnZSA9IG5ld1BhZ2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIG5leHRQcm9wcy5vbkRhdGFTaXplQ2hhbmdlICYmXG4gICAgICBuZXh0UHJvcHMuZGF0YS5sZW5ndGggIT09IHRoaXMucHJvcHMuZGF0YS5sZW5ndGhcbiAgICApIHtcbiAgICAgIG5leHRQcm9wcy5vbkRhdGFTaXplQ2hhbmdlKHsgZGF0YVNpemU6IHRoaXMucHJvcHMuZGF0YS5sZW5ndGggfSk7XG4gICAgfVxuICB9XG5cbiAgaXNSZW1vdGVQYWdpbmF0aW9uID0gKCkgPT4gdGhpcy5wcm9wcy5pc1JlbW90ZVBhZ2luYXRpb24oKTtcblxuICByZW5kZXJEZWZhdWx0UGFnaW5hdGlvbiA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGFnaW5hdGlvbiEub3B0aW9ucyEuY3VzdG9tKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBhZ2U6IGN1cnJQYWdlLFxuICAgICAgICBzaXplUGVyUGFnZTogY3VyclNpemVQZXJQYWdlLFxuICAgICAgICBkYXRhU2l6ZSxcbiAgICAgICAgLi4ucmVzdFxuICAgICAgfSA9IHRoaXMuZ2V0UGFnaW5hdGlvblByb3BzKCk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8UGFnaW5hdGlvblxuICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgIGtleT1cInBhZ2luYXRpb25cIlxuICAgICAgICAgIGRhdGFTaXplPXtkYXRhU2l6ZSB8fCB0aGlzLnByb3BzLmRhdGEubGVuZ3RofVxuICAgICAgICAgIGN1cnJQYWdlPXtjdXJyUGFnZX1cbiAgICAgICAgICBjdXJyU2l6ZVBlclBhZ2U9e2N1cnJTaXplUGVyUGFnZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uIS5vcHRpb25zITtcbiAgICBjb25zdCBjdXJyU2l6ZVBlclBhZ2UgPSBvcHRpb25zLnNpemVQZXJQYWdlID8/IHRoaXMuY3VyclNpemVQZXJQYWdlO1xuICAgIGNvbnN0IHBhZ2VTdGFydEluZGV4ID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLnBhZ2VTdGFydEluZGV4ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gQ29uc3QuUEFHRV9TVEFSVF9JTkRFWFxuICAgICAgICA6IG9wdGlvbnMucGFnZVN0YXJ0SW5kZXg7XG5cbiAgICAvLyB3b3JrYXJvdW5kIGFuIGlzc3VlIHdpdGggY3VyclBhZ2UgaXMgbm90IDEsIGJ1dCBkYXRhIHNpemUgaXMgbGVzcyB0aGFuIGN1cnJTaXplUGVyUGFnZVxuICAgIC8vIHdoZW4gU2VhcmNoQmFyIGlucHV0IGNoYW5nZWQsIGNvbXBvbmVudERpZFVwZGF0ZSBpbiB0aGUgU0FNRSBUb29sa2l0IHVwZGF0ZWQgKHNlYXJjaGluZyB0aGUgZGF0YSlcbiAgICAvLyBzZWNvbmRseSBhZnRlciBjb21wb25lbnREaWRVcGRhdGUgKGNhbGN1bGF0aW5nIGN1cnJQYWdlKSBpbiB0aGlzIHBhY2thZ2UgdHJpZ2dlcmVkIGF0IGZpcnN0XG4gICAgbGV0IHsgZGF0YSB9ID0gdGhpcy5wcm9wcztcbiAgICBsZXQgY3VyclBhZ2UgPSBvcHRpb25zLnBhZ2UgPz8gdGhpcy5jdXJyUGFnZTtcblxuICAgIGlmICghdGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKSAmJiBkYXRhLmxlbmd0aCA8PSAoY3VyclBhZ2UgLSAxKSAqIGN1cnJTaXplUGVyUGFnZSkge1xuICAgICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGguZmxvb3IoZGF0YS5sZW5ndGggLyBjdXJyU2l6ZVBlclBhZ2UpICsgMTtcbiAgICAgIGN1cnJQYWdlID0gY3VyclBhZ2UgPiB0b3RhbFBhZ2VzID8gdG90YWxQYWdlcyA6IGN1cnJQYWdlO1xuICAgICAgdGhpcy5jdXJyUGFnZSA9IGN1cnJQYWdlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpKSB7XG4gICAgICB0aGlzLmN1cnJQYWdlID0gY3VyclBhZ2U7XG4gICAgfVxuXG4gICAgZGF0YSA9IHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKClcbiAgICAgID8gZGF0YVxuICAgICAgOiBnZXRCeUN1cnJQYWdlKGRhdGEsIGN1cnJQYWdlLCBjdXJyU2l6ZVBlclBhZ2UsIHBhZ2VTdGFydEluZGV4KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8UGFnaW5hdGlvbkRhdGFDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgIHZhbHVlPXt7IGRhdGEsIHNldFJlbW90ZUVtaXR0ZXI6IHRoaXMuc2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIgfX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgIHt0aGlzLnJlbmRlckRlZmF1bHRQYWdpbmF0aW9uKCl9XG4gICAgICA8L1BhZ2luYXRpb25EYXRhQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+ICh7XG4gIFByb3ZpZGVyOiBQYWdpbmF0aW9uRGF0YVByb3ZpZGVyLFxuICBDb25zdW1lcjogUGFnaW5hdGlvbkRhdGFDb250ZXh0LkNvbnN1bWVyLFxufSk7XG4iLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIFBhZ2VCdXR0b25Qcm9wcyB7XG4gIG9uUGFnZUNoYW5nZTogKHBhZ2U6IGFueSkgPT4gdm9pZDtcbiAgcGFnZTogUmVhY3QuUmVhY3ROb2RlIHwgbnVtYmVyIHwgc3RyaW5nO1xuICBhY3RpdmU6IGJvb2xlYW47XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xufVxuXG5jbGFzcyBQYWdlQnV0dG9uIGV4dGVuZHMgQ29tcG9uZW50PFBhZ2VCdXR0b25Qcm9wcz4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gIH1cblxuICBoYW5kbGVDbGljayhlOiBhbnkpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wcm9wcy5vblBhZ2VDaGFuZ2UodGhpcy5wcm9wcy5wYWdlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHBhZ2UsIHRpdGxlLCBhY3RpdmUsIGRpc2FibGVkLCBjbGFzc05hbWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY2xhc3NlcyA9IGNzKFxuICAgICAge1xuICAgICAgICBhY3RpdmUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBcInBhZ2UtaXRlbVwiOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGNsYXNzTmFtZVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGxpIGNsYXNzTmFtZT17Y2xhc3Nlc30gdGl0bGU9e3RpdGxlfT5cbiAgICAgICAgPGEgaHJlZj1cIiNcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfSBjbGFzc05hbWU9XCJwYWdlLWxpbmtcIj5cbiAgICAgICAgICB7cGFnZX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICApO1xuICB9XG59XG5cblxuXG5leHBvcnQgZGVmYXVsdCBQYWdlQnV0dG9uO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHBhZ2luYXRpb25IYW5kbGVyIGZyb20gXCIuL3BhZ2luYXRpb24taGFuZGxlclwiO1xuaW1wb3J0IFNpemVQZXJQYWdlRHJvcGRvd24gZnJvbSBcIi4vc2l6ZS1wZXItcGFnZS1kcm9wZG93blwiO1xuaW1wb3J0IHNpemVQZXJQYWdlRHJvcGRvd25BZGFwdGVyIGZyb20gXCIuL3NpemUtcGVyLXBhZ2UtZHJvcGRvd24tYWRhcHRlclwiO1xuaW1wb3J0IHN0YW5kYWxvbmVBZGFwdGVyIGZyb20gXCIuL3N0YW5kYWxvbmUtYWRhcHRlclwiO1xuXG5jb25zdCBTaXplUGVyUGFnZURyb3Bkb3duU3RhbmRhbG9uZSA9IChwcm9wczogYW55KSA9PiAoXG4gIDxTaXplUGVyUGFnZURyb3Bkb3duIHsuLi5wcm9wc30gLz5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IHN0YW5kYWxvbmVBZGFwdGVyKFxuICBwYWdpbmF0aW9uSGFuZGxlcihzaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlcihTaXplUGVyUGFnZURyb3Bkb3duU3RhbmRhbG9uZSkpXG4pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXzsiLCJcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIFBhZ2luYXRpb25Ub3RhbFByb3BzIHtcbiAgZnJvbTogbnVtYmVyO1xuICB0bzogbnVtYmVyO1xuICBkYXRhU2l6ZTogbnVtYmVyO1xuICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlcj86IChmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIGRhdGFTaXplOiBudW1iZXIpID0+IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGw7XG59XG5cbmNvbnN0IFBhZ2luYXRpb25Ub3RhbCA9IChwcm9wczogUGFnaW5hdGlvblRvdGFsUHJvcHMpID0+IHtcbiAgaWYgKHByb3BzLnBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyKSB7XG4gICAgcmV0dXJuIHByb3BzLnBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyKHByb3BzLmZyb20sIHByb3BzLnRvLCBwcm9wcy5kYXRhU2l6ZSk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8c3BhbiBjbGFzc05hbWU9XCJyZWFjdC1ib290c3RyYXAtdGFibGUtcGFnaW5hdGlvbi10b3RhbFwiPlxuICAgICAgJm5ic3A7U2hvd2luZyByb3dzIHtwcm9wcy5mcm9tfSB0byZuYnNwO3twcm9wcy50b30gb2YmbmJzcDtcbiAgICAgIHtwcm9wcy5kYXRhU2l6ZX1cbiAgICA8L3NwYW4+XG4gICk7XG59O1xuXG5QYWdpbmF0aW9uVG90YWwuZGVmYXVsdFByb3BzID0ge1xuICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlcjogdW5kZWZpbmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgUGFnaW5hdGlvblRvdGFsO1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgUGFnaW5hdGlvbkNoaWxkUHJvcHMgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCBwYWdlUmVzb2x2ZXIgZnJvbSBcIi4vcGFnZS1yZXNvbHZlclwiO1xuaW1wb3J0IFNpemVQZXJQYWdlRHJvcERvd24gZnJvbSBcIi4vc2l6ZS1wZXItcGFnZS1kcm9wZG93blwiO1xuXG5jb25zdCBzaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlciA9IChXcmFwcGVkQ29tcG9uZW50OiBhbnkpID0+XG4gIGNsYXNzIFNpemVQZXJQYWdlRHJvcGRvd25BZGFwdGVyIGV4dGVuZHMgcGFnZVJlc29sdmVyKENvbXBvbmVudCkge1xuICAgIHN0YXRlID0geyBkcm9wZG93bk9wZW46IGZhbHNlIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogUGFnaW5hdGlvbkNoaWxkUHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIHRoaXMuY2xvc2VEcm9wRG93biA9IHRoaXMuY2xvc2VEcm9wRG93bi5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy50b2dnbGVEcm9wRG93biA9IHRoaXMudG9nZ2xlRHJvcERvd24uYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLnN0YXRlID0geyBkcm9wZG93bk9wZW46IGZhbHNlIH07XG4gICAgfVxuXG4gICAgdG9nZ2xlRHJvcERvd24oKSB7XG4gICAgICBjb25zdCBkcm9wZG93bk9wZW4gPSAhdGhpcy5zdGF0ZS5kcm9wZG93bk9wZW47XG4gICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGRyb3Bkb3duT3BlbiB9KSk7XG4gICAgfVxuXG4gICAgY2xvc2VEcm9wRG93bigpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgZHJvcGRvd25PcGVuOiBmYWxzZSB9KSk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2Uoc2l6ZVBlclBhZ2U6IGFueSkge1xuICAgICAgdGhpcy5wcm9wcy5vblNpemVQZXJQYWdlQ2hhbmdlKHNpemVQZXJQYWdlKTtcbiAgICAgIHRoaXMuY2xvc2VEcm9wRG93bigpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdGFibGVJZCxcbiAgICAgICAgYm9vdHN0cmFwNCxcbiAgICAgICAgc2l6ZVBlclBhZ2VMaXN0LFxuICAgICAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgIGhpZGVTaXplUGVyUGFnZSxcbiAgICAgICAgc2l6ZVBlclBhZ2VSZW5kZXJlcixcbiAgICAgICAgc2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcixcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBkcm9wZG93bk9wZW46IG9wZW4gfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGlmIChzaXplUGVyUGFnZUxpc3QubGVuZ3RoID4gMSAmJiAhaGlkZVNpemVQZXJQYWdlKSB7XG4gICAgICAgIGlmIChzaXplUGVyUGFnZVJlbmRlcmVyKSB7XG4gICAgICAgICAgcmV0dXJuIHNpemVQZXJQYWdlUmVuZGVyZXIoe1xuICAgICAgICAgICAgb3B0aW9uczogdGhpcy5jYWxjdWxhdGVTaXplUGVyUGFnZVN0YXR1cygpLFxuICAgICAgICAgICAgY3VyclNpemVQZXJQYWdlOiBgJHtjdXJyU2l6ZVBlclBhZ2V9YCxcbiAgICAgICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2U6IHRoaXMuaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8V3JhcHBlZENvbXBvbmVudFxuICAgICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgICBjdXJyU2l6ZVBlclBhZ2U9e2Ake2N1cnJTaXplUGVyUGFnZX1gfVxuICAgICAgICAgICAgb3B0aW9ucz17dGhpcy5jYWxjdWxhdGVTaXplUGVyUGFnZVN0YXR1cygpfVxuICAgICAgICAgICAgb3B0aW9uUmVuZGVyZXI9e3NpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXJ9XG4gICAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlfVxuICAgICAgICAgICAgb25DbGljaz17dGhpcy50b2dnbGVEcm9wRG93bn1cbiAgICAgICAgICAgIG9uQmx1cj17dGhpcy5jbG9zZURyb3BEb3dufVxuICAgICAgICAgICAgb3Blbj17b3Blbn1cbiAgICAgICAgICAgIHRhYmxlSWQ9e3RhYmxlSWR9XG4gICAgICAgICAgICBib290c3RyYXA0PXtib290c3RyYXA0fVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbmV4cG9ydCBjb25zdCBTaXplUGVyUGFnZURyb3Bkb3duV2l0aEFkYXB0ZXIgPVxuICBzaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlcihTaXplUGVyUGFnZURyb3BEb3duKTtcbmV4cG9ydCBkZWZhdWx0IHNpemVQZXJQYWdlRHJvcGRvd25BZGFwdGVyO1xuIiwiaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBTaXplUGVyUGFnZU9wdGlvbiBmcm9tIFwiLi9zaXplLXBlci1wYWdlLW9wdGlvblwiO1xuXG5jb25zdCBzaXplUGVyUGFnZURlZmF1bHRDbGFzcyA9IFwicmVhY3QtYnMtdGFibGUtc2l6ZVBlclBhZ2UtZHJvcGRvd25cIjtcblxuY29uc3Qgc2l6ZVBlclBhZ2VEcm9wRG93bkRlZmF1bHRQcm9wcyA9IHtcbiAgb3BlbjogZmFsc2UsXG4gIGhpZGRlbjogZmFsc2UsXG4gIGJ0bkNvbnRleHR1YWw6IFwiYnRuLWRlZmF1bHQgYnRuLXNlY29uZGFyeVwiLFxuICB2YXJpYXRpb246IFwiZHJvcGRvd25cIixcbiAgY2xhc3NOYW1lOiBcIlwiLFxuICBvcHRpb25SZW5kZXJlcjogbnVsbCxcbiAgYm9vdHN0cmFwNDogZmFsc2UsXG4gIHRhYmxlSWQ6IG51bGwsXG59O1xuXG5pbnRlcmZhY2UgU2l6ZVBlclBhZ2VEcm9wRG93blByb3BzIHtcbiAgY3VyclNpemVQZXJQYWdlOiBzdHJpbmcgfCBudW1iZXI7XG4gIG9wdGlvbnM6IEFycmF5PHtcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgcGFnZTogbnVtYmVyO1xuICB9PjtcbiAgb25DbGljazogKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gIG9uQmx1cjogKGU6IFJlYWN0LkZvY3VzRXZlbnQpID0+IHZvaWQ7XG4gIG9uU2l6ZVBlclBhZ2VDaGFuZ2U6IChzaXplUGVyUGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICBib290c3RyYXA0PzogYm9vbGVhbjtcbiAgdGFibGVJZD86IHN0cmluZztcbiAgb3Blbj86IGJvb2xlYW47XG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIGJ0bkNvbnRleHR1YWw/OiBzdHJpbmc7XG4gIHZhcmlhdGlvbj86IFwiZHJvcGRvd25cIiB8IFwiZHJvcHVwXCI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgb3B0aW9uUmVuZGVyZXI/OiAocHJvcHM6IGFueSkgPT4gUmVhY3QuUmVhY3RFbGVtZW50IHwgbnVsbDtcbn1cblxuY29uc3QgU2l6ZVBlclBhZ2VEcm9wRG93biA9IChwcm9wczogU2l6ZVBlclBhZ2VEcm9wRG93blByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvcGVuLFxuICAgIHRhYmxlSWQsXG4gICAgaGlkZGVuLFxuICAgIG9uQ2xpY2ssXG4gICAgb25CbHVyLFxuICAgIG9wdGlvbnMsXG4gICAgY2xhc3NOYW1lLFxuICAgIHZhcmlhdGlvbixcbiAgICBib290c3RyYXA0LFxuICAgIGJ0bkNvbnRleHR1YWwsXG4gICAgb3B0aW9uUmVuZGVyZXIsXG4gICAgY3VyclNpemVQZXJQYWdlLFxuICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2UsXG4gIH0gPSB7IC4uLnNpemVQZXJQYWdlRHJvcERvd25EZWZhdWx0UHJvcHMsIC4uLnByb3BzIH07XG5cbiAgY29uc3Qgb3BlbkNsYXNzID0gb3BlbiA/IFwib3BlbiBzaG93XCIgOiBcIlwiO1xuICBjb25zdCBkcm9wZG93bkNsYXNzZXMgPSBjcyhcbiAgICBvcGVuQ2xhc3MsXG4gICAgc2l6ZVBlclBhZ2VEZWZhdWx0Q2xhc3MsXG4gICAgdmFyaWF0aW9uLFxuICAgIGNsYXNzTmFtZVxuICApO1xuXG4gIGNvbnN0IGlkID0gdGFibGVJZCA/IGAke3RhYmxlSWR9LXBhZ2VEcm9wRG93bmAgOiBcInBhZ2VEcm9wRG93blwiO1xuXG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIHN0eWxlPXt7IHZpc2liaWxpdHk6IGhpZGRlbiA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIiB9fVxuICAgICAgY2xhc3NOYW1lPXtkcm9wZG93bkNsYXNzZXN9XG4gICAgICBkYXRhLXRlc3RpZD1cInNpemUtcGVyLXBhZ2UtZHJvcGRvd25cIlxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXtgYnRuICR7YnRuQ29udGV4dHVhbH0gZHJvcGRvd24tdG9nZ2xlYH1cbiAgICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9e29wZW59XG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgPlxuICAgICAgICB7Y3VyclNpemVQZXJQYWdlfXtcIiBcIn1cbiAgICAgICAge2Jvb3RzdHJhcDQgPyBudWxsIDogKFxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2FyZXRcIiAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPHVsXG4gICAgICAgIGNsYXNzTmFtZT17YGRyb3Bkb3duLW1lbnUgJHtvcGVuQ2xhc3N9YH1cbiAgICAgICAgcm9sZT1cIm1lbnVcIlxuICAgICAgICBhcmlhLWxhYmVsbGVkYnk9e2lkfVxuICAgICAgPlxuICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvblJlbmRlcmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uUmVuZGVyZXIoe1xuICAgICAgICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxTaXplUGVyUGFnZU9wdGlvblxuICAgICAgICAgICAgICB7Li4ub3B0aW9ufVxuICAgICAgICAgICAgICBrZXk9e29wdGlvbi50ZXh0fVxuICAgICAgICAgICAgICBib290c3RyYXA0PXtib290c3RyYXA0fVxuICAgICAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlPXtvblNpemVQZXJQYWdlQ2hhbmdlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvdWw+XG4gICAgPC9zcGFuPlxuICApO1xufTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IFNpemVQZXJQYWdlRHJvcERvd247XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUGFnaW5hdGlvbkhhbmRsZXIgZnJvbSBcIi4vcGFnaW5hdGlvbi1oYW5kbGVyXCI7XG5pbXBvcnQgUGFnaW5hdGlvbkxpc3QgZnJvbSBcIi4vcGFnaW5hdGlvbi1saXN0XCI7XG5pbXBvcnQgcGFnaW5hdGlvbkxpc3RBZGFwdGVyIGZyb20gXCIuL3BhZ2luYXRpb24tbGlzdC1hZGFwdGVyXCI7XG5pbXBvcnQgc3RhbmRhbG9uZUFkYXB0ZXIgZnJvbSBcIi4vc3RhbmRhbG9uZS1hZGFwdGVyXCI7XG5cbmNvbnN0IFBhZ2luYXRpb25MaXN0U3RhbmRhbG9uZSA9IChwcm9wczogYW55KSA9PiA8UGFnaW5hdGlvbkxpc3Qgey4uLnByb3BzfSAvPjtcblxuZXhwb3J0IGRlZmF1bHQgc3RhbmRhbG9uZUFkYXB0ZXIoXG4gIFBhZ2luYXRpb25IYW5kbGVyKHBhZ2luYXRpb25MaXN0QWRhcHRlcihQYWdpbmF0aW9uTGlzdFN0YW5kYWxvbmUpKVxuKTtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBwYWdlUmVzb2x2ZXIgZnJvbSBcIi4vcGFnZS1yZXNvbHZlclwiO1xuaW1wb3J0IFBhZ2luYXRpb25Ub3RhbCBmcm9tIFwiLi9wYWdpbmF0aW9uLXRvdGFsXCI7XG5cbmNvbnN0IHBhZ2luYXRpb25Ub3RhbEFkYXB0ZXIgPSAoV3JhcHBlZENvbXBvbmVudDogYW55KSA9PlxuICBjbGFzcyBQYWdpbmF0aW9uVG90YWxBZGFwdGVyIGV4dGVuZHMgcGFnZVJlc29sdmVyKENvbXBvbmVudCkge1xuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IFtmcm9tLCB0b10gPSB0aGlzLmNhbGN1bGF0ZUZyb21UbygpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFdyYXBwZWRDb21wb25lbnRcbiAgICAgICAgICBmcm9tPXtmcm9tfVxuICAgICAgICAgIHRvPXt0b31cbiAgICAgICAgICBkYXRhU2l6ZT17dGhpcy5wcm9wcy5kYXRhU2l6ZX1cbiAgICAgICAgICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlcj17dGhpcy5wcm9wcy5wYWdpbmF0aW9uVG90YWxSZW5kZXJlcn1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG5leHBvcnQgY29uc3QgUGFnaW5hdGlvblRvdGFsV2l0aEFkYXB0ZXIgPVxuICBwYWdpbmF0aW9uVG90YWxBZGFwdGVyKFBhZ2luYXRpb25Ub3RhbCk7XG5leHBvcnQgZGVmYXVsdCBwYWdpbmF0aW9uVG90YWxBZGFwdGVyO1xuIiwiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBTaXplUGVyUGFnZU9wdGlvblByb3BzIHtcbiAgdGV4dDogc3RyaW5nO1xuICBwYWdlOiBudW1iZXI7XG4gIG9uU2l6ZVBlclBhZ2VDaGFuZ2U6IChwYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gIGJvb3RzdHJhcDQ/OiBib29sZWFuO1xufVxuXG5jb25zdCBTaXplUGVyUGFnZU9wdGlvbiA9ICh7XG4gIHRleHQsXG4gIHBhZ2UsXG4gIG9uU2l6ZVBlclBhZ2VDaGFuZ2UsXG4gIGJvb3RzdHJhcDQgPSBmYWxzZSxcbn06IFNpemVQZXJQYWdlT3B0aW9uUHJvcHMpID0+XG4gIGJvb3RzdHJhcDQgPyAoXG4gICAgPGFcbiAgICAgIGhyZWY9XCIjXCJcbiAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICBjbGFzc05hbWU9XCJkcm9wZG93bi1pdGVtXCJcbiAgICAgIGRhdGEtcGFnZT17cGFnZX1cbiAgICAgIG9uTW91c2VEb3duPXsoZSkgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2UocGFnZSk7XG4gICAgICB9fVxuICAgID5cbiAgICAgIHt0ZXh0fVxuICAgIDwvYT5cbiAgKSA6IChcbiAgICA8bGkga2V5PXt0ZXh0fSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3NOYW1lPVwiZHJvcGRvd24taXRlbVwiPlxuICAgICAgPGFcbiAgICAgICAgaHJlZj1cIiNcIlxuICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgIGRhdGEtcGFnZT17cGFnZX1cbiAgICAgICAgb25Nb3VzZURvd249eyhlKSA9PiB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2UocGFnZSk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0ZXh0fVxuICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICk7XG5cblNpemVQZXJQYWdlT3B0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgYm9vdHN0cmFwNDogZmFsc2UsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBTaXplUGVyUGFnZU9wdGlvbjtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBwYWdlUmVzb2x2ZXIgZnJvbSBcIi4vcGFnZS1yZXNvbHZlclwiO1xuXG5leHBvcnQgZGVmYXVsdCAoV3JhcHBlZENvbXBvbmVudDogYW55KSA9PlxuICBjbGFzcyBQYWdpbmF0aW9uSGFuZGxlciBleHRlbmRzIHBhZ2VSZXNvbHZlcihDb21wb25lbnQpIHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICB0aGlzLmhhbmRsZUNoYW5nZVBhZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZVBhZ2UuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLnN0YXRlID0gdGhpcy5pbml0aWFsU3RhdGUoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUoY3VyclByb3BzOiBhbnkpIHtcbiAgICAgIGNvbnN0IHsgY3VyclNpemVQZXJQYWdlLCBkYXRhU2l6ZSwgdG90YWxTaXplIH0gPSBjdXJyUHJvcHM7XG4gICAgICBsZXQgdG90YWxQYWdlcyA9IDA7XG5cbiAgICAgIGlmIChcbiAgICAgICAgY3VyclNpemVQZXJQYWdlICE9PSB0aGlzLnByb3BzLmN1cnJTaXplUGVyUGFnZSB8fFxuICAgICAgICBkYXRhU2l6ZSAhPT0gdGhpcy5wcm9wcy5kYXRhU2l6ZSB8fFxuICAgICAgICB0b3RhbFNpemUgIT09IHRoaXMucHJvcHMudG90YWxTaXplXG4gICAgICApIHtcbiAgICAgICAgaWYgKGN1cnJTaXplUGVyUGFnZSAhPT0gdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UpIHtcbiAgICAgICAgICB0b3RhbFBhZ2VzID0gdGhpcy5jYWxjdWxhdGVUb3RhbFBhZ2UoXG4gICAgICAgICAgICB0aGlzLnByb3BzLmN1cnJTaXplUGVyUGFnZSxcbiAgICAgICAgICAgIHRoaXMucHJvcHMudG90YWxTaXplID8/IHRoaXMucHJvcHMuZGF0YVNpemVcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGFTaXplICE9PSB0aGlzLnByb3BzLmRhdGFTaXplKSB7XG4gICAgICAgICAgdG90YWxQYWdlcyA9IHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlKFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgICAgICB0aGlzLnByb3BzLmRhdGFTaXplXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0b3RhbFNpemUgIT09IHRoaXMucHJvcHMudG90YWxTaXplKSB7XG4gICAgICAgICAgdG90YWxQYWdlcyA9IHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlKFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRvdGFsU2l6ZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvdGFsUGFnZXMgPSB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZShcbiAgICAgICAgICB0aGlzLnByb3BzLmN1cnJTaXplUGVyUGFnZSxcbiAgICAgICAgICB0aGlzLnByb3BzLmRhdGFTaXplXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxhc3RQYWdlID0gdGhpcy5jYWxjdWxhdGVMYXN0UGFnZSh0b3RhbFBhZ2VzKTtcblxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaWYgKHRvdGFsUGFnZXMgIT09IHRoaXMuc3RhdGUudG90YWxQYWdlcyB8fCBsYXN0UGFnZSAhPT0gdGhpcy5zdGF0ZS5sYXN0UGFnZSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdG90YWxQYWdlcywgbGFzdFBhZ2UgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2Uoc2l6ZVBlclBhZ2U6IGFueSkge1xuICAgICAgY29uc3QgeyBjdXJyU2l6ZVBlclBhZ2UsIG9uU2l6ZVBlclBhZ2VDaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBzZWxlY3RlZFNpemUgPVxuICAgICAgICB0eXBlb2Ygc2l6ZVBlclBhZ2UgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICA/IHBhcnNlSW50KHNpemVQZXJQYWdlLCAxMClcbiAgICAgICAgICA6IHNpemVQZXJQYWdlO1xuICAgICAgbGV0IHsgY3VyclBhZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoc2VsZWN0ZWRTaXplICE9PSBjdXJyU2l6ZVBlclBhZ2UpIHtcbiAgICAgICAgY29uc3QgbmV3VG90YWxQYWdlcyA9IHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlKHNlbGVjdGVkU2l6ZSk7XG4gICAgICAgIGNvbnN0IG5ld0xhc3RQYWdlID0gdGhpcy5jYWxjdWxhdGVMYXN0UGFnZShuZXdUb3RhbFBhZ2VzKTtcbiAgICAgICAgaWYgKGN1cnJQYWdlID4gbmV3TGFzdFBhZ2UpIGN1cnJQYWdlID0gbmV3TGFzdFBhZ2U7XG4gICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2Uoc2VsZWN0ZWRTaXplLCBjdXJyUGFnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlUGFnZShuZXdQYWdlOiBhbnkpIHtcbiAgICAgIGxldCBwYWdlOiBhbnk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGN1cnJQYWdlLFxuICAgICAgICBwYWdlU3RhcnRJbmRleCxcbiAgICAgICAgcHJlUGFnZVRleHQsXG4gICAgICAgIG5leHRQYWdlVGV4dCxcbiAgICAgICAgbGFzdFBhZ2VUZXh0LFxuICAgICAgICBmaXJzdFBhZ2VUZXh0LFxuICAgICAgICBvblBhZ2VDaGFuZ2UsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IHsgbGFzdFBhZ2UgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGlmIChuZXdQYWdlID09PSBwcmVQYWdlVGV4dCkge1xuICAgICAgICBwYWdlID0gdGhpcy5iYWNrVG9QcmV2UGFnZSgpO1xuICAgICAgfSBlbHNlIGlmIChuZXdQYWdlID09PSBuZXh0UGFnZVRleHQpIHtcbiAgICAgICAgcGFnZSA9IGN1cnJQYWdlICsgMSA+IGxhc3RQYWdlID8gbGFzdFBhZ2UgOiBjdXJyUGFnZSArIDE7XG4gICAgICB9IGVsc2UgaWYgKG5ld1BhZ2UgPT09IGxhc3RQYWdlVGV4dCkge1xuICAgICAgICBwYWdlID0gbGFzdFBhZ2U7XG4gICAgICB9IGVsc2UgaWYgKG5ld1BhZ2UgPT09IGZpcnN0UGFnZVRleHQpIHtcbiAgICAgICAgcGFnZSA9IHBhZ2VTdGFydEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFnZSA9IHBhcnNlSW50KG5ld1BhZ2UsIDEwKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYWdlICE9PSBjdXJyUGFnZSkge1xuICAgICAgICBvblBhZ2VDaGFuZ2UocGFnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFdyYXBwZWRDb21wb25lbnRcbiAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgbGFzdFBhZ2U9e3RoaXMuc3RhdGUubGFzdFBhZ2V9XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHRvdGFsUGFnZXM9e3RoaXMuc3RhdGUudG90YWxQYWdlc31cbiAgICAgICAgICBvblBhZ2VDaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlUGFnZX1cbiAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gIH07XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5leHBvcnQgZGVmYXVsdCAoV3JhcHBlZENvbXBvbmVudDogYW55KSA9PlxuICAoeyBwYWdlLCBzaXplUGVyUGFnZSwgLi4ucmVzdCB9OiBhbnkpID0+XG4gICAgKFxuICAgICAgPFdyYXBwZWRDb21wb25lbnRcbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIGN1cnJQYWdlPXtwYWdlfVxuICAgICAgICBjdXJyU2l6ZVBlclBhZ2U9e3NpemVQZXJQYWdlfVxuICAgICAgLz5cbiAgICApO1xuIiwiaW1wb3J0IENvbnN0IGZyb20gXCIuL2NvbnN0XCI7XG5cbmNvbnN0IGdldE5vcm1hbGl6ZWRQYWdlID0gKHBhZ2U6IGFueSwgcGFnZVN0YXJ0SW5kZXg6IGFueSkgPT4ge1xuICBjb25zdCBvZmZzZXQgPSBNYXRoLmFicygxIC0gcGFnZVN0YXJ0SW5kZXgpO1xuICByZXR1cm4gcGFnZSArIG9mZnNldDtcbn07XG5cbmNvbnN0IGVuZEluZGV4ID0gKHBhZ2U6IGFueSwgc2l6ZVBlclBhZ2U6IGFueSwgcGFnZVN0YXJ0SW5kZXg6IGFueSkgPT5cbiAgZ2V0Tm9ybWFsaXplZFBhZ2UocGFnZSwgcGFnZVN0YXJ0SW5kZXgpICogc2l6ZVBlclBhZ2UgLSAxO1xuXG5jb25zdCBzdGFydEluZGV4ID0gKGVuZDogYW55LCBzaXplUGVyUGFnZTogYW55KSA9PiBlbmQgLSAoc2l6ZVBlclBhZ2UgLSAxKTtcblxuZXhwb3J0IGNvbnN0IGFsaWduUGFnZSA9IChcbiAgZGF0YVNpemU6IGFueSxcbiAgcHJldkRhdGFTaXplOiBhbnksXG4gIHBhZ2U6IGFueSxcbiAgc2l6ZVBlclBhZ2U6IGFueSxcbiAgcGFnZVN0YXJ0SW5kZXg6IGFueVxuKSA9PiB7XG4gIGlmIChwcmV2RGF0YVNpemUgPCBkYXRhU2l6ZSkgcmV0dXJuIHBhZ2U7XG4gIGlmIChwYWdlIDwgcGFnZVN0YXJ0SW5kZXgpIHJldHVybiBwYWdlU3RhcnRJbmRleDtcbiAgaWYgKGRhdGFTaXplIDw9IDApIHJldHVybiBwYWdlU3RhcnRJbmRleDtcbiAgaWYgKFxuICAgIHBhZ2UgPj0gTWF0aC5mbG9vcihkYXRhU2l6ZSAvIHNpemVQZXJQYWdlKSArIHBhZ2VTdGFydEluZGV4ICYmXG4gICAgcGFnZVN0YXJ0SW5kZXggPT09IDFcbiAgKSB7XG4gICAgcmV0dXJuIE1hdGguY2VpbChkYXRhU2l6ZSAvIHNpemVQZXJQYWdlKTtcbiAgfVxuICBpZiAocGFnZSA+PSBNYXRoLmZsb29yKGRhdGFTaXplIC8gc2l6ZVBlclBhZ2UpICYmIHBhZ2VTdGFydEluZGV4ID09PSAwKSB7XG4gICAgY29uc3QgbmV3UGFnZSA9IE1hdGguY2VpbChkYXRhU2l6ZSAvIHNpemVQZXJQYWdlKTtcbiAgICByZXR1cm4gbmV3UGFnZSAtIE1hdGguYWJzKENvbnN0LlBBR0VfU1RBUlRfSU5ERVggLSBwYWdlU3RhcnRJbmRleCk7XG4gIH1cbiAgcmV0dXJuIHBhZ2U7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QnlDdXJyUGFnZSA9IChcbiAgZGF0YTogYW55LFxuICBwYWdlOiBhbnksXG4gIHNpemVQZXJQYWdlOiBhbnksXG4gIHBhZ2VTdGFydEluZGV4OiBhbnlcbikgPT4ge1xuICBjb25zdCBkYXRhU2l6ZSA9IGRhdGEubGVuZ3RoO1xuICBpZiAoIWRhdGFTaXplKSByZXR1cm4gW107XG5cbiAgY29uc3QgZW5kID0gZW5kSW5kZXgocGFnZSwgc2l6ZVBlclBhZ2UsIHBhZ2VTdGFydEluZGV4KTtcbiAgY29uc3Qgc3RhcnQgPSBzdGFydEluZGV4KGVuZCwgc2l6ZVBlclBhZ2UpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpICs9IDEpIHtcbiAgICByZXN1bHQucHVzaChkYXRhW2ldKTtcbiAgICBpZiAoaSArIDEgPT09IGRhdGFTaXplKSBicmVhaztcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoYXJnKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBwYXJzZVZhbHVlKGFyZykpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VWYWx1ZSAoYXJnKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG5cdFx0XHRyZXR1cm4gYXJnO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJnICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0cmV0dXJuIGFyZy50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBrZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kQ2xhc3MgKHZhbHVlLCBuZXdDbGFzcykge1xuXHRcdGlmICghbmV3Q2xhc3MpIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlICsgJyAnICsgbmV3Q2xhc3M7XG5cdFx0fVxuXHRcblx0XHRyZXR1cm4gdmFsdWUgKyBuZXdDbGFzcztcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgUEFHSU5BVElPTl9TSVpFOiA1LFxuICBQQUdFX1NUQVJUX0lOREVYOiAxLFxuICBXaXRoX0ZJUlNUX0FORF9MQVNUOiB0cnVlLFxuICBTSE9XX0FMTF9QQUdFX0JUTlM6IGZhbHNlLFxuICBTSE9XX1RPVEFMOiBmYWxzZSxcbiAgUEFHSU5BVElPTl9UT1RBTDogbnVsbCxcbiAgRklSU1RfUEFHRV9URVhUOiBcIjw8XCIsXG4gIFBSRV9QQUdFX1RFWFQ6IFwiPFwiLFxuICBORVhUX1BBR0VfVEVYVDogXCI+XCIsXG4gIExBU1RfUEFHRV9URVhUOiBcIj4+XCIsXG4gIE5FWFRfUEFHRV9USVRMRTogXCJuZXh0IHBhZ2VcIixcbiAgTEFTVF9QQUdFX1RJVExFOiBcImxhc3QgcGFnZVwiLFxuICBQUkVfUEFHRV9USVRMRTogXCJwcmV2aW91cyBwYWdlXCIsXG4gIEZJUlNUX1BBR0VfVElUTEU6IFwiZmlyc3QgcGFnZVwiLFxuICBTSVpFX1BFUl9QQUdFX0xJU1Q6IFsxMCwgMjUsIDMwLCA1MF0sXG4gIEhJREVfU0laRV9QRVJfUEFHRTogZmFsc2UsXG4gIEhJREVfUEFHRV9MSVNUX09OTFlfT05FX1BBR0U6IGZhbHNlLFxufTtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgbm8tbG9uZWx5LWlmOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJldmVudHNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBDb25zdCBmcm9tIFwiLi9jb25zdFwiO1xuXG5pbXBvcnQgeyBQYWdpbmF0aW9uUHJvdmlkZXJQcm9wcyB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IHsgYWxpZ25QYWdlIH0gZnJvbSBcIi4vcGFnZVwiO1xuXG5jb25zdCBTdGF0ZUNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PGFueT4obnVsbCk7XG5cbmNsYXNzIFN0YXRlUHJvdmlkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UGFnaW5hdGlvblByb3ZpZGVyUHJvcHM+IHtcbiAgY3VyclBhZ2U6IG51bWJlcjtcbiAgY3VyclNpemVQZXJQYWdlOiBudW1iZXI7XG4gIGRhdGFDaGFuZ2VMaXN0ZW5lcjogYW55O1xuICBkYXRhU2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICByZW1vdGVFbWl0dGVyOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFBhZ2luYXRpb25Qcm92aWRlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlQ2hhbmdlUGFnZSA9IHRoaXMuaGFuZGxlQ2hhbmdlUGFnZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlRGF0YVNpemVDaGFuZ2UgPSB0aGlzLmhhbmRsZURhdGFTaXplQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZSA9IHRoaXMuaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UuYmluZCh0aGlzKTtcblxuICAgIGxldCBjdXJyUGFnZTogYW55O1xuICAgIGxldCBjdXJyU2l6ZVBlclBhZ2U6IGFueTtcbiAgICBjb25zdCBvcHRpb25zID0gcHJvcHMucGFnaW5hdGlvbiEub3B0aW9ucyE7XG4gICAgY29uc3Qgc2l6ZVBlclBhZ2VMaXN0ID0gb3B0aW9ucy5zaXplUGVyUGFnZUxpc3QgfHwgQ29uc3QuU0laRV9QRVJfUEFHRV9MSVNUO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSBjdXJyZW50IHBhZ2VcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucGFnZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY3VyclBhZ2UgPSBvcHRpb25zLnBhZ2U7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5wYWdlU3RhcnRJbmRleCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY3VyclBhZ2UgPSBvcHRpb25zLnBhZ2VTdGFydEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyUGFnZSA9IENvbnN0LlBBR0VfU1RBUlRfSU5ERVg7XG4gICAgfVxuXG4gICAgLy8gaW5pdGlhbGl6ZSBjdXJyZW50IHNpemVQZXJQYWdlXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnNpemVQZXJQYWdlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjdXJyU2l6ZVBlclBhZ2UgPSBvcHRpb25zLnNpemVQZXJQYWdlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHNpemVQZXJQYWdlTGlzdFswXSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgY3VyclNpemVQZXJQYWdlID0gc2l6ZVBlclBhZ2VMaXN0WzBdLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyU2l6ZVBlclBhZ2UgPSBzaXplUGVyUGFnZUxpc3RbMF07XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyUGFnZSA9IGN1cnJQYWdlO1xuICAgIHRoaXMuZGF0YVNpemUgPSBvcHRpb25zLnRvdGFsU2l6ZTtcbiAgICB0aGlzLmN1cnJTaXplUGVyUGFnZSA9IGN1cnJTaXplUGVyUGFnZTtcbiAgICB0aGlzLmRhdGFDaGFuZ2VMaXN0ZW5lciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB0aGlzLmRhdGFDaGFuZ2VMaXN0ZW5lci5vbihcImZpbHRlckNoYW5nZWRcIiwgdGhpcy5oYW5kbGVEYXRhU2l6ZUNoYW5nZSk7XG4gIH1cblxuICBnZXRQYWdpbmF0aW9uUHJvcHMgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBib290c3RyYXA0LCB0YWJsZUlkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BzLnBhZ2luYXRpb24hLm9wdGlvbnMhO1xuICAgIGNvbnN0IHsgY3VyclBhZ2UsIGN1cnJTaXplUGVyUGFnZSB9ID0gdGhpcztcbiAgICBsZXQgZGF0YVNpemU6IG51bWJlcjtcbiAgICBpZiAodGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKSkge1xuICAgICAgZGF0YVNpemUgPSBvcHRpb25zLnRvdGFsU2l6ZSE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFTaXplID0gdGhpcy5kYXRhU2l6ZSE7XG4gICAgfVxuICAgIGNvbnN0IHdpdGhGaXJzdEFuZExhc3QgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMud2l0aEZpcnN0QW5kTGFzdCA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IENvbnN0LldpdGhfRklSU1RfQU5EX0xBU1RcbiAgICAgICAgOiBvcHRpb25zLndpdGhGaXJzdEFuZExhc3Q7XG4gICAgY29uc3QgYWx3YXlzU2hvd0FsbEJ0bnMgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuYWx3YXlzU2hvd0FsbEJ0bnMgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBDb25zdC5TSE9XX0FMTF9QQUdFX0JUTlNcbiAgICAgICAgOiBvcHRpb25zLmFsd2F5c1Nob3dBbGxCdG5zO1xuICAgIGNvbnN0IGhpZGVTaXplUGVyUGFnZSA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5oaWRlU2l6ZVBlclBhZ2UgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBDb25zdC5ISURFX1NJWkVfUEVSX1BBR0VcbiAgICAgICAgOiBvcHRpb25zLmhpZGVTaXplUGVyUGFnZTtcbiAgICBjb25zdCBoaWRlUGFnZUxpc3RPbmx5T25lUGFnZSA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5oaWRlUGFnZUxpc3RPbmx5T25lUGFnZSA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IENvbnN0LkhJREVfUEFHRV9MSVNUX09OTFlfT05FX1BBR0VcbiAgICAgICAgOiBvcHRpb25zLmhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlO1xuICAgIGNvbnN0IHBhZ2VTdGFydEluZGV4ID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLnBhZ2VTdGFydEluZGV4ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gQ29uc3QuUEFHRV9TVEFSVF9JTkRFWFxuICAgICAgICA6IG9wdGlvbnMucGFnZVN0YXJ0SW5kZXg7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBib290c3RyYXA0LFxuICAgICAgdGFibGVJZCxcbiAgICAgIHBhZ2U6IGN1cnJQYWdlLFxuICAgICAgc2l6ZVBlclBhZ2U6IGN1cnJTaXplUGVyUGFnZSxcbiAgICAgIHBhZ2VTdGFydEluZGV4LFxuICAgICAgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UsXG4gICAgICBoaWRlU2l6ZVBlclBhZ2UsXG4gICAgICBhbHdheXNTaG93QWxsQnRucyxcbiAgICAgIHdpdGhGaXJzdEFuZExhc3QsXG4gICAgICBkYXRhU2l6ZSxcbiAgICAgIHNpemVQZXJQYWdlTGlzdDogb3B0aW9ucy5zaXplUGVyUGFnZUxpc3QgfHwgQ29uc3QuU0laRV9QRVJfUEFHRV9MSVNULFxuICAgICAgcGFnaW5hdGlvblNpemU6IG9wdGlvbnMucGFnaW5hdGlvblNpemUgfHwgQ29uc3QuUEFHSU5BVElPTl9TSVpFLFxuICAgICAgc2hvd1RvdGFsOiBvcHRpb25zLnNob3dUb3RhbCxcbiAgICAgIHBhZ2VMaXN0UmVuZGVyZXI6IG9wdGlvbnMucGFnZUxpc3RSZW5kZXJlcixcbiAgICAgIHBhZ2VCdXR0b25SZW5kZXJlcjogb3B0aW9ucy5wYWdlQnV0dG9uUmVuZGVyZXIsXG4gICAgICBzaXplUGVyUGFnZVJlbmRlcmVyOiBvcHRpb25zLnNpemVQZXJQYWdlUmVuZGVyZXIsXG4gICAgICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlcjogb3B0aW9ucy5wYWdpbmF0aW9uVG90YWxSZW5kZXJlcixcbiAgICAgIHNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXI6IG9wdGlvbnMuc2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcixcbiAgICAgIGZpcnN0UGFnZVRleHQ6IG9wdGlvbnMuZmlyc3RQYWdlVGV4dCB8fCBDb25zdC5GSVJTVF9QQUdFX1RFWFQsXG4gICAgICBwcmVQYWdlVGV4dDogb3B0aW9ucy5wcmVQYWdlVGV4dCB8fCBDb25zdC5QUkVfUEFHRV9URVhULFxuICAgICAgbmV4dFBhZ2VUZXh0OiBvcHRpb25zLm5leHRQYWdlVGV4dCB8fCBDb25zdC5ORVhUX1BBR0VfVEVYVCxcbiAgICAgIGxhc3RQYWdlVGV4dDogb3B0aW9ucy5sYXN0UGFnZVRleHQgfHwgQ29uc3QuTEFTVF9QQUdFX1RFWFQsXG4gICAgICBwcmVQYWdlVGl0bGU6IG9wdGlvbnMucHJlUGFnZVRpdGxlIHx8IENvbnN0LlBSRV9QQUdFX1RJVExFLFxuICAgICAgbmV4dFBhZ2VUaXRsZTogb3B0aW9ucy5uZXh0UGFnZVRpdGxlIHx8IENvbnN0Lk5FWFRfUEFHRV9USVRMRSxcbiAgICAgIGZpcnN0UGFnZVRpdGxlOiBvcHRpb25zLmZpcnN0UGFnZVRpdGxlIHx8IENvbnN0LkZJUlNUX1BBR0VfVElUTEUsXG4gICAgICBsYXN0UGFnZVRpdGxlOiBvcHRpb25zLmxhc3RQYWdlVGl0bGUgfHwgQ29uc3QuTEFTVF9QQUdFX1RJVExFLFxuICAgICAgb25QYWdlQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZVBhZ2UsXG4gICAgICBvblNpemVQZXJQYWdlQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlLFxuICAgIH07XG4gIH07XG5cbiAgc2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIgPSAocmVtb3RlRW1pdHRlcjogYW55KSA9PiB7XG4gICAgdGhpcy5yZW1vdGVFbWl0dGVyID0gcmVtb3RlRW1pdHRlcjtcbiAgfTtcblxuICBnZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlciA9ICgpID0+XG4gICAgdGhpcy5yZW1vdGVFbWl0dGVyIHx8IHRoaXMucHJvcHMucmVtb3RlRW1pdHRlcjtcblxuICBjb21wb25lbnREaWRVcGRhdGUobmV4dFByb3BzOiBhbnkpIHtcbiAgICBjb25zdCB7IGN1c3RvbSB9ID0gbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucztcblxuICAgIC8vIHVzZXIgc2hvdWxkIGFsaWduIHRoZSBwYWdlIHdoZW4gdGhlIHBhZ2UgaXMgbm90IGZpdCB0byB0aGUgZGF0YSBzaXplIHdoZW4gcmVtb3RlIGVuYWJsZVxuICAgIGlmICh0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpIHx8IGN1c3RvbSkge1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zLnBhZ2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgLy8gdGhpcy5jdXJyUGFnZSA9IG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMucGFnZTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucy5zaXplUGVyUGFnZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyB0aGlzLmN1cnJTaXplUGVyUGFnZSA9IG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMuc2l6ZVBlclBhZ2U7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMudG90YWxTaXplICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIC8vIHRoaXMuZGF0YVNpemUgPSBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zLnRvdGFsU2l6ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1JlbW90ZVBhZ2luYXRpb24gPSAoKSA9PiB7XG4gICAgY29uc3QgZSA9IHsgcmVzdWx0OiB1bmRlZmluZWQgfTtcbiAgICB0aGlzLnJlbW90ZUVtaXR0ZXI/LmVtaXQoXCJpc1JlbW90ZVBhZ2luYXRpb25cIiwgZSk7XG4gICAgcmV0dXJuIGUucmVzdWx0O1xuICB9O1xuXG4gIGhhbmRsZURhdGFTaXplQ2hhbmdlKG5ld0RhdGFTaXplOiBhbnkpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uIS5vcHRpb25zITtcbiAgICBjb25zdCBwYWdlU3RhcnRJbmRleCA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5wYWdlU3RhcnRJbmRleCA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IENvbnN0LlBBR0VfU1RBUlRfSU5ERVhcbiAgICAgICAgOiBvcHRpb25zLnBhZ2VTdGFydEluZGV4O1xuICAgIHRoaXMuY3VyclBhZ2UgPSBhbGlnblBhZ2UoXG4gICAgICBuZXdEYXRhU2l6ZSxcbiAgICAgIHRoaXMuZGF0YVNpemUsXG4gICAgICB0aGlzLmN1cnJQYWdlLFxuICAgICAgdGhpcy5jdXJyU2l6ZVBlclBhZ2UsXG4gICAgICBwYWdlU3RhcnRJbmRleFxuICAgICk7XG4gICAgdGhpcy5kYXRhU2l6ZSA9IG5ld0RhdGFTaXplO1xuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZVBhZ2UoY3VyclBhZ2U6IGFueSkge1xuICAgIGNvbnN0IHsgY3VyclNpemVQZXJQYWdlIH0gPSB0aGlzO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BzLnBhZ2luYXRpb24hLm9wdGlvbnMhO1xuXG4gICAgaWYgKG9wdGlvbnMub25QYWdlQ2hhbmdlKSB7XG4gICAgICBvcHRpb25zLm9uUGFnZUNoYW5nZShjdXJyUGFnZSwgY3VyclNpemVQZXJQYWdlKTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJQYWdlID0gY3VyclBhZ2U7XG5cbiAgICBpZiAodGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKSkge1xuICAgICAgdGhpcy5nZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlcigpLmVtaXQoXG4gICAgICAgIFwicGFnaW5hdGlvbkNoYW5nZVwiLFxuICAgICAgICBjdXJyUGFnZSxcbiAgICAgICAgY3VyclNpemVQZXJQYWdlXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2VTaXplUGVyUGFnZShjdXJyU2l6ZVBlclBhZ2U6IGFueSwgY3VyclBhZ2U6IGFueSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BzLnBhZ2luYXRpb24hLm9wdGlvbnMhO1xuXG4gICAgaWYgKG9wdGlvbnMub25TaXplUGVyUGFnZUNoYW5nZSkge1xuICAgICAgb3B0aW9ucy5vblNpemVQZXJQYWdlQ2hhbmdlKGN1cnJTaXplUGVyUGFnZSwgY3VyclBhZ2UpO1xuICAgIH1cblxuICAgIHRoaXMuY3VyclBhZ2UgPSBjdXJyUGFnZTtcbiAgICB0aGlzLmN1cnJTaXplUGVyUGFnZSA9IGN1cnJTaXplUGVyUGFnZTtcblxuICAgIGlmICh0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpKSB7XG4gICAgICB0aGlzLmdldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyKCkuZW1pdChcbiAgICAgICAgXCJwYWdpbmF0aW9uQ2hhbmdlXCIsXG4gICAgICAgIGN1cnJQYWdlLFxuICAgICAgICBjdXJyU2l6ZVBlclBhZ2VcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBwYWdpbmF0aW9uUHJvcHMgPSB0aGlzLmdldFBhZ2luYXRpb25Qcm9wcygpO1xuICAgIGNvbnN0IHBhZ2luYXRpb24gPSB7XG4gICAgICAuLi50aGlzLnByb3BzLnBhZ2luYXRpb24sXG4gICAgICBvcHRpb25zOiBwYWdpbmF0aW9uUHJvcHMsXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8U3RhdGVDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgcGFnaW5hdGlvblByb3BzLFxuICAgICAgICAgIHBhZ2luYXRpb25UYWJsZVByb3BzOiB7XG4gICAgICAgICAgICBwYWdpbmF0aW9uLFxuICAgICAgICAgICAgc2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXI6IHRoaXMuc2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIsXG4gICAgICAgICAgICBkYXRhQ2hhbmdlTGlzdGVuZXI6IHRoaXMuZGF0YUNoYW5nZUxpc3RlbmVyLFxuICAgICAgICAgIH0sXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgPC9TdGF0ZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiAoe1xuICBQcm92aWRlcjogU3RhdGVQcm92aWRlcixcbiAgQ29uc3VtZXI6IFN0YXRlQ29udGV4dC5Db25zdW1lcixcbn0pO1xuIiwiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQYWdpbmF0aW9uT3B0aW9ucyB9IGZyb20gXCJyZWFjdC1ib290c3RyYXAtdGFibGUtbmdcIjtcblxuaW1wb3J0IGNyZWF0ZURhdGFDb250ZXh0IGZyb20gXCIuL3NyYy9kYXRhLWNvbnRleHRcIjtcbmltcG9ydCBQYWdpbmF0aW9uTGlzdFN0YW5kYWxvbmUgZnJvbSBcIi4vc3JjL3BhZ2luYXRpb24tbGlzdC1zdGFuZGFsb25lXCI7XG5pbXBvcnQgUGFnaW5hdGlvblRvdGFsU3RhbmRhbG9uZSBmcm9tIFwiLi9zcmMvcGFnaW5hdGlvbi10b3RhbC1zdGFuZGFsb25lXCI7XG5pbXBvcnQgU2l6ZVBlclBhZ2VEcm9wZG93blN0YW5kYWxvbmUgZnJvbSBcIi4vc3JjL3NpemUtcGVyLXBhZ2UtZHJvcGRvd24tc3RhbmRhbG9uZVwiO1xuaW1wb3J0IGNyZWF0ZUJhc2VDb250ZXh0IGZyb20gXCIuL3NyYy9zdGF0ZS1jb250ZXh0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbkN0eE9wdGlvbnMge1xuICBvcHRpb25zPzogUGFnaW5hdGlvbk9wdGlvbnMgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbkNoaWxkUHJvcHMgZXh0ZW5kcyBQYWdpbmF0aW9uT3B0aW9ucyB7XG4gIHRhYmxlSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGJvb3RzdHJhcDQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25Qcm92aWRlclByb3BzIHtcbiAgcGFnaW5hdGlvbj86IFBhZ2luYXRpb25DdHhPcHRpb25zIHwgdW5kZWZpbmVkO1xuICAvLyBUT0RPXG4gIC8vIGNoaWxkcmVuOiAoY2hpbGRQcm9wczoge1xuICAvLyAgIHBhZ2luYXRpb25Qcm9wczogUGFnaW5hdGlvbkNoaWxkUHJvcHM7XG4gIC8vICAgcGFnaW5hdGlvblRhYmxlUHJvcHM6IEJvb3RzdHJhcFRhYmxlUHJvcHM7XG4gIC8vIH0pID0+IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGw7XG4gIGNoaWxkcmVuOiBhbnk7XG4gIHRhYmxlSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGJvb3RzdHJhcDQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICByZW1vdGVFbWl0dGVyOiBhbnk7XG4gIGRhdGE6IGFueVtdO1xuICBpc1JlbW90ZVBhZ2luYXRpb246IEZ1bmN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25EYXRhUHJvdmlkZXJQcm9wcyB7XG4gIGRhdGE6IGFueVtdO1xuICByZW1vdGVFbWl0dGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpc1JlbW90ZVBhZ2luYXRpb246ICgpID0+IGJvb2xlYW47XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHBhZ2luYXRpb246IHtcbiAgICBvcHRpb25zOiB7XG4gICAgICBjdXN0b20/OiBib29sZWFuO1xuICAgICAgcGFnZVN0YXJ0SW5kZXg/OiBudW1iZXI7XG4gICAgICBvblBhZ2VDaGFuZ2U6IChuZXdQYWdlOiBhbnksIGN1cnJTaXplUGVyUGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICAgIH07XG4gIH07XG4gIG9uRGF0YVNpemVDaGFuZ2U/OiAoZGF0YVNpemU6IHsgZGF0YVNpemU6IG51bWJlciB9KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCAob3B0aW9ucyA9IHt9KSA9PiAoe1xuICBjcmVhdGVDb250ZXh0OiBjcmVhdGVEYXRhQ29udGV4dCxcbiAgb3B0aW9ucyxcbn0pO1xuXG5jb25zdCB7IFByb3ZpZGVyLCBDb25zdW1lciB9ID0gY3JlYXRlQmFzZUNvbnRleHQoKTtcblxuY29uc3QgQ3VzdG9taXphYmxlUHJvdmlkZXIgPSAocHJvcHM6IFBhZ2luYXRpb25Qcm92aWRlclByb3BzKSA9PiAoXG4gIDxQcm92aWRlciB7Li4ucHJvcHN9PlxuICAgIDxDb25zdW1lcj5cbiAgICAgIHsocGFnaW5hdGlvblByb3BzOiBhbnkpID0+IHByb3BzLmNoaWxkcmVuKHBhZ2luYXRpb25Qcm9wcyl9XG4gICAgPC9Db25zdW1lcj5cbiAgPC9Qcm92aWRlcj5cbik7XG5cblxuXG5leHBvcnQgY29uc3QgUGFnaW5hdGlvblByb3ZpZGVyID0gQ3VzdG9taXphYmxlUHJvdmlkZXI7XG5leHBvcnQge1xuICBQYWdpbmF0aW9uTGlzdFN0YW5kYWxvbmUsXG4gIFBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUsXG4gIFNpemVQZXJQYWdlRHJvcGRvd25TdGFuZGFsb25lLFxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQYWdpbmF0aW9uVG90YWwgZnJvbSBcIi4vcGFnaW5hdGlvbi10b3RhbFwiO1xuaW1wb3J0IHBhZ2luYXRpb25Ub3RhbEFkYXB0ZXIgZnJvbSBcIi4vcGFnaW5hdGlvbi10b3RhbC1hZGFwdGVyXCI7XG5pbXBvcnQgc3RhbmRhbG9uZUFkYXB0ZXIgZnJvbSBcIi4vc3RhbmRhbG9uZS1hZGFwdGVyXCI7XG5cbmNvbnN0IFBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUgPSAocHJvcHM6IGFueSkgPT4gKFxuICA8UGFnaW5hdGlvblRvdGFsIHsuLi5wcm9wc30gLz5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IHN0YW5kYWxvbmVBZGFwdGVyKFxuICBwYWdpbmF0aW9uVG90YWxBZGFwdGVyKFBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUpXG4pO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5ODcpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18iLCJSZWZsZWN0T3duS2V5cyIsIlIiLCJSZWZsZWN0IiwiUmVmbGVjdEFwcGx5IiwiYXBwbHkiLCJ0YXJnZXQiLCJyZWNlaXZlciIsImFyZ3MiLCJGdW5jdGlvbiIsInByb3RvdHlwZSIsImNhbGwiLCJvd25LZXlzIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImNvbmNhdCIsIk51bWJlcklzTmFOIiwiTnVtYmVyIiwiaXNOYU4iLCJ2YWx1ZSIsIkV2ZW50RW1pdHRlciIsImluaXQiLCJ0aGlzIiwib25jZSIsImVtaXR0ZXIiLCJuYW1lIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJlcnJvckxpc3RlbmVyIiwiZXJyIiwicmVtb3ZlTGlzdGVuZXIiLCJyZXNvbHZlciIsInNsaWNlIiwiYXJndW1lbnRzIiwiZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyIiwiaGFuZGxlciIsImZsYWdzIiwib24iLCJhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlciIsIl9ldmVudHMiLCJ1bmRlZmluZWQiLCJfZXZlbnRzQ291bnQiLCJfbWF4TGlzdGVuZXJzIiwiZGVmYXVsdE1heExpc3RlbmVycyIsImNoZWNrTGlzdGVuZXIiLCJsaXN0ZW5lciIsIlR5cGVFcnJvciIsIl9nZXRNYXhMaXN0ZW5lcnMiLCJ0aGF0IiwiX2FkZExpc3RlbmVyIiwidHlwZSIsInByZXBlbmQiLCJtIiwiZXZlbnRzIiwiZXhpc3RpbmciLCJ3YXJuaW5nIiwiY3JlYXRlIiwibmV3TGlzdGVuZXIiLCJlbWl0IiwidW5zaGlmdCIsInB1c2giLCJsZW5ndGgiLCJ3YXJuZWQiLCJ3IiwiRXJyb3IiLCJTdHJpbmciLCJjb3VudCIsImNvbnNvbGUiLCJ3YXJuIiwib25jZVdyYXBwZXIiLCJmaXJlZCIsIndyYXBGbiIsIl9vbmNlV3JhcCIsInN0YXRlIiwid3JhcHBlZCIsImJpbmQiLCJfbGlzdGVuZXJzIiwidW53cmFwIiwiZXZsaXN0ZW5lciIsImFyciIsInJldCIsIkFycmF5IiwiaSIsInVud3JhcExpc3RlbmVycyIsImFycmF5Q2xvbmUiLCJsaXN0ZW5lckNvdW50IiwibiIsImNvcHkiLCJhZGRFdmVudExpc3RlbmVyIiwid3JhcExpc3RlbmVyIiwiYXJnIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInNldCIsIlJhbmdlRXJyb3IiLCJnZXRQcm90b3R5cGVPZiIsInNldE1heExpc3RlbmVycyIsImdldE1heExpc3RlbmVycyIsImRvRXJyb3IiLCJlcnJvciIsImVyIiwibWVzc2FnZSIsImNvbnRleHQiLCJsZW4iLCJsaXN0ZW5lcnMiLCJhZGRMaXN0ZW5lciIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0IiwicG9zaXRpb24iLCJvcmlnaW5hbExpc3RlbmVyIiwic2hpZnQiLCJpbmRleCIsInBvcCIsInNwbGljZU9uZSIsIm9mZiIsInJlbW92ZUFsbExpc3RlbmVycyIsImtleSIsImtleXMiLCJyYXdMaXN0ZW5lcnMiLCJldmVudE5hbWVzIiwiUGFnaW5hdGlvbiIsIkNvbXBvbmVudCIsInJlbmRlciIsInRhYmxlSWQiLCJjdXJyUGFnZSIsInBhZ2VTdGFydEluZGV4IiwiUEFHRV9TVEFSVF9JTkRFWCIsInNob3dUb3RhbCIsIlNIT1dfVE9UQUwiLCJkYXRhU2l6ZSIsInBhZ2VMaXN0UmVuZGVyZXIiLCJwYWdlQnV0dG9uUmVuZGVyZXIiLCJwYWdpbmF0aW9uVG90YWxSZW5kZXJlciIsIlBBR0lOQVRJT05fVE9UQUwiLCJoaWRlUGFnZUxpc3RPbmx5T25lUGFnZSIsIkhJREVfUEFHRV9MSVNUX09OTFlfT05FX1BBR0UiLCJ0b3RhbFBhZ2VzIiwibGFzdFBhZ2UiLCJvblBhZ2VDaGFuZ2UiLCJzaXplUGVyUGFnZUxpc3QiLCJTSVpFX1BFUl9QQUdFX0xJU1QiLCJjdXJyU2l6ZVBlclBhZ2UiLCJoaWRlU2l6ZVBlclBhZ2UiLCJISURFX1NJWkVfUEVSX1BBR0UiLCJzaXplUGVyUGFnZVJlbmRlcmVyIiwic2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlciIsIm9uU2l6ZVBlclBhZ2VDaGFuZ2UiLCJib290c3RyYXA0IiwiZGlzYWJsZVBhZ2VUaXRsZSIsInBhZ2luYXRpb25TaXplIiwiUEFHSU5BVElPTl9TSVpFIiwid2l0aEZpcnN0QW5kTGFzdCIsIldpdGhfRklSU1RfQU5EX0xBU1QiLCJhbHdheXNTaG93QWxsQnRucyIsIlNIT1dfQUxMX1BBR0VfQlROUyIsImZpcnN0UGFnZVRleHQiLCJGSVJTVF9QQUdFX1RFWFQiLCJwcmVQYWdlVGV4dCIsIlBSRV9QQUdFX1RFWFQiLCJuZXh0UGFnZVRleHQiLCJORVhUX1BBR0VfVEVYVCIsImxhc3RQYWdlVGV4dCIsIkxBU1RfUEFHRV9URVhUIiwibmV4dFBhZ2VUaXRsZSIsIk5FWFRfUEFHRV9USVRMRSIsInByZVBhZ2VUaXRsZSIsIlBSRV9QQUdFX1RJVExFIiwiZmlyc3RQYWdlVGl0bGUiLCJGSVJTVF9QQUdFX1RJVExFIiwibGFzdFBhZ2VUaXRsZSIsIkxBU1RfUEFHRV9USVRMRSIsInJlc3QiLCJwcm9wcyIsInBhZ2VzIiwiY2FsY3VsYXRlUGFnZVN0YXR1cyIsImNhbGN1bGF0ZVBhZ2VzIiwicGFnZUxpc3RDbGFzcyIsImNsYXNzTmFtZSIsIlNpemVQZXJQYWdlRHJvcGRvd25XaXRoQWRhcHRlciIsIlBhZ2luYXRpb25Ub3RhbFdpdGhBZGFwdGVyIiwiUGFnaW5hdGlvbkxpc3RXaXRoQWRhcHRlciIsInN0YXRpYyIsInBhZ2luYXRpb25MaXN0QWRhcHRlciIsIldyYXBwZWRDb21wb25lbnQiLCJQYWdpbmF0b25MaXN0IiwibWFwIiwicGFnZVByb3BzIiwiZWxlbWVudCIsImNsb25lRWxlbWVudCIsInBhZ2UiLCJkZWZhdWx0UHJvcHMiLCJFeHRlbmRCYXNlIiwiYmFja1RvUHJldlBhZ2UiLCJpbml0aWFsU3RhdGUiLCJjYWxjdWxhdGVUb3RhbFBhZ2UiLCJjYWxjdWxhdGVMYXN0UGFnZSIsInNpemVQZXJQYWdlIiwiTWF0aCIsImNlaWwiLCJjYWxjdWxhdGVGcm9tVG8iLCJvZmZzZXQiLCJhYnMiLCJmcm9tIiwidG8iLCJtaW4iLCJlbmRQYWdlIiwic3RhcnRQYWdlIiwibWF4IiwiZmxvb3IiLCJpc1N0YXJ0IiwiaXNFbmQiLCJmaWx0ZXIiLCJ0aXRsZSIsImFjdGl2ZSIsImRpc2FibGVkIiwicGFnZVJlc3VsdCIsImNhbGN1bGF0ZVNpemVQZXJQYWdlU3RhdHVzIiwiX3NpemVQZXJQYWdlIiwidGV4dCIsIlByb3ZpZGVyIiwiUGFnaW5hdGlvbkRhdGFDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsIlBhZ2luYXRpb25EYXRhUHJvdmlkZXIiLCJjb21wb25lbnREaWRVcGRhdGUiLCJuZXh0UHJvcHMiLCJzdXBlciIsImN1c3RvbSIsInBhZ2luYXRpb24iLCJvcHRpb25zIiwiaXNSZW1vdGVQYWdpbmF0aW9uIiwibmV3UGFnZSIsImFsaWduUGFnZSIsImRhdGEiLCJvbkRhdGFTaXplQ2hhbmdlIiwicmVuZGVyRGVmYXVsdFBhZ2luYXRpb24iLCJnZXRQYWdpbmF0aW9uUHJvcHMiLCJnZXRCeUN1cnJQYWdlIiwic2V0UmVtb3RlRW1pdHRlciIsInNldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyIiwiY2hpbGRyZW4iLCJDb25zdW1lciIsIlBhZ2VCdXR0b24iLCJjb25zdHJ1Y3RvciIsImhhbmRsZUNsaWNrIiwiZSIsInByZXZlbnREZWZhdWx0IiwiY2xhc3NlcyIsImhyZWYiLCJvbkNsaWNrIiwiUGFnaW5hdGlvblRvdGFsIiwic2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXIiLCJkcm9wZG93bk9wZW4iLCJjbG9zZURyb3BEb3duIiwidG9nZ2xlRHJvcERvd24iLCJoYW5kbGVDaGFuZ2VTaXplUGVyUGFnZSIsInNldFN0YXRlIiwib3BlbiIsIm9wdGlvblJlbmRlcmVyIiwib25CbHVyIiwic2l6ZVBlclBhZ2VEcm9wRG93bkRlZmF1bHRQcm9wcyIsImhpZGRlbiIsImJ0bkNvbnRleHR1YWwiLCJ2YXJpYXRpb24iLCJvcGVuQ2xhc3MiLCJkcm9wZG93bkNsYXNzZXMiLCJpZCIsInN0eWxlIiwidmlzaWJpbGl0eSIsInJvbGUiLCJvcHRpb24iLCJwYWdpbmF0aW9uVG90YWxBZGFwdGVyIiwiU2l6ZVBlclBhZ2VPcHRpb24iLCJ0YWJJbmRleCIsIm9uTW91c2VEb3duIiwiaGFuZGxlQ2hhbmdlUGFnZSIsImN1cnJQcm9wcyIsInRvdGFsU2l6ZSIsInNlbGVjdGVkU2l6ZSIsInBhcnNlSW50IiwibmV3VG90YWxQYWdlcyIsIm5ld0xhc3RQYWdlIiwiZW5kSW5kZXgiLCJnZXROb3JtYWxpemVkUGFnZSIsInByZXZEYXRhU2l6ZSIsImVuZCIsInN0YXJ0Iiwic3RhcnRJbmRleCIsInJlc3VsdCIsImhhc093biIsImhhc093blByb3BlcnR5IiwiY2xhc3NOYW1lcyIsImFwcGVuZENsYXNzIiwicGFyc2VWYWx1ZSIsImlzQXJyYXkiLCJ0b1N0cmluZyIsImluY2x1ZGVzIiwibmV3Q2xhc3MiLCJkZWZhdWx0IiwiU3RhdGVDb250ZXh0IiwiU3RhdGVQcm92aWRlciIsImRhdGFDaGFuZ2VMaXN0ZW5lciIsInJlbW90ZUVtaXR0ZXIiLCJoYW5kbGVEYXRhU2l6ZUNoYW5nZSIsImdldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyIiwibmV3RGF0YVNpemUiLCJmb3JjZVVwZGF0ZSIsInBhZ2luYXRpb25Qcm9wcyIsInBhZ2luYXRpb25UYWJsZVByb3BzIiwiUGFnaW5hdGlvbkxpc3RTdGFuZGFsb25lIiwiUGFnaW5hdGlvblRvdGFsU3RhbmRhbG9uZSIsIlNpemVQZXJQYWdlRHJvcGRvd25TdGFuZGFsb25lIiwiUGFnaW5hdGlvblByb3ZpZGVyIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9