-
Notifications
You must be signed in to change notification settings - Fork 2
/
2733.123622e1.iframe.bundle.js
2 lines (2 loc) · 77.8 KB
/
2733.123622e1.iframe.bundle.js
1
2
(self.webpackChunkblockly_mooc=self.webpackChunkblockly_mooc||[]).push([[2733,5114],{"./node_modules/css-loader/dist/runtime/api.js":module=>{"use strict";module.exports=function(cssWithMappingToString){var list=[];return list.toString=function toString(){return this.map((function(item){var content="",needLayer=void 0!==item[5];return item[4]&&(content+="@supports (".concat(item[4],") {")),item[2]&&(content+="@media ".concat(item[2]," {")),needLayer&&(content+="@layer".concat(item[5].length>0?" ".concat(item[5]):""," {")),content+=cssWithMappingToString(item),needLayer&&(content+="}"),item[2]&&(content+="}"),item[4]&&(content+="}"),content})).join("")},list.i=function i(modules,media,dedupe,supports,layer){"string"==typeof modules&&(modules=[[null,modules,void 0]]);var alreadyImportedModules={};if(dedupe)for(var k=0;k<this.length;k++){var id=this[k][0];null!=id&&(alreadyImportedModules[id]=!0)}for(var _k=0;_k<modules.length;_k++){var item=[].concat(modules[_k]);dedupe&&alreadyImportedModules[item[0]]||(void 0!==layer&&(void 0===item[5]||(item[1]="@layer".concat(item[5].length>0?" ".concat(item[5]):""," {").concat(item[1],"}")),item[5]=layer),media&&(item[2]?(item[1]="@media ".concat(item[2]," {").concat(item[1],"}"),item[2]=media):item[2]=media),supports&&(item[4]?(item[1]="@supports (".concat(item[4],") {").concat(item[1],"}"),item[4]=supports):item[4]="".concat(supports)),list.push(item))}},list}},"./node_modules/css-loader/dist/runtime/sourceMaps.js":module=>{"use strict";module.exports=function(item){var content=item[1],cssMapping=item[3];if(!cssMapping)return content;if("function"==typeof btoa){var base64=btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))),data="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64),sourceMapping="/*# ".concat(data," */"),sourceURLs=cssMapping.sources.map((function(source){return"/*# sourceURL=".concat(cssMapping.sourceRoot||"").concat(source," */")}));return[content].concat(sourceURLs).concat([sourceMapping]).join("\n")}return[content].join("\n")}},"./node_modules/lodash/debounce.js":(module,__unused_webpack_exports,__webpack_require__)=>{var isObject=__webpack_require__("./node_modules/lodash/isObject.js"),now=__webpack_require__("./node_modules/lodash/now.js"),toNumber=__webpack_require__("./node_modules/lodash/toNumber.js"),nativeMax=Math.max,nativeMin=Math.min;module.exports=function debounce(func,wait,options){var lastArgs,lastThis,maxWait,result,timerId,lastCallTime,lastInvokeTime=0,leading=!1,maxing=!1,trailing=!0;if("function"!=typeof func)throw new TypeError("Expected a function");function invokeFunc(time){var args=lastArgs,thisArg=lastThis;return lastArgs=lastThis=void 0,lastInvokeTime=time,result=func.apply(thisArg,args)}function shouldInvoke(time){var timeSinceLastCall=time-lastCallTime;return void 0===lastCallTime||timeSinceLastCall>=wait||timeSinceLastCall<0||maxing&&time-lastInvokeTime>=maxWait}function timerExpired(){var time=now();if(shouldInvoke(time))return trailingEdge(time);timerId=setTimeout(timerExpired,function remainingWait(time){var timeWaiting=wait-(time-lastCallTime);return maxing?nativeMin(timeWaiting,maxWait-(time-lastInvokeTime)):timeWaiting}(time))}function trailingEdge(time){return timerId=void 0,trailing&&lastArgs?invokeFunc(time):(lastArgs=lastThis=void 0,result)}function debounced(){var time=now(),isInvoking=shouldInvoke(time);if(lastArgs=arguments,lastThis=this,lastCallTime=time,isInvoking){if(void 0===timerId)return function leadingEdge(time){return lastInvokeTime=time,timerId=setTimeout(timerExpired,wait),leading?invokeFunc(time):result}(lastCallTime);if(maxing)return clearTimeout(timerId),timerId=setTimeout(timerExpired,wait),invokeFunc(lastCallTime)}return void 0===timerId&&(timerId=setTimeout(timerExpired,wait)),result}return wait=toNumber(wait)||0,isObject(options)&&(leading=!!options.leading,maxWait=(maxing="maxWait"in options)?nativeMax(toNumber(options.maxWait)||0,wait):maxWait,trailing="trailing"in options?!!options.trailing:trailing),debounced.cancel=function cancel(){void 0!==timerId&&clearTimeout(timerId),lastInvokeTime=0,lastArgs=lastCallTime=lastThis=timerId=void 0},debounced.flush=function flush(){return void 0===timerId?result:trailingEdge(now())},debounced}},"./node_modules/lodash/now.js":(module,__unused_webpack_exports,__webpack_require__)=>{var root=__webpack_require__("./node_modules/lodash/_root.js");module.exports=function(){return root.Date.now()}},"./node_modules/react-portal/es/index.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{Portal:()=>PortalCompat,PortalWithState:()=>es_PortalWithState});var react_dom=__webpack_require__("./node_modules/react-dom/index.js"),react=__webpack_require__("./node_modules/react/index.js"),prop_types=__webpack_require__("./node_modules/prop-types/index.js"),prop_types_default=__webpack_require__.n(prop_types),canUseDOM=!("undefined"==typeof window||!window.document||!window.document.createElement),_createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();var Portal=function(_React$Component){function Portal(){return function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Portal),function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call}(this,(Portal.__proto__||Object.getPrototypeOf(Portal)).apply(this,arguments))}return function _inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}(Portal,_React$Component),_createClass(Portal,[{key:"componentWillUnmount",value:function componentWillUnmount(){this.defaultNode&&document.body.removeChild(this.defaultNode),this.defaultNode=null}},{key:"render",value:function render(){return canUseDOM?(this.props.node||this.defaultNode||(this.defaultNode=document.createElement("div"),document.body.appendChild(this.defaultNode)),react_dom.createPortal(this.props.children,this.props.node||this.defaultNode)):null}}]),Portal}(react.Component);Portal.propTypes={children:prop_types_default().node.isRequired,node:prop_types_default().any};const es_Portal=Portal;var LegacyPortal_createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();var LegacyPortal_Portal=function(_React$Component){function Portal(){return function LegacyPortal_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Portal),function LegacyPortal_possibleConstructorReturn(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call}(this,(Portal.__proto__||Object.getPrototypeOf(Portal)).apply(this,arguments))}return function LegacyPortal_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}(Portal,_React$Component),LegacyPortal_createClass(Portal,[{key:"componentDidMount",value:function componentDidMount(){this.renderPortal()}},{key:"componentDidUpdate",value:function componentDidUpdate(props){this.renderPortal()}},{key:"componentWillUnmount",value:function componentWillUnmount(){react_dom.unmountComponentAtNode(this.defaultNode||this.props.node),this.defaultNode&&document.body.removeChild(this.defaultNode),this.defaultNode=null,this.portal=null}},{key:"renderPortal",value:function renderPortal(props){this.props.node||this.defaultNode||(this.defaultNode=document.createElement("div"),document.body.appendChild(this.defaultNode));var children=this.props.children;"function"==typeof this.props.children.type&&(children=react.cloneElement(this.props.children)),this.portal=react_dom.unstable_renderSubtreeIntoContainer(this,children,this.props.node||this.defaultNode)}},{key:"render",value:function render(){return null}}]),Portal}(react.Component);const LegacyPortal=LegacyPortal_Portal;LegacyPortal_Portal.propTypes={children:prop_types_default().node.isRequired,node:prop_types_default().any};const PortalCompat=react_dom.createPortal?es_Portal:LegacyPortal;var PortalWithState_createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();var KEYCODES_ESCAPE=27,PortalWithState=function(_React$Component){function PortalWithState(props){!function PortalWithState_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,PortalWithState);var _this=function PortalWithState_possibleConstructorReturn(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call}(this,(PortalWithState.__proto__||Object.getPrototypeOf(PortalWithState)).call(this,props));return _this.portalNode=null,_this.state={active:!!props.defaultOpen},_this.openPortal=_this.openPortal.bind(_this),_this.closePortal=_this.closePortal.bind(_this),_this.wrapWithPortal=_this.wrapWithPortal.bind(_this),_this.handleOutsideMouseClick=_this.handleOutsideMouseClick.bind(_this),_this.handleKeydown=_this.handleKeydown.bind(_this),_this}return function PortalWithState_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}(PortalWithState,_React$Component),PortalWithState_createClass(PortalWithState,[{key:"componentDidMount",value:function componentDidMount(){this.props.closeOnEsc&&document.addEventListener("keydown",this.handleKeydown),this.props.closeOnOutsideClick&&document.addEventListener("click",this.handleOutsideMouseClick)}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.props.closeOnEsc&&document.removeEventListener("keydown",this.handleKeydown),this.props.closeOnOutsideClick&&document.removeEventListener("click",this.handleOutsideMouseClick)}},{key:"openPortal",value:function openPortal(e){this.state.active||(e&&e.nativeEvent&&e.nativeEvent.stopImmediatePropagation(),this.setState({active:!0},this.props.onOpen))}},{key:"closePortal",value:function closePortal(){this.state.active&&this.setState({active:!1},this.props.onClose)}},{key:"wrapWithPortal",value:function wrapWithPortal(children){var _this2=this;return this.state.active?react.createElement(PortalCompat,{node:this.props.node,key:"react-portal",ref:function ref(portalNode){return _this2.portalNode=portalNode}},children):null}},{key:"handleOutsideMouseClick",value:function handleOutsideMouseClick(e){if(this.state.active){var root=this.portalNode&&(this.portalNode.props.node||this.portalNode.defaultNode);!root||root.contains(e.target)||e.button&&0!==e.button||this.closePortal()}}},{key:"handleKeydown",value:function handleKeydown(e){e.keyCode===KEYCODES_ESCAPE&&this.state.active&&this.closePortal()}},{key:"render",value:function render(){return this.props.children({openPortal:this.openPortal,closePortal:this.closePortal,portal:this.wrapWithPortal,isOpen:this.state.active})}}]),PortalWithState}(react.Component);PortalWithState.propTypes={children:prop_types_default().func.isRequired,defaultOpen:prop_types_default().bool,node:prop_types_default().any,closeOnEsc:prop_types_default().bool,closeOnOutsideClick:prop_types_default().bool,onOpen:prop_types_default().func,onClose:prop_types_default().func},PortalWithState.defaultProps={onOpen:function onOpen(){},onClose:function onClose(){}};const es_PortalWithState=PortalWithState},"./node_modules/redux-thunk/lib/index.js":(__unused_webpack_module,exports)=>{"use strict";function createThunkMiddleware(extraArgument){return function(_ref){var dispatch=_ref.dispatch,getState=_ref.getState;return function(next){return function(action){return"function"==typeof action?action(dispatch,getState,extraArgument):next(action)}}}}exports.__esModule=!0;var thunk=createThunkMiddleware();thunk.withExtraArgument=createThunkMiddleware,exports.default=thunk},"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":module=>{"use strict";var stylesInDOM=[];function getIndexByIdentifier(identifier){for(var result=-1,i=0;i<stylesInDOM.length;i++)if(stylesInDOM[i].identifier===identifier){result=i;break}return result}function modulesToDom(list,options){for(var idCountMap={},identifiers=[],i=0;i<list.length;i++){var item=list[i],id=options.base?item[0]+options.base:item[0],count=idCountMap[id]||0,identifier="".concat(id," ").concat(count);idCountMap[id]=count+1;var indexByIdentifier=getIndexByIdentifier(identifier),obj={css:item[1],media:item[2],sourceMap:item[3],supports:item[4],layer:item[5]};if(-1!==indexByIdentifier)stylesInDOM[indexByIdentifier].references++,stylesInDOM[indexByIdentifier].updater(obj);else{var updater=addElementStyle(obj,options);options.byIndex=i,stylesInDOM.splice(i,0,{identifier,updater,references:1})}identifiers.push(identifier)}return identifiers}function addElementStyle(obj,options){var api=options.domAPI(options);api.update(obj);return function updater(newObj){if(newObj){if(newObj.css===obj.css&&newObj.media===obj.media&&newObj.sourceMap===obj.sourceMap&&newObj.supports===obj.supports&&newObj.layer===obj.layer)return;api.update(obj=newObj)}else api.remove()}}module.exports=function(list,options){var lastIdentifiers=modulesToDom(list=list||[],options=options||{});return function update(newList){newList=newList||[];for(var i=0;i<lastIdentifiers.length;i++){var index=getIndexByIdentifier(lastIdentifiers[i]);stylesInDOM[index].references--}for(var newLastIdentifiers=modulesToDom(newList,options),_i=0;_i<lastIdentifiers.length;_i++){var _index=getIndexByIdentifier(lastIdentifiers[_i]);0===stylesInDOM[_index].references&&(stylesInDOM[_index].updater(),stylesInDOM.splice(_index,1))}lastIdentifiers=newLastIdentifiers}}},"./node_modules/style-loader/dist/runtime/insertBySelector.js":module=>{"use strict";var memo={};module.exports=function insertBySelector(insert,style){var target=function getTarget(target){if(void 0===memo[target]){var styleTarget=document.querySelector(target);if(window.HTMLIFrameElement&&styleTarget instanceof window.HTMLIFrameElement)try{styleTarget=styleTarget.contentDocument.head}catch(e){styleTarget=null}memo[target]=styleTarget}return memo[target]}(insert);if(!target)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");target.appendChild(style)}},"./node_modules/style-loader/dist/runtime/insertStyleElement.js":module=>{"use strict";module.exports=function insertStyleElement(options){var element=document.createElement("style");return options.setAttributes(element,options.attributes),options.insert(element,options.options),element}},"./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js":(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";module.exports=function setAttributesWithoutAttributes(styleElement){var nonce=__webpack_require__.nc;nonce&&styleElement.setAttribute("nonce",nonce)}},"./node_modules/style-loader/dist/runtime/styleDomAPI.js":module=>{"use strict";module.exports=function domAPI(options){var styleElement=options.insertStyleElement(options);return{update:function update(obj){!function apply(styleElement,options,obj){var css="";obj.supports&&(css+="@supports (".concat(obj.supports,") {")),obj.media&&(css+="@media ".concat(obj.media," {"));var needLayer=void 0!==obj.layer;needLayer&&(css+="@layer".concat(obj.layer.length>0?" ".concat(obj.layer):""," {")),css+=obj.css,needLayer&&(css+="}"),obj.media&&(css+="}"),obj.supports&&(css+="}");var sourceMap=obj.sourceMap;sourceMap&&"undefined"!=typeof btoa&&(css+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))))," */")),options.styleTagTransform(css,styleElement,options.options)}(styleElement,options,obj)},remove:function remove(){!function removeStyleElement(styleElement){if(null===styleElement.parentNode)return!1;styleElement.parentNode.removeChild(styleElement)}(styleElement)}}}},"./node_modules/style-loader/dist/runtime/styleTagTransform.js":module=>{"use strict";module.exports=function styleTagTransform(css,styleElement){if(styleElement.styleSheet)styleElement.styleSheet.cssText=css;else{for(;styleElement.firstChild;)styleElement.removeChild(styleElement.firstChild);styleElement.appendChild(document.createTextNode(css))}}}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Y3pLLFFBQVNzSSxJQUMvQixFQUNBWSxPQUFRLFNBQVNBLFVBakJyQixTQUFTMkIsbUJBQW1CSixjQUUxQixHQUFnQyxPQUE1QkEsYUFBYUssV0FDZixPQUFPLEVBR1RMLGFBQWFLLFdBQVd0RyxZQUFZaUcsYUFDdEMsQ0FXTUksQ0FBbUJKLGFBQ3JCLEVBRUosQyx3RkNwREExTixPQUFPQyxRQVpQLFNBQVM0TixrQkFBa0JyQyxJQUFLa0MsY0FDOUIsR0FBSUEsYUFBYU0sV0FDZk4sYUFBYU0sV0FBV0MsUUFBVXpDLFFBQzdCLENBQ0wsS0FBT2tDLGFBQWFRLFlBQ2xCUixhQUFhakcsWUFBWWlHLGFBQWFRLFlBR3hDUixhQUFhOUYsWUFBWXhDLFNBQVMrSSxlQUFlM0MsS0FDbkQsQ0FDRixDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2RlYm91bmNlLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbm93LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9yZWFjdC1wb3J0YWwvZXMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXBvcnRhbC9lcy9Qb3J0YWwuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXBvcnRhbC9lcy9MZWdhY3lQb3J0YWwuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXBvcnRhbC9lcy9Qb3J0YWxDb21wYXQuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXBvcnRhbC9lcy9Qb3J0YWxXaXRoU3RhdGUuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3JlZHV4LXRodW5rL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdOyAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG5cbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBpdGVtWzVdICE9PSBcInVuZGVmaW5lZFwiO1xuXG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpO1xuICAgICAgfVxuXG4gICAgICBjb250ZW50ICs9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG5cbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTsgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcblxuXG4gIGxpc3QuaSA9IGZ1bmN0aW9uIGkobW9kdWxlcywgbWVkaWEsIGRlZHVwZSwgc3VwcG9ydHMsIGxheWVyKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCB1bmRlZmluZWRdXTtcbiAgICB9XG5cbiAgICB2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNba11bMF07XG5cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfayA9IDA7IF9rIDwgbW9kdWxlcy5sZW5ndGg7IF9rKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2tdKTtcblxuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGxheWVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbVs1XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWVkaWEpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBsaXN0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlbSkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV07XG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblxuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8IFwiXCIpLmNvbmNhdChzb3VyY2UsIFwiICovXCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBub3cgPSByZXF1aXJlKCcuL25vdycpLFxuICAgIHRvTnVtYmVyID0gcmVxdWlyZSgnLi90b051bWJlcicpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXgsXG4gICAgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlYm91bmNlZCBmdW5jdGlvbiB0aGF0IGRlbGF5cyBpbnZva2luZyBgZnVuY2AgdW50aWwgYWZ0ZXIgYHdhaXRgXG4gKiBtaWxsaXNlY29uZHMgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIGRlYm91bmNlZCBmdW5jdGlvbiB3YXNcbiAqIGludm9rZWQuIFRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gY29tZXMgd2l0aCBhIGBjYW5jZWxgIG1ldGhvZCB0byBjYW5jZWxcbiAqIGRlbGF5ZWQgYGZ1bmNgIGludm9jYXRpb25zIGFuZCBhIGBmbHVzaGAgbWV0aG9kIHRvIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLlxuICogUHJvdmlkZSBgb3B0aW9uc2AgdG8gaW5kaWNhdGUgd2hldGhlciBgZnVuY2Agc2hvdWxkIGJlIGludm9rZWQgb24gdGhlXG4gKiBsZWFkaW5nIGFuZC9vciB0cmFpbGluZyBlZGdlIG9mIHRoZSBgd2FpdGAgdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkXG4gKiB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50XG4gKiBjYWxscyB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYFxuICogaW52b2NhdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzXG4gKiBpbnZva2VkIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIGRlYm91bmNlZCBmdW5jdGlvblxuICogaXMgaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxuICpcbiAqIElmIGB3YWl0YCBpcyBgMGAgYW5kIGBsZWFkaW5nYCBpcyBgZmFsc2VgLCBgZnVuY2AgaW52b2NhdGlvbiBpcyBkZWZlcnJlZFxuICogdW50aWwgdG8gdGhlIG5leHQgdGljaywgc2ltaWxhciB0byBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgLlxuICpcbiAqIFNlZSBbRGF2aWQgQ29yYmFjaG8ncyBhcnRpY2xlXShodHRwczovL2Nzcy10cmlja3MuY29tL2RlYm91bmNpbmctdGhyb3R0bGluZy1leHBsYWluZWQtZXhhbXBsZXMvKVxuICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy5kZWJvdW5jZWAgYW5kIGBfLnRocm90dGxlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlYm91bmNlLlxuICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFsc2VdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFdhaXRdXG4gKiAgVGhlIG1heGltdW0gdGltZSBgZnVuY2AgaXMgYWxsb3dlZCB0byBiZSBkZWxheWVkIGJlZm9yZSBpdCdzIGludm9rZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWlsaW5nPXRydWVdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGRlYm91bmNlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gQXZvaWQgY29zdGx5IGNhbGN1bGF0aW9ucyB3aGlsZSB0aGUgd2luZG93IHNpemUgaXMgaW4gZmx1eC5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdyZXNpemUnLCBfLmRlYm91bmNlKGNhbGN1bGF0ZUxheW91dCwgMTUwKSk7XG4gKlxuICogLy8gSW52b2tlIGBzZW5kTWFpbGAgd2hlbiBjbGlja2VkLCBkZWJvdW5jaW5nIHN1YnNlcXVlbnQgY2FsbHMuXG4gKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgXy5kZWJvdW5jZShzZW5kTWFpbCwgMzAwLCB7XG4gKiAgICdsZWFkaW5nJzogdHJ1ZSxcbiAqICAgJ3RyYWlsaW5nJzogZmFsc2VcbiAqIH0pKTtcbiAqXG4gKiAvLyBFbnN1cmUgYGJhdGNoTG9nYCBpcyBpbnZva2VkIG9uY2UgYWZ0ZXIgMSBzZWNvbmQgb2YgZGVib3VuY2VkIGNhbGxzLlxuICogdmFyIGRlYm91bmNlZCA9IF8uZGVib3VuY2UoYmF0Y2hMb2csIDI1MCwgeyAnbWF4V2FpdCc6IDEwMDAgfSk7XG4gKiB2YXIgc291cmNlID0gbmV3IEV2ZW50U291cmNlKCcvc3RyZWFtJyk7XG4gKiBqUXVlcnkoc291cmNlKS5vbignbWVzc2FnZScsIGRlYm91bmNlZCk7XG4gKlxuICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyBkZWJvdW5jZWQgaW52b2NhdGlvbi5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGRlYm91bmNlZC5jYW5jZWwpO1xuICovXG5mdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gIHZhciBsYXN0QXJncyxcbiAgICAgIGxhc3RUaGlzLFxuICAgICAgbWF4V2FpdCxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHRpbWVySWQsXG4gICAgICBsYXN0Q2FsbFRpbWUsXG4gICAgICBsYXN0SW52b2tlVGltZSA9IDAsXG4gICAgICBsZWFkaW5nID0gZmFsc2UsXG4gICAgICBtYXhpbmcgPSBmYWxzZSxcbiAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB3YWl0ID0gdG9OdW1iZXIod2FpdCkgfHwgMDtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgbGVhZGluZyA9ICEhb3B0aW9ucy5sZWFkaW5nO1xuICAgIG1heGluZyA9ICdtYXhXYWl0JyBpbiBvcHRpb25zO1xuICAgIG1heFdhaXQgPSBtYXhpbmcgPyBuYXRpdmVNYXgodG9OdW1iZXIob3B0aW9ucy5tYXhXYWl0KSB8fCAwLCB3YWl0KSA6IG1heFdhaXQ7XG4gICAgdHJhaWxpbmcgPSAndHJhaWxpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMudHJhaWxpbmcgOiB0cmFpbGluZztcbiAgfVxuXG4gIGZ1bmN0aW9uIGludm9rZUZ1bmModGltZSkge1xuICAgIHZhciBhcmdzID0gbGFzdEFyZ3MsXG4gICAgICAgIHRoaXNBcmcgPSBsYXN0VGhpcztcblxuICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxlYWRpbmdFZGdlKHRpbWUpIHtcbiAgICAvLyBSZXNldCBhbnkgYG1heFdhaXRgIHRpbWVyLlxuICAgIGxhc3RJbnZva2VUaW1lID0gdGltZTtcbiAgICAvLyBTdGFydCB0aGUgdGltZXIgZm9yIHRoZSB0cmFpbGluZyBlZGdlLlxuICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgLy8gSW52b2tlIHRoZSBsZWFkaW5nIGVkZ2UuXG4gICAgcmV0dXJuIGxlYWRpbmcgPyBpbnZva2VGdW5jKHRpbWUpIDogcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtYWluaW5nV2FpdCh0aW1lKSB7XG4gICAgdmFyIHRpbWVTaW5jZUxhc3RDYWxsID0gdGltZSAtIGxhc3RDYWxsVGltZSxcbiAgICAgICAgdGltZVNpbmNlTGFzdEludm9rZSA9IHRpbWUgLSBsYXN0SW52b2tlVGltZSxcbiAgICAgICAgdGltZVdhaXRpbmcgPSB3YWl0IC0gdGltZVNpbmNlTGFzdENhbGw7XG5cbiAgICByZXR1cm4gbWF4aW5nXG4gICAgICA/IG5hdGl2ZU1pbih0aW1lV2FpdGluZywgbWF4V2FpdCAtIHRpbWVTaW5jZUxhc3RJbnZva2UpXG4gICAgICA6IHRpbWVXYWl0aW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkSW52b2tlKHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lO1xuXG4gICAgLy8gRWl0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwsIGFjdGl2aXR5IGhhcyBzdG9wcGVkIGFuZCB3ZSdyZSBhdCB0aGVcbiAgICAvLyB0cmFpbGluZyBlZGdlLCB0aGUgc3lzdGVtIHRpbWUgaGFzIGdvbmUgYmFja3dhcmRzIGFuZCB3ZSdyZSB0cmVhdGluZ1xuICAgIC8vIGl0IGFzIHRoZSB0cmFpbGluZyBlZGdlLCBvciB3ZSd2ZSBoaXQgdGhlIGBtYXhXYWl0YCBsaW1pdC5cbiAgICByZXR1cm4gKGxhc3RDYWxsVGltZSA9PT0gdW5kZWZpbmVkIHx8ICh0aW1lU2luY2VMYXN0Q2FsbCA+PSB3YWl0KSB8fFxuICAgICAgKHRpbWVTaW5jZUxhc3RDYWxsIDwgMCkgfHwgKG1heGluZyAmJiB0aW1lU2luY2VMYXN0SW52b2tlID49IG1heFdhaXQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpbWVyRXhwaXJlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpO1xuICAgIGlmIChzaG91bGRJbnZva2UodGltZSkpIHtcbiAgICAgIHJldHVybiB0cmFpbGluZ0VkZ2UodGltZSk7XG4gICAgfVxuICAgIC8vIFJlc3RhcnQgdGhlIHRpbWVyLlxuICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgcmVtYWluaW5nV2FpdCh0aW1lKSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFpbGluZ0VkZ2UodGltZSkge1xuICAgIHRpbWVySWQgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBPbmx5IGludm9rZSBpZiB3ZSBoYXZlIGBsYXN0QXJnc2Agd2hpY2ggbWVhbnMgYGZ1bmNgIGhhcyBiZWVuXG4gICAgLy8gZGVib3VuY2VkIGF0IGxlYXN0IG9uY2UuXG4gICAgaWYgKHRyYWlsaW5nICYmIGxhc3RBcmdzKSB7XG4gICAgICByZXR1cm4gaW52b2tlRnVuYyh0aW1lKTtcbiAgICB9XG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmICh0aW1lcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICB9XG4gICAgbGFzdEludm9rZVRpbWUgPSAwO1xuICAgIGxhc3RBcmdzID0gbGFzdENhbGxUaW1lID0gbGFzdFRoaXMgPSB0aW1lcklkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgcmV0dXJuIHRpbWVySWQgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IHRyYWlsaW5nRWRnZShub3coKSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWJvdW5jZWQoKSB7XG4gICAgdmFyIHRpbWUgPSBub3coKSxcbiAgICAgICAgaXNJbnZva2luZyA9IHNob3VsZEludm9rZSh0aW1lKTtcblxuICAgIGxhc3RBcmdzID0gYXJndW1lbnRzO1xuICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICBsYXN0Q2FsbFRpbWUgPSB0aW1lO1xuXG4gICAgaWYgKGlzSW52b2tpbmcpIHtcbiAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGxlYWRpbmdFZGdlKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG4gICAgICBpZiAobWF4aW5nKSB7XG4gICAgICAgIC8vIEhhbmRsZSBpbnZvY2F0aW9ucyBpbiBhIHRpZ2h0IGxvb3AuXG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAgICAgcmV0dXJuIGludm9rZUZ1bmMobGFzdENhbGxUaW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBkZWJvdW5jZWQuY2FuY2VsID0gY2FuY2VsO1xuICBkZWJvdW5jZWQuZmx1c2ggPSBmbHVzaDtcbiAgcmV0dXJuIGRlYm91bmNlZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkZWJvdW5jZTtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKipcbiAqIEdldHMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IGhhdmUgZWxhcHNlZCBzaW5jZVxuICogdGhlIFVuaXggZXBvY2ggKDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IERhdGVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVzdGFtcC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWZlcihmdW5jdGlvbihzdGFtcCkge1xuICogICBjb25zb2xlLmxvZyhfLm5vdygpIC0gc3RhbXApO1xuICogfSwgXy5ub3coKSk7XG4gKiAvLyA9PiBMb2dzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGl0IHRvb2sgZm9yIHRoZSBkZWZlcnJlZCBpbnZvY2F0aW9uLlxuICovXG52YXIgbm93ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiByb290LkRhdGUubm93KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vdztcbiIsImV4cG9ydCB2YXIgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KTsiLCJ2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBjYW5Vc2VET00gfSBmcm9tICcuL3V0aWxzJztcblxudmFyIFBvcnRhbCA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhQb3J0YWwsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFBvcnRhbCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUG9ydGFsKTtcblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoUG9ydGFsLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoUG9ydGFsKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUG9ydGFsLCBbe1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5kZWZhdWx0Tm9kZSkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuZGVmYXVsdE5vZGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5kZWZhdWx0Tm9kZSA9IG51bGw7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgaWYgKCFjYW5Vc2VET00pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMucHJvcHMubm9kZSAmJiAhdGhpcy5kZWZhdWx0Tm9kZSkge1xuICAgICAgICB0aGlzLmRlZmF1bHROb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5kZWZhdWx0Tm9kZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVhY3RET00uY3JlYXRlUG9ydGFsKHRoaXMucHJvcHMuY2hpbGRyZW4sIHRoaXMucHJvcHMubm9kZSB8fCB0aGlzLmRlZmF1bHROb2RlKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUG9ydGFsO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5Qb3J0YWwucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgbm9kZTogUHJvcFR5cGVzLmFueVxufTtcblxuZXhwb3J0IGRlZmF1bHQgUG9ydGFsOyIsInZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxuLy8gVGhpcyBmaWxlIGlzIGEgZmFsbGJhY2sgZm9yIGEgY29uc3VtZXIgd2hvIGlzIG5vdCB5ZXQgb24gUmVhY3QgMTZcbi8vIGFzIGNyZWF0ZVBvcnRhbCB3YXMgaW50cm9kdWNlZCBpbiBSZWFjdCAxNlxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG52YXIgUG9ydGFsID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFBvcnRhbCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gUG9ydGFsKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQb3J0YWwpO1xuXG4gICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChQb3J0YWwuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihQb3J0YWwpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhQb3J0YWwsIFt7XG4gICAga2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMucmVuZGVyUG9ydGFsKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50RGlkVXBkYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByb3BzKSB7XG4gICAgICB0aGlzLnJlbmRlclBvcnRhbCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKHRoaXMuZGVmYXVsdE5vZGUgfHwgdGhpcy5wcm9wcy5ub2RlKTtcbiAgICAgIGlmICh0aGlzLmRlZmF1bHROb2RlKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5kZWZhdWx0Tm9kZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmRlZmF1bHROb2RlID0gbnVsbDtcbiAgICAgIHRoaXMucG9ydGFsID0gbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXJQb3J0YWwnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJQb3J0YWwocHJvcHMpIHtcbiAgICAgIGlmICghdGhpcy5wcm9wcy5ub2RlICYmICF0aGlzLmRlZmF1bHROb2RlKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmRlZmF1bHROb2RlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICAgIC8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2ppbWZiL2Q5OWUwNjc4ZTlkYTcxNWNjZjY0NTQ5NjFlZjA0ZDFiXG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMuY2hpbGRyZW4udHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjaGlsZHJlbiA9IFJlYWN0LmNsb25lRWxlbWVudCh0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3J0YWwgPSBSZWFjdERPTS51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcih0aGlzLCBjaGlsZHJlbiwgdGhpcy5wcm9wcy5ub2RlIHx8IHRoaXMuZGVmYXVsdE5vZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBQb3J0YWw7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbmV4cG9ydCBkZWZhdWx0IFBvcnRhbDtcblxuXG5Qb3J0YWwucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgbm9kZTogUHJvcFR5cGVzLmFueVxufTsiLCJpbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcblxuaW1wb3J0IFBvcnRhbHY0IGZyb20gJy4vUG9ydGFsJztcbmltcG9ydCBMZWdhY3lQb3J0YWwgZnJvbSAnLi9MZWdhY3lQb3J0YWwnO1xuXG52YXIgUG9ydGFsID0gdm9pZCAwO1xuXG5pZiAoUmVhY3RET00uY3JlYXRlUG9ydGFsKSB7XG4gIFBvcnRhbCA9IFBvcnRhbHY0O1xufSBlbHNlIHtcbiAgUG9ydGFsID0gTGVnYWN5UG9ydGFsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBQb3J0YWw7IiwidmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBQb3J0YWwgZnJvbSAnLi9Qb3J0YWxDb21wYXQnO1xuXG52YXIgS0VZQ09ERVMgPSB7XG4gIEVTQ0FQRTogMjdcbn07XG5cbnZhciBQb3J0YWxXaXRoU3RhdGUgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoUG9ydGFsV2l0aFN0YXRlLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBQb3J0YWxXaXRoU3RhdGUocHJvcHMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUG9ydGFsV2l0aFN0YXRlKTtcblxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChQb3J0YWxXaXRoU3RhdGUuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihQb3J0YWxXaXRoU3RhdGUpKS5jYWxsKHRoaXMsIHByb3BzKSk7XG5cbiAgICBfdGhpcy5wb3J0YWxOb2RlID0gbnVsbDtcbiAgICBfdGhpcy5zdGF0ZSA9IHsgYWN0aXZlOiAhIXByb3BzLmRlZmF1bHRPcGVuIH07XG4gICAgX3RoaXMub3BlblBvcnRhbCA9IF90aGlzLm9wZW5Qb3J0YWwuYmluZChfdGhpcyk7XG4gICAgX3RoaXMuY2xvc2VQb3J0YWwgPSBfdGhpcy5jbG9zZVBvcnRhbC5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy53cmFwV2l0aFBvcnRhbCA9IF90aGlzLndyYXBXaXRoUG9ydGFsLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLmhhbmRsZU91dHNpZGVNb3VzZUNsaWNrID0gX3RoaXMuaGFuZGxlT3V0c2lkZU1vdXNlQ2xpY2suYmluZChfdGhpcyk7XG4gICAgX3RoaXMuaGFuZGxlS2V5ZG93biA9IF90aGlzLmhhbmRsZUtleWRvd24uYmluZChfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFBvcnRhbFdpdGhTdGF0ZSwgW3tcbiAgICBrZXk6ICdjb21wb25lbnREaWRNb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMuY2xvc2VPbkVzYykge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlkb3duKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnByb3BzLmNsb3NlT25PdXRzaWRlQ2xpY2spIHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZU91dHNpZGVNb3VzZUNsaWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMuY2xvc2VPbkVzYykge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlkb3duKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnByb3BzLmNsb3NlT25PdXRzaWRlQ2xpY2spIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZU91dHNpZGVNb3VzZUNsaWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvcGVuUG9ydGFsJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb3BlblBvcnRhbChlKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5hY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGUgJiYgZS5uYXRpdmVFdmVudCkge1xuICAgICAgICBlLm5hdGl2ZUV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGFjdGl2ZTogdHJ1ZSB9LCB0aGlzLnByb3BzLm9uT3Blbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY2xvc2VQb3J0YWwnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9zZVBvcnRhbCgpIHtcbiAgICAgIGlmICghdGhpcy5zdGF0ZS5hY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGFjdGl2ZTogZmFsc2UgfSwgdGhpcy5wcm9wcy5vbkNsb3NlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICd3cmFwV2l0aFBvcnRhbCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdyYXBXaXRoUG9ydGFsKGNoaWxkcmVuKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKCF0aGlzLnN0YXRlLmFjdGl2ZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICBQb3J0YWwsXG4gICAgICAgIHtcbiAgICAgICAgICBub2RlOiB0aGlzLnByb3BzLm5vZGUsXG4gICAgICAgICAga2V5OiAncmVhY3QtcG9ydGFsJyxcbiAgICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihwb3J0YWxOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMyLnBvcnRhbE5vZGUgPSBwb3J0YWxOb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlT3V0c2lkZU1vdXNlQ2xpY2snLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVPdXRzaWRlTW91c2VDbGljayhlKSB7XG4gICAgICBpZiAoIXRoaXMuc3RhdGUuYWN0aXZlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciByb290ID0gdGhpcy5wb3J0YWxOb2RlICYmICh0aGlzLnBvcnRhbE5vZGUucHJvcHMubm9kZSB8fCB0aGlzLnBvcnRhbE5vZGUuZGVmYXVsdE5vZGUpO1xuICAgICAgaWYgKCFyb290IHx8IHJvb3QuY29udGFpbnMoZS50YXJnZXQpIHx8IGUuYnV0dG9uICYmIGUuYnV0dG9uICE9PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2xvc2VQb3J0YWwoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdoYW5kbGVLZXlkb3duJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlS2V5ZG93bihlKSB7XG4gICAgICBpZiAoZS5rZXlDb2RlID09PSBLRVlDT0RFUy5FU0NBUEUgJiYgdGhpcy5zdGF0ZS5hY3RpdmUpIHtcbiAgICAgICAgdGhpcy5jbG9zZVBvcnRhbCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuKHtcbiAgICAgICAgb3BlblBvcnRhbDogdGhpcy5vcGVuUG9ydGFsLFxuICAgICAgICBjbG9zZVBvcnRhbDogdGhpcy5jbG9zZVBvcnRhbCxcbiAgICAgICAgcG9ydGFsOiB0aGlzLndyYXBXaXRoUG9ydGFsLFxuICAgICAgICBpc09wZW46IHRoaXMuc3RhdGUuYWN0aXZlXG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUG9ydGFsV2l0aFN0YXRlO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5Qb3J0YWxXaXRoU3RhdGUucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZGVmYXVsdE9wZW46IFByb3BUeXBlcy5ib29sLFxuICBub2RlOiBQcm9wVHlwZXMuYW55LFxuICBjbG9zZU9uRXNjOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2xvc2VPbk91dHNpZGVDbGljazogUHJvcFR5cGVzLmJvb2wsXG4gIG9uT3BlbjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5Qb3J0YWxXaXRoU3RhdGUuZGVmYXVsdFByb3BzID0ge1xuICBvbk9wZW46IGZ1bmN0aW9uIG9uT3BlbigpIHt9LFxuICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkge31cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBvcnRhbFdpdGhTdGF0ZTsiLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5mdW5jdGlvbiBjcmVhdGVUaHVua01pZGRsZXdhcmUoZXh0cmFBcmd1bWVudCkge1xuICByZXR1cm4gZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgZGlzcGF0Y2ggPSBfcmVmLmRpc3BhdGNoO1xuICAgIHZhciBnZXRTdGF0ZSA9IF9yZWYuZ2V0U3RhdGU7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBhY3Rpb24oZGlzcGF0Y2gsIGdldFN0YXRlLCBleHRyYUFyZ3VtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59XG5cbnZhciB0aHVuayA9IGNyZWF0ZVRodW5rTWlkZGxld2FyZSgpO1xudGh1bmsud2l0aEV4dHJhQXJndW1lbnQgPSBjcmVhdGVUaHVua01pZGRsZXdhcmU7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IHRodW5rOyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgc3R5bGVzSW5ET00gPSBbXTtcblxuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXNJbkRPTS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHlsZXNJbkRPTVtpXS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XG4gICAgICByZXN1bHQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldO1xuICAgIHZhciBpZCA9IG9wdGlvbnMuYmFzZSA/IGl0ZW1bMF0gKyBvcHRpb25zLmJhc2UgOiBpdGVtWzBdO1xuICAgIHZhciBjb3VudCA9IGlkQ291bnRNYXBbaWRdIHx8IDA7XG4gICAgdmFyIGlkZW50aWZpZXIgPSBcIlwiLmNvbmNhdChpZCwgXCIgXCIpLmNvbmNhdChjb3VudCk7XG4gICAgaWRDb3VudE1hcFtpZF0gPSBjb3VudCArIDE7XG4gICAgdmFyIGluZGV4QnlJZGVudGlmaWVyID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgIGNzczogaXRlbVsxXSxcbiAgICAgIG1lZGlhOiBpdGVtWzJdLFxuICAgICAgc291cmNlTWFwOiBpdGVtWzNdLFxuICAgICAgc3VwcG9ydHM6IGl0ZW1bNF0sXG4gICAgICBsYXllcjogaXRlbVs1XVxuICAgIH07XG5cbiAgICBpZiAoaW5kZXhCeUlkZW50aWZpZXIgIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHVwZGF0ZXIgPSBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMuYnlJbmRleCA9IGk7XG4gICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoaSwgMCwge1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiB1cGRhdGVyLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG5cbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xufVxuXG5mdW5jdGlvbiBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhcGkgPSBvcHRpb25zLmRvbUFQSShvcHRpb25zKTtcbiAgYXBpLnVwZGF0ZShvYmopO1xuXG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXBpLnVwZGF0ZShvYmogPSBuZXdPYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVtb3ZlKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuXG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuXG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuXG4gICAgICBpZiAoc3R5bGVzSW5ET01bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRE9NW19pbmRleF0udXBkYXRlcigpO1xuXG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZW1vID0ge307XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0KHRhcmdldCkge1xuICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblxuICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcbiAgfVxuXG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBpbnNlcnRCeVNlbGVjdG9yKGluc2VydCwgc3R5bGUpIHtcbiAgdmFyIHRhcmdldCA9IGdldFRhcmdldChpbnNlcnQpO1xuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgfVxuXG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0QnlTZWxlY3RvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydFN0eWxlRWxlbWVudDsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMoc3R5bGVFbGVtZW50KSB7XG4gIHZhciBub25jZSA9IHR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXyAhPT0gXCJ1bmRlZmluZWRcIiA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcblxuICBpZiAobm9uY2UpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBcIlwiO1xuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChvYmouc3VwcG9ydHMsIFwiKSB7XCIpO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpO1xuICB9XG5cbiAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBvYmoubGF5ZXIgIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIkBsYXllclwiLmNvbmNhdChvYmoubGF5ZXIubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChvYmoubGF5ZXIpIDogXCJcIiwgXCIge1wiKTtcbiAgfVxuXG4gIGNzcyArPSBvYmouY3NzO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuXG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfSAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG5cbiAgb3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgaWYgKHN0eWxlRWxlbWVudC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5cbmZ1bmN0aW9uIGRvbUFQSShvcHRpb25zKSB7XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBvcHRpb25zLmluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRvbUFQSTsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCkge1xuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZVRhZ1RyYW5zZm9ybTsiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJsaXN0IiwidG9TdHJpbmciLCJ0aGlzIiwibWFwIiwiaXRlbSIsImNvbnRlbnQiLCJuZWVkTGF5ZXIiLCJjb25jYXQiLCJsZW5ndGgiLCJqb2luIiwiaSIsIm1vZHVsZXMiLCJtZWRpYSIsImRlZHVwZSIsInN1cHBvcnRzIiwibGF5ZXIiLCJ1bmRlZmluZWQiLCJhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzIiwiayIsImlkIiwiX2siLCJwdXNoIiwiY3NzTWFwcGluZyIsImJ0b2EiLCJiYXNlNjQiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkYXRhIiwic291cmNlTWFwcGluZyIsInNvdXJjZVVSTHMiLCJzb3VyY2VzIiwic291cmNlIiwic291cmNlUm9vdCIsImlzT2JqZWN0Iiwibm93IiwidG9OdW1iZXIiLCJuYXRpdmVNYXgiLCJNYXRoIiwibWF4IiwibmF0aXZlTWluIiwibWluIiwiZGVib3VuY2UiLCJmdW5jIiwid2FpdCIsIm9wdGlvbnMiLCJsYXN0QXJncyIsImxhc3RUaGlzIiwibWF4V2FpdCIsInJlc3VsdCIsInRpbWVySWQiLCJsYXN0Q2FsbFRpbWUiLCJsYXN0SW52b2tlVGltZSIsImxlYWRpbmciLCJtYXhpbmciLCJ0cmFpbGluZyIsIlR5cGVFcnJvciIsImludm9rZUZ1bmMiLCJ0aW1lIiwiYXJncyIsInRoaXNBcmciLCJhcHBseSIsInNob3VsZEludm9rZSIsInRpbWVTaW5jZUxhc3RDYWxsIiwidGltZXJFeHBpcmVkIiwidHJhaWxpbmdFZGdlIiwic2V0VGltZW91dCIsInJlbWFpbmluZ1dhaXQiLCJ0aW1lV2FpdGluZyIsImRlYm91bmNlZCIsImlzSW52b2tpbmciLCJhcmd1bWVudHMiLCJsZWFkaW5nRWRnZSIsImNsZWFyVGltZW91dCIsImNhbmNlbCIsImZsdXNoIiwicm9vdCIsIkRhdGUiLCJjYW5Vc2VET00iLCJ3aW5kb3ciLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJfY3JlYXRlQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJrZXkiLCJDb25zdHJ1Y3RvciIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsInByb3RvdHlwZSIsIlBvcnRhbCIsIl9SZWFjdCRDb21wb25lbnQiLCJfY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwic2VsZiIsImNhbGwiLCJSZWZlcmVuY2VFcnJvciIsIl9fcHJvdG9fXyIsImdldFByb3RvdHlwZU9mIiwiX2luaGVyaXRzIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiY3JlYXRlIiwiY29uc3RydWN0b3IiLCJ2YWx1ZSIsInNldFByb3RvdHlwZU9mIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJkZWZhdWx0Tm9kZSIsImJvZHkiLCJyZW1vdmVDaGlsZCIsInJlbmRlciIsIm5vZGUiLCJhcHBlbmRDaGlsZCIsImNoaWxkcmVuIiwicHJvcFR5cGVzIiwiaXNSZXF1aXJlZCIsImNvbXBvbmVudERpZE1vdW50IiwicmVuZGVyUG9ydGFsIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicG9ydGFsIiwidHlwZSIsIkxlZ2FjeVBvcnRhbCIsIktFWUNPREVTIiwiUG9ydGFsV2l0aFN0YXRlIiwiX3RoaXMiLCJwb3J0YWxOb2RlIiwic3RhdGUiLCJhY3RpdmUiLCJkZWZhdWx0T3BlbiIsIm9wZW5Qb3J0YWwiLCJiaW5kIiwiY2xvc2VQb3J0YWwiLCJ3cmFwV2l0aFBvcnRhbCIsImhhbmRsZU91dHNpZGVNb3VzZUNsaWNrIiwiaGFuZGxlS2V5ZG93biIsImNsb3NlT25Fc2MiLCJhZGRFdmVudExpc3RlbmVyIiwiY2xvc2VPbk91dHNpZGVDbGljayIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJlIiwibmF0aXZlRXZlbnQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJzZXRTdGF0ZSIsIm9uT3BlbiIsIm9uQ2xvc2UiLCJfdGhpczIiLCJyZWYiLCJjb250YWlucyIsImJ1dHRvbiIsImtleUNvZGUiLCJpc09wZW4iLCJkZWZhdWx0UHJvcHMiLCJjcmVhdGVUaHVua01pZGRsZXdhcmUiLCJleHRyYUFyZ3VtZW50IiwiX3JlZiIsImRpc3BhdGNoIiwiZ2V0U3RhdGUiLCJuZXh0IiwiYWN0aW9uIiwiX19lc01vZHVsZSIsInRodW5rIiwid2l0aEV4dHJhQXJndW1lbnQiLCJzdHlsZXNJbkRPTSIsImdldEluZGV4QnlJZGVudGlmaWVyIiwiaWRlbnRpZmllciIsIm1vZHVsZXNUb0RvbSIsImlkQ291bnRNYXAiLCJpZGVudGlmaWVycyIsImJhc2UiLCJjb3VudCIsImluZGV4QnlJZGVudGlmaWVyIiwib2JqIiwiY3NzIiwic291cmNlTWFwIiwicmVmZXJlbmNlcyIsInVwZGF0ZXIiLCJhZGRFbGVtZW50U3R5bGUiLCJieUluZGV4Iiwic3BsaWNlIiwiYXBpIiwiZG9tQVBJIiwidXBkYXRlIiwibmV3T2JqIiwicmVtb3ZlIiwibGFzdElkZW50aWZpZXJzIiwibmV3TGlzdCIsImluZGV4IiwibmV3TGFzdElkZW50aWZpZXJzIiwiX2kiLCJfaW5kZXgiLCJtZW1vIiwiaW5zZXJ0QnlTZWxlY3RvciIsImluc2VydCIsInN0eWxlIiwiZ2V0VGFyZ2V0Iiwic3R5bGVUYXJnZXQiLCJxdWVyeVNlbGVjdG9yIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJjb250ZW50RG9jdW1lbnQiLCJoZWFkIiwiRXJyb3IiLCJpbnNlcnRTdHlsZUVsZW1lbnQiLCJlbGVtZW50Iiwic2V0QXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMiLCJzdHlsZUVsZW1lbnQiLCJub25jZSIsInNldEF0dHJpYnV0ZSIsInN0eWxlVGFnVHJhbnNmb3JtIiwicmVtb3ZlU3R5bGVFbGVtZW50IiwicGFyZW50Tm9kZSIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiZmlyc3RDaGlsZCIsImNyZWF0ZVRleHROb2RlIl0sInNvdXJjZVJvb3QiOiIifQ==