aem-core-components-contributions-react-core
Version:
AEM - React Wrapper components - for the OOTB AEM Core Components
2 lines • 52.5 kB
JavaScript
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.cqCoreComponents=t():e.cqCoreComponents=t()}("undefined"!=typeof self?self:this,(function(){return function(e){var t={};function s(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,s),n.l=!0,n.exports}return s.m=e,s.c=t,s.d=function(e,t,r){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(s.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)s.d(r,n,function(t){return e[t]}.bind(null,n));return r},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="",s(s.s=22)}([function(e,t){e.exports=require("react")},function(e,t,s){"use strict";s.d(t,"a",(function(){return o}));var r=s(0),n=s.n(r);class i extends r.Component{render(){const e=(null!=this.props.componentTitle&&this.props.componentTitle.length>0?this.props.componentTitle+" - ":"")+(null!=this.props.emptyTextAppend?this.props.emptyTextAppend:i.DEFAULT_EMPTY_TEXT_LABEL);return this.renderPlaceHolder(e)}renderPlaceHolder(e){return n.a.createElement("div",{className:"cq-placeholder"+(null!=this.props.classAppend?" "+this.props.classAppend:"")},e)}}i.DEFAULT_EMPTY_TEXT_LABEL="Please configure the component";class o extends n.a.Component{constructor(e,t,s){super(e),this.baseCssCls=t,this.emptyPlaceHolderText=s}__hidePlaceHolder(){return this.props.hidePlaceHolder}__renderPlaceHolder(e,t){return n.a.createElement(i,{emptyTextAppend:t,componentTitle:e})}render(){const e=this.isEmpty();return n.a.createElement(n.a.Fragment,null,!e&&this.renderComponent(),e&&this.props.isInEditor&&!this.__hidePlaceHolder()&&this.__renderPlaceHolder(this.emptyPlaceHolderText))}}o.defaultProps={hidePlaceHolder:!1,isInEditor:!1}},function(e,t,s){"use strict";s.d(t,"a",(function(){return o}));var r=s(0),n=s.n(r),i=s(4);const o=e=>{const{to:t,isRouted:s,...r}=e;if(void 0===t)return n.a.createElement("a",Object.assign({href:"#"},e));return/^https?:\/\//.test(t)||!s?n.a.createElement("a",Object.assign({href:t},e)):n.a.createElement(i.Link,Object.assign({},r,{to:t}))}},function(e,t,s){"use strict";function r(e,t){return!0===e.routed&&!1!==t.routed||!0===t.routed}s.d(t,"a",(function(){return r}))},function(e,t){e.exports=require("react-router-dom")},function(e,t,s){"use strict";s.r(t),s.d(t,"TitleV2IsEmptyFn",(function(){return a})),s.d(t,"TitleV2",(function(){return p}));var r=s(0),n=s.n(r),i=s(1),o=s(2);function a(e){return null==e.text||0===e.text.length}class p extends i.a{constructor(e){super(e,"cmp-title","TitleV2")}isEmpty(){return a(this.props)}generateLink(){return n.a.createElement(o.a,{className:this.baseCssCls+"__link",isRouted:this.props.routed,to:this.props.linkURL},this.props.text)}getContents(){return this.props.linkDisabled?n.a.createElement(n.a.Fragment,null,this.props.text):this.generateLink()}renderComponent(){return n.a.createElement("div",{className:this.baseCssCls},n.a.createElement(this.props.type||"h3",{className:this.baseCssCls+"__text"},this.getContents()))}}p.defaultProps={isInEditor:!1,hidePlaceHolder:!1}},function(e,t,s){"use strict";s.r(t),s.d(t,"ImageV2IsEmptyFn",(function(){return a})),s.d(t,"ImageV2",(function(){return p}));var r=s(0),n=s.n(r),i=s(1),o=s(2);function a(e){return!e.src||0===e.src.length}class p extends i.a{constructor(e){super(e,"cmp-image","ImageV2")}generateLink(){return n.a.createElement(o.a,{className:this.baseCssCls+"__link",isRouted:this.props.routed,to:this.props.link},this.getInnerContents())}getInnerContents(){return n.a.createElement(n.a.Fragment,null,n.a.createElement("img",{src:this.props.src,className:this.baseCssCls+"__image",alt:this.props.alt}),!!this.props.title&&n.a.createElement("span",{className:this.baseCssCls+"__title",itemProp:"caption"},this.props.title),this.props.displayPopupTitle&&!!this.props.title&&n.a.createElement("meta",{itemProp:"caption",content:this.props.title}))}getContents(){return this.props.link&&this.props.link.trim().length>0?this.generateLink():this.getInnerContents()}isEmpty(){return a(this.props)}renderComponent(){const e=this.props.isInEditor?this.baseCssCls+" cq-dd-image":this.baseCssCls;return n.a.createElement("div",{className:e},this.getContents())}}p.defaultProps={hidePlaceHolder:!1,isInEditor:!1}},,,,function(e,t,s){"use strict";s.r(t),s.d(t,"TeaserV1IsEmptyFn",(function(){return c})),s.d(t,"TeaserV1",(function(){return u}));var r=s(0),n=s.n(r),i=s(1),o=s(6),a=s(5),p=s(2),l=s(3);function c(e){return!e.imagePath&&!e.description&&0==e.actions.length}class u extends i.a{constructor(e){super(e,"cmp-teaser","TeaserV1")}isEmpty(){return c(this.props)}get image(){return this.props.imagePath&&n.a.createElement("div",{className:this.baseCssCls+"__image"},n.a.createElement(o.ImageV2,{isInEditor:this.props.isInEditor,src:this.props.imagePath,alt:"temporary image"}))}get pretitle(){return this.props.pretitle&&n.a.createElement("div",{className:this.baseCssCls+"__pretitle"},this.props.pretitle)}get title(){return this.props.title&&n.a.createElement(a.TitleV2,{type:this.props.titleType,isInEditor:this.props.isInEditor,linkDisabled:!1,text:this.props.title,linkURL:this.props.linkURL})}get description(){const e=this.props.description;return this.props.description&&n.a.createElement("div",{className:this.baseCssCls+"__description",dangerouslySetInnerHTML:{__html:e}})}generateLink(e,t){return n.a.createElement(p.a,{isRouted:Object(l.a)(this.props,e),className:this.baseCssCls+"__action-link",to:e.URL},"$",e.title)}get actions(){const e=this.props.actions.length>0;return this.props.actionsEnabled&&e&&n.a.createElement("div",{className:this.baseCssCls+"__action-container"},this.props.actions.map((e,t)=>{this.generateLink(e,t)}))}renderComponent(){const e=this.baseCssCls+this.props.isInEditor?" cq-dd-image":"";return n.a.createElement("div",{className:e},this.image,n.a.createElement("div",{className:this.baseCssCls+"__content"},this.pretitle,this.title,this.description,this.actions))}}u.defaultProps={hidePlaceHolder:!1,isInEditor:!1}},,,,,,,,,,,,function(e,t,s){e.exports=s(10)}])}));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcUNvcmVDb21wb25lbnRzL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9jcUNvcmVDb21wb25lbnRzL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2NxQ29yZUNvbXBvbmVudHMvZXh0ZXJuYWwgXCJyZWFjdFwiIiwid2VicGFjazovL2NxQ29yZUNvbXBvbmVudHMvLi9zcmMvY29tbW9uL3BsYWNlaG9sZGVyLnRzeCIsIndlYnBhY2s6Ly9jcUNvcmVDb21wb25lbnRzLy4vc3JjL0Fic3RyYWN0Q29yZUNvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vY3FDb3JlQ29tcG9uZW50cy8uL3NyYy9yb3V0aW5nL1JvdXRlZExpbmsudHN4Iiwid2VicGFjazovL2NxQ29yZUNvbXBvbmVudHMvLi9zcmMvcm91dGluZy9Sb3V0ZWRDb3JlQ29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly9jcUNvcmVDb21wb25lbnRzL2V4dGVybmFsIFwicmVhY3Qtcm91dGVyLWRvbVwiIiwid2VicGFjazovL2NxQ29yZUNvbXBvbmVudHMvLi9zcmMvYXV0aG9yaW5nL3RpdGxlL3YyL1RpdGxlVjIudHN4Iiwid2VicGFjazovL2NxQ29yZUNvbXBvbmVudHMvLi9zcmMvYXV0aG9yaW5nL2ltYWdlL3YyL0ltYWdlVjIudHN4Iiwid2VicGFjazovL2NxQ29yZUNvbXBvbmVudHMvLi9zcmMvYXV0aG9yaW5nL3RlYXNlci92MS9UZWFzZXJWMS50c3giXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsInRoaXMiLCJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwicmVxdWlyZSIsImVtcHR5VGV4dCIsInByb3BzIiwiY29tcG9uZW50VGl0bGUiLCJsZW5ndGgiLCJlbXB0eVRleHRBcHBlbmQiLCJERUZBVUxUX0VNUFRZX1RFWFRfTEFCRUwiLCJyZW5kZXJQbGFjZUhvbGRlciIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJjbGFzc0FwcGVuZCIsIkNvbXBvbmVudCIsImJhc2VDc3NDbHMiLCJlbXB0eVBsYWNlSG9sZGVyVGV4dCIsInN1cGVyIiwiaGlkZVBsYWNlSG9sZGVyIiwidGl0bGUiLCJpc0VtcHR5IiwiRnJhZ21lbnQiLCJyZW5kZXJDb21wb25lbnQiLCJpc0luRWRpdG9yIiwiX19oaWRlUGxhY2VIb2xkZXIiLCJfX3JlbmRlclBsYWNlSG9sZGVyIiwiZGVmYXVsdFByb3BzIiwiUm91dGVkTGluayIsInRvIiwiaXNSb3V0ZWQiLCJvdGhlclByb3BzIiwidW5kZWZpbmVkIiwiYXNzaWduIiwiaHJlZiIsInRlc3QiLCJpc0l0ZW1Sb3V0ZWQiLCJzZWxmUHJvcHMiLCJpdGVtIiwicm91dGVkIiwiVGl0bGVWMklzRW1wdHlGbiIsInRleHQiLCJUaXRsZVYyIiwibGlua1VSTCIsImxpbmtEaXNhYmxlZCIsImdlbmVyYXRlTGluayIsInR5cGUiLCJnZXRDb250ZW50cyIsIkltYWdlVjJJc0VtcHR5Rm4iLCJzcmMiLCJJbWFnZVYyIiwibGluayIsImdldElubmVyQ29udGVudHMiLCJhbHQiLCJpdGVtUHJvcCIsImRpc3BsYXlQb3B1cFRpdGxlIiwiY29udGVudCIsInRyaW0iLCJjc3NDbGFzc05hbWUiLCJUZWFzZXJWMUlzRW1wdHlGbiIsImltYWdlUGF0aCIsImRlc2NyaXB0aW9uIiwiYWN0aW9ucyIsIlRlYXNlclYxIiwicHJldGl0bGUiLCJ0aXRsZVR5cGUiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsImFjdGlvbiIsImluZGV4IiwiVVJMIiwiaGFzQWN0aW9ucyIsImFjdGlvbnNFbmFibGVkIiwibWFwIiwiY3NzQ2xhc3MiLCJpbWFnZSJdLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELElBQ1EsbUJBQVhHLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxHQUFJSCxHQUNlLGlCQUFaQyxRQUNkQSxRQUEwQixpQkFBSUQsSUFFOUJELEVBQXVCLGlCQUFJQyxJQVI3QixDQVNtQixvQkFBVEssS0FBdUJBLEtBQU9DLE1BQU0sV0FDOUMsTyxZQ1RFLElBQUlDLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVVSLFFBR25DLElBQUlDLEVBQVNLLEVBQWlCRSxHQUFZLENBQ3pDQyxFQUFHRCxFQUNIRSxHQUFHLEVBQ0hWLFFBQVMsSUFVVixPQU5BVyxFQUFRSCxHQUFVSSxLQUFLWCxFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTTyxHQUcvRE4sRUFBT1MsR0FBSSxFQUdKVCxFQUFPRCxRQTBEZixPQXJEQU8sRUFBb0JNLEVBQUlGLEVBR3hCSixFQUFvQk8sRUFBSVIsRUFHeEJDLEVBQW9CUSxFQUFJLFNBQVNmLEVBQVNnQixFQUFNQyxHQUMzQ1YsRUFBb0JXLEVBQUVsQixFQUFTZ0IsSUFDbENHLE9BQU9DLGVBQWVwQixFQUFTZ0IsRUFBTSxDQUFFSyxZQUFZLEVBQU1DLElBQUtMLEtBS2hFVixFQUFvQmdCLEVBQUksU0FBU3ZCLEdBQ1gsb0JBQVh3QixRQUEwQkEsT0FBT0MsYUFDMUNOLE9BQU9DLGVBQWVwQixFQUFTd0IsT0FBT0MsWUFBYSxDQUFFQyxNQUFPLFdBRTdEUCxPQUFPQyxlQUFl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S3JHLEtBQUs2RSxhQUFhdUIsRUFBUUMsTUFHbEMsa0JBQ0ksTUFBTUssRUFBVzFHLEtBQUtnRCxXQUFjaEQsS0FBS3NDLE1BQWdCLFdBQUksZUFBaUIsR0FDOUUsT0FBUSxJQUFNTSxjQUFjLE1BQU8sQ0FBRUMsVUFBVzZELEdBQzVDMUcsS0FBSzJHLE1BQ0wsSUFBTS9ELGNBQWMsTUFBTyxDQUFFQyxVQUFXN0MsS0FBS2dELFdBQWEsYUFDdERoRCxLQUFLZ0csU0FDTGhHLEtBQUtvRCxNQUNMcEQsS0FBSzZGLFlBQ0w3RixLQUFLOEYsV0FHckJDLEVBQVNwQyxhQUFlLENBQ3BCUixpQkFBaUIsRUFDakJLLFlBQVksSSIsImZpbGUiOiJUZWFzZXJWMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcImNxQ29yZUNvbXBvbmVudHNcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wiY3FDb3JlQ29tcG9uZW50c1wiXSA9IGZhY3RvcnkoKTtcbn0pKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMjIpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwiLypcbiAqICBDb3B5cmlnaHQgMjAyMCBBZG9iZVxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBjbGFzcyBFZGl0b3JQbGFjZUhvbGRlciBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBwYXJ0MSA9ICh0aGlzLnByb3BzLmNvbXBvbmVudFRpdGxlICE9IG51bGwgJiYgdGhpcy5wcm9wcy5jb21wb25lbnRUaXRsZS5sZW5ndGggPiAwKSA/IHRoaXMucHJvcHMuY29tcG9uZW50VGl0bGUgKyAnIC0gJyA6ICcnO1xuICAgICAgICBjb25zdCBwYXJ0MiA9ICh0aGlzLnByb3BzLmVtcHR5VGV4dEFwcGVuZCAhPSBudWxsKSA/IHRoaXMucHJvcHMuZW1wdHlUZXh0QXBwZW5kIDogRWRpdG9yUGxhY2VIb2xkZXIuREVGQVVMVF9FTVBUWV9URVhUX0xBQkVMO1xuICAgICAgICBjb25zdCBlbXB0eVRleHQgPSBwYXJ0MSArIHBhcnQyO1xuICAgICAgICByZXR1cm4gKHRoaXMucmVuZGVyUGxhY2VIb2xkZXIoZW1wdHlUZXh0KSk7XG4gICAgfVxuICAgIHJlbmRlclBsYWNlSG9sZGVyKGVtcHR5VGV4dCkge1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogJ2NxLXBsYWNlaG9sZGVyJyArICh0aGlzLnByb3BzLmNsYXNzQXBwZW5kICE9IG51bGwgPyAnICcgKyB0aGlzLnByb3BzLmNsYXNzQXBwZW5kIDogJycpIH0sIGVtcHR5VGV4dCk7XG4gICAgfVxufVxuRWRpdG9yUGxhY2VIb2xkZXIuREVGQVVMVF9FTVBUWV9URVhUX0xBQkVMID0gJ1BsZWFzZSBjb25maWd1cmUgdGhlIGNvbXBvbmVudCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljR3hoWTJWb2IyeGtaWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SndiR0ZqWldodmJHUmxjaTUwYzNnaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlEwRTdPenM3T3pzN096czdPenM3TzBkQlkwYzdRVUZEU0N4UFFVRlBMRXRCUVVzc1JVRkJSU3hGUVVGRExGTkJRVk1zUlVGQlF5eE5RVUZOTEU5QlFVOHNRMEZCUXp0QlFWRjJReXhOUVVGTkxFOUJRVThzYVVKQlFXdENMRk5CUVZFc1UwRkJaME03U1VGSmJrVXNUVUZCVFR0UlFVTkdMRTFCUVUwc1MwRkJTeXhIUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4alFVRmpMRWxCUVVrc1NVRkJTU3hKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNZMEZCWXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhqUVVGakxFZEJRVWtzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNN1VVRkROMGtzVFVGQlRTeExRVUZMTEVkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExHVkJRV1VzU1VGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4RFFVRkRMR2xDUVVGcFFpeERRVUZETEhkQ1FVRjNRaXhEUVVGRE8xRkJRM1JKTEUxQlFVMHNVMEZCVXl4SFFVRkhMRXRCUVVzc1IwRkJSeXhMUVVGTExFTkJRVU03VVVGRmFFTXNUMEZCVHl4RFFVTklMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkRjRU1zUTBGQlFUdEpRVU5NTEVOQlFVTTdTVUZIUkN4cFFrRkJhVUlzUTBGQlF5eFRRVUZwUWp0UlFVTXZRaXhQUVVGUExEWkNRVU5JTEZOQlFWTXNSVUZCUlN4blFrRkJaMElzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1YwRkJWeXhKUVVGSkxFbEJRVWtzUTBGQlFTeERRVUZETEVOQlFVTXNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1NVRkRhRWNzVTBGQlV5eERRVU5TTEVOQlFVTTdTVUZEV0N4RFFVRkRPenRCUVd4Q1RTd3dRMEZCZDBJc1IwRkJWeXhuUTBGQlowTXNRMEZCUXlKOSIsIi8qXG4gKiAgQ29weXJpZ2h0IDIwMjAgQWRvYmVcbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEVkaXRvclBsYWNlSG9sZGVyIH0gZnJvbSBcIi4vY29tbW9uL3BsYWNlaG9sZGVyXCI7XG4vKipcbiAqIEFic3RyYWN0Q29yZUNvbXBvbmVudCAtIHByb3ZpZGVzIGFic3RyYWN0aW9uIGFuZCBoZWxwZXIgbWV0aG9kcyB0byBzaG93IGEgcGxhY2Vob2xkZXIgaWYgdGhlIGNvbXBvbmVudCBpcyBlbXB0eSBhbmQgYXV0aG9yIG1vZGUgaXMgb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdENvcmVDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIC8qKlxuICAgICAqIEJhc2UgQ29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0gcHJvcHMgY29tcG9uZW50IHByb3BlcnRpZXNcbiAgICAgKiBAcGFyYW0gYmFzZUNzc0NscyB0aGUgYmFzZSBCRU0gY3NzIGNsYXNzIHRvIGJlIHVzZWQgZm9yIHRoZSBjb21wb25lbnRcbiAgICAgKiBAcGFyYW0gZW1wdHlQbGFjZUhvbGRlclRleHQgZW1wdHkgcGxhY2Vob2xkZXIgbGFiZWwgZm9yIHdoZW4gdGhlIGNvbXBvbmVudCBuZWVkcyB0byBiZSBjb25maWd1cmVkIGluIGF1dGhvciBtb2RlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocHJvcHMsIGJhc2VDc3NDbHMsIGVtcHR5UGxhY2VIb2xkZXJUZXh0KSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5iYXNlQ3NzQ2xzID0gYmFzZUNzc0NscztcbiAgICAgICAgdGhpcy5lbXB0eVBsYWNlSG9sZGVyVGV4dCA9IGVtcHR5UGxhY2VIb2xkZXJUZXh0O1xuICAgIH1cbiAgICBfX2hpZGVQbGFjZUhvbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuaGlkZVBsYWNlSG9sZGVyO1xuICAgIH1cbiAgICBfX3JlbmRlclBsYWNlSG9sZGVyKHRpdGxlLCBlbXB0eVRleHQpIHtcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KEVkaXRvclBsYWNlSG9sZGVyLCB7IGVtcHR5VGV4dEFwcGVuZDogZW1wdHlUZXh0LCBjb21wb25lbnRUaXRsZTogdGl0bGUgfSkpO1xuICAgIH1cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IGlzRW1wdHkgPSB0aGlzLmlzRW1wdHkoKTtcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICAgICAgIWlzRW1wdHkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudCgpLFxuICAgICAgICAgICAgKGlzRW1wdHkgJiYgdGhpcy5wcm9wcy5pc0luRWRpdG9yICYmICF0aGlzLl9faGlkZVBsYWNlSG9sZGVyKCkpICYmIHRoaXMuX19yZW5kZXJQbGFjZUhvbGRlcih0aGlzLmVtcHR5UGxhY2VIb2xkZXJUZXh0KSkpO1xuICAgIH1cbn1cbkFic3RyYWN0Q29yZUNvbXBvbmVudC5kZWZhdWx0UHJvcHMgPSB7XG4gICAgaGlkZVBsYWNlSG9sZGVyOiBmYWxzZSxcbiAgICBpc0luRWRpdG9yOiBmYWxzZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVFXSnpkSEpoWTNSRGIzSmxRMjl0Y0c5dVpXNTBMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaVFXSnpkSEpoWTNSRGIzSmxRMjl0Y0c5dVpXNTBMblJ6ZUNKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFUczdPenM3T3pzN096czdPenM3UjBGalJ6dEJRVVZJTEU5QlFVOHNTMEZCU3l4TlFVRk5MRTlCUVU4c1EwRkJRenRCUVVNeFFpeFBRVUZQTEVWQlFVTXNhVUpCUVdsQ0xFVkJRVU1zVFVGQlRTeHpRa0ZCYzBJc1EwRkJRenRCUVZsMlJEczdSMEZGUnp0QlFVTklMRTFCUVUwc1QwRkJaMElzY1VKQlFUQkdMRk5CUVZFc1MwRkJTeXhEUVVGRExGTkJRWE5DTzBsQlZXaEtPenM3T3p0UFFVdEhPMGxCUTBnc1dVRkJjMElzUzBGQlZ5eEZRVUZETEZWQlFXbENMRVZCUVVNc2IwSkJRVEpDTzFGQlF6TkZMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU5pTEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1ZVRkJWU3hEUVVGRE8xRkJRemRDTEVsQlFVa3NRMEZCUXl4dlFrRkJiMElzUjBGQlJ5eHZRa0ZCYjBJc1EwRkJRenRKUVVOeVJDeERRVUZETzBsQldVOHNhVUpCUVdsQ08xRkJRM0pDTEU5QlFVOHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhsUVVGbExFTkJRVU03U1VGRGRFTXNRMEZCUXp0SlFVVlBMRzFDUVVGdFFpeERRVUZETEV0QlFXRXNSVUZCUlN4VFFVRnBRanRSUVVONFJDeFBRVUZOTEVOQlEwWXNiMEpCUVVNc2FVSkJRV2xDTEVsQlEyUXNaVUZCWlN4RlFVRkZMRk5CUVZNc1JVRkRNVUlzWTBGQll5eEZRVUZGTEV0QlFVc3NSMEZEZGtJc1EwRkRUQ3hEUVVGQk8wbEJRMHdzUTBGQlF6dEpRVVZFTEUxQlFVMDdVVUZEUml4TlFVRk5MRTlCUVU4c1IwRkJWeXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdVVUZGZGtNc1QwRkJUeXhEUVVOSU8xbEJRMDBzUTBGQlF5eFBRVUZQTzJkQ1FVTk9MRWxCUVVrc1EwRkJReXhsUVVGbExFVkJRVVU3V1VGSGRFSXNRMEZCUXl4UFFVRlBMRWxCUVVrc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFZRVUZWTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVWQlFVVXNRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4SlFVRkpMRU5CUVVNc2IwSkJRVzlDTEVOQlFVTXNRMEZGTTBnc1EwRkRUaXhEUVVGQk8wbEJRMHdzUTBGQlF6czdRVUY0UkdFc2EwTkJRVmtzUjBGQlJ6dEpRVU42UWl4bFFVRmxMRVZCUVVVc1MwRkJTenRKUVVOMFFpeFZRVUZWTEVWQlFVVXNTMEZCU3p0RFFVTndRaXhEUVVGREluMD0iLCIvKlxuICogIENvcHlyaWdodCAyMDIwIEFkb2JlXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTGluayBhcyBSb3V0ZXJMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5leHBvcnQgY29uc3QgUm91dGVkTGluayA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgdG8sIGlzUm91dGVkLCAuLi5vdGhlclByb3BzIH0gPSBwcm9wcztcbiAgICBpZiAodG8gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgT2JqZWN0LmFzc2lnbih7IGhyZWY6ICcjJyB9LCBwcm9wcykpO1xuICAgIH1cbiAgICBjb25zdCBpc0V4dGVybmFsID0gL15odHRwcz86XFwvXFwvLy50ZXN0KHRvKTtcbiAgICByZXR1cm4gaXNFeHRlcm5hbCB8fCAhaXNSb3V0ZWQgP1xuICAgICAgICAoUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgT2JqZWN0LmFzc2lnbih7IGhyZWY6IHRvIH0sIHByb3BzKSkpXG4gICAgICAgIDpcbiAgICAgICAgICAgIChSZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlckxpbmssIE9iamVjdC5hc3NpZ24oe30sIG90aGVyUHJvcHMsIHsgdG86IHRvIH0pKSk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVW05MWRHVmtUR2x1YXk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbEp2ZFhSbFpFeHBibXN1ZEhONElsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJPenM3T3pzN096czdPenM3T3p0SFFXTkhPMEZCUlVnc1QwRkJUeXhMUVVGTExFMUJRVTBzVDBGQlR5eERRVUZETzBGQlF6RkNMRTlCUVU4c1JVRkJReXhKUVVGSkxFbEJRVWtzVlVGQlZTeEZRVUZETEUxQlFVMHNhMEpCUVd0Q0xFTkJRVU03UVVGUGNFUXNUVUZCVFN4RFFVRkRMRTFCUVUwc1ZVRkJWU3hIUVVGSExFTkJRVU1zUzBGQlpTeEZRVUZGTEVWQlFVVTdTVUZETVVNc1RVRkJUU3hGUVVGRExFVkJRVVVzUlVGQlJTeFJRVUZSTEVWQlFVVXNSMEZCUnl4VlFVRlZMRVZCUVVNc1IwRkJSeXhMUVVGTExFTkJRVU03U1VGRk5VTXNTVUZCUnl4RlFVRkZMRXRCUVVzc1UwRkJVeXhGUVVGRE8xRkJRMmhDTEU5QlFVOHNlVU5CUVVjc1NVRkJTU3hGUVVGRkxFZEJRVWNzU1VGRFdDeExRVUZMTEVWQlExZ3NRMEZCUXp0TFFVTk9PMGxCUTBRc1RVRkJUU3hWUVVGVkxFZEJRVWNzWTBGQll5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRKUVVVelF5eFBRVUZQTEZWQlFWVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJRU3hEUVVGRE8xRkJRek5DTEVOQlFVTXNlVU5CUTBjc1NVRkJTU3hGUVVGRkxFVkJRVVVzU1VGRFNpeExRVUZMTEVWQlExZ3NRMEZCUXp0UlFVTklMRU5CUVVNN1dVRkRSQ3hEUVVGRkxHOUNRVUZETEZWQlFWVXNiMEpCUVVzc1ZVRkJWU3hKUVVOa0xFVkJRVVVzUlVGQlJTeEZRVUZGTEVsQlEyeENMRU5CUVVNc1EwRkJRVHRCUVVOWUxFTkJRVU1zUTBGQlF5SjkiLCIvKlxuICogIENvcHlyaWdodCAyMDIwIEFkb2JlXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJdGVtUm91dGVkKHNlbGZQcm9wcywgaXRlbSkge1xuICAgIHJldHVybiAoKHNlbGZQcm9wcy5yb3V0ZWQgPT09IHRydWUgJiYgaXRlbS5yb3V0ZWQgIT09IGZhbHNlKSB8fCBpdGVtLnJvdXRlZCA9PT0gdHJ1ZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lVbTkxZEdWa1EyOXlaVU52YlhCdmJtVnVkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklsSnZkWFJsWkVOdmNtVkRiMjF3YjI1bGJuUXVkSE40SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQk96czdPenM3T3pzN096czdPenRIUVdOSE8wRkJZVWdzVFVGQlRTeFZRVUZWTEZsQlFWa3NRMEZCUXl4VFFVRnhRaXhGUVVGRkxFbEJRV2RDTzBsQlEyaEZMRTlCUVU4c1EwRkJReXhEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEV0QlFVc3NTVUZCU1N4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFdEJRVXNzUzBGQlN5eERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1MwRkJTeXhKUVVGSkxFTkJRVU1zUTBGQlF6dEJRVU14Uml4RFFVRkRJbjA9IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtcm91dGVyLWRvbVwiKTsiLCIvKlxuICogIENvcHlyaWdodCAyMDIwIEFkb2JlXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb3JlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uLy4uL0Fic3RyYWN0Q29yZUNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUm91dGVkTGluayB9IGZyb20gXCIuLi8uLi8uLi9yb3V0aW5nL1JvdXRlZExpbmtcIjtcbmV4cG9ydCBmdW5jdGlvbiBUaXRsZVYySXNFbXB0eUZuKHByb3BzKSB7XG4gICAgcmV0dXJuIHByb3BzLnRleHQgPT0gbnVsbCB8fCBwcm9wcy50ZXh0Lmxlbmd0aCA9PT0gMDtcbn1cbmV4cG9ydCBjbGFzcyBUaXRsZVYyIGV4dGVuZHMgQWJzdHJhY3RDb3JlQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcywgJ2NtcC10aXRsZScsICdUaXRsZVYyJyk7XG4gICAgfVxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiBUaXRsZVYySXNFbXB0eUZuKHRoaXMucHJvcHMpO1xuICAgIH1cbiAgICBnZW5lcmF0ZUxpbmsoKSB7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZWRMaW5rLCB7IGNsYXNzTmFtZTogdGhpcy5iYXNlQ3NzQ2xzICsgJ19fbGluaycsIGlzUm91dGVkOiB0aGlzLnByb3BzLnJvdXRlZCwgdG86IHRoaXMucHJvcHMubGlua1VSTCB9LCB0aGlzLnByb3BzLnRleHQpKTtcbiAgICB9XG4gICAgZ2V0Q29udGVudHMoKSB7XG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5saW5rRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlTGluaygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgdGhpcy5wcm9wcy50ZXh0KSk7XG4gICAgfVxuICAgIHJlbmRlckNvbXBvbmVudCgpIHtcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiB0aGlzLmJhc2VDc3NDbHMgfSwgUmVhY3QuY3JlYXRlRWxlbWVudCh0aGlzLnByb3BzLnR5cGUgfHwgJ2gzJywge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiB0aGlzLmJhc2VDc3NDbHMgKyAnX190ZXh0JyxcbiAgICAgICAgfSwgdGhpcy5nZXRDb250ZW50cygpKSkpO1xuICAgIH1cbn1cblRpdGxlVjIuZGVmYXVsdFByb3BzID0ge1xuICAgIGlzSW5FZGl0b3I6IGZhbHNlLFxuICAgIGhpZGVQbGFjZUhvbGRlcjogZmFsc2Vcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lWR2wwYkdWV01pNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWxScGRHeGxWakl1ZEhONElsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJPenM3T3pzN096czdPenM3T3p0SFFXTkhPMEZCUlVnc1QwRkJUeXhMUVVGTExFMUJRVTBzVDBGQlR5eERRVUZETzBGQlF6RkNMRTlCUVU4c1JVRkJReXh4UWtGQmNVSXNSVUZCY1VJc1RVRkJUU3huUTBGQlowTXNRMEZCUXp0QlFVVjZSaXhQUVVGUExFVkJRVU1zVlVGQlZTeEZRVUZETEUxQlFVMHNOa0pCUVRaQ0xFTkJRVU03UVVGVGRrUXNUVUZCVFN4VlFVRlZMR2RDUVVGblFpeERRVUZETEV0QlFXdENPMGxCUXk5RExFOUJRVThzUzBGQlN5eERRVUZETEVsQlFVa3NTVUZCU1N4SlFVRkpMRWxCUVVrc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNwRUxFTkJRVU03UVVGRlJDeE5RVUZOTEU5QlFVOHNUMEZCYzBVc1UwRkJVU3h4UWtGQmJVTTdTVUZQTVVnc1dVRkJXU3hMUVVGWk8xRkJRM0JDTEV0QlFVc3NRMEZCUXl4TFFVRkxMRVZCUVVVc1YwRkJWeXhGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZETzBsQlEzcERMRU5CUVVNN1NVRkZSQ3hQUVVGUE8xRkJRMGdzVDBGQlR5eG5Ra0ZCWjBJc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdTVUZEZUVNc1EwRkJRenRKUVVWRUxGbEJRVms3VVVGRFVpeFBRVUZQTEVOQlEwZ3NiMEpCUVVNc1ZVRkJWU3hKUVVGRExGTkJRVk1zUlVGQlJTeEpRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRkZCUVZFc1JVRkJSU3hSUVVGUkxFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1JVRkJSU3hGUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4SlFVTnFSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZEVUN4RFFVTm9RaXhEUVVGQk8wbEJRMHdzUTBGQlF6dEpRVVZFTEZkQlFWYzdVVUZGVUN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFpRVUZaTEVWQlFVTTdXVUZEZWtJc1QwRkJUeXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTEVOQlFVTTdVMEZET1VJN1VVRkZSQ3hQUVVGUExFTkJRMGdzTUVOQlEwc3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRMnBDTEVOQlEwNHNRMEZCUVR0SlFVTk1MRU5CUVVNN1NVRkZSQ3hsUVVGbE8xRkJSVmdzVDBGQlR5eERRVU5JTERaQ1FVRkxMRk5CUVZNc1JVRkJSU3hKUVVGSkxFTkJRVU1zVlVGQlZTeEpRVVYyUWl4TFFVRkxMRU5CUVVNc1lVRkJZU3hEUVVOc1FpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1NVRkJTU3hKUVVGSkxFVkJRM0JDTzFsQlEwa3NVMEZCVXl4RlFVRkZMRWxCUVVrc1EwRkJReXhWUVVGVkxFZEJRVWNzVVVGQlVUdFRRVU40UXl4RlFVTkVMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGRGNrSXNRMEZIU0N4RFFVTlVMRU5CUVVFN1NVRkRUQ3hEUVVGRE96dEJRV3hFWVN4dlFrRkJXU3hIUVVGSE8wbEJRM3BDTEZWQlFWVXNSVUZCUlN4TFFVRkxPMGxCUTJwQ0xHVkJRV1VzUlVGQlJTeExRVUZMTzBOQlEzcENMRU5CUVVNaWZRPT0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb3JlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uLy4uL0Fic3RyYWN0Q29yZUNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUm91dGVkTGluayB9IGZyb20gXCIuLi8uLi8uLi9yb3V0aW5nL1JvdXRlZExpbmtcIjtcbmV4cG9ydCBmdW5jdGlvbiBJbWFnZVYySXNFbXB0eUZuKHByb3BzKSB7XG4gICAgcmV0dXJuICghcHJvcHMuc3JjKSB8fCBwcm9wcy5zcmMubGVuZ3RoID09PSAwO1xufVxuZXhwb3J0IGNsYXNzIEltYWdlVjIgZXh0ZW5kcyBBYnN0cmFjdENvcmVDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzLCAnY21wLWltYWdlJywgJ0ltYWdlVjInKTtcbiAgICB9XG4gICAgZ2VuZXJhdGVMaW5rKCkge1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVkTGluaywgeyBjbGFzc05hbWU6IHRoaXMuYmFzZUNzc0NscyArICdfX2xpbmsnLCBpc1JvdXRlZDogdGhpcy5wcm9wcy5yb3V0ZWQsIHRvOiB0aGlzLnByb3BzLmxpbmsgfSwgdGhpcy5nZXRJbm5lckNvbnRlbnRzKCkpKTtcbiAgICB9XG4gICAgZ2V0SW5uZXJDb250ZW50cygpIHtcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7IHNyYzogdGhpcy5wcm9wcy5zcmMsIGNsYXNzTmFtZTogdGhpcy5iYXNlQ3NzQ2xzICsgJ19faW1hZ2UnLCBhbHQ6IHRoaXMucHJvcHMuYWx0IH0pLFxuICAgICAgICAgICAgISEodGhpcy5wcm9wcy50aXRsZSkgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IHRoaXMuYmFzZUNzc0NscyArICdfX3RpdGxlJywgaXRlbVByb3A6IFwiY2FwdGlvblwiIH0sIHRoaXMucHJvcHMudGl0bGUpLFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5kaXNwbGF5UG9wdXBUaXRsZSAmJiAoISF0aGlzLnByb3BzLnRpdGxlKSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwibWV0YVwiLCB7IGl0ZW1Qcm9wOiBcImNhcHRpb25cIiwgY29udGVudDogdGhpcy5wcm9wcy50aXRsZSB9KSkpO1xuICAgIH1cbiAgICBnZXRDb250ZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMubGluayAmJiB0aGlzLnByb3BzLmxpbmsudHJpbSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlTGluaygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldElubmVyQ29udGVudHMoKTtcbiAgICB9XG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIEltYWdlVjJJc0VtcHR5Rm4odGhpcy5wcm9wcyk7XG4gICAgfVxuICAgIHJlbmRlckNvbXBvbmVudCgpIHtcbiAgICAgICAgY29uc3QgY3NzQ2xhc3NOYW1lID0gKHRoaXMucHJvcHMuaXNJbkVkaXRvcikgPyB0aGlzLmJhc2VDc3NDbHMgKyAnIGNxLWRkLWltYWdlJyA6IHRoaXMuYmFzZUNzc0NscztcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjc3NDbGFzc05hbWUgfSwgdGhpcy5nZXRDb250ZW50cygpKSk7XG4gICAgfVxufVxuSW1hZ2VWMi5kZWZhdWx0UHJvcHMgPSB7XG4gICAgaGlkZVBsYWNlSG9sZGVyOiBmYWxzZSxcbiAgICBpc0luRWRpdG9yOiBmYWxzZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVNXMWhaMlZXTWk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJa2x0WVdkbFZqSXVkSE40SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFOUJRVThzUzBGQlN5eE5RVUZOTEU5QlFVOHNRMEZCUXp0QlFVTXhRaXhQUVVGUExFVkJRVU1zY1VKQlFYRkNMRVZCUVhGQ0xFMUJRVTBzWjBOQlFXZERMRU5CUVVNN1FVRkZla1lzVDBGQlR5eEZRVUZETEZWQlFWVXNSVUZCUXl4TlFVRk5MRFpDUVVFMlFpeERRVUZETzBGQlZYWkVMRTFCUVUwc1ZVRkJWU3huUWtGQlowSXNRMEZCUXl4TFFVRTJRanRKUVVNeFJDeFBRVUZQTEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRMnhFTEVOQlFVTTdRVUZGUkN4TlFVRk5MRTlCUVU4c1QwRkJaMFlzVTBGQlVTeHhRa0ZCYTBNN1NVRlJia2tzV1VGQldTeExRVUZaTzFGQlEzQkNMRXRCUVVzc1EwRkJReXhMUVVGTExFVkJRVVVzVjBGQlZ5eEZRVUZGTEZOQlFWTXNRMEZCUXl4RFFVRkRPMGxCUTNwRExFTkJRVU03U1VGRlJDeFpRVUZaTzFGQlExSXNUMEZCVHl4RFFVTklMRzlDUVVGRExGVkJRVlVzU1VGQlF5eFRRVUZUTEVWQlFVVXNTVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhSUVVGUkxFVkJRVVVzVVVGQlVTeEZRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1NVRkRPVVlzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhGUVVGRkxFTkJRMllzUTBGRGFFSXNRMEZCUVR0SlFVTk1MRU5CUVVNN1NVRkZSQ3huUWtGQlowSTdVVUZEV2l4UFFVRlBMRU5CUTBnN1dVRkRTU3cyUWtGQlN5eEhRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFVkJRMjVDTEZOQlFWTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1ZVRkJWU3hIUVVGSExGTkJRVk1zUlVGRGRFTXNSMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eEhRVUZITzFsQlJYWkNMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc09FSkJRVTBzVTBGQlV5eEZRVUZGTEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1UwRkJVeXhGUVVGRkxGRkJRVkVzUlVGQlF5eFRRVUZUTEVsQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVkU3V1VGSGJFZ3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhwUWtGQmFVSXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRGhDUVVGTkxGRkJRVkVzUlVGQlF5eFRRVUZUTEVWQlFVTXNUMEZCVHl4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eEhRVUZITEVOQlJXeElMRU5CUTA0c1EwRkJRenRKUVVOT0xFTkJRVU03U1VGRlJDeFhRVUZYTzFGQlExQXNTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RlFVRkRPMWxCUTNKRUxFOUJRVThzU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlN4RFFVRkRPMU5CUXpsQ08xRkJRMFFzVDBGQlR5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVVzUTBGQlF6dEpRVU51UXl4RFFVRkRPMGxCUlVRc1QwRkJUenRSUVVOSUxFOUJRVThzWjBKQlFXZENMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBsQlEzaERMRU5CUVVNN1NVRkZSQ3hsUVVGbE8xRkJRMWdzVFVGQlRTeFpRVUZaTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hIUVVGSExHTkJRV01zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJRenRSUVVWc1J5eFBRVUZQTEVOQlEwZ3NOa0pCUVVzc1UwRkJVeXhGUVVGRkxGbEJRVmtzU1VGRGRrSXNTVUZCU1N4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVOcVFpeERRVU5VTEVOQlFVRTdTVUZEVEN4RFFVRkRPenRCUVhKRVlTeHZRa0ZCV1N4SFFVRkhPMGxCUTNwQ0xHVkJRV1VzUlVGQlJTeExRVUZMTzBsQlEzUkNMRlZCUVZVc1JVRkJSU3hMUVVGTE8wTkJRM0JDTEVOQlFVTWlmUT09IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWJzdHJhY3RDb3JlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uLy4uL0Fic3RyYWN0Q29yZUNvbXBvbmVudFwiO1xuaW1wb3J0IHsgSW1hZ2VWMiB9IGZyb20gXCIuLi8uLi8uLi9hdXRob3JpbmcvaW1hZ2UvdjIvSW1hZ2VWMlwiO1xuaW1wb3J0IHsgVGl0bGVWMiB9IGZyb20gXCIuLi8uLi8uLi9hdXRob3JpbmcvdGl0bGUvdjIvVGl0bGVWMlwiO1xuaW1wb3J0IHsgUm91dGVkTGluayB9IGZyb20gXCIuLi8uLi8uLi9yb3V0aW5nL1JvdXRlZExpbmtcIjtcbmltcG9ydCB7IGlzSXRlbVJvdXRlZCB9IGZyb20gXCIuLi8uLi8uLi9yb3V0aW5nL1JvdXRlZENvcmVDb21wb25lbnRcIjtcbmV4cG9ydCBmdW5jdGlvbiBUZWFzZXJWMUlzRW1wdHlGbihwcm9wcykge1xuICAgIHJldHVybiAoIXByb3BzLmltYWdlUGF0aCAmJiAhcHJvcHMuZGVzY3JpcHRpb24gJiYgcHJvcHMuYWN0aW9ucy5sZW5ndGggPT0gMCk7XG59XG5leHBvcnQgY2xhc3MgVGVhc2VyVjEgZXh0ZW5kcyBBYnN0cmFjdENvcmVDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzLCAnY21wLXRlYXNlcicsICdUZWFzZXJWMScpO1xuICAgIH1cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gVGVhc2VyVjFJc0VtcHR5Rm4odGhpcy5wcm9wcyk7XG4gICAgfVxuICAgIGdldCBpbWFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuaW1hZ2VQYXRoICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiB0aGlzLmJhc2VDc3NDbHMgKyAnX19pbWFnZScgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW1hZ2VWMiwgeyBpc0luRWRpdG9yOiB0aGlzLnByb3BzLmlzSW5FZGl0b3IsIHNyYzogdGhpcy5wcm9wcy5pbWFnZVBhdGgsIGFsdDogXCJ0ZW1wb3JhcnkgaW1hZ2VcIiB9KSkpO1xuICAgIH1cbiAgICBnZXQgcHJldGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnByZXRpdGxlICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IHRoaXMuYmFzZUNzc0NscyArICdfX3ByZXRpdGxlJyB9LCB0aGlzLnByb3BzLnByZXRpdGxlKTtcbiAgICB9XG4gICAgZ2V0IHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy50aXRsZSAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChUaXRsZVYyLCB7IHR5cGU6IHRoaXMucHJvcHMudGl0bGVUeXBlLCBpc0luRWRpdG9yOiB0aGlzLnByb3BzLmlzSW5FZGl0b3IsIGxpbmtEaXNhYmxlZDogZmFsc2UsIHRleHQ6IHRoaXMucHJvcHMudGl0bGUsIGxpbmtVUkw6IHRoaXMucHJvcHMubGlua1VSTCB9KSk7XG4gICAgfVxuICAgIGdldCBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMucHJvcHMuZGVzY3JpcHRpb247XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmRlc2NyaXB0aW9uICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiB0aGlzLmJhc2VDc3NDbHMgKyAnX19kZXNjcmlwdGlvbicsIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7IF9faHRtbDogdGV4dCB9IH0pKTtcbiAgICB9XG4gICAgZ2VuZXJhdGVMaW5rKGFjdGlvbiwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlZExpbmssIHsgaXNSb3V0ZWQ6IGlzSXRlbVJvdXRlZCh0aGlzLnByb3BzLCBhY3Rpb24pLCBjbGFzc05hbWU6IHRoaXMuYmFzZUNzc0NscyArICdfX2FjdGlvbi1saW5rJywgdG86IGFjdGlvbi5VUkwgfSxcbiAgICAgICAgICAgIFwiJFwiLFxuICAgICAgICAgICAgYWN0aW9uLnRpdGxlKSk7XG4gICAgfVxuICAgIGdldCBhY3Rpb25zKCkge1xuICAgICAgICBjb25zdCBoYXNBY3Rpb25zID0gdGhpcy5wcm9wcy5hY3Rpb25zLmxlbmd0aCA+IDA7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmFjdGlvbnNFbmFibGVkICYmIGhhc0FjdGlvbnMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IHRoaXMuYmFzZUNzc0NscyArICdfX2FjdGlvbi1jb250YWluZXInIH0sIHRoaXMucHJvcHMuYWN0aW9ucy5tYXAoKGFjdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVMaW5rKGFjdGlvbiwgaW5kZXgpO1xuICAgICAgICB9KSkpO1xuICAgIH1cbiAgICByZW5kZXJDb21wb25lbnQoKSB7XG4gICAgICAgIGNvbnN0IGNzc0NsYXNzID0gdGhpcy5iYXNlQ3NzQ2xzICsgKHRoaXMucHJvcHMuaXNJbkVkaXRvcikgPyAnIGNxLWRkLWltYWdlJyA6ICcnO1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNzc0NsYXNzIH0sXG4gICAgICAgICAgICB0aGlzLmltYWdlLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogdGhpcy5iYXNlQ3NzQ2xzICsgJ19fY29udGVudCcgfSxcbiAgICAgICAgICAgICAgICB0aGlzLnByZXRpdGxlLFxuICAgICAgICAgICAgICAgIHRoaXMudGl0bGUsXG4gICAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbnMpKSk7XG4gICAgfVxufVxuVGVhc2VyVjEuZGVmYXVsdFByb3BzID0ge1xuICAgIGhpZGVQbGFjZUhvbGRlcjogZmFsc2UsXG4gICAgaXNJbkVkaXRvcjogZmFsc2Vcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lWR1ZoYzJWeVZqRXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKVVpXRnpaWEpXTVM1MGMzZ2lYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzVDBGQlR5eExRVUZMTEUxQlFVMHNUMEZCVHl4RFFVRkRPMEZCUXpGQ0xFOUJRVThzUlVGQlF5eHhRa0ZCY1VJc1JVRkJlVU1zVFVGQlRTeG5RMEZCWjBNc1EwRkJRenRCUVVNM1J5eFBRVUZQTEVWQlFVTXNUMEZCVHl4RlFVRkRMRTFCUVUwc2NVTkJRWEZETEVOQlFVTTdRVUZETlVRc1QwRkJUeXhGUVVGRExFOUJRVThzUlVGQlF5eE5RVUZOTEhGRFFVRnhReXhEUVVGRE8wRkJRelZFTEU5QlFVOHNSVUZCUXl4VlFVRlZMRVZCUVVNc1RVRkJUU3cyUWtGQk5rSXNRMEZCUXp0QlFVTjJSQ3hQUVVGUExFVkJRVEpDTEZsQlFWa3NSVUZCWXl4TlFVRk5MSE5EUVVGelF5eERRVUZETzBGQlJYcEhMRTFCUVUwc1ZVRkJWU3hwUWtGQmFVSXNRMEZCUXl4TFFVRnRRanRKUVVOcVJDeFBRVUZQTEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1UwRkJVeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZkQlFWY3NTVUZCU3l4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUVR0QlFVTnFSaXhEUVVGRE8wRkJiMEpFTEUxQlFVMHNUMEZCVHl4UlFVRjNSU3hUUVVGUkxIRkNRVUZ0UXp0SlFVODFTQ3haUVVGWkxFdEJRVms3VVVGRGNFSXNTMEZCU3l4RFFVRkRMRXRCUVVzc1JVRkJSU3haUVVGWkxFVkJRVVVzVlVGQlZTeERRVUZETEVOQlFVTTdTVUZETTBNc1EwRkJRenRKUVVWRUxFOUJRVTg3VVVGRFNDeFBRVUZQTEdsQ1FVRnBRaXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0SlFVTjZReXhEUVVGRE8wbEJSVVFzU1VGQlNTeExRVUZMTzFGQlEwd3NUMEZCVHl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zU1VGQlNTeERRVU16UWl3MlFrRkJTeXhUUVVGVExFVkJRVVVzU1VGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4VFFVRlRPMWxCUTNaRExHOUNRVUZETEU5QlFVOHNTVUZCUXl4VlFVRlZMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFZRVUZWTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eEZRVUZGTEVkQlFVY3NSVUZCUlN4cFFrRkJhVUlzUjBGQlJ5eERRVU01Uml4RFFVTlVMRU5CUVVNN1NVRkRUaXhEUVVGRE8wbEJSVVFzU1VGQlNTeFJRVUZSTzFGQlExSXNUMEZCVHl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzU1VGQlNTdzJRa0ZCU3l4VFFVRlRMRVZCUVVVc1NVRkJTU3hEUVVGRExGVkJRVlVzUjBGQlJ5eFpRVUZaTEVsQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhSUVVGUkxFTkJRVThzUTBGQlFUdEpRVVUzUnl4RFFVRkRPMGxCUlVRc1NVRkJTU3hMUVVGTE8xRkJRMHdzVDBGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1NVRkJTU3hEUVVOMlFpeHZRa0ZCUXl4UFFVRlBMRWxCUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVMEZCVXl4RlFVTXhRaXhWUVVGVkxFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRM