0&&n.appendChild(t.createElement("br")),n.appendChild(e)}),n}(e,r.label)),r.element.appendChild(i);var o=e.createElement("div");return o.classList.add(a("v")),o.appendChild(n.view.element),r.element.appendChild(o),r}return i(e,t),e}(s.View);e.LabeledView=l},"./src/main/js/view/monitor/graph.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.GraphMonitorView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/misc/disposing-util.ts"),a=n("./src/main/js/misc/dom-util.ts"),l=n("./src/main/js/misc/number-util.ts"),u=n("./src/main/js/misc/pane-error.ts"),c=n("./src/main/js/view/view.ts"),p=a.SVG_NS,d=o.ClassName("grp","monitor"),h=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onCursorChange_=r.onCursorChange_.bind(r),r.onValueUpdate_=r.onValueUpdate_.bind(r),r.element.classList.add(d()),r.formatter_=n.formatter,r.minValue_=n.minValue,r.maxValue_=n.maxValue,r.cursor_=n.cursor,r.cursor_.emitter.on("change",r.onCursorChange_);var i=e.createElementNS(p,"svg");i.classList.add(d("g")),r.element.appendChild(i),r.svgElem_=i;var o=e.createElementNS(p,"polyline");r.svgElem_.appendChild(o),r.lineElem_=o;var a=e.createElement("div");return a.classList.add(d("t")),r.element.appendChild(a),r.tooltipElem_=a,n.value.emitter.on("update",r.onValueUpdate_),r.value=n.value,r.update(),n.model.emitter.on("dispose",function(){r.lineElem_=s.disposeElement(r.lineElem_),r.svgElem_=s.disposeElement(r.svgElem_),r.tooltipElem_=s.disposeElement(r.tooltipElem_)}),r}return i(e,t),Object.defineProperty(e.prototype,"graphElement",{get:function(){if(!this.svgElem_)throw u.PaneError.alreadyDisposed();return this.svgElem_},enumerable:!1,configurable:!0}),e.prototype.update=function(){var t=this.tooltipElem_;if(!this.lineElem_||!this.svgElem_||!t)throw u.PaneError.alreadyDisposed();var e=this.svgElem_.getBoundingClientRect(),n=this.value.totalCount-1,r=this.minValue_,i=this.maxValue_;this.lineElem_.setAttributeNS(null,"points",this.value.rawValues.map(function(t,o){return[l.NumberUtil.map(o,0,n,0,e.width),l.NumberUtil.map(t,r,i,e.height,0)].join(",")}).join(" "));var o=this.value.rawValues[this.cursor_.index];if(void 0!==o){t.classList.add(d("t","valid"));var s=l.NumberUtil.map(this.cursor_.index,0,n,0,e.width),a=l.NumberUtil.map(o,r,i,e.height,0);t.style.left=s+"px",t.style.top=a+"px",t.textContent=""+this.formatter_.format(o)}else t.classList.remove(d("t","valid"))},e.prototype.onValueUpdate_=function(){this.update()},e.prototype.onCursorChange_=function(){this.update()},e}(c.View);e.GraphMonitorView=h},"./src/main/js/view/monitor/multi-log.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.MultiLogMonitorView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/misc/disposing-util.ts"),a=n("./src/main/js/misc/pane-error.ts"),l=n("./src/main/js/view/view.ts"),u=o.ClassName("mll","monitor"),c=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onValueUpdate_=r.onValueUpdate_.bind(r),r.formatter_=n.formatter,r.element.classList.add(u());var i=e.createElement("textarea");return i.classList.add(u("i")),i.readOnly=!0,r.element.appendChild(i),r.textareaElem_=i,n.value.emitter.on("update",r.onValueUpdate_),r.value=n.value,r.update(),n.model.emitter.on("dispose",function(){r.textareaElem_=s.disposeElement(r.textareaElem_)}),r}return i(e,t),e.prototype.update=function(){var t=this,e=this.textareaElem_;if(!e)throw a.PaneError.alreadyDisposed();var n=e.scrollTop===e.scrollHeight-e.clientHeight;e.textContent=this.value.rawValues.map(function(e){return t.formatter_.format(e)}).join("\n"),n&&(e.scrollTop=e.scrollHeight)},e.prototype.onValueUpdate_=function(){this.update()},e}(l.View);e.MultiLogMonitorView=c},"./src/main/js/view/monitor/single-log.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.SingleLogMonitorView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/misc/disposing-util.ts"),a=n("./src/main/js/misc/pane-error.ts"),l=n("./src/main/js/view/view.ts"),u=o.ClassName("sgl","monitor"),c=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onValueUpdate_=r.onValueUpdate_.bind(r),r.formatter_=n.formatter,r.element.classList.add(u());var i=e.createElement("input");return i.classList.add(u("i")),i.readOnly=!0,i.type="text",r.element.appendChild(i),r.inputElem_=i,n.value.emitter.on("update",r.onValueUpdate_),r.value=n.value,r.update(),n.model.emitter.on("dispose",function(){r.inputElem_=s.disposeElement(r.inputElem_)}),r}return i(e,t),e.prototype.update=function(){if(!this.inputElem_)throw a.PaneError.alreadyDisposed();var t=this.value.rawValues;this.inputElem_.value=t.length>0?this.formatter_.format(t[t.length-1]):""},e.prototype.onValueUpdate_=function(){this.update()},e}(l.View);e.SingleLogMonitorView=c},"./src/main/js/view/root.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.RootView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/misc/disposing-util.ts"),a=n("./src/main/js/misc/pane-error.ts"),l=n("./src/main/js/view/view.ts"),u=o.ClassName("rot"),c=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onFolderChange_=r.onFolderChange_.bind(r),r.folder_=n.folder,r.folder_&&r.folder_.emitter.on("change",r.onFolderChange_),r.element.classList.add(u());var i=r.folder_;if(i){var o=e.createElement("button");o.classList.add(u("t")),o.textContent=i.title,r.element.appendChild(o);var a=e.createElement("div");a.classList.add(u("m")),o.appendChild(a),r.titleElem_=o}var l=e.createElement("div");return l.classList.add(u("c")),r.element.appendChild(l),r.containerElem_=l,r.applyModel_(),n.model.emitter.on("dispose",function(){r.containerElem_=s.disposeElement(r.containerElem_),r.folder_=null,r.titleElem_=s.disposeElement(r.titleElem_)}),r}return i(e,t),Object.defineProperty(e.prototype,"titleElement",{get:function(){return this.titleElem_},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"containerElement",{get:function(){if(!this.containerElem_)throw a.PaneError.alreadyDisposed();return this.containerElem_},enumerable:!1,configurable:!0}),e.prototype.applyModel_=function(){var t=this.containerElem_;if(!t)throw a.PaneError.alreadyDisposed();var e=!this.folder_||this.folder_.styleExpanded,n=u(void 0,"expanded");e?this.element.classList.add(n):this.element.classList.remove(n),t.style.height=this.folder_?this.folder_.styleHeight:"auto"},e.prototype.onFolderChange_=function(){this.applyModel_()},e}(l.View);e.RootView=c},"./src/main/js/view/separator.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.SeparatorView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/view/view.ts"),a=o.ClassName("spt"),l=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.element.classList.add(a());var i=e.createElement("hr");return i.classList.add(a("r")),r.element.appendChild(i),r}return i(e,t),e}(s.View);e.SeparatorView=l},"./src/main/js/view/view.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.View=void 0;var r=n("./src/main/js/misc/class-name.ts"),i=n("./src/main/js/misc/disposing-util.ts"),o=n("./src/main/js/misc/pane-error.ts"),s=n("./src/main/js/model/view-positions.ts"),a=r.ClassName(""),l=function(){function t(t,e){this.onChange_=this.onChange_.bind(this),this.onDispose_=this.onDispose_.bind(this),this.model_=e.model,this.model_.emitter.on("change",this.onChange_),this.model_.emitter.on("dispose",this.onDispose_),this.doc_=t,this.elem_=this.doc_.createElement("div"),this.elem_.classList.add(a())}return Object.defineProperty(t.prototype,"document",{get:function(){if(!this.doc_)throw o.PaneError.alreadyDisposed();return this.doc_},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"element",{get:function(){if(!this.elem_)throw o.PaneError.alreadyDisposed();return this.elem_},enumerable:!1,configurable:!0}),t.prototype.onDispose_=function(){this.doc_=null,this.elem_=i.disposeElement(this.elem_)},t.prototype.onChange_=function(t){var e=this.elem_;if(!e)throw o.PaneError.alreadyDisposed();if("hidden"===t.propertyName){var n=a(void 0,"hidden");this.model_.hidden?e.classList.add(n):e.classList.remove(n)}else"positions"===t.propertyName&&(s.getAll().forEach(function(t){e.classList.remove(a(void 0,t))}),this.model_.positions.forEach(function(t){e.classList.add(a(void 0,t))}))},t}();e.View=l},"./src/main/sass/bundle.scss":function(t,e,n){(t.exports=n("./node_modules/css-loader/lib/css-base.js")(!1)).push([t.i,".tp-fldv_t,.tp-rotv_t{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--folder-background-color);color:var(--folder-foreground-color);cursor:pointer;display:block;height:24px;line-height:24px;overflow:hidden;padding-left:30px;position:relative;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%;transition:border-radius .2s ease-in-out .2s}.tp-fldv_t:hover,.tp-rotv_t:hover{background-color:var(--folder-background-color-hover)}.tp-fldv_t:focus,.tp-rotv_t:focus{background-color:var(--folder-background-color-focus)}.tp-fldv_t:active,.tp-rotv_t:active{background-color:var(--folder-background-color-active)}.tp-fldv_m,.tp-rotv_m{background:linear-gradient(to left, var(--folder-foreground-color), var(--folder-foreground-color) 2px, transparent 2px, transparent 4px, var(--folder-foreground-color) 4px);border-radius:2px;bottom:0;content:'';display:block;height:6px;left:12px;margin:auto;position:absolute;top:0;transform:rotate(90deg);transition:transform .2s ease-in-out;width:6px}.tp-fldv.tp-fldv-expanded>.tp-fldv_t>.tp-fldv_m,.tp-rotv.tp-rotv-expanded .tp-rotv_m{transform:none}.tp-fldv_c,.tp-rotv_c{box-sizing:border-box;height:0;opacity:0;overflow:hidden;padding-bottom:0;padding-top:0;position:relative;transition:height .2s ease-in-out,opacity .2s linear,padding .2s ease-in-out}.tp-fldv_c>.tp-fldv.tp-v-first,.tp-rotv_c>.tp-fldv.tp-v-first{margin-top:-4px}.tp-fldv_c>.tp-fldv.tp-v-last,.tp-rotv_c>.tp-fldv.tp-v-last{margin-bottom:-4px}.tp-fldv_c>*:not(.tp-v-first),.tp-rotv_c>*:not(.tp-v-first){margin-top:4px}.tp-fldv_c>.tp-fldv:not(.tp-v-hidden)+.tp-fldv,.tp-rotv_c>.tp-fldv:not(.tp-v-hidden)+.tp-fldv{margin-top:0}.tp-fldv_c>.tp-sptv:not(.tp-v-hidden)+.tp-sptv,.tp-rotv_c>.tp-sptv:not(.tp-v-hidden)+.tp-sptv{margin-top:0}.tp-fldv.tp-fldv-expanded>.tp-fldv_c,.tp-rotv.tp-rotv-expanded .tp-rotv_c{opacity:1;padding-bottom:4px;padding-top:4px;transform:none;overflow:visible;transition:height .2s ease-in-out,opacity .2s linear .2s,padding .2s ease-in-out}.tp-btnv{padding:0 4px}.tp-btnv_b{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--button-background-color);border-radius:2px;color:var(--button-foreground-color);cursor:pointer;display:block;font-weight:bold;height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.tp-btnv_b:hover{background-color:var(--button-background-color-hover)}.tp-btnv_b:focus{background-color:var(--button-background-color-focus)}.tp-btnv_b:active{background-color:var(--button-background-color-active)}.tp-dfwv{position:absolute;top:8px;right:8px;width:256px}.tp-fldv.tp-fldv-expanded .tp-fldv_t{transition:border-radius 0s}.tp-fldv_c{border-left:var(--folder-background-color) solid 4px}.tp-fldv_t:hover+.tp-fldv_c{border-left-color:var(--folder-background-color-hover)}.tp-fldv_t:focus+.tp-fldv_c{border-left-color:var(--folder-background-color-focus)}.tp-fldv_t:active+.tp-fldv_c{border-left-color:var(--folder-background-color-active)}.tp-fldv_c>.tp-fldv{margin-left:4px}.tp-fldv_c>.tp-fldv>.tp-fldv_t{border-top-left-radius:2px;border-bottom-left-radius:2px}.tp-fldv_c>.tp-fldv.tp-fldv-expanded>.tp-fldv_t{border-bottom-left-radius:0}.tp-fldv_c .tp-fldv>.tp-fldv_c{border-bottom-left-radius:2px}.tp-ckbiv_l{display:block;position:relative}.tp-ckbiv_i{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background:red;left:0;opacity:0;position:absolute;top:0}.tp-ckbiv_m{background-color:var(--input-background-color);border-radius:2px;cursor:pointer;display:block;height:20px;position:relative;width:20px}.tp-ckbiv_m::before{background-color:var(--input-foreground-color);border-radius:2px;bottom:4px;content:'';display:block;left:4px;opacity:0;position:absolute;right:4px;top:4px}.tp-ckbiv_i:hover+.tp-ckbiv_m{background-color:var(--input-background-color-hover)}.tp-ckbiv_i:focus+.tp-ckbiv_m{background-color:var(--input-background-color-focus)}.tp-ckbiv_i:active+.tp-ckbiv_m{background-color:var(--input-background-color-active)}.tp-ckbiv_i:checked+.tp-ckbiv_m::before{opacity:1}.tp-cctxtsiv{display:flex;width:100%}.tp-cctxtsiv_m{margin-right:4px;position:relative}.tp-cctxtsiv_ms{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;border-radius:2px;color:var(--label-foreground-color);cursor:pointer;height:20px;line-height:20px;padding:0 18px 0 4px}.tp-cctxtsiv_ms:hover{background-color:var(--input-background-color-hover)}.tp-cctxtsiv_ms:focus{background-color:var(--input-background-color-focus)}.tp-cctxtsiv_ms:active{background-color:var(--input-background-color-active)}.tp-cctxtsiv_mm{border-color:var(--label-foreground-color) transparent transparent;border-style:solid;border-width:3px;box-sizing:border-box;height:6px;pointer-events:none;width:6px;bottom:0;margin:auto;position:absolute;right:6px;top:3px}.tp-cctxtsiv_w{display:flex;flex:1}.tp-cctxtsiv_i{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--input-background-color);border-radius:2px;box-sizing:border-box;color:var(--input-foreground-color);font-family:inherit;height:20px;line-height:20px;min-width:0;width:100%;border-radius:0;flex:1;padding:0 4px}.tp-cctxtsiv_i:hover{background-color:var(--input-background-color-hover)}.tp-cctxtsiv_i:focus{background-color:var(--input-background-color-focus)}.tp-cctxtsiv_i:active{background-color:var(--input-background-color-active)}.tp-cctxtsiv_i:first-child{border-bottom-left-radius:2px;border-top-left-radius:2px}.tp-cctxtsiv_i:last-child{border-bottom-right-radius:2px;border-top-right-radius:2px}.tp-cctxtsiv_i+.tp-cctxtsiv_i{margin-left:2px}.tp-clpiv{background-color:var(--base-background-color);border-radius:6px;box-shadow:0 2px 4px var(--base-shadow-color);display:none;padding:4px;position:relative;visibility:hidden;z-index:1000}.tp-clpiv.tp-clpiv-expanded{display:block;visibility:visible}.tp-clpiv_h,.tp-clpiv_ap{margin-left:6px;margin-right:6px}.tp-clpiv_h{margin-top:4px}.tp-clpiv_rgb{display:flex;margin-top:4px;width:100%}.tp-clpiv_a{display:flex;margin-top:4px;padding-top:8px;position:relative}.tp-clpiv_a:before{background-color:var(--separator-color);content:'';height:4px;left:-4px;position:absolute;right:-4px;top:0}.tp-clpiv_ap{flex:3}.tp-clpiv_at{flex:1;margin-left:4px}.tp-svpiv{border-radius:2px;outline:none;overflow:hidden;position:relative}.tp-svpiv_c{cursor:crosshair;display:block;height:80px;width:100%}.tp-svpiv_m{border-radius:100%;border:rgba(255,255,255,0.75) solid 2px;box-sizing:border-box;-webkit-filter:drop-shadow(0 0 1px rgba(0,0,0,0.3));filter:drop-shadow(0 0 1px rgba(0,0,0,0.3));height:12px;margin-left:-6px;margin-top:-6px;pointer-events:none;position:absolute;width:12px}.tp-svpiv:focus .tp-svpiv_m{border-color:#fff}.tp-hpliv{cursor:pointer;height:20px;outline:none;position:relative}.tp-hpliv_c{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAABCAYAAABubagXAAAAQ0lEQVQoU2P8z8Dwn0GCgQEDi2OK/RBgYHjBgIpfovFh8j8YBIgzFGQxuqEgPhaDOT5gOhPkdCxOZeBg+IDFZZiGAgCaSSMYtcRHLgAAAABJRU5ErkJggg==);background-position:left top;background-repeat:no-repeat;background-size:100% 100%;border-radius:2px;display:block;height:4px;left:0;margin-top:-2px;position:absolute;top:50%;width:100%}.tp-hpliv_m{border-radius:2px;border:rgba(255,255,255,0.75) solid 2px;box-shadow:0 0 2px rgba(0,0,0,0.1);box-sizing:border-box;height:12px;left:50%;margin-left:-6px;margin-top:-6px;pointer-events:none;position:absolute;top:50%;width:12px}.tp-hpliv:focus .tp-hpliv_m{border-color:#fff}.tp-apliv{cursor:pointer;height:20px;outline:none;position:relative}.tp-apliv_b{background-image:linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%),linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%);background-size:4px 4px;background-position:0 0,2px 2px;background-color:#fff;border-radius:2px;display:block;height:4px;left:0;margin-top:-2px;overflow:hidden;position:absolute;top:50%;width:100%}.tp-apliv_c{bottom:0;left:0;position:absolute;right:0;top:0}.tp-apliv_m{background-image:linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%),linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%);background-size:12px 12px;background-position:0 0,6px 6px;background-color:#fff;border-radius:2px;box-shadow:0 0 2px rgba(0,0,0,0.1);height:12px;left:50%;margin-left:-6px;margin-top:-6px;overflow:hidden;pointer-events:none;position:absolute;top:50%;width:12px}.tp-apliv_p{border-radius:2px;border:rgba(255,255,255,0.75) solid 2px;box-sizing:border-box;bottom:0;left:0;position:absolute;right:0;top:0}.tp-apliv:focus .tp-apliv_p{border-color:#fff}.tp-lstiv{display:block;padding:0;position:relative}.tp-lstiv_s{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--button-background-color);border-radius:2px;color:var(--button-foreground-color);cursor:pointer;display:block;height:20px;line-height:20px;padding:0 4px;width:100%}.tp-lstiv_s:hover{background-color:var(--button-background-color-hover)}.tp-lstiv_s:focus{background-color:var(--button-background-color-focus)}.tp-lstiv_s:active{background-color:var(--button-background-color-active)}.tp-lstiv_m{border-color:var(--button-foreground-color) transparent transparent;border-style:solid;border-width:3px;box-sizing:border-box;height:6px;pointer-events:none;width:6px;bottom:0;margin:auto;position:absolute;right:6px;top:3px}.tp-p2dpadiv{background-color:var(--base-background-color);border-radius:6px;box-shadow:0 2px 4px var(--base-shadow-color);display:none;padding:4px 4px 4px 28px;position:relative;visibility:hidden;z-index:1000}.tp-p2dpadiv.tp-p2dpadiv-expanded{display:block;visibility:visible}.tp-p2dpadiv_p{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--input-background-color);border-radius:2px;box-sizing:border-box;color:var(--input-foreground-color);font-family:inherit;height:20px;line-height:20px;min-width:0;width:100%;cursor:crosshair;height:0;overflow:hidden;padding-bottom:100%;position:relative}.tp-p2dpadiv_p:hover{background-color:var(--input-background-color-hover)}.tp-p2dpadiv_p:focus{background-color:var(--input-background-color-focus)}.tp-p2dpadiv_p:active{background-color:var(--input-background-color-active)}.tp-p2dpadiv_g{display:block;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%}.tp-p2dpadiv_ax{stroke:var(--input-guide-color)}.tp-p2dpadiv_l{stroke:var(--input-foreground-color);stroke-linecap:round;stroke-dasharray:1px 3px}.tp-p2dpadiv_m{fill:var(--input-foreground-color)}.tp-p2dpadtxtiv{display:flex;position:relative}.tp-p2dpadtxtiv_b{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--button-background-color);border-radius:2px;color:var(--button-foreground-color);cursor:pointer;display:block;font-weight:bold;height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;height:20px;position:relative;width:20px}.tp-p2dpadtxtiv_b:hover{background-color:var(--button-background-color-hover)}.tp-p2dpadtxtiv_b:focus{background-color:var(--button-background-color-focus)}.tp-p2dpadtxtiv_b:active{background-color:var(--button-background-color-active)}.tp-p2dpadtxtiv_b svg{display:block;height:16px;left:50%;margin-left:-8px;margin-top:-8px;position:absolute;top:50%;width:16px}.tp-p2dpadtxtiv_p{left:-4px;position:absolute;right:-4px;top:20px}.tp-p2dpadtxtiv_t{margin-left:4px}.tp-p2dtxtiv{display:flex}.tp-p2dtxtiv_w{align-items:center;display:flex}.tp-p2dtxtiv_w+.tp-p2dtxtiv_w{margin-left:2px}.tp-p2dtxtiv_i{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--input-background-color);border-radius:2px;box-sizing:border-box;color:var(--input-foreground-color);font-family:inherit;height:20px;line-height:20px;min-width:0;width:100%;padding:0 4px;width:100%}.tp-p2dtxtiv_i:hover{background-color:var(--input-background-color-hover)}.tp-p2dtxtiv_i:focus{background-color:var(--input-background-color-focus)}.tp-p2dtxtiv_i:active{background-color:var(--input-background-color-active)}.tp-p2dtxtiv_w:nth-child(1) .tp-p2dtxtiv_i{border-top-right-radius:0;border-bottom-right-radius:0}.tp-p2dtxtiv_w:nth-child(2) .tp-p2dtxtiv_i{border-top-left-radius:0;border-bottom-left-radius:0}.tp-sldiv{display:block;padding:0}.tp-sldiv_o{box-sizing:border-box;cursor:pointer;height:20px;margin:0 6px;outline:none;position:relative}.tp-sldiv_o::before{background-color:var(--input-background-color);border-radius:1px;bottom:0;content:'';display:block;height:2px;left:0;margin:auto;position:absolute;right:0;top:0}.tp-sldiv_i{height:100%;left:0;position:absolute;top:0}.tp-sldiv_i::before{background-color:var(--button-background-color);border-radius:2px;bottom:0;content:'';display:block;height:12px;margin:auto;position:absolute;right:-6px;top:0;width:12px}.tp-sldiv_o:hover .tp-sldiv_i::before{background-color:var(--button-background-color-hover)}.tp-sldiv_o:focus .tp-sldiv_i::before{background-color:var(--button-background-color-focus)}.tp-sldiv_o:active .tp-sldiv_i::before{background-color:var(--button-background-color-active)}.tp-txtiv{display:block;padding:0}.tp-txtiv_i{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--input-background-color);border-radius:2px;box-sizing:border-box;color:var(--input-foreground-color);font-family:inherit;height:20px;line-height:20px;min-width:0;width:100%;padding:0 4px}.tp-txtiv_i:hover{background-color:var(--input-background-color-hover)}.tp-txtiv_i:focus{background-color:var(--input-background-color-focus)}.tp-txtiv_i:active{background-color:var(--input-background-color-active)}.tp-cswiv{background-image:linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%),linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%);background-size:10px 10px;background-position:0 0,5px 5px;background-color:#fff;border-radius:2px}.tp-cswiv_sw{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--input-background-color);border-radius:2px;box-sizing:border-box;color:var(--input-foreground-color);font-family:inherit;height:20px;line-height:20px;min-width:0;width:100%}.tp-cswiv_sw:hover{background-color:var(--input-background-color-hover)}.tp-cswiv_sw:focus{background-color:var(--input-background-color-focus)}.tp-cswiv_sw:active{background-color:var(--input-background-color-active)}.tp-cswiv_b{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;cursor:pointer;display:block;height:20px;left:0;margin:0;outline:none;padding:0;position:absolute;top:0;width:20px}.tp-cswiv_b:focus::after{border:rgba(255,255,255,0.75) solid 2px;border-radius:2px;bottom:0;content:'';display:block;left:0;position:absolute;right:0;top:0}.tp-cswiv_p{left:-4px;position:absolute;right:-4px;top:20px}.tp-cswtxtiv{display:flex;position:relative}.tp-cswtxtiv_s{flex-grow:0;flex-shrink:0;width:20px}.tp-cswtxtiv_t{flex:1;margin-left:4px}.tp-sldtxtiv{display:flex}.tp-sldtxtiv_s{flex:2}.tp-sldtxtiv_t{flex:1;margin-left:4px}.tp-lblv{align-items:center;display:flex;padding-left:4px;padding-right:4px}.tp-lblv_l{color:var(--label-foreground-color);flex:1;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;overflow:hidden;padding-left:4px;padding-right:16px}.tp-lblv_v{align-self:flex-start;flex-grow:0;flex-shrink:0;width:160px}.tp-grpmv{display:block;padding:0;position:relative}.tp-grpmv_g{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--monitor-background-color);border-radius:2px;box-sizing:border-box;color:var(--monitor-foreground-color);height:20px;width:100%;display:block;height:60px}.tp-grpmv_g polyline{fill:none;stroke:var(--monitor-foreground-color);stroke-linejoin:round}.tp-grpmv_t{color:var(--monitor-foreground-color);font-size:0.9em;left:0;pointer-events:none;position:absolute;text-indent:4px;top:0;visibility:hidden}.tp-grpmv_t.tp-grpmv_t-valid{visibility:visible}.tp-grpmv_t::before{background-color:var(--monitor-foreground-color);border-radius:100%;content:'';display:block;height:4px;left:-2px;position:absolute;top:-2px;width:4px}.tp-sglmv_i{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--monitor-background-color);border-radius:2px;box-sizing:border-box;color:var(--monitor-foreground-color);height:20px;width:100%;padding:0 4px}.tp-mllmv_i{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--monitor-background-color);border-radius:2px;box-sizing:border-box;color:var(--monitor-foreground-color);height:20px;width:100%;display:block;height:60px;line-height:20px;padding:0 4px;resize:none;white-space:pre}.tp-cswmv_sw{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--monitor-background-color);border-radius:2px;box-sizing:border-box;color:var(--monitor-foreground-color);height:20px;width:100%}.tp-rotv{--font-family: var(--tp-font-family, Roboto Mono,Source Code Pro,Menlo,Courier,monospace);--base-background-color: var(--tp-base-background-color, #2f3137);--base-shadow-color: var(--tp-base-shadow-color, rgba(0,0,0,0.2));--button-background-color: var(--tp-button-background-color, #adafb8);--button-background-color-active: var(--tp-button-background-color-active, #d6d7db);--button-background-color-focus: var(--tp-button-background-color-focus, #c8cad0);--button-background-color-hover: var(--tp-button-background-color-hover, #bbbcc4);--button-foreground-color: var(--tp-button-foreground-color, #2f3137);--folder-background-color: var(--tp-folder-background-color, rgba(200,202,208,0.1));--folder-background-color-active: var(--tp-folder-background-color-active, rgba(200,202,208,0.25));--folder-background-color-focus: var(--tp-folder-background-color-focus, rgba(200,202,208,0.2));--folder-background-color-hover: var(--tp-folder-background-color-hover, rgba(200,202,208,0.15));--folder-foreground-color: var(--tp-folder-foreground-color, #c8cad0);--input-background-color: var(--tp-input-background-color, rgba(200,202,208,0.15));--input-background-color-active: var(--tp-input-background-color-active, rgba(200,202,208,0.35));--input-background-color-focus: var(--tp-input-background-color-focus, rgba(200,202,208,0.25));--input-background-color-hover: var(--tp-input-background-color-hover, rgba(200,202,208,0.15));--input-foreground-color: var(--tp-input-foreground-color, #c8cad0);--input-guide-color: var(--tp-input-guide-color, rgba(47,49,55,0.5));--label-foreground-color: var(--tp-label-foreground-color, rgba(200,202,208,0.8));--monitor-background-color: var(--tp-monitor-background-color, rgba(24,24,27,0.5));--monitor-foreground-color: var(--tp-monitor-foreground-color, rgba(200,202,208,0.7));--separator-color: var(--tp-separator-color, rgba(24,24,27,0.3));background-color:var(--base-background-color);border-radius:6px;box-shadow:0 2px 4px var(--base-shadow-color);font-family:var(--font-family);font-size:11px;font-weight:500;text-align:left}.tp-rotv_t{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top-left-radius:6px;border-top-right-radius:6px}.tp-rotv.tp-rotv-expanded .tp-rotv_t{border-bottom-left-radius:0;border-bottom-right-radius:0}.tp-rotv_m{transition:none}.tp-rotv_c>.tp-fldv:last-child>.tp-fldv_c{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.tp-rotv_c>.tp-fldv:last-child:not(.tp-fldv-expanded)>.tp-fldv_t{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.tp-rotv_c>.tp-fldv:first-child>.tp-fldv_t{border-top-left-radius:6px;border-top-right-radius:6px}.tp-sptv_r{background-color:var(--separator-color);border-width:0;display:block;height:4px;margin:0;width:100%}.tp-v.tp-v-hidden{display:none}\n",""])}}).default},"object"==typeof n&&"object"==typeof e?e.exports=i():"function"==typeof define&&define.amd?define([],i):"object"==typeof n?n.tweakpane=i():r.Tweakpane=i()},{}],32:[function(t,e,n){e.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t}},{}],33:[function(t,e,n){const r=t("canvas-sketch"),{noise1D:i,getRandomSeed:o,setSeed:s}=t("canvas-sketch-util/random"),{lerp:a}=t("canvas-sketch-util/math"),{clipPolylinesToBox:l}=t("canvas-sketch-util/geometry"),{pathsToSVG:u}=t("canvas-sketch-util/penplot"),{cos:c,sin:p,PI:d}=Math,h=t("tweakpane");var f=t("file-saver");const m={background:"#fff",lineColor:"#000",nlines:200,angleLeft:-.4,angleRight:.3,noiseFreq:.05,noiseAmpl:5,lineWidth:.05,shift:0,smooth:0,margin:1,driftBottom:0,seed:99,d:1.5,squared:!1,darkmode:!1},v={dimensions:"A4",orientation:"portrait",pixelsPerInch:300,scaleToView:!0,units:"cm",prefix:"dune",data:m},g=({width:t,height:e,units:n})=>{return({context:r,data:o})=>{const{background:h}=o;r.clearRect(0,0,t,e),r.fillStyle=h,r.fillRect(0,0,t,e);const f=(({nlines:n,noiseFreq:r,noiseAmpl:o,shift:u,smooth:h,angleLeft:f,angleRight:m,driftBottom:v,margin:g,seed:b,squared:y,d:w})=>{let _=[];const x=w*t;s(b);for(let s=0;se?e-2*g:t-2*g;j=(t-n)/2,C=(e-n)/2}else j=C=g;return _=l(_,[j,C,t-j,e-C])})(o);return f.forEach(t=>{r.beginPath(),t.forEach(t=>r.lineTo(t[0],t[1])),r.lineWidth=o.lineWidth,r.lineJoin="round",r.lineCap="round",r.strokeStyle=o.lineColor,r.stroke()}),[r.canvas,{data:u(f,{width:t,height:e,units:n}),extension:".svg"}]}};(async()=>{const t=await r(g,v);{const r=new h,i=r.addFolder({title:"Parameters"});r.on("change",e);const s=i.addFolder({title:"Dimensions"});s.addInput(v,"dimensions",{options:{A4:"A4",A3:"A3",USletter:"letter",postcard:"postcard","11r":"11r"}}).on("change",n),s.addInput(v,"orientation",{options:{portrait:"portrait",landscape:"landscape"}}).on("change",n),s.addInput(m,"margin",{min:0,max:5,step:.5}),s.addInput(m,"squared"),i.addInput(m,"nlines",{step:1,min:10,max:500}),i.addInput(m,"background"),i.addInput(m,"lineColor"),i.addInput(m,"angleLeft",{min:-1,max:1}),i.addInput(m,"angleRight",{min:-1,max:1}),i.addInput(m,"d",{min:.01,max:3,label:"line length"}),i.addInput(m,"lineWidth",{min:.01,max:.2}),i.addInput(m,"driftBottom",{min:-50,max:50}),i.addInput(m,"shift",{min:-50,max:50});const a=i.addFolder({expanded:!0,title:"RNG"});a.addButton({title:"Reseed"}).on("click",()=>{m.seed=o(),e()}),a.addInput(m,"noiseAmpl",{step:1,min:-10,max:10}),a.addInput(m,"noiseFreq",{min:0,max:.2}),i.addButton({title:"Export lines as SVG"}).on("click",()=>{const e=t.render(),n=new Blob([e[1].data],{type:"image/svg+xml"});f.saveAs(n,"penplot.svg")}),i.addButton({title:"Save PNG"}).on("click",()=>{t.render()[0].toBlob(function(t){f.saveAs(t,"penplot.png")})}),i.addInput(m,"darkmode").on("change",t=>{document.body.style.background=t?"#282a2b":"white"})}function e(){t.render()}function n(){t.loadAndRun(g,v),t.render()}})()},{"canvas-sketch":17,"canvas-sketch-util/geometry":8,"canvas-sketch-util/math":14,"canvas-sketch-util/penplot":15,"canvas-sketch-util/random":16,"file-saver":22,tweakpane:31}],34:[function(t,e,n){"use strict";n.byteLength=function(t){var e=u(t),n=e[1];return 3*(e[0]+n)/4-n},n.toByteArray=function(t){var e,n,r=u(t),s=r[0],a=r[1],l=new o(function(t,e,n){return 3*(e+n)/4-n}(0,s,a)),c=0,p=a>0?s-4:s;for(n=0;n>16&255,l[c++]=e>>8&255,l[c++]=255&e;2===a&&(e=i[t.charCodeAt(n)]<<2|i[t.charCodeAt(n+1)]>>4,l[c++]=255&e);1===a&&(e=i[t.charCodeAt(n)]<<10|i[t.charCodeAt(n+1)]<<4|i[t.charCodeAt(n+2)]>>2,l[c++]=e>>8&255,l[c++]=255&e);return l},n.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],s=0,a=n-i;sa?a:s+16383));1===i?o.push(r[(e=t[n-1])>>2]+r[e<<4&63]+"=="):2===i&&o.push(r[(e=(t[n-2]<<8)+t[n-1])>>10]+r[e>>4&63]+r[e<<2&63]+"=");return o.join("")};for(var r=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,l=s.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");return-1===n&&(n=e),[n,n===e?0:4-n%4]}function c(t,e,n){for(var i,o=[],s=e;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return o.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},{}],35:[function(t,e,n){(function(e){(function(){"use strict";var e=t("base64-js"),r=t("ieee754");n.Buffer=s,n.SlowBuffer=function(t){+t!=t&&(t=0);return s.alloc(+t)},n.INSPECT_MAX_BYTES=50;var i=2147483647;function o(t){if(t>i)throw new RangeError('The value "'+t+'" is invalid for option "size"');var e=new Uint8Array(t);return e.__proto__=s.prototype,e}function s(t,e,n){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return u(t)}return a(t,e,n)}function a(t,e,n){if("string"==typeof t)return function(t,e){"string"==typeof e&&""!==e||(e="utf8");if(!s.isEncoding(e))throw new TypeError("Unknown encoding: "+e);var n=0|d(t,e),r=o(n),i=r.write(t,e);i!==n&&(r=r.slice(0,i));return r}(t,e);if(ArrayBuffer.isView(t))return c(t);if(null==t)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(D(t,ArrayBuffer)||t&&D(t.buffer,ArrayBuffer))return function(t,e,n){if(e<0||t.byteLength=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return 0|t}function d(t,e){if(s.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||D(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var n=t.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===n)return 0;for(var i=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return F(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return U(t).length;default:if(i)return r?-1:F(t).length;e=(""+e).toLowerCase(),i=!0}}function h(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function f(t,e,n,r,i){if(0===t.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),B(n=+n)&&(n=i?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof e&&(e=s.from(e,r)),s.isBuffer(e))return 0===e.length?-1:m(t,e,n,r,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):m(t,[e],n,r,i);throw new TypeError("val must be string, number or Buffer")}function m(t,e,n,r,i){var o,s=1,a=t.length,l=e.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;s=2,a/=2,l/=2,n/=2}function u(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var c=-1;for(o=n;oa&&(n=a-l),o=n;o>=0;o--){for(var p=!0,d=0;di&&(r=i):r=i;var o=e.length;r>o/2&&(r=o/2);for(var s=0;s>8,i.push(n%256),i.push(r);return i}(e,t.length-n),t,n,r)}function x(t,n,r){return e.fromByteArray(0===n&&r===t.length?t:t.slice(n,r))}function j(t,e,n){n=Math.min(t.length,n);for(var r=[],i=e;i239?4:u>223?3:u>191?2:1;if(i+p<=n)switch(p){case 1:u<128&&(c=u);break;case 2:128==(192&(o=t[i+1]))&&(l=(31&u)<<6|63&o)>127&&(c=l);break;case 3:s=t[i+2],128==(192&(o=t[i+1]))&&128==(192&s)&&(l=(15&u)<<12|(63&o)<<6|63&s)>2047&&(l<55296||l>57343)&&(c=l);break;case 4:s=t[i+2],a=t[i+3],128==(192&(o=t[i+1]))&&128==(192&s)&&128==(192&a)&&(l=(15&u)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&l<1114112&&(c=l)}null===c?(c=65533,p=1):c>65535&&(r.push((c-=65536)>>>10&1023|55296),c=56320|1023&c),r.push(c),i+=p}return function(t){var e=t.length;if(e<=C)return String.fromCharCode.apply(String,t);var n="",r=0;for(;rthis.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return P(this,e,n);case"utf8":case"utf-8":return j(this,e,n);case"ascii":return E(this,e,n);case"latin1":case"binary":return M(this,e,n);case"base64":return x(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}.apply(this,arguments)},s.prototype.equals=function(t){if(!s.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===s.compare(this,t)},s.prototype.inspect=function(){var t="",e=n.INSPECT_MAX_BYTES;return t=this.toString("hex",0,e).replace(/(.{2})/g,"$1 ").trim(),this.length>e&&(t+=" ... "),""},s.prototype.compare=function(t,e,n,r,i){if(D(t,Uint8Array)&&(t=s.from(t,t.offset,t.byteLength)),!s.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),e<0||n>t.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&e>=n)return 0;if(r>=i)return-1;if(e>=n)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(r>>>=0),a=(n>>>=0)-(e>>>=0),l=Math.min(o,a),u=this.slice(r,i),c=t.slice(e,n),p=0;p>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var i=this.length-e;if((void 0===n||n>i)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return v(this,t,e,n);case"utf8":case"utf-8":return g(this,t,e,n);case"ascii":return b(this,t,e,n);case"latin1":case"binary":return y(this,t,e,n);case"base64":return w(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},s.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var C=4096;function E(t,e,n){var r="";n=Math.min(t.length,n);for(var i=e;ir)&&(n=r);for(var i="",o=e;on)throw new RangeError("Trying to access beyond buffer length")}function I(t,e,n,r,i,o){if(!s.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function V(t,e,n,r,i,o){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function T(t,e,n,i,o){return e=+e,n>>>=0,o||V(t,0,n,4),r.write(t,e,n,i,23,4),n+4}function S(t,e,n,i,o){return e=+e,n>>>=0,o||V(t,0,n,8),r.write(t,e,n,i,52,8),n+8}s.prototype.slice=function(t,e){var n=this.length;(t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(e=void 0===e?n:~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),e>>=0,e>>>=0,n||O(t,e,this.length);for(var r=this[t],i=1,o=0;++o>>=0,e>>>=0,n||O(t,e,this.length);for(var r=this[t+--e],i=1;e>0&&(i*=256);)r+=this[t+--e]*i;return r},s.prototype.readUInt8=function(t,e){return t>>>=0,e||O(t,1,this.length),this[t]},s.prototype.readUInt16LE=function(t,e){return t>>>=0,e||O(t,2,this.length),this[t]|this[t+1]<<8},s.prototype.readUInt16BE=function(t,e){return t>>>=0,e||O(t,2,this.length),this[t]<<8|this[t+1]},s.prototype.readUInt32LE=function(t,e){return t>>>=0,e||O(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},s.prototype.readUInt32BE=function(t,e){return t>>>=0,e||O(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},s.prototype.readIntLE=function(t,e,n){t>>>=0,e>>>=0,n||O(t,e,this.length);for(var r=this[t],i=1,o=0;++o=(i*=128)&&(r-=Math.pow(2,8*e)),r},s.prototype.readIntBE=function(t,e,n){t>>>=0,e>>>=0,n||O(t,e,this.length);for(var r=e,i=1,o=this[t+--r];r>0&&(i*=256);)o+=this[t+--r]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},s.prototype.readInt8=function(t,e){return t>>>=0,e||O(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},s.prototype.readInt16LE=function(t,e){t>>>=0,e||O(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},s.prototype.readInt16BE=function(t,e){t>>>=0,e||O(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},s.prototype.readInt32LE=function(t,e){return t>>>=0,e||O(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},s.prototype.readInt32BE=function(t,e){return t>>>=0,e||O(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},s.prototype.readFloatLE=function(t,e){return t>>>=0,e||O(t,4,this.length),r.read(this,t,!0,23,4)},s.prototype.readFloatBE=function(t,e){return t>>>=0,e||O(t,4,this.length),r.read(this,t,!1,23,4)},s.prototype.readDoubleLE=function(t,e){return t>>>=0,e||O(t,8,this.length),r.read(this,t,!0,52,8)},s.prototype.readDoubleBE=function(t,e){return t>>>=0,e||O(t,8,this.length),r.read(this,t,!1,52,8)},s.prototype.writeUIntLE=function(t,e,n,r){(t=+t,e>>>=0,n>>>=0,r)||I(this,t,e,n,Math.pow(2,8*n)-1,0);var i=1,o=0;for(this[e]=255&t;++o>>=0,n>>>=0,r)||I(this,t,e,n,Math.pow(2,8*n)-1,0);var i=n-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+n},s.prototype.writeUInt8=function(t,e,n){return t=+t,e>>>=0,n||I(this,t,e,1,255,0),this[e]=255&t,e+1},s.prototype.writeUInt16LE=function(t,e,n){return t=+t,e>>>=0,n||I(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},s.prototype.writeUInt16BE=function(t,e,n){return t=+t,e>>>=0,n||I(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},s.prototype.writeUInt32LE=function(t,e,n){return t=+t,e>>>=0,n||I(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},s.prototype.writeUInt32BE=function(t,e,n){return t=+t,e>>>=0,n||I(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},s.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e>>>=0,!r){var i=Math.pow(2,8*n-1);I(this,t,e,n,i-1,-i)}var o=0,s=1,a=0;for(this[e]=255&t;++o>0)-a&255;return e+n},s.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e>>>=0,!r){var i=Math.pow(2,8*n-1);I(this,t,e,n,i-1,-i)}var o=n-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&0===a&&0!==this[e+o+1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+n},s.prototype.writeInt8=function(t,e,n){return t=+t,e>>>=0,n||I(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},s.prototype.writeInt16LE=function(t,e,n){return t=+t,e>>>=0,n||I(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},s.prototype.writeInt16BE=function(t,e,n){return t=+t,e>>>=0,n||I(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},s.prototype.writeInt32LE=function(t,e,n){return t=+t,e>>>=0,n||I(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},s.prototype.writeInt32BE=function(t,e,n){return t=+t,e>>>=0,n||I(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},s.prototype.writeFloatLE=function(t,e,n){return T(this,t,e,!0,n)},s.prototype.writeFloatBE=function(t,e,n){return T(this,t,e,!1,n)},s.prototype.writeDoubleLE=function(t,e,n){return S(this,t,e,!0,n)},s.prototype.writeDoubleBE=function(t,e,n){return S(this,t,e,!1,n)},s.prototype.copy=function(t,e,n,r){if(!s.isBuffer(t))throw new TypeError("argument should be a Buffer");if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;--o)t[o+e]=this[o+n];else Uint8Array.prototype.set.call(t,this.subarray(n,r),e);return i},s.prototype.fill=function(t,e,n,r){if("string"==typeof t){if("string"==typeof e?(r=e,e=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!s.isEncoding(r))throw new TypeError("Unknown encoding: "+r);if(1===t.length){var i=t.charCodeAt(0);("utf8"===r&&i<128||"latin1"===r)&&(t=i)}}else"number"==typeof t&&(t&=255);if(e<0||this.length>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function U(t){return e.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(A,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function N(t,e,n,r){for(var i=0;i=e.length||i>=t.length);++i)e[i+n]=t[i];return i}function D(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function B(t){return t!=t}}).call(this)}).call(this,t("buffer").Buffer)},{"base64-js":34,buffer:35,ieee754:36}],36:[function(t,e,n){n.read=function(t,e,n,r,i){var o,s,a=8*i-r-1,l=(1<>1,c=-7,p=n?i-1:0,d=n?-1:1,h=t[e+p];for(p+=d,o=h&(1<<-c)-1,h>>=-c,c+=a;c>0;o=256*o+t[e+p],p+=d,c-=8);for(s=o&(1<<-c)-1,o>>=-c,c+=r;c>0;s=256*s+t[e+p],p+=d,c-=8);if(0===o)o=1-u;else{if(o===l)return s?NaN:Infinity*(h?-1:1);s+=Math.pow(2,r),o-=u}return(h?-1:1)*s*Math.pow(2,o-r)},n.write=function(t,e,n,r,i,o){var s,a,l,u=8*o-i-1,c=(1<>1,d=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,h=r?0:o-1,f=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||Infinity===e?(a=isNaN(e)?1:0,s=c):(s=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-s))<1&&(s--,l*=2),(e+=s+p>=1?d/l:d*Math.pow(2,1-p))*l>=2&&(s++,l/=2),s+p>=c?(a=0,s=c):s+p>=1?(a=(e*l-1)*Math.pow(2,i),s+=p):(a=e*Math.pow(2,p-1)*Math.pow(2,i),s=0));i>=8;t[n+h]=255&a,h+=f,a/=256,i-=8);for(s=s<0;t[n+h]=255&s,h+=f,s/=256,u-=8);t[n+h-f]|=128*m}},{}],37:[function(t,e,n){(function(t){(function(){t.CANVAS_SKETCH_DEFAULT_STORAGE_KEY=window.location.href}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[33,37]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9saWIvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtY2xpL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYWJzLXN2Zy1wYXRoL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FkYXB0aXZlLWJlemllci1jdXJ2ZS9mdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9hZGFwdGl2ZS1iZXppZXItY3VydmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYWxtb3N0LWVxdWFsL2FsbW9zdF9lcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9hbi1hcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hcnJheS1hbG1vc3QtZXF1YWwvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYXJyYXktYWxtb3N0LWVxdWFsL25vZGVfbW9kdWxlcy9hbG1vc3QtZXF1YWwvYWxtb3N0X2VxdWFsLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9nZW9tZXRyeS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL2NsaXAvY2xpcC1saW5lLXRvLWNpcmNsZS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL2NsaXAvY2xpcC1zZWdtZW50LXRvLWNpcmNsZS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL29wdGltaXplLXBlbnBsb3QtcGF0aHMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi92ZWMyLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvd3JhcC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbWF0aC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvcGVucGxvdC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvcmFuZG9tLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL3JpZ2h0LW5vdy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvaXMtcHJvbWlzZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2lzLWRvbS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL3V0aWwuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9yZXBlYXQtc3RyaW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGVlcC1lcXVhbC9saWIva2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvbGliL2lzX2FyZ3VtZW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kYXRlZm9ybWF0L2xpYi9kYXRlZm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvcGFkLWxlZnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9zYXZlLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvYWNjZXNzaWJpbGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL3BhcGVyLXNpemVzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGVmaW5lZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2NvbnZlcnQtbGVuZ3RoL2NvbnZlcnQtbGVuZ3RoLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvZGlzdGFuY2VzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY29yZS9yZXNpemVDYW52YXMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9nZXQtY2FudmFzLWNvbnRleHQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL2NyZWF0ZUNhbnZhcy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUvU2tldGNoTWFuYWdlci5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUva2V5Ym9hcmRTaG9ydGN1dHMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jYW52YXMtc2tldGNoLmpzIiwibm9kZV9tb2R1bGVzL2Nsb25lL2Nsb25lLmpzIiwibm9kZV9tb2R1bGVzL2NvbnZlcnQtbGVuZ3RoL2NvbnZlcnQtbGVuZ3RoLmpzIiwibm9kZV9tb2R1bGVzL2QzLXBhdGgvZGlzdC9kMy1wYXRoLmpzIiwibm9kZV9tb2R1bGVzL2RlZmluZWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmlsZS1zYXZlci9kaXN0L0ZpbGVTYXZlci5taW4uanMiLCJub2RlX21vZHVsZXMvbGluZWNsaXAvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbm9ybWFsaXplLXN2Zy1wYXRoL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlLXN2Zy1wYXRoL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NlZWQtcmFuZG9tL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NpbXBsZXgtbm9pc2Uvc2ltcGxleC1ub2lzZS5qcyIsIm5vZGVfbW9kdWxlcy9zdmctYXJjLXRvLWN1YmljLWJlemllci9janMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3ZnLXBhdGgtY29udG91cnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3ZnLXBhdGgtY29udG91cnMvbm9kZV9tb2R1bGVzL25vcm1hbGl6ZS1zdmctcGF0aC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90d2Vha3BhbmUvZGlzdC90d2Vha3BhbmUuanMiLCJub2RlX21vZHVsZXMvdmVjMi1jb3B5L2luZGV4LmpzIiwic2tldGNoLmpzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2xpYi9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC1jbGkvbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9saWIvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtY2xpL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvbGliL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLWNsaS9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsImNhbnZhcy1za2V0Y2gtY2xpL2luamVjdGVkL3N0b3JhZ2Uta2V5LmpzIl0sIm5hbWVzIjpbInIiLCJlIiwibiIsInQiLCJvIiwiaSIsImYiLCJjIiwicmVxdWlyZSIsInUiLCJhIiwiRXJyb3IiLCJjb2RlIiwicCIsImV4cG9ydHMiLCJjYWxsIiwibGVuZ3RoIiwiMSIsIm1vZHVsZSIsInBhdGgiLCJzdGFydFgiLCJzdGFydFkiLCJ4IiwieSIsIm1hcCIsInNlZyIsInR5cGUiLCJzbGljZSIsImNvbW1hbmQiLCJ0b1VwcGVyQ2FzZSIsImNsb25lIiwicG9pbnQiLCJ2ZWMyIiwib3B0IiwiUkVDVVJTSU9OX0xJTUlUIiwicmVjdXJzaW9uIiwiRkxUX0VQU0lMT04iLCJlcHNpbG9uIiwiUEFUSF9ESVNUQU5DRV9FUFNJTE9OIiwicGF0aEVwc2lsb24iLCJjdXJ2ZV9hbmdsZV90b2xlcmFuY2VfZXBzaWxvbiIsImFuZ2xlRXBzaWxvbiIsIm1fYW5nbGVfdG9sZXJhbmNlIiwiYW5nbGVUb2xlcmFuY2UiLCJtX2N1c3BfbGltaXQiLCJjdXNwTGltaXQiLCJzdGFydCIsImMxIiwiYzIiLCJlbmQiLCJzY2FsZSIsInBvaW50cyIsImRpc3RhbmNlVG9sZXJhbmNlIiwicHVzaCIsInJlY3Vyc2l2ZSIsIngxIiwieTEiLCJ4MiIsInkyIiwieDMiLCJ5MyIsIng0IiwieTQiLCJsZXZlbCIsInBpIiwiTWF0aCIsIlBJIiwieDEyIiwieTEyIiwieDIzIiwieTIzIiwieDM0IiwieTM0IiwieDEyMyIsInkxMjMiLCJ4MjM0IiwieTIzNCIsIngxMjM0IiwieTEyMzQiLCJkYTEiLCJkYTIiLCJkeCIsImR5IiwiZDIiLCJhYnMiLCJkMyIsImEyMyIsImF0YW4yIiwiYmVnaW4iLCJtaW4iLCJhbG1vc3RFcXVhbCIsImIiLCJhYnNvbHV0ZUVycm9yIiwicmVsYXRpdmVFcnJvciIsImQiLCJEQkxfRVBTSUxPTiIsInN0ciIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiYXJyIiwiQllURVNfUEVSX0VMRU1FTlQiLCJidWZmZXIiLCJBcnJheSIsImlzQXJyYXkiLCJhbG1vc3QiLCJhYnNvbHV0ZVRvbGVyYW5jZSIsInJlbGF0aXZlVG9sZXJhbmNlIiwiZXZlcnkiLCJhMCIsImIwIiwibGluZWNsaXAiLCJhcnJheUFsbW9zdEVxdWFsIiwic3F1YXJlZERpc3RhbmNlIiwiYXJlUG9pbnRzQ29sbGluZWFyIiwicG9pbnQwIiwicG9pbnQxIiwicG9pbnQyIiwieDAiLCJ5MCIsInJlbW92ZUR1cGxpY2F0ZVBvaW50cyIsImxhc3RQb2ludCIsIm5ld1BhdGgiLCJjdXJQb2ludCIsInJlbW92ZUNvbGxpbmVhclBvaW50cyIsInJlbWFpbmluZ1BvaW50cyIsInAwIiwicDEiLCJwMiIsImNvbGxpbmVhciIsInNwbGljZSIsInNoaWZ0IiwiY2xpcFNlZ21lbnRUb0NpcmNsZSIsImNsaXBMaW5lVG9DaXJjbGUiLCJjbGlwUG9seWxpbmVzVG9Cb3giLCJwb2x5bGluZXMiLCJiYm94IiwiYm9yZGVyIiwiY2xvc2VMaW5lcyIsIm1heCIsIkJvb2xlYW4iLCJsaW5lIiwicmVzdWx0IiwicG9seWdvbiIsImZpbHRlciIsImxpbmVzIiwicG9seWxpbmUiLCJyZWR1Y2UiLCJjb25jYXQiLCJjcmVhdGVIYXRjaExpbmVzIiwiYm91bmRzIiwiYW5nbGUiLCJzcGFjaW5nIiwib3V0IiwieG1pbiIsInltaW4iLCJ4bWF4IiwieW1heCIsInciLCJoIiwic3FydCIsInJvdEFuZ2xlIiwiY2EiLCJjb3MiLCJzYSIsInNpbiIsImN4IiwiY3kiLCJnZXRCb3VuZHMiLCJsbyIsImhpIiwiaiIsInNxciIsImNpcmNsZSIsImNpcmNsZVJhZGl1cyIsImhpdHMiLCJkZWx0YSIsImRldCIsInNxcnREZXQiLCJwb2ludEluQ2lyY2xlIiwicHgiLCJweSIsInJhZGl1cyIsImRpc3RhbmNlIiwicHJvamVjdFBvaW50Iiwic3JjeCIsInNyY3kiLCJkZXN0eCIsImRlc3R5IiwiZGlzdCIsImNsb3Nlc3RQb2ludCIsInAxSW5DaXJjbGUiLCJwMkluQ2lyY2xlIiwidngiLCJ2eSIsInJhdGlvIiwiY2xvc2VzdFBvaW50T25MaW5lRnJvbVBvaW50IiwiaGl0QSIsImhpdEIiLCJjbG9zZXN0UG9pbnRPblNlZ21lbnRGcm9tUG9pbnQiLCJpbnRlcnNlY3QiLCJtZXJnZVBhdGhzIiwicGF0aHMiLCJwYXRoMUlkeCIsInBhdGgySWR4IiwibWluSWR4IiwibWF4SWR4IiwibWVyZ2VkUGF0aCIsInNvcnQiLCJuZXdQYXRocyIsImxhc3RQYXRoIiwiY3VyUHQiLCJjbG9zZXN0IiwibGFzdFB0IiwiZGlzdGFuY2VUb0ZpcnN0IiwiZGlzdGFuY2VUb0xhc3QiLCJpZHgiLCJyZXZlcnNlIiwiY2xvc2VzdFBhdGgiLCJtZXJnZSIsIm1lcmdlVGhyZWhzb2xkIiwibWVyZ2VUaHJlaHNvbGRTcSIsInB0MSIsInB0MiIsInZhbHVlIiwiZnJvbSIsInRvIiwiVHlwZUVycm9yIiwiY3ljbGUiLCJmbG9vciIsImRlZmluZWQiLCJ3cmFwIiwiRVBTSUxPTiIsIk51bWJlciIsImNsYW1wIiwibGVycCIsImludmVyc2VMZXJwIiwidG9GaW5pdGUiLCJkZWZhdWx0VmFsdWUiLCJpc0Zpbml0ZSIsImV4cGFuZFZlY3RvciIsImRpbXMiLCJzY2FsYXIiLCJsZXJwQXJyYXkiLCJuZXdBcnJheSIsImluaXRpYWxWYWx1ZSIsIm1vZCIsImRhbXAiLCJsYW1iZGEiLCJkdCIsImV4cCIsImZyYWN0Iiwic2lnbiIsImRlZ1RvUmFkIiwicmFkVG9EZWciLCJwaW5nUG9uZyIsImxpbnNwYWNlIiwib3B0cyIsImVuZHBvaW50Iiwib2Zmc2V0IiwiXyIsImxlcnBGcmFtZXMiLCJ2YWx1ZXMiLCJsZW4iLCJ3aG9sZSIsImZyYW1lIiwibmV4dEZyYW1lIiwiY2xhbXAwMSIsInYiLCJzbW9vdGhzdGVwIiwiZGFtcEFycmF5IiwibWFwUmFuZ2UiLCJpbnB1dE1pbiIsImlucHV0TWF4Iiwib3V0cHV0TWluIiwib3V0cHV0TWF4Iiwib3V0VmFsIiwiZXhwYW5kMkQiLCJleHBhbmQzRCIsImV4cGFuZDREIiwiY29udmVydCIsInN2Z1BhdGhDb250b3VycyIsInN2Z1BhdGhQYXJzZSIsInN2Z1BhdGhBYnMiLCJzdmdQYXRoQXJjcyIsIm9wdGltaXplciIsImdlb21ldHJ5IiwiREVGQVVMVF9QRU5fVEhJQ0tORVNTIiwiREVGQVVMVF9QRU5fVEhJQ0tORVNTX1VOSVQiLCJERUZBVUxUX1BJWEVMU19QRVJfSU5DSCIsInBhdGhzVG9TVkdQYXRocyIsImlucHV0cyIsInN2Z1BhdGgiLCJjb252ZXJ0VG9TVkdQYXRoIiwicGF0aHNUb1BvbHlsaW5lcyIsImN1cnZlUmVzb2x1dGlvbiIsInVuaXRzIiwiY29udG91cnMiLCJlYWNoUGF0aCIsImZlYXR1cmUiLCJjb21tYW5kcyIsImZvckVhY2giLCJzdWJDb250b3VyIiwicGF0aHNUb1NWRyIsIndpZHRoIiwiaGVpZ2h0IiwiY29udmVydE9wdGlvbnMiLCJ2aWV3VW5pdHMiLCJyb3VuZFBpeGVsIiwicHJlY2lzaW9uIiwicGl4ZWxzUGVySW5jaCIsImFzc2lnbiIsInVuZGVmaW5lZCIsIm9wdGltaXplIiwib3B0aW1pemVPcHRzIiwicmVtb3ZlRHVwbGljYXRlcyIsInJlbW92ZUNvbGxpbmVhciIsInNob3VsZFNvcnQiLCJzaG91bGRNZXJnZSIsInNob3VsZFJlbW92ZUNvbGxpbmVhciIsIm1lcmdlVGhyZXNob2xkIiwic3ZnUGF0aHMiLCJ2aWV3V2lkdGgiLCJ2aWV3SGVpZ2h0IiwiZmlsbFN0eWxlIiwic3Ryb2tlU3R5bGUiLCJsaW5lV2lkdGgiLCJsaW5lSm9pbiIsImxpbmVDYXAiLCJwYXRoRWxlbWVudHMiLCJ0b0F0dHJMaXN0Iiwiam9pbiIsImFyZ3MiLCJhdHRyIiwicmVuZGVyUGF0aHMiLCJjb250ZXh0IiwiY2xlYXJSZWN0IiwiYmFja2dyb3VuZCIsImZpbGxSZWN0IiwiZm9yZWdyb3VuZCIsImJlZ2luUGF0aCIsImRyYXdTVkdQYXRoIiwibGluZVRvIiwic3Ryb2tlIiwiY2FudmFzIiwiZGF0YSIsImV4dGVuc2lvbiIsImlucHV0IiwiaXNFbXB0eSIsImlzUGF0aCIsImlzUG9seWxpbmUiLCJwb2x5bGluZVRvU1ZHUGF0aCIsImNiIiwibW92ZVRvIiwiYmV6aWVyQ3VydmVUbyIsImNyZWF0ZVBhdGgiLCJmbiIsInF1YWRyYXRpY0N1cnZlVG8iLCJhcmd1bWVudHMiLCJfeDEiLCJfeTEiLCJhcHBseSIsInBvbHlsaW5lc1RvU1ZHIiwiY29uc29sZSIsIndhcm4iLCJyZW5kZXJQb2x5bGluZXMiLCJzZWVkUmFuZG9tIiwiU2ltcGxleE5vaXNlIiwiY3JlYXRlUmFuZG9tIiwiZGVmYXVsdFNlZWQiLCJjdXJyZW50U2VlZCIsImN1cnJlbnRSYW5kb20iLCJub2lzZUdlbmVyYXRvciIsImRlZmF1bHRSYW5kb20iLCJyYW5kb20iLCJfbmV4dEdhdXNzaWFuIiwiX2hhc05leHRHYXVzc2lhbiIsInNldFNlZWQiLCJnZXRTZWVkIiwiZ2V0UmFuZG9tU2VlZCIsIlN0cmluZyIsInZhbHVlTm9uWmVybyIsInBlcm11dGVOb2lzZSIsImNyZWF0ZU5vaXNlIiwibm9pc2UxRCIsImZyZXF1ZW5jeSIsImFtcGxpdHVkZSIsIm5vaXNlMkQiLCJub2lzZTNEIiwieiIsIm5vaXNlNEQiLCJib29sZWFuIiwiY2hhbmNlIiwicmFuZ2UiLCJyYW5nZUZsb29yIiwicGljayIsImFycmF5Iiwic2h1ZmZsZSIsInJhbmQiLCJ0bXAiLCJyZXQiLCJvbkNpcmNsZSIsImluc2lkZUNpcmNsZSIsIm9uU3BoZXJlIiwicGhpIiwidGhldGEiLCJhY29zIiwiaW5zaWRlU3BoZXJlIiwiayIsImNicnQiLCJxdWF0ZXJuaW9uIiwidTEiLCJ1MiIsInUzIiwic3ExIiwic3EyIiwidGhldGExIiwidGhldGEyIiwid2VpZ2h0ZWQiLCJ3ZWlnaHRlZFNldCIsInNldCIsIndlaWdodGVkU2V0SW5kZXgiLCJnYXVzc2lhbiIsIm1lYW4iLCJzdGFuZGFyZERlcml2YXRpb24iLCJ2MSIsInYyIiwicyIsIm11bHRpcGxpZXIiLCJsb2ciLCJzZWVkIiwid2VpZ2h0Iiwid2VpZ2h0cyIsInRvdGFsV2VpZ2h0IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaGFzT3duUHJvcGVydHkiLCJwcm9wSXNFbnVtZXJhYmxlIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJvYmplY3RBc3NpZ24iLCJ0ZXN0MSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ0ZXN0MiIsImZyb21DaGFyQ29kZSIsInRlc3QzIiwic3BsaXQiLCJsZXR0ZXIiLCJrZXlzIiwiZXJyIiwic2hvdWxkVXNlTmF0aXZlIiwidGFyZ2V0Iiwic291cmNlIiwic3ltYm9scyIsInZhbCIsInRvT2JqZWN0Iiwia2V5IiwiYnJvd3NlciIsImNvbW1vbmpzR2xvYmFsIiwicGVyZm9ybWFuY2UiLCJub3ciLCJEYXRlIiwiaXNQcm9taXNlXzEiLCJvYmoiLCJ0aGVuIiwiaXNEb20iLCJ3aW5kb3ciLCJOb2RlIiwibm9kZVR5cGUiLCJub2RlTmFtZSIsImdldENsaWVudEFQSSIsImFyZ3VtZW50cyQxIiwiaXNCcm93c2VyIiwiZG9jdW1lbnQiLCJjYWNoZSIsInNoaW0iLCJzdXBwb3J0c0FyZ3VtZW50c0NsYXNzIiwic3VwcG9ydGVkIiwib2JqZWN0IiwidW5zdXBwb3J0ZWQiLCJwU2xpY2UiLCJkZWVwRXF1YWwiLCJhY3R1YWwiLCJleHBlY3RlZCIsImdldFRpbWUiLCJzdHJpY3QiLCJpc1VuZGVmaW5lZE9yTnVsbCIsImlzX2FyZ3VtZW50cyIsImlzQnVmZmVyIiwia2EiLCJrYiIsIm9iakVxdWl2IiwiY29weSIsImdsb2JhbCIsInRva2VuIiwidGltZXpvbmUiLCJ0aW1lem9uZUNsaXAiLCJkYXRlRm9ybWF0IiwiZGF0ZSIsIm1hc2siLCJ1dGMiLCJnbXQiLCJ0b0xvd2VyQ2FzZSIsInRlc3QiLCJpc05hTiIsIm1hc2tTbGljZSIsIm1hc2tzIiwiRCIsIm0iLCJIIiwiTSIsIkwiLCJnZXRUaW1lem9uZU9mZnNldCIsIlciLCJ0YXJnZXRUaHVyc2RheSIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwic2V0RGF0ZSIsImdldERheSIsImZpcnN0VGh1cnNkYXkiLCJkcyIsInNldEhvdXJzIiwiZ2V0SG91cnMiLCJnZXRXZWVrIiwiTiIsImRvdyIsImdldERheU9mV2VlayIsImZsYWdzIiwiZGQiLCJwYWQiLCJkZGQiLCJpMThuIiwiZGF5TmFtZXMiLCJkZGRkIiwibW0iLCJtbW0iLCJtb250aE5hbWVzIiwibW1tbSIsInl5IiwieXl5eSIsImhoIiwiSEgiLCJNTSIsInNzIiwibCIsInJvdW5kIiwidGltZU5hbWVzIiwidHQiLCJUIiwiVFQiLCJaIiwibWF0Y2giLCJwb3AiLCJyZXBsYWNlIiwiUyIsImRlZmF1bHQiLCJzaG9ydERhdGUiLCJtZWRpdW1EYXRlIiwibG9uZ0RhdGUiLCJmdWxsRGF0ZSIsInNob3J0VGltZSIsIm1lZGl1bVRpbWUiLCJsb25nVGltZSIsImlzb0RhdGUiLCJpc29UaW1lIiwiaXNvRGF0ZVRpbWUiLCJpc29VdGNEYXRlVGltZSIsImV4cGlyZXNIZWFkZXJGb3JtYXQiLCJyZXMiLCJyZXBlYXRTdHJpbmciLCJudW0iLCJzdWJzdHIiLCJsaW5rIiwicGFkTGVmdCIsImNoIiwibm9vcCIsImRlZmF1bHRFeHRzIiwicHJlZml4Iiwic3VmZml4Iiwic3VwcG9ydGVkRW5jb2RpbmdzIiwic3RyZWFtIiwiaXNTdGFydCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmlsZW5hbWUiLCJyZXNvbHZlRmlsZW5hbWUiLCJmdW5jIiwiY2xpZW50Iiwib3V0cHV0IiwiZXYiLCJzYXZlRGF0YVVSTCIsImRhdGFVUkwiLCJzcGxpdEluZGV4IiwiaW5kZXhPZiIsImJhc2U2NCIsImJ5dGVTdHJpbmciLCJhdG9iIiwibWltZU1hdGNoIiwiZXhlYyIsIm1pbWUiLCJhYiIsIkFycmF5QnVmZmVyIiwiaWEiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsIkJsb2IiLCJjcmVhdGVCbG9iRnJvbURhdGFVUkwiLCJibG9iIiwic2F2ZUJsb2IiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJ2aXNpYmlsaXR5IiwiZG93bmxvYWQiLCJocmVmIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYm9keSIsImFwcGVuZENoaWxkIiwib25jbGljayIsInNldFRpbWVvdXQiLCJyZXZva2VPYmplY3RVUkwiLCJwYXJlbnRFbGVtZW50IiwicmVtb3ZlQ2hpbGQiLCJyZW1vdmVBdHRyaWJ1dGUiLCJjbGljayIsImZpbGUiLCJ0b3RhbEZyYW1lcyIsImxheWVyU3RyIiwidG90YWxMYXllcnMiLCJsYXllciIsIm5hbWUiLCJ0aW1lU3RhbXAiLCJoYXNoIiwiY29tbW9uVHlwb3MiLCJkaW1lbnNpb24iLCJhbmltYXRlZCIsImFuaW1hdGluZyIsInVuaXQiLCJQNSIsInBpeGVsbGF0ZWQiLCJsb29waW5nIiwicGl4ZWxQZXJJbmNoIiwiYWxsS2V5cyIsImNoZWNrU2V0dGluZ3MiLCJzZXR0aW5ncyIsImluY2x1ZGVzIiwicGFwZXJTaXplcyIsImRpY3QiLCJwcmVzZXQiLCJpdGVtIiwiZGltZW5zaW9ucyIsImRlZmluZWQkMSIsImNvbnZlcnNpb25zIiwic3lzdGVtIiwiZmFjdG9yIiwiY20iLCJwdCIsInBjIiwiaW4iLCJmdCIsImFuY2hvcnMiLCJtZXRyaWMiLCJpbXBlcmlhbCIsImNvbnZlcnRMZW5ndGgiLCJmcm9tVW5pdCIsInRvVW5pdCIsInRvRmFjdG9yIiwiZnJvbUZhY3RvciIsImlzVG9QaXhlbCIsImZyb21Vbml0RGF0YSIsInRvVW5pdERhdGEiLCJhbmNob3IiLCJkZWNpbWFscyIsImNvbnZlcnREaXN0YW5jZSQxIiwidW5pdHNGcm9tIiwidW5pdHNUbyIsInJlc2l6ZUNhbnZhcyIsInByb3BzIiwic3R5bGVXaWR0aCIsInN0eWxlSGVpZ2h0IiwiY2FudmFzV2lkdGgiLCJjYW52YXNIZWlnaHQiLCJoYXNEaW1lbnNpb25zIiwiY2hlY2tJZkhhc0RpbWVuc2lvbnMiLCJleHBvcnRpbmciLCJzY2FsZVRvRml0Iiwic2NhbGVUb1ZpZXciLCJwaXhlbFJhdGlvIiwiZXhwb3J0UGl4ZWxSYXRpbyIsImJsZWVkIiwiZGV2aWNlUGl4ZWxSYXRpbyIsImJhc2VQaXhlbFJhdGlvIiwibWF4UGl4ZWxSYXRpbyIsInRyaW1XaWR0aCIsInRyaW1IZWlnaHQiLCJyZWYiLCJlbGVtZW50IiwicGFyZW50IiwiaW5uZXJXaWR0aCIsImlubmVySGVpZ2h0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0UGFyZW50U2l6ZSIsInBhcmVudFdpZHRoIiwicGFyZW50SGVpZ2h0IiwiZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQiLCJoaWdoZXN0IiwibG93ZXN0Iiwib3JpZW50YXRpb24iLCJsYW5kc2NhcGUiLCJyZWFsV2lkdGgiLCJyZWFsSGVpZ2h0IiwiYXNwZWN0Iiwid2luZG93QXNwZWN0Iiwic2NhbGVUb0ZpdFBhZGRpbmciLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsImdldENhbnZhc0NvbnRleHRfMSIsImdsIiwiYXR0cmlicyIsIm5hbWVzIiwiZ2V0Q29udGV4dCIsImNyZWF0ZUNhbnZhcyIsIm93bnNDYW52YXMiLCJuZXdDYW52YXMiLCJjcmVhdGVDYW52YXNFbGVtZW50IiwiYXR0cmlidXRlcyIsInBpeGVsYXRlZCIsImltYWdlU21vb3RoaW5nRW5hYmxlZCIsIm1vekltYWdlU21vb3RoaW5nRW5hYmxlZCIsIm9JbWFnZVNtb290aGluZ0VuYWJsZWQiLCJ3ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQiLCJtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCIsIlNrZXRjaE1hbmFnZXIiLCJfc2V0dGluZ3MiLCJfcHJvcHMiLCJfc2tldGNoIiwiX3JhZiIsIl9yZWNvcmRUaW1lb3V0IiwiX2xhc3RSZWRyYXdSZXN1bHQiLCJfaXNQNVJlc2l6aW5nIiwiX2tleWJvYXJkU2hvcnRjdXRzIiwiaGFuZGxlciIsImVuYWJsZWQiLCJrZXlDb2RlIiwiYWx0S2V5IiwibWV0YUtleSIsImN0cmxLZXkiLCJ0b2dnbGVQbGF5IiwicHJldmVudERlZmF1bHQiLCJjb21taXQiLCJzYXZlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJrZXlib2FyZFNob3J0Y3V0cyIsInRoaXMkMSIsImhvdGtleXMiLCJzaGlmdEtleSIsInJlY29yZGluZyIsImVuZFJlY29yZCIsInJ1biIsInJlY29yZCIsImV4cG9ydEZyYW1lIiwicGxheWluZyIsInBhdXNlIiwicGxheSIsIl9hbmltYXRlSGFuZGxlciIsImFuaW1hdGUiLCJfcmVzaXplSGFuZGxlciIsInJlc2l6ZSIsInJlbmRlciIsInNrZXRjaCIsImdldCIsInRoaXMiLCJfY29tcHV0ZVBsYXloZWFkIiwiY3VycmVudFRpbWUiLCJkdXJhdGlvbiIsIl9jb21wdXRlRnJhbWUiLCJwbGF5aGVhZCIsInRpbWUiLCJmcHMiLCJfY29tcHV0ZUN1cnJlbnRGcmFtZSIsIl9nZXRTaXplUHJvcHMiLCJ2aWV3cG9ydFdpZHRoIiwidmlld3BvcnRIZWlnaHQiLCJkaXNwb3NlIiwic3RhcnRlZCIsIl9zaWduYWxCZWdpbiIsInRpY2siLCJfY2FuY2VsVGltZW91dHMiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsIl9sYXN0VGltZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImVycm9yIiwic3RvcCIsImRlbHRhVGltZSIsImV4cG9ydE9wdHMiLCJfY3JlYXRlRXhwb3J0T3B0aW9ucyIsImZyYW1lSW50ZXJ2YWwiLCJfc2lnbmFsRW5kIiwiYmVnaW5SZWNvcmQiLCJfd3JhcENvbnRleHRTY2FsZSIsImNhdGNoIiwicmVzcG9uc2UiLCJ3YXNSZWNvcmRpbmciLCJzZXF1ZW5jZSIsImVuY29kaW5nIiwiZW5jb2RpbmdRdWFsaXR5IiwiZGF0ZWZvcm1hdCIsImFsbCIsInByZUV4cG9ydCIsImNvbW1pdE9wdHMiLCJfZG9FeHBvcnRGcmFtZSIsImRyYXdSZXN1bHQiLCJoYXNEYXRhT2JqZWN0IiwidG9EYXRhVVJMIiwiZXhwb3J0Q2FudmFzIiwibGF5ZXJMaXN0IiwiY3VyT3B0Iiwic2F2ZVBhcmFtIiwic2F2ZVByb21pc2UiLCJwYXJ0cyIsInNhdmVGaWxlIiwic2F2ZVJlc3VsdCIsInNhdmVkRXZlbnRzIiwiZXZlbnRXaXRoT3V0cHV0IiwiZmluZCIsIm91dHB1dE5hbWUiLCJpc0NsaWVudCIsInNvbWUiLCJpc1N0cmVhbWluZyIsIm9mU2VxIiwicG9zdEV4cG9ydCIsIl9wcmVSZW5kZXIiLCJfcG9zdFJlbmRlciIsInA1Iiwic2NhbGVYIiwic2NhbGVZIiwic2NhbGVDb250ZXh0IiwicmVzdG9yZSIsImZsdXNoIiwicmVkcmF3Iiwic3VibWl0RHJhd0NhbGwiLCJ1cGRhdGUiLCJub3RZZXRTdXBwb3J0ZWQiLCJvbGRDYW52YXMiLCJvbGRDb250ZXh0IiwidGltZU9wdHMiLCJ0aW1lUHJvcHMiLCJnZXRUaW1lUHJvcHMiLCJfc2V0dXBHTEtleSIsIl9hcHBlbmRDYW52YXNJZk5lZWRlZCIsImRyYXciLCJvbGRTaXplcyIsIm5ld1Byb3BzIiwicGl4ZWxEZW5zaXR5Iiwic3R5bGVDYW52YXMiLCJuZXdTaXplcyIsImNoYW5nZWQiLCJkZWVwRXF1YWxfMSIsIl9zaXplQ2hhbmdlZCIsImZyYW1lSW50ZXJ2YWxNUyIsImRlbHRhVGltZU1TIiwiaGFzRHVyYXRpb24iLCJpc05ld0ZyYW1lIiwicGxheWJhY2tSYXRlIiwibmV3VGltZSIsInRpbWVTY2FsZSIsImlzRmluaXNoZWQiLCJpc0xvb3BTdGFydCIsImxvb3AiLCJsYXN0RnJhbWUiLCJkaXNwYXRjaCIsIm1vdW50IiwidW5tb3VudCIsImRldGFjaCIsImN0eCIsImNsZWFyIiwiY2xlYXJDb2xvciIsImJ1ZmZlckRhdGEiLCJoYXNUb3RhbEZyYW1lcyIsInRvdGFsRnJhbWVzRnJvbUR1cmF0aW9uIiwiZHVyYXRpb25Gcm9tVG90YWxGcmFtZXMiLCJJbmZpbml0eSIsInN0YXJ0VGltZSIsInN0YXJ0RnJhbWUiLCJoYXNTdGFydFRpbWUiLCJoYXNTdGFydEZyYW1lIiwic2V0dXAiLCJsb2FkQW5kUnVuIiwiY2FudmFzU2tldGNoIiwibmV3U2V0dGluZ3MiLCJsb2FkIiwidW5sb2FkIiwiZGVzdHJveSIsImNyZWF0ZVNrZXRjaCIsInByZWxvYWQiLCJQNUNvbnN0cnVjdG9yIiwicDVTa2V0Y2giLCJpc0dMIiwicmVuZGVyZXIiLCJXRUJHTCIsIlAyRCIsIm5vTG9vcCIsInNldEF0dHJpYnV0ZXMiLCJfcmVuZGVyZXIiLCJkcmF3aW5nQ29udGV4dCIsImxvYWRlciIsImF0dGFjaCIsIm1lc3NhZ2UiLCJDQUNIRSIsInJ1bnRpbWVDb2xsaXNpb25zIiwiaG90SUQiLCJpc0hvdCIsImhvdCIsImlkIiwiaXNJbmplY3RpbmciLCJwcmV2aW91c0RhdGEiLCJjYWNoZUdldCIsIm5leHQiLCJvbGRNYW5hZ2VyIiwibWFuYWdlciIsIlBhcGVyU2l6ZXMiLCJfaW5zdGFuY2VvZiIsIm5hdGl2ZU1hcCIsIm5hdGl2ZVNldCIsIm5hdGl2ZVByb21pc2UiLCJNYXAiLCJTZXQiLCJjaXJjdWxhciIsImRlcHRoIiwiaW5jbHVkZU5vbkVudW1lcmFibGUiLCJhbGxQYXJlbnRzIiwiYWxsQ2hpbGRyZW4iLCJ1c2VCdWZmZXIiLCJCdWZmZXIiLCJfY2xvbmUiLCJjaGlsZCIsInByb3RvIiwiX19pc0FycmF5IiwiX19pc1JlZ0V4cCIsIlJlZ0V4cCIsIl9fZ2V0UmVnRXhwRmxhZ3MiLCJsYXN0SW5kZXgiLCJfX2lzRGF0ZSIsImFsbG9jVW5zYWZlIiwiY3JlYXRlIiwiZ2V0UHJvdG90eXBlT2YiLCJpbmRleCIsImtleUNoaWxkIiwidmFsdWVDaGlsZCIsImVudHJ5Q2hpbGQiLCJhZGQiLCJhdHRycyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInN5bWJvbCIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiZGVmaW5lUHJvcGVydHkiLCJhbGxQcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiX19vYmpUb1N0ciIsInJlIiwiaWdub3JlQ2FzZSIsIm11bHRpbGluZSIsImNsb25lUHJvdG90eXBlIiwiZmFjdG9yeSIsInRhdSIsInRhdUVwc2lsb24iLCJQYXRoIiwiX3gwIiwiX3kwIiwiY29uc3RydWN0b3IiLCJjbG9zZVBhdGgiLCJhcmNUbyIsIngyMSIsInkyMSIsIngwMSIsInkwMSIsImwwMV8yIiwieDIwIiwieTIwIiwibDIxXzIiLCJsMjBfMiIsImwyMSIsImwwMSIsInRhbiIsInQwMSIsInQyMSIsImFyYyIsImExIiwiY2N3IiwiY3ciLCJkYSIsInJlY3QiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwicmVzcG9uc2VUeXBlIiwib25sb2FkIiwiZyIsIm9uZXJyb3IiLCJzZW5kIiwic3RhdHVzIiwiZGlzcGF0Y2hFdmVudCIsIk1vdXNlRXZlbnQiLCJjcmVhdGVFdmVudCIsImluaXRNb3VzZUV2ZW50IiwibmF2aWdhdG9yIiwidXNlckFnZW50Iiwic2F2ZUFzIiwiSFRNTEFuY2hvckVsZW1lbnQiLCJ3ZWJraXRVUkwiLCJyZWwiLCJvcmlnaW4iLCJsb2NhdGlvbiIsIm1zU2F2ZU9yT3BlbkJsb2IiLCJhdXRvQm9tIiwidGl0bGUiLCJpbm5lclRleHQiLCJIVE1MRWxlbWVudCIsInNhZmFyaSIsIkZpbGVSZWFkZXIiLCJvbmxvYWRlbmQiLCJyZWFkQXNEYXRhVVJMIiwiRmlsZVNhdmVyIiwiY29kZUIiLCJsYXN0Q29kZSIsImNvZGVBIiwiYml0Q29kZSIsInBhcnQiLCJlZGdlIiwicHJldiIsInByZXZJbnNpZGUiLCJpbnNpZGUiLCJiZXppZXJYIiwiYmV6aWVyWSIsInF1YWRYIiwicXVhZFkiLCJjdXJ2ZXMiLCJhcmNUb0N1cnZlIiwicngiLCJyeSIsInhBeGlzUm90YXRpb24iLCJsYXJnZUFyY0ZsYWciLCJzd2VlcEZsYWciLCJxdWFkcmF0aWMiLCJzZWdtZW50IiwibnVtYmVycyIsIm51bWJlciIsInBhcnNlVmFsdWVzIiwidW5zaGlmdCIsInEiLCJwb29sIiwiR0xPQkFMIiwic3RhcnRkZW5vbSIsInBvdyIsInNpZ25pZmljYW5jZSIsIm92ZXJmbG93Iiwib2xkUmFuZG9tIiwiQVJDNCIsImtleWxlbiIsIm1lIiwiY291bnQiLCJtaXhrZXkiLCJzbWVhciIsInN0cmluZ3NlZWQiLCJ0b3N0cmluZyIsIm9wdGlvbnMiLCJhcmM0IiwiZmxhdHRlbiIsInByb3AiLCJ0eXAiLCJlbnRyb3B5IiwiY3J5cHRvIiwiZ2V0UmFuZG9tVmFsdWVzIiwicGx1Z2lucyIsInNjcmVlbiIsImF1dG9zZWVkIiwicmVzZXRHbG9iYWwiLCJGMiIsIkcyIiwiRzMiLCJGNCIsIkc0IiwicmFuZG9tT3JTZWVkIiwiczAiLCJzMSIsInMyIiwibWFzaCIsImFsZWEiLCJidWlsZFBlcm11dGF0aW9uVGFibGUiLCJwZXJtIiwicGVybU1vZDEyIiwiYXV4IiwiZ3JhZDMiLCJGbG9hdDMyQXJyYXkiLCJncmFkNCIsInhpbiIsInlpbiIsImkxIiwiajEiLCJuMCIsIm4xIiwibjIiLCJpaSIsImpqIiwidDAiLCJnaTAiLCJ0MSIsImdpMSIsInQyIiwiZ2kyIiwiemluIiwibjMiLCJrMSIsImkyIiwiajIiLCJrMiIsInowIiwiejEiLCJ6MiIsInozIiwia2siLCJ0MyIsImdpMyIsIm40IiwibDEiLCJsMiIsImkzIiwiajMiLCJrMyIsImwzIiwidzAiLCJyYW5reCIsInJhbmt5IiwicmFua3oiLCJyYW5rdyIsIncxIiwidzIiLCJ3MyIsIno0IiwidzQiLCJsbCIsInQ0IiwiZ2k0IiwiX2J1aWxkUGVybXV0YXRpb25UYWJsZSIsIl9zbGljZWRUb0FycmF5IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJfYXJyIiwiX24iLCJfZCIsIl9lIiwiX3MiLCJfaSIsImRvbmUiLCJzbGljZUl0ZXJhdG9yIiwiVEFVIiwibWFwVG9FbGxpcHNlIiwiX3JlZiIsImNvc3BoaSIsInNpbnBoaSIsImNlbnRlcngiLCJjZW50ZXJ5IiwiYXBwcm94VW5pdEFyYyIsImFuZzEiLCJhbmcyIiwidmVjdG9yQW5nbGUiLCJ1eCIsInV5IiwiZG90IiwiX3JlZjIiLCJfcmVmMiR4QXhpc1JvdGF0aW9uIiwiX3JlZjIkbGFyZ2VBcmNGbGFnIiwiX3JlZjIkc3dlZXBGbGFnIiwicHhwIiwicHlwIiwiX2dldEFyY0NlbnRlciIsInJ4c3EiLCJyeXNxIiwicHhwc3EiLCJweXBzcSIsInJhZGljYW50IiwiY2VudGVyeHAiLCJjZW50ZXJ5cCIsInZ4MSIsInZ5MSIsInZ4MiIsInZ5MiIsImdldEFyY0NlbnRlciIsIl9nZXRBcmNDZW50ZXIyIiwic2VnbWVudHMiLCJjZWlsIiwiY3VydmUiLCJfbWFwVG9FbGxpcHNlIiwiX21hcFRvRWxsaXBzZTIiLCJfbWFwVG9FbGxpcHNlMyIsImJlemllciIsIm5vcm0iLCJ0bXAxIiwidG1wMiIsInRtcDMiLCJzdmciLCJwZW4iLCJiZXppZXJUbyIsIs+AIiwiXzEyMCIsInJhZGlhbnMiLCJsYXJnZV9hcmNfZmxhZyIsInN3ZWVwX2ZsYWciLCJmMSIsImYyIiwieHkiLCJyb3RhdGUiLCJyeDIiLCJyeTIiLCJhc2luIiwidG9GaXhlZCIsImYyb2xkIiwieDJvbGQiLCJ5Mm9sZCIsImh4IiwiaHkiLCJyb3QiLCJyYWQiLCJkZWdyZXNzIiwicm9vdCIsIm1vZHVsZXMiLCJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZ2V0dGVyIiwidG9TdHJpbmdUYWciLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiYmluZCIsInByb3BlcnR5IiwiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanMiLCJ1c2VTb3VyY2VNYXAiLCJsaXN0IiwiY29udGVudCIsImNzc01hcHBpbmciLCJidG9hIiwic291cmNlTWFwcGluZyIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsInNvdXJjZVVSTHMiLCJzb3VyY2VzIiwic291cmNlUm9vdCIsImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJtZWRpYVF1ZXJ5IiwiYWxyZWFkeUltcG9ydGVkTW9kdWxlcyIsIi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsImNhY2hlZFNldFRpbWVvdXQiLCJjYWNoZWRDbGVhclRpbWVvdXQiLCJwcm9jZXNzIiwiZGVmYXVsdFNldFRpbW91dCIsImRlZmF1bHRDbGVhclRpbWVvdXQiLCJydW5UaW1lb3V0IiwiZnVuIiwiY2xlYXJUaW1lb3V0IiwiY3VycmVudFF1ZXVlIiwicXVldWUiLCJkcmFpbmluZyIsInF1ZXVlSW5kZXgiLCJjbGVhblVwTmV4dFRpY2siLCJkcmFpblF1ZXVlIiwidGltZW91dCIsIm1hcmtlciIsInJ1bkNsZWFyVGltZW91dCIsIkl0ZW0iLCJuZXh0VGljayIsImVudiIsImFyZ3YiLCJ2ZXJzaW9uIiwidmVyc2lvbnMiLCJvbiIsImFkZExpc3RlbmVyIiwib25jZSIsIm9mZiIsInJlbW92ZUxpc3RlbmVyIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwiZW1pdCIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0ZW5lcnMiLCJiaW5kaW5nIiwiY3dkIiwiY2hkaXIiLCJkaXIiLCJ1bWFzayIsIi4vc3JjL21haW4vanMvYXBpL2J1dHRvbi50cyIsIkJ1dHRvbkFwaSIsImJ1dHRvbkNvbnRyb2xsZXIiLCJjb250cm9sbGVyIiwidmlld01vZGVsIiwiaGlkZGVuIiwiY29uZmlndXJhYmxlIiwiZXZlbnROYW1lIiwiYnV0dG9uIiwiZW1pdHRlciIsIi4vc3JjL21haW4vanMvYXBpL2V2ZW50LWhhbmRsZXItYWRhcHRlcnMudHMiLCJmb2xkZXIiLCJtb25pdG9yIiwiX2EiLCJzZW5kZXIiLCJnZXRWYWx1ZVRvV3JpdGUiLCJyYXdWYWx1ZSIsInJlYWQiLCJ1aUNvbnRhaW5lciIsImlucHV0QmluZGluZyIsIm1vbml0b3JCaW5kaW5nIiwiZXhwYW5kZWQiLCIuL3NyYy9tYWluL2pzL2FwaS9mb2xkZXIudHMiLCJfX2Fzc2lnbiIsIkZvbGRlckFwaSIsIklucHV0QmluZGluZ0NvbnRyb2xsZXJDcmVhdG9ycyIsIk1vbml0b3JCaW5kaW5nQ29udHJvbGxlckNyZWF0b3JzIiwiYnV0dG9uXzEiLCJmb2xkZXJfMSIsInNlcGFyYXRvcl8xIiwidGFyZ2V0XzEiLCJ2aWV3X21vZGVsXzEiLCJidXR0b25fMiIsIkV2ZW50SGFuZGxlckFkYXB0ZXJzIiwiaW5wdXRfYmluZGluZ18xIiwibW9uaXRvcl9iaW5kaW5nXzEiLCJzZXBhcmF0b3JfMiIsImZvbGRlckNvbnRyb2xsZXIiLCJhZGRJbnB1dCIsIm9wdF9wYXJhbXMiLCJwYXJhbXMiLCJ1YyIsIlRhcmdldCIsInByZXNldEtleSIsIklucHV0QmluZGluZ0FwaSIsImFkZE1vbml0b3IiLCJNb25pdG9yQmluZGluZ0FwaSIsImFkZEZvbGRlciIsIkZvbGRlckNvbnRyb2xsZXIiLCJWaWV3TW9kZWwiLCJhZGRCdXR0b24iLCJCdXR0b25Db250cm9sbGVyIiwiYWRkU2VwYXJhdG9yIiwiU2VwYXJhdG9yQ29udHJvbGxlciIsIlNlcGFyYXRvckFwaSIsIi4vc3JjL21haW4vanMvYXBpL2lucHV0LWJpbmRpbmcudHMiLCJIYW5kbGVyQWRhcHRlcnMiLCJiaW5kaW5nQ29udHJvbGxlciIsInJlZnJlc2giLCIuL3NyYy9tYWluL2pzL2FwaS9tb25pdG9yLWJpbmRpbmcudHMiLCIuL3NyYy9tYWluL2pzL2FwaS9wcmVzZXQudHMiLCJpbXBvcnRKc29uIiwiZXhwb3J0SnNvbiIsInRhcmdldHMiLCJ3cml0ZSIsIi4vc3JjL21haW4vanMvYXBpL3Jvb3QudHMiLCJSb290QXBpIiwiVWlVdGlsIiwiZm9sZGVyXzIiLCJpbnB1dF9iaW5kaW5nXzIiLCJtb25pdG9yX2JpbmRpbmdfMiIsIlByZXNldCIsInJvb3RDb250cm9sbGVyIiwidmlldyIsImltcG9ydFByZXNldCIsImZpbmRDb250cm9sbGVycyIsIml0ZW1zIiwiSW5wdXRCaW5kaW5nQ29udHJvbGxlciIsImliYyIsImV4cG9ydFByZXNldCIsIk1vbml0b3JCaW5kaW5nQ29udHJvbGxlciIsIm1iYyIsIi4vc3JjL21haW4vanMvYXBpL3NlcGFyYXRvci50cyIsIi4vc3JjL21haW4vanMvYmluZGluZy9pbnB1dC50cyIsIklucHV0QmluZGluZyIsImVtaXR0ZXJfMSIsImNvbmZpZyIsIm9uVmFsdWVDaGFuZ2VfIiwicmVhZGVyXyIsInJlYWRlciIsIndyaXRlcl8iLCJ3cml0ZXIiLCJFbWl0dGVyIiwidGFyZ2V0VmFsdWUiLCJ3cml0ZV8iLCIuL3NyYy9tYWluL2pzL2JpbmRpbmcvbW9uaXRvci50cyIsIk1vbml0b3JCaW5kaW5nIiwib25UaWNrXyIsIm9uVmFsdWVVcGRhdGVfIiwidGlja2VyIiwiZGlzcG9zYWJsZSIsImFwcGVuZCIsIi4vc3JjL21haW4vanMvY29uc3RyYWludC9jb21wb3NpdGUudHMiLCJDb21wb3NpdGVDb25zdHJhaW50IiwiY29uc3RyYWludHNfIiwiY29uc3RyYWludHMiLCJjb25zdHJhaW4iLCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvbGlzdC50cyIsIkxpc3RDb25zdHJhaW50Iiwib3B0c18iLCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvcG9pbnQtMmQudHMiLCJQb2ludDJkQ29uc3RyYWludCIsInBvaW50XzJkXzEiLCJ4Q29uc3RyYWludCIsInlDb25zdHJhaW50IiwiUG9pbnQyZCIsIi4vc3JjL21haW4vanMvY29uc3RyYWludC9yYW5nZS50cyIsIlJhbmdlQ29uc3RyYWludCIsInR5cGVfdXRpbF8xIiwibWF4VmFsdWUiLCJtaW5WYWx1ZSIsIlR5cGVVdGlsIiwiLi9zcmMvbWFpbi9qcy9jb25zdHJhaW50L3N0ZXAudHMiLCJTdGVwQ29uc3RyYWludCIsInN0ZXAiLCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvdXRpbC50cyIsIkNvbnN0cmFpbnRVdGlsIiwiY29tcG9zaXRlXzEiLCJmaW5kQ29uc3RyYWludCIsImNvbnN0cmFpbnRDbGFzcyIsInRtcFJlc3VsdCIsInNjIiwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvYm9vbGVhbi1pbnB1dC50cyIsImlucHV0XzEiLCJsaXN0XzEiLCJ1dGlsXzEiLCJCb29sZWFuQ29udmVydGVyIiwiaW5wdXRfdmFsdWVfMSIsImNoZWNrYm94XzEiLCJsaXN0XzIiLCJjcmVhdGVDb250cm9sbGVyIiwiY29uc3RyYWludCIsIkxpc3RJbnB1dENvbnRyb2xsZXIiLCJzdHJpbmdpZnlWYWx1ZSIsIkNoZWNrYm94SW5wdXRDb250cm9sbGVyIiwiSW5wdXRWYWx1ZSIsIm5vcm1hbGl6ZUlucHV0UGFyYW1zT3B0aW9ucyIsImZyb21NaXhlZCIsImNyZWF0ZUNvbnN0cmFpbnQiLCJsYWJlbCIsIi4vc3JjL21haW4vanMvY29udHJvbGxlci9iaW5kaW5nLWNyZWF0b3JzL2Jvb2xlYW4tbW9uaXRvci50cyIsIm1vbml0b3JfMSIsImJvb2xlYW5fMSIsIm1vbml0b3JfdmFsdWVfMSIsIm11bHRpX2xvZ18xIiwic2luZ2xlX2xvZ18xIiwiTW9uaXRvclZhbHVlIiwiZ2V0T3JEZWZhdWx0IiwidG90YWxDb3VudCIsIlNpbmdsZUxvZ01vbml0b3JDb250cm9sbGVyIiwiZm9ybWF0dGVyIiwiQm9vbGVhbkZvcm1hdHRlciIsIk11bHRpTG9nTW9uaXRvckNvbnRyb2xsZXIiLCJjcmVhdGVUaWNrZXIiLCJpbnRlcnZhbCIsIi4vc3JjL21haW4vanMvY29udHJvbGxlci9iaW5kaW5nLWNyZWF0b3JzL2NvbG9yLWlucHV0LnRzIiwiY3JlYXRlV2l0aE9iamVjdCIsImNyZWF0ZVdpdGhOdW1iZXIiLCJjcmVhdGVXaXRoU3RyaW5nIiwiQ29sb3JDb252ZXJ0ZXIiLCJjb2xvcl8xIiwiY29sb3JfMiIsIk51bWJlckNvbG9yUGFyc2VyIiwiU3RyaW5nQ29sb3JQYXJzZXIiLCJjb2xvcl9zd2F0Y2hfdGV4dF8xIiwibm90YXRpb24iLCJnZXROb3RhdGlvbiIsImNvbnZlcnRlciIsImZyb21TdHJpbmciLCJjb2xvciIsImdldFN0cmluZ2lmaWVyIiwiQ29sb3JTd2F0Y2hUZXh0SW5wdXRDb250cm9sbGVyIiwiQ29sb3JGb3JtYXR0ZXIiLCJwYXJzZXIiLCJDb21wb3NpdGVQYXJzZXIiLCJzdXBwb3J0c0FscGhhIiwiaGFzQWxwaGFDb21wb25lbnQiLCJSZ2JhUGFyc2VyIiwiUmdiUGFyc2VyIiwidG9IZXhSZ2JhU3RyaW5nIiwidG9IZXhSZ2JTdHJpbmciLCJmcm9tTnVtYmVyVG9SZ2JhIiwiZnJvbU51bWJlclRvUmdiIiwidG9SZ2JhTnVtYmVyIiwidG9SZ2JOdW1iZXIiLCJDb2xvciIsImlzQ29sb3JPYmplY3QiLCJmcm9tT2JqZWN0IiwiaXNSZ2JhQ29sb3JPYmplY3QiLCJ0b1JnYmFPYmplY3QiLCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvYmluZGluZy1jcmVhdG9ycy9pbnB1dC50cyIsInBhbmVfZXJyb3JfMSIsIkJvb2xlYW5JbnB1dEJpbmRpbmdDb250cm9sbGVyQ3JlYXRvcnMiLCJDb2xvcklucHV0QmluZGluZ0NvbnRyb2xsZXJDcmVhdG9ycyIsIk51bWJlcklucHV0QmluZGluZ0NvbnRyb2xsZXJDcmVhdG9ycyIsIlBvaW50MmRJbnB1dEJpbmRpbmdDb250cm9sbGVyQ3JlYXRvcnMiLCJTdHJpbmdJbnB1dEJpbmRpbmdDb250cm9sbGVyQ3JlYXRvcnMiLCJQYW5lRXJyb3IiLCJiYyIsImNyZWF0ZUJpbmRpbmdDb250cm9sbGVyIiwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvbW9uaXRvci50cyIsIkJvb2xlYW5Nb25pdG9yQmluZGluZ0NvbnRyb2xsZXJDcmVhdG9ycyIsIk51bWJlck1vbml0b3JCaW5kaW5nQ29udHJvbGxlckNyZWF0b3JzIiwiU3RyaW5nTW9uaXRvckJpbmRpbmdDb250cm9sbGVyQ3JlYXRvcnMiLCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvYmluZGluZy1jcmVhdG9ycy9udW1iZXItaW5wdXQudHMiLCJyYW5nZV8xIiwic3RlcF8xIiwiTnVtYmVyQ29udmVydGVyIiwibnVtYmVyXzEiLCJzdHJpbmdfbnVtYmVyXzEiLCJudW1iZXJfdGV4dF8xIiwic2xpZGVyX3RleHRfMSIsIlNsaWRlclRleHRJbnB1dENvbnRyb2xsZXIiLCJOdW1iZXJGb3JtYXR0ZXIiLCJnZXRTdWl0YWJsZURlY2ltYWxEaWdpdHMiLCJTdHJpbmdOdW1iZXJQYXJzZXIiLCJOdW1iZXJUZXh0SW5wdXRDb250cm9sbGVyIiwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvbnVtYmVyLW1vbml0b3IudHMiLCJncmFwaF8xIiwiY3JlYXRlRm9ybWF0dGVyIiwiR3JhcGhNb25pdG9yQ29udHJvbGxlciIsImNyZWF0ZUdyYXBoTW9uaXRvciIsImNyZWF0ZVRleHRNb25pdG9yIiwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvcG9pbnQtMmQtaW5wdXQudHMiLCJQb2ludDJkQ29udmVydGVyIiwiYW55X3BvaW50XzJkXzEiLCJwb2ludF8yZF9wYWRfdGV4dF8xIiwiY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCIsIkFueVBvaW50MmRQYXJzZXIiLCJ5UGFyYW1zIiwiaW52ZXJ0c1kiLCJzaG91bGROZXZlckhhcHBlbiIsIlBvaW50MmRQYWRUZXh0SW5wdXRDb250cm9sbGVyIiwieEZvcm1hdHRlciIsInlGb3JtYXR0ZXIiLCJpbnZlcnRlZCIsIi4vc3JjL21haW4vanMvY29udHJvbGxlci9iaW5kaW5nLWNyZWF0b3JzL3N0cmluZy1pbnB1dC50cyIsIlN0cmluZ0NvbnZlcnRlciIsInN0cmluZ18xIiwidGV4dF8xIiwiVGV4dElucHV0Q29udHJvbGxlciIsIlN0cmluZ0Zvcm1hdHRlciIsIi4vc3JjL21haW4vanMvY29udHJvbGxlci9iaW5kaW5nLWNyZWF0b3JzL3N0cmluZy1tb25pdG9yLnRzIiwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvdXRpbC50cyIsImNvbnN0YW50c18xIiwiaW50ZXJ2YWxfMSIsIm1hbnVhbF8xIiwiTWFudWFsVGlja2VyIiwiSW50ZXJ2YWxUaWNrZXIiLCJDb25zdGFudHMiLCJtb25pdG9yRGVmYXVsdEludGVydmFsIiwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2J1dHRvbi50cyIsIm9uQnV0dG9uQ2xpY2tfIiwiQnV0dG9uIiwiQnV0dG9uVmlldyIsIm1vZGVsIiwiYnV0dG9uRWxlbWVudCIsIi4vc3JjL21haW4vanMvY29udHJvbGxlci9jb250YWluZXItdXRpbC50cyIsImNvbXB1dGVFeHBhbmRlZEZvbGRlckhlaWdodCIsInVwZGF0ZUFsbEl0ZW1zUG9zaXRpb25zIiwiRG9tVXRpbCIsInZpc2libGVJdGVtcyIsImZpcnN0VmlzaWJsZUl0ZW0iLCJsYXN0VmlzaWJsZUl0ZW0iLCJwcyIsInBvc2l0aW9ucyIsImNvbnRhaW5lckVsZW1lbnQiLCJkaXNhYmxlVHJhbnNpdGlvblRlbXBvcmFyaWx5IiwiZXhwYW5kZWRIZWlnaHQiLCJ0ZW1wb3JhcnlFeHBhbmRlZCIsImZvcmNlUmVmbG93IiwiY2xpZW50SGVpZ2h0IiwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2ZvbGRlci50cyIsInVpX2NvbnRhaW5lcl8xIiwiQ29udGFpbmVyVXRpbCIsIm9uQ29udGFpbmVyVHJhbnNpdGlvbkVuZF8iLCJvbkZvbGRlckJlZm9yZUNoYW5nZV8iLCJvblRpdGxlQ2xpY2tfIiwib25VaUNvbnRhaW5lckFkZF8iLCJvblVpQ29udGFpbmVySXRlbUxheW91dF8iLCJvblVpQ29udGFpbmVyUmVtb3ZlXyIsIkZvbGRlciIsInVjTGlzdF8iLCJVaUNvbnRhaW5lciIsImRvY18iLCJGb2xkZXJWaWV3IiwidGl0bGVFbGVtZW50Iiwic2hvdWxkRml4SGVpZ2h0IiwiYXBwbHlVaUNvbnRhaW5lckNoYW5nZV8iLCJpbnNlcnRFbGVtZW50QXQiLCJ1aUNvbnRyb2xsZXIiLCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQtYmluZGluZy50cyIsImxhYmVsZWRfMSIsIkxhYmVsZWRWaWV3IiwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L2EtcGFsZXR0ZS50cyIsIkFQYWxldHRlSW5wdXRDb250cm9sbGVyIiwicG9pbnRlcl9oYW5kbGVyXzEiLCJhX3BhbGV0dGVfMSIsIm9uS2V5RG93bl8iLCJvblBvaW50ZXJEb3duXyIsIm9uUG9pbnRlck1vdmVfIiwib25Qb2ludGVyVXBfIiwiQVBhbGV0dGVJbnB1dFZpZXciLCJwdEhhbmRsZXJfIiwiUG9pbnRlckhhbmRsZXIiLCJoYW5kbGVQb2ludGVyRXZlbnRfIiwiYWxwaGEiLCJnZXRDb21wb25lbnRzIiwiZ2V0U3RlcEZvcktleSIsImdldEJhc2VTdGVwRm9yQ29sb3IiLCJnZXRIb3Jpem9udGFsU3RlcEtleXMiLCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvY2hlY2tib3gudHMiLCJvbklucHV0Q2hhbmdlXyIsIkNoZWNrYm94SW5wdXRWaWV3IiwiaW5wdXRFbGVtZW50IiwiaW5wdXRFbGVtIiwiZm9yY2VDYXN0IiwiY3VycmVudFRhcmdldCIsImNoZWNrZWQiLCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvY29sb3ItY29tcG9uZW50LXRleHRzLnRzIiwiQ29sb3JDb21wb25lbnRUZXh0c0lucHV0Q29udHJvbGxlciIsImNvbG9yX2NvbXBvbmVudF90ZXh0c18xIiwiX3RoaXMiLCJvbk1vZGVTZWxlY3RDaGFuZ2VfIiwib25JbnB1dEtleURvd25fIiwicGFyc2VyXyIsInBpY2tlZENvbG9yIiwiQ29sb3JDb21wb25lbnRUZXh0c0lucHV0VmlldyIsImlucHV0RWxlbWVudHMiLCJtb2RlU2VsZWN0RWxlbWVudCIsImZpbmRJbmRleE9mSW5wdXRFbGVtXyIsImlucHV0RWxlbXMiLCJ1cGRhdGVDb21wb25lbnRfIiwibmV3VmFsdWUiLCJuZXdDb21wcyIsImNvbXAiLCJwYXJzZWRWYWx1ZSIsImNvbXBJbmRleCIsImdldFZlcnRpY2FsU3RlcEtleXMiLCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvY29sb3ItcGlja2VyLnRzIiwiQ29sb3JQaWNrZXJJbnB1dENvbnRyb2xsZXIiLCJmb2xkYWJsZV8xIiwiTW9kZWxTeW5jIiwiY29sb3JfcGlja2VyXzEiLCJoX3BhbGV0dGVfMSIsInN2X3BhbGV0dGVfMSIsInRyaWdnZXJFbGVtZW50Iiwib25Gb2N1c2FibGVFbGVtZW50Qmx1cl8iLCJmb2xkYWJsZSIsIkZvbGRhYmxlIiwiaFBhbGV0dGVJY18iLCJIUGFsZXR0ZUlucHV0Q29udHJvbGxlciIsInN2UGFsZXR0ZUljXyIsIlN2UGFsZXR0ZUlucHV0Q29udHJvbGxlciIsImFscGhhSWNzXyIsInBhbGV0dGUiLCJ0ZXh0IiwiY29ubmVjdCIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJjb21wcyIsImNvbXBUZXh0c0ljXyIsIkNvbG9yUGlja2VySW5wdXRWaWV3IiwiYWxwaGFJbnB1dFZpZXdzIiwiY29tcG9uZW50VGV4dHNWaWV3IiwiaFBhbGV0dGVJbnB1dFZpZXciLCJzdlBhbGV0dGVJbnB1dFZpZXciLCJhbGxGb2N1c2FibGVFbGVtZW50cyIsImVsZW0iLCJuZXh0VGFyZ2V0IiwiZmluZE5leHRUYXJnZXQiLCJjb250YWlucyIsInN1cHBvcnRzVG91Y2giLCJvd25lckRvY3VtZW50IiwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L2NvbG9yLXN3YXRjaC10ZXh0LnRzIiwiY29sb3Jfc3dhdGNoXzEiLCJzd2F0Y2hJY18iLCJDb2xvclN3YXRjaElucHV0Q29udHJvbGxlciIsInRleHRJY18iLCJDb2xvclN3YXRjaFRleHRJbnB1dFZpZXciLCJzd2F0Y2hJbnB1dFZpZXciLCJ0ZXh0SW5wdXRWaWV3IiwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L2NvbG9yLXN3YXRjaC50cyIsInBpY2tlZF9jb2xvcl8xIiwib25CdXR0b25CbHVyXyIsInBpY2tlckljXyIsIlBpY2tlZENvbG9yIiwiQ29sb3JTd2F0Y2hJbnB1dFZpZXciLCJwaWNrZXJJbnB1dFZpZXciLCJyZWxhdGVkVGFyZ2V0IiwiZm9jdXMiLCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvaC1wYWxldHRlLnRzIiwibnVtYmVyX3V0aWxfMSIsIkhQYWxldHRlSW5wdXRWaWV3IiwiaHVlIiwiTnVtYmVyVXRpbCIsIi4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9saXN0LnRzIiwib25TZWxlY3RDaGFuZ2VfIiwidmFsdWVfIiwibGlzdEl0ZW1zXyIsInZpZXdfIiwiTGlzdElucHV0VmlldyIsInNlbGVjdEVsZW1lbnQiLCJvcHRFbGVtIiwic2VsZWN0ZWRPcHRpb25zIiwiaXRlbUluZGV4IiwiZGF0YXNldCIsIi4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9udW1iZXItdGV4dC50cyIsImV4dGVuZFN0YXRpY3MiLCJfX2V4dGVuZHMiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9fIiwiX3N1cGVyIiwic3RlcF8iLCJnZXRTdGVwRm9yVGV4dElucHV0IiwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L3BvaW50LTJkLXBhZC10ZXh0LnRzIiwicG9pbnRfMmRfcGFkXzEiLCJwb2ludF8yZF90ZXh0XzEiLCJvblBhZEJ1dHRvbkJsdXJfIiwib25QYWRCdXR0b25DbGlja18iLCJwYWRJY18iLCJQb2ludDJkUGFkSW5wdXRDb250cm9sbGVyIiwiUG9pbnQyZFRleHRJbnB1dENvbnRyb2xsZXIiLCJQb2ludDJkUGFkVGV4dElucHV0VmlldyIsInBhZElucHV0VmlldyIsInBhZEJ1dHRvbkVsZW1lbnQiLCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvcG9pbnQtMmQtcGFkLnRzIiwicG9pbnRfMmRfMiIsIm9uUGFkS2V5RG93bl8iLCJtYXhWYWx1ZV8iLCJnZXRTdWl0YWJsZU1heFZhbHVlRm9yUG9pbnQyZFBhZCIsImludmVydHNZXyIsInhTdGVwXyIsInlTdGVwXyIsIlBvaW50MmRQYWRJbnB1dFZpZXciLCJwYWRFbGVtZW50IiwiaXNBcnJvd0tleSIsIi4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9wb2ludC0yZC10ZXh0LnRzIiwiUG9pbnQyZFRleHRJbnB1dFZpZXciLCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvc2xpZGVyLXRleHQudHMiLCJzbGlkZXJfMSIsInNsaWRlckljXyIsIlNsaWRlcklucHV0Q29udHJvbGxlciIsIlNsaWRlclRleHRJbnB1dFZpZXciLCJzbGlkZXJJbnB1dFZpZXciLCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvc2xpZGVyLnRzIiwiZXN0aW1hdGVTdWl0YWJsZVJhbmdlIiwiZmluZFJhbmdlIiwibWluVmFsdWVfIiwiU2xpZGVySW5wdXRWaWV3Iiwib3V0ZXJFbGVtZW50IiwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L3N2LXBhbGV0dGUudHMiLCJTdlBhbGV0dGVJbnB1dFZpZXciLCJzYXR1cmF0aW9uIiwiYmFzZVN0ZXAiLCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvdGV4dC50cyIsIlRleHRJbnB1dFZpZXciLCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvbW9uaXRvci1iaW5kaW5nLnRzIiwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL21vbml0b3IvZ3JhcGgudHMiLCJncmFwaF9jdXJzb3JfMSIsIm9uR3JhcGhNb3VzZUxlYXZlXyIsIm9uR3JhcGhNb3VzZU1vdmVfIiwiY3Vyc29yXyIsIkdyYXBoQ3Vyc29yIiwiR3JhcGhNb25pdG9yVmlldyIsImN1cnNvciIsImdyYXBoRWxlbWVudCIsIm9mZnNldFgiLCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvbW9uaXRvci9tdWx0aS1sb2cudHMiLCJNdWx0aUxvZ01vbml0b3JWaWV3IiwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL21vbml0b3Ivc2luZ2xlLWxvZy50cyIsIlNpbmdsZUxvZ01vbml0b3JWaWV3IiwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL3Jvb3QudHMiLCJSb290Q29udHJvbGxlciIsInJvb3RfMSIsImNyZWF0ZUZvbGRlciIsIlJvb3RWaWV3IiwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL3NlcGFyYXRvci50cyIsIlNlcGFyYXRvclZpZXciLCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvdWktdXRpbC50cyIsImlzVmVydGljYWxBcnJvd0tleSIsImZpbmRTdGVwIiwiZ2V0U3VpdGFibGVNYXhEaW1lbnNpb25WYWx1ZSIsInJjIiwidGV4dFRvVmFsdWVNYXAiLCJ1aUNvbnRyb2xsZXJzIiwiY29udHJvbGxlckNsYXNzIiwicmVzdWx0cyIsInVwS2V5IiwiZG93bktleSIsImdldERlY2ltYWxEaWdpdHMiLCJ5YyIsInhyIiwieXIiLCJmb3JBbHBoYSIsIi4vc3JjL21haW4vanMvY29udmVydGVyL2Jvb2xlYW4udHMiLCIuL3NyYy9tYWluL2pzL2NvbnZlcnRlci9jb2xvci50cyIsInRvRnVuY3Rpb25hbEhzbGFTdHJpbmciLCJ0b0Z1bmN0aW9uYWxIc2xTdHJpbmciLCJ0b0Z1bmN0aW9uYWxSZ2JhU3RyaW5nIiwidG9GdW5jdGlvbmFsUmdiU3RyaW5nIiwiQ29sb3JNb2RlbCIsImNyZWF0ZUVtcHR5Q29sb3IiLCJ6ZXJvZmlsbCIsImhleCIsIndpdGhvdXRBbHBoYSIsInJnYmFDb21wcyIsImZvcm1hdCIsImFGb3JtYXR0ZXIiLCJyZ2JGb3JtYXR0ZXIiLCJoc2xGb3JtYXR0ZXIiLCJjdiIsIk5PVEFUSU9OX1RPX1NUUklOR0lGSUVSX01BUCIsImZ1bmMuaHNsIiwiZnVuYy5oc2xhIiwiZnVuYy5yZ2IiLCJmdW5jLnJnYmEiLCJoZXgucmdiIiwiaGV4LnJnYmEiLCIuL3NyYy9tYWluL2pzL2NvbnZlcnRlci9udW1iZXIudHMiLCJwdiIsIi4vc3JjL21haW4vanMvY29udmVydGVyL3BvaW50LTJkLnRzIiwiLi9zcmMvbWFpbi9qcy9jb252ZXJ0ZXIvc3RyaW5nLnRzIiwiLi9zcmMvbWFpbi9qcy9mb3JtYXR0ZXIvYm9vbGVhbi50cyIsIi4vc3JjL21haW4vanMvZm9ybWF0dGVyL2NvbG9yLnRzIiwic3RyaW5naWZpZXIiLCJzdHJpbmdpZmllcl8iLCIuL3NyYy9tYWluL2pzL2Zvcm1hdHRlci9udW1iZXIudHMiLCJkaWdpdHMiLCJkaWdpdHNfIiwiLi9zcmMvbWFpbi9qcy9mb3JtYXR0ZXIvc3RyaW5nLnRzIiwiLi9zcmMvbWFpbi9qcy9pbmRleC50cyIsIlN0eWxlIiwiVHdlYWtwYW5lIiwib3B0X2NvbmZpZyIsInF1ZXJ5U2VsZWN0b3IiLCJzdHlsZUVsZW0iLCJmb3IiLCJ0ZXh0Q29udGVudCIsImhlYWQiLCJlbWJlZERlZmF1bHRTdHlsZUlmTmVlZGVkIiwiVHdlYWtwYW5lV2l0aG91dFN0eWxlIiwiLi9zcmMvbWFpbi9qcy9taXNjL2NsYXNzLW5hbWUudHMiLCJDbGFzc05hbWUiLCJQUkVGSVgiLCJUWVBFX1RPX1BPU1RGSVhfTUFQIiwiIiwidmlld05hbWUiLCJvcHRfdmlld1R5cGUiLCJwb3N0Zml4Iiwib3B0X2VsZW1lbnROYW1lIiwib3B0X21vZGlmaWVyIiwiLi9zcmMvbWFpbi9qcy9taXNjL2NvbG9yLW1vZGVsLnRzIiwiY29udmVydE1vZGUiLCJ3aXRoQWxwaGEiLCJvcGFxdWUiLCJoc3ZUb1JnYiIsInJnYlRvSHNsIiwicnAiLCJncCIsImJwIiwiY21heCIsImNtaW4iLCJoc2xUb1JnYiIsIl9iIiwiX2MiLCJfZiIsImhwIiwic3AiLCJscCIsInJnYlRvSHN2IiwidnAiLCJNT0RFX0NPTlZFUlRFUl9NQVAiLCJoc2wiLCJoc3YiLCJyZ2IiLCJjb21wb25lbnRzIiwiZnJvbU1vZGUiLCJ0b01vZGUiLCIuL3NyYy9tYWluL2pzL21pc2MvY29uc3RhbnRzLnRzIiwiLi9zcmMvbWFpbi9qcy9taXNjL2Rpc3Bvc2luZy11dGlsLnRzIiwiZGlzcG9zZUVsZW1lbnQiLCIuL3NyYy9tYWluL2pzL21pc2MvZG9tLXV0aWwudHMiLCJpbmRleE9mQ2hpbGRFbGVtZW50IiwicmVtb3ZlRWxlbWVudCIsImNyZWF0ZVN2Z0ljb25FbGVtZW50IiwiZ2V0Q2FudmFzQ29udGV4dCIsImdldFdpbmRvd0RvY3VtZW50IiwiU1ZHX05TIiwiY2FsbGJhY2siLCJ0cmFuc2l0aW9uIiwib250b3VjaHN0YXJ0IiwiRnVuY3Rpb24iLCJjYW52YXNFbGVtZW50IiwiSUNPTl9JRF9UT19JTk5FUl9IVE1MX01BUCIsInAyZHBhZCIsImljb25JZCIsImNyZWF0ZUVsZW1lbnROUyIsImlubmVySFRNTCIsImluc2VydEJlZm9yZSIsImNoaWxkcmVuIiwicGFyZW50RWxlbSIsImV4cGxpY2l0T3JpZ2luYWxUYXJnZXQiLCIuL3NyYy9tYWluL2pzL21pc2MvZW1pdHRlci50cyIsIm9ic2VydmVyc18iLCJvYnNlcnZlcnMiLCJvYnNlcnZlciIsImV2ZW50IiwiLi9zcmMvbWFpbi9qcy9taXNjL251bWJlci11dGlsLnRzIiwic3RhcnQxIiwiZW5kMSIsInN0YXJ0MiIsImVuZDIiLCIuL3NyYy9tYWluL2pzL21pc2MvcGFuZS1lcnJvci50cyIsImNyZWF0ZU1lc3NhZ2UiLCJzdGFjayIsImFscmVhZHlEaXNwb3NlZCIsIi4vc3JjL21haW4vanMvbWlzYy9wb2ludGVyLWhhbmRsZXIudHMiLCJvbkRvY3VtZW50TW91c2VNb3ZlXyIsIm9uRG9jdW1lbnRNb3VzZVVwXyIsIm9uTW91c2VEb3duXyIsIm9uVG91Y2hNb3ZlXyIsIm9uVG91Y2hTdGFydF8iLCJwcmVzc2VkXyIsImNvbXB1dGVQb3NpdGlvbl8iLCJvZmZzZXRZIiwid2luIiwiZGVmYXVsdFZpZXciLCJwYWdlWCIsInNjcm9sbFgiLCJsZWZ0IiwicGFnZVkiLCJzY3JvbGxZIiwidG9wIiwidG91Y2giLCJ0YXJnZXRUb3VjaGVzIiwiY2xpZW50WCIsImNsaWVudFkiLCIuL3NyYy9tYWluL2pzL21pc2MvdGlja2VyL2ludGVydmFsLnRzIiwiZGlzcG9zYWJsZV8xIiwiaWRfIiwic2V0SW50ZXJ2YWwiLCJEaXNwb3NhYmxlIiwiY2xlYXJJbnRlcnZhbCIsIi4vc3JjL21haW4vanMvbWlzYy90aWNrZXIvbWFudWFsLnRzIiwiLi9zcmMvbWFpbi9qcy9taXNjL3R5cGUtdXRpbC50cyIsImRlZXBFcXVhbHNBcnJheSIsImEyIiwiLi9zcmMvbWFpbi9qcy9tb2RlbC9idXR0b24udHMiLCIuL3NyYy9tYWluL2pzL21vZGVsL2NvbG9yLnRzIiwiQ09OU1RSQUlOVF9NQVAiLCJpc1JnYkNvbG9yQ29tcG9uZW50IiwibW9kZV8iLCJjb21wc18iLCJpc1JnYkNvbG9yT2JqZWN0Iiwib3B0X21vZGUiLCJyZ2JDb21wcyIsIi4vc3JjL21haW4vanMvbW9kZWwvZGlzcG9zYWJsZS50cyIsImRpc3Bvc2VkXyIsIi4vc3JjL21haW4vanMvbW9kZWwvZm9sZGFibGUudHMiLCJleHBhbmRlZF8iLCIuL3NyYy9tYWluL2pzL21vZGVsL2ZvbGRlci50cyIsImV4cGFuZGVkSGVpZ2h0XyIsInRlbXBvcmFyeUV4cGFuZGVkXyIsInNob3VsZEZpeEhlaWdodF8iLCJzdHlsZUV4cGFuZGVkIiwiLi9zcmMvbWFpbi9qcy9tb2RlbC9ncmFwaC1jdXJzb3IudHMiLCJpbmRleF8iLCIuL3NyYy9tYWluL2pzL21vZGVsL2lucHV0LXZhbHVlLnRzIiwiY29uc3RyYWludF8iLCJyYXdWYWx1ZV8iLCJlcXVhbHNWYWx1ZSIsImNvbnN0cmFpbmVkVmFsdWUiLCIuL3NyYy9tYWluL2pzL21vZGVsL2xpc3QudHMiLCJMaXN0IiwiaXRlbXNfIiwib3B0X2luZGV4IiwicmVtb3ZlIiwiLi9zcmMvbWFpbi9qcy9tb2RlbC9tb2RlbC1zeW5jLnRzIiwiLi9zcmMvbWFpbi9qcy9tb2RlbC9tb25pdG9yLXZhbHVlLnRzIiwicmF3VmFsdWVzXyIsInRvdGFsQ291bnRfIiwiLi9zcmMvbWFpbi9qcy9tb2RlbC9waWNrZWQtY29sb3IudHMiLCIuL3NyYy9tYWluL2pzL21vZGVsL3BvaW50LTJkLnRzIiwiLi9zcmMvbWFpbi9qcy9tb2RlbC90YXJnZXQudHMiLCJvcHRfaWQiLCJvYmpfIiwia2V5XyIsInByZXNldEtleV8iLCIuL3NyYy9tYWluL2pzL21vZGVsL3VpLWNvbnRhaW5lci50cyIsIm9uSXRlbUZvbGRlckZvbGRfIiwib25MaXN0SXRlbUxheW91dF8iLCJvblN1Yml0ZW1MYXlvdXRfIiwib25TdWJpdGVtRm9sZGVyRm9sZF8iLCJvblN1Yml0ZW1JbnB1dENoYW5nZV8iLCJvblN1Yml0ZW1Nb25pdG9yVXBkYXRlXyIsIm9uSXRlbUlucHV0Q2hhbmdlXyIsIm9uTGlzdEFkZF8iLCJvbkxpc3RJdGVtRGlzcG9zZV8iLCJvbkxpc3RSZW1vdmVfIiwib25JdGVtTW9uaXRvclVwZGF0ZV8iLCJkaXNwb3NlZCIsIi4vc3JjL21haW4vanMvbW9kZWwvdmlldy1tb2RlbC50cyIsIm9uRGlzcG9zZV8iLCJwb3NpdGlvbnNfIiwiaGlkZGVuXyIsImRpc3Bvc2FibGVfIiwiLi9zcmMvbWFpbi9qcy9tb2RlbC92aWV3LXBvc2l0aW9ucy50cyIsImdldEFsbCIsIi4vc3JjL21haW4vanMvcGFyc2VyL2FueS1wb2ludC0yZC50cyIsIi4vc3JjL21haW4vanMvcGFyc2VyL251bWJlci1jb2xvci50cyIsIi4vc3JjL21haW4vanMvcGFyc2VyL3N0cmluZy1jb2xvci50cyIsInBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlIiwicGFyc2VGbG9hdCIsIkFOR0xFX1RPX0RFR19NQVAiLCJkZWciLCJncmFkIiwidHVybiIsInBhcnNlQ3NzTnVtYmVyT3JBbmdsZSIsIk5PVEFUSU9OX1RPX1BBUlNFUl9NQVAiLCJtUnJnZ2JiIiwicGFyc2VJbnQiLCJtUmdiIiwic3VicGFyc2VyIiwiLi9zcmMvbWFpbi9qcy9wYXJzZXIvc3RyaW5nLW51bWJlci50cyIsIi4vc3JjL21haW4vanMvdHdlYWtwYW5lLXdpdGhvdXQtc3R5bGUudHMiLCJyb290XzIiLCJjbGFzc19uYW1lXzEiLCJjb250YWluZXJFbGVtXyIsImNvbnRhaW5lciIsImNsYXNzTGlzdCIsImNyZWF0ZURlZmF1bHRXcmFwcGVyRWxlbWVudCIsInVzZXNEZWZhdWx0V3JhcHBlcl8iLCJjb250YWluZXJFbGVtIiwiLi9zcmMvbWFpbi9qcy92aWV3L2J1dHRvbi50cyIsIkRpc3Bvc2luZ1V0aWwiLCJ2aWV3XzEiLCJjbGFzc05hbWUiLCJidXR0b25FbGVtIiwiYnV0dG9uRWxlbV8iLCJWaWV3IiwiLi9zcmMvbWFpbi9qcy92aWV3L2ZvbGRlci50cyIsIm9uRm9sZGVyQ2hhbmdlXyIsImZvbGRlcl8iLCJ0aXRsZUVsZW0iLCJ0aXRsZUVsZW1fIiwibWFya0VsZW0iLCJhcHBseU1vZGVsXyIsImV4cGFuZGVkQ2xhc3MiLCIuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvYS1wYWxldHRlLnRzIiwidGFiSW5kZXgiLCJiYXJFbGVtIiwiY29sb3JFbGVtIiwiY29sb3JFbGVtXyIsIm1hcmtlckVsZW0iLCJtYXJrZXJFbGVtXyIsInByZXZpZXdFbGVtIiwicHJldmlld0VsZW1fIiwibGVmdENvbG9yIiwicmlnaHRDb2xvciIsImdyYWRpZW50Q29tcHMiLCJiYWNrZ3JvdW5kQ29sb3IiLCIuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvY2hlY2tib3gudHMiLCJsYWJlbEVsZW0iLCJpbnB1dEVsZW1fIiwiLi9zcmMvbWFpbi9qcy92aWV3L2lucHV0L2NvbG9yLWNvbXBvbmVudC10ZXh0cy50cyIsIkZPUk1BVFRFUiIsIm1vZGVFbGVtIiwic2VsZWN0RWxlbSIsImZyYWciLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiY3JlYXRlTW9kZVNlbGVjdEVsZW1lbnQiLCJtb2RlTWFya2VyRWxlbSIsIndyYXBwZXJFbGVtIiwiaW5wdXRFbGVtc18iLCIuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvY29sb3ItcGlja2VyLnRzIiwiX19zcHJlYWRBcnJheXMiLCJpbCIsImpsIiwib25Gb2xkYWJsZUNoYW5nZV8iLCJoc3ZFbGVtIiwic3ZFbGVtIiwic3ZQYWxldHRlVmlld18iLCJoRWxlbSIsImhQYWxldHRlVmlld18iLCJyZ2JFbGVtIiwiY29tcFRleHRzVmlld18iLCJhbHBoYVZpZXdzXyIsImFFbGVtIiwiYXBFbGVtIiwiYXRFbGVtIiwiZWxlbXMiLCIuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvY29sb3Itc3dhdGNoLXRleHQudHMiLCJzd2F0Y2hFbGVtIiwic3dhdGNoSW5wdXRWaWV3XyIsInRleHRFbGVtIiwiLi9zcmMvbWFpbi9qcy92aWV3L2lucHV0L2NvbG9yLXN3YXRjaC50cyIsInN3YXRjaEVsZW1fIiwicGlja2VyRWxlbSIsInBpY2tlclZpZXdfIiwiLi9zcmMvbWFpbi9qcy92aWV3L2lucHV0L2gtcGFsZXR0ZS50cyIsIi4vc3JjL21haW4vanMvdmlldy9pbnB1dC9saXN0LnRzIiwic3RyaW5naWZ5VmFsdWVfIiwib3B0aW9uRWxlbSIsInNlbGVjdEVsZW1fIiwiLi9zcmMvbWFpbi9qcy92aWV3L2lucHV0L3BvaW50LTJkLXBhZC10ZXh0LnRzIiwicGFkV3JhcHBlckVsZW0iLCJwYWRCdXR0b25FbGVtXyIsInBhZEVsZW0iLCJwYWRJbnB1dFZpZXdfIiwidGV4dElucHV0Vmlld18iLCIuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvcG9pbnQtMmQtcGFkLnRzIiwicGFkRWxlbV8iLCJzdmdFbGVtIiwic3ZnRWxlbV8iLCJ4QXhpc0VsZW0iLCJzZXRBdHRyaWJ1dGVOUyIsInlBeGlzRWxlbSIsImxpbmVFbGVtIiwibGluZUVsZW1fIiwiaXB5IiwiLi9zcmMvbWFpbi9qcy92aWV3L2lucHV0L3BvaW50LTJkLXRleHQudHMiLCJDT01QT05FTlRfTEFCRUxTIiwiZm9ybWF0dGVyc18iLCIuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvc2xpZGVyLXRleHQudHMiLCJzbGlkZXJFbGVtIiwic2xpZGVySW5wdXRWaWV3XyIsIi4vc3JjL21haW4vanMvdmlldy9pbnB1dC9zbGlkZXIudHMiLCJvdXRlckVsZW0iLCJvdXRlckVsZW1fIiwiaW5uZXJFbGVtIiwiaW5uZXJFbGVtXyIsIi4vc3JjL21haW4vanMvdmlldy9pbnB1dC9zdi1wYWxldHRlLnRzIiwiY29sb3JfbW9kZWxfMSIsIkNBTlZBU19SRVNPTCIsImNhbnZhc0VsZW0iLCJjYW52YXNFbGVtXyIsImhzdkNvbXBzIiwiaW1nRGF0YSIsImdldEltYWdlRGF0YSIsIml5IiwiaXgiLCJwdXRJbWFnZURhdGEiLCIuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvdGV4dC50cyIsImZvcm1hdHRlcl8iLCIuL3NyYy9tYWluL2pzL3ZpZXcvbGFiZWxlZC50cyIsImNyZWF0ZVRleHROb2RlIiwibGluZU5vZGUiLCJjcmVhdGVMYWJlbE5vZGUiLCJ2aWV3RWxlbSIsIi4vc3JjL21haW4vanMvdmlldy9tb25pdG9yL2dyYXBoLnRzIiwib25DdXJzb3JDaGFuZ2VfIiwidG9vbHRpcEVsZW0iLCJ0b29sdGlwRWxlbV8iLCJtYXhJbmRleCIsInJhd1ZhbHVlcyIsInR4IiwidHkiLCIuL3NyYy9tYWluL2pzL3ZpZXcvbW9uaXRvci9tdWx0aS1sb2cudHMiLCJ0ZXh0YXJlYUVsZW0iLCJyZWFkT25seSIsInRleHRhcmVhRWxlbV8iLCJzaG91bGRTY3JvbGwiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCIuL3NyYy9tYWluL2pzL3ZpZXcvbW9uaXRvci9zaW5nbGUtbG9nLnRzIiwiLi9zcmMvbWFpbi9qcy92aWV3L3Jvb3QudHMiLCIuL3NyYy9tYWluL2pzL3ZpZXcvc2VwYXJhdG9yLnRzIiwiaHJFbGVtIiwiLi9zcmMvbWFpbi9qcy92aWV3L3ZpZXcudHMiLCJWaWV3UG9zaXRpb25zIiwib25DaGFuZ2VfIiwibW9kZWxfIiwiZWxlbV8iLCJoaWRkZW5DbGFzcyIsInBvcyIsIi4vc3JjL21haW4vc2Fzcy9idW5kbGUuc2NzcyIsImxpbmVDb2xvciIsIm5saW5lcyIsImFuZ2xlTGVmdCIsImFuZ2xlUmlnaHQiLCJub2lzZUZyZXEiLCJub2lzZUFtcGwiLCJzbW9vdGgiLCJtYXJnaW4iLCJkcmlmdEJvdHRvbSIsInNxdWFyZWQiLCJkYXJrbW9kZSIsIm1hcmdpbkgiLCJtYXJnaW5WIiwic2lkZUxlbmd0aCIsImRyYXdMaW5lcyIsImd1aSIsInBhbmUiLCJBNCIsIkEzIiwiVVNsZXR0ZXIiLCJwb3N0Y2FyZCIsIjExciIsInBvcnRyYWl0Iiwicm5nIiwidG9CbG9iIiwiYnl0ZUxlbmd0aCIsImI2NCIsImxlbnMiLCJnZXRMZW5zIiwicGxhY2VIb2xkZXJzTGVuIiwidG9CeXRlQXJyYXkiLCJ2YWxpZExlbiIsIkFyciIsIl9ieXRlTGVuZ3RoIiwiY3VyQnl0ZSIsInJldkxvb2t1cCIsImZyb21CeXRlQXJyYXkiLCJ1aW50OCIsImV4dHJhQnl0ZXMiLCJsZW4yIiwiZW5jb2RlQ2h1bmsiLCJsb29rdXAiLCJpZWVlNzU0IiwiU2xvd0J1ZmZlciIsImFsbG9jIiwiSU5TUEVDVF9NQVhfQllURVMiLCJLX01BWF9MRU5HVEgiLCJjcmVhdGVCdWZmZXIiLCJSYW5nZUVycm9yIiwiYnVmIiwiYXJnIiwiZW5jb2RpbmdPck9mZnNldCIsInN0cmluZyIsImlzRW5jb2RpbmciLCJpc1ZpZXciLCJmcm9tQXJyYXlMaWtlIiwiaXNJbnN0YW5jZSIsImJ5dGVPZmZzZXQiLCJmcm9tQXJyYXlCdWZmZXIiLCJ2YWx1ZU9mIiwibnVtYmVySXNOYU4iLCJ0b1ByaW1pdGl2ZSIsImFzc2VydFNpemUiLCJzaXplIiwibXVzdE1hdGNoIiwibG93ZXJlZENhc2UiLCJ1dGY4VG9CeXRlcyIsImJhc2U2NFRvQnl0ZXMiLCJzd2FwIiwiYmlkaXJlY3Rpb25hbEluZGV4T2YiLCJhcnJheUluZGV4T2YiLCJsYXN0SW5kZXhPZiIsImluZGV4U2l6ZSIsImFyckxlbmd0aCIsInZhbExlbmd0aCIsInJlYWRVSW50MTZCRSIsImZvdW5kSW5kZXgiLCJmb3VuZCIsImhleFdyaXRlIiwicmVtYWluaW5nIiwic3RyTGVuIiwicGFyc2VkIiwidXRmOFdyaXRlIiwiYmxpdEJ1ZmZlciIsImFzY2lpV3JpdGUiLCJieXRlQXJyYXkiLCJhc2NpaVRvQnl0ZXMiLCJsYXRpbjFXcml0ZSIsImJhc2U2NFdyaXRlIiwidWNzMldyaXRlIiwidXRmMTZsZVRvQnl0ZXMiLCJiYXNlNjRTbGljZSIsInV0ZjhTbGljZSIsInNlY29uZEJ5dGUiLCJ0aGlyZEJ5dGUiLCJmb3VydGhCeXRlIiwidGVtcENvZGVQb2ludCIsImZpcnN0Qnl0ZSIsImNvZGVQb2ludCIsImJ5dGVzUGVyU2VxdWVuY2UiLCJjb2RlUG9pbnRzIiwiTUFYX0FSR1VNRU5UU19MRU5HVEgiLCJkZWNvZGVDb2RlUG9pbnRzQXJyYXkiLCJrTWF4TGVuZ3RoIiwiVFlQRURfQVJSQVlfU1VQUE9SVCIsImZvbyIsInR5cGVkQXJyYXlTdXBwb3J0Iiwic3BlY2llcyIsIndyaXRhYmxlIiwicG9vbFNpemUiLCJmaWxsIiwiYWxsb2NVbnNhZmVTbG93IiwiX2lzQnVmZmVyIiwiY29tcGFyZSIsInN3YXAxNiIsInN3YXAzMiIsInN3YXA2NCIsInRvTG9jYWxlU3RyaW5nIiwiaGV4U2xpY2UiLCJhc2NpaVNsaWNlIiwibGF0aW4xU2xpY2UiLCJ1dGYxNmxlU2xpY2UiLCJlcXVhbHMiLCJpbnNwZWN0IiwidHJpbSIsInRoaXNTdGFydCIsInRoaXNFbmQiLCJ0aGlzQ29weSIsInRhcmdldENvcHkiLCJ0b0pTT04iLCJ0b0hleCIsImJ5dGVzIiwiY2hlY2tPZmZzZXQiLCJleHQiLCJjaGVja0ludCIsImNoZWNrSUVFRTc1NCIsIndyaXRlRmxvYXQiLCJsaXR0bGVFbmRpYW4iLCJub0Fzc2VydCIsIndyaXRlRG91YmxlIiwibmV3QnVmIiwic3ViYXJyYXkiLCJyZWFkVUludExFIiwibXVsIiwicmVhZFVJbnRCRSIsInJlYWRVSW50OCIsInJlYWRVSW50MTZMRSIsInJlYWRVSW50MzJMRSIsInJlYWRVSW50MzJCRSIsInJlYWRJbnRMRSIsInJlYWRJbnRCRSIsInJlYWRJbnQ4IiwicmVhZEludDE2TEUiLCJyZWFkSW50MTZCRSIsInJlYWRJbnQzMkxFIiwicmVhZEludDMyQkUiLCJyZWFkRmxvYXRMRSIsInJlYWRGbG9hdEJFIiwicmVhZERvdWJsZUxFIiwicmVhZERvdWJsZUJFIiwid3JpdGVVSW50TEUiLCJ3cml0ZVVJbnRCRSIsIndyaXRlVUludDgiLCJ3cml0ZVVJbnQxNkxFIiwid3JpdGVVSW50MTZCRSIsIndyaXRlVUludDMyTEUiLCJ3cml0ZVVJbnQzMkJFIiwid3JpdGVJbnRMRSIsImxpbWl0Iiwic3ViIiwid3JpdGVJbnRCRSIsIndyaXRlSW50OCIsIndyaXRlSW50MTZMRSIsIndyaXRlSW50MTZCRSIsIndyaXRlSW50MzJMRSIsIndyaXRlSW50MzJCRSIsIndyaXRlRmxvYXRMRSIsIndyaXRlRmxvYXRCRSIsIndyaXRlRG91YmxlTEUiLCJ3cml0ZURvdWJsZUJFIiwidGFyZ2V0U3RhcnQiLCJjb3B5V2l0aGluIiwiSU5WQUxJRF9CQVNFNjRfUkUiLCJsZWFkU3Vycm9nYXRlIiwiYmFzZTY0Y2xlYW4iLCJzcmMiLCJkc3QiLCJpc0xFIiwibUxlbiIsIm5CeXRlcyIsImVMZW4iLCJlTWF4IiwiZUJpYXMiLCJuQml0cyIsIk5hTiIsInJ0IiwiTE4yIiwiQ0FOVkFTX1NLRVRDSF9ERUZBVUxUX1NUT1JBR0VfS0VZIl0sIm1hcHBpbmdzIjoiQ0FBQSxXQUFBLE9BQUEsU0FBQUEsRUFBQUMsRUFBQUMsRUFBQUMsR0FBQSxTQUFBQyxFQUFBQyxFQUFBQyxHQUFBLElBQUFKLEVBQUFHLEdBQUEsQ0FBQSxJQUFBSixFQUFBSSxHQUFBLENBQUEsSUFBQUUsRUFBQSxtQkFBQUMsU0FBQUEsUUFBQSxJQUFBRixHQUFBQyxFQUFBLE9BQUFBLEVBQUFGLEdBQUEsR0FBQSxHQUFBSSxFQUFBLE9BQUFBLEVBQUFKLEdBQUEsR0FBQSxJQUFBSyxFQUFBLElBQUFDLE1BQUEsdUJBQUFOLEVBQUEsS0FBQSxNQUFBSyxFQUFBRSxLQUFBLG1CQUFBRixFQUFBLElBQUFHLEVBQUFYLEVBQUFHLEdBQUEsQ0FBQVMsUUFBQSxJQUFBYixFQUFBSSxHQUFBLEdBQUFVLEtBQUFGLEVBQUFDLFFBQUEsU0FBQWQsR0FBQSxPQUFBSSxFQUFBSCxFQUFBSSxHQUFBLEdBQUFMLElBQUFBLElBQUFhLEVBQUFBLEVBQUFDLFFB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QTdGLEdBQUEsSUFBQXEwRSxHQUFBLEdBRUFodUUsRUFBQTZKLEVBQUE5UCxFQUFBeUYsSUFBQSxJQUFBNlUscURDbEZBZ0UsRUFBQWsyRCxrQ0FBQTczRCxPQUFBd2lCLFNBQUFuWiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCJcbm1vZHVsZS5leHBvcnRzID0gYWJzb2x1dGl6ZVxuXG4vKipcbiAqIHJlZGVmaW5lIGBwYXRoYCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzXG4gKlxuICogQHBhcmFtIHtBcnJheX0gcGF0aFxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cblxuZnVuY3Rpb24gYWJzb2x1dGl6ZShwYXRoKXtcblx0dmFyIHN0YXJ0WCA9IDBcblx0dmFyIHN0YXJ0WSA9IDBcblx0dmFyIHggPSAwXG5cdHZhciB5ID0gMFxuXG5cdHJldHVybiBwYXRoLm1hcChmdW5jdGlvbihzZWcpe1xuXHRcdHNlZyA9IHNlZy5zbGljZSgpXG5cdFx0dmFyIHR5cGUgPSBzZWdbMF1cblx0XHR2YXIgY29tbWFuZCA9IHR5cGUudG9VcHBlckNhc2UoKVxuXG5cdFx0Ly8gaXMgcmVsYXRpdmVcblx0XHRpZiAodHlwZSAhPSBjb21tYW5kKSB7XG5cdFx0XHRzZWdbMF0gPSBjb21tYW5kXG5cdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0Y2FzZSAnYSc6XG5cdFx0XHRcdFx0c2VnWzZdICs9IHhcblx0XHRcdFx0XHRzZWdbN10gKz0geVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdGNhc2UgJ3YnOlxuXHRcdFx0XHRcdHNlZ1sxXSArPSB5XG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0Y2FzZSAnaCc6XG5cdFx0XHRcdFx0c2VnWzFdICs9IHhcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAxOyBpIDwgc2VnLmxlbmd0aDspIHtcblx0XHRcdFx0XHRcdHNlZ1tpKytdICs9IHhcblx0XHRcdFx0XHRcdHNlZ1tpKytdICs9IHlcblx0XHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gdXBkYXRlIGN1cnNvciBzdGF0ZVxuXHRcdHN3aXRjaCAoY29tbWFuZCkge1xuXHRcdFx0Y2FzZSAnWic6XG5cdFx0XHRcdHggPSBzdGFydFhcblx0XHRcdFx0eSA9IHN0YXJ0WVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAnSCc6XG5cdFx0XHRcdHggPSBzZWdbMV1cblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ1YnOlxuXHRcdFx0XHR5ID0gc2VnWzFdXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdNJzpcblx0XHRcdFx0eCA9IHN0YXJ0WCA9IHNlZ1sxXVxuXHRcdFx0XHR5ID0gc3RhcnRZID0gc2VnWzJdXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR4ID0gc2VnW3NlZy5sZW5ndGggLSAyXVxuXHRcdFx0XHR5ID0gc2VnW3NlZy5sZW5ndGggLSAxXVxuXHRcdH1cblxuXHRcdHJldHVybiBzZWdcblx0fSlcbn1cbiIsImZ1bmN0aW9uIGNsb25lKHBvaW50KSB7IC8vVE9ETzogdXNlIGdsLXZlYzIgZm9yIHRoaXNcbiAgICByZXR1cm4gW3BvaW50WzBdLCBwb2ludFsxXV1cbn1cblxuZnVuY3Rpb24gdmVjMih4LCB5KSB7XG4gICAgcmV0dXJuIFt4LCB5XVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZUJlemllckJ1aWxkZXIob3B0KSB7XG4gICAgb3B0ID0gb3B0fHx7fVxuXG4gICAgdmFyIFJFQ1VSU0lPTl9MSU1JVCA9IHR5cGVvZiBvcHQucmVjdXJzaW9uID09PSAnbnVtYmVyJyA/IG9wdC5yZWN1cnNpb24gOiA4XG4gICAgdmFyIEZMVF9FUFNJTE9OID0gdHlwZW9mIG9wdC5lcHNpbG9uID09PSAnbnVtYmVyJyA/IG9wdC5lcHNpbG9uIDogMS4xOTIwOTI5MGUtN1xuICAgIHZhciBQQVRIX0RJU1RBTkNFX0VQU0lMT04gPSB0eXBlb2Ygb3B0LnBhdGhFcHNpbG9uID09PSAnbnVtYmVyJyA/IG9wdC5wYXRoRXBzaWxvbiA6IDEuMFxuXG4gICAgdmFyIGN1cnZlX2FuZ2xlX3RvbGVyYW5jZV9lcHNpbG9uID0gdHlwZW9mIG9wdC5hbmdsZUVwc2lsb24gPT09ICdudW1iZXInID8gb3B0LmFuZ2xlRXBzaWxvbiA6IDAuMDFcbiAgICB2YXIgbV9hbmdsZV90b2xlcmFuY2UgPSBvcHQuYW5nbGVUb2xlcmFuY2UgfHwgMFxuICAgIHZhciBtX2N1c3BfbGltaXQgPSBvcHQuY3VzcExpbWl0IHx8IDBcblxuICAgIHJldHVybiBmdW5jdGlvbiBiZXppZXJDdXJ2ZShzdGFydCwgYzEsIGMyLCBlbmQsIHNjYWxlLCBwb2ludHMpIHtcbiAgICAgICAgaWYgKCFwb2ludHMpXG4gICAgICAgICAgICBwb2ludHMgPSBbXVxuXG4gICAgICAgIHNjYWxlID0gdHlwZW9mIHNjYWxlID09PSAnbnVtYmVyJyA/IHNjYWxlIDogMS4wXG4gICAgICAgIHZhciBkaXN0YW5jZVRvbGVyYW5jZSA9IFBBVEhfRElTVEFOQ0VfRVBTSUxPTiAvIHNjYWxlXG4gICAgICAgIGRpc3RhbmNlVG9sZXJhbmNlICo9IGRpc3RhbmNlVG9sZXJhbmNlXG4gICAgICAgIGJlZ2luKHN0YXJ0LCBjMSwgYzIsIGVuZCwgcG9pbnRzLCBkaXN0YW5jZVRvbGVyYW5jZSlcbiAgICAgICAgcmV0dXJuIHBvaW50c1xuICAgIH1cblxuXG4gICAgLy8vLy8vIEJhc2VkIG9uOlxuICAgIC8vLy8vLyBodHRwczovL2dpdGh1Yi5jb20vcGVsc29uL2FudGlncmFpbi9ibG9iL21hc3Rlci9hZ2ctMi40L3NyYy9hZ2dfY3VydmVzLmNwcFxuXG4gICAgZnVuY3Rpb24gYmVnaW4oc3RhcnQsIGMxLCBjMiwgZW5kLCBwb2ludHMsIGRpc3RhbmNlVG9sZXJhbmNlKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKGNsb25lKHN0YXJ0KSlcbiAgICAgICAgdmFyIHgxID0gc3RhcnRbMF0sXG4gICAgICAgICAgICB5MSA9IHN0YXJ0WzFdLFxuICAgICAgICAgICAgeDIgPSBjMVswXSxcbiAgICAgICAgICAgIHkyID0gYzFbMV0sXG4gICAgICAgICAgICB4MyA9IGMyWzBdLFxuICAgICAgICAgICAgeTMgPSBjMlsxXSxcbiAgICAgICAgICAgIHg0ID0gZW5kWzBdLFxuICAgICAgICAgICAgeTQgPSBlbmRbMV1cbiAgICAgICAgcmVjdXJzaXZlKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHg0LCB5NCwgcG9pbnRzLCBkaXN0YW5jZVRvbGVyYW5jZSwgMClcbiAgICAgICAgcG9pbnRzLnB1c2goY2xvbmUoZW5kKSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWN1cnNpdmUoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0LCBwb2ludHMsIGRpc3RhbmNlVG9sZXJhbmNlLCBsZXZlbCkge1xuICAgICAgICBpZihsZXZlbCA+IFJFQ1VSU0lPTl9MSU1JVCkgXG4gICAgICAgICAgICByZXR1cm5cblxuICAgICAgICB2YXIgcGkgPSBNYXRoLlBJXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIGFsbCB0aGUgbWlkLXBvaW50cyBvZiB0aGUgbGluZSBzZWdtZW50c1xuICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgdmFyIHgxMiAgID0gKHgxICsgeDIpIC8gMlxuICAgICAgICB2YXIgeTEyICAgPSAoeTEgKyB5MikgLyAyXG4gICAgICAgIHZhciB4MjMgICA9ICh4MiArIHgzKSAvIDJcbiAgICAgICAgdmFyIHkyMyAgID0gKHkyICsgeTMpIC8gMlxuICAgICAgICB2YXIgeDM0ICAgPSAoeDMgKyB4NCkgLyAyXG4gICAgICAgIHZhciB5MzQgICA9ICh5MyArIHk0KSAvIDJcbiAgICAgICAgdmFyIHgxMjMgID0gKHgxMiArIHgyMykgLyAyXG4gICAgICAgIHZhciB5MTIzICA9ICh5MTIgKyB5MjMpIC8gMlxuICAgICAgICB2YXIgeDIzNCAgPSAoeDIzICsgeDM0KSAvIDJcbiAgICAgICAgdmFyIHkyMzQgID0gKHkyMyArIHkzNCkgLyAyXG4gICAgICAgIHZhciB4MTIzNCA9ICh4MTIzICsgeDIzNCkgLyAyXG4gICAgICAgIHZhciB5MTIzNCA9ICh5MTIzICsgeTIzNCkgLyAyXG5cbiAgICAgICAgaWYobGV2ZWwgPiAwKSB7IC8vIEVuZm9yY2Ugc3ViZGl2aXNpb24gZmlyc3QgdGltZVxuICAgICAgICAgICAgLy8gVHJ5IHRvIGFwcHJveGltYXRlIHRoZSBmdWxsIGN1YmljIGN1cnZlIGJ5IGEgc2luZ2xlIHN0cmFpZ2h0IGxpbmVcbiAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICB2YXIgZHggPSB4NC14MVxuICAgICAgICAgICAgdmFyIGR5ID0geTQteTFcblxuICAgICAgICAgICAgdmFyIGQyID0gTWF0aC5hYnMoKHgyIC0geDQpICogZHkgLSAoeTIgLSB5NCkgKiBkeClcbiAgICAgICAgICAgIHZhciBkMyA9IE1hdGguYWJzKCh4MyAtIHg0KSAqIGR5IC0gKHkzIC0geTQpICogZHgpXG5cbiAgICAgICAgICAgIHZhciBkYTEsIGRhMlxuXG4gICAgICAgICAgICBpZihkMiA+IEZMVF9FUFNJTE9OICYmIGQzID4gRkxUX0VQU0lMT04pIHtcbiAgICAgICAgICAgICAgICAvLyBSZWd1bGFyIGNhcmVcbiAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgaWYoKGQyICsgZDMpKihkMiArIGQzKSA8PSBkaXN0YW5jZVRvbGVyYW5jZSAqIChkeCpkeCArIGR5KmR5KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY3VydmF0dXJlIGRvZXNuJ3QgZXhjZWVkIHRoZSBkaXN0YW5jZVRvbGVyYW5jZSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSB0ZW5kIHRvIGZpbmlzaCBzdWJkaXZpc2lvbnMuXG4gICAgICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgICAgICBpZihtX2FuZ2xlX3RvbGVyYW5jZSA8IGN1cnZlX2FuZ2xlX3RvbGVyYW5jZV9lcHNpbG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgxMjM0LCB5MTIzNCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIEFuZ2xlICYgQ3VzcCBDb25kaXRpb25cbiAgICAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgICAgIHZhciBhMjMgPSBNYXRoLmF0YW4yKHkzIC0geTIsIHgzIC0geDIpXG4gICAgICAgICAgICAgICAgICAgIGRhMSA9IE1hdGguYWJzKGEyMyAtIE1hdGguYXRhbjIoeTIgLSB5MSwgeDIgLSB4MSkpXG4gICAgICAgICAgICAgICAgICAgIGRhMiA9IE1hdGguYWJzKE1hdGguYXRhbjIoeTQgLSB5MywgeDQgLSB4MykgLSBhMjMpXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhMSA+PSBwaSkgZGExID0gMipwaSAtIGRhMVxuICAgICAgICAgICAgICAgICAgICBpZihkYTIgPj0gcGkpIGRhMiA9IDIqcGkgLSBkYTJcblxuICAgICAgICAgICAgICAgICAgICBpZihkYTEgKyBkYTIgPCBtX2FuZ2xlX3RvbGVyYW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmluYWxseSB3ZSBjYW4gc3RvcCB0aGUgcmVjdXJzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDEyMzQsIHkxMjM0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYobV9jdXNwX2xpbWl0ICE9PSAwLjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhMSA+IG1fY3VzcF9saW1pdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDIsIHkyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGEyID4gbV9jdXNwX2xpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MywgeTMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYoZDIgPiBGTFRfRVBTSUxPTikge1xuICAgICAgICAgICAgICAgICAgICAvLyBwMSxwMyxwNCBhcmUgY29sbGluZWFyLCBwMiBpcyBjb25zaWRlcmFibGVcbiAgICAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgICAgIGlmKGQyICogZDIgPD0gZGlzdGFuY2VUb2xlcmFuY2UgKiAoZHgqZHggKyBkeSpkeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1fYW5nbGVfdG9sZXJhbmNlIDwgY3VydmVfYW5nbGVfdG9sZXJhbmNlX2Vwc2lsb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgxMjM0LCB5MTIzNCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuZ2xlIENvbmRpdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgICAgICAgICBkYTEgPSBNYXRoLmFicyhNYXRoLmF0YW4yKHkzIC0geTIsIHgzIC0geDIpIC0gTWF0aC5hdGFuMih5MiAtIHkxLCB4MiAtIHgxKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhMSA+PSBwaSkgZGExID0gMipwaSAtIGRhMVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihkYTEgPCBtX2FuZ2xlX3RvbGVyYW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDIsIHkyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgzLCB5MykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1fY3VzcF9saW1pdCAhPT0gMC4wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGExID4gbV9jdXNwX2xpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDIsIHkyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYoZDMgPiBGTFRfRVBTSUxPTikge1xuICAgICAgICAgICAgICAgICAgICAvLyBwMSxwMixwNCBhcmUgY29sbGluZWFyLCBwMyBpcyBjb25zaWRlcmFibGVcbiAgICAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgICAgIGlmKGQzICogZDMgPD0gZGlzdGFuY2VUb2xlcmFuY2UgKiAoZHgqZHggKyBkeSpkeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1fYW5nbGVfdG9sZXJhbmNlIDwgY3VydmVfYW5nbGVfdG9sZXJhbmNlX2Vwc2lsb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgxMjM0LCB5MTIzNCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuZ2xlIENvbmRpdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgICAgICAgICBkYTEgPSBNYXRoLmFicyhNYXRoLmF0YW4yKHk0IC0geTMsIHg0IC0geDMpIC0gTWF0aC5hdGFuMih5MyAtIHkyLCB4MyAtIHgyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhMSA+PSBwaSkgZGExID0gMipwaSAtIGRhMVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihkYTEgPCBtX2FuZ2xlX3RvbGVyYW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDIsIHkyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgzLCB5MykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1fY3VzcF9saW1pdCAhPT0gMC4wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGExID4gbV9jdXNwX2xpbWl0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MywgeTMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENvbGxpbmVhciBjYXNlXG4gICAgICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICAgICAgZHggPSB4MTIzNCAtICh4MSArIHg0KSAvIDJcbiAgICAgICAgICAgICAgICAgICAgZHkgPSB5MTIzNCAtICh5MSArIHk0KSAvIDJcbiAgICAgICAgICAgICAgICAgICAgaWYoZHgqZHggKyBkeSpkeSA8PSBkaXN0YW5jZVRvbGVyYW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MTIzNCwgeTEyMzQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb250aW51ZSBzdWJkaXZpc2lvblxuICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgcmVjdXJzaXZlKHgxLCB5MSwgeDEyLCB5MTIsIHgxMjMsIHkxMjMsIHgxMjM0LCB5MTIzNCwgcG9pbnRzLCBkaXN0YW5jZVRvbGVyYW5jZSwgbGV2ZWwgKyAxKSBcbiAgICAgICAgcmVjdXJzaXZlKHgxMjM0LCB5MTIzNCwgeDIzNCwgeTIzNCwgeDM0LCB5MzQsIHg0LCB5NCwgcG9pbnRzLCBkaXN0YW5jZVRvbGVyYW5jZSwgbGV2ZWwgKyAxKSBcbiAgICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZnVuY3Rpb24nKSgpIiwiXCJ1c2Ugc3RyaWN0XCJcclxuXHJcbnZhciBhYnMgPSBNYXRoLmFic1xyXG4gICwgbWluID0gTWF0aC5taW5cclxuXHJcbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIGFic29sdXRlRXJyb3IsIHJlbGF0aXZlRXJyb3IpIHtcclxuICB2YXIgZCA9IGFicyhhIC0gYilcclxuICBcclxuICBpZiAoYWJzb2x1dGVFcnJvciA9PSBudWxsKSBhYnNvbHV0ZUVycm9yID0gYWxtb3N0RXF1YWwuREJMX0VQU0lMT047XHJcbiAgaWYgKHJlbGF0aXZlRXJyb3IgPT0gbnVsbCkgcmVsYXRpdmVFcnJvciA9IGFic29sdXRlRXJyb3I7XHJcbiAgXHJcbiAgaWYoZCA8PSBhYnNvbHV0ZUVycm9yKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICBpZihkIDw9IHJlbGF0aXZlRXJyb3IgKiBtaW4oYWJzKGEpLCBhYnMoYikpKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICByZXR1cm4gYSA9PT0gYlxyXG59XHJcblxyXG5hbG1vc3RFcXVhbC5GTFRfRVBTSUxPTiA9IDEuMTkyMDkyOTBlLTdcclxuYWxtb3N0RXF1YWwuREJMX0VQU0lMT04gPSAyLjIyMDQ0NjA0OTI1MDMxMzFlLTE2XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGFsbW9zdEVxdWFsXHJcbiIsInZhciBzdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gYW5BcnJheVxuXG5mdW5jdGlvbiBhbkFycmF5KGFycikge1xuICByZXR1cm4gKFxuICAgICAgIGFyci5CWVRFU19QRVJfRUxFTUVOVFxuICAgICYmIHN0ci5jYWxsKGFyci5idWZmZXIpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nXG4gICAgfHwgQXJyYXkuaXNBcnJheShhcnIpXG4gIClcbn1cbiIsInZhciBpc0FycmF5ID0gcmVxdWlyZSgnYW4tYXJyYXknKVxudmFyIGFsbW9zdCA9IHJlcXVpcmUoJ2FsbW9zdC1lcXVhbCcpXG5cbi8vZGV0ZXJtaW5lcyB3aGV0aGVyIHR3byBhcnJheXMgYXJlIGFsbW9zdCBlcXVhbFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihhLCBiLCBhYnNvbHV0ZVRvbGVyYW5jZSwgcmVsYXRpdmVUb2xlcmFuY2UpIHtcbiAgICAvL3dpbGwgYWNjZXB0IHR5cGVkIGFycmF5c1xuICAgIGlmICghYSB8fCAhYiB8fCAhaXNBcnJheShhKSB8fCAhaXNBcnJheShiKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHR5cGVvZiBhYnNvbHV0ZVRvbGVyYW5jZSAhPT0gJ251bWJlcicpXG4gICAgICAgIGFic29sdXRlVG9sZXJhbmNlID0gYWxtb3N0LkZMVF9FUFNJTE9OXG4gICAgaWYgKHR5cGVvZiByZWxhdGl2ZVRvbGVyYW5jZSAhPT0gJ251bWJlcicpXG4gICAgICAgIHJlbGF0aXZlVG9sZXJhbmNlID0gYWJzb2x1dGVUb2xlcmFuY2VcblxuICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhKS5ldmVyeShmdW5jdGlvbihhMCwgaSkge1xuICAgICAgICB2YXIgYjAgPSBiW2ldXG4gICAgICAgIHJldHVybiBhMCA9PT0gYjAgfHwgYWxtb3N0KGEwLCBiMCwgYWJzb2x1dGVUb2xlcmFuY2UsIHJlbGF0aXZlVG9sZXJhbmNlKVxuICAgIH0pXG59IiwiXCJ1c2Ugc3RyaWN0XCJcblxudmFyIGFicyA9IE1hdGguYWJzXG4gICwgbWluID0gTWF0aC5taW5cblxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgYWJzb2x1dGVFcnJvciwgcmVsYXRpdmVFcnJvcikge1xuICB2YXIgZCA9IGFicyhhIC0gYilcbiAgaWYoZCA8PSBhYnNvbHV0ZUVycm9yKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZihkIDw9IHJlbGF0aXZlRXJyb3IgKiBtaW4oYWJzKGEpLCBhYnMoYikpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gYSA9PT0gYlxufVxuXG5hbG1vc3RFcXVhbC5GTFRfRVBTSUxPTiA9IDEuMTkyMDkyOTBlLTdcbmFsbW9zdEVxdWFsLkRCTF9FUFNJTE9OID0gMi4yMjA0NDYwNDkyNTAzMTMxZS0xNlxuXG5tb2R1bGUuZXhwb3J0cyA9IGFsbW9zdEVxdWFsXG4iLCJ2YXIgbGluZWNsaXAgPSByZXF1aXJlKCdsaW5lY2xpcCcpO1xudmFyIGFsbW9zdEVxdWFsID0gcmVxdWlyZSgnYWxtb3N0LWVxdWFsJyk7XG52YXIgYXJyYXlBbG1vc3RFcXVhbCA9IHJlcXVpcmUoJ2FycmF5LWFsbW9zdC1lcXVhbCcpO1xudmFyIGNsb25lID0gcmVxdWlyZSgnY2xvbmUnKTtcbnZhciBzcXVhcmVkRGlzdGFuY2UgPSByZXF1aXJlKCcuL2xpYi92ZWMyJykuc3F1YXJlZERpc3RhbmNlO1xuXG5tb2R1bGUuZXhwb3J0cy5hcmVQb2ludHNDb2xsaW5lYXIgPSBmdW5jdGlvbiAocG9pbnQwLCBwb2ludDEsIHBvaW50Mikge1xuICB2YXIgeDAgPSBwb2ludDBbMF07XG4gIHZhciB5MCA9IHBvaW50MFsxXTtcbiAgdmFyIHgxID0gcG9pbnQxWzBdO1xuICB2YXIgeTEgPSBwb2ludDFbMV07XG4gIHZhciB4MiA9IHBvaW50MlswXTtcbiAgdmFyIHkyID0gcG9pbnQyWzFdO1xuICByZXR1cm4gYWxtb3N0RXF1YWwoKHkwIC0geTEpICogKHgwIC0geDIpLCAoeTAgLSB5MikgKiAoeDAgLSB4MSkpO1xufTtcblxubW9kdWxlLmV4cG9ydHMucmVtb3ZlRHVwbGljYXRlUG9pbnRzID0gZnVuY3Rpb24gKHBhdGgpIHtcbiAgdmFyIG5ld1BhdGggPSBbXTtcbiAgdmFyIGxhc3RQb2ludDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGN1clBvaW50ID0gcGF0aFtpXTtcbiAgICBpZiAoIWxhc3RQb2ludCB8fCAhYXJyYXlBbG1vc3RFcXVhbChsYXN0UG9pbnQsIGN1clBvaW50KSkge1xuICAgICAgbmV3UGF0aC5wdXNoKGN1clBvaW50KTtcbiAgICAgIGxhc3RQb2ludCA9IGN1clBvaW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2xvbmUobmV3UGF0aCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5yZW1vdmVDb2xsaW5lYXJQb2ludHMgPSBmdW5jdGlvbiAocGF0aCkge1xuICB2YXIgbmV3UGF0aCA9IFtdO1xuICB2YXIgcmVtYWluaW5nUG9pbnRzID0gY2xvbmUocGF0aCk7XG4gIHdoaWxlIChyZW1haW5pbmdQb2ludHMubGVuZ3RoID49IDMpIHtcbiAgICB2YXIgcDAgPSByZW1haW5pbmdQb2ludHNbMF07XG4gICAgdmFyIHAxID0gcmVtYWluaW5nUG9pbnRzWzFdO1xuICAgIHZhciBwMiA9IHJlbWFpbmluZ1BvaW50c1syXTtcbiAgICB2YXIgY29sbGluZWFyID0gbW9kdWxlLmV4cG9ydHMuYXJlUG9pbnRzQ29sbGluZWFyKHAwLCBwMSwgcDIpO1xuICAgIC8vIG9uZSBtb3JlIGNoZWNrIGlzIHRvIGVuc3VyZSB0aGF0IHBvaW50cyBhcmUgaW4gYSBsaW5lOlxuICAgIC8vIEEtPkItPkNcbiAgICAvLyBub3QgQS0+Qy0+QiBvciBzb21lIHZhcmlhbnRcbiAgICBpZiAoY29sbGluZWFyKSB7XG4gICAgICB2YXIgZGlzdEFCID0gc3F1YXJlZERpc3RhbmNlKHAwLCBwMSk7XG4gICAgICB2YXIgZGlzdEFDID0gc3F1YXJlZERpc3RhbmNlKHAwLCBwMik7XG4gICAgICBpZiAoZGlzdEFCID4gZGlzdEFDKSBjb2xsaW5lYXIgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGNvbGxpbmVhcikge1xuICAgICAgLy8gdGhlIGZpcnN0IDMgcG9pbnRzIGFyZSBjb2xsaW5lYXJcbiAgICAgIC8vIHJlbW92ZSB0aGUgc2Vjb25kIHBvaW50IGFzIGl0IGlzbid0IG5lZWRlZFxuICAgICAgcmVtYWluaW5nUG9pbnRzLnNwbGljZSgxLCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhlIDMgcG9pbnRzIGFyZSBub3QgY29sbGluZWFyXG4gICAgICAvLyBhZGQgdGhlIGZpcnN0IG9uZSBhcyB0aGUgb3RoZXJzIG1heSBzdGlsbCBiZSBjb2xsaW5lYXJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTsgaSsrKSB7XG4gICAgICAgIG5ld1BhdGgucHVzaChyZW1haW5pbmdQb2ludHMuc2hpZnQoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGFkZCBhbnkgcmVtYWluaW5nIHBvaW50c1xuICB3aGlsZSAocmVtYWluaW5nUG9pbnRzLmxlbmd0aCkge1xuICAgIG5ld1BhdGgucHVzaChyZW1haW5pbmdQb2ludHMuc2hpZnQoKSk7XG4gIH1cbiAgcmV0dXJuIG5ld1BhdGg7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5jbGlwU2VnbWVudFRvQ2lyY2xlID0gcmVxdWlyZSgnLi9saWIvY2xpcC9jbGlwLXNlZ21lbnQtdG8tY2lyY2xlJyk7XG5tb2R1bGUuZXhwb3J0cy5jbGlwTGluZVRvQ2lyY2xlID0gcmVxdWlyZSgnLi9saWIvY2xpcC9jbGlwLWxpbmUtdG8tY2lyY2xlJyk7XG5cbm1vZHVsZS5leHBvcnRzLmNsaXBQb2x5bGluZXNUb0JveCA9IGZ1bmN0aW9uIChwb2x5bGluZXMsIGJib3gsIGJvcmRlciwgY2xvc2VMaW5lcykge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYmJveCkgfHwgKGJib3gubGVuZ3RoICE9PSAyICYmIGJib3gubGVuZ3RoICE9PSA0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYm94IHRvIGVpdGhlciBiZSBmb3JtYXQgWyBtaW5Qb2ludCwgbWF4UG9pbnQgXSBvciBbIG1pblgsIG1pblksIG1heFgsIG1heFkgXScpO1xuICB9XG4gIC8vIEV4cGFuZCBuZXN0ZWQgZm9ybWF0IHRvIGZsYXQgYm91bmRzXG4gIGlmIChiYm94Lmxlbmd0aCA9PT0gMikge1xuICAgIHZhciBtaW4gPSBiYm94WzBdO1xuICAgIHZhciBtYXggPSBiYm94WzFdO1xuICAgIGJib3ggPSBbIG1pblswXSwgbWluWzFdLCBtYXhbMF0sIG1heFsxXSBdO1xuICB9XG4gIGNsb3NlTGluZXMgPSBjbG9zZUxpbmVzICE9PSBmYWxzZTtcbiAgYm9yZGVyID0gQm9vbGVhbihib3JkZXIpO1xuXG4gIGlmIChib3JkZXIpIHtcbiAgICByZXR1cm4gcG9seWxpbmVzLm1hcChmdW5jdGlvbiAobGluZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IGxpbmVjbGlwLnBvbHlnb24obGluZSwgYmJveCk7XG4gICAgICBpZiAoY2xvc2VMaW5lcyAmJiByZXN1bHQubGVuZ3RoID4gMikge1xuICAgICAgICByZXN1bHQucHVzaChyZXN1bHRbMF0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGxpbmVzKSB7XG4gICAgICByZXR1cm4gbGluZXMubGVuZ3RoID4gMDtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcG9seWxpbmVzLm1hcChmdW5jdGlvbiAobGluZSkge1xuICAgICAgcmV0dXJuIGxpbmVjbGlwLnBvbHlsaW5lKGxpbmUsIGJib3gpO1xuICAgIH0pLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEuY29uY2F0KGIpO1xuICAgIH0sIFtdKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuY3JlYXRlSGF0Y2hMaW5lcyA9IGNyZWF0ZUhhdGNoTGluZXM7XG5mdW5jdGlvbiBjcmVhdGVIYXRjaExpbmVzIChib3VuZHMsIGFuZ2xlLCBzcGFjaW5nLCBvdXQpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGJvdW5kcykgfHwgKGJvdW5kcy5sZW5ndGggIT09IDIgJiYgYm91bmRzLmxlbmd0aCAhPT0gNCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGJveCB0byBlaXRoZXIgYmUgZm9ybWF0IFsgbWluUG9pbnQsIG1heFBvaW50IF0gb3IgWyBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZIF0nKTtcbiAgfVxuICAvLyBFeHBhbmQgbmVzdGVkIGZvcm1hdCB0byBmbGF0IGJvdW5kc1xuICBpZiAoYm91bmRzLmxlbmd0aCA9PT0gMikge1xuICAgIHZhciBtaW4gPSBib3VuZHNbMF07XG4gICAgdmFyIG1heCA9IGJvdW5kc1sxXTtcbiAgICBib3VuZHMgPSBbIG1pblswXSwgbWluWzFdLCBtYXhbMF0sIG1heFsxXSBdO1xuICB9XG5cbiAgaWYgKGFuZ2xlID09IG51bGwpIGFuZ2xlID0gLU1hdGguUEkgLyA0O1xuICBpZiAoc3BhY2luZyA9PSBudWxsKSBzcGFjaW5nID0gMC41O1xuICBpZiAob3V0ID09IG51bGwpIG91dCA9IFtdO1xuXG4gIC8vIFJlZmVyZW5jZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2V2aWwtbWFkL0VnZ0JvdC9ibG9iL21hc3Rlci9pbmtzY2FwZV9kcml2ZXIvZWdnYm90X2hhdGNoLnB5XG4gIHNwYWNpbmcgPSBNYXRoLmFicyhzcGFjaW5nKTtcbiAgaWYgKHNwYWNpbmcgPT09IDApIHRocm93IG5ldyBFcnJvcignY2Fubm90IHVzZSBhIHNwYWNpbmcgb2YgemVybyBhcyBpdCB3aWxsIHJ1biBhbiBpbmZpbml0ZSBsb29wIScpO1xuXG4gIHZhciB4bWluID0gYm91bmRzWzBdO1xuICB2YXIgeW1pbiA9IGJvdW5kc1sxXTtcbiAgdmFyIHhtYXggPSBib3VuZHNbMl07XG4gIHZhciB5bWF4ID0gYm91bmRzWzNdO1xuXG4gIHZhciB3ID0geG1heCAtIHhtaW47XG4gIHZhciBoID0geW1heCAtIHltaW47XG4gIGlmICh3ID09PSAwIHx8IGggPT09IDApIHJldHVybiBvdXQ7XG4gIHZhciByID0gTWF0aC5zcXJ0KHcgKiB3ICsgaCAqIGgpIC8gMjtcbiAgdmFyIHJvdEFuZ2xlID0gTWF0aC5QSSAvIDIgLSBhbmdsZTtcbiAgdmFyIGNhID0gTWF0aC5jb3Mocm90QW5nbGUpO1xuICB2YXIgc2EgPSBNYXRoLnNpbihyb3RBbmdsZSk7XG4gIHZhciBjeCA9IHhtaW4gKyAodyAvIDIpO1xuICB2YXIgY3kgPSB5bWluICsgKGggLyAyKTtcbiAgdmFyIGkgPSAtcjtcbiAgd2hpbGUgKGkgPD0gcikge1xuICAgIC8vIExpbmUgc3RhcnRzIGF0IChpLCAtcikgYW5kIGdvZXMgdG8gKGksICtyKVxuICAgIHZhciB4MSA9IGN4ICsgKGkgKiBjYSkgKyAociAqIHNhKTsgLy8gIGkgKiBjYSAtICgtcikgKiBzYVxuICAgIHZhciB5MSA9IGN5ICsgKGkgKiBzYSkgLSAociAqIGNhKTsgLy8gIGkgKiBzYSArICgtcikgKiBjYVxuICAgIHZhciB4MiA9IGN4ICsgKGkgKiBjYSkgLSAociAqIHNhKTsgLy8gIGkgKiBjYSAtICgrcikgKiBzYVxuICAgIHZhciB5MiA9IGN5ICsgKGkgKiBzYSkgKyAociAqIGNhKTsgLy8gIGkgKiBzYSArICgrcikgKiBjYVxuICAgIGkgKz0gc3BhY2luZztcbiAgICAvLyBSZW1vdmUgYW55IHBvdGVudGlhbCBoYXRjaCBsaW5lcyB3aGljaCBhcmUgZW50aXJlbHlcbiAgICAvLyBvdXRzaWRlIG9mIHRoZSBib3VuZGluZyBib3hcbiAgICBpZiAoKHgxIDwgeG1pbiAmJiB4MiA8IHhtaW4pIHx8ICh4MSA+IHhtYXggJiYgeDIgPiB4bWF4KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICgoeTEgPCB5bWluICYmIHkyIDwgeW1pbikgfHwgKHkxID4geW1heCAmJiB5MiA+IHltYXgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgb3V0LnB1c2goWyBbIHgxLCB5MSBdLCBbIHgyLCB5MiBdIF0pO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzLmdldEJvdW5kcyA9IGZ1bmN0aW9uIGdldEJvdW5kcyAocG9pbnRzKSB7XG4gIHZhciBuID0gcG9pbnRzLmxlbmd0aDtcbiAgaWYgKG4gPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHBvaW50cyB0byBiZSBhIG5vbi1lbXB0eSBhcnJheScpO1xuICB9XG4gIHZhciBkID0gcG9pbnRzWzBdLmxlbmd0aDtcbiAgdmFyIGxvID0gcG9pbnRzWzBdLnNsaWNlKCk7XG4gIHZhciBoaSA9IHBvaW50c1swXS5zbGljZSgpO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IG47ICsraSkge1xuICAgIHZhciBwID0gcG9pbnRzW2ldO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgZDsgKytqKSB7XG4gICAgICB2YXIgeCA9IHBbal07XG4gICAgICBsb1tqXSA9IE1hdGgubWluKGxvW2pdLCB4KTtcbiAgICAgIGhpW2pdID0gTWF0aC5tYXgoaGlbal0sIHgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gWyBsbywgaGkgXTtcbn07XG4iLCJ2YXIgYWxtb3N0RXF1YWwgPSByZXF1aXJlKCdhbG1vc3QtZXF1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcnNlY3RMaW5lQ2lyY2xlO1xuZnVuY3Rpb24gaW50ZXJzZWN0TGluZUNpcmNsZSAocDAsIHAxLCBjaXJjbGUsIGNpcmNsZVJhZGl1cywgaGl0cykge1xuICBpZiAoaGl0cyA9PSBudWxsKSBoaXRzID0gW107XG4gIHZhciBhID0gc3FyKHAxWzBdIC0gcDBbMF0pICsgc3FyKHAxWzFdIC0gcDBbMV0pO1xuICB2YXIgYiA9IDIuMCAqIChcbiAgICAocDFbMF0gLSBwMFswXSkgKiAocDBbMF0gLSBjaXJjbGVbMF0pICtcbiAgICAocDFbMV0gLSBwMFsxXSkgKiAocDBbMV0gLSBjaXJjbGVbMV0pXG4gICk7XG5cbiAgdmFyIGMgPSBzcXIoY2lyY2xlWzBdKSArIHNxcihjaXJjbGVbMV0pICsgc3FyKHAwWzBdKSArXG4gICAgc3FyKHAwWzFdKSAtIDIgKiAoY2lyY2xlWzBdICogcDBbMF0gKyBjaXJjbGVbMV0gKiBwMFsxXSkgLVxuICAgIHNxcihjaXJjbGVSYWRpdXMpO1xuXG4gIHZhciBkZXQgPSBiICogYiAtIDQuMCAqIGEgKiBjO1xuICB2YXIgZGVsdGE7XG4gIGlmIChkZXQgPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKGFsbW9zdEVxdWFsKGRldCwgMC4wKSkge1xuICAgIGRlbHRhID0gLWIgLyAoMi4wICogYSk7XG4gICAgaGl0cy5wdXNoKFtcbiAgICAgIHAwWzBdICsgZGVsdGEgKiAocDFbMF0gLSBwMFswXSksXG4gICAgICBwMFsxXSArIGRlbHRhICogKHAxWzFdIC0gcDBbMV0pXG4gICAgXSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoZGV0ID4gMC4wKSB7XG4gICAgdmFyIHNxcnREZXQgPSBNYXRoLnNxcnQoZGV0KTtcbiAgICBkZWx0YSA9ICgtYiArIHNxcnREZXQpIC8gKDIuMCAqIGEpO1xuXG4gICAgaGl0cy5wdXNoKFtcbiAgICAgIHAwWzBdICsgZGVsdGEgKiAocDFbMF0gLSBwMFswXSksXG4gICAgICBwMFsxXSArIGRlbHRhICogKHAxWzFdIC0gcDBbMV0pXG4gICAgXSk7XG5cbiAgICBkZWx0YSA9ICgtYiAtIHNxcnREZXQpIC8gKDIuMCAqIGEpO1xuICAgIGhpdHMucHVzaChbXG4gICAgICBwMFswXSArIGRlbHRhICogKHAxWzBdIC0gcDBbMF0pLFxuICAgICAgcDBbMV0gKyBkZWx0YSAqIChwMVsxXSAtIHAwWzFdKVxuICAgIF0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBzcXIgKGEpIHtcbiAgcmV0dXJuIGEgKiBhO1xufVxuIiwidmFyIGFsbW9zdEVxdWFsID0gcmVxdWlyZSgnYWxtb3N0LWVxdWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJzZWN0U2VnbWVudENpcmNsZTtcbmZ1bmN0aW9uIGludGVyc2VjdFNlZ21lbnRDaXJjbGUgKHAwLCBwMSwgY2lyY2xlLCBjaXJjbGVSYWRpdXMsIGhpdHMpIHtcbiAgcmV0dXJuIGludGVyc2VjdChwMFswXSwgcDBbMV0sIHAxWzBdLCBwMVsxXSwgY2lyY2xlWzBdLCBjaXJjbGVbMV0sIGNpcmNsZVJhZGl1cywgaGl0cyk7XG59XG5cbmZ1bmN0aW9uIGludGVyc2VjdCAoeDEsIHkxLCB4MiwgeTIsIGN4LCBjeSwgcmFkaXVzLCBoaXRzKSB7XG4gIGlmIChoaXRzID09IG51bGwpIGhpdHMgPSBbXTtcbiAgdmFyIHAxSW5DaXJjbGUgPSBwb2ludEluQ2lyY2xlKHgxLCB5MSwgY3gsIGN5LCByYWRpdXMpO1xuICB2YXIgcDJJbkNpcmNsZSA9IHBvaW50SW5DaXJjbGUoeDIsIHkyLCBjeCwgY3ksIHJhZGl1cyk7XG5cbiAgaWYgKHAxSW5DaXJjbGUgJiYgcDJJbkNpcmNsZSkge1xuICAgIGhpdHMucHVzaChbIHgxLCB5MSBdKTtcbiAgICBoaXRzLnB1c2goWyB4MiwgeTIgXSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgaCwgYSwgY2xvc2VzdFBvaW50LCBweCwgcHk7XG4gIGlmIChwMUluQ2lyY2xlIHx8IHAySW5DaXJjbGUpIHtcbiAgICBjbG9zZXN0UG9pbnQgPSBjbG9zZXN0UG9pbnRPbkxpbmVGcm9tUG9pbnQoeDEsIHkxLCB4MiwgeTIsIGN4LCBjeSk7XG4gICAgcHggPSBjbG9zZXN0UG9pbnRbMF07XG4gICAgcHkgPSBjbG9zZXN0UG9pbnRbMV07XG4gICAgaCA9IGRpc3RhbmNlKHB4LCBweSwgY3gsIGN5KTtcbiAgICBhID0gTWF0aC5zcXJ0KChyYWRpdXMgKiByYWRpdXMpIC0gKGggKiBoKSk7XG4gICAgdmFyIGhpdEEgPSBwMUluQ2lyY2xlID8gWyB4MSwgeTEgXSA6IFsgeDIsIHkyIF07XG4gICAgdmFyIGhpdEIgPSBwMUluQ2lyY2xlID8gcHJvamVjdFBvaW50KHB4LCBweSwgeDIsIHkyLCBhKSA6IHByb2plY3RQb2ludChweCwgcHksIHgxLCB5MSwgYSk7XG4gICAgaWYgKGFsbW9zdEVxdWFsKGhpdEFbMF0sIGhpdEJbMF0pICYmIGFsbW9zdEVxdWFsKGhpdEFbMV0sIGhpdEJbMV0pKSB7XG4gICAgICAvLyBPbmUgcG9pbnQgaW4gdGhlIHNlZ21lbnQgbGllcyBvbiB0aGUgY2lyY2xlLCB0aGUgb3RoZXIgaXMgb3V0c2lkZVxuICAgICAgaGl0cy5wdXNoKGhpdEEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGhpdHMucHVzaChoaXRBKTtcbiAgICBoaXRzLnB1c2goaGl0Qik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjbG9zZXN0UG9pbnQgPSBjbG9zZXN0UG9pbnRPblNlZ21lbnRGcm9tUG9pbnQoeDEsIHkxLCB4MiwgeTIsIGN4LCBjeSk7XG4gIHB4ID0gY2xvc2VzdFBvaW50WzBdO1xuICBweSA9IGNsb3Nlc3RQb2ludFsxXTtcblxuICBpZiAoKGFsbW9zdEVxdWFsKHgxLCBweCkgJiYgYWxtb3N0RXF1YWwoeTEsIHB5KSkgfHxcbiAgICAgIChhbG1vc3RFcXVhbCh4MiwgcHgpICYmIGFsbW9zdEVxdWFsKHkyLCBweSkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIGggPSBkaXN0YW5jZShweCwgcHksIGN4LCBjeSk7XG4gICAgaWYgKGggPiByYWRpdXMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKGFsbW9zdEVxdWFsKGgsIHJhZGl1cykpIHtcbiAgICAgIGhpdHMucHVzaChbIHB4LCBweSBdKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoYWxtb3N0RXF1YWwoaCwgMC4wKSkge1xuICAgICAgaGl0cy5wdXNoKHByb2plY3RQb2ludChjeCwgY3ksIHgxLCB5MSwgcmFkaXVzKSk7XG4gICAgICBoaXRzLnB1c2gocHJvamVjdFBvaW50KGN4LCBjeSwgeDIsIHkyLCByYWRpdXMpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBhID0gTWF0aC5zcXJ0KChyYWRpdXMgKiByYWRpdXMpIC0gKGggKiBoKSk7XG4gICAgICBoaXRzLnB1c2gocHJvamVjdFBvaW50KHB4LCBweSwgeDEsIHkxLCBhKSk7XG4gICAgICBoaXRzLnB1c2gocHJvamVjdFBvaW50KHB4LCBweSwgeDIsIHkyLCBhKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGF5RGlzdGFuY2UgKHgxLCB5MSwgeDIsIHkyKSB7XG4gIHZhciBkeCA9ICh4MiAtIHgxKTtcbiAgdmFyIGR5ID0gKHkyIC0geTEpO1xuICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7XG59XG5cbmZ1bmN0aW9uIHBvaW50SW5DaXJjbGUgKHB4LCBweSwgY3gsIGN5LCByYWRpdXMpIHtcbiAgcmV0dXJuIGxheURpc3RhbmNlKHB4LCBweSwgY3gsIGN5KSA8PSAocmFkaXVzICogcmFkaXVzKTtcbn1cblxuZnVuY3Rpb24gZGlzdGFuY2UgKHgxLCB5MSwgeDIsIHkyKSB7XG4gIHZhciBkeCA9ICh4MSAtIHgyKTtcbiAgdmFyIGR5ID0gKHkxIC0geTIpO1xuICByZXR1cm4gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbn1cblxuZnVuY3Rpb24gcHJvamVjdFBvaW50IChzcmN4LCBzcmN5LCBkZXN0eCwgZGVzdHksIGRpc3QpIHtcbiAgdmFyIHQgPSBkaXN0IC8gZGlzdGFuY2Uoc3JjeCwgc3JjeSwgZGVzdHgsIGRlc3R5KTtcbiAgcmV0dXJuIFtcbiAgICBzcmN4ICsgdCAqIChkZXN0eCAtIHNyY3gpLFxuICAgIHNyY3kgKyB0ICogKGRlc3R5IC0gc3JjeSlcbiAgXTtcbn1cblxuZnVuY3Rpb24gY2xvc2VzdFBvaW50T25MaW5lRnJvbVBvaW50ICh4MSwgeTEsIHgyLCB5MiwgcHgsIHB5KSB7XG4gIHZhciB2eCA9IHgyIC0geDE7XG4gIHZhciB2eSA9IHkyIC0geTE7XG4gIHZhciB3eCA9IHB4IC0geDE7XG4gIHZhciB3eSA9IHB5IC0geTE7XG4gIHZhciBjMSA9IHZ4ICogd3ggKyB2eSAqIHd5O1xuICB2YXIgYzIgPSB2eCAqIHZ4ICsgdnkgKiB2eTtcbiAgdmFyIHJhdGlvID0gYzEgLyBjMjtcbiAgcmV0dXJuIFtcbiAgICB4MSArIHJhdGlvICogdngsXG4gICAgeTEgKyByYXRpbyAqIHZ5XG4gIF07XG59XG5cbmZ1bmN0aW9uIGNsb3Nlc3RQb2ludE9uU2VnbWVudEZyb21Qb2ludCAoeDEsIHkxLCB4MiwgeTIsIHB4LCBweSkge1xuICB2YXIgdnggPSB4MiAtIHgxO1xuICB2YXIgdnkgPSB5MiAtIHkxO1xuICB2YXIgd3ggPSBweCAtIHgxO1xuICB2YXIgd3kgPSBweSAtIHkxO1xuXG4gIHZhciBjMSA9IHZ4ICogd3ggKyB2eSAqIHd5O1xuXG4gIGlmIChjMSA8PSAwLjApIHtcbiAgICByZXR1cm4gWyB4MSwgeTEgXTtcbiAgfVxuXG4gIHZhciBjMiA9IHZ4ICogdnggKyB2eSAqIHZ5O1xuICBpZiAoYzIgPD0gYzEpIHtcbiAgICByZXR1cm4gWyB4MiwgeTIgXTtcbiAgfVxuXG4gIHZhciByYXRpbyA9IGMxIC8gYzI7XG4gIHJldHVybiBbXG4gICAgeDEgKyByYXRpbyAqIHZ4LFxuICAgIHkxICsgcmF0aW8gKiB2eVxuICBdO1xufVxuIiwiLy8gSSBiZWxpZXZlIHRoaXMgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBUYXlsb3IgQmFsZHdpbiAoQHRheWxvcmJhbGR3aW4gLyBAcm9seWF0bWF4KVxuLy8gSWYgdGhhdCBpcyBtaXNjcmVkaXRlZCBwbGVhc2Ugb3BlbiBhbiBpc3N1ZS5cblxudmFyIGNsb25lID0gcmVxdWlyZSgnY2xvbmUnKTtcbnZhciBzcXVhcmVkRGlzdGFuY2UgPSByZXF1aXJlKCcuL3ZlYzInKS5zcXVhcmVkRGlzdGFuY2U7XG5cbm1vZHVsZS5leHBvcnRzLnNvcnQgPSBmdW5jdGlvbiBzb3J0IChwYXRocykge1xuICBwYXRocyA9IGNsb25lKHBhdGhzKTtcblxuICBpZiAoIXBhdGhzLmxlbmd0aCkgcmV0dXJuIHBhdGhzO1xuXG4gIHZhciBuZXdQYXRocyA9IFtdO1xuICBuZXdQYXRocy5wdXNoKHBhdGhzWzBdKTtcblxuICBwYXRocyA9IHBhdGhzLnNsaWNlKDEpO1xuXG4gIHdoaWxlIChwYXRocy5sZW5ndGgpIHtcbiAgICB2YXIgbGFzdFBhdGggPSBuZXdQYXRoc1tuZXdQYXRocy5sZW5ndGggLSAxXTtcbiAgICB2YXIgY3VyUHQgPSBsYXN0UGF0aFtsYXN0UGF0aC5sZW5ndGggLSAxXTtcbiAgICB2YXIgcmVzdWx0ID0gcGF0aHMucmVkdWNlKGZ1bmN0aW9uIChjbG9zZXN0LCBwYXRoLCBpKSB7XG4gICAgICB2YXIgZmlyc3RQdCA9IHBhdGhbMF07XG4gICAgICB2YXIgbGFzdFB0ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAgICAgdmFyIGRpc3RhbmNlVG9GaXJzdCA9IHNxdWFyZWREaXN0YW5jZShjdXJQdCwgZmlyc3RQdCk7XG4gICAgICB2YXIgZGlzdGFuY2VUb0xhc3QgPSBzcXVhcmVkRGlzdGFuY2UoY3VyUHQsIGxhc3RQdCk7XG4gICAgICBpZiAoIWNsb3Nlc3QpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZHg6IGksXG4gICAgICAgICAgZGlzdGFuY2U6IE1hdGgubWluKGRpc3RhbmNlVG9GaXJzdCwgZGlzdGFuY2VUb0xhc3QpLFxuICAgICAgICAgIHJldmVyc2U6IGRpc3RhbmNlVG9MYXN0IDwgZGlzdGFuY2VUb0ZpcnN0XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoZGlzdGFuY2VUb0ZpcnN0IDwgY2xvc2VzdC5kaXN0YW5jZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkeDogaSxcbiAgICAgICAgICBkaXN0YW5jZTogZGlzdGFuY2VUb0ZpcnN0LFxuICAgICAgICAgIHJldmVyc2U6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoZGlzdGFuY2VUb0xhc3QgPCBjbG9zZXN0LmRpc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWR4OiBpLFxuICAgICAgICAgIGRpc3RhbmNlOiBkaXN0YW5jZVRvTGFzdCxcbiAgICAgICAgICByZXZlcnNlOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xvc2VzdDtcbiAgICB9LCBudWxsKTtcbiAgICB2YXIgaWR4ID0gcmVzdWx0LmlkeDtcbiAgICB2YXIgcmV2ZXJzZSA9IHJlc3VsdC5yZXZlcnNlO1xuICAgIHZhciBjbG9zZXN0UGF0aCA9IHBhdGhzLnNwbGljZShpZHgsIDEpWzBdLnNsaWNlKCk7XG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgIGNsb3Nlc3RQYXRoLnJldmVyc2UoKTtcbiAgICB9XG4gICAgbmV3UGF0aHMucHVzaChjbG9zZXN0UGF0aCk7XG4gIH1cbiAgcmV0dXJuIG5ld1BhdGhzO1xufTtcblxubW9kdWxlLmV4cG9ydHMubWVyZ2UgPSBmdW5jdGlvbiBtZXJnZSAocGF0aHMsIG1lcmdlVGhyZWhzb2xkKSB7XG4gIG1lcmdlVGhyZWhzb2xkID0gbWVyZ2VUaHJlaHNvbGQgIT0gbnVsbCA/IG1lcmdlVGhyZWhzb2xkIDogMC4wNTtcblxuICB2YXIgbWVyZ2VUaHJlaHNvbGRTcSA9IG1lcmdlVGhyZWhzb2xkICogbWVyZ2VUaHJlaHNvbGQ7XG4gIHBhdGhzID0gY2xvbmUocGF0aHMpO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IHBhdGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGxhc3RQYXRoID0gcGF0aHNbaSAtIDFdO1xuICAgIHZhciBjdXJQYXRoID0gcGF0aHNbaV07XG4gICAgaWYgKHNxdWFyZWREaXN0YW5jZShjdXJQYXRoWzBdLCBsYXN0UGF0aFtsYXN0UGF0aC5sZW5ndGggLSAxXSkgPCBtZXJnZVRocmVoc29sZFNxKSB7XG4gICAgICBwYXRocyA9IG1lcmdlUGF0aHMocGF0aHMsIGkgLSAxLCBpKTtcbiAgICAgIGkgLT0gMTsgLy8gbm93IHRoYXQgd2UndmUgbWVyZ2VkLCB2YXIncyBjb3JyZWN0IGkgZm9yIHRoZSBuZXh0IHJvdW5kXG4gICAgfVxuICB9XG4gIHJldHVybiBwYXRocztcbn07XG5cbmZ1bmN0aW9uIG1lcmdlUGF0aHMgKHBhdGhzLCBwYXRoMUlkeCwgcGF0aDJJZHgpIHtcbiAgLy8gdGhpcyB3aWxsIGhlbHAgdXMga2VlcCB0aGluZ3MgaW4gb3JkZXIgd2hlbiB3ZSBkbyB0aGUgc3BsaWNpbmdcbiAgdmFyIG1pbklkeCA9IE1hdGgubWluKHBhdGgxSWR4LCBwYXRoMklkeCk7XG4gIHZhciBtYXhJZHggPSBNYXRoLm1heChwYXRoMUlkeCwgcGF0aDJJZHgpO1xuICBwYXRocyA9IHBhdGhzLnNsaWNlKCk7XG4gIHZhciBwYXRoMSA9IHBhdGhzW21pbklkeF07XG4gIHZhciBwYXRoMiA9IHBhdGhzW21heElkeF07XG4gIHZhciBtZXJnZWRQYXRoID0gcGF0aDEuY29uY2F0KHBhdGgyLnNsaWNlKDEpKTtcbiAgcGF0aHMuc3BsaWNlKG1heElkeCwgMSk7XG4gIHBhdGhzLnNwbGljZShtaW5JZHgsIDEsIG1lcmdlZFBhdGgpO1xuICByZXR1cm4gcGF0aHM7XG59XG5cbi8vIHRoaXMgaXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gcGF0aHMgLSBmcm9tIHRoZSBlbmQgb2YgcGF0aCAxIHRvIHRoZSBzdGFydCBvZiBwYXRoIDJcbi8vIGZ1bmN0aW9uIGdldFRyYXZlbGluZ0Rpc3RhbmNlIChwYXRocykge1xuLy8gICB2YXIgdG90YWwgPSAwO1xuLy8gICB2YXIgbGFzdFB0ID0gcGF0aHNbMF1bcGF0aHNbMF0ubGVuZ3RoIC0gMV07XG4vLyAgIGZvciAodmFyIHBhdGggb2YgcGF0aHMuc2xpY2UoMSkpIHtcbi8vICAgICB2YXIgc3F1YXJlZERpc3QgPSBzcXVhcmVkRGlzdGFuY2UobGFzdFB0LCBwYXRoWzBdKTtcbi8vICAgICB0b3RhbCArPSBNYXRoLnNxcnQoc3F1YXJlZERpc3QpO1xuLy8gICAgIGxhc3RQdCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbi8vICAgfVxuLy8gICByZXR1cm4gdG90YWw7XG4vLyB9XG4iLCJtb2R1bGUuZXhwb3J0cy5zcXVhcmVkRGlzdGFuY2UgPSBzcXVhcmVkRGlzdGFuY2U7XG5mdW5jdGlvbiBzcXVhcmVkRGlzdGFuY2UgKHB0MSwgcHQyKSB7XG4gIHZhciBkeCA9IHB0MlswXSAtIHB0MVswXTtcbiAgdmFyIGR5ID0gcHQyWzFdIC0gcHQxWzFdO1xuICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdyYXA7XG5mdW5jdGlvbiB3cmFwICh2YWx1ZSwgZnJvbSwgdG8pIHtcbiAgaWYgKHR5cGVvZiBmcm9tICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgdG8gIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTXVzdCBzcGVjaWZ5IFwidG9cIiBhbmQgXCJmcm9tXCIgYXJndW1lbnRzIGFzIG51bWJlcnMnKTtcbiAgfVxuICAvLyBhbGdvcml0aG0gZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81ODUyNjI4LzU5OTg4NFxuICBpZiAoZnJvbSA+IHRvKSB7XG4gICAgdmFyIHQgPSBmcm9tO1xuICAgIGZyb20gPSB0bztcbiAgICB0byA9IHQ7XG4gIH1cbiAgdmFyIGN5Y2xlID0gdG8gLSBmcm9tO1xuICBpZiAoY3ljbGUgPT09IDApIHtcbiAgICByZXR1cm4gdG87XG4gIH1cbiAgcmV0dXJuIHZhbHVlIC0gY3ljbGUgKiBNYXRoLmZsb29yKCh2YWx1ZSAtIGZyb20pIC8gY3ljbGUpO1xufVxuIiwidmFyIGRlZmluZWQgPSByZXF1aXJlKCdkZWZpbmVkJyk7XG52YXIgd3JhcCA9IHJlcXVpcmUoJy4vbGliL3dyYXAnKTtcbnZhciBFUFNJTE9OID0gTnVtYmVyLkVQU0lMT047XG5cbmZ1bmN0aW9uIGNsYW1wICh2YWx1ZSwgbWluLCBtYXgpIHtcbiAgcmV0dXJuIG1pbiA8IG1heFxuICAgID8gKHZhbHVlIDwgbWluID8gbWluIDogdmFsdWUgPiBtYXggPyBtYXggOiB2YWx1ZSlcbiAgICA6ICh2YWx1ZSA8IG1heCA/IG1heCA6IHZhbHVlID4gbWluID8gbWluIDogdmFsdWUpO1xufVxuXG5mdW5jdGlvbiBjbGFtcDAxICh2KSB7XG4gIHJldHVybiBjbGFtcCh2LCAwLCAxKTtcbn1cblxuZnVuY3Rpb24gbGVycCAobWluLCBtYXgsIHQpIHtcbiAgcmV0dXJuIG1pbiAqICgxIC0gdCkgKyBtYXggKiB0O1xufVxuXG5mdW5jdGlvbiBpbnZlcnNlTGVycCAobWluLCBtYXgsIHQpIHtcbiAgaWYgKE1hdGguYWJzKG1pbiAtIG1heCkgPCBFUFNJTE9OKSByZXR1cm4gMDtcbiAgZWxzZSByZXR1cm4gKHQgLSBtaW4pIC8gKG1heCAtIG1pbik7XG59XG5cbmZ1bmN0aW9uIHNtb290aHN0ZXAgKG1pbiwgbWF4LCB0KSB7XG4gIHZhciB4ID0gY2xhbXAoaW52ZXJzZUxlcnAobWluLCBtYXgsIHQpLCAwLCAxKTtcbiAgcmV0dXJuIHggKiB4ICogKDMgLSAyICogeCk7XG59XG5cbmZ1bmN0aW9uIHRvRmluaXRlIChuLCBkZWZhdWx0VmFsdWUpIHtcbiAgZGVmYXVsdFZhbHVlID0gZGVmaW5lZChkZWZhdWx0VmFsdWUsIDApO1xuICByZXR1cm4gdHlwZW9mIG4gPT09ICdudW1iZXInICYmIGlzRmluaXRlKG4pID8gbiA6IGRlZmF1bHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gZXhwYW5kVmVjdG9yIChkaW1zKSB7XG4gIGlmICh0eXBlb2YgZGltcyAhPT0gJ251bWJlcicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGRpbXMgYXJndW1lbnQnKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChwLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBkZWZhdWx0VmFsdWUgPSBkZWZpbmVkKGRlZmF1bHRWYWx1ZSwgMCk7XG4gICAgdmFyIHNjYWxhcjtcbiAgICBpZiAocCA9PSBudWxsKSB7XG4gICAgICAvLyBObyB2ZWN0b3IsIGNyZWF0ZSBhIGRlZmF1bHQgb25lXG4gICAgICBzY2FsYXIgPSBkZWZhdWx0VmFsdWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcCA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUocCkpIHtcbiAgICAgIC8vIEV4cGFuZCBzaW5nbGUgY2hhbm5lbCB0byBtdWx0aXBsZSB2ZWN0b3JcbiAgICAgIHNjYWxhciA9IHA7XG4gICAgfVxuXG4gICAgdmFyIG91dCA9IFtdO1xuICAgIHZhciBpO1xuICAgIGlmIChzY2FsYXIgPT0gbnVsbCkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGRpbXM7IGkrKykge1xuICAgICAgICBvdXRbaV0gPSB0b0Zpbml0ZShwW2ldLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZGltczsgaSsrKSB7XG4gICAgICAgIG91dFtpXSA9IHNjYWxhcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbGVycEFycmF5IChtaW4sIG1heCwgdCwgb3V0KSB7XG4gIG91dCA9IG91dCB8fCBbXTtcbiAgaWYgKG1pbi5sZW5ndGggIT09IG1heC5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtaW4gYW5kIG1heCBhcnJheSBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSB0aGUgc2FtZSBsZW5ndGgnKTtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IG1pbi5sZW5ndGg7IGkrKykge1xuICAgIG91dFtpXSA9IGxlcnAobWluW2ldLCBtYXhbaV0sIHQpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIG5ld0FycmF5IChuLCBpbml0aWFsVmFsdWUpIHtcbiAgbiA9IGRlZmluZWQobiwgMCk7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIG4gYXJndW1lbnQgdG8gYmUgYSBudW1iZXInKTtcbiAgdmFyIG91dCA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgb3V0LnB1c2goaW5pdGlhbFZhbHVlKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gbGluc3BhY2UgKG4sIG9wdHMpIHtcbiAgbiA9IGRlZmluZWQobiwgMCk7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIG4gYXJndW1lbnQgdG8gYmUgYSBudW1iZXInKTtcbiAgb3B0cyA9IG9wdHMgfHwge307XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgb3B0cyA9IHsgZW5kcG9pbnQ6IHRydWUgfTtcbiAgfVxuICB2YXIgb2Zmc2V0ID0gZGVmaW5lZChvcHRzLm9mZnNldCwgMCk7XG4gIGlmIChvcHRzLmVuZHBvaW50KSB7XG4gICAgcmV0dXJuIG5ld0FycmF5KG4pLm1hcChmdW5jdGlvbiAoXywgaSkge1xuICAgICAgcmV0dXJuIG4gPD0gMSA/IDAgOiAoKGkgKyBvZmZzZXQpIC8gKG4gLSAxKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ld0FycmF5KG4pLm1hcChmdW5jdGlvbiAoXywgaSkge1xuICAgICAgcmV0dXJuIChpICsgb2Zmc2V0KSAvIG47XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGVycEZyYW1lcyAodmFsdWVzLCB0LCBvdXQpIHtcbiAgdCA9IGNsYW1wKHQsIDAsIDEpO1xuXG4gIHZhciBsZW4gPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgdmFyIHdob2xlID0gdCAqIGxlbjtcbiAgdmFyIGZyYW1lID0gTWF0aC5mbG9vcih3aG9sZSk7XG4gIHZhciBmcmFjdCA9IHdob2xlIC0gZnJhbWU7XG5cbiAgdmFyIG5leHRGcmFtZSA9IE1hdGgubWluKGZyYW1lICsgMSwgbGVuKTtcbiAgdmFyIGEgPSB2YWx1ZXNbZnJhbWUgJSB2YWx1ZXMubGVuZ3RoXTtcbiAgdmFyIGIgPSB2YWx1ZXNbbmV4dEZyYW1lICUgdmFsdWVzLmxlbmd0aF07XG4gIGlmICh0eXBlb2YgYSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGIgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGxlcnAoYSwgYiwgZnJhY3QpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYSkgJiYgQXJyYXkuaXNBcnJheShiKSkge1xuICAgIHJldHVybiBsZXJwQXJyYXkoYSwgYiwgZnJhY3QsIG91dCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTWlzbWF0Y2ggaW4gdmFsdWUgdHlwZSBvZiB0d28gYXJyYXkgZWxlbWVudHM6ICcgKyBmcmFtZSArICcgYW5kICcgKyBuZXh0RnJhbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vZCAoYSwgYikge1xuICByZXR1cm4gKChhICUgYikgKyBiKSAlIGI7XG59XG5cbmZ1bmN0aW9uIGRlZ1RvUmFkIChuKSB7XG4gIHJldHVybiBuICogTWF0aC5QSSAvIDE4MDtcbn1cblxuZnVuY3Rpb24gcmFkVG9EZWcgKG4pIHtcbiAgcmV0dXJuIG4gKiAxODAgLyBNYXRoLlBJO1xufVxuXG5mdW5jdGlvbiBmcmFjdCAobikge1xuICByZXR1cm4gbiAtIE1hdGguZmxvb3Iobik7XG59XG5cbmZ1bmN0aW9uIHNpZ24gKG4pIHtcbiAgaWYgKG4gPiAwKSByZXR1cm4gMTtcbiAgZWxzZSBpZiAobiA8IDApIHJldHVybiAtMTtcbiAgZWxzZSByZXR1cm4gMDtcbn1cblxuLy8gU3BlY2lmaWMgZnVuY3Rpb24gZnJvbSBVbml0eSAvIG9mTWF0aCwgbm90IHN1cmUgaXRzIG5lZWRlZD9cbi8vIGZ1bmN0aW9uIGxlcnBXcmFwIChhLCBiLCB0LCBtaW4sIG1heCkge1xuLy8gICByZXR1cm4gd3JhcChhICsgd3JhcChiIC0gYSwgbWluLCBtYXgpICogdCwgbWluLCBtYXgpXG4vLyB9XG5cbmZ1bmN0aW9uIHBpbmdQb25nICh0LCBsZW5ndGgpIHtcbiAgdCA9IG1vZCh0LCBsZW5ndGggKiAyKTtcbiAgcmV0dXJuIGxlbmd0aCAtIE1hdGguYWJzKHQgLSBsZW5ndGgpO1xufVxuXG5mdW5jdGlvbiBkYW1wIChhLCBiLCBsYW1iZGEsIGR0KSB7XG4gIHJldHVybiBsZXJwKGEsIGIsIDEgLSBNYXRoLmV4cCgtbGFtYmRhICogZHQpKTtcbn1cblxuZnVuY3Rpb24gZGFtcEFycmF5IChhLCBiLCBsYW1iZGEsIGR0LCBvdXQpIHtcbiAgb3V0ID0gb3V0IHx8IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICBvdXRbaV0gPSBkYW1wKGFbaV0sIGJbaV0sIGxhbWJkYSwgZHQpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIG1hcFJhbmdlICh2YWx1ZSwgaW5wdXRNaW4sIGlucHV0TWF4LCBvdXRwdXRNaW4sIG91dHB1dE1heCwgY2xhbXApIHtcbiAgLy8gUmVmZXJlbmNlOlxuICAvLyBodHRwczovL29wZW5mcmFtZXdvcmtzLmNjL2RvY3VtZW50YXRpb24vbWF0aC9vZk1hdGgvXG4gIGlmIChNYXRoLmFicyhpbnB1dE1pbiAtIGlucHV0TWF4KSA8IEVQU0lMT04pIHtcbiAgICByZXR1cm4gb3V0cHV0TWluO1xuICB9IGVsc2Uge1xuICAgIHZhciBvdXRWYWwgPSAoKHZhbHVlIC0gaW5wdXRNaW4pIC8gKGlucHV0TWF4IC0gaW5wdXRNaW4pICogKG91dHB1dE1heCAtIG91dHB1dE1pbikgKyBvdXRwdXRNaW4pO1xuICAgIGlmIChjbGFtcCkge1xuICAgICAgaWYgKG91dHB1dE1heCA8IG91dHB1dE1pbikge1xuICAgICAgICBpZiAob3V0VmFsIDwgb3V0cHV0TWF4KSBvdXRWYWwgPSBvdXRwdXRNYXg7XG4gICAgICAgIGVsc2UgaWYgKG91dFZhbCA+IG91dHB1dE1pbikgb3V0VmFsID0gb3V0cHV0TWluO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG91dFZhbCA+IG91dHB1dE1heCkgb3V0VmFsID0gb3V0cHV0TWF4O1xuICAgICAgICBlbHNlIGlmIChvdXRWYWwgPCBvdXRwdXRNaW4pIG91dFZhbCA9IG91dHB1dE1pbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dFZhbDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbW9kOiBtb2QsXG4gIGZyYWN0OiBmcmFjdCxcbiAgc2lnbjogc2lnbixcbiAgZGVnVG9SYWQ6IGRlZ1RvUmFkLFxuICByYWRUb0RlZzogcmFkVG9EZWcsXG4gIHdyYXA6IHdyYXAsXG4gIHBpbmdQb25nOiBwaW5nUG9uZyxcbiAgbGluc3BhY2U6IGxpbnNwYWNlLFxuICBsZXJwOiBsZXJwLFxuICBsZXJwQXJyYXk6IGxlcnBBcnJheSxcbiAgaW52ZXJzZUxlcnA6IGludmVyc2VMZXJwLFxuICBsZXJwRnJhbWVzOiBsZXJwRnJhbWVzLFxuICBjbGFtcDogY2xhbXAsXG4gIGNsYW1wMDE6IGNsYW1wMDEsXG4gIHNtb290aHN0ZXA6IHNtb290aHN0ZXAsXG4gIGRhbXA6IGRhbXAsXG4gIGRhbXBBcnJheTogZGFtcEFycmF5LFxuICBtYXBSYW5nZTogbWFwUmFuZ2UsXG4gIGV4cGFuZDJEOiBleHBhbmRWZWN0b3IoMiksXG4gIGV4cGFuZDNEOiBleHBhbmRWZWN0b3IoMyksXG4gIGV4cGFuZDREOiBleHBhbmRWZWN0b3IoNClcbn07XG4iLCJ2YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcbnZhciBjb252ZXJ0ID0gcmVxdWlyZSgnY29udmVydC1sZW5ndGgnKTtcbnZhciBkMyA9IHJlcXVpcmUoJ2QzLXBhdGgnKTtcbnZhciBzdmdQYXRoQ29udG91cnMgPSByZXF1aXJlKCdzdmctcGF0aC1jb250b3VycycpO1xudmFyIHN2Z1BhdGhQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlLXN2Zy1wYXRoJyk7XG52YXIgc3ZnUGF0aEFicyA9IHJlcXVpcmUoJ2Ficy1zdmctcGF0aCcpO1xudmFyIHN2Z1BhdGhBcmNzID0gcmVxdWlyZSgnbm9ybWFsaXplLXN2Zy1wYXRoJyk7XG52YXIgb3B0aW1pemVyID0gcmVxdWlyZSgnLi9saWIvb3B0aW1pemUtcGVucGxvdC1wYXRocycpO1xudmFyIGdlb21ldHJ5ID0gcmVxdWlyZSgnLi9nZW9tZXRyeScpO1xuXG52YXIgREVGQVVMVF9QRU5fVEhJQ0tORVNTID0gMC4wMztcbnZhciBERUZBVUxUX1BFTl9USElDS05FU1NfVU5JVCA9ICdjbSc7XG52YXIgREVGQVVMVF9QSVhFTFNfUEVSX0lOQ0ggPSA5MDtcblxuLy8gQSBQYXRoIGhlbHBlciBmb3IgYXJjcywgY3VydmVzIGFuZCBsaW5lVG8gY29tbWFuZHNcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZVBhdGggPSBjcmVhdGVQYXRoO1xuZnVuY3Rpb24gY3JlYXRlUGF0aCAoZm4pIHtcbiAgdmFyIHBhdGggPSBkMy5wYXRoKCk7XG4gIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIGZuKHBhdGgpO1xuICBwYXRoLmxpbmVUbyA9IHdyYXAocGF0aC5saW5lVG8pO1xuICBwYXRoLnF1YWRyYXRpY0N1cnZlVG8gPSB3cmFwKHBhdGgucXVhZHJhdGljQ3VydmVUbyk7XG4gIHBhdGguYmV6aWVyQ3VydmVUbyA9IHdyYXAocGF0aC5iZXppZXJDdXJ2ZVRvKTtcbiAgcmV0dXJuIHBhdGg7XG5cbiAgLy8gUGF0Y2ggYSBidWcgaW4gZDMtcGF0aCB0aGF0IGRvZXNuJ3QgaGFuZGxlXG4gIC8vIGxpbmVUbyBhbmQgc28gb24gd2l0aG91dCBhbiBpbml0aWFsIG1vdmVUb1xuICBmdW5jdGlvbiB3cmFwIChmbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICBpZiAocGF0aC5feDEgPT0gbnVsbCAmJiBwYXRoLl95MSA9PSBudWxsKSB7XG4gICAgICAgIHBhdGgubW92ZVRvKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZuLmFwcGx5KHBhdGgsIGFyZ3MpO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMucGF0aHNUb1NWR1BhdGhzID0gcGF0aHNUb1NWR1BhdGhzO1xuZnVuY3Rpb24gcGF0aHNUb1NWR1BhdGhzIChpbnB1dHMsIG9wdCkge1xuICBvcHQgPSBvcHQgfHwge307XG5cbiAgdmFyIHN2Z1BhdGggPSBjb252ZXJ0VG9TVkdQYXRoKGlucHV0cywgb3B0KTtcbiAgdmFyIHN2Z1BhdGhzID0gQXJyYXkuaXNBcnJheShzdmdQYXRoKSA/IHN2Z1BhdGggOiBbIHN2Z1BhdGggXTtcbiAgcmV0dXJuIHN2Z1BhdGhzLmZpbHRlcihCb29sZWFuKTtcbn1cblxubW9kdWxlLmV4cG9ydHMucGF0aHNUb1BvbHlsaW5lcyA9IHBhdGhzVG9Qb2x5bGluZXM7XG5mdW5jdGlvbiBwYXRoc1RvUG9seWxpbmVzIChpbnB1dHMsIG9wdCkge1xuICBvcHQgPSBvcHQgfHwge307XG5cbiAgdmFyIHNjYWxlO1xuICBpZiAob3B0LmN1cnZlUmVzb2x1dGlvbiAhPSBudWxsICYmIGlzRmluaXRlKG9wdC5jdXJ2ZVJlc29sdXRpb24pICYmIHR5cGVvZiBvcHQuY3VydmVSZXNvbHV0aW9uID09PSAnbnVtYmVyJykge1xuICAgIHNjYWxlID0gb3B0LmN1cnZlUmVzb2x1dGlvbjtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdW5pdHMgPSBvcHQudW5pdHMgfHwgJ3B4JztcbiAgICBzY2FsZSA9IE1hdGgubWF4KDEsIGNvbnZlcnQoNCwgdW5pdHMsICdweCcpKTtcbiAgfVxuXG4gIHZhciBjb250b3VycyA9IFtdO1xuICBlYWNoUGF0aChpbnB1dHMsIGZ1bmN0aW9uIChmZWF0dXJlKSB7XG4gICAgaWYgKHR5cGVvZiBmZWF0dXJlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFyIGNvbW1hbmRzID0gc3ZnUGF0aFBhcnNlKGZlYXR1cmUpO1xuICAgICAgdmFyIHN1YkNvbnRvdXJzID0gc3ZnUGF0aENvbnRvdXJzKGNvbW1hbmRzLCBzY2FsZSk7XG4gICAgICBzdWJDb250b3Vycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJDb250b3VyKSB7XG4gICAgICAgIGNvbnRvdXJzLnB1c2goc3ViQ29udG91cik7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb3V0cHV0IG9ubHkgMkQgcG9seWxpbmVzXG4gICAgICB2YXIgcG9seWxpbmUgPSBmZWF0dXJlLm1hcChmdW5jdGlvbiAocG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIFsgcG9pbnRbMF0gfHwgMCwgcG9pbnRbMV0gfHwgMCBdO1xuICAgICAgfSk7XG4gICAgICBjb250b3Vycy5wdXNoKHBvbHlsaW5lKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29udG91cnM7XG59XG5cbm1vZHVsZS5leHBvcnRzLnBhdGhzVG9TVkcgPSBwYXRoc1RvU1ZHO1xuZnVuY3Rpb24gcGF0aHNUb1NWRyAoaW5wdXRzLCBvcHQpIHtcbiAgb3B0ID0gb3B0IHx8IHt9O1xuXG4gIHZhciB3aWR0aCA9IG9wdC53aWR0aDtcbiAgdmFyIGhlaWdodCA9IG9wdC5oZWlnaHQ7XG5cbiAgdmFyIGNvbXB1dGVCb3VuZHMgPSB0eXBlb2Ygd2lkdGggPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBoZWlnaHQgPT09ICd1bmRlZmluZWQnO1xuICBpZiAoY29tcHV0ZUJvdW5kcykge1xuICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBzcGVjaWZ5IFwid2lkdGhcIiBhbmQgXCJoZWlnaHRcIiBvcHRpb25zJyk7XG4gIH1cblxuICB2YXIgdmlld1VuaXRzID0gJ3B4JztcbiAgdmFyIHVuaXRzID0gb3B0LnVuaXRzIHx8IHZpZXdVbml0cztcblxuICB2YXIgY29udmVydE9wdGlvbnMgPSB7XG4gICAgdW5pdHM6IHVuaXRzLFxuICAgIHZpZXdVbml0czogJ3B4JyxcbiAgICByb3VuZFBpeGVsOiBmYWxzZSxcbiAgICBwcmVjaXNpb246IGRlZmluZWQob3B0LnByZWNpc2lvbiwgNSksXG4gICAgcGl4ZWxzUGVySW5jaDogREVGQVVMVF9QSVhFTFNfUEVSX0lOQ0hcbiAgfTtcblxuICAvLyBDb252ZXJ0IGFsbCBTVkdQYXRocy9wYXRocy9ldGMgdG8gcG9seWxpbmVzXG4gIC8vIFRoaXMgd29uJ3QgY2hhbmdlIHRoZWlyIHVuaXRzIHNvIHRoZXkgYXJlIHN0aWxsIGluIHVzZXIgc3BhY2VcbiAgaW5wdXRzID0gcGF0aHNUb1BvbHlsaW5lcyhpbnB1dHMsIE9iamVjdC5hc3NpZ24oe30sIGNvbnZlcnRPcHRpb25zLCB7XG4gICAgY3VydmVSZXNvbHV0aW9uOiBvcHQuY3VydmVSZXNvbHV0aW9uIHx8IHVuZGVmaW5lZFxuICB9KSk7XG5cbiAgLy8gVE9ETzogYWxsb3cgZm9yICdyZXBlYXQnIG9wdGlvblxuICBpZiAob3B0Lm9wdGltaXplKSB7XG4gICAgdmFyIG9wdGltaXplT3B0cyA9IHR5cGVvZiBvcHQub3B0aW1pemUgPT09ICdvYmplY3QnID8gb3B0Lm9wdGltaXplIDoge1xuICAgICAgc29ydDogdHJ1ZSxcbiAgICAgIG1lcmdlOiB0cnVlLFxuICAgICAgcmVtb3ZlRHVwbGljYXRlczogdHJ1ZSxcbiAgICAgIHJlbW92ZUNvbGxpbmVhcjogdHJ1ZVxuICAgIH07XG4gICAgdmFyIHNob3VsZFNvcnQgPSBvcHRpbWl6ZU9wdHMuc29ydCAhPT0gZmFsc2U7XG4gICAgdmFyIHNob3VsZE1lcmdlID0gb3B0aW1pemVPcHRzLm1lcmdlICE9PSBmYWxzZTtcbiAgICB2YXIgc2hvdWxkUmVtb3ZlRHVwbGljYXRlID0gb3B0aW1pemVPcHRzLnJlbW92ZUR1cGxpY2F0ZXMgIT09IGZhbHNlO1xuICAgIHZhciBzaG91bGRSZW1vdmVDb2xsaW5lYXIgPSBvcHRpbWl6ZU9wdHMucmVtb3ZlQ29sbGluZWFyICE9PSBmYWxzZTtcbiAgICBpZiAoc2hvdWxkUmVtb3ZlRHVwbGljYXRlKSB7XG4gICAgICBpbnB1dHMgPSBpbnB1dHMubWFwKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIHJldHVybiBnZW9tZXRyeS5yZW1vdmVEdXBsaWNhdGVQb2ludHMobGluZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHNob3VsZFJlbW92ZUNvbGxpbmVhcikge1xuICAgICAgaW5wdXRzID0gaW5wdXRzLm1hcChmdW5jdGlvbiAobGluZSkge1xuICAgICAgICByZXR1cm4gZ2VvbWV0cnkucmVtb3ZlQ29sbGluZWFyUG9pbnRzKGxpbmUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIG5vdyBkbyBzb3J0aW5nICYgbWVyZ2luZ1xuICAgIGlmIChzaG91bGRTb3J0KSBpbnB1dHMgPSBvcHRpbWl6ZXIuc29ydChpbnB1dHMpO1xuICAgIGlmIChzaG91bGRNZXJnZSkge1xuICAgICAgdmFyIG1lcmdlVGhyZXNob2xkID0gb3B0aW1pemVPcHRzLm1lcmdlVGhyZXNob2xkICE9IG51bGxcbiAgICAgICAgPyBvcHRpbWl6ZU9wdHMubWVyZ2VUaHJlc2hvbGRcbiAgICAgICAgOiBjb252ZXJ0KDAuMjUsICdtbScsIHVuaXRzLCB7XG4gICAgICAgICAgcGl4ZWxzUGVySW5jaDogREVGQVVMVF9QSVhFTFNfUEVSX0lOQ0hcbiAgICAgICAgfSk7XG4gICAgICBpbnB1dHMgPSBvcHRpbWl6ZXIubWVyZ2UoaW5wdXRzLCBtZXJnZVRocmVzaG9sZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gbm93IHdlIGNvbnZlcnQgYWxsIHBvbHlsaW5lcyBpbiB1c2VyIHNwYWNlIHVuaXRzIGludG8gdmlldyB1bml0c1xuICB2YXIgc3ZnUGF0aHMgPSBwYXRoc1RvU1ZHUGF0aHMoaW5wdXRzLCBjb252ZXJ0T3B0aW9ucyk7XG5cbiAgdmFyIHZpZXdXaWR0aCA9IGNvbnZlcnQod2lkdGgsIHVuaXRzLCB2aWV3VW5pdHMsIGNvbnZlcnRPcHRpb25zKS50b1N0cmluZygpO1xuICB2YXIgdmlld0hlaWdodCA9IGNvbnZlcnQoaGVpZ2h0LCB1bml0cywgdmlld1VuaXRzLCBjb252ZXJ0T3B0aW9ucykudG9TdHJpbmcoKTtcbiAgdmFyIGZpbGxTdHlsZSA9IG9wdC5maWxsU3R5bGUgfHwgJ25vbmUnO1xuICB2YXIgc3Ryb2tlU3R5bGUgPSBvcHQuc3Ryb2tlU3R5bGUgfHwgJ2JsYWNrJztcbiAgdmFyIGxpbmVXaWR0aCA9IG9wdC5saW5lV2lkdGg7XG4gIHZhciBsaW5lSm9pbiA9IG9wdC5saW5lSm9pbjtcbiAgdmFyIGxpbmVDYXAgPSBvcHQubGluZUNhcDtcblxuICAvLyBDaG9vc2UgYSBkZWZhdWx0IGxpbmUgd2lkdGggYmFzZWQgb24gYSByZWxhdGl2ZWx5IGZpbmUtdGlwIHBlblxuICBpZiAodHlwZW9mIGxpbmVXaWR0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBDb252ZXJ0IHRvIHVzZXIgdW5pdHNcbiAgICBsaW5lV2lkdGggPSBjb252ZXJ0KERFRkFVTFRfUEVOX1RISUNLTkVTUywgREVGQVVMVF9QRU5fVEhJQ0tORVNTX1VOSVQsIHVuaXRzLCBjb252ZXJ0T3B0aW9ucykudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHZhciBwYXRoRWxlbWVudHMgPSBzdmdQYXRocy5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICB2YXIgYXR0cnMgPSB0b0F0dHJMaXN0KFtcbiAgICAgIFsgJ2QnLCBkIF1cbiAgICBdKTtcbiAgICByZXR1cm4gJyAgICA8cGF0aCAnICsgYXR0cnMgKyAnIC8+JztcbiAgfSkuam9pbignXFxuJyk7XG5cbiAgdmFyIGdyb3VwQXR0cnMgPSB0b0F0dHJMaXN0KFtcbiAgICBbICdmaWxsJywgZmlsbFN0eWxlIF0sXG4gICAgWyAnc3Ryb2tlJywgc3Ryb2tlU3R5bGUgXSxcbiAgICBbICdzdHJva2Utd2lkdGgnLCBsaW5lV2lkdGggKyAnJyArIHVuaXRzIF0sXG4gICAgbGluZUpvaW4gPyBbICdzdHJva2UtbGluZWpvaW4nLCBsaW5lSm9pbiBdIDogZmFsc2UsXG4gICAgbGluZUNhcCA/IFsgJ3N0cm9rZS1saW5lY2FwJywgbGluZUNhcCBdIDogZmFsc2VcbiAgXSk7XG5cbiAgcmV0dXJuIFtcbiAgICAnPD94bWwgdmVyc2lvbj1cIjEuMFwiIHN0YW5kYWxvbmU9XCJub1wiPz4nLFxuICAgICc8IURPQ1RZUEUgc3ZnIFBVQkxJQyBcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXCIgJyxcbiAgICAnICAgIFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXCI+JyxcbiAgICAnPHN2ZyB3aWR0aD1cIicgKyB3aWR0aCArIHVuaXRzICsgJ1wiIGhlaWdodD1cIicgKyBoZWlnaHQgKyB1bml0cyArICdcIicsXG4gICAgJyAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmVyc2lvbj1cIjEuMVwiIHZpZXdCb3g9XCIwIDAgJyArIHZpZXdXaWR0aCArICcgJyArIHZpZXdIZWlnaHQgKyAnXCI+JyxcbiAgICAnICA8ZyAnICsgZ3JvdXBBdHRycyArICc+JyxcbiAgICBwYXRoRWxlbWVudHMsXG4gICAgJyAgPC9nPicsXG4gICAgJzwvc3ZnPidcbiAgXS5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gdG9BdHRyTGlzdCAoYXJncykge1xuICByZXR1cm4gYXJncy5maWx0ZXIoQm9vbGVhbikubWFwKGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgcmV0dXJuIGF0dHJbMF0gKyAnPVwiJyArIGF0dHJbMV0gKyAnXCInO1xuICB9KS5qb2luKCcgJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzLnJlbmRlclBhdGhzID0gcmVuZGVyUGF0aHM7XG5mdW5jdGlvbiByZW5kZXJQYXRocyAoaW5wdXRzLCBvcHQpIHtcbiAgb3B0ID0gb3B0IHx8IHt9O1xuXG4gIHZhciBjb250ZXh0ID0gb3B0LmNvbnRleHQ7XG4gIGlmICghY29udGV4dCkgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHNwZWNpZnkgXCJjb250ZXh0XCIgb3B0aW9ucycpO1xuXG4gIHZhciB1bml0cyA9IG9wdC51bml0cyB8fCAncHgnO1xuXG4gIHZhciB3aWR0aCA9IG9wdC53aWR0aDtcbiAgdmFyIGhlaWdodCA9IG9wdC5oZWlnaHQ7XG4gIGlmICh0eXBlb2Ygd2lkdGggPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBoZWlnaHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHNwZWNpZnkgXCJ3aWR0aFwiIGFuZCBcImhlaWdodFwiIG9wdGlvbnMnKTtcbiAgfVxuXG4gIC8vIENob29zZSBhIGRlZmF1bHQgbGluZSB3aWR0aCBiYXNlZCBvbiBhIHJlbGF0aXZlbHkgZmluZS10aXAgcGVuXG4gIHZhciBsaW5lV2lkdGggPSBvcHQubGluZVdpZHRoO1xuICBpZiAodHlwZW9mIGxpbmVXaWR0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBDb252ZXJ0IHRvIHVzZXIgdW5pdHNcbiAgICBsaW5lV2lkdGggPSBjb252ZXJ0KERFRkFVTFRfUEVOX1RISUNLTkVTUywgREVGQVVMVF9QRU5fVEhJQ0tORVNTX1VOSVQsIHVuaXRzLCB7XG4gICAgICByb3VuZFBpeGVsOiBmYWxzZSxcbiAgICAgIHBpeGVsc1BlckluY2g6IERFRkFVTFRfUElYRUxTX1BFUl9JTkNIXG4gICAgfSk7XG4gIH1cblxuICAvLyBDbGVhciBjYW52YXNcbiAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgLy8gRmlsbCB3aXRoIHdoaXRlXG4gIGNvbnRleHQuZmlsbFN0eWxlID0gb3B0LmJhY2tncm91bmQgfHwgJ3doaXRlJztcbiAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICBjb250ZXh0LnN0cm9rZVN0eWxlID0gb3B0LmZvcmVncm91bmQgfHwgb3B0LnN0cm9rZVN0eWxlIHx8ICdibGFjayc7XG4gIGNvbnRleHQubGluZVdpZHRoID0gbGluZVdpZHRoO1xuICBjb250ZXh0LmxpbmVKb2luID0gb3B0LmxpbmVKb2luIHx8ICdtaXRlcic7XG4gIGNvbnRleHQubGluZUNhcCA9IG9wdC5saW5lQ2FwIHx8ICdidXR0JztcblxuICAvLyBEcmF3IGxpbmVzXG4gIGVhY2hQYXRoKGlucHV0cywgZnVuY3Rpb24gKGZlYXR1cmUpIHtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgaWYgKHR5cGVvZiBmZWF0dXJlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gU1ZHIHN0cmluZyA9IGRyYXdTVkdQYXRoO1xuICAgICAgZHJhd1NWR1BhdGgoY29udGV4dCwgZmVhdHVyZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGxpc3Qgb2YgcG9pbnRzXG4gICAgICBmZWF0dXJlLmZvckVhY2goZnVuY3Rpb24gKHApIHtcbiAgICAgICAgY29udGV4dC5saW5lVG8ocFswXSwgcFsxXSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb250ZXh0LnN0cm9rZSgpO1xuICB9KTtcblxuICAvLyBTYXZlIGxheWVyc1xuICByZXR1cm4gW1xuICAgIC8vIEV4cG9ydCBQTkcgYXMgZmlyc3QgbGF5ZXJcbiAgICBjb250ZXh0LmNhbnZhcyxcbiAgICAvLyBFeHBvcnQgU1ZHIGZvciBwZW4gcGxvdHRlciBhcyBzZWNvbmQgbGF5ZXJcbiAgICB7XG4gICAgICBkYXRhOiBwYXRoc1RvU1ZHKGlucHV0cywgb3B0KSxcbiAgICAgIGV4dGVuc2lvbjogJy5zdmcnXG4gICAgfVxuICBdO1xufVxuXG4vLyBOb3QgZG9jdW1lbnRlZC4uLlxubW9kdWxlLmV4cG9ydHMuY29udmVydFRvU1ZHUGF0aCA9IGNvbnZlcnRUb1NWR1BhdGg7XG5mdW5jdGlvbiBjb252ZXJ0VG9TVkdQYXRoIChpbnB1dCwgb3B0KSB7XG4gIC8vIElucHV0IGNhbiBiZSBhIHNpbmdsZSAncGF0aCcgKHN0cmluZywgb2JqZWN0IG9yIHBvbHlsaW5lKSxcbiAgLy8gb3IgbmVzdGVkICdwYXRoJyBlbGVtZW50c1xuXG4gIC8vIG5vbi1wYXRoXG4gIGlmIChpc0VtcHR5KGlucHV0KSkgcmV0dXJuICcnO1xuXG4gIC8vIHN0cmluZ3MgYXJlIGp1c3QgcmV0dXJuZWQgYXMtaXNcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHJldHVybiBpbnB1dDtcblxuICAvLyBhc3N1bWUgYSBwYXRoIGluc3RhbmNlXG4gIGlmIChpc1BhdGgoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0LnRvU3RyaW5nKCk7XG4gIH1cblxuICBpZiAoaXNQb2x5bGluZShpbnB1dCkpIHtcbiAgICByZXR1cm4gcG9seWxpbmVUb1NWR1BhdGgoaW5wdXQsIG9wdCk7XG4gIH1cblxuICAvLyBhc3N1bWUgYSBsaXN0IG9mICdwYXRoJyBmZWF0dXJlcyBvciBhIGxpc3Qgb2YgcG9seWxpbmVzXG4gIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dC5tYXAoZnVuY3Rpb24gKGZlYXR1cmUpIHtcbiAgICAgIHJldHVybiBjb252ZXJ0VG9TVkdQYXRoKGZlYXR1cmUsIG9wdCk7XG4gICAgfSkucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS5jb25jYXQoYik7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgLy8gV2Fzbid0IGNsZWFyLi4uIGxldCdzIHJldHVybiBhbiBlbXB0eSBwYXRoXG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMuZWFjaFBhdGggPSBlYWNoUGF0aDtcbmZ1bmN0aW9uIGVhY2hQYXRoIChpbnB1dCwgY2IpIHtcbiAgaWYgKGlzRW1wdHkoaW5wdXQpKSB7XG4gICAgLy8gcGFzcy10aHJvdWdoXG4gIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fCAoaXNQYXRoKGlucHV0KSkpIHtcbiAgICBjYihpbnB1dC50b1N0cmluZygpKTtcbiAgfSBlbHNlIGlmIChpc1BvbHlsaW5lKGlucHV0KSkge1xuICAgIGNiKGlucHV0KTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgIGlucHV0LmZvckVhY2goZnVuY3Rpb24gKGZlYXR1cmUpIHtcbiAgICAgIHJldHVybiBlYWNoUGF0aChmZWF0dXJlLCBjYik7XG4gICAgfSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMuZHJhd1NWR1BhdGggPSBkcmF3U1ZHUGF0aDtcbmZ1bmN0aW9uIGRyYXdTVkdQYXRoIChjb250ZXh0LCBzdmdQYXRoKSB7XG4gIHZhciBjb21tYW5kcyA9IHN2Z1BhdGhBcmNzKHN2Z1BhdGhBYnMoc3ZnUGF0aFBhcnNlKHN2Z1BhdGgpKSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY29tbWFuZHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYyA9IGNvbW1hbmRzW2ldO1xuICAgIHZhciB0eXBlID0gY1swXTtcbiAgICBpZiAodHlwZSA9PT0gJ00nKSB7XG4gICAgICBjb250ZXh0Lm1vdmVUbyhjWzFdLCBjWzJdKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdDJykge1xuICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKGNbMV0sIGNbMl0sIGNbM10sIGNbNF0sIGNbNV0sIGNbNl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgdHlwZSBcIicgKyB0eXBlICsgJ1wiIGluIFNWRyBjb21tYW5kcycpO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5wb2x5bGluZVRvU1ZHUGF0aCA9IHBvbHlsaW5lVG9TVkdQYXRoO1xuZnVuY3Rpb24gcG9seWxpbmVUb1NWR1BhdGggKHBvbHlsaW5lLCBvcHQpIHtcbiAgb3B0ID0gb3B0IHx8IHt9O1xuICB2YXIgdW5pdHMgPSBvcHQudW5pdHMgfHwgJ3B4JztcbiAgdmFyIHZpZXdVbml0cyA9IG9wdC52aWV3VW5pdHMgfHwgdW5pdHM7XG4gIHZhciBjb21tYW5kcyA9IFtdO1xuICB2YXIgY29udmVydE9wdGlvbnMgPSB7XG4gICAgcm91bmRQaXhlbDogZmFsc2UsXG4gICAgcHJlY2lzaW9uOiBkZWZpbmVkKG9wdC5wcmVjaXNpb24sIDUpLFxuICAgIHBpeGVsc1BlckluY2g6IERFRkFVTFRfUElYRUxTX1BFUl9JTkNIXG4gIH07XG4gIHBvbHlsaW5lLmZvckVhY2goZnVuY3Rpb24gKHBvaW50LCBqKSB7XG4gICAgdmFyIHR5cGUgPSAoaiA9PT0gMCkgPyAnTScgOiAnTCc7XG4gICAgdmFyIHggPSBjb252ZXJ0KHBvaW50WzBdLCB1bml0cywgdmlld1VuaXRzLCBjb252ZXJ0T3B0aW9ucykudG9TdHJpbmcoKTtcbiAgICB2YXIgeSA9IGNvbnZlcnQocG9pbnRbMV0sIHVuaXRzLCB2aWV3VW5pdHMsIGNvbnZlcnRPcHRpb25zKS50b1N0cmluZygpO1xuICAgIGNvbW1hbmRzLnB1c2godHlwZSArIHggKyAnICcgKyB5KTtcbiAgfSk7XG4gIHJldHVybiBjb21tYW5kcy5qb2luKCcgJyk7XG59XG5cbmZ1bmN0aW9uIGlzRW1wdHkgKGlucHV0KSB7XG4gIHJldHVybiAhaW5wdXQgfHwgKEFycmF5LmlzQXJyYXkoaW5wdXQpICYmIGlucHV0Lmxlbmd0aCA9PT0gMCk7XG59XG5cbmZ1bmN0aW9uIGlzUGF0aCAoaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQgJiYgIUFycmF5LmlzQXJyYXkoaW5wdXQpO1xufVxuXG5mdW5jdGlvbiBpc1BvbHlsaW5lIChpbnB1dCkge1xuICAvLyBlbXB0eSBhcnJheSBvciBub3QgYW4gYXJyYXlcbiAgaWYgKCFpbnB1dCB8fCAhQXJyYXkuaXNBcnJheShpbnB1dCkgfHwgaW5wdXQubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gIC8vIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgaW5wdXRzIGlzIGEgcG9pbnQsIGFzc3VtZSB0aGV5IGFsbCBhcmVcbiAgcmV0dXJuIGlzUG9pbnQoaW5wdXRbMF0pO1xufVxuXG5mdW5jdGlvbiBpc1BvaW50IChwb2ludCkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShwb2ludCkgJiYgcG9pbnQubGVuZ3RoID49IDIgJiYgcG9pbnQuZXZlcnkoZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gdHlwZW9mIHAgPT09ICdudW1iZXInO1xuICB9KTtcbn1cblxuLy8gQGRlcHJlY2F0ZWRcbm1vZHVsZS5leHBvcnRzLnBvbHlsaW5lc1RvU1ZHID0gZnVuY3Rpb24gcG9seWxpbmVzVG9TVkcgKHBvbHlsaW5lcywgb3B0KSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwb2x5bGluZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGFycmF5IG9mIGFycmF5cyBmb3IgcG9seWxpbmVzJyk7XG4gIGNvbnNvbGUud2FybigncG9seWxpbmVzVG9TVkcgaXMgZGVwcmVjYXRlZCwgdXNlIHBhdGhzVG9TVkcgaW5zdGVhZCB3aGljaCBoYXMgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eScpO1xuICAvLyBDcmVhdGUgYSBzaW5nbGUgc3RyaW5nIGZyb20gcG9seWxpbmVzXG4gIHJldHVybiBwYXRoc1RvU1ZHKHBvbHlsaW5lcywgb3B0KTtcbn07XG5cbi8vIEBkZXByZWNhdGVkXG5tb2R1bGUuZXhwb3J0cy5yZW5kZXJQb2x5bGluZXMgPSBmdW5jdGlvbiByZW5kZXJQb2x5bGluZXMgKHBvbHlsaW5lcywgb3B0KSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwb2x5bGluZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGFycmF5IG9mIGFycmF5cyBmb3IgcG9seWxpbmVzJyk7XG4gIGNvbnNvbGUud2FybigncmVuZGVyUG9seWxpbmVzIGlzIGRlcHJlY2F0ZWQsIHVzZSByZW5kZXJQYXRocyBpbnN0ZWFkIHdoaWNoIGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5Jyk7XG4gIC8vIENyZWF0ZSBhIHNpbmdsZSBzdHJpbmcgZnJvbSBwb2x5bGluZXNcbiAgcmV0dXJuIHJlbmRlclBhdGhzKHBvbHlsaW5lcywgb3B0KTtcbn07XG4iLCJ2YXIgc2VlZFJhbmRvbSA9IHJlcXVpcmUoJ3NlZWQtcmFuZG9tJyk7XG52YXIgU2ltcGxleE5vaXNlID0gcmVxdWlyZSgnc2ltcGxleC1ub2lzZScpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCdkZWZpbmVkJyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZVJhbmRvbSAoZGVmYXVsdFNlZWQpIHtcbiAgZGVmYXVsdFNlZWQgPSBkZWZpbmVkKGRlZmF1bHRTZWVkLCBudWxsKTtcbiAgdmFyIGRlZmF1bHRSYW5kb20gPSBNYXRoLnJhbmRvbTtcbiAgdmFyIGN1cnJlbnRTZWVkO1xuICB2YXIgY3VycmVudFJhbmRvbTtcbiAgdmFyIG5vaXNlR2VuZXJhdG9yO1xuICB2YXIgX25leHRHYXVzc2lhbiA9IG51bGw7XG4gIHZhciBfaGFzTmV4dEdhdXNzaWFuID0gZmFsc2U7XG5cbiAgc2V0U2VlZChkZWZhdWx0U2VlZCk7XG5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgY3JlYXRlUmFuZG9tOiBmdW5jdGlvbiAoZGVmYXVsdFNlZWQpIHtcbiAgICAgIHJldHVybiBjcmVhdGVSYW5kb20oZGVmYXVsdFNlZWQpO1xuICAgIH0sXG4gICAgc2V0U2VlZDogc2V0U2VlZCxcbiAgICBnZXRTZWVkOiBnZXRTZWVkLFxuICAgIGdldFJhbmRvbVNlZWQ6IGdldFJhbmRvbVNlZWQsXG4gICAgdmFsdWVOb25aZXJvOiB2YWx1ZU5vblplcm8sXG4gICAgcGVybXV0ZU5vaXNlOiBwZXJtdXRlTm9pc2UsXG4gICAgbm9pc2UxRDogbm9pc2UxRCxcbiAgICBub2lzZTJEOiBub2lzZTJELFxuICAgIG5vaXNlM0Q6IG5vaXNlM0QsXG4gICAgbm9pc2U0RDogbm9pc2U0RCxcbiAgICBzaWduOiBzaWduLFxuICAgIGJvb2xlYW46IGJvb2xlYW4sXG4gICAgY2hhbmNlOiBjaGFuY2UsXG4gICAgcmFuZ2U6IHJhbmdlLFxuICAgIHJhbmdlRmxvb3I6IHJhbmdlRmxvb3IsXG4gICAgcGljazogcGljayxcbiAgICBzaHVmZmxlOiBzaHVmZmxlLFxuICAgIG9uQ2lyY2xlOiBvbkNpcmNsZSxcbiAgICBpbnNpZGVDaXJjbGU6IGluc2lkZUNpcmNsZSxcbiAgICBvblNwaGVyZTogb25TcGhlcmUsXG4gICAgaW5zaWRlU3BoZXJlOiBpbnNpZGVTcGhlcmUsXG4gICAgcXVhdGVybmlvbjogcXVhdGVybmlvbixcbiAgICB3ZWlnaHRlZDogd2VpZ2h0ZWQsXG4gICAgd2VpZ2h0ZWRTZXQ6IHdlaWdodGVkU2V0LFxuICAgIHdlaWdodGVkU2V0SW5kZXg6IHdlaWdodGVkU2V0SW5kZXgsXG4gICAgZ2F1c3NpYW46IGdhdXNzaWFuXG4gIH07XG5cbiAgZnVuY3Rpb24gc2V0U2VlZCAoc2VlZCwgb3B0KSB7XG4gICAgaWYgKHR5cGVvZiBzZWVkID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygc2VlZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGN1cnJlbnRTZWVkID0gc2VlZDtcbiAgICAgIGN1cnJlbnRSYW5kb20gPSBzZWVkUmFuZG9tKGN1cnJlbnRTZWVkLCBvcHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50U2VlZCA9IHVuZGVmaW5lZDtcbiAgICAgIGN1cnJlbnRSYW5kb20gPSBkZWZhdWx0UmFuZG9tO1xuICAgIH1cbiAgICBub2lzZUdlbmVyYXRvciA9IGNyZWF0ZU5vaXNlKCk7XG4gICAgX25leHRHYXVzc2lhbiA9IG51bGw7XG4gICAgX2hhc05leHRHYXVzc2lhbiA9IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsdWUgKCkge1xuICAgIHJldHVybiBjdXJyZW50UmFuZG9tKCk7XG4gIH1cblxuICBmdW5jdGlvbiB2YWx1ZU5vblplcm8gKCkge1xuICAgIHZhciB1ID0gMDtcbiAgICB3aGlsZSAodSA9PT0gMCkgdSA9IHZhbHVlKCk7XG4gICAgcmV0dXJuIHU7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTZWVkICgpIHtcbiAgICByZXR1cm4gY3VycmVudFNlZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRSYW5kb21TZWVkICgpIHtcbiAgICB2YXIgc2VlZCA9IFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKSk7XG4gICAgcmV0dXJuIHNlZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVOb2lzZSAoKSB7XG4gICAgcmV0dXJuIG5ldyBTaW1wbGV4Tm9pc2UoY3VycmVudFJhbmRvbSk7XG4gIH1cblxuICBmdW5jdGlvbiBwZXJtdXRlTm9pc2UgKCkge1xuICAgIG5vaXNlR2VuZXJhdG9yID0gY3JlYXRlTm9pc2UoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vaXNlMUQgKHgsIGZyZXF1ZW5jeSwgYW1wbGl0dWRlKSB7XG4gICAgaWYgKCFpc0Zpbml0ZSh4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneCBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTJEKHggKiBmcmVxdWVuY3ksIDApO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9pc2UyRCAoeCwgeSwgZnJlcXVlbmN5LCBhbXBsaXR1ZGUpIHtcbiAgICBpZiAoIWlzRmluaXRlKHgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd4IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3kgY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgZnJlcXVlbmN5ID0gZGVmaW5lZChmcmVxdWVuY3ksIDEpO1xuICAgIGFtcGxpdHVkZSA9IGRlZmluZWQoYW1wbGl0dWRlLCAxKTtcbiAgICByZXR1cm4gYW1wbGl0dWRlICogbm9pc2VHZW5lcmF0b3Iubm9pc2UyRCh4ICogZnJlcXVlbmN5LCB5ICogZnJlcXVlbmN5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vaXNlM0QgKHgsIHksIHosIGZyZXF1ZW5jeSwgYW1wbGl0dWRlKSB7XG4gICAgaWYgKCFpc0Zpbml0ZSh4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneCBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd5IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ogY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgZnJlcXVlbmN5ID0gZGVmaW5lZChmcmVxdWVuY3ksIDEpO1xuICAgIGFtcGxpdHVkZSA9IGRlZmluZWQoYW1wbGl0dWRlLCAxKTtcbiAgICByZXR1cm4gYW1wbGl0dWRlICogbm9pc2VHZW5lcmF0b3Iubm9pc2UzRChcbiAgICAgIHggKiBmcmVxdWVuY3ksXG4gICAgICB5ICogZnJlcXVlbmN5LFxuICAgICAgeiAqIGZyZXF1ZW5jeVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBub2lzZTREICh4LCB5LCB6LCB3LCBmcmVxdWVuY3ksIGFtcGxpdHVkZSkge1xuICAgIGlmICghaXNGaW5pdGUoeCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ggY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh5KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneSBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHopKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd6IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUodykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3cgY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgZnJlcXVlbmN5ID0gZGVmaW5lZChmcmVxdWVuY3ksIDEpO1xuICAgIGFtcGxpdHVkZSA9IGRlZmluZWQoYW1wbGl0dWRlLCAxKTtcbiAgICByZXR1cm4gYW1wbGl0dWRlICogbm9pc2VHZW5lcmF0b3Iubm9pc2U0RChcbiAgICAgIHggKiBmcmVxdWVuY3ksXG4gICAgICB5ICogZnJlcXVlbmN5LFxuICAgICAgeiAqIGZyZXF1ZW5jeSxcbiAgICAgIHcgKiBmcmVxdWVuY3lcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbiAoKSB7XG4gICAgcmV0dXJuIGJvb2xlYW4oKSA/IDEgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJvb2xlYW4gKCkge1xuICAgIHJldHVybiB2YWx1ZSgpID4gMC41O1xuICB9XG5cbiAgZnVuY3Rpb24gY2hhbmNlIChuKSB7XG4gICAgbiA9IGRlZmluZWQobiwgMC41KTtcbiAgICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdleHBlY3RlZCBuIHRvIGJlIGEgbnVtYmVyJyk7XG4gICAgcmV0dXJuIHZhbHVlKCkgPCBuO1xuICB9XG5cbiAgZnVuY3Rpb24gcmFuZ2UgKG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtYXggPSBtaW47XG4gICAgICBtaW4gPSAwO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWluICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgbWF4ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIGFyZ3VtZW50cyB0byBiZSBudW1iZXJzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlKCkgKiAobWF4IC0gbWluKSArIG1pbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJhbmdlRmxvb3IgKG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtYXggPSBtaW47XG4gICAgICBtaW4gPSAwO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWluICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgbWF4ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIGFyZ3VtZW50cyB0byBiZSBudW1iZXJzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGguZmxvb3IocmFuZ2UobWluLCBtYXgpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBpY2sgKGFycmF5KSB7XG4gICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gYXJyYXlbcmFuZ2VGbG9vcigwLCBhcnJheS5sZW5ndGgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNodWZmbGUgKGFycikge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBBcnJheSwgZ290ICcgKyB0eXBlb2YgYXJyKTtcbiAgICB9XG5cbiAgICB2YXIgcmFuZDtcbiAgICB2YXIgdG1wO1xuICAgIHZhciBsZW4gPSBhcnIubGVuZ3RoO1xuICAgIHZhciByZXQgPSBhcnIuc2xpY2UoKTtcbiAgICB3aGlsZSAobGVuKSB7XG4gICAgICByYW5kID0gTWF0aC5mbG9vcih2YWx1ZSgpICogbGVuLS0pO1xuICAgICAgdG1wID0gcmV0W2xlbl07XG4gICAgICByZXRbbGVuXSA9IHJldFtyYW5kXTtcbiAgICAgIHJldFtyYW5kXSA9IHRtcDtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ2lyY2xlIChyYWRpdXMsIG91dCkge1xuICAgIHJhZGl1cyA9IGRlZmluZWQocmFkaXVzLCAxKTtcbiAgICBvdXQgPSBvdXQgfHwgW107XG4gICAgdmFyIHRoZXRhID0gdmFsdWUoKSAqIDIuMCAqIE1hdGguUEk7XG4gICAgb3V0WzBdID0gcmFkaXVzICogTWF0aC5jb3ModGhldGEpO1xuICAgIG91dFsxXSA9IHJhZGl1cyAqIE1hdGguc2luKHRoZXRhKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zaWRlQ2lyY2xlIChyYWRpdXMsIG91dCkge1xuICAgIHJhZGl1cyA9IGRlZmluZWQocmFkaXVzLCAxKTtcbiAgICBvdXQgPSBvdXQgfHwgW107XG4gICAgb25DaXJjbGUoMSwgb3V0KTtcbiAgICB2YXIgciA9IHJhZGl1cyAqIE1hdGguc3FydCh2YWx1ZSgpKTtcbiAgICBvdXRbMF0gKj0gcjtcbiAgICBvdXRbMV0gKj0gcjtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gb25TcGhlcmUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICB2YXIgdSA9IHZhbHVlKCkgKiBNYXRoLlBJICogMjtcbiAgICB2YXIgdiA9IHZhbHVlKCkgKiAyIC0gMTtcbiAgICB2YXIgcGhpID0gdTtcbiAgICB2YXIgdGhldGEgPSBNYXRoLmFjb3Modik7XG4gICAgb3V0WzBdID0gcmFkaXVzICogTWF0aC5zaW4odGhldGEpICogTWF0aC5jb3MocGhpKTtcbiAgICBvdXRbMV0gPSByYWRpdXMgKiBNYXRoLnNpbih0aGV0YSkgKiBNYXRoLnNpbihwaGkpO1xuICAgIG91dFsyXSA9IHJhZGl1cyAqIE1hdGguY29zKHRoZXRhKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zaWRlU3BoZXJlIChyYWRpdXMsIG91dCkge1xuICAgIHJhZGl1cyA9IGRlZmluZWQocmFkaXVzLCAxKTtcbiAgICBvdXQgPSBvdXQgfHwgW107XG4gICAgdmFyIHUgPSB2YWx1ZSgpICogTWF0aC5QSSAqIDI7XG4gICAgdmFyIHYgPSB2YWx1ZSgpICogMiAtIDE7XG4gICAgdmFyIGsgPSB2YWx1ZSgpO1xuXG4gICAgdmFyIHBoaSA9IHU7XG4gICAgdmFyIHRoZXRhID0gTWF0aC5hY29zKHYpO1xuICAgIHZhciByID0gcmFkaXVzICogTWF0aC5jYnJ0KGspO1xuICAgIG91dFswXSA9IHIgKiBNYXRoLnNpbih0aGV0YSkgKiBNYXRoLmNvcyhwaGkpO1xuICAgIG91dFsxXSA9IHIgKiBNYXRoLnNpbih0aGV0YSkgKiBNYXRoLnNpbihwaGkpO1xuICAgIG91dFsyXSA9IHIgKiBNYXRoLmNvcyh0aGV0YSk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHF1YXRlcm5pb24gKG91dCkge1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICB2YXIgdTEgPSB2YWx1ZSgpO1xuICAgIHZhciB1MiA9IHZhbHVlKCk7XG4gICAgdmFyIHUzID0gdmFsdWUoKTtcblxuICAgIHZhciBzcTEgPSBNYXRoLnNxcnQoMSAtIHUxKTtcbiAgICB2YXIgc3EyID0gTWF0aC5zcXJ0KHUxKTtcblxuICAgIHZhciB0aGV0YTEgPSBNYXRoLlBJICogMiAqIHUyO1xuICAgIHZhciB0aGV0YTIgPSBNYXRoLlBJICogMiAqIHUzO1xuXG4gICAgdmFyIHggPSBNYXRoLnNpbih0aGV0YTEpICogc3ExO1xuICAgIHZhciB5ID0gTWF0aC5jb3ModGhldGExKSAqIHNxMTtcbiAgICB2YXIgeiA9IE1hdGguc2luKHRoZXRhMikgKiBzcTI7XG4gICAgdmFyIHcgPSBNYXRoLmNvcyh0aGV0YTIpICogc3EyO1xuICAgIG91dFswXSA9IHg7XG4gICAgb3V0WzFdID0geTtcbiAgICBvdXRbMl0gPSB6O1xuICAgIG91dFszXSA9IHc7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdlaWdodGVkU2V0IChzZXQpIHtcbiAgICBzZXQgPSBzZXQgfHwgW107XG4gICAgaWYgKHNldC5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIHJldHVybiBzZXRbd2VpZ2h0ZWRTZXRJbmRleChzZXQpXS52YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdlaWdodGVkU2V0SW5kZXggKHNldCkge1xuICAgIHNldCA9IHNldCB8fCBbXTtcbiAgICBpZiAoc2V0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xO1xuICAgIHJldHVybiB3ZWlnaHRlZChzZXQubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gcy53ZWlnaHQ7XG4gICAgfSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gd2VpZ2h0ZWQgKHdlaWdodHMpIHtcbiAgICB3ZWlnaHRzID0gd2VpZ2h0cyB8fCBbXTtcbiAgICBpZiAod2VpZ2h0cy5sZW5ndGggPT09IDApIHJldHVybiAtMTtcbiAgICB2YXIgdG90YWxXZWlnaHQgPSAwO1xuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHdlaWdodHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRvdGFsV2VpZ2h0ICs9IHdlaWdodHNbaV07XG4gICAgfVxuXG4gICAgaWYgKHRvdGFsV2VpZ2h0IDw9IDApIHRocm93IG5ldyBFcnJvcignV2VpZ2h0cyBtdXN0IHN1bSB0byA+IDAnKTtcblxuICAgIHZhciByYW5kb20gPSB2YWx1ZSgpICogdG90YWxXZWlnaHQ7XG4gICAgZm9yIChpID0gMDsgaSA8IHdlaWdodHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyYW5kb20gPCB3ZWlnaHRzW2ldKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuICAgICAgcmFuZG9tIC09IHdlaWdodHNbaV07XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2F1c3NpYW4gKG1lYW4sIHN0YW5kYXJkRGVyaXZhdGlvbikge1xuICAgIG1lYW4gPSBkZWZpbmVkKG1lYW4sIDApO1xuICAgIHN0YW5kYXJkRGVyaXZhdGlvbiA9IGRlZmluZWQoc3RhbmRhcmREZXJpdmF0aW9uLCAxKTtcblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuamRrLW1pcnJvci9qZGs3dS1qZGsvYmxvYi9mNGQ4MDk1N2U4OWExOWEyOWJiOWY5ODA3ZDJhMjgzNTFlZDdmN2RmL3NyYy9zaGFyZS9jbGFzc2VzL2phdmEvdXRpbC9SYW5kb20uamF2YSNMNDk2XG4gICAgaWYgKF9oYXNOZXh0R2F1c3NpYW4pIHtcbiAgICAgIF9oYXNOZXh0R2F1c3NpYW4gPSBmYWxzZTtcbiAgICAgIHZhciByZXN1bHQgPSBfbmV4dEdhdXNzaWFuO1xuICAgICAgX25leHRHYXVzc2lhbiA9IG51bGw7XG4gICAgICByZXR1cm4gbWVhbiArIHN0YW5kYXJkRGVyaXZhdGlvbiAqIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHYxID0gMDtcbiAgICAgIHZhciB2MiA9IDA7XG4gICAgICB2YXIgcyA9IDA7XG4gICAgICBkbyB7XG4gICAgICAgIHYxID0gdmFsdWUoKSAqIDIgLSAxOyAvLyBiZXR3ZWVuIC0xIGFuZCAxXG4gICAgICAgIHYyID0gdmFsdWUoKSAqIDIgLSAxOyAvLyBiZXR3ZWVuIC0xIGFuZCAxXG4gICAgICAgIHMgPSB2MSAqIHYxICsgdjIgKiB2MjtcbiAgICAgIH0gd2hpbGUgKHMgPj0gMSB8fCBzID09PSAwKTtcbiAgICAgIHZhciBtdWx0aXBsaWVyID0gTWF0aC5zcXJ0KC0yICogTWF0aC5sb2cocykgLyBzKTtcbiAgICAgIF9uZXh0R2F1c3NpYW4gPSAodjIgKiBtdWx0aXBsaWVyKTtcbiAgICAgIF9oYXNOZXh0R2F1c3NpYW4gPSB0cnVlO1xuICAgICAgcmV0dXJuIG1lYW4gKyBzdGFuZGFyZERlcml2YXRpb24gKiAodjEgKiBtdWx0aXBsaWVyKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSYW5kb20oKTtcbiIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9XG4gIGdsb2JhbC5wZXJmb3JtYW5jZSAmJlxuICBnbG9iYWwucGVyZm9ybWFuY2Uubm93ID8gZnVuY3Rpb24gbm93KCkge1xuICAgIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKVxuICB9IDogRGF0ZS5ub3cgfHwgZnVuY3Rpb24gbm93KCkge1xuICAgIHJldHVybiArbmV3IERhdGVcbiAgfVxuIiwibW9kdWxlLmV4cG9ydHMgPSBpc1Byb21pc2U7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZShvYmopIHtcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGlzTm9kZVxuXG5mdW5jdGlvbiBpc05vZGUgKHZhbCkge1xuICByZXR1cm4gKCF2YWwgfHwgdHlwZW9mIHZhbCAhPT0gJ29iamVjdCcpXG4gICAgPyBmYWxzZVxuICAgIDogKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnICYmIHR5cGVvZiB3aW5kb3cuTm9kZSA9PT0gJ29iamVjdCcpXG4gICAgICA/ICh2YWwgaW5zdGFuY2VvZiB3aW5kb3cuTm9kZSlcbiAgICAgIDogKHR5cGVvZiB2YWwubm9kZVR5cGUgPT09ICdudW1iZXInKSAmJlxuICAgICAgICAodHlwZW9mIHZhbC5ub2RlTmFtZSA9PT0gJ3N0cmluZycpXG59XG4iLCIvLyBUT0RPOiBXZSBjYW4gcmVtb3ZlIGEgaHVnZSBjaHVuayBvZiBidW5kbGUgc2l6ZSBieSB1c2luZyBhIHNtYWxsZXJcbi8vIHV0aWxpdHkgbW9kdWxlIGZvciBjb252ZXJ0aW5nIHVuaXRzLlxuaW1wb3J0IGlzRE9NIGZyb20gJ2lzLWRvbSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRBUEkgKCkge1xuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93WydjYW52YXMtc2tldGNoLWNsaSddO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZCAoKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFyZ3VtZW50c1tpXSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCcm93c2VyICgpIHtcbiAgcmV0dXJuIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dlYkdMQ29udGV4dCAoY3R4KSB7XG4gIHJldHVybiB0eXBlb2YgY3R4LmNsZWFyID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjdHguY2xlYXJDb2xvciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY3R4LmJ1ZmZlckRhdGEgPT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbnZhcyAoZWxlbWVudCkge1xuICByZXR1cm4gaXNET00oZWxlbWVudCkgJiYgL2NhbnZhcy9pLnRlc3QoZWxlbWVudC5ub2RlTmFtZSkgJiYgdHlwZW9mIGVsZW1lbnQuZ2V0Q29udGV4dCA9PT0gJ2Z1bmN0aW9uJztcbn1cbiIsIi8qIVxuICogcmVwZWF0LXN0cmluZyA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvcmVwZWF0LXN0cmluZz5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgSm9uIFNjaGxpbmtlcnQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFJlc3VsdHMgY2FjaGVcbiAqL1xuXG52YXIgcmVzID0gJyc7XG52YXIgY2FjaGU7XG5cbi8qKlxuICogRXhwb3NlIGByZXBlYXRgXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXBlYXQ7XG5cbi8qKlxuICogUmVwZWF0IHRoZSBnaXZlbiBgc3RyaW5nYCB0aGUgc3BlY2lmaWVkIGBudW1iZXJgXG4gKiBvZiB0aW1lcy5cbiAqXG4gKiAqKkV4YW1wbGU6KipcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlcGVhdCA9IHJlcXVpcmUoJ3JlcGVhdC1zdHJpbmcnKTtcbiAqIHJlcGVhdCgnQScsIDUpO1xuICogLy89PiBBQUFBQVxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGBzdHJpbmdgIFRoZSBzdHJpbmcgdG8gcmVwZWF0XG4gKiBAcGFyYW0ge051bWJlcn0gYG51bWJlcmAgVGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHN0cmluZ1xuICogQHJldHVybiB7U3RyaW5nfSBSZXBlYXRlZCBzdHJpbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gcmVwZWF0KHN0ciwgbnVtKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIGEgc3RyaW5nJyk7XG4gIH1cblxuICAvLyBjb3ZlciBjb21tb24sIHF1aWNrIHVzZSBjYXNlc1xuICBpZiAobnVtID09PSAxKSByZXR1cm4gc3RyO1xuICBpZiAobnVtID09PSAyKSByZXR1cm4gc3RyICsgc3RyO1xuXG4gIHZhciBtYXggPSBzdHIubGVuZ3RoICogbnVtO1xuICBpZiAoY2FjaGUgIT09IHN0ciB8fCB0eXBlb2YgY2FjaGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgY2FjaGUgPSBzdHI7XG4gICAgcmVzID0gJyc7XG4gIH0gZWxzZSBpZiAocmVzLmxlbmd0aCA+PSBtYXgpIHtcbiAgICByZXR1cm4gcmVzLnN1YnN0cigwLCBtYXgpO1xuICB9XG5cbiAgd2hpbGUgKG1heCA+IHJlcy5sZW5ndGggJiYgbnVtID4gMSkge1xuICAgIGlmIChudW0gJiAxKSB7XG4gICAgICByZXMgKz0gc3RyO1xuICAgIH1cblxuICAgIG51bSA+Pj0gMTtcbiAgICBzdHIgKz0gc3RyO1xuICB9XG5cbiAgcmVzICs9IHN0cjtcbiAgcmVzID0gcmVzLnN1YnN0cigwLCBtYXgpO1xuICByZXR1cm4gcmVzO1xufVxuIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIE9iamVjdC5rZXlzID09PSAnZnVuY3Rpb24nXG4gID8gT2JqZWN0LmtleXMgOiBzaGltO1xuXG5leHBvcnRzLnNoaW0gPSBzaGltO1xuZnVuY3Rpb24gc2hpbSAob2JqKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xuICByZXR1cm4ga2V5cztcbn1cbiIsInZhciBzdXBwb3J0c0FyZ3VtZW50c0NsYXNzID0gKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnRzKVxufSkoKSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gc3VwcG9ydHNBcmd1bWVudHNDbGFzcyA/IHN1cHBvcnRlZCA6IHVuc3VwcG9ydGVkO1xuXG5leHBvcnRzLnN1cHBvcnRlZCA9IHN1cHBvcnRlZDtcbmZ1bmN0aW9uIHN1cHBvcnRlZChvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xufTtcblxuZXhwb3J0cy51bnN1cHBvcnRlZCA9IHVuc3VwcG9ydGVkO1xuZnVuY3Rpb24gdW5zdXBwb3J0ZWQob2JqZWN0KXtcbiAgcmV0dXJuIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2Ygb2JqZWN0Lmxlbmd0aCA9PSAnbnVtYmVyJyAmJlxuICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdjYWxsZWUnKSAmJlxuICAgICFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCAnY2FsbGVlJykgfHxcbiAgICBmYWxzZTtcbn07XG4iLCJ2YXIgcFNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuL2xpYi9rZXlzLmpzJyk7XG52YXIgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2xpYi9pc19hcmd1bWVudHMuanMnKTtcblxudmFyIGRlZXBFcXVhbCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFjdHVhbCwgZXhwZWN0ZWQsIG9wdHMpIHtcbiAgaWYgKCFvcHRzKSBvcHRzID0ge307XG4gIC8vIDcuMS4gQWxsIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGFzIGRldGVybWluZWQgYnkgPT09LlxuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuXG4gIH0gZWxzZSBpZiAoYWN0dWFsIGluc3RhbmNlb2YgRGF0ZSAmJiBleHBlY3RlZCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gYWN0dWFsLmdldFRpbWUoKSA9PT0gZXhwZWN0ZWQuZ2V0VGltZSgpO1xuXG4gIC8vIDcuMy4gT3RoZXIgcGFpcnMgdGhhdCBkbyBub3QgYm90aCBwYXNzIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyxcbiAgLy8gZXF1aXZhbGVuY2UgaXMgZGV0ZXJtaW5lZCBieSA9PS5cbiAgfSBlbHNlIGlmICghYWN0dWFsIHx8ICFleHBlY3RlZCB8fCB0eXBlb2YgYWN0dWFsICE9ICdvYmplY3QnICYmIHR5cGVvZiBleHBlY3RlZCAhPSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBvcHRzLnN0cmljdCA/IGFjdHVhbCA9PT0gZXhwZWN0ZWQgOiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gNy40LiBGb3IgYWxsIG90aGVyIE9iamVjdCBwYWlycywgaW5jbHVkaW5nIEFycmF5IG9iamVjdHMsIGVxdWl2YWxlbmNlIGlzXG4gIC8vIGRldGVybWluZWQgYnkgaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChhcyB2ZXJpZmllZFxuICAvLyB3aXRoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCksIHRoZSBzYW1lIHNldCBvZiBrZXlzXG4gIC8vIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLCBlcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnlcbiAgLy8gY29ycmVzcG9uZGluZyBrZXksIGFuZCBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuIE5vdGU6IHRoaXNcbiAgLy8gYWNjb3VudHMgZm9yIGJvdGggbmFtZWQgYW5kIGluZGV4ZWQgcHJvcGVydGllcyBvbiBBcnJheXMuXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9iakVxdWl2KGFjdHVhbCwgZXhwZWN0ZWQsIG9wdHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkT3JOdWxsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0J1ZmZlciAoeCkge1xuICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnIHx8IHR5cGVvZiB4Lmxlbmd0aCAhPT0gJ251bWJlcicpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiB4LmNvcHkgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHguc2xpY2UgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHgubGVuZ3RoID4gMCAmJiB0eXBlb2YgeFswXSAhPT0gJ251bWJlcicpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG9iakVxdWl2KGEsIGIsIG9wdHMpIHtcbiAgdmFyIGksIGtleTtcbiAgaWYgKGlzVW5kZWZpbmVkT3JOdWxsKGEpIHx8IGlzVW5kZWZpbmVkT3JOdWxsKGIpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy8gYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LlxuICBpZiAoYS5wcm90b3R5cGUgIT09IGIucHJvdG90eXBlKSByZXR1cm4gZmFsc2U7XG4gIC8vfn5+SSd2ZSBtYW5hZ2VkIHRvIGJyZWFrIE9iamVjdC5rZXlzIHRocm91Z2ggc2NyZXd5IGFyZ3VtZW50cyBwYXNzaW5nLlxuICAvLyAgIENvbnZlcnRpbmcgdG8gYXJyYXkgc29sdmVzIHRoZSBwcm9ibGVtLlxuICBpZiAoaXNBcmd1bWVudHMoYSkpIHtcbiAgICBpZiAoIWlzQXJndW1lbnRzKGIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGEgPSBwU2xpY2UuY2FsbChhKTtcbiAgICBiID0gcFNsaWNlLmNhbGwoYik7XG4gICAgcmV0dXJuIGRlZXBFcXVhbChhLCBiLCBvcHRzKTtcbiAgfVxuICBpZiAoaXNCdWZmZXIoYSkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKGIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIga2EgPSBvYmplY3RLZXlzKGEpLFxuICAgICAgICBrYiA9IG9iamVjdEtleXMoYik7XG4gIH0gY2F0Y2ggKGUpIHsvL2hhcHBlbnMgd2hlbiBvbmUgaXMgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgdGhlIG90aGVyIGlzbid0XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoa2V5cyBpbmNvcnBvcmF0ZXNcbiAgLy8gaGFzT3duUHJvcGVydHkpXG4gIGlmIChrYS5sZW5ndGggIT0ga2IubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy90aGUgc2FtZSBzZXQgb2Yga2V5cyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSxcbiAga2Euc29ydCgpO1xuICBrYi5zb3J0KCk7XG4gIC8vfn5+Y2hlYXAga2V5IHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoa2FbaV0gIT0ga2JbaV0pXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy9lcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnkgY29ycmVzcG9uZGluZyBrZXksIGFuZFxuICAvL35+fnBvc3NpYmx5IGV4cGVuc2l2ZSBkZWVwIHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBrZXkgPSBrYVtpXTtcbiAgICBpZiAoIWRlZXBFcXVhbChhW2tleV0sIGJba2V5XSwgb3B0cykpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIGEgPT09IHR5cGVvZiBiO1xufVxuIiwiLypcbiAqIERhdGUgRm9ybWF0IDEuMi4zXG4gKiAoYykgMjAwNy0yMDA5IFN0ZXZlbiBMZXZpdGhhbiA8c3RldmVubGV2aXRoYW4uY29tPlxuICogTUlUIGxpY2Vuc2VcbiAqXG4gKiBJbmNsdWRlcyBlbmhhbmNlbWVudHMgYnkgU2NvdHQgVHJlbmRhIDxzY290dC50cmVuZGEubmV0PlxuICogYW5kIEtyaXMgS293YWwgPGNpeGFyLmNvbS9+a3Jpcy5rb3dhbC8+XG4gKlxuICogQWNjZXB0cyBhIGRhdGUsIGEgbWFzaywgb3IgYSBkYXRlIGFuZCBhIG1hc2suXG4gKiBSZXR1cm5zIGEgZm9ybWF0dGVkIHZlcnNpb24gb2YgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgZGF0ZSBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBkYXRlL3RpbWUuXG4gKiBUaGUgbWFzayBkZWZhdWx0cyB0byBkYXRlRm9ybWF0Lm1hc2tzLmRlZmF1bHQuXG4gKi9cblxuKGZ1bmN0aW9uKGdsb2JhbCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGRhdGVGb3JtYXQgPSAoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdG9rZW4gPSAvZHsxLDR9fG17MSw0fXx5eSg/Onl5KT98KFtIaE1zVHRdKVxcMT98W0xsb1NaV05dfFwiW15cIl0qXCJ8J1teJ10qJy9nO1xuICAgICAgdmFyIHRpbWV6b25lID0gL1xcYig/OltQTUNFQV1bU0RQXVR8KD86UGFjaWZpY3xNb3VudGFpbnxDZW50cmFsfEVhc3Rlcm58QXRsYW50aWMpICg/OlN0YW5kYXJkfERheWxpZ2h0fFByZXZhaWxpbmcpIFRpbWV8KD86R01UfFVUQykoPzpbLStdXFxkezR9KT8pXFxiL2c7XG4gICAgICB2YXIgdGltZXpvbmVDbGlwID0gL1teLStcXGRBLVpdL2c7XG4gIFxuICAgICAgLy8gUmVnZXhlcyBhbmQgc3VwcG9ydGluZyBmdW5jdGlvbnMgYXJlIGNhY2hlZCB0aHJvdWdoIGNsb3N1cmVcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZGF0ZSwgbWFzaywgdXRjLCBnbXQpIHtcbiAgXG4gICAgICAgIC8vIFlvdSBjYW4ndCBwcm92aWRlIHV0YyBpZiB5b3Ugc2tpcCBvdGhlciBhcmdzICh1c2UgdGhlICdVVEM6JyBtYXNrIHByZWZpeClcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYga2luZE9mKGRhdGUpID09PSAnc3RyaW5nJyAmJiAhL1xcZC8udGVzdChkYXRlKSkge1xuICAgICAgICAgIG1hc2sgPSBkYXRlO1xuICAgICAgICAgIGRhdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgXG4gICAgICAgIGRhdGUgPSBkYXRlIHx8IG5ldyBEYXRlO1xuICBcbiAgICAgICAgaWYoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICBkYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgIH1cbiAgXG4gICAgICAgIGlmIChpc05hTihkYXRlKSkge1xuICAgICAgICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBkYXRlJyk7XG4gICAgICAgIH1cbiAgXG4gICAgICAgIG1hc2sgPSBTdHJpbmcoZGF0ZUZvcm1hdC5tYXNrc1ttYXNrXSB8fCBtYXNrIHx8IGRhdGVGb3JtYXQubWFza3NbJ2RlZmF1bHQnXSk7XG4gIFxuICAgICAgICAvLyBBbGxvdyBzZXR0aW5nIHRoZSB1dGMvZ210IGFyZ3VtZW50IHZpYSB0aGUgbWFza1xuICAgICAgICB2YXIgbWFza1NsaWNlID0gbWFzay5zbGljZSgwLCA0KTtcbiAgICAgICAgaWYgKG1hc2tTbGljZSA9PT0gJ1VUQzonIHx8IG1hc2tTbGljZSA9PT0gJ0dNVDonKSB7XG4gICAgICAgICAgbWFzayA9IG1hc2suc2xpY2UoNCk7XG4gICAgICAgICAgdXRjID0gdHJ1ZTtcbiAgICAgICAgICBpZiAobWFza1NsaWNlID09PSAnR01UOicpIHtcbiAgICAgICAgICAgIGdtdCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gIFxuICAgICAgICB2YXIgXyA9IHV0YyA/ICdnZXRVVEMnIDogJ2dldCc7XG4gICAgICAgIHZhciBkID0gZGF0ZVtfICsgJ0RhdGUnXSgpO1xuICAgICAgICB2YXIgRCA9IGRhdGVbXyArICdEYXknXSgpO1xuICAgICAgICB2YXIgbSA9IGRhdGVbXyArICdNb250aCddKCk7XG4gICAgICAgIHZhciB5ID0gZGF0ZVtfICsgJ0Z1bGxZZWFyJ10oKTtcbiAgICAgICAgdmFyIEggPSBkYXRlW18gKyAnSG91cnMnXSgpO1xuICAgICAgICB2YXIgTSA9IGRhdGVbXyArICdNaW51dGVzJ10oKTtcbiAgICAgICAgdmFyIHMgPSBkYXRlW18gKyAnU2Vjb25kcyddKCk7XG4gICAgICAgIHZhciBMID0gZGF0ZVtfICsgJ01pbGxpc2Vjb25kcyddKCk7XG4gICAgICAgIHZhciBvID0gdXRjID8gMCA6IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICAgICAgdmFyIFcgPSBnZXRXZWVrKGRhdGUpO1xuICAgICAgICB2YXIgTiA9IGdldERheU9mV2VlayhkYXRlKTtcbiAgICAgICAgdmFyIGZsYWdzID0ge1xuICAgICAgICAgIGQ6ICAgIGQsXG4gICAgICAgICAgZGQ6ICAgcGFkKGQpLFxuICAgICAgICAgIGRkZDogIGRhdGVGb3JtYXQuaTE4bi5kYXlOYW1lc1tEXSxcbiAgICAgICAgICBkZGRkOiBkYXRlRm9ybWF0LmkxOG4uZGF5TmFtZXNbRCArIDddLFxuICAgICAgICAgIG06ICAgIG0gKyAxLFxuICAgICAgICAgIG1tOiAgIHBhZChtICsgMSksXG4gICAgICAgICAgbW1tOiAgZGF0ZUZvcm1hdC5pMThuLm1vbnRoTmFtZXNbbV0sXG4gICAgICAgICAgbW1tbTogZGF0ZUZvcm1hdC5pMThuLm1vbnRoTmFtZXNbbSArIDEyXSxcbiAgICAgICAgICB5eTogICBTdHJpbmcoeSkuc2xpY2UoMiksXG4gICAgICAgICAgeXl5eTogeSxcbiAgICAgICAgICBoOiAgICBIICUgMTIgfHwgMTIsXG4gICAgICAgICAgaGg6ICAgcGFkKEggJSAxMiB8fCAxMiksXG4gICAgICAgICAgSDogICAgSCxcbiAgICAgICAgICBISDogICBwYWQoSCksXG4gICAgICAgICAgTTogICAgTSxcbiAgICAgICAgICBNTTogICBwYWQoTSksXG4gICAgICAgICAgczogICAgcyxcbiAgICAgICAgICBzczogICBwYWQocyksXG4gICAgICAgICAgbDogICAgcGFkKEwsIDMpLFxuICAgICAgICAgIEw6ICAgIHBhZChNYXRoLnJvdW5kKEwgLyAxMCkpLFxuICAgICAgICAgIHQ6ICAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbMF0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzFdLFxuICAgICAgICAgIHR0OiAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbMl0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzNdLFxuICAgICAgICAgIFQ6ICAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbNF0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzVdLFxuICAgICAgICAgIFRUOiAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbNl0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzddLFxuICAgICAgICAgIFo6ICAgIGdtdCA/ICdHTVQnIDogdXRjID8gJ1VUQycgOiAoU3RyaW5nKGRhdGUpLm1hdGNoKHRpbWV6b25lKSB8fCBbJyddKS5wb3AoKS5yZXBsYWNlKHRpbWV6b25lQ2xpcCwgJycpLFxuICAgICAgICAgIG86ICAgIChvID4gMCA/ICctJyA6ICcrJykgKyBwYWQoTWF0aC5mbG9vcihNYXRoLmFicyhvKSAvIDYwKSAqIDEwMCArIE1hdGguYWJzKG8pICUgNjAsIDQpLFxuICAgICAgICAgIFM6ICAgIFsndGgnLCAnc3QnLCAnbmQnLCAncmQnXVtkICUgMTAgPiAzID8gMCA6IChkICUgMTAwIC0gZCAlIDEwICE9IDEwKSAqIGQgJSAxMF0sXG4gICAgICAgICAgVzogICAgVyxcbiAgICAgICAgICBOOiAgICBOXG4gICAgICAgIH07XG4gIFxuICAgICAgICByZXR1cm4gbWFzay5yZXBsYWNlKHRva2VuLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICBpZiAobWF0Y2ggaW4gZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbGFnc1ttYXRjaF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtYXRjaC5zbGljZSgxLCBtYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0pKCk7XG5cbiAgZGF0ZUZvcm1hdC5tYXNrcyA9IHtcbiAgICAnZGVmYXVsdCc6ICAgICAgICAgICAgICAgJ2RkZCBtbW0gZGQgeXl5eSBISDpNTTpzcycsXG4gICAgJ3Nob3J0RGF0ZSc6ICAgICAgICAgICAgICdtL2QveXknLFxuICAgICdtZWRpdW1EYXRlJzogICAgICAgICAgICAnbW1tIGQsIHl5eXknLFxuICAgICdsb25nRGF0ZSc6ICAgICAgICAgICAgICAnbW1tbSBkLCB5eXl5JyxcbiAgICAnZnVsbERhdGUnOiAgICAgICAgICAgICAgJ2RkZGQsIG1tbW0gZCwgeXl5eScsXG4gICAgJ3Nob3J0VGltZSc6ICAgICAgICAgICAgICdoOk1NIFRUJyxcbiAgICAnbWVkaXVtVGltZSc6ICAgICAgICAgICAgJ2g6TU06c3MgVFQnLFxuICAgICdsb25nVGltZSc6ICAgICAgICAgICAgICAnaDpNTTpzcyBUVCBaJyxcbiAgICAnaXNvRGF0ZSc6ICAgICAgICAgICAgICAgJ3l5eXktbW0tZGQnLFxuICAgICdpc29UaW1lJzogICAgICAgICAgICAgICAnSEg6TU06c3MnLFxuICAgICdpc29EYXRlVGltZSc6ICAgICAgICAgICAneXl5eS1tbS1kZFxcJ1RcXCdISDpNTTpzc28nLFxuICAgICdpc29VdGNEYXRlVGltZSc6ICAgICAgICAnVVRDOnl5eXktbW0tZGRcXCdUXFwnSEg6TU06c3NcXCdaXFwnJyxcbiAgICAnZXhwaXJlc0hlYWRlckZvcm1hdCc6ICAgJ2RkZCwgZGQgbW1tIHl5eXkgSEg6TU06c3MgWidcbiAgfTtcblxuICAvLyBJbnRlcm5hdGlvbmFsaXphdGlvbiBzdHJpbmdzXG4gIGRhdGVGb3JtYXQuaTE4biA9IHtcbiAgICBkYXlOYW1lczogW1xuICAgICAgJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCcsXG4gICAgICAnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXG4gICAgXSxcbiAgICBtb250aE5hbWVzOiBbXG4gICAgICAnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnLFxuICAgICAgJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXG4gICAgXSxcbiAgICB0aW1lTmFtZXM6IFtcbiAgICAgICdhJywgJ3AnLCAnYW0nLCAncG0nLCAnQScsICdQJywgJ0FNJywgJ1BNJ1xuICAgIF1cbiAgfTtcblxuZnVuY3Rpb24gcGFkKHZhbCwgbGVuKSB7XG4gIHZhbCA9IFN0cmluZyh2YWwpO1xuICBsZW4gPSBsZW4gfHwgMjtcbiAgd2hpbGUgKHZhbC5sZW5ndGggPCBsZW4pIHtcbiAgICB2YWwgPSAnMCcgKyB2YWw7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIElTTyA4NjAxIHdlZWsgbnVtYmVyXG4gKiBCYXNlZCBvbiBjb21tZW50cyBmcm9tXG4gKiBodHRwOi8vdGVjaGJsb2cucHJvY3VyaW9zLm5sL2svbjYxOC9uZXdzL3ZpZXcvMzM3OTYvMTQ4NjMvQ2FsY3VsYXRlLUlTTy04NjAxLXdlZWstYW5kLXllYXItaW4tamF2YXNjcmlwdC5odG1sXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBgZGF0ZWBcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0V2VlayhkYXRlKSB7XG4gIC8vIFJlbW92ZSB0aW1lIGNvbXBvbmVudHMgb2YgZGF0ZVxuICB2YXIgdGFyZ2V0VGh1cnNkYXkgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpO1xuXG4gIC8vIENoYW5nZSBkYXRlIHRvIFRodXJzZGF5IHNhbWUgd2Vla1xuICB0YXJnZXRUaHVyc2RheS5zZXREYXRlKHRhcmdldFRodXJzZGF5LmdldERhdGUoKSAtICgodGFyZ2V0VGh1cnNkYXkuZ2V0RGF5KCkgKyA2KSAlIDcpICsgMyk7XG5cbiAgLy8gVGFrZSBKYW51YXJ5IDR0aCBhcyBpdCBpcyBhbHdheXMgaW4gd2VlayAxIChzZWUgSVNPIDg2MDEpXG4gIHZhciBmaXJzdFRodXJzZGF5ID0gbmV3IERhdGUodGFyZ2V0VGh1cnNkYXkuZ2V0RnVsbFllYXIoKSwgMCwgNCk7XG5cbiAgLy8gQ2hhbmdlIGRhdGUgdG8gVGh1cnNkYXkgc2FtZSB3ZWVrXG4gIGZpcnN0VGh1cnNkYXkuc2V0RGF0ZShmaXJzdFRodXJzZGF5LmdldERhdGUoKSAtICgoZmlyc3RUaHVyc2RheS5nZXREYXkoKSArIDYpICUgNykgKyAzKTtcblxuICAvLyBDaGVjayBpZiBkYXlsaWdodC1zYXZpbmctdGltZS1zd2l0Y2ggb2NjdXJyZWQgYW5kIGNvcnJlY3QgZm9yIGl0XG4gIHZhciBkcyA9IHRhcmdldFRodXJzZGF5LmdldFRpbWV6b25lT2Zmc2V0KCkgLSBmaXJzdFRodXJzZGF5LmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHRhcmdldFRodXJzZGF5LnNldEhvdXJzKHRhcmdldFRodXJzZGF5LmdldEhvdXJzKCkgLSBkcyk7XG5cbiAgLy8gTnVtYmVyIG9mIHdlZWtzIGJldHdlZW4gdGFyZ2V0IFRodXJzZGF5IGFuZCBmaXJzdCBUaHVyc2RheVxuICB2YXIgd2Vla0RpZmYgPSAodGFyZ2V0VGh1cnNkYXkgLSBmaXJzdFRodXJzZGF5KSAvICg4NjQwMDAwMCo3KTtcbiAgcmV0dXJuIDEgKyBNYXRoLmZsb29yKHdlZWtEaWZmKTtcbn1cblxuLyoqXG4gKiBHZXQgSVNPLTg2MDEgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF5IG9mIHRoZSB3ZWVrXG4gKiAxIChmb3IgTW9uZGF5KSB0aHJvdWdoIDcgKGZvciBTdW5kYXkpXG4gKiBcbiAqIEBwYXJhbSAge09iamVjdH0gYGRhdGVgXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldERheU9mV2VlayhkYXRlKSB7XG4gIHZhciBkb3cgPSBkYXRlLmdldERheSgpO1xuICBpZihkb3cgPT09IDApIHtcbiAgICBkb3cgPSA3O1xuICB9XG4gIHJldHVybiBkb3c7XG59XG5cbi8qKlxuICoga2luZC1vZiBzaG9ydGN1dFxuICogQHBhcmFtICB7Kn0gdmFsXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGtpbmRPZih2YWwpIHtcbiAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnbnVsbCc7XG4gIH1cblxuICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbDtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICByZXR1cm4gJ2FycmF5JztcbiAgfVxuXG4gIHJldHVybiB7fS50b1N0cmluZy5jYWxsKHZhbClcbiAgICAuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG5cblxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBkYXRlRm9ybWF0O1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZGF0ZUZvcm1hdDtcbiAgfSBlbHNlIHtcbiAgICBnbG9iYWwuZGF0ZUZvcm1hdCA9IGRhdGVGb3JtYXQ7XG4gIH1cbn0pKHRoaXMpO1xuIiwiLyohXG4gKiBwYWQtbGVmdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvcGFkLWxlZnQ+XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEpvbiBTY2hsaW5rZXJ0LlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHJlcGVhdCA9IHJlcXVpcmUoJ3JlcGVhdC1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYWRMZWZ0KHN0ciwgbnVtLCBjaCkge1xuICBzdHIgPSBzdHIudG9TdHJpbmcoKTtcblxuICBpZiAodHlwZW9mIG51bSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgaWYgKGNoID09PSAwKSB7XG4gICAgY2ggPSAnMCc7XG4gIH0gZWxzZSBpZiAoY2gpIHtcbiAgICBjaCA9IGNoLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgY2ggPSAnICc7XG4gIH1cblxuICByZXR1cm4gcmVwZWF0KGNoLCBudW0gLSBzdHIubGVuZ3RoKSArIHN0cjtcbn07XG4iLCJpbXBvcnQgZGF0ZWZvcm1hdCBmcm9tICdkYXRlZm9ybWF0JztcbmltcG9ydCBhc3NpZ24gZnJvbSAnb2JqZWN0LWFzc2lnbic7XG5pbXBvcnQgcGFkTGVmdCBmcm9tICdwYWQtbGVmdCc7XG5pbXBvcnQgeyBnZXRDbGllbnRBUEkgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5sZXQgbGluaztcbmxldCBkZWZhdWx0RXh0cyA9IHsgZXh0ZW5zaW9uOiAnJywgcHJlZml4OiAnJywgc3VmZml4OiAnJyB9O1xuXG4vLyBBbHRlcm5hdGl2ZSBzb2x1dGlvbiBmb3Igc2F2aW5nIGZpbGVzLFxuLy8gYSBiaXQgc2xvd2VyIGFuZCBkb2VzIG5vdCB3b3JrIGluIFNhZmFyaVxuLy8gZnVuY3Rpb24gZmV0Y2hCbG9iRnJvbURhdGFVUkwgKGRhdGFVUkwpIHtcbi8vICAgcmV0dXJuIHdpbmRvdy5mZXRjaChkYXRhVVJMKS50aGVuKHJlcyA9PiByZXMuYmxvYigpKTtcbi8vIH1cblxuY29uc3Qgc3VwcG9ydGVkRW5jb2RpbmdzID0gW1xuICAnaW1hZ2UvcG5nJyxcbiAgJ2ltYWdlL2pwZWcnLFxuICAnaW1hZ2Uvd2VicCdcbl07XG5cbmZ1bmN0aW9uIHN0cmVhbSAoaXNTdGFydCwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgb3B0cyA9IGFzc2lnbih7fSwgZGVmYXVsdEV4dHMsIG9wdHMpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gcmVzb2x2ZUZpbGVuYW1lKE9iamVjdC5hc3NpZ24oe30sIG9wdHMsIHtcbiAgICAgIGV4dGVuc2lvbjogJycsXG4gICAgICBmcmFtZTogdW5kZWZpbmVkXG4gICAgfSkpO1xuICAgIGNvbnN0IGZ1bmMgPSBpc1N0YXJ0ID8gJ3N0cmVhbVN0YXJ0JyA6ICdzdHJlYW1FbmQnO1xuICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICAgIGlmIChjbGllbnQgJiYgY2xpZW50Lm91dHB1dCAmJiB0eXBlb2YgY2xpZW50W2Z1bmNdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gY2xpZW50W2Z1bmNdKGFzc2lnbih7fSwgb3B0cywgeyBmaWxlbmFtZSB9KSlcbiAgICAgICAgLnRoZW4oZXYgPT4gcmVzb2x2ZShldikpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZSh7IGZpbGVuYW1lLCBjbGllbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJlYW1TdGFydCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBzdHJlYW0odHJ1ZSwgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJlYW1FbmQgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gc3RyZWFtKGZhbHNlLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydENhbnZhcyAoY2FudmFzLCBvcHQgPSB7fSkge1xuICBjb25zdCBlbmNvZGluZyA9IG9wdC5lbmNvZGluZyB8fCAnaW1hZ2UvcG5nJztcbiAgaWYgKCFzdXBwb3J0ZWRFbmNvZGluZ3MuaW5jbHVkZXMoZW5jb2RpbmcpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2FudmFzIGVuY29kaW5nICR7ZW5jb2Rpbmd9YCk7XG4gIGxldCBleHRlbnNpb24gPSAoZW5jb2Rpbmcuc3BsaXQoJy8nKVsxXSB8fCAnJykucmVwbGFjZSgvanBlZy9pLCAnanBnJyk7XG4gIGlmIChleHRlbnNpb24pIGV4dGVuc2lvbiA9IGAuJHtleHRlbnNpb259YC50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4ge1xuICAgIGV4dGVuc2lvbixcbiAgICB0eXBlOiBlbmNvZGluZyxcbiAgICBkYXRhVVJMOiBjYW52YXMudG9EYXRhVVJMKGVuY29kaW5nLCBvcHQuZW5jb2RpbmdRdWFsaXR5KVxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCbG9iRnJvbURhdGFVUkwgKGRhdGFVUkwpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3Qgc3BsaXRJbmRleCA9IGRhdGFVUkwuaW5kZXhPZignLCcpO1xuICAgIGlmIChzcGxpdEluZGV4ID09PSAtMSkge1xuICAgICAgcmVzb2x2ZShuZXcgd2luZG93LkJsb2IoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhc2U2NCA9IGRhdGFVUkwuc2xpY2Uoc3BsaXRJbmRleCArIDEpO1xuICAgIGNvbnN0IGJ5dGVTdHJpbmcgPSB3aW5kb3cuYXRvYihiYXNlNjQpO1xuICAgIGNvbnN0IHR5cGUgPSBkYXRhVVJMLnNsaWNlKDAsIHNwbGl0SW5kZXgpO1xuICAgIGNvbnN0IG1pbWVNYXRjaCA9IC9kYXRhOihbXjtdKykvLmV4ZWModHlwZSk7XG4gICAgY29uc3QgbWltZSA9IChtaW1lTWF0Y2ggPyBtaW1lTWF0Y2hbMV0gOiAnJykgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFiID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVTdHJpbmcubGVuZ3RoKTtcbiAgICBjb25zdCBpYSA9IG5ldyBVaW50OEFycmF5KGFiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlhW2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICByZXNvbHZlKG5ldyB3aW5kb3cuQmxvYihbIGFiIF0sIHsgdHlwZTogbWltZSB9KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZURhdGFVUkwgKGRhdGFVUkwsIG9wdHMgPSB7fSkge1xuICByZXR1cm4gY3JlYXRlQmxvYkZyb21EYXRhVVJMKGRhdGFVUkwpXG4gICAgLnRoZW4oYmxvYiA9PiBzYXZlQmxvYihibG9iLCBvcHRzKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlQmxvYiAoYmxvYiwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBvcHRzID0gYXNzaWduKHt9LCBkZWZhdWx0RXh0cywgb3B0cyk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBvcHRzLmZpbGVuYW1lO1xuXG4gICAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gICAgaWYgKGNsaWVudCAmJiB0eXBlb2YgY2xpZW50LnNhdmVCbG9iID09PSAnZnVuY3Rpb24nICYmIGNsaWVudC5vdXRwdXQpIHtcbiAgICAgIC8vIG5hdGl2ZSBzYXZpbmcgdXNpbmcgYSBDTEkgdG9vbFxuICAgICAgcmV0dXJuIGNsaWVudC5zYXZlQmxvYihibG9iLCBhc3NpZ24oe30sIG9wdHMsIHsgZmlsZW5hbWUgfSkpXG4gICAgICAgIC50aGVuKGV2ID0+IHJlc29sdmUoZXYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9yY2UgZG93bmxvYWRcbiAgICAgIGlmICghbGluaykge1xuICAgICAgICBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBsaW5rLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgbGluay50YXJnZXQgPSAnX2JsYW5rJztcbiAgICAgIH1cbiAgICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICAgIGxpbmsuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgIGxpbmsub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgbGluay5vbmNsaWNrID0gbm9vcDtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwoYmxvYik7XG4gICAgICAgICAgaWYgKGxpbmsucGFyZW50RWxlbWVudCkgbGluay5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxpbmspO1xuICAgICAgICAgIGxpbmsucmVtb3ZlQXR0cmlidXRlKCdocmVmJyk7XG4gICAgICAgICAgcmVzb2x2ZSh7IGZpbGVuYW1lLCBjbGllbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVGaWxlIChkYXRhLCBvcHRzID0ge30pIHtcbiAgY29uc3QgcGFydHMgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFsgZGF0YSBdO1xuICBjb25zdCBibG9iID0gbmV3IHdpbmRvdy5CbG9iKHBhcnRzLCB7IHR5cGU6IG9wdHMudHlwZSB8fCAnJyB9KTtcbiAgcmV0dXJuIHNhdmVCbG9iKGJsb2IsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZVN0YW1wICgpIHtcbiAgY29uc3QgZGF0ZUZvcm1hdFN0ciA9IGB5eXl5Lm1tLmRkLUhILk1NLnNzYDtcbiAgcmV0dXJuIGRhdGVmb3JtYXQobmV3IERhdGUoKSwgZGF0ZUZvcm1hdFN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0RmlsZSAocHJlZml4ID0gJycsIHN1ZmZpeCA9ICcnLCBleHQpIHtcbiAgLy8gY29uc3QgZGF0ZUZvcm1hdFN0ciA9IGB5eXl5Lm1tLmRkLUhILk1NLnNzYDtcbiAgY29uc3QgZGF0ZUZvcm1hdFN0ciA9IGB5eXl5LW1tLWRkICdhdCcgaC5NTS5zcyBUVGA7XG4gIHJldHVybiBgJHtwcmVmaXh9JHtkYXRlZm9ybWF0KG5ldyBEYXRlKCksIGRhdGVGb3JtYXRTdHIpfSR7c3VmZml4fSR7ZXh0fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRmlsZW5hbWUgKG9wdCA9IHt9KSB7XG4gIG9wdCA9IGFzc2lnbih7fSwgb3B0KTtcblxuICAvLyBDdXN0b20gZmlsZW5hbWUgZnVuY3Rpb25cbiAgaWYgKHR5cGVvZiBvcHQuZmlsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBvcHQuZmlsZShvcHQpO1xuICB9IGVsc2UgaWYgKG9wdC5maWxlKSB7XG4gICAgcmV0dXJuIG9wdC5maWxlO1xuICB9XG5cbiAgbGV0IGZyYW1lID0gbnVsbDtcbiAgbGV0IGV4dGVuc2lvbiA9ICcnO1xuICBpZiAodHlwZW9mIG9wdC5leHRlbnNpb24gPT09ICdzdHJpbmcnKSBleHRlbnNpb24gPSBvcHQuZXh0ZW5zaW9uO1xuXG4gIGlmICh0eXBlb2Ygb3B0LmZyYW1lID09PSAnbnVtYmVyJykge1xuICAgIGxldCB0b3RhbEZyYW1lcztcbiAgICBpZiAodHlwZW9mIG9wdC50b3RhbEZyYW1lcyA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRvdGFsRnJhbWVzID0gb3B0LnRvdGFsRnJhbWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b3RhbEZyYW1lcyA9IE1hdGgubWF4KDEwMDAwLCBvcHQuZnJhbWUpO1xuICAgIH1cbiAgICBmcmFtZSA9IHBhZExlZnQoU3RyaW5nKG9wdC5mcmFtZSksIFN0cmluZyh0b3RhbEZyYW1lcykubGVuZ3RoLCAnMCcpO1xuICB9XG5cbiAgY29uc3QgbGF5ZXJTdHIgPSBpc0Zpbml0ZShvcHQudG90YWxMYXllcnMpICYmIGlzRmluaXRlKG9wdC5sYXllcikgJiYgb3B0LnRvdGFsTGF5ZXJzID4gMSA/IGAke29wdC5sYXllcn1gIDogJyc7XG4gIGlmIChmcmFtZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIFsgbGF5ZXJTdHIsIGZyYW1lIF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy0nKSArIGV4dGVuc2lvbjtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkZWZhdWx0RmlsZU5hbWUgPSBvcHQudGltZVN0YW1wO1xuICAgIHJldHVybiBbIG9wdC5wcmVmaXgsIG9wdC5uYW1lIHx8IGRlZmF1bHRGaWxlTmFtZSwgbGF5ZXJTdHIsIG9wdC5oYXNoLCBvcHQuc3VmZml4IF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy0nKSArIGV4dGVuc2lvbjtcbiAgfVxufVxuIiwiLy8gSGFuZGxlIHNvbWUgY29tbW9uIHR5cG9zXG5jb25zdCBjb21tb25UeXBvcyA9IHtcbiAgZGltZW5zaW9uOiAnZGltZW5zaW9ucycsXG4gIGFuaW1hdGVkOiAnYW5pbWF0ZScsXG4gIGFuaW1hdGluZzogJ2FuaW1hdGUnLFxuICB1bml0OiAndW5pdHMnLFxuICBQNTogJ3A1JyxcbiAgcGl4ZWxsYXRlZDogJ3BpeGVsYXRlZCcsXG4gIGxvb3Bpbmc6ICdsb29wJyxcbiAgcGl4ZWxQZXJJbmNoOiAncGl4ZWxzJ1xufTtcblxuLy8gSGFuZGxlIGFsbCBvdGhlciB0eXBvc1xuY29uc3QgYWxsS2V5cyA9IFtcbiAgJ2RpbWVuc2lvbnMnLCAndW5pdHMnLCAncGl4ZWxzUGVySW5jaCcsICdvcmllbnRhdGlvbicsXG4gICdzY2FsZVRvRml0JywgJ3NjYWxlVG9WaWV3JywgJ2JsZWVkJywgJ3BpeGVsUmF0aW8nLFxuICAnZXhwb3J0UGl4ZWxSYXRpbycsICdtYXhQaXhlbFJhdGlvJywgJ3NjYWxlQ29udGV4dCcsXG4gICdyZXNpemVDYW52YXMnLCAnc3R5bGVDYW52YXMnLCAnY2FudmFzJywgJ2NvbnRleHQnLCAnYXR0cmlidXRlcycsXG4gICdwYXJlbnQnLCAnZmlsZScsICduYW1lJywgJ3ByZWZpeCcsICdzdWZmaXgnLCAnYW5pbWF0ZScsICdwbGF5aW5nJyxcbiAgJ2xvb3AnLCAnZHVyYXRpb24nLCAndG90YWxGcmFtZXMnLCAnZnBzJywgJ3BsYXliYWNrUmF0ZScsICd0aW1lU2NhbGUnLFxuICAnZnJhbWUnLCAndGltZScsICdmbHVzaCcsICdwaXhlbGF0ZWQnLCAnaG90a2V5cycsICdwNScsICdpZCcsXG4gICdzY2FsZVRvRml0UGFkZGluZycsICdkYXRhJywgJ3BhcmFtcycsICdlbmNvZGluZycsICdlbmNvZGluZ1F1YWxpdHknXG5dO1xuXG4vLyBUaGlzIGlzIGZhaXJseSBvcGluaW9uYXRlZCBhbmQgZm9yY2VzIHVzZXJzIHRvIHVzZSB0aGUgJ2RhdGEnIHBhcmFtZXRlclxuLy8gaWYgdGhleSB3YW50IHRvIHBhc3MgYWxvbmcgbm9uLXNldHRpbmcgb2JqZWN0cy4uLlxuZXhwb3J0IGNvbnN0IGNoZWNrU2V0dGluZ3MgPSAoc2V0dGluZ3MpID0+IHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNldHRpbmdzKTtcbiAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKGtleSBpbiBjb21tb25UeXBvcykge1xuICAgICAgY29uc3QgYWN0dWFsID0gY29tbW9uVHlwb3Nba2V5XTtcbiAgICAgIGNvbnNvbGUud2FybihgW2NhbnZhcy1za2V0Y2hdIENvdWxkIG5vdCByZWNvZ25pemUgdGhlIHNldHRpbmcgXCIke2tleX1cIiwgZGlkIHlvdSBtZWFuIFwiJHthY3R1YWx9XCI/YCk7XG4gICAgfSBlbHNlIGlmICghYWxsS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFtjYW52YXMtc2tldGNoXSBDb3VsZCBub3QgcmVjb2duaXplIHRoZSBzZXR0aW5nIFwiJHtrZXl9XCJgKTtcbiAgICB9XG4gIH0pO1xufTtcbiIsImNvbnN0IGRlZmF1bHRVbml0cyA9ICdtbSc7XG5cbmNvbnN0IGRhdGEgPSBbXG4gIC8vIENvbW1vbiBQYXBlciBTaXplc1xuICAvLyAoTW9zdGx5IE5vcnRoLUFtZXJpY2FuIGJhc2VkKVxuICBbICdwb3N0Y2FyZCcsIDEwMS42LCAxNTIuNCBdLFxuICBbICdwb3N0ZXItc21hbGwnLCAyODAsIDQzMCBdLFxuICBbICdwb3N0ZXInLCA0NjAsIDYxMCBdLFxuICBbICdwb3N0ZXItbGFyZ2UnLCA2MTAsIDkxMCBdLFxuICBbICdidXNpbmVzcy1jYXJkJywgNTAuOCwgODguOSBdLFxuXG4gIC8vIFBob3RvZ3JhcGhpYyBQcmludCBQYXBlciBTaXplc1xuICBbICcycicsIDY0LCA4OSBdLFxuICBbICczcicsIDg5LCAxMjcgXSxcbiAgWyAnNHInLCAxMDIsIDE1MiBdLFxuICBbICc1cicsIDEyNywgMTc4IF0sIC8vIDXigLN4N+KAs1xuICBbICc2cicsIDE1MiwgMjAzIF0sIC8vIDbigLN4OOKAs1xuICBbICc4cicsIDIwMywgMjU0IF0sIC8vIDjigLN4MTDigLNcbiAgWyAnMTByJywgMjU0LCAzMDUgXSwgLy8gMTDigLN4MTLigLNcbiAgWyAnMTFyJywgMjc5LCAzNTYgXSwgLy8gMTHigLN4MTTigLNcbiAgWyAnMTJyJywgMzA1LCAzODEgXSxcblxuICAvLyBTdGFuZGFyZCBQYXBlciBTaXplc1xuICBbICdhMCcsIDg0MSwgMTE4OSBdLFxuICBbICdhMScsIDU5NCwgODQxIF0sXG4gIFsgJ2EyJywgNDIwLCA1OTQgXSxcbiAgWyAnYTMnLCAyOTcsIDQyMCBdLFxuICBbICdhNCcsIDIxMCwgMjk3IF0sXG4gIFsgJ2E1JywgMTQ4LCAyMTAgXSxcbiAgWyAnYTYnLCAxMDUsIDE0OCBdLFxuICBbICdhNycsIDc0LCAxMDUgXSxcbiAgWyAnYTgnLCA1MiwgNzQgXSxcbiAgWyAnYTknLCAzNywgNTIgXSxcbiAgWyAnYTEwJywgMjYsIDM3IF0sXG4gIFsgJzJhMCcsIDExODksIDE2ODIgXSxcbiAgWyAnNGEwJywgMTY4MiwgMjM3OCBdLFxuICBbICdiMCcsIDEwMDAsIDE0MTQgXSxcbiAgWyAnYjEnLCA3MDcsIDEwMDAgXSxcbiAgWyAnYjErJywgNzIwLCAxMDIwIF0sXG4gIFsgJ2IyJywgNTAwLCA3MDcgXSxcbiAgWyAnYjIrJywgNTIwLCA3MjAgXSxcbiAgWyAnYjMnLCAzNTMsIDUwMCBdLFxuICBbICdiNCcsIDI1MCwgMzUzIF0sXG4gIFsgJ2I1JywgMTc2LCAyNTAgXSxcbiAgWyAnYjYnLCAxMjUsIDE3NiBdLFxuICBbICdiNycsIDg4LCAxMjUgXSxcbiAgWyAnYjgnLCA2MiwgODggXSxcbiAgWyAnYjknLCA0NCwgNjIgXSxcbiAgWyAnYjEwJywgMzEsIDQ0IF0sXG4gIFsgJ2IxMScsIDIyLCAzMiBdLFxuICBbICdiMTInLCAxNiwgMjIgXSxcbiAgWyAnYzAnLCA5MTcsIDEyOTcgXSxcbiAgWyAnYzEnLCA2NDgsIDkxNyBdLFxuICBbICdjMicsIDQ1OCwgNjQ4IF0sXG4gIFsgJ2MzJywgMzI0LCA0NTggXSxcbiAgWyAnYzQnLCAyMjksIDMyNCBdLFxuICBbICdjNScsIDE2MiwgMjI5IF0sXG4gIFsgJ2M2JywgMTE0LCAxNjIgXSxcbiAgWyAnYzcnLCA4MSwgMTE0IF0sXG4gIFsgJ2M4JywgNTcsIDgxIF0sXG4gIFsgJ2M5JywgNDAsIDU3IF0sXG4gIFsgJ2MxMCcsIDI4LCA0MCBdLFxuICBbICdjMTEnLCAyMiwgMzIgXSxcbiAgWyAnYzEyJywgMTYsIDIyIF0sXG5cbiAgLy8gVXNlIGluY2hlcyBmb3IgTm9ydGggQW1lcmljYW4gc2l6ZXMsXG4gIC8vIGFzIGl0IHByb2R1Y2VzIGxlc3MgZmxvYXQgcHJlY2lzaW9uIGVycm9yc1xuICBbICdoYWxmLWxldHRlcicsIDUuNSwgOC41LCAnaW4nIF0sXG4gIFsgJ2xldHRlcicsIDguNSwgMTEsICdpbicgXSxcbiAgWyAnbGVnYWwnLCA4LjUsIDE0LCAnaW4nIF0sXG4gIFsgJ2p1bmlvci1sZWdhbCcsIDUsIDgsICdpbicgXSxcbiAgWyAnbGVkZ2VyJywgMTEsIDE3LCAnaW4nIF0sXG4gIFsgJ3RhYmxvaWQnLCAxMSwgMTcsICdpbicgXSxcbiAgWyAnYW5zaS1hJywgOC41LCAxMS4wLCAnaW4nIF0sXG4gIFsgJ2Fuc2ktYicsIDExLjAsIDE3LjAsICdpbicgXSxcbiAgWyAnYW5zaS1jJywgMTcuMCwgMjIuMCwgJ2luJyBdLFxuICBbICdhbnNpLWQnLCAyMi4wLCAzNC4wLCAnaW4nIF0sXG4gIFsgJ2Fuc2ktZScsIDM0LjAsIDQ0LjAsICdpbicgXSxcbiAgWyAnYXJjaC1hJywgOSwgMTIsICdpbicgXSxcbiAgWyAnYXJjaC1iJywgMTIsIDE4LCAnaW4nIF0sXG4gIFsgJ2FyY2gtYycsIDE4LCAyNCwgJ2luJyBdLFxuICBbICdhcmNoLWQnLCAyNCwgMzYsICdpbicgXSxcbiAgWyAnYXJjaC1lJywgMzYsIDQ4LCAnaW4nIF0sXG4gIFsgJ2FyY2gtZTEnLCAzMCwgNDIsICdpbicgXSxcbiAgWyAnYXJjaC1lMicsIDI2LCAzOCwgJ2luJyBdLFxuICBbICdhcmNoLWUzJywgMjcsIDM5LCAnaW4nIF1cbl07XG5cbmV4cG9ydCBkZWZhdWx0IGRhdGEucmVkdWNlKChkaWN0LCBwcmVzZXQpID0+IHtcbiAgY29uc3QgaXRlbSA9IHtcbiAgICB1bml0czogcHJlc2V0WzNdIHx8IGRlZmF1bHRVbml0cyxcbiAgICBkaW1lbnNpb25zOiBbIHByZXNldFsxXSwgcHJlc2V0WzJdIF1cbiAgfTtcbiAgZGljdFtwcmVzZXRbMF1dID0gaXRlbTtcbiAgZGljdFtwcmVzZXRbMF0ucmVwbGFjZSgvLS9nLCAnICcpXSA9IGl0ZW07XG4gIHJldHVybiBkaWN0O1xufSwge30pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gYXJndW1lbnRzW2ldO1xuICAgIH1cbn07XG4iLCJ2YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcbnZhciB1bml0cyA9IFsgJ21tJywgJ2NtJywgJ20nLCAncGMnLCAncHQnLCAnaW4nLCAnZnQnLCAncHgnIF07XG5cbnZhciBjb252ZXJzaW9ucyA9IHtcbiAgLy8gbWV0cmljXG4gIG06IHtcbiAgICBzeXN0ZW06ICdtZXRyaWMnLFxuICAgIGZhY3RvcjogMVxuICB9LFxuICBjbToge1xuICAgIHN5c3RlbTogJ21ldHJpYycsXG4gICAgZmFjdG9yOiAxIC8gMTAwXG4gIH0sXG4gIG1tOiB7XG4gICAgc3lzdGVtOiAnbWV0cmljJyxcbiAgICBmYWN0b3I6IDEgLyAxMDAwXG4gIH0sXG4gIC8vIGltcGVyaWFsXG4gIHB0OiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMSAvIDcyXG4gIH0sXG4gIHBjOiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMSAvIDZcbiAgfSxcbiAgaW46IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxXG4gIH0sXG4gIGZ0OiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMTJcbiAgfVxufTtcblxuY29uc3QgYW5jaG9ycyA9IHtcbiAgbWV0cmljOiB7XG4gICAgdW5pdDogJ20nLFxuICAgIHJhdGlvOiAxIC8gMC4wMjU0XG4gIH0sXG4gIGltcGVyaWFsOiB7XG4gICAgdW5pdDogJ2luJyxcbiAgICByYXRpbzogMC4wMjU0XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJvdW5kICh2YWx1ZSwgZGVjaW1hbHMpIHtcbiAgcmV0dXJuIE51bWJlcihNYXRoLnJvdW5kKHZhbHVlICsgJ2UnICsgZGVjaW1hbHMpICsgJ2UtJyArIGRlY2ltYWxzKTtcbn1cblxuZnVuY3Rpb24gY29udmVydERpc3RhbmNlICh2YWx1ZSwgZnJvbVVuaXQsIHRvVW5pdCwgb3B0cykge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhaXNGaW5pdGUodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyJyk7XG4gIGlmICghZnJvbVVuaXQgfHwgIXRvVW5pdCkgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHNwZWNpZnkgZnJvbSBhbmQgdG8gdW5pdHMnKTtcblxuICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgdmFyIHBpeGVsc1BlckluY2ggPSBkZWZpbmVkKG9wdHMucGl4ZWxzUGVySW5jaCwgOTYpO1xuICB2YXIgcHJlY2lzaW9uID0gb3B0cy5wcmVjaXNpb247XG4gIHZhciByb3VuZFBpeGVsID0gb3B0cy5yb3VuZFBpeGVsICE9PSBmYWxzZTtcblxuICBmcm9tVW5pdCA9IGZyb21Vbml0LnRvTG93ZXJDYXNlKCk7XG4gIHRvVW5pdCA9IHRvVW5pdC50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmICh1bml0cy5pbmRleE9mKGZyb21Vbml0KSA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcm9tIHVuaXQgXCInICsgZnJvbVVuaXQgKyAnXCIsIG11c3QgYmUgb25lIG9mOiAnICsgdW5pdHMuam9pbignLCAnKSk7XG4gIGlmICh1bml0cy5pbmRleE9mKHRvVW5pdCkgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZnJvbSB1bml0IFwiJyArIHRvVW5pdCArICdcIiwgbXVzdCBiZSBvbmUgb2Y6ICcgKyB1bml0cy5qb2luKCcsICcpKTtcblxuICBpZiAoZnJvbVVuaXQgPT09IHRvVW5pdCkge1xuICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY29udmVydCBmcm9tIEEgdG8gQiBzaW5jZSB0aGV5IGFyZSB0aGUgc2FtZSBhbHJlYWR5XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgdmFyIHRvRmFjdG9yID0gMTtcbiAgdmFyIGZyb21GYWN0b3IgPSAxO1xuICB2YXIgaXNUb1BpeGVsID0gZmFsc2U7XG5cbiAgaWYgKGZyb21Vbml0ID09PSAncHgnKSB7XG4gICAgZnJvbUZhY3RvciA9IDEgLyBwaXhlbHNQZXJJbmNoO1xuICAgIGZyb21Vbml0ID0gJ2luJztcbiAgfVxuICBpZiAodG9Vbml0ID09PSAncHgnKSB7XG4gICAgaXNUb1BpeGVsID0gdHJ1ZTtcbiAgICB0b0ZhY3RvciA9IHBpeGVsc1BlckluY2g7XG4gICAgdG9Vbml0ID0gJ2luJztcbiAgfVxuXG4gIHZhciBmcm9tVW5pdERhdGEgPSBjb252ZXJzaW9uc1tmcm9tVW5pdF07XG4gIHZhciB0b1VuaXREYXRhID0gY29udmVyc2lvbnNbdG9Vbml0XTtcblxuICAvLyBzb3VyY2UgdG8gYW5jaG9yIGluc2lkZSBzb3VyY2UncyBzeXN0ZW1cbiAgdmFyIGFuY2hvciA9IHZhbHVlICogZnJvbVVuaXREYXRhLmZhY3RvciAqIGZyb21GYWN0b3I7XG5cbiAgLy8gaWYgc3lzdGVtcyBkaWZmZXIsIGNvbnZlcnQgb25lIHRvIGFub3RoZXJcbiAgaWYgKGZyb21Vbml0RGF0YS5zeXN0ZW0gIT09IHRvVW5pdERhdGEuc3lzdGVtKSB7XG4gICAgLy8gcmVndWxhciAnbScgdG8gJ2luJyBhbmQgc28gZm9ydGhcbiAgICBhbmNob3IgKj0gYW5jaG9yc1tmcm9tVW5pdERhdGEuc3lzdGVtXS5yYXRpbztcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBhbmNob3IgLyB0b1VuaXREYXRhLmZhY3RvciAqIHRvRmFjdG9yO1xuICBpZiAoaXNUb1BpeGVsICYmIHJvdW5kUGl4ZWwpIHtcbiAgICByZXN1bHQgPSBNYXRoLnJvdW5kKHJlc3VsdCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByZWNpc2lvbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUocHJlY2lzaW9uKSkge1xuICAgIHJlc3VsdCA9IHJvdW5kKHJlc3VsdCwgcHJlY2lzaW9uKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnREaXN0YW5jZTtcbm1vZHVsZS5leHBvcnRzLnVuaXRzID0gdW5pdHM7XG4iLCJpbXBvcnQgcGFwZXJTaXplcyBmcm9tICcuL3BhcGVyLXNpemVzJztcbmltcG9ydCBjb252ZXJ0TGVuZ3RoIGZyb20gJ2NvbnZlcnQtbGVuZ3RoJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpbWVuc2lvbnNGcm9tUHJlc2V0IChkaW1lbnNpb25zLCB1bml0c1RvID0gJ3B4JywgcGl4ZWxzUGVySW5jaCA9IDcyKSB7XG4gIGlmICh0eXBlb2YgZGltZW5zaW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBrZXkgPSBkaW1lbnNpb25zLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCEoa2V5IGluIHBhcGVyU2l6ZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBkaW1lbnNpb24gcHJlc2V0IFwiJHtkaW1lbnNpb25zfVwiIGlzIG5vdCBzdXBwb3J0ZWQgb3IgY291bGQgbm90IGJlIGZvdW5kOyB0cnkgdXNpbmcgYTQsIGEzLCBwb3N0Y2FyZCwgbGV0dGVyLCBldGMuYClcbiAgICB9XG4gICAgY29uc3QgcHJlc2V0ID0gcGFwZXJTaXplc1trZXldO1xuICAgIHJldHVybiBwcmVzZXQuZGltZW5zaW9ucy5tYXAoZCA9PiB7XG4gICAgICByZXR1cm4gY29udmVydERpc3RhbmNlKGQsIHByZXNldC51bml0cywgdW5pdHNUbywgcGl4ZWxzUGVySW5jaCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRpbWVuc2lvbnM7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnREaXN0YW5jZSAoZGltZW5zaW9uLCB1bml0c0Zyb20gPSAncHgnLCB1bml0c1RvID0gJ3B4JywgcGl4ZWxzUGVySW5jaCA9IDcyKSB7XG4gIHJldHVybiBjb252ZXJ0TGVuZ3RoKGRpbWVuc2lvbiwgdW5pdHNGcm9tLCB1bml0c1RvLCB7XG4gICAgcGl4ZWxzUGVySW5jaCxcbiAgICBwcmVjaXNpb246IDQsXG4gICAgcm91bmRQaXhlbDogdHJ1ZVxuICB9KTtcbn1cbiIsImltcG9ydCB7IGdldERpbWVuc2lvbnNGcm9tUHJlc2V0LCBjb252ZXJ0RGlzdGFuY2UgfSBmcm9tICcuLi9kaXN0YW5jZXMnO1xuaW1wb3J0IHsgaXNCcm93c2VyLCBkZWZpbmVkIH0gZnJvbSAnLi4vdXRpbCc7XG5cbmZ1bmN0aW9uIGNoZWNrSWZIYXNEaW1lbnNpb25zIChzZXR0aW5ncykge1xuICBpZiAoIXNldHRpbmdzLmRpbWVuc2lvbnMpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBzZXR0aW5ncy5kaW1lbnNpb25zID09PSAnc3RyaW5nJykgcmV0dXJuIHRydWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHNldHRpbmdzLmRpbWVuc2lvbnMpICYmIHNldHRpbmdzLmRpbWVuc2lvbnMubGVuZ3RoID49IDIpIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmVudFNpemUgKHByb3BzLCBzZXR0aW5ncykge1xuICAvLyBXaGVuIG5vIHsgZGltZW5zaW9uIH0gaXMgcGFzc2VkIGluIG5vZGUsIHdlIGRlZmF1bHQgdG8gSFRNTCBjYW52YXMgc2l6ZVxuICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgcmV0dXJuIFsgMzAwLCAxNTAgXTtcbiAgfVxuXG4gIGxldCBlbGVtZW50ID0gc2V0dGluZ3MucGFyZW50IHx8IHdpbmRvdztcblxuICBpZiAoZWxlbWVudCA9PT0gd2luZG93IHx8XG4gICAgICBlbGVtZW50ID09PSBkb2N1bWVudCB8fFxuICAgICAgZWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgIHJldHVybiBbIHdpbmRvdy5pbm5lcldpZHRoLCB3aW5kb3cuaW5uZXJIZWlnaHQgXTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIFsgd2lkdGgsIGhlaWdodCBdO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc2l6ZUNhbnZhcyAocHJvcHMsIHNldHRpbmdzKSB7XG4gIGxldCB3aWR0aCwgaGVpZ2h0O1xuICBsZXQgc3R5bGVXaWR0aCwgc3R5bGVIZWlnaHQ7XG4gIGxldCBjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0O1xuXG4gIGNvbnN0IGJyb3dzZXIgPSBpc0Jyb3dzZXIoKTtcbiAgY29uc3QgZGltZW5zaW9ucyA9IHNldHRpbmdzLmRpbWVuc2lvbnM7XG4gIGNvbnN0IGhhc0RpbWVuc2lvbnMgPSBjaGVja0lmSGFzRGltZW5zaW9ucyhzZXR0aW5ncyk7XG4gIGNvbnN0IGV4cG9ydGluZyA9IHByb3BzLmV4cG9ydGluZztcbiAgbGV0IHNjYWxlVG9GaXQgPSBoYXNEaW1lbnNpb25zID8gc2V0dGluZ3Muc2NhbGVUb0ZpdCAhPT0gZmFsc2UgOiBmYWxzZTtcbiAgbGV0IHNjYWxlVG9WaWV3ID0gKCFleHBvcnRpbmcgJiYgaGFzRGltZW5zaW9ucykgPyBzZXR0aW5ncy5zY2FsZVRvVmlldyA6IHRydWU7XG4gIC8vIGluIG5vZGUsIGNhbmNlbCBib3RoIG9mIHRoZXNlIG9wdGlvbnNcbiAgaWYgKCFicm93c2VyKSBzY2FsZVRvRml0ID0gc2NhbGVUb1ZpZXcgPSBmYWxzZTtcbiAgY29uc3QgdW5pdHMgPSBzZXR0aW5ncy51bml0cztcbiAgY29uc3QgcGl4ZWxzUGVySW5jaCA9ICh0eXBlb2Ygc2V0dGluZ3MucGl4ZWxzUGVySW5jaCA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc2V0dGluZ3MucGl4ZWxzUGVySW5jaCkpID8gc2V0dGluZ3MucGl4ZWxzUGVySW5jaCA6IDcyO1xuICBjb25zdCBibGVlZCA9IGRlZmluZWQoc2V0dGluZ3MuYmxlZWQsIDApO1xuXG4gIGNvbnN0IGRldmljZVBpeGVsUmF0aW8gPSBicm93c2VyID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxO1xuICBjb25zdCBiYXNlUGl4ZWxSYXRpbyA9IHNjYWxlVG9WaWV3ID8gZGV2aWNlUGl4ZWxSYXRpbyA6IDE7XG5cbiAgbGV0IHBpeGVsUmF0aW8sIGV4cG9ydFBpeGVsUmF0aW87XG5cbiAgLy8gSWYgYSBwaXhlbCByYXRpbyBpcyBzcGVjaWZpZWQsIHdlIHdpbGwgdXNlIGl0LlxuICAvLyBPdGhlcndpc2U6XG4gIC8vICAtPiBJZiBkaW1lbnNpb24gaXMgc3BlY2lmaWVkLCB1c2UgYmFzZSByYXRpbyAoaS5lLiBzaXplIGZvciBleHBvcnQpXG4gIC8vICAtPiBJZiBubyBkaW1lbnNpb24gaXMgc3BlY2lmaWVkLCB1c2UgZGV2aWNlIHJhdGlvIChpLmUuIHNpemUgZm9yIHNjcmVlbilcbiAgaWYgKHR5cGVvZiBzZXR0aW5ncy5waXhlbFJhdGlvID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzZXR0aW5ncy5waXhlbFJhdGlvKSkge1xuICAgIC8vIFdoZW4geyBwaXhlbFJhdGlvIH0gaXMgc3BlY2lmaWVkLCBpdCdzIGFsc28gdXNlZCBhcyBkZWZhdWx0IGV4cG9ydFBpeGVsUmF0aW8uXG4gICAgcGl4ZWxSYXRpbyA9IHNldHRpbmdzLnBpeGVsUmF0aW87XG4gICAgZXhwb3J0UGl4ZWxSYXRpbyA9IGRlZmluZWQoc2V0dGluZ3MuZXhwb3J0UGl4ZWxSYXRpbywgcGl4ZWxSYXRpbyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGhhc0RpbWVuc2lvbnMpIHtcbiAgICAgIC8vIFdoZW4gYSBkaW1lbnNpb24gaXMgc3BlY2lmaWVkLCB1c2UgdGhlIGJhc2UgcmF0aW8gcmF0aGVyIHRoYW4gc2NyZWVuIHJhdGlvXG4gICAgICBwaXhlbFJhdGlvID0gYmFzZVBpeGVsUmF0aW87XG4gICAgICAvLyBEZWZhdWx0IHRvIGEgcGl4ZWwgcmF0aW8gb2YgMSBzbyB0aGF0IHlvdSBlbmQgdXAgd2l0aCB0aGUgc2FtZSBkaW1lbnNpb25cbiAgICAgIC8vIHlvdSBzcGVjaWZpZWQsIGkuZS4gWyA1MDAsIDUwMCBdIGlzIGV4cG9ydGVkIGFzIDUwMHg1MDAgcHhcbiAgICAgIGV4cG9ydFBpeGVsUmF0aW8gPSBkZWZpbmVkKHNldHRpbmdzLmV4cG9ydFBpeGVsUmF0aW8sIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBkaW1lbnNpb24gaXMgc3BlY2lmaWVkLCBhc3N1bWUgZnVsbC1zY3JlZW4gcmV0aW5hIHNpemluZ1xuICAgICAgcGl4ZWxSYXRpbyA9IGRldmljZVBpeGVsUmF0aW87XG4gICAgICAvLyBEZWZhdWx0IHRvIHNjcmVlbiBwaXhlbCByYXRpbywgc28gdGhhdCBpdCdzIGxpa2UgdGFraW5nIGEgZGV2aWNlIHNjcmVlbnNob3RcbiAgICAgIGV4cG9ydFBpeGVsUmF0aW8gPSBkZWZpbmVkKHNldHRpbmdzLmV4cG9ydFBpeGVsUmF0aW8sIHBpeGVsUmF0aW8pO1xuICAgIH1cbiAgfVxuXG4gIC8vIENsYW1wIHBpeGVsIHJhdGlvXG4gIGlmICh0eXBlb2Ygc2V0dGluZ3MubWF4UGl4ZWxSYXRpbyA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc2V0dGluZ3MubWF4UGl4ZWxSYXRpbykpIHtcbiAgICBwaXhlbFJhdGlvID0gTWF0aC5taW4oc2V0dGluZ3MubWF4UGl4ZWxSYXRpbywgcGl4ZWxSYXRpbyk7XG4gIH1cblxuICAvLyBIYW5kbGUgZXhwb3J0IHBpeGVsIHJhdGlvXG4gIGlmIChleHBvcnRpbmcpIHtcbiAgICBwaXhlbFJhdGlvID0gZXhwb3J0UGl4ZWxSYXRpbztcbiAgfVxuXG4gIC8vIHBhcmVudFdpZHRoID0gdHlwZW9mIHBhcmVudFdpZHRoID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHROb2RlU2l6ZVswXSA6IHBhcmVudFdpZHRoO1xuICAvLyBwYXJlbnRIZWlnaHQgPSB0eXBlb2YgcGFyZW50SGVpZ2h0ID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHROb2RlU2l6ZVsxXSA6IHBhcmVudEhlaWdodDtcblxuICBsZXQgWyBwYXJlbnRXaWR0aCwgcGFyZW50SGVpZ2h0IF0gPSBnZXRQYXJlbnRTaXplKHByb3BzLCBzZXR0aW5ncyk7XG4gIGxldCB0cmltV2lkdGgsIHRyaW1IZWlnaHQ7XG5cbiAgLy8gWW91IGNhbiBzcGVjaWZ5IGEgZGltZW5zaW9ucyBpbiBwaXhlbHMgb3IgY20vbS9pbi9ldGNcbiAgaWYgKGhhc0RpbWVuc2lvbnMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBnZXREaW1lbnNpb25zRnJvbVByZXNldChkaW1lbnNpb25zLCB1bml0cywgcGl4ZWxzUGVySW5jaCk7XG4gICAgY29uc3QgaGlnaGVzdCA9IE1hdGgubWF4KHJlc3VsdFswXSwgcmVzdWx0WzFdKTtcbiAgICBjb25zdCBsb3dlc3QgPSBNYXRoLm1pbihyZXN1bHRbMF0sIHJlc3VsdFsxXSk7XG4gICAgaWYgKHNldHRpbmdzLm9yaWVudGF0aW9uKSB7XG4gICAgICBjb25zdCBsYW5kc2NhcGUgPSBzZXR0aW5ncy5vcmllbnRhdGlvbiA9PT0gJ2xhbmRzY2FwZSc7XG4gICAgICB3aWR0aCA9IGxhbmRzY2FwZSA/IGhpZ2hlc3QgOiBsb3dlc3Q7XG4gICAgICBoZWlnaHQgPSBsYW5kc2NhcGUgPyBsb3dlc3QgOiBoaWdoZXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICB3aWR0aCA9IHJlc3VsdFswXTtcbiAgICAgIGhlaWdodCA9IHJlc3VsdFsxXTtcbiAgICB9XG5cbiAgICB0cmltV2lkdGggPSB3aWR0aDtcbiAgICB0cmltSGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgLy8gQXBwbHkgYmxlZWQgd2hpY2ggaXMgYXNzdW1lZCB0byBiZSBpbiB0aGUgc2FtZSB1bml0c1xuICAgIHdpZHRoICs9IGJsZWVkICogMjtcbiAgICBoZWlnaHQgKz0gYmxlZWQgKiAyO1xuICB9IGVsc2Uge1xuICAgIHdpZHRoID0gcGFyZW50V2lkdGg7XG4gICAgaGVpZ2h0ID0gcGFyZW50SGVpZ2h0O1xuICAgIHRyaW1XaWR0aCA9IHdpZHRoO1xuICAgIHRyaW1IZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICAvLyBSZWFsIHNpemUgaW4gcGl4ZWxzIGFmdGVyIFBQSSBpcyB0YWtlbiBpbnRvIGFjY291bnRcbiAgbGV0IHJlYWxXaWR0aCA9IHdpZHRoO1xuICBsZXQgcmVhbEhlaWdodCA9IGhlaWdodDtcbiAgaWYgKGhhc0RpbWVuc2lvbnMgJiYgdW5pdHMpIHtcbiAgICAvLyBDb252ZXJ0IHRvIGRpZ2l0YWwvcGl4ZWwgdW5pdHMgaWYgbmVjZXNzYXJ5XG4gICAgcmVhbFdpZHRoID0gY29udmVydERpc3RhbmNlKHdpZHRoLCB1bml0cywgJ3B4JywgcGl4ZWxzUGVySW5jaCk7XG4gICAgcmVhbEhlaWdodCA9IGNvbnZlcnREaXN0YW5jZShoZWlnaHQsIHVuaXRzLCAncHgnLCBwaXhlbHNQZXJJbmNoKTtcbiAgfVxuXG4gIC8vIEhvdyBiaWcgdG8gc2V0IHRoZSAndmlldycgb2YgdGhlIGNhbnZhcyBpbiB0aGUgYnJvd3NlciAoaS5lLiBzdHlsZSlcbiAgc3R5bGVXaWR0aCA9IE1hdGgucm91bmQocmVhbFdpZHRoKTtcbiAgc3R5bGVIZWlnaHQgPSBNYXRoLnJvdW5kKHJlYWxIZWlnaHQpO1xuXG4gIC8vIElmIHdlIHdpc2ggdG8gc2NhbGUgdGhlIHZpZXcgdG8gdGhlIGJyb3dzZXIgd2luZG93XG4gIGlmIChzY2FsZVRvRml0ICYmICFleHBvcnRpbmcgJiYgaGFzRGltZW5zaW9ucykge1xuICAgIGNvbnN0IGFzcGVjdCA9IHdpZHRoIC8gaGVpZ2h0O1xuICAgIGNvbnN0IHdpbmRvd0FzcGVjdCA9IHBhcmVudFdpZHRoIC8gcGFyZW50SGVpZ2h0O1xuICAgIGNvbnN0IHNjYWxlVG9GaXRQYWRkaW5nID0gZGVmaW5lZChzZXR0aW5ncy5zY2FsZVRvRml0UGFkZGluZywgNDApO1xuICAgIGNvbnN0IG1heFdpZHRoID0gTWF0aC5yb3VuZChwYXJlbnRXaWR0aCAtIHNjYWxlVG9GaXRQYWRkaW5nICogMik7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gTWF0aC5yb3VuZChwYXJlbnRIZWlnaHQgLSBzY2FsZVRvRml0UGFkZGluZyAqIDIpO1xuICAgIGlmIChzdHlsZVdpZHRoID4gbWF4V2lkdGggfHwgc3R5bGVIZWlnaHQgPiBtYXhIZWlnaHQpIHtcbiAgICAgIGlmICh3aW5kb3dBc3BlY3QgPiBhc3BlY3QpIHtcbiAgICAgICAgc3R5bGVIZWlnaHQgPSBtYXhIZWlnaHQ7XG4gICAgICAgIHN0eWxlV2lkdGggPSBNYXRoLnJvdW5kKHN0eWxlSGVpZ2h0ICogYXNwZWN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlV2lkdGggPSBtYXhXaWR0aDtcbiAgICAgICAgc3R5bGVIZWlnaHQgPSBNYXRoLnJvdW5kKHN0eWxlV2lkdGggLyBhc3BlY3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNhbnZhc1dpZHRoID0gc2NhbGVUb1ZpZXcgPyBNYXRoLnJvdW5kKHBpeGVsUmF0aW8gKiBzdHlsZVdpZHRoKSA6IE1hdGgucm91bmQocGl4ZWxSYXRpbyAqIHJlYWxXaWR0aCk7XG4gIGNhbnZhc0hlaWdodCA9IHNjYWxlVG9WaWV3ID8gTWF0aC5yb3VuZChwaXhlbFJhdGlvICogc3R5bGVIZWlnaHQpIDogTWF0aC5yb3VuZChwaXhlbFJhdGlvICogcmVhbEhlaWdodCk7XG5cbiAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IHNjYWxlVG9WaWV3ID8gTWF0aC5yb3VuZChzdHlsZVdpZHRoKSA6IE1hdGgucm91bmQocmVhbFdpZHRoKTtcbiAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSBzY2FsZVRvVmlldyA/IE1hdGgucm91bmQoc3R5bGVIZWlnaHQpIDogTWF0aC5yb3VuZChyZWFsSGVpZ2h0KTtcblxuICBjb25zdCBzY2FsZVggPSBjYW52YXNXaWR0aCAvIHdpZHRoO1xuICBjb25zdCBzY2FsZVkgPSBjYW52YXNIZWlnaHQgLyBoZWlnaHQ7XG5cbiAgLy8gQXNzaWduIHRvIGN1cnJlbnQgcHJvcHNcbiAgcmV0dXJuIHtcbiAgICBibGVlZCxcbiAgICBwaXhlbFJhdGlvLFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBkaW1lbnNpb25zOiBbIHdpZHRoLCBoZWlnaHQgXSxcbiAgICB1bml0czogdW5pdHMgfHwgJ3B4JyxcbiAgICBzY2FsZVgsXG4gICAgc2NhbGVZLFxuICAgIHBpeGVsc1BlckluY2gsXG4gICAgdmlld3BvcnRXaWR0aCxcbiAgICB2aWV3cG9ydEhlaWdodCxcbiAgICBjYW52YXNXaWR0aCxcbiAgICBjYW52YXNIZWlnaHQsXG4gICAgdHJpbVdpZHRoLFxuICAgIHRyaW1IZWlnaHQsXG4gICAgc3R5bGVXaWR0aCxcbiAgICBzdHlsZUhlaWdodFxuICB9O1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBnZXRDYW52YXNDb250ZXh0XG5mdW5jdGlvbiBnZXRDYW52YXNDb250ZXh0ICh0eXBlLCBvcHRzKSB7XG4gIGlmICh0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtdXN0IHNwZWNpZnkgdHlwZSBzdHJpbmcnKVxuICB9XG5cbiAgb3B0cyA9IG9wdHMgfHwge31cblxuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyAmJiAhb3B0cy5jYW52YXMpIHtcbiAgICByZXR1cm4gbnVsbCAvLyBjaGVjayBmb3IgTm9kZVxuICB9XG5cbiAgdmFyIGNhbnZhcyA9IG9wdHMuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXG4gIGlmICh0eXBlb2Ygb3B0cy53aWR0aCA9PT0gJ251bWJlcicpIHtcbiAgICBjYW52YXMud2lkdGggPSBvcHRzLndpZHRoXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlaWdodCA9PT0gJ251bWJlcicpIHtcbiAgICBjYW52YXMuaGVpZ2h0ID0gb3B0cy5oZWlnaHRcbiAgfVxuXG4gIHZhciBhdHRyaWJzID0gb3B0c1xuICB2YXIgZ2xcbiAgdHJ5IHtcbiAgICB2YXIgbmFtZXMgPSBbIHR5cGUgXVxuICAgIC8vIHByZWZpeCBHTCBjb250ZXh0c1xuICAgIGlmICh0eXBlLmluZGV4T2YoJ3dlYmdsJykgPT09IDApIHtcbiAgICAgIG5hbWVzLnB1c2goJ2V4cGVyaW1lbnRhbC0nICsgdHlwZSlcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KG5hbWVzW2ldLCBhdHRyaWJzKVxuICAgICAgaWYgKGdsKSByZXR1cm4gZ2xcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBnbCA9IG51bGxcbiAgfVxuICByZXR1cm4gKGdsIHx8IG51bGwpIC8vIGVuc3VyZSBudWxsIG9uIGZhaWxcbn1cbiIsImltcG9ydCBhc3NpZ24gZnJvbSAnb2JqZWN0LWFzc2lnbic7XG5pbXBvcnQgZ2V0Q2FudmFzQ29udGV4dCBmcm9tICdnZXQtY2FudmFzLWNvbnRleHQnO1xuaW1wb3J0IHsgaXNCcm93c2VyIH0gZnJvbSAnLi4vdXRpbCc7XG5cbmZ1bmN0aW9uIGNyZWF0ZUNhbnZhc0VsZW1lbnQgKCkge1xuICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJdCBhcHBlYXJzIHlvdSBhcmUgcnVuaW5nIGZyb20gTm9kZS5qcyBvciBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LiBUcnkgcGFzc2luZyBpbiBhbiBleGlzdGluZyB7IGNhbnZhcyB9IGludGVyZmFjZSBpbnN0ZWFkLicpO1xuICB9XG4gIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ2FudmFzIChzZXR0aW5ncyA9IHt9KSB7XG4gIGxldCBjb250ZXh0LCBjYW52YXM7XG4gIGxldCBvd25zQ2FudmFzID0gZmFsc2U7XG4gIGlmIChzZXR0aW5ncy5jYW52YXMgIT09IGZhbHNlKSB7XG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBjYW52YXMgYW5kIGNvbnRleHQgdG8gY3JlYXRlXG4gICAgY29udGV4dCA9IHNldHRpbmdzLmNvbnRleHQ7XG4gICAgaWYgKCFjb250ZXh0IHx8IHR5cGVvZiBjb250ZXh0ID09PSAnc3RyaW5nJykge1xuICAgICAgbGV0IG5ld0NhbnZhcyA9IHNldHRpbmdzLmNhbnZhcztcbiAgICAgIGlmICghbmV3Q2FudmFzKSB7XG4gICAgICAgIG5ld0NhbnZhcyA9IGNyZWF0ZUNhbnZhc0VsZW1lbnQoKTtcbiAgICAgICAgb3duc0NhbnZhcyA9IHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB0eXBlID0gY29udGV4dCB8fCAnMmQnO1xuICAgICAgaWYgKHR5cGVvZiBuZXdDYW52YXMuZ2V0Q29udGV4dCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzcGVjaWZpZWQgeyBjYW52YXMgfSBlbGVtZW50IGRvZXMgbm90IGhhdmUgYSBnZXRDb250ZXh0KCkgZnVuY3Rpb24sIG1heWJlIGl0IGlzIG5vdCBhIDxjYW52YXM+IHRhZz9gKTtcbiAgICAgIH1cbiAgICAgIGNvbnRleHQgPSBnZXRDYW52YXNDb250ZXh0KHR5cGUsIGFzc2lnbih7fSwgc2V0dGluZ3MuYXR0cmlidXRlcywgeyBjYW52YXM6IG5ld0NhbnZhcyB9KSk7XG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgYXQgY2FudmFzLmdldENvbnRleHQoJyR7dHlwZX0nKSAtIHRoZSBicm93c2VyIG1heSBub3Qgc3VwcG9ydCB0aGlzIGNvbnRleHQsIG9yIGEgZGlmZmVyZW50IGNvbnRleHQgbWF5IGFscmVhZHkgYmUgaW4gdXNlIHdpdGggdGhpcyBjYW52YXMuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FudmFzID0gY29udGV4dC5jYW52YXM7XG4gICAgLy8gRW5zdXJlIGNvbnRleHQgbWF0Y2hlcyB1c2VyJ3MgY2FudmFzIGV4cGVjdGF0aW9uc1xuICAgIGlmIChzZXR0aW5ncy5jYW52YXMgJiYgY2FudmFzICE9PSBzZXR0aW5ncy5jYW52YXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHsgY2FudmFzIH0gYW5kIHsgY29udGV4dCB9IHNldHRpbmdzIG11c3QgcG9pbnQgdG8gdGhlIHNhbWUgdW5kZXJseWluZyBjYW52YXMgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHBpeGVsYXRpb24gdG8gY2FudmFzIGlmIG5lY2Vzc2FyeSwgdGhpcyBpcyBtb3N0bHkgYSBjb252ZW5pZW5jZSB1dGlsaXR5XG4gICAgaWYgKHNldHRpbmdzLnBpeGVsYXRlZCkge1xuICAgICAgY29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjYW52YXMuc3R5bGVbJ2ltYWdlLXJlbmRlcmluZyddID0gJ3BpeGVsYXRlZCc7XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGNhbnZhcywgY29udGV4dCwgb3duc0NhbnZhcyB9O1xufVxuIiwiaW1wb3J0IGFzc2lnbiBmcm9tICdvYmplY3QtYXNzaWduJztcbmltcG9ydCByaWdodE5vdyBmcm9tICdyaWdodC1ub3cnO1xuaW1wb3J0IGlzUHJvbWlzZSBmcm9tICdpcy1wcm9taXNlJztcbmltcG9ydCB7IGlzQnJvd3NlciwgZGVmaW5lZCwgaXNXZWJHTENvbnRleHQsIGlzQ2FudmFzLCBnZXRDbGllbnRBUEkgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCc7XG5pbXBvcnQge1xuICByZXNvbHZlRmlsZW5hbWUsXG4gIHNhdmVGaWxlLFxuICBzYXZlRGF0YVVSTCxcbiAgZ2V0VGltZVN0YW1wLFxuICBleHBvcnRDYW52YXMsXG4gIHN0cmVhbVN0YXJ0LFxuICBzdHJlYW1FbmRcbn0gZnJvbSAnLi4vc2F2ZSc7XG5pbXBvcnQgeyBjaGVja1NldHRpbmdzIH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5cbmltcG9ydCBrZXlib2FyZFNob3J0Y3V0cyBmcm9tICcuL2tleWJvYXJkU2hvcnRjdXRzJztcbmltcG9ydCByZXNpemVDYW52YXMgZnJvbSAnLi9yZXNpemVDYW52YXMnO1xuaW1wb3J0IGNyZWF0ZUNhbnZhcyBmcm9tICcuL2NyZWF0ZUNhbnZhcyc7XG5cbmNsYXNzIFNrZXRjaE1hbmFnZXIge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5fc2V0dGluZ3MgPSB7fTtcbiAgICB0aGlzLl9wcm9wcyA9IHt9O1xuICAgIHRoaXMuX3NrZXRjaCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9yYWYgPSBudWxsO1xuICAgIHRoaXMuX3JlY29yZFRpbWVvdXQgPSBudWxsO1xuXG4gICAgLy8gU29tZSBoYWNreSB0aGluZ3MgcmVxdWlyZWQgdG8gZ2V0IGFyb3VuZCBwNS5qcyBzdHJ1Y3R1cmVcbiAgICB0aGlzLl9sYXN0UmVkcmF3UmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2lzUDVSZXNpemluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fa2V5Ym9hcmRTaG9ydGN1dHMgPSBrZXlib2FyZFNob3J0Y3V0cyh7XG4gICAgICBlbmFibGVkOiAoKSA9PiB0aGlzLnNldHRpbmdzLmhvdGtleXMgIT09IGZhbHNlLFxuICAgICAgc2F2ZTogKGV2KSA9PiB7XG4gICAgICAgIGlmIChldi5zaGlmdEtleSkge1xuICAgICAgICAgIGlmICh0aGlzLnByb3BzLnJlY29yZGluZykge1xuICAgICAgICAgICAgdGhpcy5lbmRSZWNvcmQoKTtcbiAgICAgICAgICAgIHRoaXMucnVuKCk7XG4gICAgICAgICAgfSBlbHNlIHRoaXMucmVjb3JkKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMucHJvcHMucmVjb3JkaW5nKSB7XG4gICAgICAgICAgdGhpcy5leHBvcnRGcmFtZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG9nZ2xlUGxheTogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5wbGF5aW5nKSB0aGlzLnBhdXNlKCk7XG4gICAgICAgIGVsc2UgdGhpcy5wbGF5KCk7XG4gICAgICB9LFxuICAgICAgY29tbWl0OiAoZXYpID0+IHtcbiAgICAgICAgdGhpcy5leHBvcnRGcmFtZSh7IGNvbW1pdDogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX2FuaW1hdGVIYW5kbGVyID0gKCkgPT4gdGhpcy5hbmltYXRlKCk7XG5cbiAgICB0aGlzLl9yZXNpemVIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2hhbmdlZCA9IHRoaXMucmVzaXplKCk7XG4gICAgICAvLyBPbmx5IHJlLXJlbmRlciB3aGVuIHNpemUgYWN0dWFsbHkgY2hhbmdlc1xuICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZ2V0IHNrZXRjaCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NrZXRjaDtcbiAgfVxuXG4gIGdldCBzZXR0aW5ncyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzO1xuICB9XG5cbiAgZ2V0IHByb3BzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvcHM7XG4gIH1cblxuICBfY29tcHV0ZVBsYXloZWFkIChjdXJyZW50VGltZSwgZHVyYXRpb24pIHtcbiAgICBjb25zdCBoYXNEdXJhdGlvbiA9IHR5cGVvZiBkdXJhdGlvbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoZHVyYXRpb24pO1xuICAgIHJldHVybiBoYXNEdXJhdGlvbiA/IGN1cnJlbnRUaW1lIC8gZHVyYXRpb24gOiAwO1xuICB9XG5cbiAgX2NvbXB1dGVGcmFtZSAocGxheWhlYWQsIHRpbWUsIHRvdGFsRnJhbWVzLCBmcHMpIHtcbiAgICByZXR1cm4gKGlzRmluaXRlKHRvdGFsRnJhbWVzKSAmJiB0b3RhbEZyYW1lcyA+IDEpXG4gICAgICA/IE1hdGguZmxvb3IocGxheWhlYWQgKiAodG90YWxGcmFtZXMgLSAxKSlcbiAgICAgIDogTWF0aC5mbG9vcihmcHMgKiB0aW1lKTtcbiAgfVxuXG4gIF9jb21wdXRlQ3VycmVudEZyYW1lICgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29tcHV0ZUZyYW1lKFxuICAgICAgdGhpcy5wcm9wcy5wbGF5aGVhZCwgdGhpcy5wcm9wcy50aW1lLFxuICAgICAgdGhpcy5wcm9wcy50b3RhbEZyYW1lcywgdGhpcy5wcm9wcy5mcHNcbiAgICApO1xuICB9XG5cbiAgX2dldFNpemVQcm9wcyAoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogcHJvcHMud2lkdGgsXG4gICAgICBoZWlnaHQ6IHByb3BzLmhlaWdodCxcbiAgICAgIHBpeGVsUmF0aW86IHByb3BzLnBpeGVsUmF0aW8sXG4gICAgICBjYW52YXNXaWR0aDogcHJvcHMuY2FudmFzV2lkdGgsXG4gICAgICBjYW52YXNIZWlnaHQ6IHByb3BzLmNhbnZhc0hlaWdodCxcbiAgICAgIHZpZXdwb3J0V2lkdGg6IHByb3BzLnZpZXdwb3J0V2lkdGgsXG4gICAgICB2aWV3cG9ydEhlaWdodDogcHJvcHMudmlld3BvcnRIZWlnaHRcbiAgICB9O1xuICB9XG5cbiAgcnVuICgpIHtcbiAgICBpZiAoIXRoaXMuc2tldGNoKSB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCB3YWl0IHVudGlsIHNrZXRjaCBpcyBsb2FkZWQgYmVmb3JlIHRyeWluZyB0byBwbGF5KCknKTtcblxuICAgIC8vIFN0YXJ0IGFuIGFuaW1hdGlvbiBmcmFtZSBsb29wIGlmIG5lY2Vzc2FyeVxuICAgIGlmICh0aGlzLnNldHRpbmdzLnBsYXlpbmcgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnBsYXkoKTtcbiAgICB9XG5cbiAgICAvLyBMZXQncyBsZXQgdGhpcyB3YXJuaW5nIGhhbmcgYXJvdW5kIGZvciBhIGZldyB2ZXJzaW9ucy4uLlxuICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2guZGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKCdJbiBjYW52YXMtc2tldGNoQDAuMC4yMyB0aGUgZGlzcG9zZSgpIGV2ZW50IGhhcyBiZWVuIHJlbmFtZWQgdG8gdW5sb2FkKCknKTtcbiAgICB9XG5cbiAgICAvLyBJbiBjYXNlIHdlIGFyZW4ndCBwbGF5aW5nIG9yIGFuaW1hdGVkLCBtYWtlIHN1cmUgd2Ugc3RpbGwgdHJpZ2dlciBiZWdpbiBtZXNzYWdlLi4uXG4gICAgaWYgKCF0aGlzLnByb3BzLnN0YXJ0ZWQpIHtcbiAgICAgIHRoaXMuX3NpZ25hbEJlZ2luKCk7XG4gICAgICB0aGlzLnByb3BzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFJlbmRlciBhbiBpbml0aWFsIGZyYW1lXG4gICAgdGhpcy50aWNrKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIF9jYW5jZWxUaW1lb3V0cyAoKSB7XG4gICAgaWYgKHRoaXMuX3JhZiAhPSBudWxsICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWYpO1xuICAgICAgdGhpcy5fcmFmID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3JlY29yZFRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3JlY29yZFRpbWVvdXQpO1xuICAgICAgdGhpcy5fcmVjb3JkVGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcGxheSAoKSB7XG4gICAgbGV0IGFuaW1hdGUgPSB0aGlzLnNldHRpbmdzLmFuaW1hdGU7XG4gICAgaWYgKCdhbmltYXRpb24nIGluIHRoaXMuc2V0dGluZ3MpIHtcbiAgICAgIGFuaW1hdGUgPSB0cnVlO1xuICAgICAgY29uc29sZS53YXJuKCdbY2FudmFzLXNrZXRjaF0geyBhbmltYXRpb24gfSBoYXMgYmVlbiByZW5hbWVkIHRvIHsgYW5pbWF0ZSB9Jyk7XG4gICAgfVxuICAgIGlmICghYW5pbWF0ZSkgcmV0dXJuO1xuICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tjYW52YXMtc2tldGNoXSBXQVJOOiBVc2luZyB7IGFuaW1hdGUgfSBpbiBOb2RlLmpzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLnBsYXlpbmcpIHJldHVybjtcbiAgICBpZiAoIXRoaXMucHJvcHMuc3RhcnRlZCkge1xuICAgICAgdGhpcy5fc2lnbmFsQmVnaW4oKTtcbiAgICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coJ3BsYXknLCB0aGlzLnByb3BzLnRpbWUpXG5cbiAgICAvLyBTdGFydCBhIHJlbmRlciBsb29wXG4gICAgdGhpcy5wcm9wcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9jYW5jZWxUaW1lb3V0cygpO1xuICAgIHRoaXMuX2xhc3RUaW1lID0gcmlnaHROb3coKTtcbiAgICB0aGlzLl9yYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGVIYW5kbGVyKTtcbiAgfVxuXG4gIHBhdXNlICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5yZWNvcmRpbmcpIHRoaXMuZW5kUmVjb3JkKCk7XG4gICAgdGhpcy5wcm9wcy5wbGF5aW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9jYW5jZWxUaW1lb3V0cygpO1xuICB9XG5cbiAgdG9nZ2xlUGxheSAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucGxheWluZykgdGhpcy5wYXVzZSgpO1xuICAgIGVsc2UgdGhpcy5wbGF5KCk7XG4gIH1cblxuICAvLyBTdG9wIGFuZCByZXNldCB0byBmcmFtZSB6ZXJvXG4gIHN0b3AgKCkge1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICB0aGlzLnByb3BzLmZyYW1lID0gMDtcbiAgICB0aGlzLnByb3BzLnBsYXloZWFkID0gMDtcbiAgICB0aGlzLnByb3BzLnRpbWUgPSAwO1xuICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gMDtcbiAgICB0aGlzLnByb3BzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVjb3JkICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5yZWNvcmRpbmcpIHJldHVybjtcbiAgICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbY2FudmFzLXNrZXRjaF0gV0FSTjogUmVjb3JkaW5nIGZyb20gTm9kZS5qcyBpcyBub3QgeWV0IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RvcCgpO1xuICAgIHRoaXMucHJvcHMucGxheWluZyA9IHRydWU7XG4gICAgdGhpcy5wcm9wcy5yZWNvcmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZXhwb3J0T3B0cyA9IHRoaXMuX2NyZWF0ZUV4cG9ydE9wdGlvbnMoeyBzZXF1ZW5jZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxIC8gdGhpcy5wcm9wcy5mcHM7XG4gICAgLy8gUmVuZGVyIGVhY2ggZnJhbWUgaW4gdGhlIHNlcXVlbmNlXG4gICAgdGhpcy5fY2FuY2VsVGltZW91dHMoKTtcbiAgICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnByb3BzLnJlY29yZGluZykgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSBmcmFtZUludGVydmFsO1xuICAgICAgdGhpcy50aWNrKCk7XG4gICAgICByZXR1cm4gdGhpcy5leHBvcnRGcmFtZShleHBvcnRPcHRzKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLnByb3BzLnJlY29yZGluZykgcmV0dXJuOyAvLyB3YXMgY2FuY2VsbGVkIGJlZm9yZVxuICAgICAgICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gMDtcbiAgICAgICAgICB0aGlzLnByb3BzLmZyYW1lKys7XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMuZnJhbWUgPCB0aGlzLnByb3BzLnRvdGFsRnJhbWVzKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLnRpbWUgKz0gZnJhbWVJbnRlcnZhbDtcbiAgICAgICAgICAgIHRoaXMucHJvcHMucGxheWhlYWQgPSB0aGlzLl9jb21wdXRlUGxheWhlYWQodGhpcy5wcm9wcy50aW1lLCB0aGlzLnByb3BzLmR1cmF0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29yZFRpbWVvdXQgPSBzZXRUaW1lb3V0KHRpY2ssIDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRmluaXNoZWQgcmVjb3JkaW5nJyk7XG4gICAgICAgICAgICB0aGlzLl9zaWduYWxFbmQoKTtcbiAgICAgICAgICAgIHRoaXMuZW5kUmVjb3JkKCk7XG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgICAgIHRoaXMucnVuKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLy8gVHJpZ2dlciBhIHN0YXJ0IGV2ZW50IGJlZm9yZSB3ZSBiZWdpbiByZWNvcmRpbmdcbiAgICBpZiAoIXRoaXMucHJvcHMuc3RhcnRlZCkge1xuICAgICAgdGhpcy5fc2lnbmFsQmVnaW4oKTtcbiAgICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlciAnYmVnaW4gcmVjb3JkJyBldmVudFxuICAgIGlmICh0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2guYmVnaW5SZWNvcmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3dyYXBDb250ZXh0U2NhbGUocHJvcHMgPT4gdGhpcy5za2V0Y2guYmVnaW5SZWNvcmQocHJvcHMpKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWF0ZSBhIHN0cmVhbWluZyBzdGFydCBpZiBuZWNlc3NhcnlcbiAgICBzdHJlYW1TdGFydChleHBvcnRPcHRzKVxuICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH0pXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIHRoaXMuX3JhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgICB9KTtcbiAgfVxuXG4gIF9zaWduYWxCZWdpbiAoKSB7XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5iZWdpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC5iZWdpbihwcm9wcykpO1xuICAgIH1cbiAgfVxuXG4gIF9zaWduYWxFbmQgKCkge1xuICAgIGlmICh0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2guZW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLmVuZChwcm9wcykpO1xuICAgIH1cbiAgfVxuXG4gIGVuZFJlY29yZCAoKSB7XG4gICAgY29uc3Qgd2FzUmVjb3JkaW5nID0gdGhpcy5wcm9wcy5yZWNvcmRpbmc7XG5cbiAgICB0aGlzLl9jYW5jZWxUaW1lb3V0cygpO1xuICAgIHRoaXMucHJvcHMucmVjb3JkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgIHRoaXMucHJvcHMucGxheWluZyA9IGZhbHNlO1xuXG4gICAgLy8gdGVsbCBDTEkgdGhhdCBzdHJlYW0gaGFzIGZpbmlzaGVkXG4gICAgcmV0dXJuIHN0cmVhbUVuZCgpXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gVHJpZ2dlciAnZW5kIHJlY29yZCcgZXZlbnRcbiAgICAgICAgaWYgKHdhc1JlY29yZGluZyAmJiB0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2guZW5kUmVjb3JkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC5lbmRSZWNvcmQocHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBfY3JlYXRlRXhwb3J0T3B0aW9ucyAob3B0ID0ge30pIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VxdWVuY2U6IG9wdC5zZXF1ZW5jZSxcbiAgICAgIHNhdmU6IG9wdC5zYXZlLFxuICAgICAgZnBzOiB0aGlzLnByb3BzLmZwcyxcbiAgICAgIGZyYW1lOiBvcHQuc2VxdWVuY2UgPyB0aGlzLnByb3BzLmZyYW1lIDogdW5kZWZpbmVkLFxuICAgICAgZmlsZTogdGhpcy5zZXR0aW5ncy5maWxlLFxuICAgICAgbmFtZTogdGhpcy5zZXR0aW5ncy5uYW1lLFxuICAgICAgcHJlZml4OiB0aGlzLnNldHRpbmdzLnByZWZpeCxcbiAgICAgIHN1ZmZpeDogdGhpcy5zZXR0aW5ncy5zdWZmaXgsXG4gICAgICBlbmNvZGluZzogdGhpcy5zZXR0aW5ncy5lbmNvZGluZyxcbiAgICAgIGVuY29kaW5nUXVhbGl0eTogdGhpcy5zZXR0aW5ncy5lbmNvZGluZ1F1YWxpdHksXG4gICAgICB0aW1lU3RhbXA6IG9wdC50aW1lU3RhbXAgfHwgZ2V0VGltZVN0YW1wKCksXG4gICAgICB0b3RhbEZyYW1lczogaXNGaW5pdGUodGhpcy5wcm9wcy50b3RhbEZyYW1lcykgPyBNYXRoLm1heCgwLCB0aGlzLnByb3BzLnRvdGFsRnJhbWVzKSA6IDEwMDBcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0RnJhbWUgKG9wdCA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgcmV0dXJuIFByb21pc2UuYWxsKFtdKTtcbiAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnByZUV4cG9ydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5za2V0Y2gucHJlRXhwb3J0KCk7XG4gICAgfVxuXG4gICAgLy8gT3B0aW9ucyBmb3IgZXhwb3J0IGZ1bmN0aW9uXG4gICAgbGV0IGV4cG9ydE9wdHMgPSB0aGlzLl9jcmVhdGVFeHBvcnRPcHRpb25zKG9wdCk7XG5cbiAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgICBsZXQgcCA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGlmIChjbGllbnQgJiYgb3B0LmNvbW1pdCAmJiB0eXBlb2YgY2xpZW50LmNvbW1pdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgY29tbWl0T3B0cyA9IGFzc2lnbih7fSwgZXhwb3J0T3B0cyk7XG4gICAgICBjb25zdCBoYXNoID0gY2xpZW50LmNvbW1pdChjb21taXRPcHRzKTtcbiAgICAgIGlmIChpc1Byb21pc2UoaGFzaCkpIHAgPSBoYXNoO1xuICAgICAgZWxzZSBwID0gUHJvbWlzZS5yZXNvbHZlKGhhc2gpO1xuICAgIH1cblxuICAgIHJldHVybiBwLnRoZW4oaGFzaCA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5fZG9FeHBvcnRGcmFtZShhc3NpZ24oe30sIGV4cG9ydE9wdHMsIHsgaGFzaDogaGFzaCB8fCAnJyB9KSk7XG4gICAgfSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgLy8gTW9zdCBjb21tb24gdXNlY2FzZSBpcyB0byBleHBvcnQgYSBzaW5nbGUgbGF5ZXIsXG4gICAgICAvLyBzbyBsZXQncyBvcHRpbWl6ZSB0aGUgdXNlciBleHBlcmllbmNlIGZvciB0aGF0LlxuICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDEpIHJldHVybiByZXN1bHRbMF07XG4gICAgICBlbHNlIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gIH1cblxuICBfZG9FeHBvcnRGcmFtZSAoZXhwb3J0T3B0cyA9IHt9KSB7XG4gICAgdGhpcy5fcHJvcHMuZXhwb3J0aW5nID0gdHJ1ZTtcblxuICAgIC8vIFJlc2l6ZSB0byBvdXRwdXQgcmVzb2x1dGlvblxuICAgIHRoaXMucmVzaXplKCk7XG5cbiAgICAvLyBEcmF3IGF0IHRoaXMgb3V0cHV0IHJlc29sdXRpb25cbiAgICBsZXQgZHJhd1Jlc3VsdCA9IHRoaXMucmVuZGVyKCk7XG5cbiAgICAvLyBUaGUgc2VsZiBvd25lZCBjYW52YXMgKG1heSBiZSB1bmRlZmluZWQuLi4hKVxuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMucHJvcHMuY2FudmFzO1xuXG4gICAgLy8gR2V0IGxpc3Qgb2YgcmVzdWx0cyBmcm9tIHJlbmRlclxuICAgIGlmICh0eXBlb2YgZHJhd1Jlc3VsdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRyYXdSZXN1bHQgPSBbIGNhbnZhcyBdO1xuICAgIH1cbiAgICBkcmF3UmVzdWx0ID0gW10uY29uY2F0KGRyYXdSZXN1bHQpLmZpbHRlcihCb29sZWFuKTtcblxuICAgIC8vIFRyYW5zZm9ybSB0aGUgY2FudmFzL2ZpbGUgZGVzY3JpcHRvcnMgaW50byBhIGNvbnNpc3RlbnQgZm9ybWF0LFxuICAgIC8vIGFuZCBwdWxsIG91dCBhbnkgZGF0YSBVUkxzIGZyb20gY2FudmFzIGVsZW1lbnRzXG4gICAgZHJhd1Jlc3VsdCA9IGRyYXdSZXN1bHQubWFwKHJlc3VsdCA9PiB7XG4gICAgICBjb25zdCBoYXNEYXRhT2JqZWN0ID0gdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmICgnZGF0YScgaW4gcmVzdWx0IHx8ICdkYXRhVVJMJyBpbiByZXN1bHQpO1xuICAgICAgY29uc3QgZGF0YSA9IGhhc0RhdGFPYmplY3QgPyByZXN1bHQuZGF0YSA6IHJlc3VsdDtcbiAgICAgIGNvbnN0IG9wdHMgPSBoYXNEYXRhT2JqZWN0ID8gYXNzaWduKHt9LCByZXN1bHQsIHsgZGF0YSB9KSA6IHsgZGF0YSB9O1xuICAgICAgaWYgKGlzQ2FudmFzKGRhdGEpKSB7XG4gICAgICAgIGNvbnN0IGVuY29kaW5nID0gb3B0cy5lbmNvZGluZyB8fCBleHBvcnRPcHRzLmVuY29kaW5nO1xuICAgICAgICBjb25zdCBlbmNvZGluZ1F1YWxpdHkgPSBkZWZpbmVkKG9wdHMuZW5jb2RpbmdRdWFsaXR5LCBleHBvcnRPcHRzLmVuY29kaW5nUXVhbGl0eSwgMC45NSk7XG4gICAgICAgIGNvbnN0IHsgZGF0YVVSTCwgZXh0ZW5zaW9uLCB0eXBlIH0gPSBleHBvcnRDYW52YXMoZGF0YSwgeyBlbmNvZGluZywgZW5jb2RpbmdRdWFsaXR5IH0pO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihvcHRzLCB7IGRhdGFVUkwsIGV4dGVuc2lvbiwgdHlwZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvcHRzO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTm93IHJldHVybiB0byByZWd1bGFyIHJlbmRlcmluZyBtb2RlXG4gICAgdGhpcy5fcHJvcHMuZXhwb3J0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5yZXNpemUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuXG4gICAgLy8gQW5kIG5vdyB3ZSBjYW4gc2F2ZSBlYWNoIHJlc3VsdFxuICAgIHJldHVybiBQcm9taXNlLmFsbChkcmF3UmVzdWx0Lm1hcCgocmVzdWx0LCBpLCBsYXllckxpc3QpID0+IHtcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIGlmIHJlbmRlcmluZyBtdWx0aXBsZSBsYXllcnMgd2Ugd2lsbCBnaXZlIHRoZW0gaW5kaWNlc1xuICAgICAgY29uc3QgY3VyT3B0ID0gYXNzaWduKHtcbiAgICAgICAgZXh0ZW5zaW9uOiAnJyxcbiAgICAgICAgcHJlZml4OiAnJyxcbiAgICAgICAgc3VmZml4OiAnJ1xuICAgICAgfSwgZXhwb3J0T3B0cywgcmVzdWx0LCB7XG4gICAgICAgIGxheWVyOiBpLFxuICAgICAgICB0b3RhbExheWVyczogbGF5ZXJMaXN0Lmxlbmd0aFxuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIGV4cG9ydCBpcyBleHBsaWNpdGx5IG5vdCBzYXZpbmcsIG1ha2Ugc3VyZSBub3RoaW5nIHNhdmVzXG4gICAgICAvLyBPdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgbGF5ZXIgc2F2ZSBvcHRpb24sIG9yIGZhbGxiYWNrIHRvIHRydWVcbiAgICAgIGNvbnN0IHNhdmVQYXJhbSA9IGV4cG9ydE9wdHMuc2F2ZSA9PT0gZmFsc2UgPyBmYWxzZSA6IHJlc3VsdC5zYXZlO1xuICAgICAgY3VyT3B0LnNhdmUgPSBzYXZlUGFyYW0gIT09IGZhbHNlO1xuXG4gICAgICAvLyBSZXNvbHZlIGEgZnVsbCBmaWxlbmFtZSBmcm9tIGFsbCB0aGUgb3B0aW9uc1xuICAgICAgY3VyT3B0LmZpbGVuYW1lID0gcmVzb2x2ZUZpbGVuYW1lKGN1ck9wdCk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHNvbWUgcGFyYW1ldGVycyB0aGF0IG1heSBiZSBhbWJpZ3VvdXMgdG8gdGhlIHVzZXJcbiAgICAgIGRlbGV0ZSBjdXJPcHQuZW5jb2Rpbmc7XG4gICAgICBkZWxldGUgY3VyT3B0LmVuY29kaW5nUXVhbGl0eTtcblxuICAgICAgLy8gQ2xlYW4gaXQgdXAgZnVydGhlciBieSBqdXN0IHJlbW92aW5nIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICAgIGZvciAobGV0IGsgaW4gY3VyT3B0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgY3VyT3B0W2tdID09PSAndW5kZWZpbmVkJykgZGVsZXRlIGN1ck9wdFtrXTtcbiAgICAgIH1cblxuICAgICAgbGV0IHNhdmVQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgIGlmIChjdXJPcHQuc2F2ZSkge1xuICAgICAgICAvLyBXaGV0aGVyIHRvIGFjdHVhbGx5IHNhdmUgKGRvd25sb2FkKSB0aGlzIGZyYWdtZW50XG4gICAgICAgIGNvbnN0IGRhdGEgPSBjdXJPcHQuZGF0YTtcbiAgICAgICAgaWYgKGN1ck9wdC5kYXRhVVJMKSB7XG4gICAgICAgICAgY29uc3QgZGF0YVVSTCA9IGN1ck9wdC5kYXRhVVJMO1xuICAgICAgICAgIHNhdmVQcm9taXNlID0gc2F2ZURhdGFVUkwoZGF0YVVSTCwgY3VyT3B0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzYXZlUHJvbWlzZSA9IHNhdmVGaWxlKGRhdGEsIGN1ck9wdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzYXZlUHJvbWlzZS50aGVuKHNhdmVSZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY3VyT3B0LCBzYXZlUmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pKS50aGVuKGV2ID0+IHtcbiAgICAgIGNvbnN0IHNhdmVkRXZlbnRzID0gZXYuZmlsdGVyKGUgPT4gZS5zYXZlKTtcbiAgICAgIGlmIChzYXZlZEV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIExvZyB0aGUgc2F2ZWQgZXhwb3J0c1xuICAgICAgICBjb25zdCBldmVudFdpdGhPdXRwdXQgPSBzYXZlZEV2ZW50cy5maW5kKGUgPT4gZS5vdXRwdXROYW1lKTtcbiAgICAgICAgY29uc3QgaXNDbGllbnQgPSBzYXZlZEV2ZW50cy5zb21lKGUgPT4gZS5jbGllbnQpO1xuICAgICAgICBjb25zdCBpc1N0cmVhbWluZyA9IHNhdmVkRXZlbnRzLnNvbWUoZSA9PiBlLnN0cmVhbSk7XG4gICAgICAgIGxldCBpdGVtO1xuICAgICAgICAvLyBtYW55IGZpbGVzLCBqdXN0IGxvZyBob3cgbWFueSB3ZXJlIGV4cG9ydGVkXG4gICAgICAgIGlmIChzYXZlZEV2ZW50cy5sZW5ndGggPiAxKSBpdGVtID0gc2F2ZWRFdmVudHMubGVuZ3RoO1xuICAgICAgICAvLyBpbiBDTEksIHdlIGtub3cgZXhhY3QgcGF0aCBkaXJuYW1lXG4gICAgICAgIGVsc2UgaWYgKGV2ZW50V2l0aE91dHB1dCkgaXRlbSA9IGAke2V2ZW50V2l0aE91dHB1dC5vdXRwdXROYW1lfS8ke3NhdmVkRXZlbnRzWzBdLmZpbGVuYW1lfWA7XG4gICAgICAgIC8vIGluIGJyb3dzZXIsIHdlIGNhbiBvbmx5IGtub3cgaXQgd2VudCB0byBcImJyb3dzZXIgZG93bmxvYWQgZm9sZGVyXCJcbiAgICAgICAgZWxzZSBpdGVtID0gYCR7c2F2ZWRFdmVudHNbMF0uZmlsZW5hbWV9YDtcbiAgICAgICAgbGV0IG9mU2VxID0gJyc7XG4gICAgICAgIGlmIChleHBvcnRPcHRzLnNlcXVlbmNlKSB7XG4gICAgICAgICAgY29uc3QgaGFzVG90YWxGcmFtZXMgPSBpc0Zpbml0ZSh0aGlzLnByb3BzLnRvdGFsRnJhbWVzKTtcbiAgICAgICAgICBvZlNlcSA9IGhhc1RvdGFsRnJhbWVzID8gYCAoZnJhbWUgJHtleHBvcnRPcHRzLmZyYW1lICsgMX0gLyAke3RoaXMucHJvcHMudG90YWxGcmFtZXN9KWAgOiBgIChmcmFtZSAke2V4cG9ydE9wdHMuZnJhbWV9KWA7XG4gICAgICAgIH0gZWxzZSBpZiAoc2F2ZWRFdmVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIG9mU2VxID0gYCBmaWxlc2A7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xpZW50ID0gaXNDbGllbnQgPyAnY2FudmFzLXNrZXRjaC1jbGknIDogJ2NhbnZhcy1za2V0Y2gnO1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBpc1N0cmVhbWluZyA/ICdTdHJlYW1pbmcgaW50bycgOiAnRXhwb3J0ZWQnO1xuICAgICAgICBjb25zb2xlLmxvZyhgJWNbJHtjbGllbnR9XSVjICR7YWN0aW9ufSAlYyR7aXRlbX0lYyR7b2ZTZXF9YCwgJ2NvbG9yOiAjOGU4ZThlOycsICdjb2xvcjogaW5pdGlhbDsnLCAnZm9udC13ZWlnaHQ6IGJvbGQ7JywgJ2ZvbnQtd2VpZ2h0OiBpbml0aWFsOycpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaC5wb3N0RXhwb3J0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc2tldGNoLnBvc3RFeHBvcnQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBldjtcbiAgICB9KTtcbiAgfVxuXG4gIF93cmFwQ29udGV4dFNjYWxlIChjYikge1xuICAgIHRoaXMuX3ByZVJlbmRlcigpO1xuICAgIGNiKHRoaXMucHJvcHMpO1xuICAgIHRoaXMuX3Bvc3RSZW5kZXIoKTtcbiAgfVxuXG4gIF9wcmVSZW5kZXIgKCkge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIC8vIFNjYWxlIGNvbnRleHQgZm9yIHVuaXQgc2l6aW5nXG4gICAgaWYgKCF0aGlzLnByb3BzLmdsICYmIHByb3BzLmNvbnRleHQgJiYgIXByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5jb250ZXh0LnNhdmUoKTtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnNjYWxlQ29udGV4dCAhPT0gZmFsc2UpIHtcbiAgICAgICAgcHJvcHMuY29udGV4dC5zY2FsZShwcm9wcy5zY2FsZVgsIHByb3BzLnNjYWxlWSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wcy5wNSkge1xuICAgICAgcHJvcHMucDUuc2NhbGUocHJvcHMuc2NhbGVYIC8gcHJvcHMucGl4ZWxSYXRpbywgcHJvcHMuc2NhbGVZIC8gcHJvcHMucGl4ZWxSYXRpbyk7XG4gICAgfVxuICB9XG5cbiAgX3Bvc3RSZW5kZXIgKCkge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIGlmICghdGhpcy5wcm9wcy5nbCAmJiBwcm9wcy5jb250ZXh0ICYmICFwcm9wcy5wNSkge1xuICAgICAgcHJvcHMuY29udGV4dC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgLy8gRmx1c2ggYnkgZGVmYXVsdCwgdGhpcyBtYXkgYmUgcmV2aXNpdGVkIGF0IGEgbGF0ZXIgcG9pbnQuXG4gICAgLy8gV2UgZG8gdGhpcyB0byBlbnN1cmUgdG9EYXRhVVJMIGNhbiBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIuXG4gICAgLy8gTW9zdCBsaWtlbHkgYnJvd3NlcnMgYWxyZWFkeSBoYW5kbGUgdGhpcywgc28gd2UgbWF5IHJldmlzaXQgdGhpcyBhbmRcbiAgICAvLyByZW1vdmUgaXQgaWYgaXQgaW1wcm92ZXMgcGVyZm9ybWFuY2Ugd2l0aG91dCBhbnkgdXNhYmlsaXR5IGlzc3Vlcy5cbiAgICBpZiAocHJvcHMuZ2wgJiYgdGhpcy5zZXR0aW5ncy5mbHVzaCAhPT0gZmFsc2UgJiYgIXByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5nbC5mbHVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIHRpY2sgKCkge1xuICAgIGlmICh0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2gudGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fcHJlUmVuZGVyKCk7XG4gICAgICB0aGlzLnNrZXRjaC50aWNrKHRoaXMucHJvcHMpO1xuICAgICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlciAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucDUpIHtcbiAgICAgIHRoaXMuX2xhc3RSZWRyYXdSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnByb3BzLnA1LnJlZHJhdygpO1xuICAgICAgcmV0dXJuIHRoaXMuX2xhc3RSZWRyYXdSZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnN1Ym1pdERyYXdDYWxsKCk7XG4gICAgfVxuICB9XG5cbiAgc3VibWl0RHJhd0NhbGwgKCkge1xuICAgIGlmICghdGhpcy5za2V0Y2gpIHJldHVybjtcblxuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLl9wcmVSZW5kZXIoKTtcblxuICAgIGxldCBkcmF3UmVzdWx0O1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZHJhd1Jlc3VsdCA9IHRoaXMuc2tldGNoKHByb3BzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaC5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGRyYXdSZXN1bHQgPSB0aGlzLnNrZXRjaC5yZW5kZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHRoaXMuX3Bvc3RSZW5kZXIoKTtcblxuICAgIHJldHVybiBkcmF3UmVzdWx0O1xuICB9XG5cbiAgdXBkYXRlIChvcHQgPSB7fSkge1xuICAgIC8vIEN1cnJlbnRseSB1cGRhdGUoKSBpcyBvbmx5IGZvY3VzZWQgb24gcmVzaXppbmcsXG4gICAgLy8gYnV0IGxhdGVyIHdlIHdpbGwgc3VwcG9ydCBvdGhlciBvcHRpb25zIGxpa2Ugc3dpdGNoaW5nXG4gICAgLy8gZnJhbWVzIGFuZCBzdWNoLlxuICAgIGNvbnN0IG5vdFlldFN1cHBvcnRlZCA9IFtcbiAgICAgICdhbmltYXRlJ1xuICAgIF07XG5cbiAgICBPYmplY3Qua2V5cyhvcHQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChub3RZZXRTdXBwb3J0ZWQuaW5kZXhPZihrZXkpID49IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb3JyeSwgdGhlIHsgJHtrZXl9IH0gb3B0aW9uIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggdXBkYXRlKCkuYCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBvbGRDYW52YXMgPSB0aGlzLl9zZXR0aW5ncy5jYW52YXM7XG4gICAgY29uc3Qgb2xkQ29udGV4dCA9IHRoaXMuX3NldHRpbmdzLmNvbnRleHQ7XG5cbiAgICAvLyBNZXJnZSBuZXcgb3B0aW9ucyBpbnRvIHNldHRpbmdzXG4gICAgZm9yIChsZXQga2V5IGluIG9wdCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7IC8vIGlnbm9yZSB1bmRlZmluZWRcbiAgICAgICAgdGhpcy5fc2V0dGluZ3Nba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1lcmdlIGluIHRpbWUgcHJvcHNcbiAgICBjb25zdCB0aW1lT3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3NldHRpbmdzLCBvcHQpO1xuICAgIGlmICgndGltZScgaW4gb3B0ICYmICdmcmFtZScgaW4gb3B0KSB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBzaG91bGQgc3BlY2lmeSB7IHRpbWUgfSBvciB7IGZyYW1lIH0gYnV0IG5vdCBib3RoJyk7XG4gICAgZWxzZSBpZiAoJ3RpbWUnIGluIG9wdCkgZGVsZXRlIHRpbWVPcHRzLmZyYW1lO1xuICAgIGVsc2UgaWYgKCdmcmFtZScgaW4gb3B0KSBkZWxldGUgdGltZU9wdHMudGltZTtcbiAgICBpZiAoJ2R1cmF0aW9uJyBpbiBvcHQgJiYgJ3RvdGFsRnJhbWVzJyBpbiBvcHQpIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IHsgZHVyYXRpb24gfSBvciB7IHRvdGFsRnJhbWVzIH0gYnV0IG5vdCBib3RoJyk7XG4gICAgZWxzZSBpZiAoJ2R1cmF0aW9uJyBpbiBvcHQpIGRlbGV0ZSB0aW1lT3B0cy50b3RhbEZyYW1lcztcbiAgICBlbHNlIGlmICgndG90YWxGcmFtZXMnIGluIG9wdCkgZGVsZXRlIHRpbWVPcHRzLmR1cmF0aW9uO1xuXG4gICAgLy8gTWVyZ2UgaW4gdXNlciBkYXRhIHdpdGhvdXQgY29weWluZ1xuICAgIGlmICgnZGF0YScgaW4gb3B0KSB0aGlzLl9wcm9wcy5kYXRhID0gb3B0LmRhdGE7XG5cbiAgICBjb25zdCB0aW1lUHJvcHMgPSB0aGlzLmdldFRpbWVQcm9wcyh0aW1lT3B0cyk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9wcm9wcywgdGltZVByb3BzKTtcblxuICAgIC8vIElmIGVpdGhlciBjYW52YXMgb3IgY29udGV4dCBpcyBjaGFuZ2VkLCB3ZSBzaG91bGQgcmUtdXBkYXRlXG4gICAgaWYgKG9sZENhbnZhcyAhPT0gdGhpcy5fc2V0dGluZ3MuY2FudmFzIHx8IG9sZENvbnRleHQgIT09IHRoaXMuX3NldHRpbmdzLmNvbnRleHQpIHtcbiAgICAgIGNvbnN0IHsgY2FudmFzLCBjb250ZXh0IH0gPSBjcmVhdGVDYW52YXModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgICB0aGlzLnByb3BzLmNhbnZhcyA9IGNhbnZhcztcbiAgICAgIHRoaXMucHJvcHMuY29udGV4dCA9IGNvbnRleHQ7XG5cbiAgICAgIC8vIERlbGV0ZSBvciBhZGQgYSAnZ2wnIHByb3AgZm9yIGNvbnZlbmllbmNlXG4gICAgICB0aGlzLl9zZXR1cEdMS2V5KCk7XG5cbiAgICAgIC8vIFJlLW1vdW50IHRoZSBuZXcgY2FudmFzIGlmIGl0IGhhcyBubyBwYXJlbnRcbiAgICAgIHRoaXMuX2FwcGVuZENhbnZhc0lmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlIHRvIHN1cHBvcnQgUDUuanNcbiAgICBpZiAob3B0LnA1ICYmIHR5cGVvZiBvcHQucDUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMucHJvcHMucDUgPSBvcHQucDU7XG4gICAgICB0aGlzLnByb3BzLnA1LmRyYXcgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc1A1UmVzaXppbmcpIHJldHVybjtcbiAgICAgICAgdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdCA9IHRoaXMuc3VibWl0RHJhd0NhbGwoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHBsYXlpbmcgc3RhdGUgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKCdwbGF5aW5nJyBpbiBvcHQpIHtcbiAgICAgIGlmIChvcHQucGxheWluZykgdGhpcy5wbGF5KCk7XG4gICAgICBlbHNlIHRoaXMucGF1c2UoKTtcbiAgICB9XG5cbiAgICBjaGVja1NldHRpbmdzKHRoaXMuX3NldHRpbmdzKTtcblxuICAgIC8vIERyYXcgbmV3IGZyYW1lXG4gICAgdGhpcy5yZXNpemUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHJldHVybiB0aGlzLnByb3BzO1xuICB9XG5cbiAgcmVzaXplICgpIHtcbiAgICBjb25zdCBvbGRTaXplcyA9IHRoaXMuX2dldFNpemVQcm9wcygpO1xuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzO1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIC8vIFJlY29tcHV0ZSBuZXcgcHJvcGVydGllcyBiYXNlZCBvbiBjdXJyZW50IHNldHVwXG4gICAgY29uc3QgbmV3UHJvcHMgPSByZXNpemVDYW52YXMocHJvcHMsIHNldHRpbmdzKTtcblxuICAgIC8vIEFzc2lnbiB0byBjdXJyZW50IHByb3BzXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9wcm9wcywgbmV3UHJvcHMpO1xuXG4gICAgLy8gTm93IHdlIGFjdHVhbGx5IHVwZGF0ZSB0aGUgY2FudmFzIHdpZHRoL2hlaWdodCBhbmQgc3R5bGUgcHJvcHNcbiAgICBjb25zdCB7XG4gICAgICBwaXhlbFJhdGlvLFxuICAgICAgY2FudmFzV2lkdGgsXG4gICAgICBjYW52YXNIZWlnaHQsXG4gICAgICBzdHlsZVdpZHRoLFxuICAgICAgc3R5bGVIZWlnaHRcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIC8vIFVwZGF0ZSBjYW52YXMgc2V0dGluZ3NcbiAgICBjb25zdCBjYW52YXMgPSB0aGlzLnByb3BzLmNhbnZhcztcbiAgICBpZiAoY2FudmFzICYmIHNldHRpbmdzLnJlc2l6ZUNhbnZhcyAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChwcm9wcy5wNSkge1xuICAgICAgICAvLyBQNS5qcyBzcGVjaWZpYyBlZGdlIGNhc2VcbiAgICAgICAgaWYgKGNhbnZhcy53aWR0aCAhPT0gY2FudmFzV2lkdGggfHwgY2FudmFzLmhlaWdodCAhPT0gY2FudmFzSGVpZ2h0KSB7XG4gICAgICAgICAgdGhpcy5faXNQNVJlc2l6aW5nID0gdHJ1ZTtcbiAgICAgICAgICAvLyBUaGlzIGNhdXNlcyBhIHJlLWRyYXcgOlxcIHNvIHdlIGlnbm9yZSBkcmF3cyBpbiB0aGUgbWVhbiB0aW1lLi4uIHNvcnRhIGhhY2t5XG4gICAgICAgICAgcHJvcHMucDUucGl4ZWxEZW5zaXR5KHBpeGVsUmF0aW8pO1xuICAgICAgICAgIHByb3BzLnA1LnJlc2l6ZUNhbnZhcyhjYW52YXNXaWR0aCAvIHBpeGVsUmF0aW8sIGNhbnZhc0hlaWdodCAvIHBpeGVsUmF0aW8sIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLl9pc1A1UmVzaXppbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yY2UgY2FudmFzIHNpemVcbiAgICAgICAgaWYgKGNhbnZhcy53aWR0aCAhPT0gY2FudmFzV2lkdGgpIGNhbnZhcy53aWR0aCA9IGNhbnZhc1dpZHRoO1xuICAgICAgICBpZiAoY2FudmFzLmhlaWdodCAhPT0gY2FudmFzSGVpZ2h0KSBjYW52YXMuaGVpZ2h0ID0gY2FudmFzSGVpZ2h0O1xuICAgICAgfVxuICAgICAgLy8gVXBkYXRlIGNhbnZhcyBzdHlsZVxuICAgICAgaWYgKGlzQnJvd3NlcigpICYmIHNldHRpbmdzLnN0eWxlQ2FudmFzICE9PSBmYWxzZSkge1xuICAgICAgICBjYW52YXMuc3R5bGUud2lkdGggPSBgJHtzdHlsZVdpZHRofXB4YDtcbiAgICAgICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGAke3N0eWxlSGVpZ2h0fXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBuZXdTaXplcyA9IHRoaXMuX2dldFNpemVQcm9wcygpO1xuICAgIGxldCBjaGFuZ2VkID0gIWRlZXBFcXVhbChvbGRTaXplcywgbmV3U2l6ZXMpO1xuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLl9zaXplQ2hhbmdlZCgpO1xuICAgIH1cbiAgICByZXR1cm4gY2hhbmdlZDtcbiAgfVxuXG4gIF9zaXplQ2hhbmdlZCAoKSB7XG4gICAgLy8gU2VuZCByZXNpemUgZXZlbnQgdG8gc2tldGNoXG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5yZXNpemUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuc2tldGNoLnJlc2l6ZSh0aGlzLnByb3BzKTtcbiAgICB9XG4gIH1cblxuICBhbmltYXRlICgpIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGxheWluZykgcmV0dXJuO1xuICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tjYW52YXMtc2tldGNoXSBXQVJOOiBBbmltYXRpb24gaW4gTm9kZS5qcyBpcyBub3QgeWV0IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9yYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGVIYW5kbGVyKTtcblxuICAgIGxldCBub3cgPSByaWdodE5vdygpO1xuXG4gICAgY29uc3QgZnBzID0gdGhpcy5wcm9wcy5mcHM7XG4gICAgY29uc3QgZnJhbWVJbnRlcnZhbE1TID0gMTAwMCAvIGZwcztcbiAgICBsZXQgZGVsdGFUaW1lTVMgPSBub3cgLSB0aGlzLl9sYXN0VGltZTtcblxuICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy5wcm9wcy5kdXJhdGlvbjtcbiAgICBjb25zdCBoYXNEdXJhdGlvbiA9IHR5cGVvZiBkdXJhdGlvbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoZHVyYXRpb24pO1xuXG4gICAgbGV0IGlzTmV3RnJhbWUgPSB0cnVlO1xuICAgIGNvbnN0IHBsYXliYWNrUmF0ZSA9IHRoaXMuc2V0dGluZ3MucGxheWJhY2tSYXRlO1xuICAgIGlmIChwbGF5YmFja1JhdGUgPT09ICdmaXhlZCcpIHtcbiAgICAgIGRlbHRhVGltZU1TID0gZnJhbWVJbnRlcnZhbE1TO1xuICAgIH0gZWxzZSBpZiAocGxheWJhY2tSYXRlID09PSAndGhyb3R0bGUnKSB7XG4gICAgICBpZiAoZGVsdGFUaW1lTVMgPiBmcmFtZUludGVydmFsTVMpIHtcbiAgICAgICAgbm93ID0gbm93IC0gKGRlbHRhVGltZU1TICUgZnJhbWVJbnRlcnZhbE1TKTtcbiAgICAgICAgdGhpcy5fbGFzdFRpbWUgPSBub3c7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc05ld0ZyYW1lID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xhc3RUaW1lID0gbm93O1xuICAgIH1cblxuICAgIGNvbnN0IGRlbHRhVGltZSA9IGRlbHRhVGltZU1TIC8gMTAwMDtcbiAgICBsZXQgbmV3VGltZSA9IHRoaXMucHJvcHMudGltZSArIGRlbHRhVGltZSAqIHRoaXMucHJvcHMudGltZVNjYWxlO1xuXG4gICAgLy8gSGFuZGxlIHJldmVyc2UgdGltZSBzY2FsZVxuICAgIGlmIChuZXdUaW1lIDwgMCAmJiBoYXNEdXJhdGlvbikge1xuICAgICAgbmV3VGltZSA9IGR1cmF0aW9uICsgbmV3VGltZTtcbiAgICB9XG5cbiAgICAvLyBSZS1zdGFydCBhbmltYXRpb25cbiAgICBsZXQgaXNGaW5pc2hlZCA9IGZhbHNlO1xuICAgIGxldCBpc0xvb3BTdGFydCA9IGZhbHNlO1xuXG4gICAgY29uc3QgbG9vcGluZyA9IHRoaXMuc2V0dGluZ3MubG9vcCAhPT0gZmFsc2U7XG5cbiAgICBpZiAoaGFzRHVyYXRpb24gJiYgbmV3VGltZSA+PSBkdXJhdGlvbikge1xuICAgICAgLy8gUmUtc3RhcnQgYW5pbWF0aW9uXG4gICAgICBpZiAobG9vcGluZykge1xuICAgICAgICBpc05ld0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgbmV3VGltZSA9IG5ld1RpbWUgJSBkdXJhdGlvbjtcbiAgICAgICAgaXNMb29wU3RhcnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNOZXdGcmFtZSA9IGZhbHNlO1xuICAgICAgICBuZXdUaW1lID0gZHVyYXRpb247XG4gICAgICAgIGlzRmluaXNoZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zaWduYWxFbmQoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOZXdGcmFtZSkge1xuICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSBkZWx0YVRpbWU7XG4gICAgICB0aGlzLnByb3BzLnRpbWUgPSBuZXdUaW1lO1xuICAgICAgdGhpcy5wcm9wcy5wbGF5aGVhZCA9IHRoaXMuX2NvbXB1dGVQbGF5aGVhZChuZXdUaW1lLCBkdXJhdGlvbik7XG4gICAgICBjb25zdCBsYXN0RnJhbWUgPSB0aGlzLnByb3BzLmZyYW1lO1xuICAgICAgdGhpcy5wcm9wcy5mcmFtZSA9IHRoaXMuX2NvbXB1dGVDdXJyZW50RnJhbWUoKTtcbiAgICAgIGlmIChpc0xvb3BTdGFydCkgdGhpcy5fc2lnbmFsQmVnaW4oKTtcbiAgICAgIGlmIChsYXN0RnJhbWUgIT09IHRoaXMucHJvcHMuZnJhbWUpIHRoaXMudGljaygpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaXNGaW5pc2hlZCkge1xuICAgICAgdGhpcy5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIGRpc3BhdGNoIChjYikge1xuICAgIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFcnJvcignbXVzdCBwYXNzIGZ1bmN0aW9uIGludG8gZGlzcGF0Y2goKScpO1xuICAgIGNiKHRoaXMucHJvcHMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBtb3VudCAoKSB7XG4gICAgdGhpcy5fYXBwZW5kQ2FudmFzSWZOZWVkZWQoKTtcbiAgfVxuXG4gIHVubW91bnQgKCkge1xuICAgIGlmIChpc0Jyb3dzZXIoKSkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3Jlc2l6ZUhhbmRsZXIpO1xuICAgICAgdGhpcy5fa2V5Ym9hcmRTaG9ydGN1dHMuZGV0YWNoKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLmNhbnZhcy5wYXJlbnRFbGVtZW50KSB7XG4gICAgICB0aGlzLnByb3BzLmNhbnZhcy5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMucHJvcHMuY2FudmFzKTtcbiAgICB9XG4gIH1cblxuICBfYXBwZW5kQ2FudmFzSWZOZWVkZWQgKCkge1xuICAgIGlmICghaXNCcm93c2VyKCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5wYXJlbnQgIT09IGZhbHNlICYmICh0aGlzLnByb3BzLmNhbnZhcyAmJiAhdGhpcy5wcm9wcy5jYW52YXMucGFyZW50RWxlbWVudCkpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRQYXJlbnQgPSB0aGlzLnNldHRpbmdzLnBhcmVudCB8fCBkb2N1bWVudC5ib2R5O1xuICAgICAgZGVmYXVsdFBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLnByb3BzLmNhbnZhcyk7XG4gICAgfVxuICB9XG5cbiAgX3NldHVwR0xLZXkgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLmNvbnRleHQpIHtcbiAgICAgIGlmIChpc1dlYkdMQ29udGV4dCh0aGlzLnByb3BzLmNvbnRleHQpKSB7XG4gICAgICAgIHRoaXMuX3Byb3BzLmdsID0gdGhpcy5wcm9wcy5jb250ZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3Byb3BzLmdsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFRpbWVQcm9wcyAoc2V0dGluZ3MgPSB7fSkge1xuICAgIC8vIEdldCB0aW1pbmcgZGF0YVxuICAgIGxldCBkdXJhdGlvbiA9IHNldHRpbmdzLmR1cmF0aW9uO1xuICAgIGxldCB0b3RhbEZyYW1lcyA9IHNldHRpbmdzLnRvdGFsRnJhbWVzO1xuICAgIGNvbnN0IHRpbWVTY2FsZSA9IGRlZmluZWQoc2V0dGluZ3MudGltZVNjYWxlLCAxKTtcbiAgICBjb25zdCBmcHMgPSBkZWZpbmVkKHNldHRpbmdzLmZwcywgMjQpO1xuICAgIGNvbnN0IGhhc0R1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShkdXJhdGlvbik7XG4gICAgY29uc3QgaGFzVG90YWxGcmFtZXMgPSB0eXBlb2YgdG90YWxGcmFtZXMgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHRvdGFsRnJhbWVzKTtcblxuICAgIGNvbnN0IHRvdGFsRnJhbWVzRnJvbUR1cmF0aW9uID0gaGFzRHVyYXRpb24gPyBNYXRoLmZsb29yKGZwcyAqIGR1cmF0aW9uKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkdXJhdGlvbkZyb21Ub3RhbEZyYW1lcyA9IGhhc1RvdGFsRnJhbWVzID8gKHRvdGFsRnJhbWVzIC8gZnBzKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoaGFzRHVyYXRpb24gJiYgaGFzVG90YWxGcmFtZXMgJiYgdG90YWxGcmFtZXNGcm9tRHVyYXRpb24gIT09IHRvdGFsRnJhbWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBzaG91bGQgc3BlY2lmeSBlaXRoZXIgZHVyYXRpb24gb3IgdG90YWxGcmFtZXMsIGJ1dCBub3QgYm90aC4gT3IsIHRoZXkgbXVzdCBtYXRjaCBleGFjdGx5LicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc2V0dGluZ3MuZGltZW5zaW9ucyA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHNldHRpbmdzLnVuaXRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS53YXJuKGBZb3UndmUgc3BlY2lmaWVkIGEgeyB1bml0cyB9IHNldHRpbmcgYnV0IG5vIHsgZGltZW5zaW9uIH0sIHNvIHRoZSB1bml0cyB3aWxsIGJlIGlnbm9yZWQuYCk7XG4gICAgfVxuXG4gICAgdG90YWxGcmFtZXMgPSBkZWZpbmVkKHRvdGFsRnJhbWVzLCB0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiwgSW5maW5pdHkpO1xuICAgIGR1cmF0aW9uID0gZGVmaW5lZChkdXJhdGlvbiwgZHVyYXRpb25Gcm9tVG90YWxGcmFtZXMsIEluZmluaXR5KTtcblxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHNldHRpbmdzLnRpbWU7XG4gICAgY29uc3Qgc3RhcnRGcmFtZSA9IHNldHRpbmdzLmZyYW1lO1xuICAgIGNvbnN0IGhhc1N0YXJ0VGltZSA9IHR5cGVvZiBzdGFydFRpbWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHN0YXJ0VGltZSk7XG4gICAgY29uc3QgaGFzU3RhcnRGcmFtZSA9IHR5cGVvZiBzdGFydEZyYW1lID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzdGFydEZyYW1lKTtcblxuICAgIC8vIHN0YXJ0IGF0IHplcm8gdW5sZXNzIHVzZXIgc3BlY2lmaWVzIGZyYW1lIG9yIHRpbWUgKGJ1dCBub3QgYm90aCBtaXNtYXRjaGVkKVxuICAgIGxldCB0aW1lID0gMDtcbiAgICBsZXQgZnJhbWUgPSAwO1xuICAgIGxldCBwbGF5aGVhZCA9IDA7XG4gICAgaWYgKGhhc1N0YXJ0VGltZSAmJiBoYXNTdGFydEZyYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBzaG91bGQgc3BlY2lmeSBlaXRoZXIgc3RhcnQgZnJhbWUgb3IgdGltZSwgYnV0IG5vdCBib3RoLicpO1xuICAgIH0gZWxzZSBpZiAoaGFzU3RhcnRUaW1lKSB7XG4gICAgICAvLyBVc2VyIHNwZWNpZmllcyB0aW1lLCB3ZSBpbmZlciBmcmFtZXMgZnJvbSBGUFNcbiAgICAgIHRpbWUgPSBzdGFydFRpbWU7XG4gICAgICBwbGF5aGVhZCA9IHRoaXMuX2NvbXB1dGVQbGF5aGVhZCh0aW1lLCBkdXJhdGlvbik7XG4gICAgICBmcmFtZSA9IHRoaXMuX2NvbXB1dGVGcmFtZShcbiAgICAgICAgcGxheWhlYWQsIHRpbWUsXG4gICAgICAgIHRvdGFsRnJhbWVzLCBmcHNcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChoYXNTdGFydEZyYW1lKSB7XG4gICAgICAvLyBVc2VyIHNwZWNpZmllcyBmcmFtZSBudW1iZXIsIHdlIGluZmVyIHRpbWUgZnJvbSBGUFNcbiAgICAgIGZyYW1lID0gc3RhcnRGcmFtZTtcbiAgICAgIHRpbWUgPSBmcmFtZSAvIGZwcztcbiAgICAgIHBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKHRpbWUsIGR1cmF0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGxheWhlYWQsXG4gICAgICB0aW1lLFxuICAgICAgZnJhbWUsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRvdGFsRnJhbWVzLFxuICAgICAgZnBzLFxuICAgICAgdGltZVNjYWxlXG4gICAgfTtcbiAgfVxuXG4gIHNldHVwIChzZXR0aW5ncyA9IHt9KSB7XG4gICAgaWYgKHRoaXMuc2tldGNoKSB0aHJvdyBuZXcgRXJyb3IoJ011bHRpcGxlIHNldHVwKCkgY2FsbHMgbm90IHlldCBzdXBwb3J0ZWQuJyk7XG5cbiAgICB0aGlzLl9zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHNldHRpbmdzLCB0aGlzLl9zZXR0aW5ncyk7XG5cbiAgICBjaGVja1NldHRpbmdzKHRoaXMuX3NldHRpbmdzKTtcblxuICAgIC8vIEdldCBpbml0aWFsIGNhbnZhcyAmIGNvbnRleHRcbiAgICBjb25zdCB7IGNvbnRleHQsIGNhbnZhcyB9ID0gY3JlYXRlQ2FudmFzKHRoaXMuX3NldHRpbmdzKTtcblxuICAgIGNvbnN0IHRpbWVQcm9wcyA9IHRoaXMuZ2V0VGltZVByb3BzKHRoaXMuX3NldHRpbmdzKTtcblxuICAgIC8vIEluaXRpYWwgcmVuZGVyIHN0YXRlIGZlYXR1cmVzXG4gICAgdGhpcy5fcHJvcHMgPSB7XG4gICAgICAuLi50aW1lUHJvcHMsXG4gICAgICBjYW52YXMsXG4gICAgICBjb250ZXh0LFxuICAgICAgZGVsdGFUaW1lOiAwLFxuICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICBleHBvcnRpbmc6IGZhbHNlLFxuICAgICAgcGxheWluZzogZmFsc2UsXG4gICAgICByZWNvcmRpbmc6IGZhbHNlLFxuICAgICAgc2V0dGluZ3M6IHRoaXMuc2V0dGluZ3MsXG4gICAgICBkYXRhOiB0aGlzLnNldHRpbmdzLmRhdGEsXG5cbiAgICAgIC8vIEV4cG9ydCBzb21lIHNwZWNpZmljIGFjdGlvbnMgdG8gdGhlIHNrZXRjaFxuICAgICAgcmVuZGVyOiAoKSA9PiB0aGlzLnJlbmRlcigpLFxuICAgICAgdG9nZ2xlUGxheTogKCkgPT4gdGhpcy50b2dnbGVQbGF5KCksXG4gICAgICBkaXNwYXRjaDogKGNiKSA9PiB0aGlzLmRpc3BhdGNoKGNiKSxcbiAgICAgIHRpY2s6ICgpID0+IHRoaXMudGljaygpLFxuICAgICAgcmVzaXplOiAoKSA9PiB0aGlzLnJlc2l6ZSgpLFxuICAgICAgdXBkYXRlOiAob3B0KSA9PiB0aGlzLnVwZGF0ZShvcHQpLFxuICAgICAgZXhwb3J0RnJhbWU6IG9wdCA9PiB0aGlzLmV4cG9ydEZyYW1lKG9wdCksXG4gICAgICByZWNvcmQ6ICgpID0+IHRoaXMucmVjb3JkKCksXG4gICAgICBwbGF5OiAoKSA9PiB0aGlzLnBsYXkoKSxcbiAgICAgIHBhdXNlOiAoKSA9PiB0aGlzLnBhdXNlKCksXG4gICAgICBzdG9wOiAoKSA9PiB0aGlzLnN0b3AoKVxuICAgIH07XG5cbiAgICAvLyBGb3IgV2ViR0wgc2tldGNoZXMsIGEgZ2wgdmFyaWFibGUgcmVhZHMgYSBiaXQgYmV0dGVyXG4gICAgdGhpcy5fc2V0dXBHTEtleSgpO1xuXG4gICAgLy8gVHJpZ2dlciBpbml0aWFsIHJlc2l6ZSBub3cgc28gdGhhdCBjYW52YXMgaXMgYWxyZWFkeSBzaXplZFxuICAgIC8vIGJ5IHRoZSB0aW1lIHdlIGxvYWQgdGhlIHNrZXRjaFxuICAgIHRoaXMucmVzaXplKCk7XG4gIH1cblxuICBsb2FkQW5kUnVuIChjYW52YXNTa2V0Y2gsIG5ld1NldHRpbmdzKSB7XG4gICAgcmV0dXJuIHRoaXMubG9hZChjYW52YXNTa2V0Y2gsIG5ld1NldHRpbmdzKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMucnVuKCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9KTtcbiAgfVxuXG4gIHVubG9hZCAoKSB7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIGlmICghdGhpcy5za2V0Y2gpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnVubG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC51bmxvYWQocHJvcHMpKTtcbiAgICB9XG4gICAgdGhpcy5fc2tldGNoID0gbnVsbDtcbiAgfVxuXG4gIGRlc3Ryb3kgKCkge1xuICAgIHRoaXMudW5sb2FkKCk7XG4gICAgdGhpcy51bm1vdW50KCk7XG4gIH1cblxuICBsb2FkIChjcmVhdGVTa2V0Y2gsIG5ld1NldHRpbmdzKSB7XG4gICAgLy8gVXNlciBkaWRuJ3Qgc3BlY2lmeSBhIGZ1bmN0aW9uXG4gICAgaWYgKHR5cGVvZiBjcmVhdGVTa2V0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZ1bmN0aW9uIG11c3QgdGFrZSBpbiBhIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIuIEV4YW1wbGU6XFxuICBjYW52YXNTa2V0Y2hlcigoKSA9PiB7IC4uLiB9LCBzZXR0aW5ncyknKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5za2V0Y2gpIHtcbiAgICAgIHRoaXMudW5sb2FkKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdTZXR0aW5ncyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMudXBkYXRlKG5ld1NldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGEgYml0IG9mIGEgdHJpY2t5IGNhc2U7IHdlIHNldCB1cCB0aGUgYXV0by1zY2FsaW5nIGhlcmVcbiAgICAvLyBpbiBjYXNlIHRoZSB1c2VyIGRlY2lkZXMgdG8gcmVuZGVyIGFueXRoaW5nIHRvIHRoZSBjb250ZXh0ICpiZWZvcmUqIHRoZVxuICAgIC8vIHJlbmRlcigpIGZ1bmN0aW9uLi4uIEhvd2V2ZXIsIHVzZXJzIHNob3VsZCBpbnN0ZWFkIHVzZSBiZWdpbigpIGZ1bmN0aW9uIGZvciB0aGF0LlxuICAgIHRoaXMuX3ByZVJlbmRlcigpO1xuXG4gICAgbGV0IHByZWxvYWQgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIC8vIEJlY2F1c2Ugb2YgUDUuanMncyB1bnVzdWFsIHN0cnVjdHVyZSwgd2UgaGF2ZSB0byBkbyBhIGJpdCBvZlxuICAgIC8vIGxpYnJhcnktc3BlY2lmaWMgY2hhbmdlcyB0byBzdXBwb3J0IGl0IHByb3Blcmx5LlxuICAgIGlmICh0aGlzLnNldHRpbmdzLnA1KSB7XG4gICAgICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignW2NhbnZhcy1za2V0Y2hdIEVSUk9SOiBVc2luZyBwNS5qcyBpbiBOb2RlLmpzIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHByZWxvYWQgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgbGV0IFA1Q29uc3RydWN0b3IgPSB0aGlzLnNldHRpbmdzLnA1O1xuICAgICAgICBsZXQgcHJlbG9hZDtcbiAgICAgICAgaWYgKFA1Q29uc3RydWN0b3IucDUpIHtcbiAgICAgICAgICBwcmVsb2FkID0gUDVDb25zdHJ1Y3Rvci5wcmVsb2FkO1xuICAgICAgICAgIFA1Q29uc3RydWN0b3IgPSBQNUNvbnN0cnVjdG9yLnA1O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHNrZXRjaCBzZXR1cDsgZGlzYWJsZSBsb29wLCBzZXQgc2l6aW5nLCBldGMuXG4gICAgICAgIGNvbnN0IHA1U2tldGNoID0gcDUgPT4ge1xuICAgICAgICAgIC8vIEhvb2sgaW4gcHJlbG9hZCBpZiBuZWNlc3NhcnlcbiAgICAgICAgICBpZiAocHJlbG9hZCkgcDUucHJlbG9hZCA9ICgpID0+IHByZWxvYWQocDUpO1xuICAgICAgICAgIHA1LnNldHVwID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgICAgICAgICAgY29uc3QgaXNHTCA9IHRoaXMuc2V0dGluZ3MuY29udGV4dCA9PT0gJ3dlYmdsJztcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVyID0gaXNHTCA/IHA1LldFQkdMIDogcDUuUDJEO1xuICAgICAgICAgICAgcDUubm9Mb29wKCk7XG4gICAgICAgICAgICBwNS5waXhlbERlbnNpdHkocHJvcHMucGl4ZWxSYXRpbyk7XG4gICAgICAgICAgICBwNS5jcmVhdGVDYW52YXMocHJvcHMudmlld3BvcnRXaWR0aCwgcHJvcHMudmlld3BvcnRIZWlnaHQsIHJlbmRlcmVyKTtcbiAgICAgICAgICAgIGlmIChpc0dMICYmIHRoaXMuc2V0dGluZ3MuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICBwNS5zZXRBdHRyaWJ1dGVzKHRoaXMuc2V0dGluZ3MuYXR0cmlidXRlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlKHsgcDUsIGNhbnZhczogcDUuY2FudmFzLCBjb250ZXh0OiBwNS5fcmVuZGVyZXIuZHJhd2luZ0NvbnRleHQgfSk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBTdXBwb3J0IGdsb2JhbCBhbmQgaW5zdGFuY2UgUDUuanMgbW9kZXNcbiAgICAgICAgaWYgKHR5cGVvZiBQNUNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgbmV3IFA1Q29uc3RydWN0b3IocDVTa2V0Y2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LmNyZWF0ZUNhbnZhcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwieyBwNSB9IHNldHRpbmcgaXMgcGFzc2VkIGJ1dCBjYW4ndCBmaW5kIHA1LmpzIGluIGdsb2JhbCAod2luZG93KSBzY29wZS4gTWF5YmUgeW91IGRpZCBub3QgY3JlYXRlIGl0IGdsb2JhbGx5P1xcbm5ldyBwNSgpOyAvLyA8LS0gYXR0YWNoZXMgdG8gZ2xvYmFsIHNjb3BlXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwNVNrZXRjaCh3aW5kb3cpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJlbG9hZC50aGVuKCgpID0+IHtcbiAgICAgIC8vIExvYWQgdGhlIHVzZXIncyBza2V0Y2hcbiAgICAgIGxldCBsb2FkZXIgPSBjcmVhdGVTa2V0Y2godGhpcy5wcm9wcyk7XG4gICAgICBpZiAoIWlzUHJvbWlzZShsb2FkZXIpKSB7XG4gICAgICAgIGxvYWRlciA9IFByb21pc2UucmVzb2x2ZShsb2FkZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxvYWRlcjtcbiAgICB9KS50aGVuKHNrZXRjaCA9PiB7XG4gICAgICBpZiAoIXNrZXRjaCkgc2tldGNoID0ge307XG4gICAgICB0aGlzLl9za2V0Y2ggPSBza2V0Y2g7XG5cbiAgICAgIC8vIE9uY2UgdGhlIHNrZXRjaCBpcyBsb2FkZWQgd2UgY2FuIGFkZCB0aGUgZXZlbnRzXG4gICAgICBpZiAoaXNCcm93c2VyKCkpIHtcbiAgICAgICAgdGhpcy5fa2V5Ym9hcmRTaG9ydGN1dHMuYXR0YWNoKCk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9yZXNpemVIYW5kbGVyKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuXG4gICAgICAvLyBUaGUgaW5pdGlhbCByZXNpemUoKSBpbiB0aGUgY29uc3RydWN0b3Igd2lsbCBub3QgaGF2ZVxuICAgICAgLy8gdHJpZ2dlcmVkIGEgcmVzaXplKCkgZXZlbnQgb24gdGhlIHNrZXRjaCwgc2luY2UgaXQgd2FzIGJlZm9yZVxuICAgICAgLy8gdGhlIHNrZXRjaCB3YXMgbG9hZGVkLiBTbyB3ZSBzZW5kIHRoZSBzaWduYWwgaGVyZSwgYWxsb3dpbmdcbiAgICAgIC8vIHVzZXJzIHRvIHJlYWN0IHRvIHRoZSBpbml0aWFsIHNpemUgYmVmb3JlIGZpcnN0IHJlbmRlci5cbiAgICAgIHRoaXMuX3NpemVDaGFuZ2VkKCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgY29uc29sZS53YXJuKCdDb3VsZCBub3Qgc3RhcnQgc2tldGNoLCB0aGUgYXN5bmMgbG9hZGluZyBmdW5jdGlvbiByZWplY3RlZCB3aXRoIGFuIGVycm9yOlxcbiAgICBFcnJvcjogJyArIGVyci5tZXNzYWdlKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTa2V0Y2hNYW5hZ2VyO1xuIiwiaW1wb3J0IHsgZ2V0Q2xpZW50QVBJIH0gZnJvbSAnLi4vdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChvcHQgPSB7fSkge1xuICBjb25zdCBoYW5kbGVyID0gZXYgPT4ge1xuICAgIGlmICghb3B0LmVuYWJsZWQoKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gICAgaWYgKGV2LmtleUNvZGUgPT09IDgzICYmICFldi5hbHRLZXkgJiYgKGV2Lm1ldGFLZXkgfHwgZXYuY3RybEtleSkpIHtcbiAgICAgIC8vIENtZCArIFNcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBvcHQuc2F2ZShldik7XG4gICAgfSBlbHNlIGlmIChldi5rZXlDb2RlID09PSAzMikge1xuICAgICAgLy8gU3BhY2VcbiAgICAgIC8vIFRPRE86IHdoYXQgdG8gZG8gd2l0aCB0aGlzPyBrZWVwIGl0LCBvciByZW1vdmUgaXQ/XG4gICAgICBvcHQudG9nZ2xlUGxheShldik7XG4gICAgfSBlbHNlIGlmIChjbGllbnQgJiYgIWV2LmFsdEtleSAmJiBldi5rZXlDb2RlID09PSA3NSAmJiAoZXYubWV0YUtleSB8fCBldi5jdHJsS2V5KSkge1xuICAgICAgLy8gQ21kICsgSywgb25seSB3aGVuIGNhbnZhcy1za2V0Y2gtY2xpIGlzIHVzZWRcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBvcHQuY29tbWl0KGV2KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYXR0YWNoID0gKCkgPT4ge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlcik7XG4gIH07XG5cbiAgY29uc3QgZGV0YWNoID0gKCkgPT4ge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlcik7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhdHRhY2gsXG4gICAgZGV0YWNoXG4gIH07XG59XG4iLCJpbXBvcnQgU2tldGNoTWFuYWdlciBmcm9tICcuL2NvcmUvU2tldGNoTWFuYWdlcic7XG5pbXBvcnQgUGFwZXJTaXplcyBmcm9tICcuL3BhcGVyLXNpemVzJztcbmltcG9ydCB7IGdldENsaWVudEFQSSwgZGVmaW5lZCB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IENBQ0hFID0gJ2hvdC1pZC1jYWNoZSc7XG5jb25zdCBydW50aW1lQ29sbGlzaW9ucyA9IFtdO1xuXG5mdW5jdGlvbiBpc0hvdFJlbG9hZCAoKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICByZXR1cm4gY2xpZW50ICYmIGNsaWVudC5ob3Q7XG59XG5cbmZ1bmN0aW9uIGNhY2hlR2V0IChpZCkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgaWYgKCFjbGllbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNsaWVudFtDQUNIRV0gPSBjbGllbnRbQ0FDSEVdIHx8IHt9O1xuICByZXR1cm4gY2xpZW50W0NBQ0hFXVtpZF07XG59XG5cbmZ1bmN0aW9uIGNhY2hlUHV0IChpZCwgZGF0YSkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgaWYgKCFjbGllbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNsaWVudFtDQUNIRV0gPSBjbGllbnRbQ0FDSEVdIHx8IHt9O1xuICBjbGllbnRbQ0FDSEVdW2lkXSA9IGRhdGE7XG59XG5cbmZ1bmN0aW9uIGdldFRpbWVQcm9wIChvbGRNYW5hZ2VyLCBuZXdTZXR0aW5ncykge1xuICAvLyBTdGF0aWMgc2tldGNoZXMgaWdub3JlIHRoZSB0aW1lIHBlcnNpc3RlbmN5XG4gIHJldHVybiBuZXdTZXR0aW5ncy5hbmltYXRlID8geyB0aW1lOiBvbGRNYW5hZ2VyLnByb3BzLnRpbWUgfSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY2FudmFzU2tldGNoIChza2V0Y2gsIHNldHRpbmdzID0ge30pIHtcbiAgaWYgKHNldHRpbmdzLnA1KSB7XG4gICAgaWYgKHNldHRpbmdzLmNhbnZhcyB8fCAoc2V0dGluZ3MuY29udGV4dCAmJiB0eXBlb2Ygc2V0dGluZ3MuY29udGV4dCAhPT0gJ3N0cmluZycpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEluIHsgcDUgfSBtb2RlLCB5b3UgY2FuJ3QgcGFzcyB5b3VyIG93biBjYW52YXMgb3IgY29udGV4dCwgdW5sZXNzIHRoZSBjb250ZXh0IGlzIGEgXCJ3ZWJnbFwiIG9yIFwiMmRcIiBzdHJpbmdgKTtcbiAgICB9XG5cbiAgICAvLyBEbyBub3QgY3JlYXRlIGEgY2FudmFzIG9uIHN0YXJ0dXAsIHNpbmNlIFA1LmpzIGRvZXMgdGhhdCBmb3IgdXNcbiAgICBjb25zdCBjb250ZXh0ID0gdHlwZW9mIHNldHRpbmdzLmNvbnRleHQgPT09ICdzdHJpbmcnID8gc2V0dGluZ3MuY29udGV4dCA6IGZhbHNlO1xuICAgIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc2V0dGluZ3MsIHsgY2FudmFzOiBmYWxzZSwgY29udGV4dCB9KTtcbiAgfVxuXG4gIGNvbnN0IGlzSG90ID0gaXNIb3RSZWxvYWQoKTtcbiAgbGV0IGhvdElEO1xuICBpZiAoaXNIb3QpIHtcbiAgICAvLyBVc2UgYSBtYWdpYyBuYW1lIGJ5IGRlZmF1bHQsIGZvcmNlIHVzZXIgdG8gZGVmaW5lIGVhY2ggc2tldGNoIGlmIHRoZXlcbiAgICAvLyByZXF1aXJlIG1vcmUgdGhhbiBvbmUgaW4gYW4gYXBwbGljYXRpb24uIE9wZW4gdG8gb3RoZXIgaWRlYXMgb24gaG93IHRvIHRhY2tsZVxuICAgIC8vIHRoaXMgYXMgd2VsbC4uLlxuICAgIGhvdElEID0gZGVmaW5lZChzZXR0aW5ncy5pZCwgJyRfX0RFRkFVTFRfQ0FOVkFTX1NLRVRDSF9JRF9fJCcpO1xuICB9XG4gIGxldCBpc0luamVjdGluZyA9IGlzSG90ICYmIHR5cGVvZiBob3RJRCA9PT0gJ3N0cmluZyc7XG5cbiAgaWYgKGlzSW5qZWN0aW5nICYmIHJ1bnRpbWVDb2xsaXNpb25zLmluY2x1ZGVzKGhvdElEKSkge1xuICAgIGNvbnNvbGUud2FybihgV2FybmluZzogWW91IGhhdmUgbXVsdGlwbGUgY2FsbHMgdG8gY2FudmFzU2tldGNoKCkgaW4gLS1ob3QgbW9kZS4gWW91IG11c3QgcGFzcyB1bmlxdWUgeyBpZCB9IHN0cmluZ3MgaW4gc2V0dGluZ3MgdG8gZW5hYmxlIGhvdCByZWxvYWQgYWNyb3NzIG11bHRpcGxlIHNrZXRjaGVzLiBgLCBob3RJRCk7XG4gICAgaXNJbmplY3RpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGxldCBwcmVsb2FkID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgaWYgKGlzSW5qZWN0aW5nKSB7XG4gICAgLy8gTWFyayB0aGlzIGFzIGFscmVhZHkgc3BvdHRlZCBpbiB0aGlzIHJ1bnRpbWUgaW5zdGFuY2VcbiAgICBydW50aW1lQ29sbGlzaW9ucy5wdXNoKGhvdElEKTtcblxuICAgIGNvbnN0IHByZXZpb3VzRGF0YSA9IGNhY2hlR2V0KGhvdElEKTtcbiAgICBpZiAocHJldmlvdXNEYXRhKSB7XG4gICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAvLyBHcmFiIG5ldyBwcm9wcyBmcm9tIG9sZCBza2V0Y2ggaW5zdGFuY2VcbiAgICAgICAgY29uc3QgbmV3UHJvcHMgPSBnZXRUaW1lUHJvcChwcmV2aW91c0RhdGEubWFuYWdlciwgc2V0dGluZ3MpO1xuICAgICAgICAvLyBEZXN0cm95IHRoZSBvbGQgaW5zdGFuY2VcbiAgICAgICAgcHJldmlvdXNEYXRhLm1hbmFnZXIuZGVzdHJveSgpO1xuICAgICAgICAvLyBQYXNzIGFsb25nIG5ldyBwcm9wc1xuICAgICAgICByZXR1cm4gbmV3UHJvcHM7XG4gICAgICB9O1xuXG4gICAgICAvLyBNb3ZlIGFsb25nIHRoZSBuZXh0IGRhdGEuLi5cbiAgICAgIHByZWxvYWQgPSBwcmV2aW91c0RhdGEubG9hZC50aGVuKG5leHQpLmNhdGNoKG5leHQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcmVsb2FkLnRoZW4obmV3UHJvcHMgPT4ge1xuICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgU2tldGNoTWFuYWdlcigpO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHNrZXRjaCkge1xuICAgICAgLy8gTWVyZ2Ugd2l0aCBpbmNvbWluZyBkYXRhXG4gICAgICBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHNldHRpbmdzLCBuZXdQcm9wcyk7XG5cbiAgICAgIC8vIEFwcGx5IHNldHRpbmdzIGFuZCBjcmVhdGUgYSBjYW52YXNcbiAgICAgIG1hbmFnZXIuc2V0dXAoc2V0dGluZ3MpO1xuXG4gICAgICAvLyBNb3VudCB0byBET01cbiAgICAgIG1hbmFnZXIubW91bnQoKTtcblxuICAgICAgLy8gbG9hZCB0aGUgc2tldGNoIGZpcnN0XG4gICAgICByZXN1bHQgPSBtYW5hZ2VyLmxvYWRBbmRSdW4oc2tldGNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gUHJvbWlzZS5yZXNvbHZlKG1hbmFnZXIpO1xuICAgIH1cbiAgICBpZiAoaXNJbmplY3RpbmcpIHtcbiAgICAgIGNhY2hlUHV0KGhvdElELCB7IGxvYWQ6IHJlc3VsdCwgbWFuYWdlciB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG59XG5cbi8vIFRPRE86IEZpZ3VyZSBvdXQgYSBuaWNlIHdheSB0byBleHBvcnQgdGhpbmdzLlxuY2FudmFzU2tldGNoLmNhbnZhc1NrZXRjaCA9IGNhbnZhc1NrZXRjaDtcbmNhbnZhc1NrZXRjaC5QYXBlclNpemVzID0gUGFwZXJTaXplcztcblxuZXhwb3J0IGRlZmF1bHQgY2FudmFzU2tldGNoO1xuIiwidmFyIGNsb25lID0gKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBfaW5zdGFuY2VvZihvYmosIHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUgIT0gbnVsbCAmJiBvYmogaW5zdGFuY2VvZiB0eXBlO1xufVxuXG52YXIgbmF0aXZlTWFwO1xudHJ5IHtcbiAgbmF0aXZlTWFwID0gTWFwO1xufSBjYXRjaChfKSB7XG4gIC8vIG1heWJlIGEgcmVmZXJlbmNlIGVycm9yIGJlY2F1c2Ugbm8gYE1hcGAuIEdpdmUgaXQgYSBkdW1teSB2YWx1ZSB0aGF0IG5vXG4gIC8vIHZhbHVlIHdpbGwgZXZlciBiZSBhbiBpbnN0YW5jZW9mLlxuICBuYXRpdmVNYXAgPSBmdW5jdGlvbigpIHt9O1xufVxuXG52YXIgbmF0aXZlU2V0O1xudHJ5IHtcbiAgbmF0aXZlU2V0ID0gU2V0O1xufSBjYXRjaChfKSB7XG4gIG5hdGl2ZVNldCA9IGZ1bmN0aW9uKCkge307XG59XG5cbnZhciBuYXRpdmVQcm9taXNlO1xudHJ5IHtcbiAgbmF0aXZlUHJvbWlzZSA9IFByb21pc2U7XG59IGNhdGNoKF8pIHtcbiAgbmF0aXZlUHJvbWlzZSA9IGZ1bmN0aW9uKCkge307XG59XG5cbi8qKlxuICogQ2xvbmVzIChjb3BpZXMpIGFuIE9iamVjdCB1c2luZyBkZWVwIGNvcHlpbmcuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGRlZmF1bHQsIGJ1dCBpZiB5b3UgYXJlIGNlcnRhaW5cbiAqIHRoZXJlIGFyZSBubyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHlvdXIgb2JqZWN0LCB5b3UgY2FuIHNhdmUgc29tZSBDUFUgdGltZVxuICogYnkgY2FsbGluZyBjbG9uZShvYmosIGZhbHNlKS5cbiAqXG4gKiBDYXV0aW9uOiBpZiBgY2lyY3VsYXJgIGlzIGZhbHNlIGFuZCBgcGFyZW50YCBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2VzLFxuICogeW91ciBwcm9ncmFtIG1heSBlbnRlciBhbiBpbmZpbml0ZSBsb29wIGFuZCBjcmFzaC5cbiAqXG4gKiBAcGFyYW0gYHBhcmVudGAgLSB0aGUgb2JqZWN0IHRvIGJlIGNsb25lZFxuICogQHBhcmFtIGBjaXJjdWxhcmAgLSBzZXQgdG8gdHJ1ZSBpZiB0aGUgb2JqZWN0IHRvIGJlIGNsb25lZCBtYXkgY29udGFpblxuICogICAgY2lyY3VsYXIgcmVmZXJlbmNlcy4gKG9wdGlvbmFsIC0gdHJ1ZSBieSBkZWZhdWx0KVxuICogQHBhcmFtIGBkZXB0aGAgLSBzZXQgdG8gYSBudW1iZXIgaWYgdGhlIG9iamVjdCBpcyBvbmx5IHRvIGJlIGNsb25lZCB0b1xuICogICAgYSBwYXJ0aWN1bGFyIGRlcHRoLiAob3B0aW9uYWwgLSBkZWZhdWx0cyB0byBJbmZpbml0eSlcbiAqIEBwYXJhbSBgcHJvdG90eXBlYCAtIHNldHMgdGhlIHByb3RvdHlwZSB0byBiZSB1c2VkIHdoZW4gY2xvbmluZyBhbiBvYmplY3QuXG4gKiAgICAob3B0aW9uYWwgLSBkZWZhdWx0cyB0byBwYXJlbnQgcHJvdG90eXBlKS5cbiAqIEBwYXJhbSBgaW5jbHVkZU5vbkVudW1lcmFibGVgIC0gc2V0IHRvIHRydWUgaWYgdGhlIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXNcbiAqICAgIHNob3VsZCBiZSBjbG9uZWQgYXMgd2VsbC4gTm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBvbiB0aGUgcHJvdG90eXBlXG4gKiAgICBjaGFpbiB3aWxsIGJlIGlnbm9yZWQuIChvcHRpb25hbCAtIGZhbHNlIGJ5IGRlZmF1bHQpXG4qL1xuZnVuY3Rpb24gY2xvbmUocGFyZW50LCBjaXJjdWxhciwgZGVwdGgsIHByb3RvdHlwZSwgaW5jbHVkZU5vbkVudW1lcmFibGUpIHtcbiAgaWYgKHR5cGVvZiBjaXJjdWxhciA9PT0gJ29iamVjdCcpIHtcbiAgICBkZXB0aCA9IGNpcmN1bGFyLmRlcHRoO1xuICAgIHByb3RvdHlwZSA9IGNpcmN1bGFyLnByb3RvdHlwZTtcbiAgICBpbmNsdWRlTm9uRW51bWVyYWJsZSA9IGNpcmN1bGFyLmluY2x1ZGVOb25FbnVtZXJhYmxlO1xuICAgIGNpcmN1bGFyID0gY2lyY3VsYXIuY2lyY3VsYXI7XG4gIH1cbiAgLy8gbWFpbnRhaW4gdHdvIGFycmF5cyBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcywgd2hlcmUgY29ycmVzcG9uZGluZyBwYXJlbnRzXG4gIC8vIGFuZCBjaGlsZHJlbiBoYXZlIHRoZSBzYW1lIGluZGV4XG4gIHZhciBhbGxQYXJlbnRzID0gW107XG4gIHZhciBhbGxDaGlsZHJlbiA9IFtdO1xuXG4gIHZhciB1c2VCdWZmZXIgPSB0eXBlb2YgQnVmZmVyICE9ICd1bmRlZmluZWQnO1xuXG4gIGlmICh0eXBlb2YgY2lyY3VsYXIgPT0gJ3VuZGVmaW5lZCcpXG4gICAgY2lyY3VsYXIgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZGVwdGggPT0gJ3VuZGVmaW5lZCcpXG4gICAgZGVwdGggPSBJbmZpbml0eTtcblxuICAvLyByZWN1cnNlIHRoaXMgZnVuY3Rpb24gc28gd2UgZG9uJ3QgcmVzZXQgYWxsUGFyZW50cyBhbmQgYWxsQ2hpbGRyZW5cbiAgZnVuY3Rpb24gX2Nsb25lKHBhcmVudCwgZGVwdGgpIHtcbiAgICAvLyBjbG9uaW5nIG51bGwgYWx3YXlzIHJldHVybnMgbnVsbFxuICAgIGlmIChwYXJlbnQgPT09IG51bGwpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGlmIChkZXB0aCA9PT0gMClcbiAgICAgIHJldHVybiBwYXJlbnQ7XG5cbiAgICB2YXIgY2hpbGQ7XG4gICAgdmFyIHByb3RvO1xuICAgIGlmICh0eXBlb2YgcGFyZW50ICE9ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cblxuICAgIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZU1hcCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IG5hdGl2ZU1hcCgpO1xuICAgIH0gZWxzZSBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVTZXQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBuYXRpdmVTZXQoKTtcbiAgICB9IGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlUHJvbWlzZSkpIHtcbiAgICAgIGNoaWxkID0gbmV3IG5hdGl2ZVByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBwYXJlbnQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgIHJlc29sdmUoX2Nsb25lKHZhbHVlLCBkZXB0aCAtIDEpKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KF9jbG9uZShlcnIsIGRlcHRoIC0gMSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc0FycmF5KHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gW107XG4gICAgfSBlbHNlIGlmIChjbG9uZS5fX2lzUmVnRXhwKHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IFJlZ0V4cChwYXJlbnQuc291cmNlLCBfX2dldFJlZ0V4cEZsYWdzKHBhcmVudCkpO1xuICAgICAgaWYgKHBhcmVudC5sYXN0SW5kZXgpIGNoaWxkLmxhc3RJbmRleCA9IHBhcmVudC5sYXN0SW5kZXg7XG4gICAgfSBlbHNlIGlmIChjbG9uZS5fX2lzRGF0ZShwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBEYXRlKHBhcmVudC5nZXRUaW1lKCkpO1xuICAgIH0gZWxzZSBpZiAodXNlQnVmZmVyICYmIEJ1ZmZlci5pc0J1ZmZlcihwYXJlbnQpKSB7XG4gICAgICBpZiAoQnVmZmVyLmFsbG9jVW5zYWZlKSB7XG4gICAgICAgIC8vIE5vZGUuanMgPj0gNC41LjBcbiAgICAgICAgY2hpbGQgPSBCdWZmZXIuYWxsb2NVbnNhZmUocGFyZW50Lmxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPbGRlciBOb2RlLmpzIHZlcnNpb25zXG4gICAgICAgIGNoaWxkID0gbmV3IEJ1ZmZlcihwYXJlbnQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHBhcmVudC5jb3B5KGNoaWxkKTtcbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9IGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgRXJyb3IpKSB7XG4gICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBwcm90b3R5cGUgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocGFyZW50KTtcbiAgICAgICAgY2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcbiAgICAgICAgcHJvdG8gPSBwcm90b3R5cGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNpcmN1bGFyKSB7XG4gICAgICB2YXIgaW5kZXggPSBhbGxQYXJlbnRzLmluZGV4T2YocGFyZW50KTtcblxuICAgICAgaWYgKGluZGV4ICE9IC0xKSB7XG4gICAgICAgIHJldHVybiBhbGxDaGlsZHJlbltpbmRleF07XG4gICAgICB9XG4gICAgICBhbGxQYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICAgIGFsbENoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIH1cblxuICAgIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZU1hcCkpIHtcbiAgICAgIHBhcmVudC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgdmFyIGtleUNoaWxkID0gX2Nsb25lKGtleSwgZGVwdGggLSAxKTtcbiAgICAgICAgdmFyIHZhbHVlQ2hpbGQgPSBfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSk7XG4gICAgICAgIGNoaWxkLnNldChrZXlDaGlsZCwgdmFsdWVDaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlU2V0KSkge1xuICAgICAgcGFyZW50LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIGVudHJ5Q2hpbGQgPSBfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSk7XG4gICAgICAgIGNoaWxkLmFkZChlbnRyeUNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgaW4gcGFyZW50KSB7XG4gICAgICB2YXIgYXR0cnM7XG4gICAgICBpZiAocHJvdG8pIHtcbiAgICAgICAgYXR0cnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGF0dHJzICYmIGF0dHJzLnNldCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY2hpbGRbaV0gPSBfY2xvbmUocGFyZW50W2ldLCBkZXB0aCAtIDEpO1xuICAgIH1cblxuICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocGFyZW50KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBEb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGNsb25pbmcgYSBzeW1ib2wgYmVjYXVzZSBpdCBpcyBhIHByaW1pdGl2ZSxcbiAgICAgICAgLy8gbGlrZSBhIG51bWJlciBvciBzdHJpbmcuXG4gICAgICAgIHZhciBzeW1ib2wgPSBzeW1ib2xzW2ldO1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBzeW1ib2wpO1xuICAgICAgICBpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlICYmICFpbmNsdWRlTm9uRW51bWVyYWJsZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkW3N5bWJvbF0gPSBfY2xvbmUocGFyZW50W3N5bWJvbF0sIGRlcHRoIC0gMSk7XG4gICAgICAgIGlmICghZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBzeW1ib2wsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZU5vbkVudW1lcmFibGUpIHtcbiAgICAgIHZhciBhbGxQcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocGFyZW50KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsUHJvcGVydHlOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gYWxsUHJvcGVydHlOYW1lc1tpXTtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwgcHJvcGVydHlOYW1lKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRbcHJvcGVydHlOYW1lXSA9IF9jbG9uZShwYXJlbnRbcHJvcGVydHlOYW1lXSwgZGVwdGggLSAxKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBwcm9wZXJ0eU5hbWUsIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICByZXR1cm4gX2Nsb25lKHBhcmVudCwgZGVwdGgpO1xufVxuXG4vKipcbiAqIFNpbXBsZSBmbGF0IGNsb25lIHVzaW5nIHByb3RvdHlwZSwgYWNjZXB0cyBvbmx5IG9iamVjdHMsIHVzZWZ1bGwgZm9yIHByb3BlcnR5XG4gKiBvdmVycmlkZSBvbiBGTEFUIGNvbmZpZ3VyYXRpb24gb2JqZWN0IChubyBuZXN0ZWQgcHJvcHMpLlxuICpcbiAqIFVTRSBXSVRIIENBVVRJT04hIFRoaXMgbWF5IG5vdCBiZWhhdmUgYXMgeW91IHdpc2ggaWYgeW91IGRvIG5vdCBrbm93IGhvdyB0aGlzXG4gKiB3b3Jrcy5cbiAqL1xuY2xvbmUuY2xvbmVQcm90b3R5cGUgPSBmdW5jdGlvbiBjbG9uZVByb3RvdHlwZShwYXJlbnQpIHtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgYyA9IGZ1bmN0aW9uICgpIHt9O1xuICBjLnByb3RvdHlwZSA9IHBhcmVudDtcbiAgcmV0dXJuIG5ldyBjKCk7XG59O1xuXG4vLyBwcml2YXRlIHV0aWxpdHkgZnVuY3Rpb25zXG5cbmZ1bmN0aW9uIF9fb2JqVG9TdHIobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuY2xvbmUuX19vYmpUb1N0ciA9IF9fb2JqVG9TdHI7XG5cbmZ1bmN0aW9uIF9faXNEYXRlKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBfX29ialRvU3RyKG8pID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5jbG9uZS5fX2lzRGF0ZSA9IF9faXNEYXRlO1xuXG5mdW5jdGlvbiBfX2lzQXJyYXkobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5jbG9uZS5fX2lzQXJyYXkgPSBfX2lzQXJyYXk7XG5cbmZ1bmN0aW9uIF9faXNSZWdFeHAobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuY2xvbmUuX19pc1JlZ0V4cCA9IF9faXNSZWdFeHA7XG5cbmZ1bmN0aW9uIF9fZ2V0UmVnRXhwRmxhZ3MocmUpIHtcbiAgdmFyIGZsYWdzID0gJyc7XG4gIGlmIChyZS5nbG9iYWwpIGZsYWdzICs9ICdnJztcbiAgaWYgKHJlLmlnbm9yZUNhc2UpIGZsYWdzICs9ICdpJztcbiAgaWYgKHJlLm11bHRpbGluZSkgZmxhZ3MgKz0gJ20nO1xuICByZXR1cm4gZmxhZ3M7XG59XG5jbG9uZS5fX2dldFJlZ0V4cEZsYWdzID0gX19nZXRSZWdFeHBGbGFncztcblxucmV0dXJuIGNsb25lO1xufSkoKTtcblxuaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gY2xvbmU7XG59XG4iLCJ2YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcbnZhciB1bml0cyA9IFsgJ21tJywgJ2NtJywgJ20nLCAncGMnLCAncHQnLCAnaW4nLCAnZnQnLCAncHgnIF07XG5cbnZhciBjb252ZXJzaW9ucyA9IHtcbiAgLy8gbWV0cmljXG4gIG06IHtcbiAgICBzeXN0ZW06ICdtZXRyaWMnLFxuICAgIGZhY3RvcjogMVxuICB9LFxuICBjbToge1xuICAgIHN5c3RlbTogJ21ldHJpYycsXG4gICAgZmFjdG9yOiAxIC8gMTAwXG4gIH0sXG4gIG1tOiB7XG4gICAgc3lzdGVtOiAnbWV0cmljJyxcbiAgICBmYWN0b3I6IDEgLyAxMDAwXG4gIH0sXG4gIC8vIGltcGVyaWFsXG4gIHB0OiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMSAvIDcyXG4gIH0sXG4gIHBjOiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMSAvIDZcbiAgfSxcbiAgaW46IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxXG4gIH0sXG4gIGZ0OiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMTJcbiAgfVxufTtcblxuY29uc3QgYW5jaG9ycyA9IHtcbiAgbWV0cmljOiB7XG4gICAgdW5pdDogJ20nLFxuICAgIHJhdGlvOiAxIC8gMC4wMjU0XG4gIH0sXG4gIGltcGVyaWFsOiB7XG4gICAgdW5pdDogJ2luJyxcbiAgICByYXRpbzogMC4wMjU0XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJvdW5kICh2YWx1ZSwgZGVjaW1hbHMpIHtcbiAgcmV0dXJuIE51bWJlcihNYXRoLnJvdW5kKHZhbHVlICsgJ2UnICsgZGVjaW1hbHMpICsgJ2UtJyArIGRlY2ltYWxzKTtcbn1cblxuZnVuY3Rpb24gY29udmVydERpc3RhbmNlICh2YWx1ZSwgZnJvbVVuaXQsIHRvVW5pdCwgb3B0cykge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhaXNGaW5pdGUodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyJyk7XG4gIGlmICghZnJvbVVuaXQgfHwgIXRvVW5pdCkgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHNwZWNpZnkgZnJvbSBhbmQgdG8gdW5pdHMnKTtcblxuICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgdmFyIHBpeGVsc1BlckluY2ggPSBkZWZpbmVkKG9wdHMucGl4ZWxzUGVySW5jaCwgOTYpO1xuICB2YXIgcHJlY2lzaW9uID0gb3B0cy5wcmVjaXNpb247XG4gIHZhciByb3VuZFBpeGVsID0gb3B0cy5yb3VuZFBpeGVsICE9PSBmYWxzZTtcblxuICBmcm9tVW5pdCA9IGZyb21Vbml0LnRvTG93ZXJDYXNlKCk7XG4gIHRvVW5pdCA9IHRvVW5pdC50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmICh1bml0cy5pbmRleE9mKGZyb21Vbml0KSA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcm9tIHVuaXQgXCInICsgZnJvbVVuaXQgKyAnXCIsIG11c3QgYmUgb25lIG9mOiAnICsgdW5pdHMuam9pbignLCAnKSk7XG4gIGlmICh1bml0cy5pbmRleE9mKHRvVW5pdCkgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZnJvbSB1bml0IFwiJyArIHRvVW5pdCArICdcIiwgbXVzdCBiZSBvbmUgb2Y6ICcgKyB1bml0cy5qb2luKCcsICcpKTtcblxuICBpZiAoZnJvbVVuaXQgPT09IHRvVW5pdCkge1xuICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY29udmVydCBmcm9tIEEgdG8gQiBzaW5jZSB0aGV5IGFyZSB0aGUgc2FtZSBhbHJlYWR5XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgdmFyIHRvRmFjdG9yID0gMTtcbiAgdmFyIGZyb21GYWN0b3IgPSAxO1xuICB2YXIgaXNUb1BpeGVsID0gZmFsc2U7XG5cbiAgaWYgKGZyb21Vbml0ID09PSAncHgnKSB7XG4gICAgZnJvbUZhY3RvciA9IDEgLyBwaXhlbHNQZXJJbmNoO1xuICAgIGZyb21Vbml0ID0gJ2luJztcbiAgfVxuICBpZiAodG9Vbml0ID09PSAncHgnKSB7XG4gICAgaXNUb1BpeGVsID0gdHJ1ZTtcbiAgICB0b0ZhY3RvciA9IHBpeGVsc1BlckluY2g7XG4gICAgdG9Vbml0ID0gJ2luJztcbiAgfVxuXG4gIHZhciBmcm9tVW5pdERhdGEgPSBjb252ZXJzaW9uc1tmcm9tVW5pdF07XG4gIHZhciB0b1VuaXREYXRhID0gY29udmVyc2lvbnNbdG9Vbml0XTtcblxuICAvLyBzb3VyY2UgdG8gYW5jaG9yIGluc2lkZSBzb3VyY2UncyBzeXN0ZW1cbiAgdmFyIGFuY2hvciA9IHZhbHVlICogZnJvbVVuaXREYXRhLmZhY3RvciAqIGZyb21GYWN0b3I7XG5cbiAgLy8gaWYgc3lzdGVtcyBkaWZmZXIsIGNvbnZlcnQgb25lIHRvIGFub3RoZXJcbiAgaWYgKGZyb21Vbml0RGF0YS5zeXN0ZW0gIT09IHRvVW5pdERhdGEuc3lzdGVtKSB7XG4gICAgLy8gcmVndWxhciAnbScgdG8gJ2luJyBhbmQgc28gZm9ydGhcbiAgICBhbmNob3IgKj0gYW5jaG9yc1tmcm9tVW5pdERhdGEuc3lzdGVtXS5yYXRpbztcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBhbmNob3IgLyB0b1VuaXREYXRhLmZhY3RvciAqIHRvRmFjdG9yO1xuICBpZiAoaXNUb1BpeGVsICYmIHJvdW5kUGl4ZWwpIHtcbiAgICByZXN1bHQgPSBNYXRoLnJvdW5kKHJlc3VsdCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByZWNpc2lvbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUocHJlY2lzaW9uKSkge1xuICAgIHJlc3VsdCA9IHJvdW5kKHJlc3VsdCwgcHJlY2lzaW9uKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnREaXN0YW5jZTtcbm1vZHVsZS5leHBvcnRzLnVuaXRzID0gdW5pdHM7XG4iLCIvLyBodHRwczovL2QzanMub3JnL2QzLXBhdGgvIHYxLjAuOSBDb3B5cmlnaHQgMjAxOSBNaWtlIEJvc3RvY2tcbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG50eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbnR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuKGdsb2JhbCA9IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5kMyA9IGdsb2JhbC5kMyB8fCB7fSkpO1xufSh0aGlzLCBmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbnZhciBwaSA9IE1hdGguUEksXG4gICAgdGF1ID0gMiAqIHBpLFxuICAgIGVwc2lsb24gPSAxZS02LFxuICAgIHRhdUVwc2lsb24gPSB0YXUgLSBlcHNpbG9uO1xuXG5mdW5jdGlvbiBQYXRoKCkge1xuICB0aGlzLl94MCA9IHRoaXMuX3kwID0gLy8gc3RhcnQgb2YgY3VycmVudCBzdWJwYXRoXG4gIHRoaXMuX3gxID0gdGhpcy5feTEgPSBudWxsOyAvLyBlbmQgb2YgY3VycmVudCBzdWJwYXRoXG4gIHRoaXMuXyA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIHBhdGgoKSB7XG4gIHJldHVybiBuZXcgUGF0aDtcbn1cblxuUGF0aC5wcm90b3R5cGUgPSBwYXRoLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFBhdGgsXG4gIG1vdmVUbzogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MCA9IHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTAgPSB0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgY2xvc2VQYXRoOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5feDEgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3gxID0gdGhpcy5feDAsIHRoaXMuX3kxID0gdGhpcy5feTA7XG4gICAgICB0aGlzLl8gKz0gXCJaXCI7XG4gICAgfVxuICB9LFxuICBsaW5lVG86IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJMXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgcXVhZHJhdGljQ3VydmVUbzogZnVuY3Rpb24oeDEsIHkxLCB4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiUVwiICsgKCt4MSkgKyBcIixcIiArICgreTEpICsgXCIsXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgYmV6aWVyQ3VydmVUbzogZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJDXCIgKyAoK3gxKSArIFwiLFwiICsgKCt5MSkgKyBcIixcIiArICgreDIpICsgXCIsXCIgKyAoK3kyKSArIFwiLFwiICsgKHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIGFyY1RvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5Miwgcikge1xuICAgIHgxID0gK3gxLCB5MSA9ICt5MSwgeDIgPSAreDIsIHkyID0gK3kyLCByID0gK3I7XG4gICAgdmFyIHgwID0gdGhpcy5feDEsXG4gICAgICAgIHkwID0gdGhpcy5feTEsXG4gICAgICAgIHgyMSA9IHgyIC0geDEsXG4gICAgICAgIHkyMSA9IHkyIC0geTEsXG4gICAgICAgIHgwMSA9IHgwIC0geDEsXG4gICAgICAgIHkwMSA9IHkwIC0geTEsXG4gICAgICAgIGwwMV8yID0geDAxICogeDAxICsgeTAxICogeTAxO1xuXG4gICAgLy8gSXMgdGhlIHJhZGl1cyBuZWdhdGl2ZT8gRXJyb3IuXG4gICAgaWYgKHIgPCAwKSB0aHJvdyBuZXcgRXJyb3IoXCJuZWdhdGl2ZSByYWRpdXM6IFwiICsgcik7XG5cbiAgICAvLyBJcyB0aGlzIHBhdGggZW1wdHk/IE1vdmUgdG8gKHgxLHkxKS5cbiAgICBpZiAodGhpcy5feDEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MSA9IHgxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEpO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDAseTApPyBEbyBub3RoaW5nLlxuICAgIGVsc2UgaWYgKCEobDAxXzIgPiBlcHNpbG9uKSk7XG5cbiAgICAvLyBPciwgYXJlICh4MCx5MCksICh4MSx5MSkgYW5kICh4Mix5MikgY29sbGluZWFyP1xuICAgIC8vIEVxdWl2YWxlbnRseSwgaXMgKHgxLHkxKSBjb2luY2lkZW50IHdpdGggKHgyLHkyKT9cbiAgICAvLyBPciwgaXMgdGhlIHJhZGl1cyB6ZXJvPyBMaW5lIHRvICh4MSx5MSkuXG4gICAgZWxzZSBpZiAoIShNYXRoLmFicyh5MDEgKiB4MjEgLSB5MjEgKiB4MDEpID4gZXBzaWxvbikgfHwgIXIpIHtcbiAgICAgIHRoaXMuXyArPSBcIkxcIiArICh0aGlzLl94MSA9IHgxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEpO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSwgZHJhdyBhbiBhcmMhXG4gICAgZWxzZSB7XG4gICAgICB2YXIgeDIwID0geDIgLSB4MCxcbiAgICAgICAgICB5MjAgPSB5MiAtIHkwLFxuICAgICAgICAgIGwyMV8yID0geDIxICogeDIxICsgeTIxICogeTIxLFxuICAgICAgICAgIGwyMF8yID0geDIwICogeDIwICsgeTIwICogeTIwLFxuICAgICAgICAgIGwyMSA9IE1hdGguc3FydChsMjFfMiksXG4gICAgICAgICAgbDAxID0gTWF0aC5zcXJ0KGwwMV8yKSxcbiAgICAgICAgICBsID0gciAqIE1hdGgudGFuKChwaSAtIE1hdGguYWNvcygobDIxXzIgKyBsMDFfMiAtIGwyMF8yKSAvICgyICogbDIxICogbDAxKSkpIC8gMiksXG4gICAgICAgICAgdDAxID0gbCAvIGwwMSxcbiAgICAgICAgICB0MjEgPSBsIC8gbDIxO1xuXG4gICAgICAvLyBJZiB0aGUgc3RhcnQgdGFuZ2VudCBpcyBub3QgY29pbmNpZGVudCB3aXRoICh4MCx5MCksIGxpbmUgdG8uXG4gICAgICBpZiAoTWF0aC5hYnModDAxIC0gMSkgPiBlcHNpbG9uKSB7XG4gICAgICAgIHRoaXMuXyArPSBcIkxcIiArICh4MSArIHQwMSAqIHgwMSkgKyBcIixcIiArICh5MSArIHQwMSAqIHkwMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDAsXCIgKyAoKyh5MDEgKiB4MjAgPiB4MDEgKiB5MjApKSArIFwiLFwiICsgKHRoaXMuX3gxID0geDEgKyB0MjEgKiB4MjEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSArIHQyMSAqIHkyMSk7XG4gICAgfVxuICB9LFxuICBhcmM6IGZ1bmN0aW9uKHgsIHksIHIsIGEwLCBhMSwgY2N3KSB7XG4gICAgeCA9ICt4LCB5ID0gK3ksIHIgPSArciwgY2N3ID0gISFjY3c7XG4gICAgdmFyIGR4ID0gciAqIE1hdGguY29zKGEwKSxcbiAgICAgICAgZHkgPSByICogTWF0aC5zaW4oYTApLFxuICAgICAgICB4MCA9IHggKyBkeCxcbiAgICAgICAgeTAgPSB5ICsgZHksXG4gICAgICAgIGN3ID0gMSBeIGNjdyxcbiAgICAgICAgZGEgPSBjY3cgPyBhMCAtIGExIDogYTEgLSBhMDtcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKFwibmVnYXRpdmUgcmFkaXVzOiBcIiArIHIpO1xuXG4gICAgLy8gSXMgdGhpcyBwYXRoIGVtcHR5PyBNb3ZlIHRvICh4MCx5MCkuXG4gICAgaWYgKHRoaXMuX3gxID09PSBudWxsKSB7XG4gICAgICB0aGlzLl8gKz0gXCJNXCIgKyB4MCArIFwiLFwiICsgeTA7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MCx5MCkgbm90IGNvaW5jaWRlbnQgd2l0aCB0aGUgcHJldmlvdXMgcG9pbnQ/IExpbmUgdG8gKHgwLHkwKS5cbiAgICBlbHNlIGlmIChNYXRoLmFicyh0aGlzLl94MSAtIHgwKSA+IGVwc2lsb24gfHwgTWF0aC5hYnModGhpcy5feTEgLSB5MCkgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJMXCIgKyB4MCArIFwiLFwiICsgeTA7XG4gICAgfVxuXG4gICAgLy8gSXMgdGhpcyBhcmMgZW1wdHk/IFdl4oCZcmUgZG9uZS5cbiAgICBpZiAoIXIpIHJldHVybjtcblxuICAgIC8vIERvZXMgdGhlIGFuZ2xlIGdvIHRoZSB3cm9uZyB3YXk/IEZsaXAgdGhlIGRpcmVjdGlvbi5cbiAgICBpZiAoZGEgPCAwKSBkYSA9IGRhICUgdGF1ICsgdGF1O1xuXG4gICAgLy8gSXMgdGhpcyBhIGNvbXBsZXRlIGNpcmNsZT8gRHJhdyB0d28gYXJjcyB0byBjb21wbGV0ZSB0aGUgY2lyY2xlLlxuICAgIGlmIChkYSA+IHRhdUVwc2lsb24pIHtcbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDEsXCIgKyBjdyArIFwiLFwiICsgKHggLSBkeCkgKyBcIixcIiArICh5IC0gZHkpICsgXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwxLFwiICsgY3cgKyBcIixcIiArICh0aGlzLl94MSA9IHgwKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTApO1xuICAgIH1cblxuICAgIC8vIElzIHRoaXMgYXJjIG5vbi1lbXB0eT8gRHJhdyBhbiBhcmMhXG4gICAgZWxzZSBpZiAoZGEgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCxcIiArICgrKGRhID49IHBpKSkgKyBcIixcIiArIGN3ICsgXCIsXCIgKyAodGhpcy5feDEgPSB4ICsgciAqIE1hdGguY29zKGExKSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkgKyByICogTWF0aC5zaW4oYTEpKTtcbiAgICB9XG4gIH0sXG4gIHJlY3Q6IGZ1bmN0aW9uKHgsIHksIHcsIGgpIHtcbiAgICB0aGlzLl8gKz0gXCJNXCIgKyAodGhpcy5feDAgPSB0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kwID0gdGhpcy5feTEgPSAreSkgKyBcImhcIiArICgrdykgKyBcInZcIiArICgraCkgKyBcImhcIiArICgtdykgKyBcIlpcIjtcbiAgfSxcbiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl87XG4gIH1cbn07XG5cbmV4cG9ydHMucGF0aCA9IHBhdGg7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHNbaV0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIGFyZ3VtZW50c1tpXTtcbiAgICB9XG59O1xuIiwiKGZ1bmN0aW9uKGEsYil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxiKTtlbHNlIGlmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBleHBvcnRzKWIoKTtlbHNle2IoKSxhLkZpbGVTYXZlcj17ZXhwb3J0czp7fX0uZXhwb3J0c319KSh0aGlzLGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihhLGIpe3JldHVyblwidW5kZWZpbmVkXCI9PXR5cGVvZiBiP2I9e2F1dG9Cb206ITF9Olwib2JqZWN0XCIhPXR5cGVvZiBiJiYoY29uc29sZS53YXJuKFwiRGVwcmVjYXRlZDogRXhwZWN0ZWQgdGhpcmQgYXJndW1lbnQgdG8gYmUgYSBvYmplY3RcIiksYj17YXV0b0JvbTohYn0pLGIuYXV0b0JvbSYmL15cXHMqKD86dGV4dFxcL1xcUyp8YXBwbGljYXRpb25cXC94bWx8XFxTKlxcL1xcUypcXCt4bWwpXFxzKjsuKmNoYXJzZXRcXHMqPVxccyp1dGYtOC9pLnRlc3QoYS50eXBlKT9uZXcgQmxvYihbXCJcXHVGRUZGXCIsYV0se3R5cGU6YS50eXBlfSk6YX1mdW5jdGlvbiBjKGEsYixjKXt2YXIgZD1uZXcgWE1MSHR0cFJlcXVlc3Q7ZC5vcGVuKFwiR0VUXCIsYSksZC5yZXNwb25zZVR5cGU9XCJibG9iXCIsZC5vbmxvYWQ9ZnVuY3Rpb24oKXtnKGQucmVzcG9uc2UsYixjKX0sZC5vbmVycm9yPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcImNvdWxkIG5vdCBkb3dubG9hZCBmaWxlXCIpfSxkLnNlbmQoKX1mdW5jdGlvbiBkKGEpe3ZhciBiPW5ldyBYTUxIdHRwUmVxdWVzdDtiLm9wZW4oXCJIRUFEXCIsYSwhMSk7dHJ5e2Iuc2VuZCgpfWNhdGNoKGEpe31yZXR1cm4gMjAwPD1iLnN0YXR1cyYmMjk5Pj1iLnN0YXR1c31mdW5jdGlvbiBlKGEpe3RyeXthLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoXCJjbGlja1wiKSl9Y2F0Y2goYyl7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJNb3VzZUV2ZW50c1wiKTtiLmluaXRNb3VzZUV2ZW50KFwiY2xpY2tcIiwhMCwhMCx3aW5kb3csMCwwLDAsODAsMjAsITEsITEsITEsITEsMCxudWxsKSxhLmRpc3BhdGNoRXZlbnQoYil9fXZhciBmPVwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy53aW5kb3c9PT13aW5kb3c/d2luZG93Olwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmLnNlbGY9PT1zZWxmP3NlbGY6XCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsLmdsb2JhbD09PWdsb2JhbD9nbG9iYWw6dm9pZCAwLGE9Zi5uYXZpZ2F0b3ImJi9NYWNpbnRvc2gvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJi9BcHBsZVdlYktpdC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIS9TYWZhcmkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksZz1mLnNhdmVBc3x8KFwib2JqZWN0XCIhPXR5cGVvZiB3aW5kb3d8fHdpbmRvdyE9PWY/ZnVuY3Rpb24oKXt9OlwiZG93bmxvYWRcImluIEhUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZSYmIWE/ZnVuY3Rpb24oYixnLGgpe3ZhciBpPWYuVVJMfHxmLndlYmtpdFVSTCxqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO2c9Z3x8Yi5uYW1lfHxcImRvd25sb2FkXCIsai5kb3dubG9hZD1nLGoucmVsPVwibm9vcGVuZXJcIixcInN0cmluZ1wiPT10eXBlb2YgYj8oai5ocmVmPWIsai5vcmlnaW49PT1sb2NhdGlvbi5vcmlnaW4/ZShqKTpkKGouaHJlZik/YyhiLGcsaCk6ZShqLGoudGFyZ2V0PVwiX2JsYW5rXCIpKTooai5ocmVmPWkuY3JlYXRlT2JqZWN0VVJMKGIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLnJldm9rZU9iamVjdFVSTChqLmhyZWYpfSw0RTQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlKGopfSwwKSl9OlwibXNTYXZlT3JPcGVuQmxvYlwiaW4gbmF2aWdhdG9yP2Z1bmN0aW9uKGYsZyxoKXtpZihnPWd8fGYubmFtZXx8XCJkb3dubG9hZFwiLFwic3RyaW5nXCIhPXR5cGVvZiBmKW5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKGIoZixoKSxnKTtlbHNlIGlmKGQoZikpYyhmLGcsaCk7ZWxzZXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtpLmhyZWY9ZixpLnRhcmdldD1cIl9ibGFua1wiLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlKGkpfSl9fTpmdW5jdGlvbihiLGQsZSxnKXtpZihnPWd8fG9wZW4oXCJcIixcIl9ibGFua1wiKSxnJiYoZy5kb2N1bWVudC50aXRsZT1nLmRvY3VtZW50LmJvZHkuaW5uZXJUZXh0PVwiZG93bmxvYWRpbmcuLi5cIiksXCJzdHJpbmdcIj09dHlwZW9mIGIpcmV0dXJuIGMoYixkLGUpO3ZhciBoPVwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI9PT1iLnR5cGUsaT0vY29uc3RydWN0b3IvaS50ZXN0KGYuSFRNTEVsZW1lbnQpfHxmLnNhZmFyaSxqPS9DcmlPU1xcL1tcXGRdKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtpZigoanx8aCYmaXx8YSkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBGaWxlUmVhZGVyKXt2YXIgaz1uZXcgRmlsZVJlYWRlcjtrLm9ubG9hZGVuZD1mdW5jdGlvbigpe3ZhciBhPWsucmVzdWx0O2E9aj9hOmEucmVwbGFjZSgvXmRhdGE6W147XSo7LyxcImRhdGE6YXR0YWNobWVudC9maWxlO1wiKSxnP2cubG9jYXRpb24uaHJlZj1hOmxvY2F0aW9uPWEsZz1udWxsfSxrLnJlYWRBc0RhdGFVUkwoYil9ZWxzZXt2YXIgbD1mLlVSTHx8Zi53ZWJraXRVUkwsbT1sLmNyZWF0ZU9iamVjdFVSTChiKTtnP2cubG9jYXRpb249bTpsb2NhdGlvbi5ocmVmPW0sZz1udWxsLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtsLnJldm9rZU9iamVjdFVSTChtKX0sNEU0KX19KTtmLnNhdmVBcz1nLnNhdmVBcz1nLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGUmJihtb2R1bGUuZXhwb3J0cz1nKX0pO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1GaWxlU2F2ZXIubWluLmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBsaW5lY2xpcDtcblxubGluZWNsaXAucG9seWxpbmUgPSBsaW5lY2xpcDtcbmxpbmVjbGlwLnBvbHlnb24gPSBwb2x5Z29uY2xpcDtcblxuXG4vLyBDb2hlbi1TdXRoZXJsYW5kIGxpbmUgY2xpcHBpZ24gYWxnb3JpdGhtLCBhZGFwdGVkIHRvIGVmZmljaWVudGx5XG4vLyBoYW5kbGUgcG9seWxpbmVzIHJhdGhlciB0aGFuIGp1c3Qgc2VnbWVudHNcblxuZnVuY3Rpb24gbGluZWNsaXAocG9pbnRzLCBiYm94LCByZXN1bHQpIHtcblxuICAgIHZhciBsZW4gPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBjb2RlQSA9IGJpdENvZGUocG9pbnRzWzBdLCBiYm94KSxcbiAgICAgICAgcGFydCA9IFtdLFxuICAgICAgICBpLCBhLCBiLCBjb2RlQiwgbGFzdENvZGU7XG5cbiAgICBpZiAoIXJlc3VsdCkgcmVzdWx0ID0gW107XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgYSA9IHBvaW50c1tpIC0gMV07XG4gICAgICAgIGIgPSBwb2ludHNbaV07XG4gICAgICAgIGNvZGVCID0gbGFzdENvZGUgPSBiaXRDb2RlKGIsIGJib3gpO1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG5cbiAgICAgICAgICAgIGlmICghKGNvZGVBIHwgY29kZUIpKSB7IC8vIGFjY2VwdFxuICAgICAgICAgICAgICAgIHBhcnQucHVzaChhKTtcblxuICAgICAgICAgICAgICAgIGlmIChjb2RlQiAhPT0gbGFzdENvZGUpIHsgLy8gc2VnbWVudCB3ZW50IG91dHNpZGVcbiAgICAgICAgICAgICAgICAgICAgcGFydC5wdXNoKGIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgbGVuIC0gMSkgeyAvLyBzdGFydCBhIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gbGVuIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0LnB1c2goYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVBICYgY29kZUIpIHsgLy8gdHJpdmlhbCByZWplY3RcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlQSkgeyAvLyBhIG91dHNpZGUsIGludGVyc2VjdCB3aXRoIGNsaXAgZWRnZVxuICAgICAgICAgICAgICAgIGEgPSBpbnRlcnNlY3QoYSwgYiwgY29kZUEsIGJib3gpO1xuICAgICAgICAgICAgICAgIGNvZGVBID0gYml0Q29kZShhLCBiYm94KTtcblxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gYiBvdXRzaWRlXG4gICAgICAgICAgICAgICAgYiA9IGludGVyc2VjdChhLCBiLCBjb2RlQiwgYmJveCk7XG4gICAgICAgICAgICAgICAgY29kZUIgPSBiaXRDb2RlKGIsIGJib3gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29kZUEgPSBsYXN0Q29kZTtcbiAgICB9XG5cbiAgICBpZiAocGFydC5sZW5ndGgpIHJlc3VsdC5wdXNoKHBhcnQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gU3V0aGVybGFuZC1Ib2RnZW1hbiBwb2x5Z29uIGNsaXBwaW5nIGFsZ29yaXRobVxuXG5mdW5jdGlvbiBwb2x5Z29uY2xpcChwb2ludHMsIGJib3gpIHtcblxuICAgIHZhciByZXN1bHQsIGVkZ2UsIHByZXYsIHByZXZJbnNpZGUsIGksIHAsIGluc2lkZTtcblxuICAgIC8vIGNsaXAgYWdhaW5zdCBlYWNoIHNpZGUgb2YgdGhlIGNsaXAgcmVjdGFuZ2xlXG4gICAgZm9yIChlZGdlID0gMTsgZWRnZSA8PSA4OyBlZGdlICo9IDIpIHtcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIHByZXYgPSBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBwcmV2SW5zaWRlID0gIShiaXRDb2RlKHByZXYsIGJib3gpICYgZWRnZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcCA9IHBvaW50c1tpXTtcbiAgICAgICAgICAgIGluc2lkZSA9ICEoYml0Q29kZShwLCBiYm94KSAmIGVkZ2UpO1xuXG4gICAgICAgICAgICAvLyBpZiBzZWdtZW50IGdvZXMgdGhyb3VnaCB0aGUgY2xpcCB3aW5kb3csIGFkZCBhbiBpbnRlcnNlY3Rpb25cbiAgICAgICAgICAgIGlmIChpbnNpZGUgIT09IHByZXZJbnNpZGUpIHJlc3VsdC5wdXNoKGludGVyc2VjdChwcmV2LCBwLCBlZGdlLCBiYm94KSk7XG5cbiAgICAgICAgICAgIGlmIChpbnNpZGUpIHJlc3VsdC5wdXNoKHApOyAvLyBhZGQgYSBwb2ludCBpZiBpdCdzIGluc2lkZVxuXG4gICAgICAgICAgICBwcmV2ID0gcDtcbiAgICAgICAgICAgIHByZXZJbnNpZGUgPSBpbnNpZGU7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludHMgPSByZXN1bHQ7XG5cbiAgICAgICAgaWYgKCFwb2ludHMubGVuZ3RoKSBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBpbnRlcnNlY3QgYSBzZWdtZW50IGFnYWluc3Qgb25lIG9mIHRoZSA0IGxpbmVzIHRoYXQgbWFrZSB1cCB0aGUgYmJveFxuXG5mdW5jdGlvbiBpbnRlcnNlY3QoYSwgYiwgZWRnZSwgYmJveCkge1xuICAgIHJldHVybiBlZGdlICYgOCA/IFthWzBdICsgKGJbMF0gLSBhWzBdKSAqIChiYm94WzNdIC0gYVsxXSkgLyAoYlsxXSAtIGFbMV0pLCBiYm94WzNdXSA6IC8vIHRvcFxuICAgICAgICAgICBlZGdlICYgNCA/IFthWzBdICsgKGJbMF0gLSBhWzBdKSAqIChiYm94WzFdIC0gYVsxXSkgLyAoYlsxXSAtIGFbMV0pLCBiYm94WzFdXSA6IC8vIGJvdHRvbVxuICAgICAgICAgICBlZGdlICYgMiA/IFtiYm94WzJdLCBhWzFdICsgKGJbMV0gLSBhWzFdKSAqIChiYm94WzJdIC0gYVswXSkgLyAoYlswXSAtIGFbMF0pXSA6IC8vIHJpZ2h0XG4gICAgICAgICAgIGVkZ2UgJiAxID8gW2Jib3hbMF0sIGFbMV0gKyAoYlsxXSAtIGFbMV0pICogKGJib3hbMF0gLSBhWzBdKSAvIChiWzBdIC0gYVswXSldIDogLy8gbGVmdFxuICAgICAgICAgICBudWxsO1xufVxuXG4vLyBiaXQgY29kZSByZWZsZWN0cyB0aGUgcG9pbnQgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGJib3g6XG5cbi8vICAgICAgICAgbGVmdCAgbWlkICByaWdodFxuLy8gICAgdG9wICAxMDAxICAxMDAwICAxMDEwXG4vLyAgICBtaWQgIDAwMDEgIDAwMDAgIDAwMTBcbi8vIGJvdHRvbSAgMDEwMSAgMDEwMCAgMDExMFxuXG5mdW5jdGlvbiBiaXRDb2RlKHAsIGJib3gpIHtcbiAgICB2YXIgY29kZSA9IDA7XG5cbiAgICBpZiAocFswXSA8IGJib3hbMF0pIGNvZGUgfD0gMTsgLy8gbGVmdFxuICAgIGVsc2UgaWYgKHBbMF0gPiBiYm94WzJdKSBjb2RlIHw9IDI7IC8vIHJpZ2h0XG5cbiAgICBpZiAocFsxXSA8IGJib3hbMV0pIGNvZGUgfD0gNDsgLy8gYm90dG9tXG4gICAgZWxzZSBpZiAocFsxXSA+IGJib3hbM10pIGNvZGUgfD0gODsgLy8gdG9wXG5cbiAgICByZXR1cm4gY29kZTtcbn1cbiIsIid1c2Ugc3RyaWN0J1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBub3JtYWxpemVcclxuXHJcbnZhciBhcmNUb0N1cnZlID0gcmVxdWlyZSgnc3ZnLWFyYy10by1jdWJpYy1iZXppZXInKVxyXG5cclxuZnVuY3Rpb24gbm9ybWFsaXplKHBhdGgpe1xyXG4gIC8vIGluaXQgc3RhdGVcclxuICB2YXIgcHJldlxyXG4gIHZhciByZXN1bHQgPSBbXVxyXG4gIHZhciBiZXppZXJYID0gMFxyXG4gIHZhciBiZXppZXJZID0gMFxyXG4gIHZhciBzdGFydFggPSAwXHJcbiAgdmFyIHN0YXJ0WSA9IDBcclxuICB2YXIgcXVhZFggPSBudWxsXHJcbiAgdmFyIHF1YWRZID0gbnVsbFxyXG4gIHZhciB4ID0gMFxyXG4gIHZhciB5ID0gMFxyXG5cclxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gcGF0aC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgdmFyIHNlZyA9IHBhdGhbaV1cclxuICAgIHZhciBjb21tYW5kID0gc2VnWzBdXHJcblxyXG4gICAgc3dpdGNoIChjb21tYW5kKSB7XHJcbiAgICAgIGNhc2UgJ00nOlxyXG4gICAgICAgIHN0YXJ0WCA9IHNlZ1sxXVxyXG4gICAgICAgIHN0YXJ0WSA9IHNlZ1syXVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgIHZhciBjdXJ2ZXMgPSBhcmNUb0N1cnZlKHtcclxuICAgICAgICAgIHB4OiB4LFxyXG4gICAgICAgICAgcHk6IHksXHJcbiAgICAgICAgICBjeDogc2VnWzZdLFxyXG4gICAgICAgICAgY3k6ICBzZWdbN10sXHJcbiAgICAgICAgICByeDogc2VnWzFdLFxyXG4gICAgICAgICAgcnk6IHNlZ1syXSxcclxuICAgICAgICAgIHhBeGlzUm90YXRpb246IHNlZ1szXSxcclxuICAgICAgICAgIGxhcmdlQXJjRmxhZzogc2VnWzRdLFxyXG4gICAgICAgICAgc3dlZXBGbGFnOiBzZWdbNV1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICAvLyBudWxsLWN1cnZlc1xyXG4gICAgICAgIGlmICghY3VydmVzLmxlbmd0aCkgY29udGludWVcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDAsIGM7IGogPCBjdXJ2ZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGMgPSBjdXJ2ZXNbal1cclxuICAgICAgICAgIHNlZyA9IFsnQycsIGMueDEsIGMueTEsIGMueDIsIGMueTIsIGMueCwgYy55XVxyXG4gICAgICAgICAgaWYgKGogPCBjdXJ2ZXMubGVuZ3RoIC0gMSkgcmVzdWx0LnB1c2goc2VnKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnUyc6XHJcbiAgICAgICAgLy8gZGVmYXVsdCBjb250cm9sIHBvaW50XHJcbiAgICAgICAgdmFyIGN4ID0geFxyXG4gICAgICAgIHZhciBjeSA9IHlcclxuICAgICAgICBpZiAocHJldiA9PSAnQycgfHwgcHJldiA9PSAnUycpIHtcclxuICAgICAgICAgIGN4ICs9IGN4IC0gYmV6aWVyWCAvLyByZWZsZWN0IHRoZSBwcmV2aW91cyBjb21tYW5kJ3MgY29udHJvbFxyXG4gICAgICAgICAgY3kgKz0gY3kgLSBiZXppZXJZIC8vIHBvaW50IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvaW50XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlZyA9IFsnQycsIGN4LCBjeSwgc2VnWzFdLCBzZWdbMl0sIHNlZ1szXSwgc2VnWzRdXVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ1QnOlxyXG4gICAgICAgIGlmIChwcmV2ID09ICdRJyB8fCBwcmV2ID09ICdUJykge1xyXG4gICAgICAgICAgcXVhZFggPSB4ICogMiAtIHF1YWRYIC8vIGFzIHdpdGggJ1MnIHJlZmxlY3QgcHJldmlvdXMgY29udHJvbCBwb2ludFxyXG4gICAgICAgICAgcXVhZFkgPSB5ICogMiAtIHF1YWRZXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHF1YWRYID0geFxyXG4gICAgICAgICAgcXVhZFkgPSB5XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlZyA9IHF1YWRyYXRpYyh4LCB5LCBxdWFkWCwgcXVhZFksIHNlZ1sxXSwgc2VnWzJdKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ1EnOlxyXG4gICAgICAgIHF1YWRYID0gc2VnWzFdXHJcbiAgICAgICAgcXVhZFkgPSBzZWdbMl1cclxuICAgICAgICBzZWcgPSBxdWFkcmF0aWMoeCwgeSwgc2VnWzFdLCBzZWdbMl0sIHNlZ1szXSwgc2VnWzRdKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ0wnOlxyXG4gICAgICAgIHNlZyA9IGxpbmUoeCwgeSwgc2VnWzFdLCBzZWdbMl0pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnSCc6XHJcbiAgICAgICAgc2VnID0gbGluZSh4LCB5LCBzZWdbMV0sIHkpXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnVic6XHJcbiAgICAgICAgc2VnID0gbGluZSh4LCB5LCB4LCBzZWdbMV0pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnWic6XHJcbiAgICAgICAgc2VnID0gbGluZSh4LCB5LCBzdGFydFgsIHN0YXJ0WSlcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHVwZGF0ZSBzdGF0ZVxyXG4gICAgcHJldiA9IGNvbW1hbmRcclxuICAgIHggPSBzZWdbc2VnLmxlbmd0aCAtIDJdXHJcbiAgICB5ID0gc2VnW3NlZy5sZW5ndGggLSAxXVxyXG4gICAgaWYgKHNlZy5sZW5ndGggPiA0KSB7XHJcbiAgICAgIGJlemllclggPSBzZWdbc2VnLmxlbmd0aCAtIDRdXHJcbiAgICAgIGJlemllclkgPSBzZWdbc2VnLmxlbmd0aCAtIDNdXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBiZXppZXJYID0geFxyXG4gICAgICBiZXppZXJZID0geVxyXG4gICAgfVxyXG4gICAgcmVzdWx0LnB1c2goc2VnKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdFxyXG59XHJcblxyXG5mdW5jdGlvbiBsaW5lKHgxLCB5MSwgeDIsIHkyKXtcclxuICByZXR1cm4gWydDJywgeDEsIHkxLCB4MiwgeTIsIHgyLCB5Ml1cclxufVxyXG5cclxuZnVuY3Rpb24gcXVhZHJhdGljKHgxLCB5MSwgY3gsIGN5LCB4MiwgeTIpe1xyXG4gIHJldHVybiBbXHJcbiAgICAnQycsXHJcbiAgICB4MS8zICsgKDIvMykgKiBjeCxcclxuICAgIHkxLzMgKyAoMi8zKSAqIGN5LFxyXG4gICAgeDIvMyArICgyLzMpICogY3gsXHJcbiAgICB5Mi8zICsgKDIvMykgKiBjeSxcclxuICAgIHgyLFxyXG4gICAgeTJcclxuICBdXHJcbn1cclxuIiwiXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlXG5cbi8qKlxuICogZXhwZWN0ZWQgYXJndW1lbnQgbGVuZ3Roc1xuICogQHR5cGUge09iamVjdH1cbiAqL1xuXG52YXIgbGVuZ3RoID0ge2E6IDcsIGM6IDYsIGg6IDEsIGw6IDIsIG06IDIsIHE6IDQsIHM6IDQsIHQ6IDIsIHY6IDEsIHo6IDB9XG5cbi8qKlxuICogc2VnbWVudCBwYXR0ZXJuXG4gKiBAdHlwZSB7UmVnRXhwfVxuICovXG5cbnZhciBzZWdtZW50ID0gLyhbYXN0dnpxbWhsY10pKFteYXN0dnpxbWhsY10qKS9pZ1xuXG4vKipcbiAqIHBhcnNlIGFuIHN2ZyBwYXRoIGRhdGEgc3RyaW5nLiBHZW5lcmF0ZXMgYW4gQXJyYXlcbiAqIG9mIGNvbW1hbmRzIHdoZXJlIGVhY2ggY29tbWFuZCBpcyBhbiBBcnJheSBvZiB0aGVcbiAqIGZvcm0gYFtjb21tYW5kLCBhcmcxLCBhcmcyLCAuLi5dYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShwYXRoKSB7XG5cdHZhciBkYXRhID0gW11cblx0cGF0aC5yZXBsYWNlKHNlZ21lbnQsIGZ1bmN0aW9uKF8sIGNvbW1hbmQsIGFyZ3Mpe1xuXHRcdHZhciB0eXBlID0gY29tbWFuZC50b0xvd2VyQ2FzZSgpXG5cdFx0YXJncyA9IHBhcnNlVmFsdWVzKGFyZ3MpXG5cblx0XHQvLyBvdmVybG9hZGVkIG1vdmVUb1xuXHRcdGlmICh0eXBlID09ICdtJyAmJiBhcmdzLmxlbmd0aCA+IDIpIHtcblx0XHRcdGRhdGEucHVzaChbY29tbWFuZF0uY29uY2F0KGFyZ3Muc3BsaWNlKDAsIDIpKSlcblx0XHRcdHR5cGUgPSAnbCdcblx0XHRcdGNvbW1hbmQgPSBjb21tYW5kID09ICdtJyA/ICdsJyA6ICdMJ1xuXHRcdH1cblxuXHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHRpZiAoYXJncy5sZW5ndGggPT0gbGVuZ3RoW3R5cGVdKSB7XG5cdFx0XHRcdGFyZ3MudW5zaGlmdChjb21tYW5kKVxuXHRcdFx0XHRyZXR1cm4gZGF0YS5wdXNoKGFyZ3MpXG5cdFx0XHR9XG5cdFx0XHRpZiAoYXJncy5sZW5ndGggPCBsZW5ndGhbdHlwZV0pIHRocm93IG5ldyBFcnJvcignbWFsZm9ybWVkIHBhdGggZGF0YScpXG5cdFx0XHRkYXRhLnB1c2goW2NvbW1hbmRdLmNvbmNhdChhcmdzLnNwbGljZSgwLCBsZW5ndGhbdHlwZV0pKSlcblx0XHR9XG5cdH0pXG5cdHJldHVybiBkYXRhXG59XG5cbnZhciBudW1iZXIgPSAvLT9bMC05XSpcXC4/WzAtOV0rKD86ZVstK10/XFxkKyk/L2lnXG5cbmZ1bmN0aW9uIHBhcnNlVmFsdWVzKGFyZ3MpIHtcblx0dmFyIG51bWJlcnMgPSBhcmdzLm1hdGNoKG51bWJlcilcblx0cmV0dXJuIG51bWJlcnMgPyBudW1iZXJzLm1hcChOdW1iZXIpIDogW11cbn1cbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciB3aWR0aCA9IDI1NjsvLyBlYWNoIFJDNCBvdXRwdXQgaXMgMCA8PSB4IDwgMjU2XHJcbnZhciBjaHVua3MgPSA2Oy8vIGF0IGxlYXN0IHNpeCBSQzQgb3V0cHV0cyBmb3IgZWFjaCBkb3VibGVcclxudmFyIGRpZ2l0cyA9IDUyOy8vIHRoZXJlIGFyZSA1MiBzaWduaWZpY2FudCBkaWdpdHMgaW4gYSBkb3VibGVcclxudmFyIHBvb2wgPSBbXTsvLyBwb29sOiBlbnRyb3B5IHBvb2wgc3RhcnRzIGVtcHR5XHJcbnZhciBHTE9CQUwgPSB0eXBlb2YgZ2xvYmFsID09PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbDtcclxuXHJcbi8vXHJcbi8vIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWxhdGVkIHRvIElFRUUgNzU0IGxpbWl0cy5cclxuLy9cclxudmFyIHN0YXJ0ZGVub20gPSBNYXRoLnBvdyh3aWR0aCwgY2h1bmtzKSxcclxuICAgIHNpZ25pZmljYW5jZSA9IE1hdGgucG93KDIsIGRpZ2l0cyksXHJcbiAgICBvdmVyZmxvdyA9IHNpZ25pZmljYW5jZSAqIDIsXHJcbiAgICBtYXNrID0gd2lkdGggLSAxO1xyXG5cclxuXHJcbnZhciBvbGRSYW5kb20gPSBNYXRoLnJhbmRvbTtcclxuXHJcbi8vXHJcbi8vIHNlZWRyYW5kb20oKVxyXG4vLyBUaGlzIGlzIHRoZSBzZWVkcmFuZG9tIGZ1bmN0aW9uIGRlc2NyaWJlZCBhYm92ZS5cclxuLy9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihzZWVkLCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nbG9iYWwgPT09IHRydWUpIHtcclxuICAgIG9wdGlvbnMuZ2xvYmFsID0gZmFsc2U7XHJcbiAgICBNYXRoLnJhbmRvbSA9IG1vZHVsZS5leHBvcnRzKHNlZWQsIG9wdGlvbnMpO1xyXG4gICAgb3B0aW9ucy5nbG9iYWwgPSB0cnVlO1xyXG4gICAgcmV0dXJuIE1hdGgucmFuZG9tO1xyXG4gIH1cclxuICB2YXIgdXNlX2VudHJvcHkgPSAob3B0aW9ucyAmJiBvcHRpb25zLmVudHJvcHkpIHx8IGZhbHNlO1xyXG4gIHZhciBrZXkgPSBbXTtcclxuXHJcbiAgLy8gRmxhdHRlbiB0aGUgc2VlZCBzdHJpbmcgb3IgYnVpbGQgb25lIGZyb20gbG9jYWwgZW50cm9weSBpZiBuZWVkZWQuXHJcbiAgdmFyIHNob3J0c2VlZCA9IG1peGtleShmbGF0dGVuKFxyXG4gICAgdXNlX2VudHJvcHkgPyBbc2VlZCwgdG9zdHJpbmcocG9vbCldIDpcclxuICAgIDAgaW4gYXJndW1lbnRzID8gc2VlZCA6IGF1dG9zZWVkKCksIDMpLCBrZXkpO1xyXG5cclxuICAvLyBVc2UgdGhlIHNlZWQgdG8gaW5pdGlhbGl6ZSBhbiBBUkM0IGdlbmVyYXRvci5cclxuICB2YXIgYXJjNCA9IG5ldyBBUkM0KGtleSk7XHJcblxyXG4gIC8vIE1peCB0aGUgcmFuZG9tbmVzcyBpbnRvIGFjY3VtdWxhdGVkIGVudHJvcHkuXHJcbiAgbWl4a2V5KHRvc3RyaW5nKGFyYzQuUyksIHBvb2wpO1xyXG5cclxuICAvLyBPdmVycmlkZSBNYXRoLnJhbmRvbVxyXG5cclxuICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSByYW5kb20gZG91YmxlIGluIFswLCAxKSB0aGF0IGNvbnRhaW5zXHJcbiAgLy8gcmFuZG9tbmVzcyBpbiBldmVyeSBiaXQgb2YgdGhlIG1hbnRpc3NhIG9mIHRoZSBJRUVFIDc1NCB2YWx1ZS5cclxuXHJcbiAgcmV0dXJuIGZ1bmN0aW9uKCkgeyAgICAgICAgIC8vIENsb3N1cmUgdG8gcmV0dXJuIGEgcmFuZG9tIGRvdWJsZTpcclxuICAgIHZhciBuID0gYXJjNC5nKGNodW5rcyksICAgICAgICAgICAgIC8vIFN0YXJ0IHdpdGggYSBudW1lcmF0b3IgbiA8IDIgXiA0OFxyXG4gICAgICAgIGQgPSBzdGFydGRlbm9tLCAgICAgICAgICAgICAgICAgLy8gICBhbmQgZGVub21pbmF0b3IgZCA9IDIgXiA0OC5cclxuICAgICAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgYW5kIG5vICdleHRyYSBsYXN0IGJ5dGUnLlxyXG4gICAgd2hpbGUgKG4gPCBzaWduaWZpY2FuY2UpIHsgICAgICAgICAgLy8gRmlsbCB1cCBhbGwgc2lnbmlmaWNhbnQgZGlnaXRzIGJ5XHJcbiAgICAgIG4gPSAobiArIHgpICogd2lkdGg7ICAgICAgICAgICAgICAvLyAgIHNoaWZ0aW5nIG51bWVyYXRvciBhbmRcclxuICAgICAgZCAqPSB3aWR0aDsgICAgICAgICAgICAgICAgICAgICAgIC8vICAgZGVub21pbmF0b3IgYW5kIGdlbmVyYXRpbmcgYVxyXG4gICAgICB4ID0gYXJjNC5nKDEpOyAgICAgICAgICAgICAgICAgICAgLy8gICBuZXcgbGVhc3Qtc2lnbmlmaWNhbnQtYnl0ZS5cclxuICAgIH1cclxuICAgIHdoaWxlIChuID49IG92ZXJmbG93KSB7ICAgICAgICAgICAgIC8vIFRvIGF2b2lkIHJvdW5kaW5nIHVwLCBiZWZvcmUgYWRkaW5nXHJcbiAgICAgIG4gLz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGxhc3QgYnl0ZSwgc2hpZnQgZXZlcnl0aGluZ1xyXG4gICAgICBkIC89IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICByaWdodCB1c2luZyBpbnRlZ2VyIE1hdGggdW50aWxcclxuICAgICAgeCA+Pj49IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgd2UgaGF2ZSBleGFjdGx5IHRoZSBkZXNpcmVkIGJpdHMuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gKG4gKyB4KSAvIGQ7ICAgICAgICAgICAgICAgICAvLyBGb3JtIHRoZSBudW1iZXIgd2l0aGluIFswLCAxKS5cclxuICB9O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMucmVzZXRHbG9iYWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgTWF0aC5yYW5kb20gPSBvbGRSYW5kb207XHJcbn07XHJcblxyXG4vL1xyXG4vLyBBUkM0XHJcbi8vXHJcbi8vIEFuIEFSQzQgaW1wbGVtZW50YXRpb24uICBUaGUgY29uc3RydWN0b3IgdGFrZXMgYSBrZXkgaW4gdGhlIGZvcm0gb2ZcclxuLy8gYW4gYXJyYXkgb2YgYXQgbW9zdCAod2lkdGgpIGludGVnZXJzIHRoYXQgc2hvdWxkIGJlIDAgPD0geCA8ICh3aWR0aCkuXHJcbi8vXHJcbi8vIFRoZSBnKGNvdW50KSBtZXRob2QgcmV0dXJucyBhIHBzZXVkb3JhbmRvbSBpbnRlZ2VyIHRoYXQgY29uY2F0ZW5hdGVzXHJcbi8vIHRoZSBuZXh0IChjb3VudCkgb3V0cHV0cyBmcm9tIEFSQzQuICBJdHMgcmV0dXJuIHZhbHVlIGlzIGEgbnVtYmVyIHhcclxuLy8gdGhhdCBpcyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgKHdpZHRoIF4gY291bnQpLlxyXG4vL1xyXG4vKiogQGNvbnN0cnVjdG9yICovXHJcbmZ1bmN0aW9uIEFSQzQoa2V5KSB7XHJcbiAgdmFyIHQsIGtleWxlbiA9IGtleS5sZW5ndGgsXHJcbiAgICAgIG1lID0gdGhpcywgaSA9IDAsIGogPSBtZS5pID0gbWUuaiA9IDAsIHMgPSBtZS5TID0gW107XHJcblxyXG4gIC8vIFRoZSBlbXB0eSBrZXkgW10gaXMgdHJlYXRlZCBhcyBbMF0uXHJcbiAgaWYgKCFrZXlsZW4pIHsga2V5ID0gW2tleWxlbisrXTsgfVxyXG5cclxuICAvLyBTZXQgdXAgUyB1c2luZyB0aGUgc3RhbmRhcmQga2V5IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxyXG4gIHdoaWxlIChpIDwgd2lkdGgpIHtcclxuICAgIHNbaV0gPSBpKys7XHJcbiAgfVxyXG4gIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7XHJcbiAgICBzW2ldID0gc1tqID0gbWFzayAmIChqICsga2V5W2kgJSBrZXlsZW5dICsgKHQgPSBzW2ldKSldO1xyXG4gICAgc1tqXSA9IHQ7XHJcbiAgfVxyXG5cclxuICAvLyBUaGUgXCJnXCIgbWV0aG9kIHJldHVybnMgdGhlIG5leHQgKGNvdW50KSBvdXRwdXRzIGFzIG9uZSBudW1iZXIuXHJcbiAgKG1lLmcgPSBmdW5jdGlvbihjb3VudCkge1xyXG4gICAgLy8gVXNpbmcgaW5zdGFuY2UgbWVtYmVycyBpbnN0ZWFkIG9mIGNsb3N1cmUgc3RhdGUgbmVhcmx5IGRvdWJsZXMgc3BlZWQuXHJcbiAgICB2YXIgdCwgciA9IDAsXHJcbiAgICAgICAgaSA9IG1lLmksIGogPSBtZS5qLCBzID0gbWUuUztcclxuICAgIHdoaWxlIChjb3VudC0tKSB7XHJcbiAgICAgIHQgPSBzW2kgPSBtYXNrICYgKGkgKyAxKV07XHJcbiAgICAgIHIgPSByICogd2lkdGggKyBzW21hc2sgJiAoKHNbaV0gPSBzW2ogPSBtYXNrICYgKGogKyB0KV0pICsgKHNbal0gPSB0KSldO1xyXG4gICAgfVxyXG4gICAgbWUuaSA9IGk7IG1lLmogPSBqO1xyXG4gICAgcmV0dXJuIHI7XHJcbiAgICAvLyBGb3Igcm9idXN0IHVucHJlZGljdGFiaWxpdHkgZGlzY2FyZCBhbiBpbml0aWFsIGJhdGNoIG9mIHZhbHVlcy5cclxuICAgIC8vIFNlZSBodHRwOi8vd3d3LnJzYS5jb20vcnNhbGFicy9ub2RlLmFzcD9pZD0yMDA5XHJcbiAgfSkod2lkdGgpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBmbGF0dGVuKClcclxuLy8gQ29udmVydHMgYW4gb2JqZWN0IHRyZWUgdG8gbmVzdGVkIGFycmF5cyBvZiBzdHJpbmdzLlxyXG4vL1xyXG5mdW5jdGlvbiBmbGF0dGVuKG9iaiwgZGVwdGgpIHtcclxuICB2YXIgcmVzdWx0ID0gW10sIHR5cCA9ICh0eXBlb2Ygb2JqKVswXSwgcHJvcDtcclxuICBpZiAoZGVwdGggJiYgdHlwID09ICdvJykge1xyXG4gICAgZm9yIChwcm9wIGluIG9iaikge1xyXG4gICAgICB0cnkgeyByZXN1bHQucHVzaChmbGF0dGVuKG9ialtwcm9wXSwgZGVwdGggLSAxKSk7IH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiAocmVzdWx0Lmxlbmd0aCA/IHJlc3VsdCA6IHR5cCA9PSAncycgPyBvYmogOiBvYmogKyAnXFwwJyk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIG1peGtleSgpXHJcbi8vIE1peGVzIGEgc3RyaW5nIHNlZWQgaW50byBhIGtleSB0aGF0IGlzIGFuIGFycmF5IG9mIGludGVnZXJzLCBhbmRcclxuLy8gcmV0dXJucyBhIHNob3J0ZW5lZCBzdHJpbmcgc2VlZCB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIHJlc3VsdCBrZXkuXHJcbi8vXHJcbmZ1bmN0aW9uIG1peGtleShzZWVkLCBrZXkpIHtcclxuICB2YXIgc3RyaW5nc2VlZCA9IHNlZWQgKyAnJywgc21lYXIsIGogPSAwO1xyXG4gIHdoaWxlIChqIDwgc3RyaW5nc2VlZC5sZW5ndGgpIHtcclxuICAgIGtleVttYXNrICYgal0gPVxyXG4gICAgICBtYXNrICYgKChzbWVhciBePSBrZXlbbWFzayAmIGpdICogMTkpICsgc3RyaW5nc2VlZC5jaGFyQ29kZUF0KGorKykpO1xyXG4gIH1cclxuICByZXR1cm4gdG9zdHJpbmcoa2V5KTtcclxufVxyXG5cclxuLy9cclxuLy8gYXV0b3NlZWQoKVxyXG4vLyBSZXR1cm5zIGFuIG9iamVjdCBmb3IgYXV0b3NlZWRpbmcsIHVzaW5nIHdpbmRvdy5jcnlwdG8gaWYgYXZhaWxhYmxlLlxyXG4vL1xyXG4vKiogQHBhcmFtIHtVaW50OEFycmF5PX0gc2VlZCAqL1xyXG5mdW5jdGlvbiBhdXRvc2VlZChzZWVkKSB7XHJcbiAgdHJ5IHtcclxuICAgIEdMT0JBTC5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHNlZWQgPSBuZXcgVWludDhBcnJheSh3aWR0aCkpO1xyXG4gICAgcmV0dXJuIHRvc3RyaW5nKHNlZWQpO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBbK25ldyBEYXRlLCBHTE9CQUwsIEdMT0JBTC5uYXZpZ2F0b3IgJiYgR0xPQkFMLm5hdmlnYXRvci5wbHVnaW5zLFxyXG4gICAgICAgICAgICBHTE9CQUwuc2NyZWVuLCB0b3N0cmluZyhwb29sKV07XHJcbiAgfVxyXG59XHJcblxyXG4vL1xyXG4vLyB0b3N0cmluZygpXHJcbi8vIENvbnZlcnRzIGFuIGFycmF5IG9mIGNoYXJjb2RlcyB0byBhIHN0cmluZ1xyXG4vL1xyXG5mdW5jdGlvbiB0b3N0cmluZyhhKSB7XHJcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoMCwgYSk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIFdoZW4gc2VlZHJhbmRvbS5qcyBpcyBsb2FkZWQsIHdlIGltbWVkaWF0ZWx5IG1peCBhIGZldyBiaXRzXHJcbi8vIGZyb20gdGhlIGJ1aWx0LWluIFJORyBpbnRvIHRoZSBlbnRyb3B5IHBvb2wuICBCZWNhdXNlIHdlIGRvXHJcbi8vIG5vdCB3YW50IHRvIGludGVmZXJlIHdpdGggZGV0ZXJtaW5zdGljIFBSTkcgc3RhdGUgbGF0ZXIsXHJcbi8vIHNlZWRyYW5kb20gd2lsbCBub3QgY2FsbCBNYXRoLnJhbmRvbSBvbiBpdHMgb3duIGFnYWluIGFmdGVyXHJcbi8vIGluaXRpYWxpemF0aW9uLlxyXG4vL1xyXG5taXhrZXkoTWF0aC5yYW5kb20oKSwgcG9vbCk7XHJcbiIsIi8qXG4gKiBBIGZhc3QgamF2YXNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiBzaW1wbGV4IG5vaXNlIGJ5IEpvbmFzIFdhZ25lclxuXG5CYXNlZCBvbiBhIHNwZWVkLWltcHJvdmVkIHNpbXBsZXggbm9pc2UgYWxnb3JpdGhtIGZvciAyRCwgM0QgYW5kIDREIGluIEphdmEuXG5XaGljaCBpcyBiYXNlZCBvbiBleGFtcGxlIGNvZGUgYnkgU3RlZmFuIEd1c3RhdnNvbiAoc3RlZ3VAaXRuLmxpdS5zZSkuXG5XaXRoIE9wdGltaXNhdGlvbnMgYnkgUGV0ZXIgRWFzdG1hbiAocGVhc3RtYW5AZHJpenpsZS5zdGFuZm9yZC5lZHUpLlxuQmV0dGVyIHJhbmsgb3JkZXJpbmcgbWV0aG9kIGJ5IFN0ZWZhbiBHdXN0YXZzb24gaW4gMjAxMi5cblxuXG4gQ29weXJpZ2h0IChjKSAyMDE4IEpvbmFzIFdhZ25lclxuXG4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gU09GVFdBUkUuXG4gKi9cbihmdW5jdGlvbigpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciBGMiA9IDAuNSAqIChNYXRoLnNxcnQoMy4wKSAtIDEuMCk7XG4gIHZhciBHMiA9ICgzLjAgLSBNYXRoLnNxcnQoMy4wKSkgLyA2LjA7XG4gIHZhciBGMyA9IDEuMCAvIDMuMDtcbiAgdmFyIEczID0gMS4wIC8gNi4wO1xuICB2YXIgRjQgPSAoTWF0aC5zcXJ0KDUuMCkgLSAxLjApIC8gNC4wO1xuICB2YXIgRzQgPSAoNS4wIC0gTWF0aC5zcXJ0KDUuMCkpIC8gMjAuMDtcblxuICBmdW5jdGlvbiBTaW1wbGV4Tm9pc2UocmFuZG9tT3JTZWVkKSB7XG4gICAgdmFyIHJhbmRvbTtcbiAgICBpZiAodHlwZW9mIHJhbmRvbU9yU2VlZCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByYW5kb20gPSByYW5kb21PclNlZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmRvbU9yU2VlZCkge1xuICAgICAgcmFuZG9tID0gYWxlYShyYW5kb21PclNlZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5kb20gPSBNYXRoLnJhbmRvbTtcbiAgICB9XG4gICAgdGhpcy5wID0gYnVpbGRQZXJtdXRhdGlvblRhYmxlKHJhbmRvbSk7XG4gICAgdGhpcy5wZXJtID0gbmV3IFVpbnQ4QXJyYXkoNTEyKTtcbiAgICB0aGlzLnBlcm1Nb2QxMiA9IG5ldyBVaW50OEFycmF5KDUxMik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MTI7IGkrKykge1xuICAgICAgdGhpcy5wZXJtW2ldID0gdGhpcy5wW2kgJiAyNTVdO1xuICAgICAgdGhpcy5wZXJtTW9kMTJbaV0gPSB0aGlzLnBlcm1baV0gJSAxMjtcbiAgICB9XG5cbiAgfVxuICBTaW1wbGV4Tm9pc2UucHJvdG90eXBlID0ge1xuICAgIGdyYWQzOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAxLCAwLFxuICAgICAgLTEsIDEsIDAsXG4gICAgICAxLCAtMSwgMCxcblxuICAgICAgLTEsIC0xLCAwLFxuICAgICAgMSwgMCwgMSxcbiAgICAgIC0xLCAwLCAxLFxuXG4gICAgICAxLCAwLCAtMSxcbiAgICAgIC0xLCAwLCAtMSxcbiAgICAgIDAsIDEsIDEsXG5cbiAgICAgIDAsIC0xLCAxLFxuICAgICAgMCwgMSwgLTEsXG4gICAgICAwLCAtMSwgLTFdKSxcbiAgICBncmFkNDogbmV3IEZsb2F0MzJBcnJheShbMCwgMSwgMSwgMSwgMCwgMSwgMSwgLTEsIDAsIDEsIC0xLCAxLCAwLCAxLCAtMSwgLTEsXG4gICAgICAwLCAtMSwgMSwgMSwgMCwgLTEsIDEsIC0xLCAwLCAtMSwgLTEsIDEsIDAsIC0xLCAtMSwgLTEsXG4gICAgICAxLCAwLCAxLCAxLCAxLCAwLCAxLCAtMSwgMSwgMCwgLTEsIDEsIDEsIDAsIC0xLCAtMSxcbiAgICAgIC0xLCAwLCAxLCAxLCAtMSwgMCwgMSwgLTEsIC0xLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSxcbiAgICAgIDEsIDEsIDAsIDEsIDEsIDEsIDAsIC0xLCAxLCAtMSwgMCwgMSwgMSwgLTEsIDAsIC0xLFxuICAgICAgLTEsIDEsIDAsIDEsIC0xLCAxLCAwLCAtMSwgLTEsIC0xLCAwLCAxLCAtMSwgLTEsIDAsIC0xLFxuICAgICAgMSwgMSwgMSwgMCwgMSwgMSwgLTEsIDAsIDEsIC0xLCAxLCAwLCAxLCAtMSwgLTEsIDAsXG4gICAgICAtMSwgMSwgMSwgMCwgLTEsIDEsIC0xLCAwLCAtMSwgLTEsIDEsIDAsIC0xLCAtMSwgLTEsIDBdKSxcbiAgICBub2lzZTJEOiBmdW5jdGlvbih4aW4sIHlpbikge1xuICAgICAgdmFyIHBlcm1Nb2QxMiA9IHRoaXMucGVybU1vZDEyO1xuICAgICAgdmFyIHBlcm0gPSB0aGlzLnBlcm07XG4gICAgICB2YXIgZ3JhZDMgPSB0aGlzLmdyYWQzO1xuICAgICAgdmFyIG4wID0gMDsgLy8gTm9pc2UgY29udHJpYnV0aW9ucyBmcm9tIHRoZSB0aHJlZSBjb3JuZXJzXG4gICAgICB2YXIgbjEgPSAwO1xuICAgICAgdmFyIG4yID0gMDtcbiAgICAgIC8vIFNrZXcgdGhlIGlucHV0IHNwYWNlIHRvIGRldGVybWluZSB3aGljaCBzaW1wbGV4IGNlbGwgd2UncmUgaW5cbiAgICAgIHZhciBzID0gKHhpbiArIHlpbikgKiBGMjsgLy8gSGFpcnkgZmFjdG9yIGZvciAyRFxuICAgICAgdmFyIGkgPSBNYXRoLmZsb29yKHhpbiArIHMpO1xuICAgICAgdmFyIGogPSBNYXRoLmZsb29yKHlpbiArIHMpO1xuICAgICAgdmFyIHQgPSAoaSArIGopICogRzI7XG4gICAgICB2YXIgWDAgPSBpIC0gdDsgLy8gVW5za2V3IHRoZSBjZWxsIG9yaWdpbiBiYWNrIHRvICh4LHkpIHNwYWNlXG4gICAgICB2YXIgWTAgPSBqIC0gdDtcbiAgICAgIHZhciB4MCA9IHhpbiAtIFgwOyAvLyBUaGUgeCx5IGRpc3RhbmNlcyBmcm9tIHRoZSBjZWxsIG9yaWdpblxuICAgICAgdmFyIHkwID0geWluIC0gWTA7XG4gICAgICAvLyBGb3IgdGhlIDJEIGNhc2UsIHRoZSBzaW1wbGV4IHNoYXBlIGlzIGFuIGVxdWlsYXRlcmFsIHRyaWFuZ2xlLlxuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggd2UgYXJlIGluLlxuICAgICAgdmFyIGkxLCBqMTsgLy8gT2Zmc2V0cyBmb3Igc2Vjb25kIChtaWRkbGUpIGNvcm5lciBvZiBzaW1wbGV4IGluIChpLGopIGNvb3Jkc1xuICAgICAgaWYgKHgwID4geTApIHtcbiAgICAgICAgaTEgPSAxO1xuICAgICAgICBqMSA9IDA7XG4gICAgICB9IC8vIGxvd2VyIHRyaWFuZ2xlLCBYWSBvcmRlcjogKDAsMCktPigxLDApLT4oMSwxKVxuICAgICAgZWxzZSB7XG4gICAgICAgIGkxID0gMDtcbiAgICAgICAgajEgPSAxO1xuICAgICAgfSAvLyB1cHBlciB0cmlhbmdsZSwgWVggb3JkZXI6ICgwLDApLT4oMCwxKS0+KDEsMSlcbiAgICAgIC8vIEEgc3RlcCBvZiAoMSwwKSBpbiAoaSxqKSBtZWFucyBhIHN0ZXAgb2YgKDEtYywtYykgaW4gKHgseSksIGFuZFxuICAgICAgLy8gYSBzdGVwIG9mICgwLDEpIGluIChpLGopIG1lYW5zIGEgc3RlcCBvZiAoLWMsMS1jKSBpbiAoeCx5KSwgd2hlcmVcbiAgICAgIC8vIGMgPSAoMy1zcXJ0KDMpKS82XG4gICAgICB2YXIgeDEgPSB4MCAtIGkxICsgRzI7IC8vIE9mZnNldHMgZm9yIG1pZGRsZSBjb3JuZXIgaW4gKHgseSkgdW5za2V3ZWQgY29vcmRzXG4gICAgICB2YXIgeTEgPSB5MCAtIGoxICsgRzI7XG4gICAgICB2YXIgeDIgPSB4MCAtIDEuMCArIDIuMCAqIEcyOyAvLyBPZmZzZXRzIGZvciBsYXN0IGNvcm5lciBpbiAoeCx5KSB1bnNrZXdlZCBjb29yZHNcbiAgICAgIHZhciB5MiA9IHkwIC0gMS4wICsgMi4wICogRzI7XG4gICAgICAvLyBXb3JrIG91dCB0aGUgaGFzaGVkIGdyYWRpZW50IGluZGljZXMgb2YgdGhlIHRocmVlIHNpbXBsZXggY29ybmVyc1xuICAgICAgdmFyIGlpID0gaSAmIDI1NTtcbiAgICAgIHZhciBqaiA9IGogJiAyNTU7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSB0aHJlZSBjb3JuZXJzXG4gICAgICB2YXIgdDAgPSAwLjUgLSB4MCAqIHgwIC0geTAgKiB5MDtcbiAgICAgIGlmICh0MCA+PSAwKSB7XG4gICAgICAgIHZhciBnaTAgPSBwZXJtTW9kMTJbaWkgKyBwZXJtW2pqXV0gKiAzO1xuICAgICAgICB0MCAqPSB0MDtcbiAgICAgICAgbjAgPSB0MCAqIHQwICogKGdyYWQzW2dpMF0gKiB4MCArIGdyYWQzW2dpMCArIDFdICogeTApOyAvLyAoeCx5KSBvZiBncmFkMyB1c2VkIGZvciAyRCBncmFkaWVudFxuICAgICAgfVxuICAgICAgdmFyIHQxID0gMC41IC0geDEgKiB4MSAtIHkxICogeTE7XG4gICAgICBpZiAodDEgPj0gMCkge1xuICAgICAgICB2YXIgZ2kxID0gcGVybU1vZDEyW2lpICsgaTEgKyBwZXJtW2pqICsgajFdXSAqIDM7XG4gICAgICAgIHQxICo9IHQxO1xuICAgICAgICBuMSA9IHQxICogdDEgKiAoZ3JhZDNbZ2kxXSAqIHgxICsgZ3JhZDNbZ2kxICsgMV0gKiB5MSk7XG4gICAgICB9XG4gICAgICB2YXIgdDIgPSAwLjUgLSB4MiAqIHgyIC0geTIgKiB5MjtcbiAgICAgIGlmICh0MiA+PSAwKSB7XG4gICAgICAgIHZhciBnaTIgPSBwZXJtTW9kMTJbaWkgKyAxICsgcGVybVtqaiArIDFdXSAqIDM7XG4gICAgICAgIHQyICo9IHQyO1xuICAgICAgICBuMiA9IHQyICogdDIgKiAoZ3JhZDNbZ2kyXSAqIHgyICsgZ3JhZDNbZ2kyICsgMV0gKiB5Mik7XG4gICAgICB9XG4gICAgICAvLyBBZGQgY29udHJpYnV0aW9ucyBmcm9tIGVhY2ggY29ybmVyIHRvIGdldCB0aGUgZmluYWwgbm9pc2UgdmFsdWUuXG4gICAgICAvLyBUaGUgcmVzdWx0IGlzIHNjYWxlZCB0byByZXR1cm4gdmFsdWVzIGluIHRoZSBpbnRlcnZhbCBbLTEsMV0uXG4gICAgICByZXR1cm4gNzAuMCAqIChuMCArIG4xICsgbjIpO1xuICAgIH0sXG4gICAgLy8gM0Qgc2ltcGxleCBub2lzZVxuICAgIG5vaXNlM0Q6IGZ1bmN0aW9uKHhpbiwgeWluLCB6aW4pIHtcbiAgICAgIHZhciBwZXJtTW9kMTIgPSB0aGlzLnBlcm1Nb2QxMjtcbiAgICAgIHZhciBwZXJtID0gdGhpcy5wZXJtO1xuICAgICAgdmFyIGdyYWQzID0gdGhpcy5ncmFkMztcbiAgICAgIHZhciBuMCwgbjEsIG4yLCBuMzsgLy8gTm9pc2UgY29udHJpYnV0aW9ucyBmcm9tIHRoZSBmb3VyIGNvcm5lcnNcbiAgICAgIC8vIFNrZXcgdGhlIGlucHV0IHNwYWNlIHRvIGRldGVybWluZSB3aGljaCBzaW1wbGV4IGNlbGwgd2UncmUgaW5cbiAgICAgIHZhciBzID0gKHhpbiArIHlpbiArIHppbikgKiBGMzsgLy8gVmVyeSBuaWNlIGFuZCBzaW1wbGUgc2tldyBmYWN0b3IgZm9yIDNEXG4gICAgICB2YXIgaSA9IE1hdGguZmxvb3IoeGluICsgcyk7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3IoeWluICsgcyk7XG4gICAgICB2YXIgayA9IE1hdGguZmxvb3IoemluICsgcyk7XG4gICAgICB2YXIgdCA9IChpICsgaiArIGspICogRzM7XG4gICAgICB2YXIgWDAgPSBpIC0gdDsgLy8gVW5za2V3IHRoZSBjZWxsIG9yaWdpbiBiYWNrIHRvICh4LHkseikgc3BhY2VcbiAgICAgIHZhciBZMCA9IGogLSB0O1xuICAgICAgdmFyIFowID0gayAtIHQ7XG4gICAgICB2YXIgeDAgPSB4aW4gLSBYMDsgLy8gVGhlIHgseSx6IGRpc3RhbmNlcyBmcm9tIHRoZSBjZWxsIG9yaWdpblxuICAgICAgdmFyIHkwID0geWluIC0gWTA7XG4gICAgICB2YXIgejAgPSB6aW4gLSBaMDtcbiAgICAgIC8vIEZvciB0aGUgM0QgY2FzZSwgdGhlIHNpbXBsZXggc2hhcGUgaXMgYSBzbGlnaHRseSBpcnJlZ3VsYXIgdGV0cmFoZWRyb24uXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggc2ltcGxleCB3ZSBhcmUgaW4uXG4gICAgICB2YXIgaTEsIGoxLCBrMTsgLy8gT2Zmc2V0cyBmb3Igc2Vjb25kIGNvcm5lciBvZiBzaW1wbGV4IGluIChpLGosaykgY29vcmRzXG4gICAgICB2YXIgaTIsIGoyLCBrMjsgLy8gT2Zmc2V0cyBmb3IgdGhpcmQgY29ybmVyIG9mIHNpbXBsZXggaW4gKGksaixrKSBjb29yZHNcbiAgICAgIGlmICh4MCA+PSB5MCkge1xuICAgICAgICBpZiAoeTAgPj0gejApIHtcbiAgICAgICAgICBpMSA9IDE7XG4gICAgICAgICAgajEgPSAwO1xuICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICBpMiA9IDE7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMDtcbiAgICAgICAgfSAvLyBYIFkgWiBvcmRlclxuICAgICAgICBlbHNlIGlmICh4MCA+PSB6MCkge1xuICAgICAgICAgIGkxID0gMTtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAwO1xuICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICBqMiA9IDA7XG4gICAgICAgICAgazIgPSAxO1xuICAgICAgICB9IC8vIFggWiBZIG9yZGVyXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGkxID0gMDtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAxO1xuICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICBqMiA9IDA7XG4gICAgICAgICAgazIgPSAxO1xuICAgICAgICB9IC8vIFogWCBZIG9yZGVyXG4gICAgICB9XG4gICAgICBlbHNlIHsgLy8geDA8eTBcbiAgICAgICAgaWYgKHkwIDwgejApIHtcbiAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgajEgPSAwO1xuICAgICAgICAgIGsxID0gMTtcbiAgICAgICAgICBpMiA9IDA7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMTtcbiAgICAgICAgfSAvLyBaIFkgWCBvcmRlclxuICAgICAgICBlbHNlIGlmICh4MCA8IHowKSB7XG4gICAgICAgICAgaTEgPSAwO1xuICAgICAgICAgIGoxID0gMTtcbiAgICAgICAgICBrMSA9IDA7XG4gICAgICAgICAgaTIgPSAwO1xuICAgICAgICAgIGoyID0gMTtcbiAgICAgICAgICBrMiA9IDE7XG4gICAgICAgIH0gLy8gWSBaIFggb3JkZXJcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaTEgPSAwO1xuICAgICAgICAgIGoxID0gMTtcbiAgICAgICAgICBrMSA9IDA7XG4gICAgICAgICAgaTIgPSAxO1xuICAgICAgICAgIGoyID0gMTtcbiAgICAgICAgICBrMiA9IDA7XG4gICAgICAgIH0gLy8gWSBYIFogb3JkZXJcbiAgICAgIH1cbiAgICAgIC8vIEEgc3RlcCBvZiAoMSwwLDApIGluIChpLGosaykgbWVhbnMgYSBzdGVwIG9mICgxLWMsLWMsLWMpIGluICh4LHkseiksXG4gICAgICAvLyBhIHN0ZXAgb2YgKDAsMSwwKSBpbiAoaSxqLGspIG1lYW5zIGEgc3RlcCBvZiAoLWMsMS1jLC1jKSBpbiAoeCx5LHopLCBhbmRcbiAgICAgIC8vIGEgc3RlcCBvZiAoMCwwLDEpIGluIChpLGosaykgbWVhbnMgYSBzdGVwIG9mICgtYywtYywxLWMpIGluICh4LHkseiksIHdoZXJlXG4gICAgICAvLyBjID0gMS82LlxuICAgICAgdmFyIHgxID0geDAgLSBpMSArIEczOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgY29ybmVyIGluICh4LHkseikgY29vcmRzXG4gICAgICB2YXIgeTEgPSB5MCAtIGoxICsgRzM7XG4gICAgICB2YXIgejEgPSB6MCAtIGsxICsgRzM7XG4gICAgICB2YXIgeDIgPSB4MCAtIGkyICsgMi4wICogRzM7IC8vIE9mZnNldHMgZm9yIHRoaXJkIGNvcm5lciBpbiAoeCx5LHopIGNvb3Jkc1xuICAgICAgdmFyIHkyID0geTAgLSBqMiArIDIuMCAqIEczO1xuICAgICAgdmFyIHoyID0gejAgLSBrMiArIDIuMCAqIEczO1xuICAgICAgdmFyIHgzID0geDAgLSAxLjAgKyAzLjAgKiBHMzsgLy8gT2Zmc2V0cyBmb3IgbGFzdCBjb3JuZXIgaW4gKHgseSx6KSBjb29yZHNcbiAgICAgIHZhciB5MyA9IHkwIC0gMS4wICsgMy4wICogRzM7XG4gICAgICB2YXIgejMgPSB6MCAtIDEuMCArIDMuMCAqIEczO1xuICAgICAgLy8gV29yayBvdXQgdGhlIGhhc2hlZCBncmFkaWVudCBpbmRpY2VzIG9mIHRoZSBmb3VyIHNpbXBsZXggY29ybmVyc1xuICAgICAgdmFyIGlpID0gaSAmIDI1NTtcbiAgICAgIHZhciBqaiA9IGogJiAyNTU7XG4gICAgICB2YXIga2sgPSBrICYgMjU1O1xuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjb250cmlidXRpb24gZnJvbSB0aGUgZm91ciBjb3JuZXJzXG4gICAgICB2YXIgdDAgPSAwLjYgLSB4MCAqIHgwIC0geTAgKiB5MCAtIHowICogejA7XG4gICAgICBpZiAodDAgPCAwKSBuMCA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kwID0gcGVybU1vZDEyW2lpICsgcGVybVtqaiArIHBlcm1ba2tdXV0gKiAzO1xuICAgICAgICB0MCAqPSB0MDtcbiAgICAgICAgbjAgPSB0MCAqIHQwICogKGdyYWQzW2dpMF0gKiB4MCArIGdyYWQzW2dpMCArIDFdICogeTAgKyBncmFkM1tnaTAgKyAyXSAqIHowKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MSA9IDAuNiAtIHgxICogeDEgLSB5MSAqIHkxIC0gejEgKiB6MTtcbiAgICAgIGlmICh0MSA8IDApIG4xID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTEgPSBwZXJtTW9kMTJbaWkgKyBpMSArIHBlcm1bamogKyBqMSArIHBlcm1ba2sgKyBrMV1dXSAqIDM7XG4gICAgICAgIHQxICo9IHQxO1xuICAgICAgICBuMSA9IHQxICogdDEgKiAoZ3JhZDNbZ2kxXSAqIHgxICsgZ3JhZDNbZ2kxICsgMV0gKiB5MSArIGdyYWQzW2dpMSArIDJdICogejEpO1xuICAgICAgfVxuICAgICAgdmFyIHQyID0gMC42IC0geDIgKiB4MiAtIHkyICogeTIgLSB6MiAqIHoyO1xuICAgICAgaWYgKHQyIDwgMCkgbjIgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMiA9IHBlcm1Nb2QxMltpaSArIGkyICsgcGVybVtqaiArIGoyICsgcGVybVtrayArIGsyXV1dICogMztcbiAgICAgICAgdDIgKj0gdDI7XG4gICAgICAgIG4yID0gdDIgKiB0MiAqIChncmFkM1tnaTJdICogeDIgKyBncmFkM1tnaTIgKyAxXSAqIHkyICsgZ3JhZDNbZ2kyICsgMl0gKiB6Mik7XG4gICAgICB9XG4gICAgICB2YXIgdDMgPSAwLjYgLSB4MyAqIHgzIC0geTMgKiB5MyAtIHozICogejM7XG4gICAgICBpZiAodDMgPCAwKSBuMyA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kzID0gcGVybU1vZDEyW2lpICsgMSArIHBlcm1bamogKyAxICsgcGVybVtrayArIDFdXV0gKiAzO1xuICAgICAgICB0MyAqPSB0MztcbiAgICAgICAgbjMgPSB0MyAqIHQzICogKGdyYWQzW2dpM10gKiB4MyArIGdyYWQzW2dpMyArIDFdICogeTMgKyBncmFkM1tnaTMgKyAyXSAqIHozKTtcbiAgICAgIH1cbiAgICAgIC8vIEFkZCBjb250cmlidXRpb25zIGZyb20gZWFjaCBjb3JuZXIgdG8gZ2V0IHRoZSBmaW5hbCBub2lzZSB2YWx1ZS5cbiAgICAgIC8vIFRoZSByZXN1bHQgaXMgc2NhbGVkIHRvIHN0YXkganVzdCBpbnNpZGUgWy0xLDFdXG4gICAgICByZXR1cm4gMzIuMCAqIChuMCArIG4xICsgbjIgKyBuMyk7XG4gICAgfSxcbiAgICAvLyA0RCBzaW1wbGV4IG5vaXNlLCBiZXR0ZXIgc2ltcGxleCByYW5rIG9yZGVyaW5nIG1ldGhvZCAyMDEyLTAzLTA5XG4gICAgbm9pc2U0RDogZnVuY3Rpb24oeCwgeSwgeiwgdykge1xuICAgICAgdmFyIHBlcm0gPSB0aGlzLnBlcm07XG4gICAgICB2YXIgZ3JhZDQgPSB0aGlzLmdyYWQ0O1xuXG4gICAgICB2YXIgbjAsIG4xLCBuMiwgbjMsIG40OyAvLyBOb2lzZSBjb250cmlidXRpb25zIGZyb20gdGhlIGZpdmUgY29ybmVyc1xuICAgICAgLy8gU2tldyB0aGUgKHgseSx6LHcpIHNwYWNlIHRvIGRldGVybWluZSB3aGljaCBjZWxsIG9mIDI0IHNpbXBsaWNlcyB3ZSdyZSBpblxuICAgICAgdmFyIHMgPSAoeCArIHkgKyB6ICsgdykgKiBGNDsgLy8gRmFjdG9yIGZvciA0RCBza2V3aW5nXG4gICAgICB2YXIgaSA9IE1hdGguZmxvb3IoeCArIHMpO1xuICAgICAgdmFyIGogPSBNYXRoLmZsb29yKHkgKyBzKTtcbiAgICAgIHZhciBrID0gTWF0aC5mbG9vcih6ICsgcyk7XG4gICAgICB2YXIgbCA9IE1hdGguZmxvb3IodyArIHMpO1xuICAgICAgdmFyIHQgPSAoaSArIGogKyBrICsgbCkgKiBHNDsgLy8gRmFjdG9yIGZvciA0RCB1bnNrZXdpbmdcbiAgICAgIHZhciBYMCA9IGkgLSB0OyAvLyBVbnNrZXcgdGhlIGNlbGwgb3JpZ2luIGJhY2sgdG8gKHgseSx6LHcpIHNwYWNlXG4gICAgICB2YXIgWTAgPSBqIC0gdDtcbiAgICAgIHZhciBaMCA9IGsgLSB0O1xuICAgICAgdmFyIFcwID0gbCAtIHQ7XG4gICAgICB2YXIgeDAgPSB4IC0gWDA7IC8vIFRoZSB4LHkseix3IGRpc3RhbmNlcyBmcm9tIHRoZSBjZWxsIG9yaWdpblxuICAgICAgdmFyIHkwID0geSAtIFkwO1xuICAgICAgdmFyIHowID0geiAtIFowO1xuICAgICAgdmFyIHcwID0gdyAtIFcwO1xuICAgICAgLy8gRm9yIHRoZSA0RCBjYXNlLCB0aGUgc2ltcGxleCBpcyBhIDREIHNoYXBlIEkgd29uJ3QgZXZlbiB0cnkgdG8gZGVzY3JpYmUuXG4gICAgICAvLyBUbyBmaW5kIG91dCB3aGljaCBvZiB0aGUgMjQgcG9zc2libGUgc2ltcGxpY2VzIHdlJ3JlIGluLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBkZXRlcm1pbmUgdGhlIG1hZ25pdHVkZSBvcmRlcmluZyBvZiB4MCwgeTAsIHowIGFuZCB3MC5cbiAgICAgIC8vIFNpeCBwYWlyLXdpc2UgY29tcGFyaXNvbnMgYXJlIHBlcmZvcm1lZCBiZXR3ZWVuIGVhY2ggcG9zc2libGUgcGFpclxuICAgICAgLy8gb2YgdGhlIGZvdXIgY29vcmRpbmF0ZXMsIGFuZCB0aGUgcmVzdWx0cyBhcmUgdXNlZCB0byByYW5rIHRoZSBudW1iZXJzLlxuICAgICAgdmFyIHJhbmt4ID0gMDtcbiAgICAgIHZhciByYW5reSA9IDA7XG4gICAgICB2YXIgcmFua3ogPSAwO1xuICAgICAgdmFyIHJhbmt3ID0gMDtcbiAgICAgIGlmICh4MCA+IHkwKSByYW5reCsrO1xuICAgICAgZWxzZSByYW5reSsrO1xuICAgICAgaWYgKHgwID4gejApIHJhbmt4Kys7XG4gICAgICBlbHNlIHJhbmt6Kys7XG4gICAgICBpZiAoeDAgPiB3MCkgcmFua3grKztcbiAgICAgIGVsc2UgcmFua3crKztcbiAgICAgIGlmICh5MCA+IHowKSByYW5reSsrO1xuICAgICAgZWxzZSByYW5reisrO1xuICAgICAgaWYgKHkwID4gdzApIHJhbmt5Kys7XG4gICAgICBlbHNlIHJhbmt3Kys7XG4gICAgICBpZiAoejAgPiB3MCkgcmFua3orKztcbiAgICAgIGVsc2UgcmFua3crKztcbiAgICAgIHZhciBpMSwgajEsIGsxLCBsMTsgLy8gVGhlIGludGVnZXIgb2Zmc2V0cyBmb3IgdGhlIHNlY29uZCBzaW1wbGV4IGNvcm5lclxuICAgICAgdmFyIGkyLCBqMiwgazIsIGwyOyAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgdGhpcmQgc2ltcGxleCBjb3JuZXJcbiAgICAgIHZhciBpMywgajMsIGszLCBsMzsgLy8gVGhlIGludGVnZXIgb2Zmc2V0cyBmb3IgdGhlIGZvdXJ0aCBzaW1wbGV4IGNvcm5lclxuICAgICAgLy8gc2ltcGxleFtjXSBpcyBhIDQtdmVjdG9yIHdpdGggdGhlIG51bWJlcnMgMCwgMSwgMiBhbmQgMyBpbiBzb21lIG9yZGVyLlxuICAgICAgLy8gTWFueSB2YWx1ZXMgb2YgYyB3aWxsIG5ldmVyIG9jY3VyLCBzaW5jZSBlLmcuIHg+eT56PncgbWFrZXMgeDx6LCB5PHcgYW5kIHg8d1xuICAgICAgLy8gaW1wb3NzaWJsZS4gT25seSB0aGUgMjQgaW5kaWNlcyB3aGljaCBoYXZlIG5vbi16ZXJvIGVudHJpZXMgbWFrZSBhbnkgc2Vuc2UuXG4gICAgICAvLyBXZSB1c2UgYSB0aHJlc2hvbGRpbmcgdG8gc2V0IHRoZSBjb29yZGluYXRlcyBpbiB0dXJuIGZyb20gdGhlIGxhcmdlc3QgbWFnbml0dWRlLlxuICAgICAgLy8gUmFuayAzIGRlbm90ZXMgdGhlIGxhcmdlc3QgY29vcmRpbmF0ZS5cbiAgICAgIGkxID0gcmFua3ggPj0gMyA/IDEgOiAwO1xuICAgICAgajEgPSByYW5reSA+PSAzID8gMSA6IDA7XG4gICAgICBrMSA9IHJhbmt6ID49IDMgPyAxIDogMDtcbiAgICAgIGwxID0gcmFua3cgPj0gMyA/IDEgOiAwO1xuICAgICAgLy8gUmFuayAyIGRlbm90ZXMgdGhlIHNlY29uZCBsYXJnZXN0IGNvb3JkaW5hdGUuXG4gICAgICBpMiA9IHJhbmt4ID49IDIgPyAxIDogMDtcbiAgICAgIGoyID0gcmFua3kgPj0gMiA/IDEgOiAwO1xuICAgICAgazIgPSByYW5reiA+PSAyID8gMSA6IDA7XG4gICAgICBsMiA9IHJhbmt3ID49IDIgPyAxIDogMDtcbiAgICAgIC8vIFJhbmsgMSBkZW5vdGVzIHRoZSBzZWNvbmQgc21hbGxlc3QgY29vcmRpbmF0ZS5cbiAgICAgIGkzID0gcmFua3ggPj0gMSA/IDEgOiAwO1xuICAgICAgajMgPSByYW5reSA+PSAxID8gMSA6IDA7XG4gICAgICBrMyA9IHJhbmt6ID49IDEgPyAxIDogMDtcbiAgICAgIGwzID0gcmFua3cgPj0gMSA/IDEgOiAwO1xuICAgICAgLy8gVGhlIGZpZnRoIGNvcm5lciBoYXMgYWxsIGNvb3JkaW5hdGUgb2Zmc2V0cyA9IDEsIHNvIG5vIG5lZWQgdG8gY29tcHV0ZSB0aGF0LlxuICAgICAgdmFyIHgxID0geDAgLSBpMSArIEc0OyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5MSA9IHkwIC0gajEgKyBHNDtcbiAgICAgIHZhciB6MSA9IHowIC0gazEgKyBHNDtcbiAgICAgIHZhciB3MSA9IHcwIC0gbDEgKyBHNDtcbiAgICAgIHZhciB4MiA9IHgwIC0gaTIgKyAyLjAgKiBHNDsgLy8gT2Zmc2V0cyBmb3IgdGhpcmQgY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5MiA9IHkwIC0gajIgKyAyLjAgKiBHNDtcbiAgICAgIHZhciB6MiA9IHowIC0gazIgKyAyLjAgKiBHNDtcbiAgICAgIHZhciB3MiA9IHcwIC0gbDIgKyAyLjAgKiBHNDtcbiAgICAgIHZhciB4MyA9IHgwIC0gaTMgKyAzLjAgKiBHNDsgLy8gT2Zmc2V0cyBmb3IgZm91cnRoIGNvcm5lciBpbiAoeCx5LHosdykgY29vcmRzXG4gICAgICB2YXIgeTMgPSB5MCAtIGozICsgMy4wICogRzQ7XG4gICAgICB2YXIgejMgPSB6MCAtIGszICsgMy4wICogRzQ7XG4gICAgICB2YXIgdzMgPSB3MCAtIGwzICsgMy4wICogRzQ7XG4gICAgICB2YXIgeDQgPSB4MCAtIDEuMCArIDQuMCAqIEc0OyAvLyBPZmZzZXRzIGZvciBsYXN0IGNvcm5lciBpbiAoeCx5LHosdykgY29vcmRzXG4gICAgICB2YXIgeTQgPSB5MCAtIDEuMCArIDQuMCAqIEc0O1xuICAgICAgdmFyIHo0ID0gejAgLSAxLjAgKyA0LjAgKiBHNDtcbiAgICAgIHZhciB3NCA9IHcwIC0gMS4wICsgNC4wICogRzQ7XG4gICAgICAvLyBXb3JrIG91dCB0aGUgaGFzaGVkIGdyYWRpZW50IGluZGljZXMgb2YgdGhlIGZpdmUgc2ltcGxleCBjb3JuZXJzXG4gICAgICB2YXIgaWkgPSBpICYgMjU1O1xuICAgICAgdmFyIGpqID0gaiAmIDI1NTtcbiAgICAgIHZhciBrayA9IGsgJiAyNTU7XG4gICAgICB2YXIgbGwgPSBsICYgMjU1O1xuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjb250cmlidXRpb24gZnJvbSB0aGUgZml2ZSBjb3JuZXJzXG4gICAgICB2YXIgdDAgPSAwLjYgLSB4MCAqIHgwIC0geTAgKiB5MCAtIHowICogejAgLSB3MCAqIHcwO1xuICAgICAgaWYgKHQwIDwgMCkgbjAgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMCA9IChwZXJtW2lpICsgcGVybVtqaiArIHBlcm1ba2sgKyBwZXJtW2xsXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQwICo9IHQwO1xuICAgICAgICBuMCA9IHQwICogdDAgKiAoZ3JhZDRbZ2kwXSAqIHgwICsgZ3JhZDRbZ2kwICsgMV0gKiB5MCArIGdyYWQ0W2dpMCArIDJdICogejAgKyBncmFkNFtnaTAgKyAzXSAqIHcwKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MSA9IDAuNiAtIHgxICogeDEgLSB5MSAqIHkxIC0gejEgKiB6MSAtIHcxICogdzE7XG4gICAgICBpZiAodDEgPCAwKSBuMSA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kxID0gKHBlcm1baWkgKyBpMSArIHBlcm1bamogKyBqMSArIHBlcm1ba2sgKyBrMSArIHBlcm1bbGwgKyBsMV1dXV0gJSAzMikgKiA0O1xuICAgICAgICB0MSAqPSB0MTtcbiAgICAgICAgbjEgPSB0MSAqIHQxICogKGdyYWQ0W2dpMV0gKiB4MSArIGdyYWQ0W2dpMSArIDFdICogeTEgKyBncmFkNFtnaTEgKyAyXSAqIHoxICsgZ3JhZDRbZ2kxICsgM10gKiB3MSk7XG4gICAgICB9XG4gICAgICB2YXIgdDIgPSAwLjYgLSB4MiAqIHgyIC0geTIgKiB5MiAtIHoyICogejIgLSB3MiAqIHcyO1xuICAgICAgaWYgKHQyIDwgMCkgbjIgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMiA9IChwZXJtW2lpICsgaTIgKyBwZXJtW2pqICsgajIgKyBwZXJtW2trICsgazIgKyBwZXJtW2xsICsgbDJdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDIgKj0gdDI7XG4gICAgICAgIG4yID0gdDIgKiB0MiAqIChncmFkNFtnaTJdICogeDIgKyBncmFkNFtnaTIgKyAxXSAqIHkyICsgZ3JhZDRbZ2kyICsgMl0gKiB6MiArIGdyYWQ0W2dpMiArIDNdICogdzIpO1xuICAgICAgfVxuICAgICAgdmFyIHQzID0gMC42IC0geDMgKiB4MyAtIHkzICogeTMgLSB6MyAqIHozIC0gdzMgKiB3MztcbiAgICAgIGlmICh0MyA8IDApIG4zID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTMgPSAocGVybVtpaSArIGkzICsgcGVybVtqaiArIGozICsgcGVybVtrayArIGszICsgcGVybVtsbCArIGwzXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQzICo9IHQzO1xuICAgICAgICBuMyA9IHQzICogdDMgKiAoZ3JhZDRbZ2kzXSAqIHgzICsgZ3JhZDRbZ2kzICsgMV0gKiB5MyArIGdyYWQ0W2dpMyArIDJdICogejMgKyBncmFkNFtnaTMgKyAzXSAqIHczKTtcbiAgICAgIH1cbiAgICAgIHZhciB0NCA9IDAuNiAtIHg0ICogeDQgLSB5NCAqIHk0IC0gejQgKiB6NCAtIHc0ICogdzQ7XG4gICAgICBpZiAodDQgPCAwKSBuNCA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2k0ID0gKHBlcm1baWkgKyAxICsgcGVybVtqaiArIDEgKyBwZXJtW2trICsgMSArIHBlcm1bbGwgKyAxXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQ0ICo9IHQ0O1xuICAgICAgICBuNCA9IHQ0ICogdDQgKiAoZ3JhZDRbZ2k0XSAqIHg0ICsgZ3JhZDRbZ2k0ICsgMV0gKiB5NCArIGdyYWQ0W2dpNCArIDJdICogejQgKyBncmFkNFtnaTQgKyAzXSAqIHc0KTtcbiAgICAgIH1cbiAgICAgIC8vIFN1bSB1cCBhbmQgc2NhbGUgdGhlIHJlc3VsdCB0byBjb3ZlciB0aGUgcmFuZ2UgWy0xLDFdXG4gICAgICByZXR1cm4gMjcuMCAqIChuMCArIG4xICsgbjIgKyBuMyArIG40KTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gYnVpbGRQZXJtdXRhdGlvblRhYmxlKHJhbmRvbSkge1xuICAgIHZhciBpO1xuICAgIHZhciBwID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICAgIHBbaV0gPSBpO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspIHtcbiAgICAgIHZhciByID0gaSArIH5+KHJhbmRvbSgpICogKDI1NiAtIGkpKTtcbiAgICAgIHZhciBhdXggPSBwW2ldO1xuICAgICAgcFtpXSA9IHBbcl07XG4gICAgICBwW3JdID0gYXV4O1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfVxuICBTaW1wbGV4Tm9pc2UuX2J1aWxkUGVybXV0YXRpb25UYWJsZSA9IGJ1aWxkUGVybXV0YXRpb25UYWJsZTtcblxuICBmdW5jdGlvbiBhbGVhKCkge1xuICAgIC8vIEpvaGFubmVzIEJhYWfDuGUgPGJhYWdvZUBiYWFnb2UuY29tPiwgMjAxMFxuICAgIHZhciBzMCA9IDA7XG4gICAgdmFyIHMxID0gMDtcbiAgICB2YXIgczIgPSAwO1xuICAgIHZhciBjID0gMTtcblxuICAgIHZhciBtYXNoID0gbWFzaGVyKCk7XG4gICAgczAgPSBtYXNoKCcgJyk7XG4gICAgczEgPSBtYXNoKCcgJyk7XG4gICAgczIgPSBtYXNoKCcgJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgczAgLT0gbWFzaChhcmd1bWVudHNbaV0pO1xuICAgICAgaWYgKHMwIDwgMCkge1xuICAgICAgICBzMCArPSAxO1xuICAgICAgfVxuICAgICAgczEgLT0gbWFzaChhcmd1bWVudHNbaV0pO1xuICAgICAgaWYgKHMxIDwgMCkge1xuICAgICAgICBzMSArPSAxO1xuICAgICAgfVxuICAgICAgczIgLT0gbWFzaChhcmd1bWVudHNbaV0pO1xuICAgICAgaWYgKHMyIDwgMCkge1xuICAgICAgICBzMiArPSAxO1xuICAgICAgfVxuICAgIH1cbiAgICBtYXNoID0gbnVsbDtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdCA9IDIwOTE2MzkgKiBzMCArIGMgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxuICAgICAgczAgPSBzMTtcbiAgICAgIHMxID0gczI7XG4gICAgICByZXR1cm4gczIgPSB0IC0gKGMgPSB0IHwgMCk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXNoZXIoKSB7XG4gICAgdmFyIG4gPSAweGVmYzgyNDlkO1xuICAgIHJldHVybiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICBkYXRhID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG4gKz0gZGF0YS5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB2YXIgaCA9IDAuMDI1MTk2MDMyODI0MTY5MzggKiBuO1xuICAgICAgICBuID0gaCA+Pj4gMDtcbiAgICAgICAgaCAtPSBuO1xuICAgICAgICBoICo9IG47XG4gICAgICAgIG4gPSBoID4+PiAwO1xuICAgICAgICBoIC09IG47XG4gICAgICAgIG4gKz0gaCAqIDB4MTAwMDAwMDAwOyAvLyAyXjMyXG4gICAgICB9XG4gICAgICByZXR1cm4gKG4gPj4+IDApICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcbiAgICB9O1xuICB9XG5cbiAgLy8gYW1kXG4gIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSBkZWZpbmUoZnVuY3Rpb24oKSB7cmV0dXJuIFNpbXBsZXhOb2lzZTt9KTtcbiAgLy8gY29tbW9uIGpzXG4gIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIGV4cG9ydHMuU2ltcGxleE5vaXNlID0gU2ltcGxleE5vaXNlO1xuICAvLyBicm93c2VyXG4gIGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB3aW5kb3cuU2ltcGxleE5vaXNlID0gU2ltcGxleE5vaXNlO1xuICAvLyBub2RlanNcbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBTaW1wbGV4Tm9pc2U7XG4gIH1cblxufSkoKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3NsaWNlZFRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIHNsaWNlSXRlcmF0b3IoYXJyLCBpKSB7IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH0gcmV0dXJuIGZ1bmN0aW9uIChhcnIsIGkpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyByZXR1cm4gYXJyOyB9IGVsc2UgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkgeyByZXR1cm4gc2xpY2VJdGVyYXRvcihhcnIsIGkpOyB9IGVsc2UgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTsgfSB9OyB9KCk7XG5cbnZhciBUQVUgPSBNYXRoLlBJICogMjtcblxudmFyIG1hcFRvRWxsaXBzZSA9IGZ1bmN0aW9uIG1hcFRvRWxsaXBzZShfcmVmLCByeCwgcnksIGNvc3BoaSwgc2lucGhpLCBjZW50ZXJ4LCBjZW50ZXJ5KSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcblxuICB4ICo9IHJ4O1xuICB5ICo9IHJ5O1xuXG4gIHZhciB4cCA9IGNvc3BoaSAqIHggLSBzaW5waGkgKiB5O1xuICB2YXIgeXAgPSBzaW5waGkgKiB4ICsgY29zcGhpICogeTtcblxuICByZXR1cm4ge1xuICAgIHg6IHhwICsgY2VudGVyeCxcbiAgICB5OiB5cCArIGNlbnRlcnlcbiAgfTtcbn07XG5cbnZhciBhcHByb3hVbml0QXJjID0gZnVuY3Rpb24gYXBwcm94VW5pdEFyYyhhbmcxLCBhbmcyKSB7XG4gIC8vIElmIDkwIGRlZ3JlZSBjaXJjdWxhciBhcmMsIHVzZSBhIGNvbnN0YW50XG4gIC8vIGFzIGRlcml2ZWQgZnJvbSBodHRwOi8vc3BlbmNlcm1vcnRlbnNlbi5jb20vYXJ0aWNsZXMvYmV6aWVyLWNpcmNsZVxuICB2YXIgYSA9IGFuZzIgPT09IDEuNTcwNzk2MzI2Nzk0ODk2NiA/IDAuNTUxOTE1MDI0NDk0IDogYW5nMiA9PT0gLTEuNTcwNzk2MzI2Nzk0ODk2NiA/IC0wLjU1MTkxNTAyNDQ5NCA6IDQgLyAzICogTWF0aC50YW4oYW5nMiAvIDQpO1xuXG4gIHZhciB4MSA9IE1hdGguY29zKGFuZzEpO1xuICB2YXIgeTEgPSBNYXRoLnNpbihhbmcxKTtcbiAgdmFyIHgyID0gTWF0aC5jb3MoYW5nMSArIGFuZzIpO1xuICB2YXIgeTIgPSBNYXRoLnNpbihhbmcxICsgYW5nMik7XG5cbiAgcmV0dXJuIFt7XG4gICAgeDogeDEgLSB5MSAqIGEsXG4gICAgeTogeTEgKyB4MSAqIGFcbiAgfSwge1xuICAgIHg6IHgyICsgeTIgKiBhLFxuICAgIHk6IHkyIC0geDIgKiBhXG4gIH0sIHtcbiAgICB4OiB4MixcbiAgICB5OiB5MlxuICB9XTtcbn07XG5cbnZhciB2ZWN0b3JBbmdsZSA9IGZ1bmN0aW9uIHZlY3RvckFuZ2xlKHV4LCB1eSwgdngsIHZ5KSB7XG4gIHZhciBzaWduID0gdXggKiB2eSAtIHV5ICogdnggPCAwID8gLTEgOiAxO1xuXG4gIHZhciBkb3QgPSB1eCAqIHZ4ICsgdXkgKiB2eTtcblxuICBpZiAoZG90ID4gMSkge1xuICAgIGRvdCA9IDE7XG4gIH1cblxuICBpZiAoZG90IDwgLTEpIHtcbiAgICBkb3QgPSAtMTtcbiAgfVxuXG4gIHJldHVybiBzaWduICogTWF0aC5hY29zKGRvdCk7XG59O1xuXG52YXIgZ2V0QXJjQ2VudGVyID0gZnVuY3Rpb24gZ2V0QXJjQ2VudGVyKHB4LCBweSwgY3gsIGN5LCByeCwgcnksIGxhcmdlQXJjRmxhZywgc3dlZXBGbGFnLCBzaW5waGksIGNvc3BoaSwgcHhwLCBweXApIHtcbiAgdmFyIHJ4c3EgPSBNYXRoLnBvdyhyeCwgMik7XG4gIHZhciByeXNxID0gTWF0aC5wb3cocnksIDIpO1xuICB2YXIgcHhwc3EgPSBNYXRoLnBvdyhweHAsIDIpO1xuICB2YXIgcHlwc3EgPSBNYXRoLnBvdyhweXAsIDIpO1xuXG4gIHZhciByYWRpY2FudCA9IHJ4c3EgKiByeXNxIC0gcnhzcSAqIHB5cHNxIC0gcnlzcSAqIHB4cHNxO1xuXG4gIGlmIChyYWRpY2FudCA8IDApIHtcbiAgICByYWRpY2FudCA9IDA7XG4gIH1cblxuICByYWRpY2FudCAvPSByeHNxICogcHlwc3EgKyByeXNxICogcHhwc3E7XG4gIHJhZGljYW50ID0gTWF0aC5zcXJ0KHJhZGljYW50KSAqIChsYXJnZUFyY0ZsYWcgPT09IHN3ZWVwRmxhZyA/IC0xIDogMSk7XG5cbiAgdmFyIGNlbnRlcnhwID0gcmFkaWNhbnQgKiByeCAvIHJ5ICogcHlwO1xuICB2YXIgY2VudGVyeXAgPSByYWRpY2FudCAqIC1yeSAvIHJ4ICogcHhwO1xuXG4gIHZhciBjZW50ZXJ4ID0gY29zcGhpICogY2VudGVyeHAgLSBzaW5waGkgKiBjZW50ZXJ5cCArIChweCArIGN4KSAvIDI7XG4gIHZhciBjZW50ZXJ5ID0gc2lucGhpICogY2VudGVyeHAgKyBjb3NwaGkgKiBjZW50ZXJ5cCArIChweSArIGN5KSAvIDI7XG5cbiAgdmFyIHZ4MSA9IChweHAgLSBjZW50ZXJ4cCkgLyByeDtcbiAgdmFyIHZ5MSA9IChweXAgLSBjZW50ZXJ5cCkgLyByeTtcbiAgdmFyIHZ4MiA9ICgtcHhwIC0gY2VudGVyeHApIC8gcng7XG4gIHZhciB2eTIgPSAoLXB5cCAtIGNlbnRlcnlwKSAvIHJ5O1xuXG4gIHZhciBhbmcxID0gdmVjdG9yQW5nbGUoMSwgMCwgdngxLCB2eTEpO1xuICB2YXIgYW5nMiA9IHZlY3RvckFuZ2xlKHZ4MSwgdnkxLCB2eDIsIHZ5Mik7XG5cbiAgaWYgKHN3ZWVwRmxhZyA9PT0gMCAmJiBhbmcyID4gMCkge1xuICAgIGFuZzIgLT0gVEFVO1xuICB9XG5cbiAgaWYgKHN3ZWVwRmxhZyA9PT0gMSAmJiBhbmcyIDwgMCkge1xuICAgIGFuZzIgKz0gVEFVO1xuICB9XG5cbiAgcmV0dXJuIFtjZW50ZXJ4LCBjZW50ZXJ5LCBhbmcxLCBhbmcyXTtcbn07XG5cbnZhciBhcmNUb0JlemllciA9IGZ1bmN0aW9uIGFyY1RvQmV6aWVyKF9yZWYyKSB7XG4gIHZhciBweCA9IF9yZWYyLnB4LFxuICAgICAgcHkgPSBfcmVmMi5weSxcbiAgICAgIGN4ID0gX3JlZjIuY3gsXG4gICAgICBjeSA9IF9yZWYyLmN5LFxuICAgICAgcnggPSBfcmVmMi5yeCxcbiAgICAgIHJ5ID0gX3JlZjIucnksXG4gICAgICBfcmVmMiR4QXhpc1JvdGF0aW9uID0gX3JlZjIueEF4aXNSb3RhdGlvbixcbiAgICAgIHhBeGlzUm90YXRpb24gPSBfcmVmMiR4QXhpc1JvdGF0aW9uID09PSB1bmRlZmluZWQgPyAwIDogX3JlZjIkeEF4aXNSb3RhdGlvbixcbiAgICAgIF9yZWYyJGxhcmdlQXJjRmxhZyA9IF9yZWYyLmxhcmdlQXJjRmxhZyxcbiAgICAgIGxhcmdlQXJjRmxhZyA9IF9yZWYyJGxhcmdlQXJjRmxhZyA9PT0gdW5kZWZpbmVkID8gMCA6IF9yZWYyJGxhcmdlQXJjRmxhZyxcbiAgICAgIF9yZWYyJHN3ZWVwRmxhZyA9IF9yZWYyLnN3ZWVwRmxhZyxcbiAgICAgIHN3ZWVwRmxhZyA9IF9yZWYyJHN3ZWVwRmxhZyA9PT0gdW5kZWZpbmVkID8gMCA6IF9yZWYyJHN3ZWVwRmxhZztcblxuICB2YXIgY3VydmVzID0gW107XG5cbiAgaWYgKHJ4ID09PSAwIHx8IHJ5ID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdmFyIHNpbnBoaSA9IE1hdGguc2luKHhBeGlzUm90YXRpb24gKiBUQVUgLyAzNjApO1xuICB2YXIgY29zcGhpID0gTWF0aC5jb3MoeEF4aXNSb3RhdGlvbiAqIFRBVSAvIDM2MCk7XG5cbiAgdmFyIHB4cCA9IGNvc3BoaSAqIChweCAtIGN4KSAvIDIgKyBzaW5waGkgKiAocHkgLSBjeSkgLyAyO1xuICB2YXIgcHlwID0gLXNpbnBoaSAqIChweCAtIGN4KSAvIDIgKyBjb3NwaGkgKiAocHkgLSBjeSkgLyAyO1xuXG4gIGlmIChweHAgPT09IDAgJiYgcHlwID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcnggPSBNYXRoLmFicyhyeCk7XG4gIHJ5ID0gTWF0aC5hYnMocnkpO1xuXG4gIHZhciBsYW1iZGEgPSBNYXRoLnBvdyhweHAsIDIpIC8gTWF0aC5wb3cocngsIDIpICsgTWF0aC5wb3cocHlwLCAyKSAvIE1hdGgucG93KHJ5LCAyKTtcblxuICBpZiAobGFtYmRhID4gMSkge1xuICAgIHJ4ICo9IE1hdGguc3FydChsYW1iZGEpO1xuICAgIHJ5ICo9IE1hdGguc3FydChsYW1iZGEpO1xuICB9XG5cbiAgdmFyIF9nZXRBcmNDZW50ZXIgPSBnZXRBcmNDZW50ZXIocHgsIHB5LCBjeCwgY3ksIHJ4LCByeSwgbGFyZ2VBcmNGbGFnLCBzd2VlcEZsYWcsIHNpbnBoaSwgY29zcGhpLCBweHAsIHB5cCksXG4gICAgICBfZ2V0QXJjQ2VudGVyMiA9IF9zbGljZWRUb0FycmF5KF9nZXRBcmNDZW50ZXIsIDQpLFxuICAgICAgY2VudGVyeCA9IF9nZXRBcmNDZW50ZXIyWzBdLFxuICAgICAgY2VudGVyeSA9IF9nZXRBcmNDZW50ZXIyWzFdLFxuICAgICAgYW5nMSA9IF9nZXRBcmNDZW50ZXIyWzJdLFxuICAgICAgYW5nMiA9IF9nZXRBcmNDZW50ZXIyWzNdO1xuXG4gIC8vIElmICdhbmcyJyA9PSA5MC4wMDAwMDAwMDAxLCB0aGVuIGByYXRpb2Agd2lsbCBldmFsdWF0ZSB0b1xuICAvLyAxLjAwMDAwMDAwMDEuIFRoaXMgY2F1c2VzIGBzZWdtZW50c2AgdG8gYmUgZ3JlYXRlciB0aGFuIG9uZSwgd2hpY2ggaXMgYW5cbiAgLy8gdW5lY2Vzc2FyeSBzcGxpdCwgYW5kIGFkZHMgZXh0cmEgcG9pbnRzIHRvIHRoZSBiZXppZXIgY3VydmUuIFRvIGFsbGV2aWF0ZVxuICAvLyB0aGlzIGlzc3VlLCB3ZSByb3VuZCB0byAxLjAgd2hlbiB0aGUgcmF0aW8gaXMgY2xvc2UgdG8gMS4wLlxuXG5cbiAgdmFyIHJhdGlvID0gTWF0aC5hYnMoYW5nMikgLyAoVEFVIC8gNCk7XG4gIGlmIChNYXRoLmFicygxLjAgLSByYXRpbykgPCAwLjAwMDAwMDEpIHtcbiAgICByYXRpbyA9IDEuMDtcbiAgfVxuXG4gIHZhciBzZWdtZW50cyA9IE1hdGgubWF4KE1hdGguY2VpbChyYXRpbyksIDEpO1xuXG4gIGFuZzIgLz0gc2VnbWVudHM7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWdtZW50czsgaSsrKSB7XG4gICAgY3VydmVzLnB1c2goYXBwcm94VW5pdEFyYyhhbmcxLCBhbmcyKSk7XG4gICAgYW5nMSArPSBhbmcyO1xuICB9XG5cbiAgcmV0dXJuIGN1cnZlcy5tYXAoZnVuY3Rpb24gKGN1cnZlKSB7XG4gICAgdmFyIF9tYXBUb0VsbGlwc2UgPSBtYXBUb0VsbGlwc2UoY3VydmVbMF0sIHJ4LCByeSwgY29zcGhpLCBzaW5waGksIGNlbnRlcngsIGNlbnRlcnkpLFxuICAgICAgICB4MSA9IF9tYXBUb0VsbGlwc2UueCxcbiAgICAgICAgeTEgPSBfbWFwVG9FbGxpcHNlLnk7XG5cbiAgICB2YXIgX21hcFRvRWxsaXBzZTIgPSBtYXBUb0VsbGlwc2UoY3VydmVbMV0sIHJ4LCByeSwgY29zcGhpLCBzaW5waGksIGNlbnRlcngsIGNlbnRlcnkpLFxuICAgICAgICB4MiA9IF9tYXBUb0VsbGlwc2UyLngsXG4gICAgICAgIHkyID0gX21hcFRvRWxsaXBzZTIueTtcblxuICAgIHZhciBfbWFwVG9FbGxpcHNlMyA9IG1hcFRvRWxsaXBzZShjdXJ2ZVsyXSwgcngsIHJ5LCBjb3NwaGksIHNpbnBoaSwgY2VudGVyeCwgY2VudGVyeSksXG4gICAgICAgIHggPSBfbWFwVG9FbGxpcHNlMy54LFxuICAgICAgICB5ID0gX21hcFRvRWxsaXBzZTMueTtcblxuICAgIHJldHVybiB7IHgxOiB4MSwgeTE6IHkxLCB4MjogeDIsIHkyOiB5MiwgeDogeCwgeTogeSB9O1xuICB9KTtcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGFyY1RvQmV6aWVyO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7IiwidmFyIGJlemllciA9IHJlcXVpcmUoJ2FkYXB0aXZlLWJlemllci1jdXJ2ZScpXG52YXIgYWJzID0gcmVxdWlyZSgnYWJzLXN2Zy1wYXRoJylcbnZhciBub3JtID0gcmVxdWlyZSgnbm9ybWFsaXplLXN2Zy1wYXRoJylcbnZhciBjb3B5ID0gcmVxdWlyZSgndmVjMi1jb3B5JylcblxuZnVuY3Rpb24gc2V0KG91dCwgeCwgeSkge1xuICAgIG91dFswXSA9IHhcbiAgICBvdXRbMV0gPSB5XG4gICAgcmV0dXJuIG91dFxufVxuXG52YXIgdG1wMSA9IFswLDBdLFxuICAgIHRtcDIgPSBbMCwwXSxcbiAgICB0bXAzID0gWzAsMF1cblxuZnVuY3Rpb24gYmV6aWVyVG8ocG9pbnRzLCBzY2FsZSwgc3RhcnQsIHNlZykge1xuICAgIGJlemllcihzdGFydCwgXG4gICAgICAgIHNldCh0bXAxLCBzZWdbMV0sIHNlZ1syXSksIFxuICAgICAgICBzZXQodG1wMiwgc2VnWzNdLCBzZWdbNF0pLFxuICAgICAgICBzZXQodG1wMywgc2VnWzVdLCBzZWdbNl0pLCBzY2FsZSwgcG9pbnRzKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbnRvdXJzKHN2Zywgc2NhbGUpIHtcbiAgICB2YXIgcGF0aHMgPSBbXVxuXG4gICAgdmFyIHBvaW50cyA9IFtdXG4gICAgdmFyIHBlbiA9IFswLCAwXVxuICAgIG5vcm0oYWJzKHN2ZykpLmZvckVhY2goZnVuY3Rpb24oc2VnbWVudCwgaSwgc2VsZikge1xuICAgICAgICBpZiAoc2VnbWVudFswXSA9PT0gJ00nKSB7XG4gICAgICAgICAgICBjb3B5KHBlbiwgc2VnbWVudC5zbGljZSgxKSlcbiAgICAgICAgICAgIGlmIChwb2ludHMubGVuZ3RoPjApIHtcbiAgICAgICAgICAgICAgICBwYXRocy5wdXNoKHBvaW50cylcbiAgICAgICAgICAgICAgICBwb2ludHMgPSBbXVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNlZ21lbnRbMF0gPT09ICdDJykge1xuICAgICAgICAgICAgYmV6aWVyVG8ocG9pbnRzLCBzY2FsZSwgcGVuLCBzZWdtZW50KVxuICAgICAgICAgICAgc2V0KHBlbiwgc2VnbWVudFs1XSwgc2VnbWVudFs2XSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaWxsZWdhbCB0eXBlIGluIFNWRzogJytzZWdtZW50WzBdKVxuICAgICAgICB9XG4gICAgfSlcbiAgICBpZiAocG9pbnRzLmxlbmd0aD4wKVxuICAgICAgICBwYXRocy5wdXNoKHBvaW50cylcbiAgICByZXR1cm4gcGF0aHNcbn0iLCJcbnZhciDPgCA9IE1hdGguUElcbnZhciBfMTIwID0gcmFkaWFucygxMjApXG5cbm1vZHVsZS5leHBvcnRzID0gbm9ybWFsaXplXG5cbi8qKlxuICogZGVzY3JpYmUgYHBhdGhgIGluIHRlcm1zIG9mIGN1YmljIGLDqXppZXIgXG4gKiBjdXJ2ZXMgYW5kIG1vdmUgY29tbWFuZHNcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBwYXRoXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemUocGF0aCl7XG5cdC8vIGluaXQgc3RhdGVcblx0dmFyIHByZXZcblx0dmFyIHJlc3VsdCA9IFtdXG5cdHZhciBiZXppZXJYID0gMFxuXHR2YXIgYmV6aWVyWSA9IDBcblx0dmFyIHN0YXJ0WCA9IDBcblx0dmFyIHN0YXJ0WSA9IDBcblx0dmFyIHF1YWRYID0gbnVsbFxuXHR2YXIgcXVhZFkgPSBudWxsXG5cdHZhciB4ID0gMFxuXHR2YXIgeSA9IDBcblxuXHRmb3IgKHZhciBpID0gMCwgbGVuID0gcGF0aC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdHZhciBzZWcgPSBwYXRoW2ldXG5cdFx0dmFyIGNvbW1hbmQgPSBzZWdbMF1cblx0XHRzd2l0Y2ggKGNvbW1hbmQpIHtcblx0XHRcdGNhc2UgJ00nOlxuXHRcdFx0XHRzdGFydFggPSBzZWdbMV1cblx0XHRcdFx0c3RhcnRZID0gc2VnWzJdXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdBJzpcblx0XHRcdFx0c2VnID0gYXJjKHgsIHksc2VnWzFdLHNlZ1syXSxyYWRpYW5zKHNlZ1szXSksc2VnWzRdLHNlZ1s1XSxzZWdbNl0sc2VnWzddKVxuXHRcdFx0XHQvLyBzcGxpdCBtdWx0aSBwYXJ0XG5cdFx0XHRcdHNlZy51bnNoaWZ0KCdDJylcblx0XHRcdFx0aWYgKHNlZy5sZW5ndGggPiA3KSB7XG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goc2VnLnNwbGljZSgwLCA3KSlcblx0XHRcdFx0XHRzZWcudW5zaGlmdCgnQycpXG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ1MnOlxuXHRcdFx0XHQvLyBkZWZhdWx0IGNvbnRyb2wgcG9pbnRcblx0XHRcdFx0dmFyIGN4ID0geFxuXHRcdFx0XHR2YXIgY3kgPSB5XG5cdFx0XHRcdGlmIChwcmV2ID09ICdDJyB8fCBwcmV2ID09ICdTJykge1xuXHRcdFx0XHRcdGN4ICs9IGN4IC0gYmV6aWVyWCAvLyByZWZsZWN0IHRoZSBwcmV2aW91cyBjb21tYW5kJ3MgY29udHJvbFxuXHRcdFx0XHRcdGN5ICs9IGN5IC0gYmV6aWVyWSAvLyBwb2ludCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwb2ludFxuXHRcdFx0XHR9XG5cdFx0XHRcdHNlZyA9IFsnQycsIGN4LCBjeSwgc2VnWzFdLCBzZWdbMl0sIHNlZ1szXSwgc2VnWzRdXVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAnVCc6XG5cdFx0XHRcdGlmIChwcmV2ID09ICdRJyB8fCBwcmV2ID09ICdUJykge1xuXHRcdFx0XHRcdHF1YWRYID0geCAqIDIgLSBxdWFkWCAvLyBhcyB3aXRoICdTJyByZWZsZWN0IHByZXZpb3VzIGNvbnRyb2wgcG9pbnRcblx0XHRcdFx0XHRxdWFkWSA9IHkgKiAyIC0gcXVhZFlcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRxdWFkWCA9IHhcblx0XHRcdFx0XHRxdWFkWSA9IHlcblx0XHRcdFx0fVxuXHRcdFx0XHRzZWcgPSBxdWFkcmF0aWMoeCwgeSwgcXVhZFgsIHF1YWRZLCBzZWdbMV0sIHNlZ1syXSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ1EnOlxuXHRcdFx0XHRxdWFkWCA9IHNlZ1sxXVxuXHRcdFx0XHRxdWFkWSA9IHNlZ1syXVxuXHRcdFx0XHRzZWcgPSBxdWFkcmF0aWMoeCwgeSwgc2VnWzFdLCBzZWdbMl0sIHNlZ1szXSwgc2VnWzRdKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAnTCc6XG5cdFx0XHRcdHNlZyA9IGxpbmUoeCwgeSwgc2VnWzFdLCBzZWdbMl0pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdIJzpcblx0XHRcdFx0c2VnID0gbGluZSh4LCB5LCBzZWdbMV0sIHkpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdWJzpcblx0XHRcdFx0c2VnID0gbGluZSh4LCB5LCB4LCBzZWdbMV0pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdaJzpcblx0XHRcdFx0c2VnID0gbGluZSh4LCB5LCBzdGFydFgsIHN0YXJ0WSlcblx0XHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHQvLyB1cGRhdGUgc3RhdGVcblx0XHRwcmV2ID0gY29tbWFuZFxuXHRcdHggPSBzZWdbc2VnLmxlbmd0aCAtIDJdXG5cdFx0eSA9IHNlZ1tzZWcubGVuZ3RoIC0gMV1cblx0XHRpZiAoc2VnLmxlbmd0aCA+IDQpIHtcblx0XHRcdGJlemllclggPSBzZWdbc2VnLmxlbmd0aCAtIDRdXG5cdFx0XHRiZXppZXJZID0gc2VnW3NlZy5sZW5ndGggLSAzXVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRiZXppZXJYID0geFxuXHRcdFx0YmV6aWVyWSA9IHlcblx0XHR9XG5cdFx0cmVzdWx0LnB1c2goc2VnKVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBsaW5lKHgxLCB5MSwgeDIsIHkyKXtcblx0cmV0dXJuIFsnQycsIHgxLCB5MSwgeDIsIHkyLCB4MiwgeTJdXG59XG5cbmZ1bmN0aW9uIHF1YWRyYXRpYyh4MSwgeTEsIGN4LCBjeSwgeDIsIHkyKXtcblx0cmV0dXJuIFtcblx0XHQnQycsXG5cdFx0eDEvMyArICgyLzMpICogY3gsXG5cdFx0eTEvMyArICgyLzMpICogY3ksXG5cdFx0eDIvMyArICgyLzMpICogY3gsXG5cdFx0eTIvMyArICgyLzMpICogY3ksXG5cdFx0eDIsXG5cdFx0eTJcblx0XVxufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHJpcHBlZCBmcm9tIFxuLy8gZ2l0aHViLmNvbS9EbWl0cnlCYXJhbm92c2tpeS9yYXBoYWVsL2Jsb2IvNGQ5N2Q0L3JhcGhhZWwuanMjTDIyMTYtTDIzMDQgXG4vLyB3aGljaCByZWZlcmVuY2VzIHczLm9yZy9UUi9TVkcxMS9pbXBsbm90ZS5odG1sI0FyY0ltcGxlbWVudGF0aW9uTm90ZXNcbi8vIFRPRE86IG1ha2UgaXQgaHVtYW4gcmVhZGFibGVcblxuZnVuY3Rpb24gYXJjKHgxLCB5MSwgcngsIHJ5LCBhbmdsZSwgbGFyZ2VfYXJjX2ZsYWcsIHN3ZWVwX2ZsYWcsIHgyLCB5MiwgcmVjdXJzaXZlKSB7XG5cdGlmICghcmVjdXJzaXZlKSB7XG5cdFx0dmFyIHh5ID0gcm90YXRlKHgxLCB5MSwgLWFuZ2xlKVxuXHRcdHgxID0geHkueFxuXHRcdHkxID0geHkueVxuXHRcdHh5ID0gcm90YXRlKHgyLCB5MiwgLWFuZ2xlKVxuXHRcdHgyID0geHkueFxuXHRcdHkyID0geHkueVxuXHRcdHZhciB4ID0gKHgxIC0geDIpIC8gMlxuXHRcdHZhciB5ID0gKHkxIC0geTIpIC8gMlxuXHRcdHZhciBoID0gKHggKiB4KSAvIChyeCAqIHJ4KSArICh5ICogeSkgLyAocnkgKiByeSlcblx0XHRpZiAoaCA+IDEpIHtcblx0XHRcdGggPSBNYXRoLnNxcnQoaClcblx0XHRcdHJ4ID0gaCAqIHJ4XG5cdFx0XHRyeSA9IGggKiByeVxuXHRcdH1cblx0XHR2YXIgcngyID0gcnggKiByeFxuXHRcdHZhciByeTIgPSByeSAqIHJ5XG5cdFx0dmFyIGsgPSAobGFyZ2VfYXJjX2ZsYWcgPT0gc3dlZXBfZmxhZyA/IC0xIDogMSlcblx0XHRcdCogTWF0aC5zcXJ0KE1hdGguYWJzKChyeDIgKiByeTIgLSByeDIgKiB5ICogeSAtIHJ5MiAqIHggKiB4KSAvIChyeDIgKiB5ICogeSArIHJ5MiAqIHggKiB4KSkpXG5cdFx0aWYgKGsgPT0gSW5maW5pdHkpIGsgPSAxIC8vIG5ldXRyYWxpemVcblx0XHR2YXIgY3ggPSBrICogcnggKiB5IC8gcnkgKyAoeDEgKyB4MikgLyAyXG5cdFx0dmFyIGN5ID0gayAqIC1yeSAqIHggLyByeCArICh5MSArIHkyKSAvIDJcblx0XHR2YXIgZjEgPSBNYXRoLmFzaW4oKCh5MSAtIGN5KSAvIHJ5KS50b0ZpeGVkKDkpKVxuXHRcdHZhciBmMiA9IE1hdGguYXNpbigoKHkyIC0gY3kpIC8gcnkpLnRvRml4ZWQoOSkpXG5cblx0XHRmMSA9IHgxIDwgY3ggPyDPgCAtIGYxIDogZjFcblx0XHRmMiA9IHgyIDwgY3ggPyDPgCAtIGYyIDogZjJcblx0XHRpZiAoZjEgPCAwKSBmMSA9IM+AICogMiArIGYxXG5cdFx0aWYgKGYyIDwgMCkgZjIgPSDPgCAqIDIgKyBmMlxuXHRcdGlmIChzd2VlcF9mbGFnICYmIGYxID4gZjIpIGYxID0gZjEgLSDPgCAqIDJcblx0XHRpZiAoIXN3ZWVwX2ZsYWcgJiYgZjIgPiBmMSkgZjIgPSBmMiAtIM+AICogMlxuXHR9IGVsc2Uge1xuXHRcdGYxID0gcmVjdXJzaXZlWzBdXG5cdFx0ZjIgPSByZWN1cnNpdmVbMV1cblx0XHRjeCA9IHJlY3Vyc2l2ZVsyXVxuXHRcdGN5ID0gcmVjdXJzaXZlWzNdXG5cdH1cblx0Ly8gZ3JlYXRlciB0aGFuIDEyMCBkZWdyZWVzIHJlcXVpcmVzIG11bHRpcGxlIHNlZ21lbnRzXG5cdGlmIChNYXRoLmFicyhmMiAtIGYxKSA+IF8xMjApIHtcblx0XHR2YXIgZjJvbGQgPSBmMlxuXHRcdHZhciB4Mm9sZCA9IHgyXG5cdFx0dmFyIHkyb2xkID0geTJcblx0XHRmMiA9IGYxICsgXzEyMCAqIChzd2VlcF9mbGFnICYmIGYyID4gZjEgPyAxIDogLTEpXG5cdFx0eDIgPSBjeCArIHJ4ICogTWF0aC5jb3MoZjIpXG5cdFx0eTIgPSBjeSArIHJ5ICogTWF0aC5zaW4oZjIpXG5cdFx0dmFyIHJlcyA9IGFyYyh4MiwgeTIsIHJ4LCByeSwgYW5nbGUsIDAsIHN3ZWVwX2ZsYWcsIHgyb2xkLCB5Mm9sZCwgW2YyLCBmMm9sZCwgY3gsIGN5XSlcblx0fVxuXHR2YXIgdCA9IE1hdGgudGFuKChmMiAtIGYxKSAvIDQpXG5cdHZhciBoeCA9IDQgLyAzICogcnggKiB0XG5cdHZhciBoeSA9IDQgLyAzICogcnkgKiB0XG5cdHZhciBjdXJ2ZSA9IFtcblx0XHQyICogeDEgLSAoeDEgKyBoeCAqIE1hdGguc2luKGYxKSksXG5cdFx0MiAqIHkxIC0gKHkxIC0gaHkgKiBNYXRoLmNvcyhmMSkpLFxuXHRcdHgyICsgaHggKiBNYXRoLnNpbihmMiksXG5cdFx0eTIgLSBoeSAqIE1hdGguY29zKGYyKSxcblx0XHR4Mixcblx0XHR5MlxuXHRdXG5cdGlmIChyZWN1cnNpdmUpIHJldHVybiBjdXJ2ZVxuXHRpZiAocmVzKSBjdXJ2ZSA9IGN1cnZlLmNvbmNhdChyZXMpXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgY3VydmUubGVuZ3RoOykge1xuXHRcdHZhciByb3QgPSByb3RhdGUoY3VydmVbaV0sIGN1cnZlW2krMV0sIGFuZ2xlKVxuXHRcdGN1cnZlW2krK10gPSByb3QueFxuXHRcdGN1cnZlW2krK10gPSByb3QueVxuXHR9XG5cdHJldHVybiBjdXJ2ZVxufVxuXG5mdW5jdGlvbiByb3RhdGUoeCwgeSwgcmFkKXtcblx0cmV0dXJuIHtcblx0XHR4OiB4ICogTWF0aC5jb3MocmFkKSAtIHkgKiBNYXRoLnNpbihyYWQpLFxuXHRcdHk6IHggKiBNYXRoLnNpbihyYWQpICsgeSAqIE1hdGguY29zKHJhZClcblx0fVxufVxuXG5mdW5jdGlvbiByYWRpYW5zKGRlZ3Jlc3Mpe1xuXHRyZXR1cm4gZGVncmVzcyAqICjPgCAvIDE4MClcbn1cbiIsIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInR3ZWFrcGFuZVwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJUd2Vha3BhbmVcIl0gPSBmYWN0b3J5KCk7XG59KSh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL21haW4vanMvaW5kZXgudHNcIik7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIFwiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbi8vIGNzcyBiYXNlIGNvZGUsIGluamVjdGVkIGJ5IHRoZSBjc3MtbG9hZGVyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHVzZVNvdXJjZU1hcCkge1xuXHR2YXIgbGlzdCA9IFtdO1xuXG5cdC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblx0bGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0dmFyIGNvbnRlbnQgPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCk7XG5cdFx0XHRpZihpdGVtWzJdKSB7XG5cdFx0XHRcdHJldHVybiBcIkBtZWRpYSBcIiArIGl0ZW1bMl0gKyBcIntcIiArIGNvbnRlbnQgKyBcIn1cIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb250ZW50O1xuXHRcdFx0fVxuXHRcdH0pLmpvaW4oXCJcIik7XG5cdH07XG5cblx0Ly8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3Rcblx0bGlzdC5pID0gZnVuY3Rpb24obW9kdWxlcywgbWVkaWFRdWVyeSkge1xuXHRcdGlmKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKVxuXHRcdFx0bW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgXCJcIl1dO1xuXHRcdHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpZCA9IHRoaXNbaV1bMF07XG5cdFx0XHRpZih0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcblx0XHR9XG5cdFx0Zm9yKGkgPSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSBtb2R1bGVzW2ldO1xuXHRcdFx0Ly8gc2tpcCBhbHJlYWR5IGltcG9ydGVkIG1vZHVsZVxuXHRcdFx0Ly8gdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgMTAwJSBwZXJmZWN0IGZvciB3ZWlyZCBtZWRpYSBxdWVyeSBjb21iaW5hdGlvbnNcblx0XHRcdC8vICB3aGVuIGEgbW9kdWxlIGlzIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IG1lZGlhIHF1ZXJpZXMuXG5cdFx0XHQvLyAgSSBob3BlIHRoaXMgd2lsbCBuZXZlciBvY2N1ciAoSGV5IHRoaXMgd2F5IHdlIGhhdmUgc21hbGxlciBidW5kbGVzKVxuXHRcdFx0aWYodHlwZW9mIGl0ZW1bMF0gIT09IFwibnVtYmVyXCIgfHwgIWFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcblx0XHRcdFx0aWYobWVkaWFRdWVyeSAmJiAhaXRlbVsyXSkge1xuXHRcdFx0XHRcdGl0ZW1bMl0gPSBtZWRpYVF1ZXJ5O1xuXHRcdFx0XHR9IGVsc2UgaWYobWVkaWFRdWVyeSkge1xuXHRcdFx0XHRcdGl0ZW1bMl0gPSBcIihcIiArIGl0ZW1bMl0gKyBcIikgYW5kIChcIiArIG1lZGlhUXVlcnkgKyBcIilcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRsaXN0LnB1c2goaXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRyZXR1cm4gbGlzdDtcbn07XG5cbmZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKSB7XG5cdHZhciBjb250ZW50ID0gaXRlbVsxXSB8fCAnJztcblx0dmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuXHRpZiAoIWNzc01hcHBpbmcpIHtcblx0XHRyZXR1cm4gY29udGVudDtcblx0fVxuXG5cdGlmICh1c2VTb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicpIHtcblx0XHR2YXIgc291cmNlTWFwcGluZyA9IHRvQ29tbWVudChjc3NNYXBwaW5nKTtcblx0XHR2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuXHRcdFx0cmV0dXJuICcvKiMgc291cmNlVVJMPScgKyBjc3NNYXBwaW5nLnNvdXJjZVJvb3QgKyBzb3VyY2UgKyAnICovJ1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbignXFxuJyk7XG5cdH1cblxuXHRyZXR1cm4gW2NvbnRlbnRdLmpvaW4oJ1xcbicpO1xufVxuXG4vLyBBZGFwdGVkIGZyb20gY29udmVydC1zb3VyY2UtbWFwIChNSVQpXG5mdW5jdGlvbiB0b0NvbW1lbnQoc291cmNlTWFwKSB7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuXHR2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKTtcblx0dmFyIGRhdGEgPSAnc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsJyArIGJhc2U2NDtcblxuXHRyZXR1cm4gJy8qIyAnICsgZGF0YSArICcgKi8nO1xufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qc1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvYXBpL2J1dHRvbi50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9hcGkvYnV0dG9uLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CdXR0b25BcGkgPSB2b2lkIDA7XG52YXIgQnV0dG9uQXBpID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBCdXR0b25BcGkoYnV0dG9uQ29udHJvbGxlcikge1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSBidXR0b25Db250cm9sbGVyO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnV0dG9uQXBpLnByb3RvdHlwZSwgXCJoaWRkZW5cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIudmlld01vZGVsLmhpZGRlbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoaGlkZGVuKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIudmlld01vZGVsLmhpZGRlbiA9IGhpZGRlbjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEJ1dHRvbkFwaS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnZpZXdNb2RlbC5kaXNwb3NlKCk7XG4gICAgfTtcbiAgICBCdXR0b25BcGkucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICB2YXIgZW1pdHRlciA9IHRoaXMuY29udHJvbGxlci5idXR0b24uZW1pdHRlcjtcbiAgICAgICAgZW1pdHRlci5vbihldmVudE5hbWUsIGhhbmRsZXIuYmluZCh0aGlzKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEJ1dHRvbkFwaTtcbn0oKSk7XG5leHBvcnRzLkJ1dHRvbkFwaSA9IEJ1dHRvbkFwaTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2FwaS9ldmVudC1oYW5kbGVyLWFkYXB0ZXJzLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9hcGkvZXZlbnQtaGFuZGxlci1hZGFwdGVycy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZvbGRlciA9IGV4cG9ydHMubW9uaXRvciA9IGV4cG9ydHMuaW5wdXQgPSB2b2lkIDA7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gaW5wdXQoX2EpIHtcbiAgICB2YXIgYmluZGluZyA9IF9hLmJpbmRpbmcsIGV2ZW50TmFtZSA9IF9hLmV2ZW50TmFtZSwgaGFuZGxlciA9IF9hLmhhbmRsZXI7XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2NoYW5nZScpIHtcbiAgICAgICAgdmFyIGVtaXR0ZXIgPSBiaW5kaW5nLmVtaXR0ZXI7XG4gICAgICAgIGVtaXR0ZXIub24oJ2NoYW5nZScsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgaGFuZGxlcihldi5zZW5kZXIuZ2V0VmFsdWVUb1dyaXRlKGV2LnJhd1ZhbHVlKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuaW5wdXQgPSBpbnB1dDtcbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBtb25pdG9yKF9hKSB7XG4gICAgdmFyIGJpbmRpbmcgPSBfYS5iaW5kaW5nLCBldmVudE5hbWUgPSBfYS5ldmVudE5hbWUsIGhhbmRsZXIgPSBfYS5oYW5kbGVyO1xuICAgIGlmIChldmVudE5hbWUgPT09ICd1cGRhdGUnKSB7XG4gICAgICAgIHZhciBlbWl0dGVyID0gYmluZGluZy5lbWl0dGVyO1xuICAgICAgICBlbWl0dGVyLm9uKCd1cGRhdGUnLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICAgIGhhbmRsZXIoZXYuc2VuZGVyLnRhcmdldC5yZWFkKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLm1vbml0b3IgPSBtb25pdG9yO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGZvbGRlcihfYSkge1xuICAgIHZhciBldmVudE5hbWUgPSBfYS5ldmVudE5hbWUsIGZvbGRlciA9IF9hLmZvbGRlciwgaGFuZGxlciA9IF9hLmhhbmRsZXIsIHVpQ29udGFpbmVyID0gX2EudWlDb250YWluZXI7XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2NoYW5nZScpIHtcbiAgICAgICAgdmFyIGVtaXR0ZXIgPSB1aUNvbnRhaW5lci5lbWl0dGVyO1xuICAgICAgICBlbWl0dGVyLm9uKCdpbnB1dGNoYW5nZScsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgLy8gVE9ETzogRmluZCBtb3JlIHR5cGUtc2FmZSB3YXlcbiAgICAgICAgICAgIGhhbmRsZXIoZXYuaW5wdXRCaW5kaW5nLmdldFZhbHVlVG9Xcml0ZShldi52YWx1ZSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgdmFyIGVtaXR0ZXIgPSB1aUNvbnRhaW5lci5lbWl0dGVyO1xuICAgICAgICBlbWl0dGVyLm9uKCdtb25pdG9ydXBkYXRlJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgICBoYW5kbGVyKGV2Lm1vbml0b3JCaW5kaW5nLnRhcmdldC5yZWFkKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2ZvbGQnKSB7XG4gICAgICAgIHVpQ29udGFpbmVyLmVtaXR0ZXIub24oJ2l0ZW1mb2xkJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgICBoYW5kbGVyKGV2LmV4cGFuZGVkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZvbGRlciA9PT0gbnVsbCB8fCBmb2xkZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZvbGRlci5lbWl0dGVyLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICAgIGlmIChldi5wcm9wZXJ0eU5hbWUgIT09ICdleHBhbmRlZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYW5kbGVyKGV2LnNlbmRlci5leHBhbmRlZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuZm9sZGVyID0gZm9sZGVyO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvYXBpL2ZvbGRlci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9hcGkvZm9sZGVyLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRm9sZGVyQXBpID0gdm9pZCAwO1xudmFyIElucHV0QmluZGluZ0NvbnRyb2xsZXJDcmVhdG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2NvbnRyb2xsZXIvYmluZGluZy1jcmVhdG9ycy9pbnB1dCAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9iaW5kaW5nLWNyZWF0b3JzL2lucHV0LnRzXCIpO1xudmFyIE1vbml0b3JCaW5kaW5nQ29udHJvbGxlckNyZWF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vY29udHJvbGxlci9iaW5kaW5nLWNyZWF0b3JzL21vbml0b3IgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvYmluZGluZy1jcmVhdG9ycy9tb25pdG9yLnRzXCIpO1xudmFyIGJ1dHRvbl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vY29udHJvbGxlci9idXR0b24gKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvYnV0dG9uLnRzXCIpO1xudmFyIGZvbGRlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vY29udHJvbGxlci9mb2xkZXIgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvZm9sZGVyLnRzXCIpO1xudmFyIHNlcGFyYXRvcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vY29udHJvbGxlci9zZXBhcmF0b3IgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvc2VwYXJhdG9yLnRzXCIpO1xudmFyIHRhcmdldF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbW9kZWwvdGFyZ2V0ICovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC90YXJnZXQudHNcIik7XG52YXIgdmlld19tb2RlbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbW9kZWwvdmlldy1tb2RlbCAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvdmlldy1tb2RlbC50c1wiKTtcbnZhciBidXR0b25fMiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYnV0dG9uICovIFwiLi9zcmMvbWFpbi9qcy9hcGkvYnV0dG9uLnRzXCIpO1xudmFyIEV2ZW50SGFuZGxlckFkYXB0ZXJzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ldmVudC1oYW5kbGVyLWFkYXB0ZXJzICovIFwiLi9zcmMvbWFpbi9qcy9hcGkvZXZlbnQtaGFuZGxlci1hZGFwdGVycy50c1wiKTtcbnZhciBpbnB1dF9iaW5kaW5nXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2lucHV0LWJpbmRpbmcgKi8gXCIuL3NyYy9tYWluL2pzL2FwaS9pbnB1dC1iaW5kaW5nLnRzXCIpO1xudmFyIG1vbml0b3JfYmluZGluZ18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9tb25pdG9yLWJpbmRpbmcgKi8gXCIuL3NyYy9tYWluL2pzL2FwaS9tb25pdG9yLWJpbmRpbmcudHNcIik7XG52YXIgc2VwYXJhdG9yXzIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3NlcGFyYXRvciAqLyBcIi4vc3JjL21haW4vanMvYXBpL3NlcGFyYXRvci50c1wiKTtcbnZhciBGb2xkZXJBcGkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIEZvbGRlckFwaShmb2xkZXJDb250cm9sbGVyKSB7XG4gICAgICAgIHRoaXMuY29udHJvbGxlciA9IGZvbGRlckNvbnRyb2xsZXI7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGb2xkZXJBcGkucHJvdG90eXBlLCBcImV4cGFuZGVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmZvbGRlci5leHBhbmRlZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlci5mb2xkZXIuZXhwYW5kZWQgPSBleHBhbmRlZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGb2xkZXJBcGkucHJvdG90eXBlLCBcImhpZGRlblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci52aWV3TW9kZWwuaGlkZGVuO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChoaWRkZW4pIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlci52aWV3TW9kZWwuaGlkZGVuID0gaGlkZGVuO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgRm9sZGVyQXBpLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIudmlld01vZGVsLmRpc3Bvc2UoKTtcbiAgICB9O1xuICAgIEZvbGRlckFwaS5wcm90b3R5cGUuYWRkSW5wdXQgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG9wdF9wYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhcmFtcyA9IG9wdF9wYXJhbXMgfHwge307XG4gICAgICAgIHZhciB1YyA9IElucHV0QmluZGluZ0NvbnRyb2xsZXJDcmVhdG9ycy5jcmVhdGUodGhpcy5jb250cm9sbGVyLmRvY3VtZW50LCBuZXcgdGFyZ2V0XzEuVGFyZ2V0KG9iamVjdCwga2V5LCBwYXJhbXMucHJlc2V0S2V5KSwgcGFyYW1zKTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnVpQ29udGFpbmVyLmFkZCh1YywgcGFyYW1zLmluZGV4KTtcbiAgICAgICAgcmV0dXJuIG5ldyBpbnB1dF9iaW5kaW5nXzEuSW5wdXRCaW5kaW5nQXBpKHVjKTtcbiAgICB9O1xuICAgIEZvbGRlckFwaS5wcm90b3R5cGUuYWRkTW9uaXRvciA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICB2YXIgcGFyYW1zID0gb3B0X3BhcmFtcyB8fCB7fTtcbiAgICAgICAgdmFyIHVjID0gTW9uaXRvckJpbmRpbmdDb250cm9sbGVyQ3JlYXRvcnMuY3JlYXRlKHRoaXMuY29udHJvbGxlci5kb2N1bWVudCwgbmV3IHRhcmdldF8xLlRhcmdldChvYmplY3QsIGtleSksIHBhcmFtcyk7XG4gICAgICAgIHRoaXMuY29udHJvbGxlci51aUNvbnRhaW5lci5hZGQodWMsIHBhcmFtcy5pbmRleCk7XG4gICAgICAgIHJldHVybiBuZXcgbW9uaXRvcl9iaW5kaW5nXzEuTW9uaXRvckJpbmRpbmdBcGkodWMpO1xuICAgIH07XG4gICAgRm9sZGVyQXBpLnByb3RvdHlwZS5hZGRGb2xkZXIgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciB1YyA9IG5ldyBmb2xkZXJfMS5Gb2xkZXJDb250cm9sbGVyKHRoaXMuY29udHJvbGxlci5kb2N1bWVudCwgX19hc3NpZ24oX19hc3NpZ24oe30sIHBhcmFtcyksIHsgdmlld01vZGVsOiBuZXcgdmlld19tb2RlbF8xLlZpZXdNb2RlbCgpIH0pKTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnVpQ29udGFpbmVyLmFkZCh1YywgcGFyYW1zLmluZGV4KTtcbiAgICAgICAgcmV0dXJuIG5ldyBGb2xkZXJBcGkodWMpO1xuICAgIH07XG4gICAgRm9sZGVyQXBpLnByb3RvdHlwZS5hZGRCdXR0b24gPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciB1YyA9IG5ldyBidXR0b25fMS5CdXR0b25Db250cm9sbGVyKHRoaXMuY29udHJvbGxlci5kb2N1bWVudCwgX19hc3NpZ24oX19hc3NpZ24oe30sIHBhcmFtcyksIHsgdmlld01vZGVsOiBuZXcgdmlld19tb2RlbF8xLlZpZXdNb2RlbCgpIH0pKTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnVpQ29udGFpbmVyLmFkZCh1YywgcGFyYW1zLmluZGV4KTtcbiAgICAgICAgcmV0dXJuIG5ldyBidXR0b25fMi5CdXR0b25BcGkodWMpO1xuICAgIH07XG4gICAgRm9sZGVyQXBpLnByb3RvdHlwZS5hZGRTZXBhcmF0b3IgPSBmdW5jdGlvbiAob3B0X3BhcmFtcykge1xuICAgICAgICB2YXIgcGFyYW1zID0gb3B0X3BhcmFtcyB8fCB7fTtcbiAgICAgICAgdmFyIHVjID0gbmV3IHNlcGFyYXRvcl8xLlNlcGFyYXRvckNvbnRyb2xsZXIodGhpcy5jb250cm9sbGVyLmRvY3VtZW50LCB7XG4gICAgICAgICAgICB2aWV3TW9kZWw6IG5ldyB2aWV3X21vZGVsXzEuVmlld01vZGVsKCksXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIudWlDb250YWluZXIuYWRkKHVjLCBwYXJhbXMuaW5kZXgpO1xuICAgICAgICByZXR1cm4gbmV3IHNlcGFyYXRvcl8yLlNlcGFyYXRvckFwaSh1Yyk7XG4gICAgfTtcbiAgICBGb2xkZXJBcGkucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICBFdmVudEhhbmRsZXJBZGFwdGVycy5mb2xkZXIoe1xuICAgICAgICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUsXG4gICAgICAgICAgICBmb2xkZXI6IHRoaXMuY29udHJvbGxlci5mb2xkZXIsXG4gICAgICAgICAgICBoYW5kbGVyOiBoYW5kbGVyLmJpbmQodGhpcyksXG4gICAgICAgICAgICB1aUNvbnRhaW5lcjogdGhpcy5jb250cm9sbGVyLnVpQ29udGFpbmVyLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICByZXR1cm4gRm9sZGVyQXBpO1xufSgpKTtcbmV4cG9ydHMuRm9sZGVyQXBpID0gRm9sZGVyQXBpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvYXBpL2lucHV0LWJpbmRpbmcudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2FwaS9pbnB1dC1iaW5kaW5nLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSW5wdXRCaW5kaW5nQXBpID0gdm9pZCAwO1xudmFyIEhhbmRsZXJBZGFwdGVycyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZXZlbnQtaGFuZGxlci1hZGFwdGVycyAqLyBcIi4vc3JjL21haW4vanMvYXBpL2V2ZW50LWhhbmRsZXItYWRhcHRlcnMudHNcIik7XG4vKipcbiAqIFRoZSBBUEkgZm9yIHRoZSBpbnB1dCBiaW5kaW5nIGJldHdlZW4gdGhlIHBhcmFtZXRlciBhbmQgdGhlIHBhbmUuXG4gKiBAcGFyYW0gSW4gVGhlIHR5cGUgaW5uZXIgVHdlYWtwYW5lLlxuICogQHBhcmFtIE91dCBUaGUgdHlwZSBvdXRlciBUd2Vha3BhbmUgKD0gcGFyYW1ldGVyIG9iamVjdCkuXG4gKi9cbnZhciBJbnB1dEJpbmRpbmdBcGkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIElucHV0QmluZGluZ0FwaShiaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSBiaW5kaW5nQ29udHJvbGxlcjtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KElucHV0QmluZGluZ0FwaS5wcm90b3R5cGUsIFwiaGlkZGVuXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLnZpZXdNb2RlbC5oaWRkZW47XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGhpZGRlbikge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLnZpZXdNb2RlbC5oaWRkZW4gPSBoaWRkZW47XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBJbnB1dEJpbmRpbmdBcGkucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY29udHJvbGxlci52aWV3TW9kZWwuZGlzcG9zZSgpO1xuICAgIH07XG4gICAgSW5wdXRCaW5kaW5nQXBpLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgSGFuZGxlckFkYXB0ZXJzLmlucHV0KHtcbiAgICAgICAgICAgIGJpbmRpbmc6IHRoaXMuY29udHJvbGxlci5iaW5kaW5nLFxuICAgICAgICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUsXG4gICAgICAgICAgICBoYW5kbGVyOiBoYW5kbGVyLmJpbmQodGhpcyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIElucHV0QmluZGluZ0FwaS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLmJpbmRpbmcucmVhZCgpO1xuICAgIH07XG4gICAgcmV0dXJuIElucHV0QmluZGluZ0FwaTtcbn0oKSk7XG5leHBvcnRzLklucHV0QmluZGluZ0FwaSA9IElucHV0QmluZGluZ0FwaTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2FwaS9tb25pdG9yLWJpbmRpbmcudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvYXBpL21vbml0b3ItYmluZGluZy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTW9uaXRvckJpbmRpbmdBcGkgPSB2b2lkIDA7XG52YXIgRXZlbnRIYW5kbGVyQWRhcHRlcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2V2ZW50LWhhbmRsZXItYWRhcHRlcnMgKi8gXCIuL3NyYy9tYWluL2pzL2FwaS9ldmVudC1oYW5kbGVyLWFkYXB0ZXJzLnRzXCIpO1xuLyoqXG4gKiBUaGUgQVBJIGZvciB0aGUgbW9uaXRvciBiaW5kaW5nIGJldHdlZW4gdGhlIHBhcmFtZXRlciBhbmQgdGhlIHBhbmUuXG4gKi9cbnZhciBNb25pdG9yQmluZGluZ0FwaSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZnVuY3Rpb24gTW9uaXRvckJpbmRpbmdBcGkoYmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gYmluZGluZ0NvbnRyb2xsZXI7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb25pdG9yQmluZGluZ0FwaS5wcm90b3R5cGUsIFwiaGlkZGVuXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLnZpZXdNb2RlbC5oaWRkZW47XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGhpZGRlbikge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLnZpZXdNb2RlbC5oaWRkZW4gPSBoaWRkZW47XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBNb25pdG9yQmluZGluZ0FwaS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnZpZXdNb2RlbC5kaXNwb3NlKCk7XG4gICAgfTtcbiAgICBNb25pdG9yQmluZGluZ0FwaS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlckFkYXB0ZXJzLm1vbml0b3Ioe1xuICAgICAgICAgICAgYmluZGluZzogdGhpcy5jb250cm9sbGVyLmJpbmRpbmcsXG4gICAgICAgICAgICBldmVudE5hbWU6IGV2ZW50TmFtZSxcbiAgICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXIuYmluZCh0aGlzKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgTW9uaXRvckJpbmRpbmdBcGkucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY29udHJvbGxlci5iaW5kaW5nLnJlYWQoKTtcbiAgICB9O1xuICAgIHJldHVybiBNb25pdG9yQmluZGluZ0FwaTtcbn0oKSk7XG5leHBvcnRzLk1vbml0b3JCaW5kaW5nQXBpID0gTW9uaXRvckJpbmRpbmdBcGk7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9hcGkvcHJlc2V0LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2FwaS9wcmVzZXQudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmltcG9ydEpzb24gPSBleHBvcnRzLmV4cG9ydEpzb24gPSB2b2lkIDA7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gZXhwb3J0SnNvbih0YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRhcmdldHMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIHRhcmdldCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHJlc3VsdCwgKF9hID0ge30sXG4gICAgICAgICAgICBfYVt0YXJnZXQucHJlc2V0S2V5XSA9IHRhcmdldC5yZWFkKCksXG4gICAgICAgICAgICBfYSkpO1xuICAgIH0sIHt9KTtcbn1cbmV4cG9ydHMuZXhwb3J0SnNvbiA9IGV4cG9ydEpzb247XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gaW1wb3J0SnNvbih0YXJnZXRzLCBwcmVzZXQpIHtcbiAgICB0YXJnZXRzLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwcmVzZXRbdGFyZ2V0LnByZXNldEtleV07XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0YXJnZXQud3JpdGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmltcG9ydEpzb24gPSBpbXBvcnRKc29uO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvYXBpL3Jvb3QudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2FwaS9yb290LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJvb3RBcGkgPSB2b2lkIDA7XG52YXIgSW5wdXRCaW5kaW5nQ29udHJvbGxlckNyZWF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vY29udHJvbGxlci9iaW5kaW5nLWNyZWF0b3JzL2lucHV0ICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvaW5wdXQudHNcIik7XG52YXIgTW9uaXRvckJpbmRpbmdDb250cm9sbGVyQ3JlYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvbW9uaXRvciAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9iaW5kaW5nLWNyZWF0b3JzL21vbml0b3IudHNcIik7XG52YXIgYnV0dG9uXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9jb250cm9sbGVyL2J1dHRvbiAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9idXR0b24udHNcIik7XG52YXIgZm9sZGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9jb250cm9sbGVyL2ZvbGRlciAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9mb2xkZXIudHNcIik7XG52YXIgaW5wdXRfYmluZGluZ18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vY29udHJvbGxlci9pbnB1dC1iaW5kaW5nICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0LWJpbmRpbmcudHNcIik7XG52YXIgbW9uaXRvcl9iaW5kaW5nXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9jb250cm9sbGVyL21vbml0b3ItYmluZGluZyAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9tb25pdG9yLWJpbmRpbmcudHNcIik7XG52YXIgc2VwYXJhdG9yXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9jb250cm9sbGVyL3NlcGFyYXRvciAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9zZXBhcmF0b3IudHNcIik7XG52YXIgVWlVdGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vY29udHJvbGxlci91aS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL3VpLXV0aWwudHNcIik7XG52YXIgdGFyZ2V0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tb2RlbC90YXJnZXQgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL3RhcmdldC50c1wiKTtcbnZhciB2aWV3X21vZGVsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tb2RlbC92aWV3LW1vZGVsICovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC92aWV3LW1vZGVsLnRzXCIpO1xudmFyIGJ1dHRvbl8yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9idXR0b24gKi8gXCIuL3NyYy9tYWluL2pzL2FwaS9idXR0b24udHNcIik7XG52YXIgRXZlbnRIYW5kbGVyQWRhcHRlcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2V2ZW50LWhhbmRsZXItYWRhcHRlcnMgKi8gXCIuL3NyYy9tYWluL2pzL2FwaS9ldmVudC1oYW5kbGVyLWFkYXB0ZXJzLnRzXCIpO1xudmFyIGZvbGRlcl8yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9mb2xkZXIgKi8gXCIuL3NyYy9tYWluL2pzL2FwaS9mb2xkZXIudHNcIik7XG52YXIgaW5wdXRfYmluZGluZ18yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9pbnB1dC1iaW5kaW5nICovIFwiLi9zcmMvbWFpbi9qcy9hcGkvaW5wdXQtYmluZGluZy50c1wiKTtcbnZhciBtb25pdG9yX2JpbmRpbmdfMiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbW9uaXRvci1iaW5kaW5nICovIFwiLi9zcmMvbWFpbi9qcy9hcGkvbW9uaXRvci1iaW5kaW5nLnRzXCIpO1xudmFyIFByZXNldCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcHJlc2V0ICovIFwiLi9zcmMvbWFpbi9qcy9hcGkvcHJlc2V0LnRzXCIpO1xudmFyIHNlcGFyYXRvcl8yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zZXBhcmF0b3IgKi8gXCIuL3NyYy9tYWluL2pzL2FwaS9zZXBhcmF0b3IudHNcIik7XG4vKipcbiAqIFRoZSBUd2Vha3BhbmUgaW50ZXJmYWNlLlxuICpcbiAqIGBgYFxuICogbmV3IFR3ZWFrcGFuZShvcHRpb25zOiBUd2Vha3BhbmVDb25maWcpOiBSb290QXBpXG4gKiBgYGBcbiAqXG4gKiBTZWUgW1tUd2Vha3BhbmVDb25maWddXSBpbnRlcmZhY2UgZm9yIGF2YWlsYWJsZSBvcHRpb25zLlxuICovXG52YXIgUm9vdEFwaSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZnVuY3Rpb24gUm9vdEFwaShyb290Q29udHJvbGxlcikge1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSByb290Q29udHJvbGxlcjtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJvb3RBcGkucHJvdG90eXBlLCBcImVsZW1lbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIudmlldy5lbGVtZW50O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJvb3RBcGkucHJvdG90eXBlLCBcImV4cGFuZGVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZm9sZGVyID0gdGhpcy5jb250cm9sbGVyLmZvbGRlcjtcbiAgICAgICAgICAgIHJldHVybiBmb2xkZXIgPyBmb2xkZXIuZXhwYW5kZWQgOiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHBhbmRlZCkge1xuICAgICAgICAgICAgdmFyIGZvbGRlciA9IHRoaXMuY29udHJvbGxlci5mb2xkZXI7XG4gICAgICAgICAgICBpZiAoZm9sZGVyKSB7XG4gICAgICAgICAgICAgICAgZm9sZGVyLmV4cGFuZGVkID0gZXhwYW5kZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUm9vdEFwaS5wcm90b3R5cGUsIFwiaGlkZGVuXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLnZpZXdNb2RlbC5oaWRkZW47XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGhpZGRlbikge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLnZpZXdNb2RlbC5oaWRkZW4gPSBoaWRkZW47XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBSb290QXBpLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIudmlld01vZGVsLmRpc3Bvc2UoKTtcbiAgICB9O1xuICAgIFJvb3RBcGkucHJvdG90eXBlLmFkZElucHV0ID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXJhbXMgPSBvcHRfcGFyYW1zIHx8IHt9O1xuICAgICAgICB2YXIgdWMgPSBJbnB1dEJpbmRpbmdDb250cm9sbGVyQ3JlYXRvcnMuY3JlYXRlKHRoaXMuY29udHJvbGxlci5kb2N1bWVudCwgbmV3IHRhcmdldF8xLlRhcmdldChvYmplY3QsIGtleSwgcGFyYW1zLnByZXNldEtleSksIHBhcmFtcyk7XG4gICAgICAgIHRoaXMuY29udHJvbGxlci51aUNvbnRhaW5lci5hZGQodWMsIHBhcmFtcy5pbmRleCk7XG4gICAgICAgIHJldHVybiBuZXcgaW5wdXRfYmluZGluZ18yLklucHV0QmluZGluZ0FwaSh1Yyk7XG4gICAgfTtcbiAgICBSb290QXBpLnByb3RvdHlwZS5hZGRNb25pdG9yID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXJhbXMgPSBvcHRfcGFyYW1zIHx8IHt9O1xuICAgICAgICB2YXIgdWMgPSBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXJDcmVhdG9ycy5jcmVhdGUodGhpcy5jb250cm9sbGVyLmRvY3VtZW50LCBuZXcgdGFyZ2V0XzEuVGFyZ2V0KG9iamVjdCwga2V5KSwgcGFyYW1zKTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnVpQ29udGFpbmVyLmFkZCh1YywgcGFyYW1zLmluZGV4KTtcbiAgICAgICAgcmV0dXJuIG5ldyBtb25pdG9yX2JpbmRpbmdfMi5Nb25pdG9yQmluZGluZ0FwaSh1Yyk7XG4gICAgfTtcbiAgICBSb290QXBpLnByb3RvdHlwZS5hZGRCdXR0b24gPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciB1YyA9IG5ldyBidXR0b25fMS5CdXR0b25Db250cm9sbGVyKHRoaXMuY29udHJvbGxlci5kb2N1bWVudCwgX19hc3NpZ24oX19hc3NpZ24oe30sIHBhcmFtcyksIHsgdmlld01vZGVsOiBuZXcgdmlld19tb2RlbF8xLlZpZXdNb2RlbCgpIH0pKTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnVpQ29udGFpbmVyLmFkZCh1YywgcGFyYW1zLmluZGV4KTtcbiAgICAgICAgcmV0dXJuIG5ldyBidXR0b25fMi5CdXR0b25BcGkodWMpO1xuICAgIH07XG4gICAgUm9vdEFwaS5wcm90b3R5cGUuYWRkRm9sZGVyID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgdWMgPSBuZXcgZm9sZGVyXzEuRm9sZGVyQ29udHJvbGxlcih0aGlzLmNvbnRyb2xsZXIuZG9jdW1lbnQsIF9fYXNzaWduKF9fYXNzaWduKHt9LCBwYXJhbXMpLCB7IHZpZXdNb2RlbDogbmV3IHZpZXdfbW9kZWxfMS5WaWV3TW9kZWwoKSB9KSk7XG4gICAgICAgIHRoaXMuY29udHJvbGxlci51aUNvbnRhaW5lci5hZGQodWMsIHBhcmFtcy5pbmRleCk7XG4gICAgICAgIHJldHVybiBuZXcgZm9sZGVyXzIuRm9sZGVyQXBpKHVjKTtcbiAgICB9O1xuICAgIFJvb3RBcGkucHJvdG90eXBlLmFkZFNlcGFyYXRvciA9IGZ1bmN0aW9uIChvcHRfcGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXJhbXMgPSBvcHRfcGFyYW1zIHx8IHt9O1xuICAgICAgICB2YXIgdWMgPSBuZXcgc2VwYXJhdG9yXzEuU2VwYXJhdG9yQ29udHJvbGxlcih0aGlzLmNvbnRyb2xsZXIuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIHZpZXdNb2RlbDogbmV3IHZpZXdfbW9kZWxfMS5WaWV3TW9kZWwoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29udHJvbGxlci51aUNvbnRhaW5lci5hZGQodWMsIHBhcmFtcy5pbmRleCk7XG4gICAgICAgIHJldHVybiBuZXcgc2VwYXJhdG9yXzIuU2VwYXJhdG9yQXBpKHVjKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEltcG9ydCBhIHByZXNldCBvZiBhbGwgaW5wdXRzLlxuICAgICAqIEBwYXJhbSBwcmVzZXQgVGhlIHByZXNldCBvYmplY3QgdG8gaW1wb3J0LlxuICAgICAqL1xuICAgIFJvb3RBcGkucHJvdG90eXBlLmltcG9ydFByZXNldCA9IGZ1bmN0aW9uIChwcmVzZXQpIHtcbiAgICAgICAgdmFyIHRhcmdldHMgPSBVaVV0aWwuZmluZENvbnRyb2xsZXJzKHRoaXMuY29udHJvbGxlci51aUNvbnRhaW5lci5pdGVtcywgaW5wdXRfYmluZGluZ18xLklucHV0QmluZGluZ0NvbnRyb2xsZXIpLm1hcChmdW5jdGlvbiAoaWJjKSB7XG4gICAgICAgICAgICByZXR1cm4gaWJjLmJpbmRpbmcudGFyZ2V0O1xuICAgICAgICB9KTtcbiAgICAgICAgUHJlc2V0LmltcG9ydEpzb24odGFyZ2V0cywgcHJlc2V0KTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBFeHBvcnQgYSBwcmVzZXQgb2YgYWxsIGlucHV0cy5cbiAgICAgKiBAcmV0dXJuIFRoZSBleHBvcnRlZCBwcmVzZXQgb2JqZWN0LlxuICAgICAqL1xuICAgIFJvb3RBcGkucHJvdG90eXBlLmV4cG9ydFByZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHRhcmdldHMgPSBVaVV0aWwuZmluZENvbnRyb2xsZXJzKHRoaXMuY29udHJvbGxlci51aUNvbnRhaW5lci5pdGVtcywgaW5wdXRfYmluZGluZ18xLklucHV0QmluZGluZ0NvbnRyb2xsZXIpLm1hcChmdW5jdGlvbiAoaWJjKSB7XG4gICAgICAgICAgICByZXR1cm4gaWJjLmJpbmRpbmcudGFyZ2V0O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFByZXNldC5leHBvcnRKc29uKHRhcmdldHMpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGdsb2JhbCBldmVudCBsaXN0ZW5lci4gSXQgaGFuZGxlcyBhbGwgZXZlbnRzIG9mIGNoaWxkIGlucHV0cy9tb25pdG9ycy5cbiAgICAgKiBAcGFyYW0gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIHRvIGxpc3Rlbi5cbiAgICAgKiBAcmV0dXJuIFRoZSBBUEkgb2JqZWN0IGl0c2VsZi5cbiAgICAgKi9cbiAgICBSb290QXBpLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyQWRhcHRlcnMuZm9sZGVyKHtcbiAgICAgICAgICAgIGV2ZW50TmFtZTogZXZlbnROYW1lLFxuICAgICAgICAgICAgZm9sZGVyOiB0aGlzLmNvbnRyb2xsZXIuZm9sZGVyLFxuICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlci5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdWlDb250YWluZXI6IHRoaXMuY29udHJvbGxlci51aUNvbnRhaW5lcixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmVmcmVzaGVzIGFsbCBiaW5kaW5ncyBvZiB0aGUgcGFuZS5cbiAgICAgKi9cbiAgICBSb290QXBpLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBGb3JjZS1yZWFkIGFsbCBpbnB1dCBiaW5kaW5nc1xuICAgICAgICBVaVV0aWwuZmluZENvbnRyb2xsZXJzKHRoaXMuY29udHJvbGxlci51aUNvbnRhaW5lci5pdGVtcywgaW5wdXRfYmluZGluZ18xLklucHV0QmluZGluZ0NvbnRyb2xsZXIpLmZvckVhY2goZnVuY3Rpb24gKGliYykge1xuICAgICAgICAgICAgaWJjLmJpbmRpbmcucmVhZCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gRm9yY2UtcmVhZCBhbGwgbW9uaXRvciBiaW5kaW5nc1xuICAgICAgICBVaVV0aWwuZmluZENvbnRyb2xsZXJzKHRoaXMuY29udHJvbGxlci51aUNvbnRhaW5lci5pdGVtcywgbW9uaXRvcl9iaW5kaW5nXzEuTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKS5mb3JFYWNoKGZ1bmN0aW9uIChtYmMpIHtcbiAgICAgICAgICAgIG1iYy5iaW5kaW5nLnJlYWQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gUm9vdEFwaTtcbn0oKSk7XG5leHBvcnRzLlJvb3RBcGkgPSBSb290QXBpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvYXBpL3NlcGFyYXRvci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9hcGkvc2VwYXJhdG9yLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZXBhcmF0b3JBcGkgPSB2b2lkIDA7XG52YXIgU2VwYXJhdG9yQXBpID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBTZXBhcmF0b3JBcGkoY29udHJvbGxlcikge1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2VwYXJhdG9yQXBpLnByb3RvdHlwZSwgXCJoaWRkZW5cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIudmlld01vZGVsLmhpZGRlbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoaGlkZGVuKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIudmlld01vZGVsLmhpZGRlbiA9IGhpZGRlbjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFNlcGFyYXRvckFwaS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnZpZXdNb2RlbC5kaXNwb3NlKCk7XG4gICAgfTtcbiAgICByZXR1cm4gU2VwYXJhdG9yQXBpO1xufSgpKTtcbmV4cG9ydHMuU2VwYXJhdG9yQXBpID0gU2VwYXJhdG9yQXBpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvYmluZGluZy9pbnB1dC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9iaW5kaW5nL2lucHV0LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JbnB1dEJpbmRpbmcgPSB2b2lkIDA7XG52YXIgZW1pdHRlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWlzYy9lbWl0dGVyICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2VtaXR0ZXIudHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIElucHV0QmluZGluZyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBJbnB1dEJpbmRpbmcoY29uZmlnKSB7XG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVhZGVyXyA9IGNvbmZpZy5yZWFkZXI7XG4gICAgICAgIHRoaXMud3JpdGVyXyA9IGNvbmZpZy53cml0ZXI7XG4gICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBlbWl0dGVyXzEuRW1pdHRlcigpO1xuICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICB0aGlzLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICB0aGlzLnRhcmdldCA9IGNvbmZpZy50YXJnZXQ7XG4gICAgICAgIHRoaXMucmVhZCgpO1xuICAgIH1cbiAgICBJbnB1dEJpbmRpbmcucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0YXJnZXRWYWx1ZSA9IHRoaXMudGFyZ2V0LnJlYWQoKTtcbiAgICAgICAgaWYgKHRhcmdldFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUgPSB0aGlzLnJlYWRlcl8odGFyZ2V0VmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBJbnB1dEJpbmRpbmcucHJvdG90eXBlLmdldFZhbHVlVG9Xcml0ZSA9IGZ1bmN0aW9uIChyYXdWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy53cml0ZXJfKHJhd1ZhbHVlKTtcbiAgICB9O1xuICAgIElucHV0QmluZGluZy5wcm90b3R5cGUud3JpdGVfID0gZnVuY3Rpb24gKHJhd1ZhbHVlKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0LndyaXRlKHRoaXMuZ2V0VmFsdWVUb1dyaXRlKHJhd1ZhbHVlKSk7XG4gICAgfTtcbiAgICBJbnB1dEJpbmRpbmcucHJvdG90eXBlLm9uVmFsdWVDaGFuZ2VfID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgIHRoaXMud3JpdGVfKGV2LnJhd1ZhbHVlKTtcbiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgIHJhd1ZhbHVlOiBldi5yYXdWYWx1ZSxcbiAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gSW5wdXRCaW5kaW5nO1xufSgpKTtcbmV4cG9ydHMuSW5wdXRCaW5kaW5nID0gSW5wdXRCaW5kaW5nO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvYmluZGluZy9tb25pdG9yLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvYmluZGluZy9tb25pdG9yLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1vbml0b3JCaW5kaW5nID0gdm9pZCAwO1xudmFyIGVtaXR0ZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21pc2MvZW1pdHRlciAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9lbWl0dGVyLnRzXCIpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBNb25pdG9yQmluZGluZyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBNb25pdG9yQmluZGluZyhjb25maWcpIHtcbiAgICAgICAgdGhpcy5vblRpY2tfID0gdGhpcy5vblRpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25WYWx1ZVVwZGF0ZV8gPSB0aGlzLm9uVmFsdWVVcGRhdGVfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVhZGVyXyA9IGNvbmZpZy5yZWFkZXI7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gY29uZmlnLnRhcmdldDtcbiAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IGVtaXR0ZXJfMS5FbWl0dGVyKCk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWUuZW1pdHRlci5vbigndXBkYXRlJywgdGhpcy5vblZhbHVlVXBkYXRlXyk7XG4gICAgICAgIHRoaXMudGlja2VyID0gY29uZmlnLnRpY2tlcjtcbiAgICAgICAgdGhpcy50aWNrZXIuZW1pdHRlci5vbigndGljaycsIHRoaXMub25UaWNrXyk7XG4gICAgICAgIHRoaXMucmVhZCgpO1xuICAgIH1cbiAgICBNb25pdG9yQmluZGluZy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy50aWNrZXIuZGlzcG9zYWJsZS5kaXNwb3NlKCk7XG4gICAgfTtcbiAgICBNb25pdG9yQmluZGluZy5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHRhcmdldFZhbHVlID0gdGhpcy50YXJnZXQucmVhZCgpO1xuICAgICAgICBpZiAodGFyZ2V0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5hcHBlbmQodGhpcy5yZWFkZXJfKHRhcmdldFZhbHVlKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1vbml0b3JCaW5kaW5nLnByb3RvdHlwZS5vblRpY2tfID0gZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgdGhpcy5yZWFkKCk7XG4gICAgfTtcbiAgICBNb25pdG9yQmluZGluZy5wcm90b3R5cGUub25WYWx1ZVVwZGF0ZV8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3VwZGF0ZScsIHtcbiAgICAgICAgICAgIHJhd1ZhbHVlOiBldi5yYXdWYWx1ZSxcbiAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gTW9uaXRvckJpbmRpbmc7XG59KCkpO1xuZXhwb3J0cy5Nb25pdG9yQmluZGluZyA9IE1vbml0b3JCaW5kaW5nO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvY29uc3RyYWludC9jb21wb3NpdGUudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvY29tcG9zaXRlLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29tcG9zaXRlQ29uc3RyYWludCA9IHZvaWQgMDtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgQ29tcG9zaXRlQ29uc3RyYWludCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb21wb3NpdGVDb25zdHJhaW50KGNvbmZpZykge1xuICAgICAgICB0aGlzLmNvbnN0cmFpbnRzXyA9IGNvbmZpZy5jb25zdHJhaW50cztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbXBvc2l0ZUNvbnN0cmFpbnQucHJvdG90eXBlLCBcImNvbnN0cmFpbnRzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJhaW50c187XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBDb21wb3NpdGVDb25zdHJhaW50LnByb3RvdHlwZS5jb25zdHJhaW4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RyYWludHNfLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBjKSB7XG4gICAgICAgICAgICByZXR1cm4gYy5jb25zdHJhaW4ocmVzdWx0KTtcbiAgICAgICAgfSwgdmFsdWUpO1xuICAgIH07XG4gICAgcmV0dXJuIENvbXBvc2l0ZUNvbnN0cmFpbnQ7XG59KCkpO1xuZXhwb3J0cy5Db21wb3NpdGVDb25zdHJhaW50ID0gQ29tcG9zaXRlQ29uc3RyYWludDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvbGlzdC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvbGlzdC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5MaXN0Q29uc3RyYWludCA9IHZvaWQgMDtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgTGlzdENvbnN0cmFpbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTGlzdENvbnN0cmFpbnQoY29uZmlnKSB7XG4gICAgICAgIHRoaXMub3B0c18gPSBjb25maWcub3B0aW9ucztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExpc3RDb25zdHJhaW50LnByb3RvdHlwZSwgXCJvcHRpb25zXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRzXztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIExpc3RDb25zdHJhaW50LnByb3RvdHlwZS5jb25zdHJhaW4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIG9wdHMgPSB0aGlzLm9wdHNfO1xuICAgICAgICBpZiAob3B0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbWF0Y2hlZCA9IG9wdHMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZSA9PT0gdmFsdWU7XG4gICAgICAgIH0pLmxlbmd0aCA+IDA7XG4gICAgICAgIHJldHVybiBtYXRjaGVkID8gdmFsdWUgOiBvcHRzWzBdLnZhbHVlO1xuICAgIH07XG4gICAgcmV0dXJuIExpc3RDb25zdHJhaW50O1xufSgpKTtcbmV4cG9ydHMuTGlzdENvbnN0cmFpbnQgPSBMaXN0Q29uc3RyYWludDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvcG9pbnQtMmQudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvY29uc3RyYWludC9wb2ludC0yZC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUG9pbnQyZENvbnN0cmFpbnQgPSB2b2lkIDA7XG52YXIgcG9pbnRfMmRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21vZGVsL3BvaW50LTJkICovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC9wb2ludC0yZC50c1wiKTtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgUG9pbnQyZENvbnN0cmFpbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUG9pbnQyZENvbnN0cmFpbnQoY29uZmlnKSB7XG4gICAgICAgIHRoaXMueENvbnN0cmFpbnQgPSBjb25maWcueDtcbiAgICAgICAgdGhpcy55Q29uc3RyYWludCA9IGNvbmZpZy55O1xuICAgIH1cbiAgICBQb2ludDJkQ29uc3RyYWludC5wcm90b3R5cGUuY29uc3RyYWluID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgcG9pbnRfMmRfMS5Qb2ludDJkKHRoaXMueENvbnN0cmFpbnQgPyB0aGlzLnhDb25zdHJhaW50LmNvbnN0cmFpbih2YWx1ZS54KSA6IHZhbHVlLngsIHRoaXMueUNvbnN0cmFpbnQgPyB0aGlzLnlDb25zdHJhaW50LmNvbnN0cmFpbih2YWx1ZS55KSA6IHZhbHVlLnkpO1xuICAgIH07XG4gICAgcmV0dXJuIFBvaW50MmRDb25zdHJhaW50O1xufSgpKTtcbmV4cG9ydHMuUG9pbnQyZENvbnN0cmFpbnQgPSBQb2ludDJkQ29uc3RyYWludDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvcmFuZ2UudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvY29uc3RyYWludC9yYW5nZS50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmFuZ2VDb25zdHJhaW50ID0gdm9pZCAwO1xudmFyIHR5cGVfdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWlzYy90eXBlLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvdHlwZS11dGlsLnRzXCIpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBSYW5nZUNvbnN0cmFpbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUmFuZ2VDb25zdHJhaW50KGNvbmZpZykge1xuICAgICAgICB0aGlzLm1heFZhbHVlID0gY29uZmlnLm1heDtcbiAgICAgICAgdGhpcy5taW5WYWx1ZSA9IGNvbmZpZy5taW47XG4gICAgfVxuICAgIFJhbmdlQ29uc3RyYWludC5wcm90b3R5cGUuY29uc3RyYWluID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgaWYgKCF0eXBlX3V0aWxfMS5UeXBlVXRpbC5pc0VtcHR5KHRoaXMubWluVmFsdWUpKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBNYXRoLm1heChyZXN1bHQsIHRoaXMubWluVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdHlwZV91dGlsXzEuVHlwZVV0aWwuaXNFbXB0eSh0aGlzLm1heFZhbHVlKSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gTWF0aC5taW4ocmVzdWx0LCB0aGlzLm1heFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgcmV0dXJuIFJhbmdlQ29uc3RyYWludDtcbn0oKSk7XG5leHBvcnRzLlJhbmdlQ29uc3RyYWludCA9IFJhbmdlQ29uc3RyYWludDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvc3RlcC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvc3RlcC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TdGVwQ29uc3RyYWludCA9IHZvaWQgMDtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgU3RlcENvbnN0cmFpbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3RlcENvbnN0cmFpbnQoY29uZmlnKSB7XG4gICAgICAgIHRoaXMuc3RlcCA9IGNvbmZpZy5zdGVwO1xuICAgIH1cbiAgICBTdGVwQ29uc3RyYWludC5wcm90b3R5cGUuY29uc3RyYWluID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciByID0gdmFsdWUgPCAwXG4gICAgICAgICAgICA/IC1NYXRoLnJvdW5kKC12YWx1ZSAvIHRoaXMuc3RlcClcbiAgICAgICAgICAgIDogTWF0aC5yb3VuZCh2YWx1ZSAvIHRoaXMuc3RlcCk7XG4gICAgICAgIHJldHVybiByICogdGhpcy5zdGVwO1xuICAgIH07XG4gICAgcmV0dXJuIFN0ZXBDb25zdHJhaW50O1xufSgpKTtcbmV4cG9ydHMuU3RlcENvbnN0cmFpbnQgPSBTdGVwQ29uc3RyYWludDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvdXRpbC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvdXRpbC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db25zdHJhaW50VXRpbCA9IHZvaWQgMDtcbnZhciBjb21wb3NpdGVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY29tcG9zaXRlICovIFwiLi9zcmMvbWFpbi9qcy9jb25zdHJhaW50L2NvbXBvc2l0ZS50c1wiKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnRzLkNvbnN0cmFpbnRVdGlsID0ge1xuICAgIGZpbmRDb25zdHJhaW50OiBmdW5jdGlvbiAoYywgY29uc3RyYWludENsYXNzKSB7XG4gICAgICAgIGlmIChjIGluc3RhbmNlb2YgY29uc3RyYWludENsYXNzKSB7XG4gICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIGNvbXBvc2l0ZV8xLkNvbXBvc2l0ZUNvbnN0cmFpbnQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBjLmNvbnN0cmFpbnRzLnJlZHVjZShmdW5jdGlvbiAodG1wUmVzdWx0LCBzYykge1xuICAgICAgICAgICAgICAgIGlmICh0bXBSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRtcFJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjIGluc3RhbmNlb2YgY29uc3RyYWludENsYXNzID8gc2MgOiBudWxsO1xuICAgICAgICAgICAgfSwgbnVsbCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvYmluZGluZy1jcmVhdG9ycy9ib29sZWFuLWlucHV0LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvYm9vbGVhbi1pbnB1dC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZSA9IHZvaWQgMDtcbnZhciBpbnB1dF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vYmluZGluZy9pbnB1dCAqLyBcIi4vc3JjL21haW4vanMvYmluZGluZy9pbnB1dC50c1wiKTtcbnZhciBjb21wb3NpdGVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2NvbnN0cmFpbnQvY29tcG9zaXRlICovIFwiLi9zcmMvbWFpbi9qcy9jb25zdHJhaW50L2NvbXBvc2l0ZS50c1wiKTtcbnZhciBsaXN0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9jb25zdHJhaW50L2xpc3QgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvbGlzdC50c1wiKTtcbnZhciB1dGlsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9jb25zdHJhaW50L3V0aWwgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvdXRpbC50c1wiKTtcbnZhciBCb29sZWFuQ29udmVydGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vY29udmVydGVyL2Jvb2xlYW4gKi8gXCIuL3NyYy9tYWluL2pzL2NvbnZlcnRlci9ib29sZWFuLnRzXCIpO1xudmFyIGlucHV0X3ZhbHVlXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9tb2RlbC9pbnB1dC12YWx1ZSAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvaW5wdXQtdmFsdWUudHNcIik7XG52YXIgdmlld19tb2RlbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbW9kZWwvdmlldy1tb2RlbCAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvdmlldy1tb2RlbC50c1wiKTtcbnZhciBpbnB1dF9iaW5kaW5nXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnB1dC1iaW5kaW5nICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0LWJpbmRpbmcudHNcIik7XG52YXIgY2hlY2tib3hfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2lucHV0L2NoZWNrYm94ICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L2NoZWNrYm94LnRzXCIpO1xudmFyIGxpc3RfMiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2lucHV0L2xpc3QgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvbGlzdC50c1wiKTtcbnZhciBVaVV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi91aS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL3VpLXV0aWwudHNcIik7XG5mdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50KHBhcmFtcykge1xuICAgIHZhciBjb25zdHJhaW50cyA9IFtdO1xuICAgIGlmICgnb3B0aW9ucycgaW4gcGFyYW1zICYmIHBhcmFtcy5vcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3RyYWludHMucHVzaChuZXcgbGlzdF8xLkxpc3RDb25zdHJhaW50KHtcbiAgICAgICAgICAgIG9wdGlvbnM6IFVpVXRpbC5ub3JtYWxpemVJbnB1dFBhcmFtc09wdGlvbnMocGFyYW1zLm9wdGlvbnMsIEJvb2xlYW5Db252ZXJ0ZXIuZnJvbU1peGVkKSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IGNvbXBvc2l0ZV8xLkNvbXBvc2l0ZUNvbnN0cmFpbnQoe1xuICAgICAgICBjb25zdHJhaW50czogY29uc3RyYWludHMsXG4gICAgfSk7XG59XG5mdW5jdGlvbiBjcmVhdGVDb250cm9sbGVyKGRvY3VtZW50LCB2YWx1ZSkge1xuICAgIHZhciBjID0gdmFsdWUuY29uc3RyYWludDtcbiAgICBpZiAoYyAmJiB1dGlsXzEuQ29uc3RyYWludFV0aWwuZmluZENvbnN0cmFpbnQoYywgbGlzdF8xLkxpc3RDb25zdHJhaW50KSkge1xuICAgICAgICByZXR1cm4gbmV3IGxpc3RfMi5MaXN0SW5wdXRDb250cm9sbGVyKGRvY3VtZW50LCB7XG4gICAgICAgICAgICB2aWV3TW9kZWw6IG5ldyB2aWV3X21vZGVsXzEuVmlld01vZGVsKCksXG4gICAgICAgICAgICBzdHJpbmdpZnlWYWx1ZTogQm9vbGVhbkNvbnZlcnRlci50b1N0cmluZyxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgY2hlY2tib3hfMS5DaGVja2JveElucHV0Q29udHJvbGxlcihkb2N1bWVudCwge1xuICAgICAgICB2aWV3TW9kZWw6IG5ldyB2aWV3X21vZGVsXzEuVmlld01vZGVsKCksXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICB9KTtcbn1cbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBjcmVhdGUoZG9jdW1lbnQsIHRhcmdldCwgcGFyYW1zKSB7XG4gICAgdmFyIGluaXRpYWxWYWx1ZSA9IHRhcmdldC5yZWFkKCk7XG4gICAgaWYgKHR5cGVvZiBpbml0aWFsVmFsdWUgIT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIHZhbHVlID0gbmV3IGlucHV0X3ZhbHVlXzEuSW5wdXRWYWx1ZShmYWxzZSwgY3JlYXRlQ29uc3RyYWludChwYXJhbXMpKTtcbiAgICB2YXIgYmluZGluZyA9IG5ldyBpbnB1dF8xLklucHV0QmluZGluZyh7XG4gICAgICAgIHJlYWRlcjogQm9vbGVhbkNvbnZlcnRlci5mcm9tTWl4ZWQsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHdyaXRlcjogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHY7IH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBpbnB1dF9iaW5kaW5nXzEuSW5wdXRCaW5kaW5nQ29udHJvbGxlcihkb2N1bWVudCwge1xuICAgICAgICBiaW5kaW5nOiBiaW5kaW5nLFxuICAgICAgICBjb250cm9sbGVyOiBjcmVhdGVDb250cm9sbGVyKGRvY3VtZW50LCB2YWx1ZSksXG4gICAgICAgIGxhYmVsOiBwYXJhbXMubGFiZWwgfHwgdGFyZ2V0LmtleSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuY3JlYXRlID0gY3JlYXRlO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9iaW5kaW5nLWNyZWF0b3JzL2Jvb2xlYW4tbW9uaXRvci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvYm9vbGVhbi1tb25pdG9yLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGUgPSB2b2lkIDA7XG52YXIgbW9uaXRvcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vYmluZGluZy9tb25pdG9yICovIFwiLi9zcmMvbWFpbi9qcy9iaW5kaW5nL21vbml0b3IudHNcIik7XG52YXIgQm9vbGVhbkNvbnZlcnRlciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2NvbnZlcnRlci9ib29sZWFuICovIFwiLi9zcmMvbWFpbi9qcy9jb252ZXJ0ZXIvYm9vbGVhbi50c1wiKTtcbnZhciBib29sZWFuXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9mb3JtYXR0ZXIvYm9vbGVhbiAqLyBcIi4vc3JjL21haW4vanMvZm9ybWF0dGVyL2Jvb2xlYW4udHNcIik7XG52YXIgdHlwZV91dGlsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL3R5cGUtdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy90eXBlLXV0aWwudHNcIik7XG52YXIgbW9uaXRvcl92YWx1ZV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbW9kZWwvbW9uaXRvci12YWx1ZSAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvbW9uaXRvci12YWx1ZS50c1wiKTtcbnZhciB2aWV3X21vZGVsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9tb2RlbC92aWV3LW1vZGVsICovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC92aWV3LW1vZGVsLnRzXCIpO1xudmFyIG1vbml0b3JfYmluZGluZ18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbW9uaXRvci1iaW5kaW5nICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL21vbml0b3ItYmluZGluZy50c1wiKTtcbnZhciBtdWx0aV9sb2dfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21vbml0b3IvbXVsdGktbG9nICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL21vbml0b3IvbXVsdGktbG9nLnRzXCIpO1xudmFyIHNpbmdsZV9sb2dfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21vbml0b3Ivc2luZ2xlLWxvZyAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9tb25pdG9yL3NpbmdsZS1sb2cudHNcIik7XG52YXIgdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlsICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvdXRpbC50c1wiKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBjcmVhdGUoZG9jdW1lbnQsIHRhcmdldCwgcGFyYW1zKSB7XG4gICAgdmFyIGluaXRpYWxWYWx1ZSA9IHRhcmdldC5yZWFkKCk7XG4gICAgaWYgKHR5cGVvZiBpbml0aWFsVmFsdWUgIT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIHZhbHVlID0gbmV3IG1vbml0b3JfdmFsdWVfMS5Nb25pdG9yVmFsdWUodHlwZV91dGlsXzEuVHlwZVV0aWwuZ2V0T3JEZWZhdWx0KHBhcmFtcy5jb3VudCwgMSkpO1xuICAgIHZhciBjb250cm9sbGVyID0gdmFsdWUudG90YWxDb3VudCA9PT0gMVxuICAgICAgICA/IG5ldyBzaW5nbGVfbG9nXzEuU2luZ2xlTG9nTW9uaXRvckNvbnRyb2xsZXIoZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIHZpZXdNb2RlbDogbmV3IHZpZXdfbW9kZWxfMS5WaWV3TW9kZWwoKSxcbiAgICAgICAgICAgIGZvcm1hdHRlcjogbmV3IGJvb2xlYW5fMS5Cb29sZWFuRm9ybWF0dGVyKCksXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIH0pXG4gICAgICAgIDogbmV3IG11bHRpX2xvZ18xLk11bHRpTG9nTW9uaXRvckNvbnRyb2xsZXIoZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIHZpZXdNb2RlbDogbmV3IHZpZXdfbW9kZWxfMS5WaWV3TW9kZWwoKSxcbiAgICAgICAgICAgIGZvcm1hdHRlcjogbmV3IGJvb2xlYW5fMS5Cb29sZWFuRm9ybWF0dGVyKCksXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIH0pO1xuICAgIHJldHVybiBuZXcgbW9uaXRvcl9iaW5kaW5nXzEuTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKGRvY3VtZW50LCB7XG4gICAgICAgIGJpbmRpbmc6IG5ldyBtb25pdG9yXzEuTW9uaXRvckJpbmRpbmcoe1xuICAgICAgICAgICAgcmVhZGVyOiBCb29sZWFuQ29udmVydGVyLmZyb21NaXhlZCxcbiAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgdGlja2VyOiB1dGlsXzEuY3JlYXRlVGlja2VyKGRvY3VtZW50LCBwYXJhbXMuaW50ZXJ2YWwpLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICB9KSxcbiAgICAgICAgY29udHJvbGxlcjogY29udHJvbGxlcixcbiAgICAgICAgbGFiZWw6IHBhcmFtcy5sYWJlbCB8fCB0YXJnZXQua2V5LFxuICAgIH0pO1xufVxuZXhwb3J0cy5jcmVhdGUgPSBjcmVhdGU7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvY29sb3ItaW5wdXQudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvY29sb3ItaW5wdXQudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlV2l0aE9iamVjdCA9IGV4cG9ydHMuY3JlYXRlV2l0aE51bWJlciA9IGV4cG9ydHMuY3JlYXRlV2l0aFN0cmluZyA9IHZvaWQgMDtcbnZhciBpbnB1dF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vYmluZGluZy9pbnB1dCAqLyBcIi4vc3JjL21haW4vanMvYmluZGluZy9pbnB1dC50c1wiKTtcbnZhciBDb2xvckNvbnZlcnRlciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2NvbnZlcnRlci9jb2xvciAqLyBcIi4vc3JjL21haW4vanMvY29udmVydGVyL2NvbG9yLnRzXCIpO1xudmFyIGNvbG9yXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9mb3JtYXR0ZXIvY29sb3IgKi8gXCIuL3NyYy9tYWluL2pzL2Zvcm1hdHRlci9jb2xvci50c1wiKTtcbnZhciBjb2xvcl8yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbW9kZWwvY29sb3IgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL2NvbG9yLnRzXCIpO1xudmFyIGlucHV0X3ZhbHVlXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9tb2RlbC9pbnB1dC12YWx1ZSAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvaW5wdXQtdmFsdWUudHNcIik7XG52YXIgdmlld19tb2RlbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbW9kZWwvdmlldy1tb2RlbCAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvdmlldy1tb2RlbC50c1wiKTtcbnZhciBOdW1iZXJDb2xvclBhcnNlciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3BhcnNlci9udW1iZXItY29sb3IgKi8gXCIuL3NyYy9tYWluL2pzL3BhcnNlci9udW1iZXItY29sb3IudHNcIik7XG52YXIgU3RyaW5nQ29sb3JQYXJzZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9wYXJzZXIvc3RyaW5nLWNvbG9yICovIFwiLi9zcmMvbWFpbi9qcy9wYXJzZXIvc3RyaW5nLWNvbG9yLnRzXCIpO1xudmFyIGlucHV0X2JpbmRpbmdfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2lucHV0LWJpbmRpbmcgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQtYmluZGluZy50c1wiKTtcbnZhciBjb2xvcl9zd2F0Y2hfdGV4dF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW5wdXQvY29sb3Itc3dhdGNoLXRleHQgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvY29sb3Itc3dhdGNoLXRleHQudHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlV2l0aFN0cmluZyhkb2N1bWVudCwgdGFyZ2V0LCBwYXJhbXMpIHtcbiAgICB2YXIgaW5pdGlhbFZhbHVlID0gdGFyZ2V0LnJlYWQoKTtcbiAgICBpZiAodHlwZW9mIGluaXRpYWxWYWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICgnaW5wdXQnIGluIHBhcmFtcyAmJiBwYXJhbXMuaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgbm90YXRpb24gPSBTdHJpbmdDb2xvclBhcnNlci5nZXROb3RhdGlvbihpbml0aWFsVmFsdWUpO1xuICAgIGlmICghbm90YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBjb252ZXJ0ZXIgPSBDb2xvckNvbnZlcnRlci5mcm9tU3RyaW5nO1xuICAgIHZhciBjb2xvciA9IGNvbnZlcnRlcihpbml0aWFsVmFsdWUpO1xuICAgIHZhciB2YWx1ZSA9IG5ldyBpbnB1dF92YWx1ZV8xLklucHV0VmFsdWUoY29sb3IpO1xuICAgIHZhciB3cml0ZXIgPSBDb2xvckNvbnZlcnRlci5nZXRTdHJpbmdpZmllcihub3RhdGlvbik7XG4gICAgcmV0dXJuIG5ldyBpbnB1dF9iaW5kaW5nXzEuSW5wdXRCaW5kaW5nQ29udHJvbGxlcihkb2N1bWVudCwge1xuICAgICAgICBiaW5kaW5nOiBuZXcgaW5wdXRfMS5JbnB1dEJpbmRpbmcoe1xuICAgICAgICAgICAgcmVhZGVyOiBjb252ZXJ0ZXIsXG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHdyaXRlcjogd3JpdGVyLFxuICAgICAgICB9KSxcbiAgICAgICAgY29udHJvbGxlcjogbmV3IGNvbG9yX3N3YXRjaF90ZXh0XzEuQ29sb3JTd2F0Y2hUZXh0SW5wdXRDb250cm9sbGVyKGRvY3VtZW50LCB7XG4gICAgICAgICAgICBmb3JtYXR0ZXI6IG5ldyBjb2xvcl8xLkNvbG9yRm9ybWF0dGVyKHdyaXRlciksXG4gICAgICAgICAgICBwYXJzZXI6IFN0cmluZ0NvbG9yUGFyc2VyLkNvbXBvc2l0ZVBhcnNlcixcbiAgICAgICAgICAgIHN1cHBvcnRzQWxwaGE6IFN0cmluZ0NvbG9yUGFyc2VyLmhhc0FscGhhQ29tcG9uZW50KG5vdGF0aW9uKSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHZpZXdNb2RlbDogbmV3IHZpZXdfbW9kZWxfMS5WaWV3TW9kZWwoKSxcbiAgICAgICAgfSksXG4gICAgICAgIGxhYmVsOiBwYXJhbXMubGFiZWwgfHwgdGFyZ2V0LmtleSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuY3JlYXRlV2l0aFN0cmluZyA9IGNyZWF0ZVdpdGhTdHJpbmc7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlV2l0aE51bWJlcihkb2N1bWVudCwgdGFyZ2V0LCBwYXJhbXMpIHtcbiAgICB2YXIgaW5pdGlhbFZhbHVlID0gdGFyZ2V0LnJlYWQoKTtcbiAgICBpZiAodHlwZW9mIGluaXRpYWxWYWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICghKCdpbnB1dCcgaW4gcGFyYW1zKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5pbnB1dCAhPT0gJ2NvbG9yJyAmJlxuICAgICAgICBwYXJhbXMuaW5wdXQgIT09ICdjb2xvci5yZ2InICYmXG4gICAgICAgIHBhcmFtcy5pbnB1dCAhPT0gJ2NvbG9yLnJnYmEnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgc3VwcG9ydHNBbHBoYSA9IHBhcmFtcy5pbnB1dCA9PT0gJ2NvbG9yLnJnYmEnO1xuICAgIHZhciBwYXJzZXIgPSBzdXBwb3J0c0FscGhhXG4gICAgICAgID8gTnVtYmVyQ29sb3JQYXJzZXIuUmdiYVBhcnNlclxuICAgICAgICA6IE51bWJlckNvbG9yUGFyc2VyLlJnYlBhcnNlcjtcbiAgICB2YXIgY29sb3IgPSBwYXJzZXIoaW5pdGlhbFZhbHVlKTtcbiAgICBpZiAoIWNvbG9yKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gc3VwcG9ydHNBbHBoYVxuICAgICAgICA/IG5ldyBjb2xvcl8xLkNvbG9yRm9ybWF0dGVyKENvbG9yQ29udmVydGVyLnRvSGV4UmdiYVN0cmluZylcbiAgICAgICAgOiBuZXcgY29sb3JfMS5Db2xvckZvcm1hdHRlcihDb2xvckNvbnZlcnRlci50b0hleFJnYlN0cmluZyk7XG4gICAgdmFyIHJlYWRlciA9IHN1cHBvcnRzQWxwaGFcbiAgICAgICAgPyBDb2xvckNvbnZlcnRlci5mcm9tTnVtYmVyVG9SZ2JhXG4gICAgICAgIDogQ29sb3JDb252ZXJ0ZXIuZnJvbU51bWJlclRvUmdiO1xuICAgIHZhciB3cml0ZXIgPSBzdXBwb3J0c0FscGhhXG4gICAgICAgID8gQ29sb3JDb252ZXJ0ZXIudG9SZ2JhTnVtYmVyXG4gICAgICAgIDogQ29sb3JDb252ZXJ0ZXIudG9SZ2JOdW1iZXI7XG4gICAgdmFyIHZhbHVlID0gbmV3IGlucHV0X3ZhbHVlXzEuSW5wdXRWYWx1ZShjb2xvcik7XG4gICAgcmV0dXJuIG5ldyBpbnB1dF9iaW5kaW5nXzEuSW5wdXRCaW5kaW5nQ29udHJvbGxlcihkb2N1bWVudCwge1xuICAgICAgICBiaW5kaW5nOiBuZXcgaW5wdXRfMS5JbnB1dEJpbmRpbmcoe1xuICAgICAgICAgICAgcmVhZGVyOiByZWFkZXIsXG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHdyaXRlcjogd3JpdGVyLFxuICAgICAgICB9KSxcbiAgICAgICAgY29udHJvbGxlcjogbmV3IGNvbG9yX3N3YXRjaF90ZXh0XzEuQ29sb3JTd2F0Y2hUZXh0SW5wdXRDb250cm9sbGVyKGRvY3VtZW50LCB7XG4gICAgICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdHRlcixcbiAgICAgICAgICAgIHBhcnNlcjogU3RyaW5nQ29sb3JQYXJzZXIuQ29tcG9zaXRlUGFyc2VyLFxuICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogc3VwcG9ydHNBbHBoYSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHZpZXdNb2RlbDogbmV3IHZpZXdfbW9kZWxfMS5WaWV3TW9kZWwoKSxcbiAgICAgICAgfSksXG4gICAgICAgIGxhYmVsOiBwYXJhbXMubGFiZWwgfHwgdGFyZ2V0LmtleSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuY3JlYXRlV2l0aE51bWJlciA9IGNyZWF0ZVdpdGhOdW1iZXI7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlV2l0aE9iamVjdChkb2N1bWVudCwgdGFyZ2V0LCBwYXJhbXMpIHtcbiAgICB2YXIgaW5pdGlhbFZhbHVlID0gdGFyZ2V0LnJlYWQoKTtcbiAgICBpZiAoIWNvbG9yXzIuQ29sb3IuaXNDb2xvck9iamVjdChpbml0aWFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgY29sb3IgPSBjb2xvcl8yLkNvbG9yLmZyb21PYmplY3QoaW5pdGlhbFZhbHVlKTtcbiAgICB2YXIgc3VwcG9ydHNBbHBoYSA9IGNvbG9yXzIuQ29sb3IuaXNSZ2JhQ29sb3JPYmplY3QoaW5pdGlhbFZhbHVlKTtcbiAgICB2YXIgZm9ybWF0dGVyID0gc3VwcG9ydHNBbHBoYVxuICAgICAgICA/IG5ldyBjb2xvcl8xLkNvbG9yRm9ybWF0dGVyKENvbG9yQ29udmVydGVyLnRvSGV4UmdiYVN0cmluZylcbiAgICAgICAgOiBuZXcgY29sb3JfMS5Db2xvckZvcm1hdHRlcihDb2xvckNvbnZlcnRlci50b0hleFJnYlN0cmluZyk7XG4gICAgdmFyIHZhbHVlID0gbmV3IGlucHV0X3ZhbHVlXzEuSW5wdXRWYWx1ZShjb2xvcik7XG4gICAgcmV0dXJuIG5ldyBpbnB1dF9iaW5kaW5nXzEuSW5wdXRCaW5kaW5nQ29udHJvbGxlcihkb2N1bWVudCwge1xuICAgICAgICBiaW5kaW5nOiBuZXcgaW5wdXRfMS5JbnB1dEJpbmRpbmcoe1xuICAgICAgICAgICAgcmVhZGVyOiBDb2xvckNvbnZlcnRlci5mcm9tT2JqZWN0LFxuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB3cml0ZXI6IGNvbG9yXzIuQ29sb3IudG9SZ2JhT2JqZWN0LFxuICAgICAgICB9KSxcbiAgICAgICAgY29udHJvbGxlcjogbmV3IGNvbG9yX3N3YXRjaF90ZXh0XzEuQ29sb3JTd2F0Y2hUZXh0SW5wdXRDb250cm9sbGVyKGRvY3VtZW50LCB7XG4gICAgICAgICAgICB2aWV3TW9kZWw6IG5ldyB2aWV3X21vZGVsXzEuVmlld01vZGVsKCksXG4gICAgICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdHRlcixcbiAgICAgICAgICAgIHBhcnNlcjogU3RyaW5nQ29sb3JQYXJzZXIuQ29tcG9zaXRlUGFyc2VyLFxuICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogc3VwcG9ydHNBbHBoYSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgfSksXG4gICAgICAgIGxhYmVsOiBwYXJhbXMubGFiZWwgfHwgdGFyZ2V0LmtleSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuY3JlYXRlV2l0aE9iamVjdCA9IGNyZWF0ZVdpdGhPYmplY3Q7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvaW5wdXQudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvaW5wdXQudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlID0gdm9pZCAwO1xudmFyIHBhbmVfZXJyb3JfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvcGFuZS1lcnJvciAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9wYW5lLWVycm9yLnRzXCIpO1xudmFyIHR5cGVfdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy90eXBlLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvdHlwZS11dGlsLnRzXCIpO1xudmFyIEJvb2xlYW5JbnB1dEJpbmRpbmdDb250cm9sbGVyQ3JlYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jvb2xlYW4taW5wdXQgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvYmluZGluZy1jcmVhdG9ycy9ib29sZWFuLWlucHV0LnRzXCIpO1xudmFyIENvbG9ySW5wdXRCaW5kaW5nQ29udHJvbGxlckNyZWF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb2xvci1pbnB1dCAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9iaW5kaW5nLWNyZWF0b3JzL2NvbG9yLWlucHV0LnRzXCIpO1xudmFyIE51bWJlcklucHV0QmluZGluZ0NvbnRyb2xsZXJDcmVhdG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbnVtYmVyLWlucHV0ICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvbnVtYmVyLWlucHV0LnRzXCIpO1xudmFyIFBvaW50MmRJbnB1dEJpbmRpbmdDb250cm9sbGVyQ3JlYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3BvaW50LTJkLWlucHV0ICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvcG9pbnQtMmQtaW5wdXQudHNcIik7XG52YXIgU3RyaW5nSW5wdXRCaW5kaW5nQ29udHJvbGxlckNyZWF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zdHJpbmctaW5wdXQgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvYmluZGluZy1jcmVhdG9ycy9zdHJpbmctaW5wdXQudHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlKGRvY3VtZW50LCB0YXJnZXQsIHBhcmFtcykge1xuICAgIHZhciBpbml0aWFsVmFsdWUgPSB0YXJnZXQucmVhZCgpO1xuICAgIGlmICh0eXBlX3V0aWxfMS5UeXBlVXRpbC5pc0VtcHR5KGluaXRpYWxWYWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IHBhbmVfZXJyb3JfMS5QYW5lRXJyb3Ioe1xuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgIGtleTogdGFyZ2V0LmtleSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnZW1wdHl2YWx1ZScsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgYmMgPSBbXG4gICAgICAgIEJvb2xlYW5JbnB1dEJpbmRpbmdDb250cm9sbGVyQ3JlYXRvcnMuY3JlYXRlLFxuICAgICAgICBDb2xvcklucHV0QmluZGluZ0NvbnRyb2xsZXJDcmVhdG9ycy5jcmVhdGVXaXRoTnVtYmVyLFxuICAgICAgICBDb2xvcklucHV0QmluZGluZ0NvbnRyb2xsZXJDcmVhdG9ycy5jcmVhdGVXaXRoT2JqZWN0LFxuICAgICAgICBDb2xvcklucHV0QmluZGluZ0NvbnRyb2xsZXJDcmVhdG9ycy5jcmVhdGVXaXRoU3RyaW5nLFxuICAgICAgICBOdW1iZXJJbnB1dEJpbmRpbmdDb250cm9sbGVyQ3JlYXRvcnMuY3JlYXRlLFxuICAgICAgICBTdHJpbmdJbnB1dEJpbmRpbmdDb250cm9sbGVyQ3JlYXRvcnMuY3JlYXRlLFxuICAgICAgICBQb2ludDJkSW5wdXRCaW5kaW5nQ29udHJvbGxlckNyZWF0b3JzLmNyZWF0ZSxcbiAgICBdLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBjcmVhdGVCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICByZXR1cm4gcmVzdWx0IHx8IGNyZWF0ZUJpbmRpbmdDb250cm9sbGVyKGRvY3VtZW50LCB0YXJnZXQsIHBhcmFtcyk7XG4gICAgfSwgbnVsbCk7XG4gICAgaWYgKGJjKSB7XG4gICAgICAgIHJldHVybiBiYztcbiAgICB9XG4gICAgdGhyb3cgbmV3IHBhbmVfZXJyb3JfMS5QYW5lRXJyb3Ioe1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBrZXk6IHRhcmdldC5rZXksXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6ICdub21hdGNoaW5nY29udHJvbGxlcicsXG4gICAgfSk7XG59XG5leHBvcnRzLmNyZWF0ZSA9IGNyZWF0ZTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvYmluZGluZy1jcmVhdG9ycy9tb25pdG9yLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvbW9uaXRvci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZSA9IHZvaWQgMDtcbnZhciBwYW5lX2Vycm9yXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL3BhbmUtZXJyb3IgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvcGFuZS1lcnJvci50c1wiKTtcbnZhciB0eXBlX3V0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvdHlwZS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3R5cGUtdXRpbC50c1wiKTtcbnZhciBCb29sZWFuTW9uaXRvckJpbmRpbmdDb250cm9sbGVyQ3JlYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Jvb2xlYW4tbW9uaXRvciAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9iaW5kaW5nLWNyZWF0b3JzL2Jvb2xlYW4tbW9uaXRvci50c1wiKTtcbnZhciBOdW1iZXJNb25pdG9yQmluZGluZ0NvbnRyb2xsZXJDcmVhdG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbnVtYmVyLW1vbml0b3IgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvYmluZGluZy1jcmVhdG9ycy9udW1iZXItbW9uaXRvci50c1wiKTtcbnZhciBTdHJpbmdNb25pdG9yQmluZGluZ0NvbnRyb2xsZXJDcmVhdG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vc3RyaW5nLW1vbml0b3IgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvYmluZGluZy1jcmVhdG9ycy9zdHJpbmctbW9uaXRvci50c1wiKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBjcmVhdGUoZG9jdW1lbnQsIHRhcmdldCwgcGFyYW1zKSB7XG4gICAgdmFyIGluaXRpYWxWYWx1ZSA9IHRhcmdldC5yZWFkKCk7XG4gICAgaWYgKHR5cGVfdXRpbF8xLlR5cGVVdGlsLmlzRW1wdHkoaW5pdGlhbFZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgcGFuZV9lcnJvcl8xLlBhbmVFcnJvcih7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAga2V5OiB0YXJnZXQua2V5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6ICdlbXB0eXZhbHVlJyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHZhciBiYyA9IFtcbiAgICAgICAgTnVtYmVyTW9uaXRvckJpbmRpbmdDb250cm9sbGVyQ3JlYXRvcnMuY3JlYXRlLFxuICAgICAgICBTdHJpbmdNb25pdG9yQmluZGluZ0NvbnRyb2xsZXJDcmVhdG9ycy5jcmVhdGUsXG4gICAgICAgIEJvb2xlYW5Nb25pdG9yQmluZGluZ0NvbnRyb2xsZXJDcmVhdG9ycy5jcmVhdGUsXG4gICAgXS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwgY3JlYXRlQmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCB8fCBjcmVhdGVCaW5kaW5nQ29udHJvbGxlcihkb2N1bWVudCwgdGFyZ2V0LCBwYXJhbXMpO1xuICAgIH0sIG51bGwpO1xuICAgIGlmIChiYykge1xuICAgICAgICByZXR1cm4gYmM7XG4gICAgfVxuICAgIHRocm93IG5ldyBwYW5lX2Vycm9yXzEuUGFuZUVycm9yKHtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAga2V5OiB0YXJnZXQua2V5LFxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiAnbm9tYXRjaGluZ2NvbnRyb2xsZXInLFxuICAgIH0pO1xufVxuZXhwb3J0cy5jcmVhdGUgPSBjcmVhdGU7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvbnVtYmVyLWlucHV0LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvYmluZGluZy1jcmVhdG9ycy9udW1iZXItaW5wdXQudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZSA9IHZvaWQgMDtcbnZhciBpbnB1dF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vYmluZGluZy9pbnB1dCAqLyBcIi4vc3JjL21haW4vanMvYmluZGluZy9pbnB1dC50c1wiKTtcbnZhciBjb21wb3NpdGVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2NvbnN0cmFpbnQvY29tcG9zaXRlICovIFwiLi9zcmMvbWFpbi9qcy9jb25zdHJhaW50L2NvbXBvc2l0ZS50c1wiKTtcbnZhciBsaXN0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9jb25zdHJhaW50L2xpc3QgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvbGlzdC50c1wiKTtcbnZhciByYW5nZV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vY29uc3RyYWludC9yYW5nZSAqLyBcIi4vc3JjL21haW4vanMvY29uc3RyYWludC9yYW5nZS50c1wiKTtcbnZhciBzdGVwXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9jb25zdHJhaW50L3N0ZXAgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvc3RlcC50c1wiKTtcbnZhciB1dGlsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9jb25zdHJhaW50L3V0aWwgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvdXRpbC50c1wiKTtcbnZhciBOdW1iZXJDb252ZXJ0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9jb252ZXJ0ZXIvbnVtYmVyICovIFwiLi9zcmMvbWFpbi9qcy9jb252ZXJ0ZXIvbnVtYmVyLnRzXCIpO1xudmFyIG51bWJlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vZm9ybWF0dGVyL251bWJlciAqLyBcIi4vc3JjL21haW4vanMvZm9ybWF0dGVyL251bWJlci50c1wiKTtcbnZhciB0eXBlX3V0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvdHlwZS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3R5cGUtdXRpbC50c1wiKTtcbnZhciBpbnB1dF92YWx1ZV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbW9kZWwvaW5wdXQtdmFsdWUgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL2lucHV0LXZhbHVlLnRzXCIpO1xudmFyIHZpZXdfbW9kZWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21vZGVsL3ZpZXctbW9kZWwgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL3ZpZXctbW9kZWwudHNcIik7XG52YXIgc3RyaW5nX251bWJlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vcGFyc2VyL3N0cmluZy1udW1iZXIgKi8gXCIuL3NyYy9tYWluL2pzL3BhcnNlci9zdHJpbmctbnVtYmVyLnRzXCIpO1xudmFyIGlucHV0X2JpbmRpbmdfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2lucHV0LWJpbmRpbmcgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQtYmluZGluZy50c1wiKTtcbnZhciBsaXN0XzIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnB1dC9saXN0ICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L2xpc3QudHNcIik7XG52YXIgbnVtYmVyX3RleHRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2lucHV0L251bWJlci10ZXh0ICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L251bWJlci10ZXh0LnRzXCIpO1xudmFyIHNsaWRlcl90ZXh0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnB1dC9zbGlkZXItdGV4dCAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9zbGlkZXItdGV4dC50c1wiKTtcbnZhciBVaVV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi91aS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL3VpLXV0aWwudHNcIik7XG5mdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50KHBhcmFtcykge1xuICAgIHZhciBjb25zdHJhaW50cyA9IFtdO1xuICAgIGlmICgnc3RlcCcgaW4gcGFyYW1zICYmICF0eXBlX3V0aWxfMS5UeXBlVXRpbC5pc0VtcHR5KHBhcmFtcy5zdGVwKSkge1xuICAgICAgICBjb25zdHJhaW50cy5wdXNoKG5ldyBzdGVwXzEuU3RlcENvbnN0cmFpbnQoe1xuICAgICAgICAgICAgc3RlcDogcGFyYW1zLnN0ZXAsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgaWYgKCgnbWF4JyBpbiBwYXJhbXMgJiYgIXR5cGVfdXRpbF8xLlR5cGVVdGlsLmlzRW1wdHkocGFyYW1zLm1heCkpIHx8XG4gICAgICAgICgnbWluJyBpbiBwYXJhbXMgJiYgIXR5cGVfdXRpbF8xLlR5cGVVdGlsLmlzRW1wdHkocGFyYW1zLm1pbikpKSB7XG4gICAgICAgIGNvbnN0cmFpbnRzLnB1c2gobmV3IHJhbmdlXzEuUmFuZ2VDb25zdHJhaW50KHtcbiAgICAgICAgICAgIG1heDogcGFyYW1zLm1heCxcbiAgICAgICAgICAgIG1pbjogcGFyYW1zLm1pbixcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBpZiAoJ29wdGlvbnMnIGluIHBhcmFtcyAmJiBwYXJhbXMub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0cmFpbnRzLnB1c2gobmV3IGxpc3RfMS5MaXN0Q29uc3RyYWludCh7XG4gICAgICAgICAgICBvcHRpb25zOiBVaVV0aWwubm9ybWFsaXplSW5wdXRQYXJhbXNPcHRpb25zKHBhcmFtcy5vcHRpb25zLCBOdW1iZXJDb252ZXJ0ZXIuZnJvbU1peGVkKSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IGNvbXBvc2l0ZV8xLkNvbXBvc2l0ZUNvbnN0cmFpbnQoe1xuICAgICAgICBjb25zdHJhaW50czogY29uc3RyYWludHMsXG4gICAgfSk7XG59XG5mdW5jdGlvbiBjcmVhdGVDb250cm9sbGVyKGRvY3VtZW50LCB2YWx1ZSkge1xuICAgIHZhciBjID0gdmFsdWUuY29uc3RyYWludDtcbiAgICBpZiAoYyAmJiB1dGlsXzEuQ29uc3RyYWludFV0aWwuZmluZENvbnN0cmFpbnQoYywgbGlzdF8xLkxpc3RDb25zdHJhaW50KSkge1xuICAgICAgICByZXR1cm4gbmV3IGxpc3RfMi5MaXN0SW5wdXRDb250cm9sbGVyKGRvY3VtZW50LCB7XG4gICAgICAgICAgICBzdHJpbmdpZnlWYWx1ZTogTnVtYmVyQ29udmVydGVyLnRvU3RyaW5nLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgdmlld01vZGVsOiBuZXcgdmlld19tb2RlbF8xLlZpZXdNb2RlbCgpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGMgJiYgdXRpbF8xLkNvbnN0cmFpbnRVdGlsLmZpbmRDb25zdHJhaW50KGMsIHJhbmdlXzEuUmFuZ2VDb25zdHJhaW50KSkge1xuICAgICAgICByZXR1cm4gbmV3IHNsaWRlcl90ZXh0XzEuU2xpZGVyVGV4dElucHV0Q29udHJvbGxlcihkb2N1bWVudCwge1xuICAgICAgICAgICAgZm9ybWF0dGVyOiBuZXcgbnVtYmVyXzEuTnVtYmVyRm9ybWF0dGVyKFVpVXRpbC5nZXRTdWl0YWJsZURlY2ltYWxEaWdpdHModmFsdWUuY29uc3RyYWludCwgdmFsdWUucmF3VmFsdWUpKSxcbiAgICAgICAgICAgIHBhcnNlcjogc3RyaW5nX251bWJlcl8xLlN0cmluZ051bWJlclBhcnNlcixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHZpZXdNb2RlbDogbmV3IHZpZXdfbW9kZWxfMS5WaWV3TW9kZWwoKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgbnVtYmVyX3RleHRfMS5OdW1iZXJUZXh0SW5wdXRDb250cm9sbGVyKGRvY3VtZW50LCB7XG4gICAgICAgIGZvcm1hdHRlcjogbmV3IG51bWJlcl8xLk51bWJlckZvcm1hdHRlcihVaVV0aWwuZ2V0U3VpdGFibGVEZWNpbWFsRGlnaXRzKHZhbHVlLmNvbnN0cmFpbnQsIHZhbHVlLnJhd1ZhbHVlKSksXG4gICAgICAgIHBhcnNlcjogc3RyaW5nX251bWJlcl8xLlN0cmluZ051bWJlclBhcnNlcixcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICB2aWV3TW9kZWw6IG5ldyB2aWV3X21vZGVsXzEuVmlld01vZGVsKCksXG4gICAgfSk7XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlKGRvY3VtZW50LCB0YXJnZXQsIHBhcmFtcykge1xuICAgIHZhciBpbml0aWFsVmFsdWUgPSB0YXJnZXQucmVhZCgpO1xuICAgIGlmICh0eXBlb2YgaW5pdGlhbFZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIHZhbHVlID0gbmV3IGlucHV0X3ZhbHVlXzEuSW5wdXRWYWx1ZSgwLCBjcmVhdGVDb25zdHJhaW50KHBhcmFtcykpO1xuICAgIHZhciBiaW5kaW5nID0gbmV3IGlucHV0XzEuSW5wdXRCaW5kaW5nKHtcbiAgICAgICAgcmVhZGVyOiBOdW1iZXJDb252ZXJ0ZXIuZnJvbU1peGVkLFxuICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICB3cml0ZXI6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2OyB9LFxuICAgIH0pO1xuICAgIHZhciBjb250cm9sbGVyID0gY3JlYXRlQ29udHJvbGxlcihkb2N1bWVudCwgdmFsdWUpO1xuICAgIHJldHVybiBuZXcgaW5wdXRfYmluZGluZ18xLklucHV0QmluZGluZ0NvbnRyb2xsZXIoZG9jdW1lbnQsIHtcbiAgICAgICAgYmluZGluZzogYmluZGluZyxcbiAgICAgICAgY29udHJvbGxlcjogY29udHJvbGxlcixcbiAgICAgICAgbGFiZWw6IHBhcmFtcy5sYWJlbCB8fCB0YXJnZXQua2V5LFxuICAgIH0pO1xufVxuZXhwb3J0cy5jcmVhdGUgPSBjcmVhdGU7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvbnVtYmVyLW1vbml0b3IudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvbnVtYmVyLW1vbml0b3IudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlID0gdm9pZCAwO1xudmFyIG1vbml0b3JfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2JpbmRpbmcvbW9uaXRvciAqLyBcIi4vc3JjL21haW4vanMvYmluZGluZy9tb25pdG9yLnRzXCIpO1xudmFyIE51bWJlckNvbnZlcnRlciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2NvbnZlcnRlci9udW1iZXIgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnZlcnRlci9udW1iZXIudHNcIik7XG52YXIgbnVtYmVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9mb3JtYXR0ZXIvbnVtYmVyICovIFwiLi9zcmMvbWFpbi9qcy9mb3JtYXR0ZXIvbnVtYmVyLnRzXCIpO1xudmFyIHR5cGVfdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy90eXBlLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvdHlwZS11dGlsLnRzXCIpO1xudmFyIG1vbml0b3JfdmFsdWVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21vZGVsL21vbml0b3ItdmFsdWUgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL21vbml0b3ItdmFsdWUudHNcIik7XG52YXIgdmlld19tb2RlbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbW9kZWwvdmlldy1tb2RlbCAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvdmlldy1tb2RlbC50c1wiKTtcbnZhciBtb25pdG9yX2JpbmRpbmdfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21vbml0b3ItYmluZGluZyAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9tb25pdG9yLWJpbmRpbmcudHNcIik7XG52YXIgZ3JhcGhfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21vbml0b3IvZ3JhcGggKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvbW9uaXRvci9ncmFwaC50c1wiKTtcbnZhciBtdWx0aV9sb2dfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21vbml0b3IvbXVsdGktbG9nICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL21vbml0b3IvbXVsdGktbG9nLnRzXCIpO1xudmFyIHNpbmdsZV9sb2dfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21vbml0b3Ivc2luZ2xlLWxvZyAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9tb25pdG9yL3NpbmdsZS1sb2cudHNcIik7XG52YXIgdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91dGlsICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2JpbmRpbmctY3JlYXRvcnMvdXRpbC50c1wiKTtcbmZ1bmN0aW9uIGNyZWF0ZUZvcm1hdHRlcigpIHtcbiAgICAvLyBUT0RPOiBmb3JtYXR0ZXIgcHJlY2lzaW9uXG4gICAgcmV0dXJuIG5ldyBudW1iZXJfMS5OdW1iZXJGb3JtYXR0ZXIoMik7XG59XG5mdW5jdGlvbiBjcmVhdGVUZXh0TW9uaXRvcihkb2N1bWVudCwgdGFyZ2V0LCBwYXJhbXMpIHtcbiAgICB2YXIgdmFsdWUgPSBuZXcgbW9uaXRvcl92YWx1ZV8xLk1vbml0b3JWYWx1ZSh0eXBlX3V0aWxfMS5UeXBlVXRpbC5nZXRPckRlZmF1bHQocGFyYW1zLmNvdW50LCAxKSk7XG4gICAgdmFyIGNvbnRyb2xsZXIgPSB2YWx1ZS50b3RhbENvdW50ID09PSAxXG4gICAgICAgID8gbmV3IHNpbmdsZV9sb2dfMS5TaW5nbGVMb2dNb25pdG9yQ29udHJvbGxlcihkb2N1bWVudCwge1xuICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVGb3JtYXR0ZXIoKSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHZpZXdNb2RlbDogbmV3IHZpZXdfbW9kZWxfMS5WaWV3TW9kZWwoKSxcbiAgICAgICAgfSlcbiAgICAgICAgOiBuZXcgbXVsdGlfbG9nXzEuTXVsdGlMb2dNb25pdG9yQ29udHJvbGxlcihkb2N1bWVudCwge1xuICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVGb3JtYXR0ZXIoKSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHZpZXdNb2RlbDogbmV3IHZpZXdfbW9kZWxfMS5WaWV3TW9kZWwoKSxcbiAgICAgICAgfSk7XG4gICAgcmV0dXJuIG5ldyBtb25pdG9yX2JpbmRpbmdfMS5Nb25pdG9yQmluZGluZ0NvbnRyb2xsZXIoZG9jdW1lbnQsIHtcbiAgICAgICAgYmluZGluZzogbmV3IG1vbml0b3JfMS5Nb25pdG9yQmluZGluZyh7XG4gICAgICAgICAgICByZWFkZXI6IE51bWJlckNvbnZlcnRlci5mcm9tTWl4ZWQsXG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIHRpY2tlcjogdXRpbF8xLmNyZWF0ZVRpY2tlcihkb2N1bWVudCwgcGFyYW1zLmludGVydmFsKSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgfSksXG4gICAgICAgIGNvbnRyb2xsZXI6IGNvbnRyb2xsZXIsXG4gICAgICAgIGxhYmVsOiBwYXJhbXMubGFiZWwgfHwgdGFyZ2V0LmtleSxcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUdyYXBoTW9uaXRvcihkb2N1bWVudCwgdGFyZ2V0LCBwYXJhbXMpIHtcbiAgICB2YXIgdmFsdWUgPSBuZXcgbW9uaXRvcl92YWx1ZV8xLk1vbml0b3JWYWx1ZSh0eXBlX3V0aWxfMS5UeXBlVXRpbC5nZXRPckRlZmF1bHQocGFyYW1zLmNvdW50LCA2NCkpO1xuICAgIHZhciBjb250cm9sbGVyID0gbmV3IGdyYXBoXzEuR3JhcGhNb25pdG9yQ29udHJvbGxlcihkb2N1bWVudCwge1xuICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZUZvcm1hdHRlcigpLFxuICAgICAgICBtYXhWYWx1ZTogdHlwZV91dGlsXzEuVHlwZVV0aWwuZ2V0T3JEZWZhdWx0KCdtYXgnIGluIHBhcmFtcyA/IHBhcmFtcy5tYXggOiBudWxsLCAxMDApLFxuICAgICAgICBtaW5WYWx1ZTogdHlwZV91dGlsXzEuVHlwZVV0aWwuZ2V0T3JEZWZhdWx0KCdtaW4nIGluIHBhcmFtcyA/IHBhcmFtcy5taW4gOiBudWxsLCAwKSxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICB2aWV3TW9kZWw6IG5ldyB2aWV3X21vZGVsXzEuVmlld01vZGVsKCksXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBtb25pdG9yX2JpbmRpbmdfMS5Nb25pdG9yQmluZGluZ0NvbnRyb2xsZXIoZG9jdW1lbnQsIHtcbiAgICAgICAgYmluZGluZzogbmV3IG1vbml0b3JfMS5Nb25pdG9yQmluZGluZyh7XG4gICAgICAgICAgICByZWFkZXI6IE51bWJlckNvbnZlcnRlci5mcm9tTWl4ZWQsXG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIHRpY2tlcjogdXRpbF8xLmNyZWF0ZVRpY2tlcihkb2N1bWVudCwgcGFyYW1zLmludGVydmFsKSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgfSksXG4gICAgICAgIGNvbnRyb2xsZXI6IGNvbnRyb2xsZXIsXG4gICAgICAgIGxhYmVsOiBwYXJhbXMubGFiZWwgfHwgdGFyZ2V0LmtleSxcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZShkb2N1bWVudCwgdGFyZ2V0LCBwYXJhbXMpIHtcbiAgICB2YXIgaW5pdGlhbFZhbHVlID0gdGFyZ2V0LnJlYWQoKTtcbiAgICBpZiAodHlwZW9mIGluaXRpYWxWYWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICgndmlldycgaW4gcGFyYW1zICYmIHBhcmFtcy52aWV3ID09PSAnZ3JhcGgnKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVHcmFwaE1vbml0b3IoZG9jdW1lbnQsIHRhcmdldCwgcGFyYW1zKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZVRleHRNb25pdG9yKGRvY3VtZW50LCB0YXJnZXQsIHBhcmFtcyk7XG59XG5leHBvcnRzLmNyZWF0ZSA9IGNyZWF0ZTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvYmluZGluZy1jcmVhdG9ycy9wb2ludC0yZC1pbnB1dC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvYmluZGluZy1jcmVhdG9ycy9wb2ludC0yZC1pbnB1dC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGUgPSB2b2lkIDA7XG52YXIgaW5wdXRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2JpbmRpbmcvaW5wdXQgKi8gXCIuL3NyYy9tYWluL2pzL2JpbmRpbmcvaW5wdXQudHNcIik7XG52YXIgY29tcG9zaXRlXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9jb25zdHJhaW50L2NvbXBvc2l0ZSAqLyBcIi4vc3JjL21haW4vanMvY29uc3RyYWludC9jb21wb3NpdGUudHNcIik7XG52YXIgcG9pbnRfMmRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2NvbnN0cmFpbnQvcG9pbnQtMmQgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvcG9pbnQtMmQudHNcIik7XG52YXIgcmFuZ2VfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2NvbnN0cmFpbnQvcmFuZ2UgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvcmFuZ2UudHNcIik7XG52YXIgc3RlcF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vY29uc3RyYWludC9zdGVwICovIFwiLi9zcmMvbWFpbi9qcy9jb25zdHJhaW50L3N0ZXAudHNcIik7XG52YXIgUG9pbnQyZENvbnZlcnRlciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2NvbnZlcnRlci9wb2ludC0yZCAqLyBcIi4vc3JjL21haW4vanMvY29udmVydGVyL3BvaW50LTJkLnRzXCIpO1xudmFyIG51bWJlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vZm9ybWF0dGVyL251bWJlciAqLyBcIi4vc3JjL21haW4vanMvZm9ybWF0dGVyL251bWJlci50c1wiKTtcbnZhciBwYW5lX2Vycm9yXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL3BhbmUtZXJyb3IgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvcGFuZS1lcnJvci50c1wiKTtcbnZhciB0eXBlX3V0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvdHlwZS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3R5cGUtdXRpbC50c1wiKTtcbnZhciBpbnB1dF92YWx1ZV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbW9kZWwvaW5wdXQtdmFsdWUgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL2lucHV0LXZhbHVlLnRzXCIpO1xudmFyIHZpZXdfbW9kZWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21vZGVsL3ZpZXctbW9kZWwgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL3ZpZXctbW9kZWwudHNcIik7XG52YXIgYW55X3BvaW50XzJkXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9wYXJzZXIvYW55LXBvaW50LTJkICovIFwiLi9zcmMvbWFpbi9qcy9wYXJzZXIvYW55LXBvaW50LTJkLnRzXCIpO1xudmFyIHN0cmluZ19udW1iZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3BhcnNlci9zdHJpbmctbnVtYmVyICovIFwiLi9zcmMvbWFpbi9qcy9wYXJzZXIvc3RyaW5nLW51bWJlci50c1wiKTtcbnZhciBpbnB1dF9iaW5kaW5nXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnB1dC1iaW5kaW5nICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0LWJpbmRpbmcudHNcIik7XG52YXIgcG9pbnRfMmRfcGFkX3RleHRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2lucHV0L3BvaW50LTJkLXBhZC10ZXh0ICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L3BvaW50LTJkLXBhZC10ZXh0LnRzXCIpO1xudmFyIFVpVXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3VpLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvdWktdXRpbC50c1wiKTtcbmZ1bmN0aW9uIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQocGFyYW1zKSB7XG4gICAgaWYgKCFwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIGNvbnN0cmFpbnRzID0gW107XG4gICAgaWYgKCF0eXBlX3V0aWxfMS5UeXBlVXRpbC5pc0VtcHR5KHBhcmFtcy5zdGVwKSkge1xuICAgICAgICBjb25zdHJhaW50cy5wdXNoKG5ldyBzdGVwXzEuU3RlcENvbnN0cmFpbnQoe1xuICAgICAgICAgICAgc3RlcDogcGFyYW1zLnN0ZXAsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgaWYgKCF0eXBlX3V0aWxfMS5UeXBlVXRpbC5pc0VtcHR5KHBhcmFtcy5tYXgpIHx8ICF0eXBlX3V0aWxfMS5UeXBlVXRpbC5pc0VtcHR5KHBhcmFtcy5taW4pKSB7XG4gICAgICAgIGNvbnN0cmFpbnRzLnB1c2gobmV3IHJhbmdlXzEuUmFuZ2VDb25zdHJhaW50KHtcbiAgICAgICAgICAgIG1heDogcGFyYW1zLm1heCxcbiAgICAgICAgICAgIG1pbjogcGFyYW1zLm1pbixcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IGNvbXBvc2l0ZV8xLkNvbXBvc2l0ZUNvbnN0cmFpbnQoe1xuICAgICAgICBjb25zdHJhaW50czogY29uc3RyYWludHMsXG4gICAgfSk7XG59XG5mdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50KHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgcG9pbnRfMmRfMS5Qb2ludDJkQ29uc3RyYWludCh7XG4gICAgICAgIHg6IGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQoJ3gnIGluIHBhcmFtcyA/IHBhcmFtcy54IDogdW5kZWZpbmVkKSxcbiAgICAgICAgeTogY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCgneScgaW4gcGFyYW1zID8gcGFyYW1zLnkgOiB1bmRlZmluZWQpLFxuICAgIH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlQ29udHJvbGxlcihkb2N1bWVudCwgdmFsdWUsIGludmVydHNZKSB7XG4gICAgdmFyIGMgPSB2YWx1ZS5jb25zdHJhaW50O1xuICAgIGlmICghKGMgaW5zdGFuY2VvZiBwb2ludF8yZF8xLlBvaW50MmRDb25zdHJhaW50KSkge1xuICAgICAgICB0aHJvdyBwYW5lX2Vycm9yXzEuUGFuZUVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgcG9pbnRfMmRfcGFkX3RleHRfMS5Qb2ludDJkUGFkVGV4dElucHV0Q29udHJvbGxlcihkb2N1bWVudCwge1xuICAgICAgICBpbnZlcnRzWTogaW52ZXJ0c1ksXG4gICAgICAgIHBhcnNlcjogc3RyaW5nX251bWJlcl8xLlN0cmluZ051bWJlclBhcnNlcixcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICB2aWV3TW9kZWw6IG5ldyB2aWV3X21vZGVsXzEuVmlld01vZGVsKCksXG4gICAgICAgIHhGb3JtYXR0ZXI6IG5ldyBudW1iZXJfMS5OdW1iZXJGb3JtYXR0ZXIoVWlVdGlsLmdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyhjLnhDb25zdHJhaW50LCB2YWx1ZS5yYXdWYWx1ZS54KSksXG4gICAgICAgIHlGb3JtYXR0ZXI6IG5ldyBudW1iZXJfMS5OdW1iZXJGb3JtYXR0ZXIoVWlVdGlsLmdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyhjLnlDb25zdHJhaW50LCB2YWx1ZS5yYXdWYWx1ZS55KSksXG4gICAgfSk7XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlKGRvY3VtZW50LCB0YXJnZXQsIHBhcmFtcykge1xuICAgIHZhciBpbml0aWFsVmFsdWUgPSB0YXJnZXQucmVhZCgpO1xuICAgIHZhciBwID0gYW55X3BvaW50XzJkXzEuQW55UG9pbnQyZFBhcnNlcihpbml0aWFsVmFsdWUpO1xuICAgIGlmICghcCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIHZhbHVlID0gbmV3IGlucHV0X3ZhbHVlXzEuSW5wdXRWYWx1ZShwLCBjcmVhdGVDb25zdHJhaW50KHBhcmFtcykpO1xuICAgIHZhciBiaW5kaW5nID0gbmV3IGlucHV0XzEuSW5wdXRCaW5kaW5nKHtcbiAgICAgICAgcmVhZGVyOiBQb2ludDJkQ29udmVydGVyLmZyb21NaXhlZCxcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgd3JpdGVyOiBmdW5jdGlvbiAodikgeyByZXR1cm4gdi50b09iamVjdCgpOyB9LFxuICAgIH0pO1xuICAgIHZhciB5UGFyYW1zID0gJ3knIGluIHBhcmFtcyA/IHBhcmFtcy55IDogdW5kZWZpbmVkO1xuICAgIHZhciBpbnZlcnRzWSA9IHlQYXJhbXMgPyAhIXlQYXJhbXMuaW52ZXJ0ZWQgOiBmYWxzZTtcbiAgICB2YXIgY29udHJvbGxlciA9IGNyZWF0ZUNvbnRyb2xsZXIoZG9jdW1lbnQsIHZhbHVlLCBpbnZlcnRzWSk7XG4gICAgcmV0dXJuIG5ldyBpbnB1dF9iaW5kaW5nXzEuSW5wdXRCaW5kaW5nQ29udHJvbGxlcihkb2N1bWVudCwge1xuICAgICAgICBiaW5kaW5nOiBiaW5kaW5nLFxuICAgICAgICBjb250cm9sbGVyOiBjb250cm9sbGVyLFxuICAgICAgICBsYWJlbDogcGFyYW1zLmxhYmVsIHx8IHRhcmdldC5rZXksXG4gICAgfSk7XG59XG5leHBvcnRzLmNyZWF0ZSA9IGNyZWF0ZTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvYmluZGluZy1jcmVhdG9ycy9zdHJpbmctaW5wdXQudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvY29udHJvbGxlci9iaW5kaW5nLWNyZWF0b3JzL3N0cmluZy1pbnB1dC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlID0gdm9pZCAwO1xudmFyIGlucHV0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9iaW5kaW5nL2lucHV0ICovIFwiLi9zcmMvbWFpbi9qcy9iaW5kaW5nL2lucHV0LnRzXCIpO1xudmFyIGNvbXBvc2l0ZV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vY29uc3RyYWludC9jb21wb3NpdGUgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvY29tcG9zaXRlLnRzXCIpO1xudmFyIGxpc3RfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2NvbnN0cmFpbnQvbGlzdCAqLyBcIi4vc3JjL21haW4vanMvY29uc3RyYWludC9saXN0LnRzXCIpO1xudmFyIHV0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2NvbnN0cmFpbnQvdXRpbCAqLyBcIi4vc3JjL21haW4vanMvY29uc3RyYWludC91dGlsLnRzXCIpO1xudmFyIFN0cmluZ0NvbnZlcnRlciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2NvbnZlcnRlci9zdHJpbmcgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnZlcnRlci9zdHJpbmcudHNcIik7XG52YXIgc3RyaW5nXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9mb3JtYXR0ZXIvc3RyaW5nICovIFwiLi9zcmMvbWFpbi9qcy9mb3JtYXR0ZXIvc3RyaW5nLnRzXCIpO1xudmFyIGlucHV0X3ZhbHVlXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9tb2RlbC9pbnB1dC12YWx1ZSAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvaW5wdXQtdmFsdWUudHNcIik7XG52YXIgdmlld19tb2RlbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbW9kZWwvdmlldy1tb2RlbCAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvdmlldy1tb2RlbC50c1wiKTtcbnZhciBpbnB1dF9iaW5kaW5nXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnB1dC1iaW5kaW5nICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0LWJpbmRpbmcudHNcIik7XG52YXIgbGlzdF8yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW5wdXQvbGlzdCAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9saXN0LnRzXCIpO1xudmFyIHRleHRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2lucHV0L3RleHQgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvdGV4dC50c1wiKTtcbnZhciBVaVV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi91aS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL3VpLXV0aWwudHNcIik7XG5mdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50KHBhcmFtcykge1xuICAgIHZhciBjb25zdHJhaW50cyA9IFtdO1xuICAgIGlmICgnb3B0aW9ucycgaW4gcGFyYW1zICYmIHBhcmFtcy5vcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3RyYWludHMucHVzaChuZXcgbGlzdF8xLkxpc3RDb25zdHJhaW50KHtcbiAgICAgICAgICAgIG9wdGlvbnM6IFVpVXRpbC5ub3JtYWxpemVJbnB1dFBhcmFtc09wdGlvbnMocGFyYW1zLm9wdGlvbnMsIFN0cmluZ0NvbnZlcnRlci5mcm9tTWl4ZWQpLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgY29tcG9zaXRlXzEuQ29tcG9zaXRlQ29uc3RyYWludCh7XG4gICAgICAgIGNvbnN0cmFpbnRzOiBjb25zdHJhaW50cyxcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRyb2xsZXIoZG9jdW1lbnQsIHZhbHVlKSB7XG4gICAgdmFyIGMgPSB2YWx1ZS5jb25zdHJhaW50O1xuICAgIGlmIChjICYmIHV0aWxfMS5Db25zdHJhaW50VXRpbC5maW5kQ29uc3RyYWludChjLCBsaXN0XzEuTGlzdENvbnN0cmFpbnQpKSB7XG4gICAgICAgIHJldHVybiBuZXcgbGlzdF8yLkxpc3RJbnB1dENvbnRyb2xsZXIoZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIHN0cmluZ2lmeVZhbHVlOiBTdHJpbmdDb252ZXJ0ZXIudG9TdHJpbmcsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB2aWV3TW9kZWw6IG5ldyB2aWV3X21vZGVsXzEuVmlld01vZGVsKCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRleHRfMS5UZXh0SW5wdXRDb250cm9sbGVyKGRvY3VtZW50LCB7XG4gICAgICAgIGZvcm1hdHRlcjogbmV3IHN0cmluZ18xLlN0cmluZ0Zvcm1hdHRlcigpLFxuICAgICAgICBwYXJzZXI6IFN0cmluZ0NvbnZlcnRlci50b1N0cmluZyxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICB2aWV3TW9kZWw6IG5ldyB2aWV3X21vZGVsXzEuVmlld01vZGVsKCksXG4gICAgfSk7XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlKGRvY3VtZW50LCB0YXJnZXQsIHBhcmFtcykge1xuICAgIHZhciBpbml0aWFsVmFsdWUgPSB0YXJnZXQucmVhZCgpO1xuICAgIGlmICh0eXBlb2YgaW5pdGlhbFZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIHZhbHVlID0gbmV3IGlucHV0X3ZhbHVlXzEuSW5wdXRWYWx1ZSgnJywgY3JlYXRlQ29uc3RyYWludChwYXJhbXMpKTtcbiAgICB2YXIgYmluZGluZyA9IG5ldyBpbnB1dF8xLklucHV0QmluZGluZyh7XG4gICAgICAgIHJlYWRlcjogU3RyaW5nQ29udmVydGVyLmZyb21NaXhlZCxcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgd3JpdGVyOiBmdW5jdGlvbiAodikgeyByZXR1cm4gdjsgfSxcbiAgICB9KTtcbiAgICB2YXIgY29udHJvbGxlciA9IGNyZWF0ZUNvbnRyb2xsZXIoZG9jdW1lbnQsIHZhbHVlKTtcbiAgICByZXR1cm4gbmV3IGlucHV0X2JpbmRpbmdfMS5JbnB1dEJpbmRpbmdDb250cm9sbGVyKGRvY3VtZW50LCB7XG4gICAgICAgIGJpbmRpbmc6IGJpbmRpbmcsXG4gICAgICAgIGNvbnRyb2xsZXI6IGNvbnRyb2xsZXIsXG4gICAgICAgIGxhYmVsOiBwYXJhbXMubGFiZWwgfHwgdGFyZ2V0LmtleSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuY3JlYXRlID0gY3JlYXRlO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9iaW5kaW5nLWNyZWF0b3JzL3N0cmluZy1tb25pdG9yLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvY29udHJvbGxlci9iaW5kaW5nLWNyZWF0b3JzL3N0cmluZy1tb25pdG9yLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZSA9IHZvaWQgMDtcbnZhciBtb25pdG9yXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9iaW5kaW5nL21vbml0b3IgKi8gXCIuL3NyYy9tYWluL2pzL2JpbmRpbmcvbW9uaXRvci50c1wiKTtcbnZhciBTdHJpbmdDb252ZXJ0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9jb252ZXJ0ZXIvc3RyaW5nICovIFwiLi9zcmMvbWFpbi9qcy9jb252ZXJ0ZXIvc3RyaW5nLnRzXCIpO1xudmFyIHN0cmluZ18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vZm9ybWF0dGVyL3N0cmluZyAqLyBcIi4vc3JjL21haW4vanMvZm9ybWF0dGVyL3N0cmluZy50c1wiKTtcbnZhciB0eXBlX3V0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvdHlwZS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3R5cGUtdXRpbC50c1wiKTtcbnZhciBtb25pdG9yX3ZhbHVlXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9tb2RlbC9tb25pdG9yLXZhbHVlICovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC9tb25pdG9yLXZhbHVlLnRzXCIpO1xudmFyIHZpZXdfbW9kZWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21vZGVsL3ZpZXctbW9kZWwgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL3ZpZXctbW9kZWwudHNcIik7XG52YXIgbW9uaXRvcl9iaW5kaW5nXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tb25pdG9yLWJpbmRpbmcgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvbW9uaXRvci1iaW5kaW5nLnRzXCIpO1xudmFyIG11bHRpX2xvZ18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbW9uaXRvci9tdWx0aS1sb2cgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvbW9uaXRvci9tdWx0aS1sb2cudHNcIik7XG52YXIgc2luZ2xlX2xvZ18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbW9uaXRvci9zaW5nbGUtbG9nICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL21vbml0b3Ivc2luZ2xlLWxvZy50c1wiKTtcbnZhciB1dGlsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3V0aWwgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvYmluZGluZy1jcmVhdG9ycy91dGlsLnRzXCIpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZShkb2N1bWVudCwgdGFyZ2V0LCBwYXJhbXMpIHtcbiAgICB2YXIgaW5pdGlhbFZhbHVlID0gdGFyZ2V0LnJlYWQoKTtcbiAgICBpZiAodHlwZW9mIGluaXRpYWxWYWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciB2YWx1ZSA9IG5ldyBtb25pdG9yX3ZhbHVlXzEuTW9uaXRvclZhbHVlKHR5cGVfdXRpbF8xLlR5cGVVdGlsLmdldE9yRGVmYXVsdChwYXJhbXMuY291bnQsIDEpKTtcbiAgICB2YXIgbXVsdGlsaW5lID0gdmFsdWUudG90YWxDb3VudCA+IDEgfHwgKCdtdWx0aWxpbmUnIGluIHBhcmFtcyAmJiBwYXJhbXMubXVsdGlsaW5lKTtcbiAgICB2YXIgY29udHJvbGxlciA9IG11bHRpbGluZVxuICAgICAgICA/IG5ldyBtdWx0aV9sb2dfMS5NdWx0aUxvZ01vbml0b3JDb250cm9sbGVyKGRvY3VtZW50LCB7XG4gICAgICAgICAgICBmb3JtYXR0ZXI6IG5ldyBzdHJpbmdfMS5TdHJpbmdGb3JtYXR0ZXIoKSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHZpZXdNb2RlbDogbmV3IHZpZXdfbW9kZWxfMS5WaWV3TW9kZWwoKSxcbiAgICAgICAgfSlcbiAgICAgICAgOiBuZXcgc2luZ2xlX2xvZ18xLlNpbmdsZUxvZ01vbml0b3JDb250cm9sbGVyKGRvY3VtZW50LCB7XG4gICAgICAgICAgICBmb3JtYXR0ZXI6IG5ldyBzdHJpbmdfMS5TdHJpbmdGb3JtYXR0ZXIoKSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHZpZXdNb2RlbDogbmV3IHZpZXdfbW9kZWxfMS5WaWV3TW9kZWwoKSxcbiAgICAgICAgfSk7XG4gICAgcmV0dXJuIG5ldyBtb25pdG9yX2JpbmRpbmdfMS5Nb25pdG9yQmluZGluZ0NvbnRyb2xsZXIoZG9jdW1lbnQsIHtcbiAgICAgICAgYmluZGluZzogbmV3IG1vbml0b3JfMS5Nb25pdG9yQmluZGluZyh7XG4gICAgICAgICAgICByZWFkZXI6IFN0cmluZ0NvbnZlcnRlci5mcm9tTWl4ZWQsXG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIHRpY2tlcjogdXRpbF8xLmNyZWF0ZVRpY2tlcihkb2N1bWVudCwgcGFyYW1zLmludGVydmFsKSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgfSksXG4gICAgICAgIGNvbnRyb2xsZXI6IGNvbnRyb2xsZXIsXG4gICAgICAgIGxhYmVsOiBwYXJhbXMubGFiZWwgfHwgdGFyZ2V0LmtleSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuY3JlYXRlID0gY3JlYXRlO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9iaW5kaW5nLWNyZWF0b3JzL3V0aWwudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvYmluZGluZy1jcmVhdG9ycy91dGlsLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlVGlja2VyID0gdm9pZCAwO1xudmFyIGNvbnN0YW50c18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy9jb25zdGFudHMgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvY29uc3RhbnRzLnRzXCIpO1xudmFyIGludGVydmFsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL3RpY2tlci9pbnRlcnZhbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy90aWNrZXIvaW50ZXJ2YWwudHNcIik7XG52YXIgbWFudWFsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL3RpY2tlci9tYW51YWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvdGlja2VyL21hbnVhbC50c1wiKTtcbnZhciB0eXBlX3V0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvdHlwZS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3R5cGUtdXRpbC50c1wiKTtcbmZ1bmN0aW9uIGNyZWF0ZVRpY2tlcihkb2N1bWVudCwgaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gaW50ZXJ2YWwgPT09IDBcbiAgICAgICAgPyBuZXcgbWFudWFsXzEuTWFudWFsVGlja2VyKClcbiAgICAgICAgOiBuZXcgaW50ZXJ2YWxfMS5JbnRlcnZhbFRpY2tlcihkb2N1bWVudCwgdHlwZV91dGlsXzEuVHlwZVV0aWwuZ2V0T3JEZWZhdWx0KGludGVydmFsLCBjb25zdGFudHNfMS5Db25zdGFudHMubW9uaXRvckRlZmF1bHRJbnRlcnZhbCkpO1xufVxuZXhwb3J0cy5jcmVhdGVUaWNrZXIgPSBjcmVhdGVUaWNrZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2J1dHRvbi50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvY29udHJvbGxlci9idXR0b24udHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CdXR0b25Db250cm9sbGVyID0gdm9pZCAwO1xudmFyIGJ1dHRvbl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbW9kZWwvYnV0dG9uICovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC9idXR0b24udHNcIik7XG52YXIgYnV0dG9uXzIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92aWV3L2J1dHRvbiAqLyBcIi4vc3JjL21haW4vanMvdmlldy9idXR0b24udHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIEJ1dHRvbkNvbnRyb2xsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQnV0dG9uQ29udHJvbGxlcihkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHRoaXMub25CdXR0b25DbGlja18gPSB0aGlzLm9uQnV0dG9uQ2xpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYnV0dG9uID0gbmV3IGJ1dHRvbl8xLkJ1dHRvbihjb25maWcudGl0bGUpO1xuICAgICAgICB0aGlzLnZpZXdNb2RlbCA9IGNvbmZpZy52aWV3TW9kZWw7XG4gICAgICAgIHRoaXMudmlldyA9IG5ldyBidXR0b25fMi5CdXR0b25WaWV3KGRvY3VtZW50LCB7XG4gICAgICAgICAgICBidXR0b246IHRoaXMuYnV0dG9uLFxuICAgICAgICAgICAgbW9kZWw6IHRoaXMudmlld01vZGVsLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQnV0dG9uQ2xpY2tfKTtcbiAgICB9XG4gICAgQnV0dG9uQ29udHJvbGxlci5wcm90b3R5cGUub25CdXR0b25DbGlja18gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYnV0dG9uLmNsaWNrKCk7XG4gICAgfTtcbiAgICByZXR1cm4gQnV0dG9uQ29udHJvbGxlcjtcbn0oKSk7XG5leHBvcnRzLkJ1dHRvbkNvbnRyb2xsZXIgPSBCdXR0b25Db250cm9sbGVyO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9jb250YWluZXItdXRpbC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2NvbnRhaW5lci11dGlsLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb21wdXRlRXhwYW5kZWRGb2xkZXJIZWlnaHQgPSBleHBvcnRzLnVwZGF0ZUFsbEl0ZW1zUG9zaXRpb25zID0gdm9pZCAwO1xudmFyIERvbVV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9taXNjL2RvbS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2RvbS11dGlsLnRzXCIpO1xuZnVuY3Rpb24gdXBkYXRlQWxsSXRlbXNQb3NpdGlvbnModWlDb250YWluZXIpIHtcbiAgICB2YXIgdmlzaWJsZUl0ZW1zID0gdWlDb250YWluZXIuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uICh1YykgeyByZXR1cm4gIXVjLnZpZXdNb2RlbC5oaWRkZW47IH0pO1xuICAgIHZhciBmaXJzdFZpc2libGVJdGVtID0gdmlzaWJsZUl0ZW1zWzBdO1xuICAgIHZhciBsYXN0VmlzaWJsZUl0ZW0gPSB2aXNpYmxlSXRlbXNbdmlzaWJsZUl0ZW1zLmxlbmd0aCAtIDFdO1xuICAgIHVpQ29udGFpbmVyLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHVjKSB7XG4gICAgICAgIHZhciBwcyA9IFtdO1xuICAgICAgICBpZiAodWMgPT09IGZpcnN0VmlzaWJsZUl0ZW0pIHtcbiAgICAgICAgICAgIHBzLnB1c2goJ2ZpcnN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVjID09PSBsYXN0VmlzaWJsZUl0ZW0pIHtcbiAgICAgICAgICAgIHBzLnB1c2goJ2xhc3QnKTtcbiAgICAgICAgfVxuICAgICAgICB1Yy52aWV3TW9kZWwucG9zaXRpb25zID0gcHM7XG4gICAgfSk7XG59XG5leHBvcnRzLnVwZGF0ZUFsbEl0ZW1zUG9zaXRpb25zID0gdXBkYXRlQWxsSXRlbXNQb3NpdGlvbnM7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY29tcHV0ZUV4cGFuZGVkRm9sZGVySGVpZ2h0KGZvbGRlciwgY29udGFpbmVyRWxlbWVudCkge1xuICAgIHZhciBoZWlnaHQgPSAwO1xuICAgIERvbVV0aWwuZGlzYWJsZVRyYW5zaXRpb25UZW1wb3JhcmlseShjb250YWluZXJFbGVtZW50LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIEV4cGFuZCBmb2xkZXIgdGVtcG9yYXJpbHlcbiAgICAgICAgZm9sZGVyLmV4cGFuZGVkSGVpZ2h0ID0gbnVsbDtcbiAgICAgICAgZm9sZGVyLnRlbXBvcmFyeUV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgRG9tVXRpbC5mb3JjZVJlZmxvdyhjb250YWluZXJFbGVtZW50KTtcbiAgICAgICAgLy8gQ29tcHV0ZSBoZWlnaHRcbiAgICAgICAgaGVpZ2h0ID0gY29udGFpbmVyRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgIC8vIFJlc3RvcmUgZXhwYW5kZWRcbiAgICAgICAgZm9sZGVyLnRlbXBvcmFyeUV4cGFuZGVkID0gbnVsbDtcbiAgICAgICAgRG9tVXRpbC5mb3JjZVJlZmxvdyhjb250YWluZXJFbGVtZW50KTtcbiAgICB9KTtcbiAgICByZXR1cm4gaGVpZ2h0O1xufVxuZXhwb3J0cy5jb21wdXRlRXhwYW5kZWRGb2xkZXJIZWlnaHQgPSBjb21wdXRlRXhwYW5kZWRGb2xkZXJIZWlnaHQ7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2ZvbGRlci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvY29udHJvbGxlci9mb2xkZXIudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Gb2xkZXJDb250cm9sbGVyID0gdm9pZCAwO1xudmFyIERvbVV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9taXNjL2RvbS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2RvbS11dGlsLnRzXCIpO1xudmFyIHR5cGVfdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWlzYy90eXBlLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvdHlwZS11dGlsLnRzXCIpO1xudmFyIGZvbGRlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbW9kZWwvZm9sZGVyICovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC9mb2xkZXIudHNcIik7XG52YXIgdWlfY29udGFpbmVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tb2RlbC91aS1jb250YWluZXIgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL3VpLWNvbnRhaW5lci50c1wiKTtcbnZhciBmb2xkZXJfMiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3ZpZXcvZm9sZGVyICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L2ZvbGRlci50c1wiKTtcbnZhciBDb250YWluZXJVdGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb250YWluZXItdXRpbCAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9jb250YWluZXItdXRpbC50c1wiKTtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgRm9sZGVyQ29udHJvbGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBGb2xkZXJDb250cm9sbGVyKGRvY3VtZW50LCBjb25maWcpIHtcbiAgICAgICAgdGhpcy5vbkNvbnRhaW5lclRyYW5zaXRpb25FbmRfID0gdGhpcy5vbkNvbnRhaW5lclRyYW5zaXRpb25FbmRfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25Gb2xkZXJCZWZvcmVDaGFuZ2VfID0gdGhpcy5vbkZvbGRlckJlZm9yZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblRpdGxlQ2xpY2tfID0gdGhpcy5vblRpdGxlQ2xpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25VaUNvbnRhaW5lckFkZF8gPSB0aGlzLm9uVWlDb250YWluZXJBZGRfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25VaUNvbnRhaW5lckl0ZW1MYXlvdXRfID0gdGhpcy5vblVpQ29udGFpbmVySXRlbUxheW91dF8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblVpQ29udGFpbmVyUmVtb3ZlXyA9IHRoaXMub25VaUNvbnRhaW5lclJlbW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy52aWV3TW9kZWwgPSBjb25maWcudmlld01vZGVsO1xuICAgICAgICB0aGlzLmZvbGRlciA9IG5ldyBmb2xkZXJfMS5Gb2xkZXIoY29uZmlnLnRpdGxlLCB0eXBlX3V0aWxfMS5UeXBlVXRpbC5nZXRPckRlZmF1bHQoY29uZmlnLmV4cGFuZGVkLCB0cnVlKSk7XG4gICAgICAgIHRoaXMuZm9sZGVyLmVtaXR0ZXIub24oJ2JlZm9yZWNoYW5nZScsIHRoaXMub25Gb2xkZXJCZWZvcmVDaGFuZ2VfKTtcbiAgICAgICAgdGhpcy51Y0xpc3RfID0gbmV3IHVpX2NvbnRhaW5lcl8xLlVpQ29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMudWNMaXN0Xy5lbWl0dGVyLm9uKCdhZGQnLCB0aGlzLm9uVWlDb250YWluZXJBZGRfKTtcbiAgICAgICAgdGhpcy51Y0xpc3RfLmVtaXR0ZXIub24oJ2l0ZW1sYXlvdXQnLCB0aGlzLm9uVWlDb250YWluZXJJdGVtTGF5b3V0Xyk7XG4gICAgICAgIHRoaXMudWNMaXN0Xy5lbWl0dGVyLm9uKCdyZW1vdmUnLCB0aGlzLm9uVWlDb250YWluZXJSZW1vdmVfKTtcbiAgICAgICAgdGhpcy5kb2NfID0gZG9jdW1lbnQ7XG4gICAgICAgIHRoaXMudmlldyA9IG5ldyBmb2xkZXJfMi5Gb2xkZXJWaWV3KHRoaXMuZG9jXywge1xuICAgICAgICAgICAgZm9sZGVyOiB0aGlzLmZvbGRlcixcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLnZpZXdNb2RlbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudmlldy50aXRsZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uVGl0bGVDbGlja18pO1xuICAgICAgICB0aGlzLnZpZXcuY29udGFpbmVyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgdGhpcy5vbkNvbnRhaW5lclRyYW5zaXRpb25FbmRfKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZvbGRlckNvbnRyb2xsZXIucHJvdG90eXBlLCBcImRvY3VtZW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2NfO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZvbGRlckNvbnRyb2xsZXIucHJvdG90eXBlLCBcInVpQ29udGFpbmVyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51Y0xpc3RfO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgRm9sZGVyQ29udHJvbGxlci5wcm90b3R5cGUub25Gb2xkZXJCZWZvcmVDaGFuZ2VfID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgIGlmIChldi5wcm9wZXJ0eU5hbWUgIT09ICdleHBhbmRlZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZV91dGlsXzEuVHlwZVV0aWwuaXNFbXB0eSh0aGlzLmZvbGRlci5leHBhbmRlZEhlaWdodCkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9sZGVyLmV4cGFuZGVkSGVpZ2h0ID0gQ29udGFpbmVyVXRpbC5jb21wdXRlRXhwYW5kZWRGb2xkZXJIZWlnaHQodGhpcy5mb2xkZXIsIHRoaXMudmlldy5jb250YWluZXJFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvbGRlci5zaG91bGRGaXhIZWlnaHQgPSB0cnVlO1xuICAgICAgICBEb21VdGlsLmZvcmNlUmVmbG93KHRoaXMudmlldy5jb250YWluZXJFbGVtZW50KTtcbiAgICB9O1xuICAgIEZvbGRlckNvbnRyb2xsZXIucHJvdG90eXBlLm9uVGl0bGVDbGlja18gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZm9sZGVyLmV4cGFuZGVkID0gIXRoaXMuZm9sZGVyLmV4cGFuZGVkO1xuICAgIH07XG4gICAgRm9sZGVyQ29udHJvbGxlci5wcm90b3R5cGUuYXBwbHlVaUNvbnRhaW5lckNoYW5nZV8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIENvbnRhaW5lclV0aWwudXBkYXRlQWxsSXRlbXNQb3NpdGlvbnModGhpcy51aUNvbnRhaW5lcik7XG4gICAgfTtcbiAgICBGb2xkZXJDb250cm9sbGVyLnByb3RvdHlwZS5vblVpQ29udGFpbmVyQWRkXyA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICBEb21VdGlsLmluc2VydEVsZW1lbnRBdCh0aGlzLnZpZXcuY29udGFpbmVyRWxlbWVudCwgZXYudWlDb250cm9sbGVyLnZpZXcuZWxlbWVudCwgZXYuaW5kZXgpO1xuICAgICAgICB0aGlzLmFwcGx5VWlDb250YWluZXJDaGFuZ2VfKCk7XG4gICAgfTtcbiAgICBGb2xkZXJDb250cm9sbGVyLnByb3RvdHlwZS5vblVpQ29udGFpbmVyUmVtb3ZlXyA9IGZ1bmN0aW9uIChfKSB7XG4gICAgICAgIHRoaXMuYXBwbHlVaUNvbnRhaW5lckNoYW5nZV8oKTtcbiAgICB9O1xuICAgIEZvbGRlckNvbnRyb2xsZXIucHJvdG90eXBlLm9uVWlDb250YWluZXJJdGVtTGF5b3V0XyA9IGZ1bmN0aW9uIChfKSB7XG4gICAgICAgIHRoaXMuYXBwbHlVaUNvbnRhaW5lckNoYW5nZV8oKTtcbiAgICB9O1xuICAgIEZvbGRlckNvbnRyb2xsZXIucHJvdG90eXBlLm9uQ29udGFpbmVyVHJhbnNpdGlvbkVuZF8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgaWYgKGV2LnByb3BlcnR5TmFtZSAhPT0gJ2hlaWdodCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvbGRlci5zaG91bGRGaXhIZWlnaHQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb2xkZXIuZXhwYW5kZWRIZWlnaHQgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIEZvbGRlckNvbnRyb2xsZXI7XG59KCkpO1xuZXhwb3J0cy5Gb2xkZXJDb250cm9sbGVyID0gRm9sZGVyQ29udHJvbGxlcjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQtYmluZGluZy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQtYmluZGluZy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JbnB1dEJpbmRpbmdDb250cm9sbGVyID0gdm9pZCAwO1xudmFyIGxhYmVsZWRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3ZpZXcvbGFiZWxlZCAqLyBcIi4vc3JjL21haW4vanMvdmlldy9sYWJlbGVkLnRzXCIpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBJbnB1dEJpbmRpbmdDb250cm9sbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIElucHV0QmluZGluZ0NvbnRyb2xsZXIoZG9jdW1lbnQsIGNvbmZpZykge1xuICAgICAgICB0aGlzLmJpbmRpbmcgPSBjb25maWcuYmluZGluZztcbiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gY29uZmlnLmNvbnRyb2xsZXI7XG4gICAgICAgIHRoaXMudmlldyA9IG5ldyBsYWJlbGVkXzEuTGFiZWxlZFZpZXcoZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLmNvbnRyb2xsZXIudmlld01vZGVsLFxuICAgICAgICAgICAgbGFiZWw6IGNvbmZpZy5sYWJlbCxcbiAgICAgICAgICAgIHZpZXc6IHRoaXMuY29udHJvbGxlci52aWV3LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KElucHV0QmluZGluZ0NvbnRyb2xsZXIucHJvdG90eXBlLCBcInZpZXdNb2RlbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci52aWV3TW9kZWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gSW5wdXRCaW5kaW5nQ29udHJvbGxlcjtcbn0oKSk7XG5leHBvcnRzLklucHV0QmluZGluZ0NvbnRyb2xsZXIgPSBJbnB1dEJpbmRpbmdDb250cm9sbGVyO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9hLXBhbGV0dGUudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvYS1wYWxldHRlLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQVBhbGV0dGVJbnB1dENvbnRyb2xsZXIgPSB2b2lkIDA7XG52YXIgcG9pbnRlcl9oYW5kbGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL3BvaW50ZXItaGFuZGxlciAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9wb2ludGVyLWhhbmRsZXIudHNcIik7XG52YXIgY29sb3JfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21vZGVsL2NvbG9yICovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC9jb2xvci50c1wiKTtcbnZhciBhX3BhbGV0dGVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3ZpZXcvaW5wdXQvYS1wYWxldHRlICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L2lucHV0L2EtcGFsZXR0ZS50c1wiKTtcbnZhciBVaVV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi91aS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL3VpLXV0aWwudHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIEFQYWxldHRlSW5wdXRDb250cm9sbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFQYWxldHRlSW5wdXRDb250cm9sbGVyKGRvY3VtZW50LCBjb25maWcpIHtcbiAgICAgICAgdGhpcy5vbktleURvd25fID0gdGhpcy5vbktleURvd25fLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25Qb2ludGVyRG93bl8gPSB0aGlzLm9uUG9pbnRlckRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25Qb2ludGVyTW92ZV8gPSB0aGlzLm9uUG9pbnRlck1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25Qb2ludGVyVXBfID0gdGhpcy5vblBvaW50ZXJVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgdGhpcy52aWV3TW9kZWwgPSBjb25maWcudmlld01vZGVsO1xuICAgICAgICB0aGlzLnZpZXcgPSBuZXcgYV9wYWxldHRlXzEuQVBhbGV0dGVJbnB1dFZpZXcoZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLnZpZXdNb2RlbCxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wdEhhbmRsZXJfID0gbmV3IHBvaW50ZXJfaGFuZGxlcl8xLlBvaW50ZXJIYW5kbGVyKGRvY3VtZW50LCB0aGlzLnZpZXcuZWxlbWVudCk7XG4gICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vblBvaW50ZXJEb3duXyk7XG4gICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCd1cCcsIHRoaXMub25Qb2ludGVyVXBfKTtcbiAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duXyk7XG4gICAgfVxuICAgIEFQYWxldHRlSW5wdXRDb250cm9sbGVyLnByb3RvdHlwZS5oYW5kbGVQb2ludGVyRXZlbnRfID0gZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgdmFyIGFscGhhID0gZC5weDtcbiAgICAgICAgdmFyIGMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICB2YXIgX2EgPSBjLmdldENvbXBvbmVudHMoJ2hzdicpLCBoID0gX2FbMF0sIHMgPSBfYVsxXSwgdiA9IF9hWzJdO1xuICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gbmV3IGNvbG9yXzEuQ29sb3IoW2gsIHMsIHYsIGFscGhhXSwgJ2hzdicpO1xuICAgICAgICB0aGlzLnZpZXcudXBkYXRlKCk7XG4gICAgfTtcbiAgICBBUGFsZXR0ZUlucHV0Q29udHJvbGxlci5wcm90b3R5cGUub25Qb2ludGVyRG93bl8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEpO1xuICAgIH07XG4gICAgQVBhbGV0dGVJbnB1dENvbnRyb2xsZXIucHJvdG90eXBlLm9uUG9pbnRlck1vdmVfID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhKTtcbiAgICB9O1xuICAgIEFQYWxldHRlSW5wdXRDb250cm9sbGVyLnByb3RvdHlwZS5vblBvaW50ZXJVcF8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEpO1xuICAgIH07XG4gICAgQVBhbGV0dGVJbnB1dENvbnRyb2xsZXIucHJvdG90eXBlLm9uS2V5RG93bl8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgdmFyIHN0ZXAgPSBVaVV0aWwuZ2V0U3RlcEZvcktleShVaVV0aWwuZ2V0QmFzZVN0ZXBGb3JDb2xvcih0cnVlKSwgVWlVdGlsLmdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICB2YXIgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgIHZhciBfYSA9IGMuZ2V0Q29tcG9uZW50cygnaHN2JyksIGggPSBfYVswXSwgcyA9IF9hWzFdLCB2ID0gX2FbMl0sIGEgPSBfYVszXTtcbiAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IG5ldyBjb2xvcl8xLkNvbG9yKFtoLCBzLCB2LCBhICsgc3RlcF0sICdoc3YnKTtcbiAgICB9O1xuICAgIHJldHVybiBBUGFsZXR0ZUlucHV0Q29udHJvbGxlcjtcbn0oKSk7XG5leHBvcnRzLkFQYWxldHRlSW5wdXRDb250cm9sbGVyID0gQVBhbGV0dGVJbnB1dENvbnRyb2xsZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L2NoZWNrYm94LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvY2hlY2tib3gudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNoZWNrYm94SW5wdXRDb250cm9sbGVyID0gdm9pZCAwO1xudmFyIHR5cGVfdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy90eXBlLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvdHlwZS11dGlsLnRzXCIpO1xudmFyIGNoZWNrYm94XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi92aWV3L2lucHV0L2NoZWNrYm94ICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L2lucHV0L2NoZWNrYm94LnRzXCIpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBDaGVja2JveElucHV0Q29udHJvbGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDaGVja2JveElucHV0Q29udHJvbGxlcihkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHRoaXMub25JbnB1dENoYW5nZV8gPSB0aGlzLm9uSW5wdXRDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgIHRoaXMudmlld01vZGVsID0gY29uZmlnLnZpZXdNb2RlbDtcbiAgICAgICAgdGhpcy52aWV3ID0gbmV3IGNoZWNrYm94XzEuQ2hlY2tib3hJbnB1dFZpZXcoZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLnZpZXdNb2RlbCxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52aWV3LmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uSW5wdXRDaGFuZ2VfKTtcbiAgICB9XG4gICAgQ2hlY2tib3hJbnB1dENvbnRyb2xsZXIucHJvdG90eXBlLm9uSW5wdXRDaGFuZ2VfID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIGlucHV0RWxlbSA9IHR5cGVfdXRpbF8xLlR5cGVVdGlsLmZvcmNlQ2FzdChlLmN1cnJlbnRUYXJnZXQpO1xuICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gaW5wdXRFbGVtLmNoZWNrZWQ7XG4gICAgICAgIHRoaXMudmlldy51cGRhdGUoKTtcbiAgICB9O1xuICAgIHJldHVybiBDaGVja2JveElucHV0Q29udHJvbGxlcjtcbn0oKSk7XG5leHBvcnRzLkNoZWNrYm94SW5wdXRDb250cm9sbGVyID0gQ2hlY2tib3hJbnB1dENvbnRyb2xsZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L2NvbG9yLWNvbXBvbmVudC10ZXh0cy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9jb2xvci1jb21wb25lbnQtdGV4dHMudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db2xvckNvbXBvbmVudFRleHRzSW5wdXRDb250cm9sbGVyID0gdm9pZCAwO1xudmFyIHR5cGVfdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy90eXBlLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvdHlwZS11dGlsLnRzXCIpO1xudmFyIGNvbG9yXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9tb2RlbC9jb2xvciAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvY29sb3IudHNcIik7XG52YXIgY29sb3JfY29tcG9uZW50X3RleHRzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi92aWV3L2lucHV0L2NvbG9yLWNvbXBvbmVudC10ZXh0cyAqLyBcIi4vc3JjL21haW4vanMvdmlldy9pbnB1dC9jb2xvci1jb21wb25lbnQtdGV4dHMudHNcIik7XG52YXIgVWlVdGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdWktdXRpbCAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci91aS11dGlsLnRzXCIpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBDb2xvckNvbXBvbmVudFRleHRzSW5wdXRDb250cm9sbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbG9yQ29tcG9uZW50VGV4dHNJbnB1dENvbnRyb2xsZXIoZG9jdW1lbnQsIGNvbmZpZykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLm9uTW9kZVNlbGVjdENoYW5nZV8gPSB0aGlzLm9uTW9kZVNlbGVjdENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlXyA9IHRoaXMub25JbnB1dENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbklucHV0S2V5RG93bl8gPSB0aGlzLm9uSW5wdXRLZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnBhcnNlcl8gPSBjb25maWcucGFyc2VyO1xuICAgICAgICB0aGlzLnBpY2tlZENvbG9yID0gY29uZmlnLnBpY2tlZENvbG9yO1xuICAgICAgICB0aGlzLnZpZXdNb2RlbCA9IGNvbmZpZy52aWV3TW9kZWw7XG4gICAgICAgIHRoaXMudmlldyA9IG5ldyBjb2xvcl9jb21wb25lbnRfdGV4dHNfMS5Db2xvckNvbXBvbmVudFRleHRzSW5wdXRWaWV3KGRvY3VtZW50LCB7XG4gICAgICAgICAgICBtb2RlbDogdGhpcy52aWV3TW9kZWwsXG4gICAgICAgICAgICBwaWNrZWRDb2xvcjogdGhpcy5waWNrZWRDb2xvcixcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudmlldy5pbnB1dEVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKGlucHV0RWxlbSkge1xuICAgICAgICAgICAgaW5wdXRFbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIF90aGlzLm9uSW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgX3RoaXMub25JbnB1dEtleURvd25fKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudmlldy5tb2RlU2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uTW9kZVNlbGVjdENoYW5nZV8pO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JDb21wb25lbnRUZXh0c0lucHV0Q29udHJvbGxlci5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBpY2tlZENvbG9yLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgQ29sb3JDb21wb25lbnRUZXh0c0lucHV0Q29udHJvbGxlci5wcm90b3R5cGUuZmluZEluZGV4T2ZJbnB1dEVsZW1fID0gZnVuY3Rpb24gKGlucHV0RWxlbSkge1xuICAgICAgICB2YXIgaW5wdXRFbGVtcyA9IHRoaXMudmlldy5pbnB1dEVsZW1lbnRzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0RWxlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpbnB1dEVsZW1zW2ldID09PSBpbnB1dEVsZW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIENvbG9yQ29tcG9uZW50VGV4dHNJbnB1dENvbnRyb2xsZXIucHJvdG90eXBlLnVwZGF0ZUNvbXBvbmVudF8gPSBmdW5jdGlvbiAoaW5kZXgsIG5ld1ZhbHVlKSB7XG4gICAgICAgIHZhciBtb2RlID0gdGhpcy5waWNrZWRDb2xvci5tb2RlO1xuICAgICAgICB2YXIgY29tcHMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlLmdldENvbXBvbmVudHMobW9kZSk7XG4gICAgICAgIHZhciBuZXdDb21wcyA9IGNvbXBzLm1hcChmdW5jdGlvbiAoY29tcCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIGkgPT09IGluZGV4ID8gbmV3VmFsdWUgOiBjb21wO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IG5ldyBjb2xvcl8xLkNvbG9yKG5ld0NvbXBzLCBtb2RlKTtcbiAgICAgICAgdGhpcy52aWV3LnVwZGF0ZSgpO1xuICAgIH07XG4gICAgQ29sb3JDb21wb25lbnRUZXh0c0lucHV0Q29udHJvbGxlci5wcm90b3R5cGUub25JbnB1dENoYW5nZV8gPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgaW5wdXRFbGVtID0gdHlwZV91dGlsXzEuVHlwZVV0aWwuZm9yY2VDYXN0KGUuY3VycmVudFRhcmdldCk7XG4gICAgICAgIHZhciBwYXJzZWRWYWx1ZSA9IHRoaXMucGFyc2VyXyhpbnB1dEVsZW0udmFsdWUpO1xuICAgICAgICBpZiAodHlwZV91dGlsXzEuVHlwZVV0aWwuaXNFbXB0eShwYXJzZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcEluZGV4ID0gdGhpcy5maW5kSW5kZXhPZklucHV0RWxlbV8oaW5wdXRFbGVtKTtcbiAgICAgICAgaWYgKHR5cGVfdXRpbF8xLlR5cGVVdGlsLmlzRW1wdHkoY29tcEluZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50Xyhjb21wSW5kZXgsIHBhcnNlZFZhbHVlKTtcbiAgICB9O1xuICAgIENvbG9yQ29tcG9uZW50VGV4dHNJbnB1dENvbnRyb2xsZXIucHJvdG90eXBlLm9uSW5wdXRLZXlEb3duXyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciBjb21wSW5kZXggPSB0aGlzLmZpbmRJbmRleE9mSW5wdXRFbGVtXyhlLmN1cnJlbnRUYXJnZXQpO1xuICAgICAgICB2YXIgc3RlcCA9IFVpVXRpbC5nZXRTdGVwRm9yS2V5KFVpVXRpbC5nZXRCYXNlU3RlcEZvckNvbG9yKGNvbXBJbmRleCA9PT0gMyksIFVpVXRpbC5nZXRWZXJ0aWNhbFN0ZXBLZXlzKGUpKTtcbiAgICAgICAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5wdXRFbGVtID0gdHlwZV91dGlsXzEuVHlwZVV0aWwuZm9yY2VDYXN0KGUuY3VycmVudFRhcmdldCk7XG4gICAgICAgIHZhciBwYXJzZWRWYWx1ZSA9IHRoaXMucGFyc2VyXyhpbnB1dEVsZW0udmFsdWUpO1xuICAgICAgICBpZiAodHlwZV91dGlsXzEuVHlwZVV0aWwuaXNFbXB0eShwYXJzZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZV91dGlsXzEuVHlwZVV0aWwuaXNFbXB0eShjb21wSW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVDb21wb25lbnRfKGNvbXBJbmRleCwgcGFyc2VkVmFsdWUgKyBzdGVwKTtcbiAgICB9O1xuICAgIENvbG9yQ29tcG9uZW50VGV4dHNJbnB1dENvbnRyb2xsZXIucHJvdG90eXBlLm9uTW9kZVNlbGVjdENoYW5nZV8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgdmFyIHNlbGVjdEVsZW0gPSBldi5jdXJyZW50VGFyZ2V0O1xuICAgICAgICB0aGlzLnBpY2tlZENvbG9yLm1vZGUgPSBzZWxlY3RFbGVtLnZhbHVlO1xuICAgIH07XG4gICAgcmV0dXJuIENvbG9yQ29tcG9uZW50VGV4dHNJbnB1dENvbnRyb2xsZXI7XG59KCkpO1xuZXhwb3J0cy5Db2xvckNvbXBvbmVudFRleHRzSW5wdXRDb250cm9sbGVyID0gQ29sb3JDb21wb25lbnRUZXh0c0lucHV0Q29udHJvbGxlcjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvY29sb3ItcGlja2VyLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L2NvbG9yLXBpY2tlci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvbG9yUGlja2VySW5wdXRDb250cm9sbGVyID0gdm9pZCAwO1xudmFyIG51bWJlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vZm9ybWF0dGVyL251bWJlciAqLyBcIi4vc3JjL21haW4vanMvZm9ybWF0dGVyL251bWJlci50c1wiKTtcbnZhciBEb21VdGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy9kb20tdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9kb20tdXRpbC50c1wiKTtcbnZhciBjb2xvcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbW9kZWwvY29sb3IgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL2NvbG9yLnRzXCIpO1xudmFyIGZvbGRhYmxlXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9tb2RlbC9mb2xkYWJsZSAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvZm9sZGFibGUudHNcIik7XG52YXIgaW5wdXRfdmFsdWVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21vZGVsL2lucHV0LXZhbHVlICovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC9pbnB1dC12YWx1ZS50c1wiKTtcbnZhciBNb2RlbFN5bmMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9tb2RlbC9tb2RlbC1zeW5jICovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC9tb2RlbC1zeW5jLnRzXCIpO1xudmFyIHN0cmluZ19udW1iZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3BhcnNlci9zdHJpbmctbnVtYmVyICovIFwiLi9zcmMvbWFpbi9qcy9wYXJzZXIvc3RyaW5nLW51bWJlci50c1wiKTtcbnZhciBjb2xvcl9waWNrZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3ZpZXcvaW5wdXQvY29sb3ItcGlja2VyICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L2lucHV0L2NvbG9yLXBpY2tlci50c1wiKTtcbnZhciBhX3BhbGV0dGVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYS1wYWxldHRlICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L2EtcGFsZXR0ZS50c1wiKTtcbnZhciBjb2xvcl9jb21wb25lbnRfdGV4dHNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY29sb3ItY29tcG9uZW50LXRleHRzICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L2NvbG9yLWNvbXBvbmVudC10ZXh0cy50c1wiKTtcbnZhciBoX3BhbGV0dGVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaC1wYWxldHRlICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L2gtcGFsZXR0ZS50c1wiKTtcbnZhciBudW1iZXJfdGV4dF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9udW1iZXItdGV4dCAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9udW1iZXItdGV4dC50c1wiKTtcbnZhciBzdl9wYWxldHRlXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3N2LXBhbGV0dGUgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvc3YtcGFsZXR0ZS50c1wiKTtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgQ29sb3JQaWNrZXJJbnB1dENvbnRyb2xsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29sb3JQaWNrZXJJbnB1dENvbnRyb2xsZXIoZG9jdW1lbnQsIGNvbmZpZykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLnRyaWdnZXJFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5vbkZvY3VzYWJsZUVsZW1lbnRCbHVyXyA9IHRoaXMub25Gb2N1c2FibGVFbGVtZW50Qmx1cl8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbktleURvd25fID0gdGhpcy5vbktleURvd25fLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucGlja2VkQ29sb3IgPSBjb25maWcucGlja2VkQ29sb3I7XG4gICAgICAgIHRoaXMuZm9sZGFibGUgPSBuZXcgZm9sZGFibGVfMS5Gb2xkYWJsZSgpO1xuICAgICAgICB0aGlzLnZpZXdNb2RlbCA9IGNvbmZpZy52aWV3TW9kZWw7XG4gICAgICAgIHRoaXMuaFBhbGV0dGVJY18gPSBuZXcgaF9wYWxldHRlXzEuSFBhbGV0dGVJbnB1dENvbnRyb2xsZXIoZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnBpY2tlZENvbG9yLnZhbHVlLFxuICAgICAgICAgICAgdmlld01vZGVsOiB0aGlzLnZpZXdNb2RlbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3ZQYWxldHRlSWNfID0gbmV3IHN2X3BhbGV0dGVfMS5TdlBhbGV0dGVJbnB1dENvbnRyb2xsZXIoZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnBpY2tlZENvbG9yLnZhbHVlLFxuICAgICAgICAgICAgdmlld01vZGVsOiB0aGlzLnZpZXdNb2RlbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWxwaGFJY3NfID0gY29uZmlnLnN1cHBvcnRzQWxwaGFcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHBhbGV0dGU6IG5ldyBhX3BhbGV0dGVfMS5BUGFsZXR0ZUlucHV0Q29udHJvbGxlcihkb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5waWNrZWRDb2xvci52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGVsOiB0aGlzLnZpZXdNb2RlbCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBuZXcgbnVtYmVyX3RleHRfMS5OdW1iZXJUZXh0SW5wdXRDb250cm9sbGVyKGRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogbmV3IG51bWJlcl8xLk51bWJlckZvcm1hdHRlcigyKSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VyOiBzdHJpbmdfbnVtYmVyXzEuU3RyaW5nTnVtYmVyUGFyc2VyLFxuICAgICAgICAgICAgICAgICAgICBzdGVwOiAwLjEsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuZXcgaW5wdXRfdmFsdWVfMS5JbnB1dFZhbHVlKDApLFxuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZWw6IHRoaXMudmlld01vZGVsLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBpZiAodGhpcy5hbHBoYUljc18pIHtcbiAgICAgICAgICAgIE1vZGVsU3luYy5jb25uZWN0KHtcbiAgICAgICAgICAgICAgICBwcmltYXJ5OiB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5OiBmdW5jdGlvbiAoZnJvbSwgdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvLnJhd1ZhbHVlID0gZnJvbS52YWx1ZS5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKClbM107XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVtaXR0ZXI6IGZ1bmN0aW9uIChtKSB7IHJldHVybiBtLnZhbHVlLmVtaXR0ZXI7IH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnBpY2tlZENvbG9yLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2Vjb25kYXJ5OiB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5OiBmdW5jdGlvbiAoZnJvbSwgdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wcyA9IHRvLnZhbHVlLnJhd1ZhbHVlLmdldENvbXBvbmVudHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBzWzNdID0gZnJvbS5yYXdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvLnZhbHVlLnJhd1ZhbHVlID0gbmV3IGNvbG9yXzEuQ29sb3IoY29tcHMsIHRvLnZhbHVlLnJhd1ZhbHVlLm1vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyOiBmdW5jdGlvbiAobSkgeyByZXR1cm4gbS5lbWl0dGVyOyB9LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5hbHBoYUljc18udGV4dC52YWx1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21wVGV4dHNJY18gPSBuZXcgY29sb3JfY29tcG9uZW50X3RleHRzXzEuQ29sb3JDb21wb25lbnRUZXh0c0lucHV0Q29udHJvbGxlcihkb2N1bWVudCwge1xuICAgICAgICAgICAgcGFyc2VyOiBzdHJpbmdfbnVtYmVyXzEuU3RyaW5nTnVtYmVyUGFyc2VyLFxuICAgICAgICAgICAgcGlja2VkQ29sb3I6IHRoaXMucGlja2VkQ29sb3IsXG4gICAgICAgICAgICB2aWV3TW9kZWw6IHRoaXMudmlld01vZGVsLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52aWV3ID0gbmV3IGNvbG9yX3BpY2tlcl8xLkNvbG9yUGlja2VySW5wdXRWaWV3KGRvY3VtZW50LCB7XG4gICAgICAgICAgICBhbHBoYUlucHV0Vmlld3M6IHRoaXMuYWxwaGFJY3NfXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIHBhbGV0dGU6IHRoaXMuYWxwaGFJY3NfLnBhbGV0dGUudmlldyxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy5hbHBoYUljc18udGV4dC52aWV3LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICBjb21wb25lbnRUZXh0c1ZpZXc6IHRoaXMuY29tcFRleHRzSWNfLnZpZXcsXG4gICAgICAgICAgICBmb2xkYWJsZTogdGhpcy5mb2xkYWJsZSxcbiAgICAgICAgICAgIGhQYWxldHRlSW5wdXRWaWV3OiB0aGlzLmhQYWxldHRlSWNfLnZpZXcsXG4gICAgICAgICAgICBtb2RlbDogdGhpcy52aWV3TW9kZWwsXG4gICAgICAgICAgICBwaWNrZWRDb2xvcjogdGhpcy5waWNrZWRDb2xvcixcbiAgICAgICAgICAgIHN1cHBvcnRzQWxwaGE6IGNvbmZpZy5zdXBwb3J0c0FscGhhLFxuICAgICAgICAgICAgc3ZQYWxldHRlSW5wdXRWaWV3OiB0aGlzLnN2UGFsZXR0ZUljXy52aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duXyk7XG4gICAgICAgIHRoaXMudmlldy5hbGxGb2N1c2FibGVFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtKSB7XG4gICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBfdGhpcy5vbkZvY3VzYWJsZUVsZW1lbnRCbHVyXyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JQaWNrZXJJbnB1dENvbnRyb2xsZXIucHJvdG90eXBlLCBcInZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5waWNrZWRDb2xvci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIENvbG9yUGlja2VySW5wdXRDb250cm9sbGVyLnByb3RvdHlwZS5vbkZvY3VzYWJsZUVsZW1lbnRCbHVyXyA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICB2YXIgZWxlbSA9IHRoaXMudmlldy5lbGVtZW50O1xuICAgICAgICB2YXIgbmV4dFRhcmdldCA9IERvbVV0aWwuZmluZE5leHRUYXJnZXQoZXYpO1xuICAgICAgICBpZiAobmV4dFRhcmdldCAmJiBlbGVtLmNvbnRhaW5zKG5leHRUYXJnZXQpKSB7XG4gICAgICAgICAgICAvLyBOZXh0IHRhcmdldCBpcyBpbiB0aGUgcGlja2VyXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5leHRUYXJnZXQgJiZcbiAgICAgICAgICAgIG5leHRUYXJnZXQgPT09IHRoaXMudHJpZ2dlckVsZW1lbnQgJiZcbiAgICAgICAgICAgICFEb21VdGlsLnN1cHBvcnRzVG91Y2goZWxlbS5vd25lckRvY3VtZW50KSkge1xuICAgICAgICAgICAgLy8gTmV4dCB0YXJnZXQgaXMgdGhlIHRyaWdnZXIgYnV0dG9uXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2xkYWJsZS5leHBhbmRlZCA9IGZhbHNlO1xuICAgIH07XG4gICAgQ29sb3JQaWNrZXJJbnB1dENvbnRyb2xsZXIucHJvdG90eXBlLm9uS2V5RG93bl8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgaWYgKGV2LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb2xvclBpY2tlcklucHV0Q29udHJvbGxlcjtcbn0oKSk7XG5leHBvcnRzLkNvbG9yUGlja2VySW5wdXRDb250cm9sbGVyID0gQ29sb3JQaWNrZXJJbnB1dENvbnRyb2xsZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L2NvbG9yLXN3YXRjaC10ZXh0LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvY29sb3Itc3dhdGNoLXRleHQudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvbG9yU3dhdGNoVGV4dElucHV0Q29udHJvbGxlciA9IHZvaWQgMDtcbnZhciBjb2xvcl9zd2F0Y2hfdGV4dF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vdmlldy9pbnB1dC9jb2xvci1zd2F0Y2gtdGV4dCAqLyBcIi4vc3JjL21haW4vanMvdmlldy9pbnB1dC9jb2xvci1zd2F0Y2gtdGV4dC50c1wiKTtcbnZhciBjb2xvcl9zd2F0Y2hfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2lucHV0L2NvbG9yLXN3YXRjaCAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9jb2xvci1zd2F0Y2gudHNcIik7XG52YXIgdGV4dF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90ZXh0ICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L3RleHQudHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIENvbG9yU3dhdGNoVGV4dElucHV0Q29udHJvbGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb2xvclN3YXRjaFRleHRJbnB1dENvbnRyb2xsZXIoZG9jdW1lbnQsIGNvbmZpZykge1xuICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICB0aGlzLnZpZXdNb2RlbCA9IGNvbmZpZy52aWV3TW9kZWw7XG4gICAgICAgIHRoaXMuc3dhdGNoSWNfID0gbmV3IGNvbG9yX3N3YXRjaF8xLkNvbG9yU3dhdGNoSW5wdXRDb250cm9sbGVyKGRvY3VtZW50LCB7XG4gICAgICAgICAgICBzdXBwb3J0c0FscGhhOiBjb25maWcuc3VwcG9ydHNBbHBoYSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgdmlld01vZGVsOiB0aGlzLnZpZXdNb2RlbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGV4dEljXyA9IG5ldyB0ZXh0XzEuVGV4dElucHV0Q29udHJvbGxlcihkb2N1bWVudCwge1xuICAgICAgICAgICAgZm9ybWF0dGVyOiBjb25maWcuZm9ybWF0dGVyLFxuICAgICAgICAgICAgcGFyc2VyOiBjb25maWcucGFyc2VyLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICB2aWV3TW9kZWw6IHRoaXMudmlld01vZGVsLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52aWV3ID0gbmV3IGNvbG9yX3N3YXRjaF90ZXh0XzEuQ29sb3JTd2F0Y2hUZXh0SW5wdXRWaWV3KGRvY3VtZW50LCB7XG4gICAgICAgICAgICBzd2F0Y2hJbnB1dFZpZXc6IHRoaXMuc3dhdGNoSWNfLnZpZXcsXG4gICAgICAgICAgICB0ZXh0SW5wdXRWaWV3OiB0aGlzLnRleHRJY18udmlldyxcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLnZpZXdNb2RlbCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBDb2xvclN3YXRjaFRleHRJbnB1dENvbnRyb2xsZXI7XG59KCkpO1xuZXhwb3J0cy5Db2xvclN3YXRjaFRleHRJbnB1dENvbnRyb2xsZXIgPSBDb2xvclN3YXRjaFRleHRJbnB1dENvbnRyb2xsZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L2NvbG9yLXN3YXRjaC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9jb2xvci1zd2F0Y2gudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db2xvclN3YXRjaElucHV0Q29udHJvbGxlciA9IHZvaWQgMDtcbnZhciB0eXBlX3V0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvdHlwZS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3R5cGUtdXRpbC50c1wiKTtcbnZhciBwaWNrZWRfY29sb3JfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21vZGVsL3BpY2tlZC1jb2xvciAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvcGlja2VkLWNvbG9yLnRzXCIpO1xudmFyIGNvbG9yX3N3YXRjaF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vdmlldy9pbnB1dC9jb2xvci1zd2F0Y2ggKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvY29sb3Itc3dhdGNoLnRzXCIpO1xudmFyIGNvbG9yX3BpY2tlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb2xvci1waWNrZXIgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvY29sb3ItcGlja2VyLnRzXCIpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBDb2xvclN3YXRjaElucHV0Q29udHJvbGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb2xvclN3YXRjaElucHV0Q29udHJvbGxlcihkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHRoaXMub25CdXR0b25CbHVyXyA9IHRoaXMub25CdXR0b25CbHVyXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uQnV0dG9uQ2xpY2tfID0gdGhpcy5vbkJ1dHRvbkNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICB0aGlzLnZpZXdNb2RlbCA9IGNvbmZpZy52aWV3TW9kZWw7XG4gICAgICAgIHRoaXMucGlja2VySWNfID0gbmV3IGNvbG9yX3BpY2tlcl8xLkNvbG9yUGlja2VySW5wdXRDb250cm9sbGVyKGRvY3VtZW50LCB7XG4gICAgICAgICAgICBwaWNrZWRDb2xvcjogbmV3IHBpY2tlZF9jb2xvcl8xLlBpY2tlZENvbG9yKHRoaXMudmFsdWUpLFxuICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogY29uZmlnLnN1cHBvcnRzQWxwaGEsXG4gICAgICAgICAgICB2aWV3TW9kZWw6IHRoaXMudmlld01vZGVsLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52aWV3ID0gbmV3IGNvbG9yX3N3YXRjaF8xLkNvbG9yU3dhdGNoSW5wdXRWaWV3KGRvY3VtZW50LCB7XG4gICAgICAgICAgICBtb2RlbDogdGhpcy52aWV3TW9kZWwsXG4gICAgICAgICAgICBwaWNrZXJJbnB1dFZpZXc6IHRoaXMucGlja2VySWNfLnZpZXcsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudmlldy5idXR0b25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLm9uQnV0dG9uQmx1cl8pO1xuICAgICAgICB0aGlzLnZpZXcuYnV0dG9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25CdXR0b25DbGlja18pO1xuICAgICAgICB0aGlzLnBpY2tlckljXy50cmlnZ2VyRWxlbWVudCA9IHRoaXMudmlldy5idXR0b25FbGVtZW50O1xuICAgIH1cbiAgICBDb2xvclN3YXRjaElucHV0Q29udHJvbGxlci5wcm90b3R5cGUub25CdXR0b25CbHVyXyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciBlbGVtID0gdGhpcy52aWV3LmVsZW1lbnQ7XG4gICAgICAgIHZhciBuZXh0VGFyZ2V0ID0gdHlwZV91dGlsXzEuVHlwZVV0aWwuZm9yY2VDYXN0KGUucmVsYXRlZFRhcmdldCk7XG4gICAgICAgIGlmICghbmV4dFRhcmdldCB8fCAhZWxlbS5jb250YWlucyhuZXh0VGFyZ2V0KSkge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJJY18uZm9sZGFibGUuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29sb3JTd2F0Y2hJbnB1dENvbnRyb2xsZXIucHJvdG90eXBlLm9uQnV0dG9uQ2xpY2tfID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnBpY2tlckljXy5mb2xkYWJsZS5leHBhbmRlZCA9ICF0aGlzLnBpY2tlckljXy5mb2xkYWJsZS5leHBhbmRlZDtcbiAgICAgICAgaWYgKHRoaXMucGlja2VySWNfLmZvbGRhYmxlLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLnBpY2tlckljXy52aWV3LmFsbEZvY3VzYWJsZUVsZW1lbnRzWzBdLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb2xvclN3YXRjaElucHV0Q29udHJvbGxlcjtcbn0oKSk7XG5leHBvcnRzLkNvbG9yU3dhdGNoSW5wdXRDb250cm9sbGVyID0gQ29sb3JTd2F0Y2hJbnB1dENvbnRyb2xsZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L2gtcGFsZXR0ZS50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9oLXBhbGV0dGUudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IUGFsZXR0ZUlucHV0Q29udHJvbGxlciA9IHZvaWQgMDtcbnZhciBudW1iZXJfdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy9udW1iZXItdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9udW1iZXItdXRpbC50c1wiKTtcbnZhciBwb2ludGVyX2hhbmRsZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvcG9pbnRlci1oYW5kbGVyICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3BvaW50ZXItaGFuZGxlci50c1wiKTtcbnZhciBjb2xvcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbW9kZWwvY29sb3IgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL2NvbG9yLnRzXCIpO1xudmFyIGhfcGFsZXR0ZV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vdmlldy9pbnB1dC9oLXBhbGV0dGUgKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvaC1wYWxldHRlLnRzXCIpO1xudmFyIFVpVXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3VpLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvdWktdXRpbC50c1wiKTtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgSFBhbGV0dGVJbnB1dENvbnRyb2xsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gSFBhbGV0dGVJbnB1dENvbnRyb2xsZXIoZG9jdW1lbnQsIGNvbmZpZykge1xuICAgICAgICB0aGlzLm9uS2V5RG93bl8gPSB0aGlzLm9uS2V5RG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duXyA9IHRoaXMub25Qb2ludGVyRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlXyA9IHRoaXMub25Qb2ludGVyTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblBvaW50ZXJVcF8gPSB0aGlzLm9uUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICB0aGlzLnZpZXdNb2RlbCA9IGNvbmZpZy52aWV3TW9kZWw7XG4gICAgICAgIHRoaXMudmlldyA9IG5ldyBoX3BhbGV0dGVfMS5IUGFsZXR0ZUlucHV0Vmlldyhkb2N1bWVudCwge1xuICAgICAgICAgICAgbW9kZWw6IHRoaXMudmlld01vZGVsLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnB0SGFuZGxlcl8gPSBuZXcgcG9pbnRlcl9oYW5kbGVyXzEuUG9pbnRlckhhbmRsZXIoZG9jdW1lbnQsIHRoaXMudmlldy5lbGVtZW50KTtcbiAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25fKTtcbiAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ21vdmUnLCB0aGlzLm9uUG9pbnRlck1vdmVfKTtcbiAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ3VwJywgdGhpcy5vblBvaW50ZXJVcF8pO1xuICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd25fKTtcbiAgICB9XG4gICAgSFBhbGV0dGVJbnB1dENvbnRyb2xsZXIucHJvdG90eXBlLmhhbmRsZVBvaW50ZXJFdmVudF8gPSBmdW5jdGlvbiAoZCkge1xuICAgICAgICB2YXIgaHVlID0gbnVtYmVyX3V0aWxfMS5OdW1iZXJVdGlsLm1hcChkLnB4LCAwLCAxLCAwLCAzNjApO1xuICAgICAgICB2YXIgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgIHZhciBfYSA9IGMuZ2V0Q29tcG9uZW50cygnaHN2JyksIHMgPSBfYVsxXSwgdiA9IF9hWzJdLCBhID0gX2FbM107XG4gICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUgPSBuZXcgY29sb3JfMS5Db2xvcihbaHVlLCBzLCB2LCBhXSwgJ2hzdicpO1xuICAgICAgICB0aGlzLnZpZXcudXBkYXRlKCk7XG4gICAgfTtcbiAgICBIUGFsZXR0ZUlucHV0Q29udHJvbGxlci5wcm90b3R5cGUub25Qb2ludGVyRG93bl8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEpO1xuICAgIH07XG4gICAgSFBhbGV0dGVJbnB1dENvbnRyb2xsZXIucHJvdG90eXBlLm9uUG9pbnRlck1vdmVfID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhKTtcbiAgICB9O1xuICAgIEhQYWxldHRlSW5wdXRDb250cm9sbGVyLnByb3RvdHlwZS5vblBvaW50ZXJVcF8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEpO1xuICAgIH07XG4gICAgSFBhbGV0dGVJbnB1dENvbnRyb2xsZXIucHJvdG90eXBlLm9uS2V5RG93bl8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgdmFyIHN0ZXAgPSBVaVV0aWwuZ2V0U3RlcEZvcktleShVaVV0aWwuZ2V0QmFzZVN0ZXBGb3JDb2xvcihmYWxzZSksIFVpVXRpbC5nZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgdmFyIGMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICB2YXIgX2EgPSBjLmdldENvbXBvbmVudHMoJ2hzdicpLCBoID0gX2FbMF0sIHMgPSBfYVsxXSwgdiA9IF9hWzJdLCBhID0gX2FbM107XG4gICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUgPSBuZXcgY29sb3JfMS5Db2xvcihbaCArIHN0ZXAsIHMsIHYsIGFdLCAnaHN2Jyk7XG4gICAgfTtcbiAgICByZXR1cm4gSFBhbGV0dGVJbnB1dENvbnRyb2xsZXI7XG59KCkpO1xuZXhwb3J0cy5IUGFsZXR0ZUlucHV0Q29udHJvbGxlciA9IEhQYWxldHRlSW5wdXRDb250cm9sbGVyO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9saXN0LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9saXN0LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxpc3RJbnB1dENvbnRyb2xsZXIgPSB2b2lkIDA7XG52YXIgbGlzdF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vY29uc3RyYWludC9saXN0ICovIFwiLi9zcmMvbWFpbi9qcy9jb25zdHJhaW50L2xpc3QudHNcIik7XG52YXIgdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vY29uc3RyYWludC91dGlsICovIFwiLi9zcmMvbWFpbi9qcy9jb25zdHJhaW50L3V0aWwudHNcIik7XG52YXIgdHlwZV91dGlsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL3R5cGUtdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy90eXBlLXV0aWwudHNcIik7XG52YXIgbGlzdF8yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vdmlldy9pbnB1dC9saXN0ICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L2lucHV0L2xpc3QudHNcIik7XG5mdW5jdGlvbiBmaW5kTGlzdEl0ZW1zKHZhbHVlKSB7XG4gICAgdmFyIGMgPSB2YWx1ZS5jb25zdHJhaW50XG4gICAgICAgID8gdXRpbF8xLkNvbnN0cmFpbnRVdGlsLmZpbmRDb25zdHJhaW50KHZhbHVlLmNvbnN0cmFpbnQsIGxpc3RfMS5MaXN0Q29uc3RyYWludClcbiAgICAgICAgOiBudWxsO1xuICAgIGlmICghYykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGMub3B0aW9ucztcbn1cbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgTGlzdElucHV0Q29udHJvbGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBMaXN0SW5wdXRDb250cm9sbGVyKGRvY3VtZW50LCBjb25maWcpIHtcbiAgICAgICAgdGhpcy5vblNlbGVjdENoYW5nZV8gPSB0aGlzLm9uU2VsZWN0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnZhbHVlXyA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgdGhpcy5saXN0SXRlbXNfID0gZmluZExpc3RJdGVtcyh0aGlzLnZhbHVlXykgfHwgW107XG4gICAgICAgIHRoaXMudmlld01vZGVsID0gY29uZmlnLnZpZXdNb2RlbDtcbiAgICAgICAgdGhpcy52aWV3XyA9IG5ldyBsaXN0XzIuTGlzdElucHV0Vmlldyhkb2N1bWVudCwge1xuICAgICAgICAgICAgbW9kZWw6IHRoaXMudmlld01vZGVsLFxuICAgICAgICAgICAgb3B0aW9uczogdGhpcy5saXN0SXRlbXNfLFxuICAgICAgICAgICAgc3RyaW5naWZ5VmFsdWU6IGNvbmZpZy5zdHJpbmdpZnlWYWx1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlXyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudmlld18uc2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uU2VsZWN0Q2hhbmdlXyk7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaXN0SW5wdXRDb250cm9sbGVyLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVfO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExpc3RJbnB1dENvbnRyb2xsZXIucHJvdG90eXBlLCBcInZpZXdcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpZXdfO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgTGlzdElucHV0Q29udHJvbGxlci5wcm90b3R5cGUub25TZWxlY3RDaGFuZ2VfID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIHNlbGVjdEVsZW0gPSB0eXBlX3V0aWxfMS5UeXBlVXRpbC5mb3JjZUNhc3QoZS5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgdmFyIG9wdEVsZW0gPSBzZWxlY3RFbGVtLnNlbGVjdGVkT3B0aW9ucy5pdGVtKDApO1xuICAgICAgICBpZiAoIW9wdEVsZW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaXRlbUluZGV4ID0gTnVtYmVyKG9wdEVsZW0uZGF0YXNldC5pbmRleCk7XG4gICAgICAgIHRoaXMudmFsdWVfLnJhd1ZhbHVlID0gdGhpcy5saXN0SXRlbXNfW2l0ZW1JbmRleF0udmFsdWU7XG4gICAgICAgIHRoaXMudmlld18udXBkYXRlKCk7XG4gICAgfTtcbiAgICByZXR1cm4gTGlzdElucHV0Q29udHJvbGxlcjtcbn0oKSk7XG5leHBvcnRzLkxpc3RJbnB1dENvbnRyb2xsZXIgPSBMaXN0SW5wdXRDb250cm9sbGVyO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9udW1iZXItdGV4dC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L251bWJlci10ZXh0LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk51bWJlclRleHRJbnB1dENvbnRyb2xsZXIgPSB2b2lkIDA7XG52YXIgdHlwZV91dGlsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL3R5cGUtdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy90eXBlLXV0aWwudHNcIik7XG52YXIgVWlVdGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdWktdXRpbCAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci91aS11dGlsLnRzXCIpO1xudmFyIHRleHRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdGV4dCAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC90ZXh0LnRzXCIpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBOdW1iZXJUZXh0SW5wdXRDb250cm9sbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhOdW1iZXJUZXh0SW5wdXRDb250cm9sbGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE51bWJlclRleHRJbnB1dENvbnRyb2xsZXIoZG9jdW1lbnQsIGNvbmZpZykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkb2N1bWVudCwgY29uZmlnKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vbklucHV0S2V5RG93bl8gPSBfdGhpcy5vbklucHV0S2V5RG93bl8uYmluZChfdGhpcyk7XG4gICAgICAgIF90aGlzLnN0ZXBfID0gdHlwZV91dGlsXzEuVHlwZVV0aWwuZ2V0T3JEZWZhdWx0KGNvbmZpZy5zdGVwLCBVaVV0aWwuZ2V0U3RlcEZvclRleHRJbnB1dChfdGhpcy52YWx1ZS5jb25zdHJhaW50KSk7XG4gICAgICAgIF90aGlzLnZpZXcuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBfdGhpcy5vbklucHV0S2V5RG93bl8pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE51bWJlclRleHRJbnB1dENvbnRyb2xsZXIucHJvdG90eXBlLm9uSW5wdXRLZXlEb3duXyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciBzdGVwID0gVWlVdGlsLmdldFN0ZXBGb3JLZXkodGhpcy5zdGVwXywgVWlVdGlsLmdldFZlcnRpY2FsU3RlcEtleXMoZSkpO1xuICAgICAgICBpZiAoc3RlcCAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSArPSBzdGVwO1xuICAgICAgICAgICAgdGhpcy52aWV3LnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gTnVtYmVyVGV4dElucHV0Q29udHJvbGxlcjtcbn0odGV4dF8xLlRleHRJbnB1dENvbnRyb2xsZXIpKTtcbmV4cG9ydHMuTnVtYmVyVGV4dElucHV0Q29udHJvbGxlciA9IE51bWJlclRleHRJbnB1dENvbnRyb2xsZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L3BvaW50LTJkLXBhZC10ZXh0LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvcG9pbnQtMmQtcGFkLXRleHQudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBvaW50MmRQYWRUZXh0SW5wdXRDb250cm9sbGVyID0gdm9pZCAwO1xudmFyIHR5cGVfdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy90eXBlLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvdHlwZS11dGlsLnRzXCIpO1xudmFyIHBvaW50XzJkX3BhZF90ZXh0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi92aWV3L2lucHV0L3BvaW50LTJkLXBhZC10ZXh0ICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L2lucHV0L3BvaW50LTJkLXBhZC10ZXh0LnRzXCIpO1xudmFyIHBvaW50XzJkX3BhZF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9wb2ludC0yZC1wYWQgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvcG9pbnQtMmQtcGFkLnRzXCIpO1xudmFyIHBvaW50XzJkX3RleHRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vcG9pbnQtMmQtdGV4dCAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9wb2ludC0yZC10ZXh0LnRzXCIpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBQb2ludDJkUGFkVGV4dElucHV0Q29udHJvbGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQb2ludDJkUGFkVGV4dElucHV0Q29udHJvbGxlcihkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHRoaXMub25QYWRCdXR0b25CbHVyXyA9IHRoaXMub25QYWRCdXR0b25CbHVyXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uUGFkQnV0dG9uQ2xpY2tfID0gdGhpcy5vblBhZEJ1dHRvbkNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICB0aGlzLnZpZXdNb2RlbCA9IGNvbmZpZy52aWV3TW9kZWw7XG4gICAgICAgIHRoaXMucGFkSWNfID0gbmV3IHBvaW50XzJkX3BhZF8xLlBvaW50MmRQYWRJbnB1dENvbnRyb2xsZXIoZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIGludmVydHNZOiBjb25maWcuaW52ZXJ0c1ksXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgIHZpZXdNb2RlbDogdGhpcy52aWV3TW9kZWwsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRleHRJY18gPSBuZXcgcG9pbnRfMmRfdGV4dF8xLlBvaW50MmRUZXh0SW5wdXRDb250cm9sbGVyKGRvY3VtZW50LCB7XG4gICAgICAgICAgICBwYXJzZXI6IGNvbmZpZy5wYXJzZXIsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgIHZpZXdNb2RlbDogdGhpcy52aWV3TW9kZWwsXG4gICAgICAgICAgICB4Rm9ybWF0dGVyOiBjb25maWcueEZvcm1hdHRlcixcbiAgICAgICAgICAgIHlGb3JtYXR0ZXI6IGNvbmZpZy55Rm9ybWF0dGVyLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52aWV3ID0gbmV3IHBvaW50XzJkX3BhZF90ZXh0XzEuUG9pbnQyZFBhZFRleHRJbnB1dFZpZXcoZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLnZpZXdNb2RlbCxcbiAgICAgICAgICAgIHBhZElucHV0VmlldzogdGhpcy5wYWRJY18udmlldyxcbiAgICAgICAgICAgIHRleHRJbnB1dFZpZXc6IHRoaXMudGV4dEljXy52aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52aWV3LnBhZEJ1dHRvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMub25QYWRCdXR0b25CbHVyXyk7XG4gICAgICAgIHRoaXMudmlldy5wYWRCdXR0b25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vblBhZEJ1dHRvbkNsaWNrXyk7XG4gICAgICAgIHRoaXMucGFkSWNfLnRyaWdnZXJFbGVtZW50ID0gdGhpcy52aWV3LnBhZEJ1dHRvbkVsZW1lbnQ7XG4gICAgfVxuICAgIFBvaW50MmRQYWRUZXh0SW5wdXRDb250cm9sbGVyLnByb3RvdHlwZS5vblBhZEJ1dHRvbkJsdXJfID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIGVsZW0gPSB0aGlzLnZpZXcuZWxlbWVudDtcbiAgICAgICAgdmFyIG5leHRUYXJnZXQgPSB0eXBlX3V0aWxfMS5UeXBlVXRpbC5mb3JjZUNhc3QoZS5yZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgaWYgKCFuZXh0VGFyZ2V0IHx8ICFlbGVtLmNvbnRhaW5zKG5leHRUYXJnZXQpKSB7XG4gICAgICAgICAgICB0aGlzLnBhZEljXy5mb2xkYWJsZS5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBQb2ludDJkUGFkVGV4dElucHV0Q29udHJvbGxlci5wcm90b3R5cGUub25QYWRCdXR0b25DbGlja18gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucGFkSWNfLmZvbGRhYmxlLmV4cGFuZGVkID0gIXRoaXMucGFkSWNfLmZvbGRhYmxlLmV4cGFuZGVkO1xuICAgICAgICBpZiAodGhpcy5wYWRJY18uZm9sZGFibGUuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMucGFkSWNfLnZpZXcuYWxsRm9jdXNhYmxlRWxlbWVudHNbMF0uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFBvaW50MmRQYWRUZXh0SW5wdXRDb250cm9sbGVyO1xufSgpKTtcbmV4cG9ydHMuUG9pbnQyZFBhZFRleHRJbnB1dENvbnRyb2xsZXIgPSBQb2ludDJkUGFkVGV4dElucHV0Q29udHJvbGxlcjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvcG9pbnQtMmQtcGFkLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L3BvaW50LTJkLXBhZC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBvaW50MmRQYWRJbnB1dENvbnRyb2xsZXIgPSB2b2lkIDA7XG52YXIgcG9pbnRfMmRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2NvbnN0cmFpbnQvcG9pbnQtMmQgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvcG9pbnQtMmQudHNcIik7XG52YXIgRG9tVXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvZG9tLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvZG9tLXV0aWwudHNcIik7XG52YXIgbnVtYmVyX3V0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvbnVtYmVyLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvbnVtYmVyLXV0aWwudHNcIik7XG52YXIgcG9pbnRlcl9oYW5kbGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL3BvaW50ZXItaGFuZGxlciAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9wb2ludGVyLWhhbmRsZXIudHNcIik7XG52YXIgZm9sZGFibGVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21vZGVsL2ZvbGRhYmxlICovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC9mb2xkYWJsZS50c1wiKTtcbnZhciBwb2ludF8yZF8yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbW9kZWwvcG9pbnQtMmQgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL3BvaW50LTJkLnRzXCIpO1xudmFyIHBvaW50XzJkX3BhZF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vdmlldy9pbnB1dC9wb2ludC0yZC1wYWQgKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvcG9pbnQtMmQtcGFkLnRzXCIpO1xudmFyIFVpVXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3VpLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvdWktdXRpbC50c1wiKTtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgUG9pbnQyZFBhZElucHV0Q29udHJvbGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQb2ludDJkUGFkSW5wdXRDb250cm9sbGVyKGRvY3VtZW50LCBjb25maWcpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy50cmlnZ2VyRWxlbWVudCA9IG51bGw7XG4gICAgICAgIHRoaXMub25Gb2N1c2FibGVFbGVtZW50Qmx1cl8gPSB0aGlzLm9uRm9jdXNhYmxlRWxlbWVudEJsdXJfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25LZXlEb3duXyA9IHRoaXMub25LZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uUGFkS2V5RG93bl8gPSB0aGlzLm9uUGFkS2V5RG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duXyA9IHRoaXMub25Qb2ludGVyRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlXyA9IHRoaXMub25Qb2ludGVyTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblBvaW50ZXJVcF8gPSB0aGlzLm9uUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICB0aGlzLmZvbGRhYmxlID0gbmV3IGZvbGRhYmxlXzEuRm9sZGFibGUoKTtcbiAgICAgICAgdGhpcy5tYXhWYWx1ZV8gPSBVaVV0aWwuZ2V0U3VpdGFibGVNYXhWYWx1ZUZvclBvaW50MmRQYWQodGhpcy52YWx1ZS5jb25zdHJhaW50LCB0aGlzLnZhbHVlLnJhd1ZhbHVlKTtcbiAgICAgICAgdGhpcy5pbnZlcnRzWV8gPSBjb25maWcuaW52ZXJ0c1k7XG4gICAgICAgIHZhciBjID0gdGhpcy52YWx1ZS5jb25zdHJhaW50O1xuICAgICAgICB0aGlzLnhTdGVwXyA9IFVpVXRpbC5nZXRTdGVwRm9yVGV4dElucHV0KGMgaW5zdGFuY2VvZiBwb2ludF8yZF8xLlBvaW50MmRDb25zdHJhaW50ID8gYy54Q29uc3RyYWludCA6IHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMueVN0ZXBfID0gVWlVdGlsLmdldFN0ZXBGb3JUZXh0SW5wdXQoYyBpbnN0YW5jZW9mIHBvaW50XzJkXzEuUG9pbnQyZENvbnN0cmFpbnQgPyBjLnlDb25zdHJhaW50IDogdW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy52aWV3TW9kZWwgPSBjb25maWcudmlld01vZGVsO1xuICAgICAgICB0aGlzLnZpZXcgPSBuZXcgcG9pbnRfMmRfcGFkXzEuUG9pbnQyZFBhZElucHV0Vmlldyhkb2N1bWVudCwge1xuICAgICAgICAgICAgZm9sZGFibGU6IHRoaXMuZm9sZGFibGUsXG4gICAgICAgICAgICBpbnZlcnRzWTogdGhpcy5pbnZlcnRzWV8sXG4gICAgICAgICAgICBtYXhWYWx1ZTogdGhpcy5tYXhWYWx1ZV8sXG4gICAgICAgICAgICBtb2RlbDogdGhpcy52aWV3TW9kZWwsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucHRIYW5kbGVyXyA9IG5ldyBwb2ludGVyX2hhbmRsZXJfMS5Qb2ludGVySGFuZGxlcihkb2N1bWVudCwgdGhpcy52aWV3LnBhZEVsZW1lbnQpO1xuICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignZG93bicsIHRoaXMub25Qb2ludGVyRG93bl8pO1xuICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignbW92ZScsIHRoaXMub25Qb2ludGVyTW92ZV8pO1xuICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgIHRoaXMudmlldy5wYWRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uUGFkS2V5RG93bl8pO1xuICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd25fKTtcbiAgICAgICAgdGhpcy52aWV3LmFsbEZvY3VzYWJsZUVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKGVsZW0pIHtcbiAgICAgICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIF90aGlzLm9uRm9jdXNhYmxlRWxlbWVudEJsdXJfKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIFBvaW50MmRQYWRJbnB1dENvbnRyb2xsZXIucHJvdG90eXBlLmhhbmRsZVBvaW50ZXJFdmVudF8gPSBmdW5jdGlvbiAoZCkge1xuICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXhWYWx1ZV87XG4gICAgICAgIHZhciBweCA9IG51bWJlcl91dGlsXzEuTnVtYmVyVXRpbC5tYXAoZC5weCwgMCwgMSwgLW1heCwgK21heCk7XG4gICAgICAgIHZhciBweSA9IG51bWJlcl91dGlsXzEuTnVtYmVyVXRpbC5tYXAodGhpcy5pbnZlcnRzWV8gPyAxIC0gZC5weSA6IGQucHksIDAsIDEsIC1tYXgsICttYXgpO1xuICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gbmV3IHBvaW50XzJkXzIuUG9pbnQyZChweCwgcHkpO1xuICAgICAgICB0aGlzLnZpZXcudXBkYXRlKCk7XG4gICAgfTtcbiAgICBQb2ludDJkUGFkSW5wdXRDb250cm9sbGVyLnByb3RvdHlwZS5vblBvaW50ZXJEb3duXyA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSk7XG4gICAgfTtcbiAgICBQb2ludDJkUGFkSW5wdXRDb250cm9sbGVyLnByb3RvdHlwZS5vblBvaW50ZXJNb3ZlXyA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSk7XG4gICAgfTtcbiAgICBQb2ludDJkUGFkSW5wdXRDb250cm9sbGVyLnByb3RvdHlwZS5vblBvaW50ZXJVcF8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEpO1xuICAgIH07XG4gICAgUG9pbnQyZFBhZElucHV0Q29udHJvbGxlci5wcm90b3R5cGUub25QYWRLZXlEb3duXyA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICBpZiAoVWlVdGlsLmlzQXJyb3dLZXkoZXYua2V5Q29kZSkpIHtcbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IG5ldyBwb2ludF8yZF8yLlBvaW50MmQodGhpcy52YWx1ZS5yYXdWYWx1ZS54ICtcbiAgICAgICAgICAgIFVpVXRpbC5nZXRTdGVwRm9yS2V5KHRoaXMueFN0ZXBfLCBVaVV0aWwuZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzKGV2KSksIHRoaXMudmFsdWUucmF3VmFsdWUueSArXG4gICAgICAgICAgICBVaVV0aWwuZ2V0U3RlcEZvcktleSh0aGlzLnlTdGVwXywgVWlVdGlsLmdldFZlcnRpY2FsU3RlcEtleXMoZXYpKSAqXG4gICAgICAgICAgICAgICAgKHRoaXMuaW52ZXJ0c1lfID8gMSA6IC0xKSk7XG4gICAgfTtcbiAgICBQb2ludDJkUGFkSW5wdXRDb250cm9sbGVyLnByb3RvdHlwZS5vbkZvY3VzYWJsZUVsZW1lbnRCbHVyXyA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICB2YXIgZWxlbSA9IHRoaXMudmlldy5lbGVtZW50O1xuICAgICAgICB2YXIgbmV4dFRhcmdldCA9IERvbVV0aWwuZmluZE5leHRUYXJnZXQoZXYpO1xuICAgICAgICBpZiAobmV4dFRhcmdldCAmJiBlbGVtLmNvbnRhaW5zKG5leHRUYXJnZXQpKSB7XG4gICAgICAgICAgICAvLyBOZXh0IHRhcmdldCBpcyBpbiB0aGUgcGlja2VyXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5leHRUYXJnZXQgJiZcbiAgICAgICAgICAgIG5leHRUYXJnZXQgPT09IHRoaXMudHJpZ2dlckVsZW1lbnQgJiZcbiAgICAgICAgICAgICFEb21VdGlsLnN1cHBvcnRzVG91Y2goZWxlbS5vd25lckRvY3VtZW50KSkge1xuICAgICAgICAgICAgLy8gTmV4dCB0YXJnZXQgaXMgdGhlIHRyaWdnZXIgYnV0dG9uXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2xkYWJsZS5leHBhbmRlZCA9IGZhbHNlO1xuICAgIH07XG4gICAgUG9pbnQyZFBhZElucHV0Q29udHJvbGxlci5wcm90b3R5cGUub25LZXlEb3duXyA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICBpZiAoZXYua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGUuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFBvaW50MmRQYWRJbnB1dENvbnRyb2xsZXI7XG59KCkpO1xuZXhwb3J0cy5Qb2ludDJkUGFkSW5wdXRDb250cm9sbGVyID0gUG9pbnQyZFBhZElucHV0Q29udHJvbGxlcjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvcG9pbnQtMmQtdGV4dC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvcG9pbnQtMmQtdGV4dC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Qb2ludDJkVGV4dElucHV0Q29udHJvbGxlciA9IHZvaWQgMDtcbnZhciBwb2ludF8yZF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vY29uc3RyYWludC9wb2ludC0yZCAqLyBcIi4vc3JjL21haW4vanMvY29uc3RyYWludC9wb2ludC0yZC50c1wiKTtcbnZhciB0eXBlX3V0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvdHlwZS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3R5cGUtdXRpbC50c1wiKTtcbnZhciBwb2ludF8yZF8yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbW9kZWwvcG9pbnQtMmQgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL3BvaW50LTJkLnRzXCIpO1xudmFyIHBvaW50XzJkX3RleHRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3ZpZXcvaW5wdXQvcG9pbnQtMmQtdGV4dCAqLyBcIi4vc3JjL21haW4vanMvdmlldy9pbnB1dC9wb2ludC0yZC10ZXh0LnRzXCIpO1xudmFyIFVpVXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3VpLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvdWktdXRpbC50c1wiKTtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgUG9pbnQyZFRleHRJbnB1dENvbnRyb2xsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUG9pbnQyZFRleHRJbnB1dENvbnRyb2xsZXIoZG9jdW1lbnQsIGNvbmZpZykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2VfID0gdGhpcy5vbklucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uSW5wdXRLZXlEb3duXyA9IHRoaXMub25JbnB1dEtleURvd25fLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucGFyc2VyXyA9IGNvbmZpZy5wYXJzZXI7XG4gICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgIHZhciBjID0gdGhpcy52YWx1ZS5jb25zdHJhaW50O1xuICAgICAgICB0aGlzLnhTdGVwXyA9IFVpVXRpbC5nZXRTdGVwRm9yVGV4dElucHV0KGMgaW5zdGFuY2VvZiBwb2ludF8yZF8xLlBvaW50MmRDb25zdHJhaW50ID8gYy54Q29uc3RyYWludCA6IHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMueVN0ZXBfID0gVWlVdGlsLmdldFN0ZXBGb3JUZXh0SW5wdXQoYyBpbnN0YW5jZW9mIHBvaW50XzJkXzEuUG9pbnQyZENvbnN0cmFpbnQgPyBjLnlDb25zdHJhaW50IDogdW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy52aWV3TW9kZWwgPSBjb25maWcudmlld01vZGVsO1xuICAgICAgICB0aGlzLnZpZXcgPSBuZXcgcG9pbnRfMmRfdGV4dF8xLlBvaW50MmRUZXh0SW5wdXRWaWV3KGRvY3VtZW50LCB7XG4gICAgICAgICAgICBtb2RlbDogdGhpcy52aWV3TW9kZWwsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgIHhGb3JtYXR0ZXI6IGNvbmZpZy54Rm9ybWF0dGVyLFxuICAgICAgICAgICAgeUZvcm1hdHRlcjogY29uZmlnLnlGb3JtYXR0ZXIsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnZpZXcuaW5wdXRFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChpbnB1dEVsZW0pIHtcbiAgICAgICAgICAgIGlucHV0RWxlbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBfdGhpcy5vbklucHV0Q2hhbmdlXyk7XG4gICAgICAgICAgICBpbnB1dEVsZW0uYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIF90aGlzLm9uSW5wdXRLZXlEb3duXyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBQb2ludDJkVGV4dElucHV0Q29udHJvbGxlci5wcm90b3R5cGUuZmluZEluZGV4T2ZJbnB1dEVsZW1fID0gZnVuY3Rpb24gKGlucHV0RWxlbSkge1xuICAgICAgICB2YXIgaW5wdXRFbGVtcyA9IHRoaXMudmlldy5pbnB1dEVsZW1lbnRzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0RWxlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpbnB1dEVsZW1zW2ldID09PSBpbnB1dEVsZW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIFBvaW50MmRUZXh0SW5wdXRDb250cm9sbGVyLnByb3RvdHlwZS51cGRhdGVDb21wb25lbnRfID0gZnVuY3Rpb24gKGluZGV4LCBuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgY29tcHMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlLmdldENvbXBvbmVudHMoKTtcbiAgICAgICAgdmFyIG5ld0NvbXBzID0gY29tcHMubWFwKGZ1bmN0aW9uIChjb21wLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gaSA9PT0gaW5kZXggPyBuZXdWYWx1ZSA6IGNvbXA7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gbmV3IHBvaW50XzJkXzIuUG9pbnQyZChuZXdDb21wc1swXSwgbmV3Q29tcHNbMV0pO1xuICAgICAgICB0aGlzLnZpZXcudXBkYXRlKCk7XG4gICAgfTtcbiAgICBQb2ludDJkVGV4dElucHV0Q29udHJvbGxlci5wcm90b3R5cGUub25JbnB1dENoYW5nZV8gPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgaW5wdXRFbGVtID0gdHlwZV91dGlsXzEuVHlwZVV0aWwuZm9yY2VDYXN0KGUuY3VycmVudFRhcmdldCk7XG4gICAgICAgIHZhciBwYXJzZWRWYWx1ZSA9IHRoaXMucGFyc2VyXyhpbnB1dEVsZW0udmFsdWUpO1xuICAgICAgICBpZiAodHlwZV91dGlsXzEuVHlwZVV0aWwuaXNFbXB0eShwYXJzZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcEluZGV4ID0gdGhpcy5maW5kSW5kZXhPZklucHV0RWxlbV8oaW5wdXRFbGVtKTtcbiAgICAgICAgaWYgKHR5cGVfdXRpbF8xLlR5cGVVdGlsLmlzRW1wdHkoY29tcEluZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50Xyhjb21wSW5kZXgsIHBhcnNlZFZhbHVlKTtcbiAgICB9O1xuICAgIFBvaW50MmRUZXh0SW5wdXRDb250cm9sbGVyLnByb3RvdHlwZS5vbklucHV0S2V5RG93bl8gPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgaW5wdXRFbGVtID0gdHlwZV91dGlsXzEuVHlwZVV0aWwuZm9yY2VDYXN0KGUuY3VycmVudFRhcmdldCk7XG4gICAgICAgIHZhciBwYXJzZWRWYWx1ZSA9IHRoaXMucGFyc2VyXyhpbnB1dEVsZW0udmFsdWUpO1xuICAgICAgICBpZiAodHlwZV91dGlsXzEuVHlwZVV0aWwuaXNFbXB0eShwYXJzZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcEluZGV4ID0gdGhpcy5maW5kSW5kZXhPZklucHV0RWxlbV8oaW5wdXRFbGVtKTtcbiAgICAgICAgaWYgKHR5cGVfdXRpbF8xLlR5cGVVdGlsLmlzRW1wdHkoY29tcEluZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdGVwID0gVWlVdGlsLmdldFN0ZXBGb3JLZXkoY29tcEluZGV4ID09PSAwID8gdGhpcy54U3RlcF8gOiB0aGlzLnlTdGVwXywgVWlVdGlsLmdldFZlcnRpY2FsU3RlcEtleXMoZSkpO1xuICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50Xyhjb21wSW5kZXgsIHBhcnNlZFZhbHVlICsgc3RlcCk7XG4gICAgfTtcbiAgICByZXR1cm4gUG9pbnQyZFRleHRJbnB1dENvbnRyb2xsZXI7XG59KCkpO1xuZXhwb3J0cy5Qb2ludDJkVGV4dElucHV0Q29udHJvbGxlciA9IFBvaW50MmRUZXh0SW5wdXRDb250cm9sbGVyO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9zbGlkZXItdGV4dC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L3NsaWRlci10ZXh0LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TbGlkZXJUZXh0SW5wdXRDb250cm9sbGVyID0gdm9pZCAwO1xudmFyIHNsaWRlcl90ZXh0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi92aWV3L2lucHV0L3NsaWRlci10ZXh0ICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L2lucHV0L3NsaWRlci10ZXh0LnRzXCIpO1xudmFyIG51bWJlcl90ZXh0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL251bWJlci10ZXh0ICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L251bWJlci10ZXh0LnRzXCIpO1xudmFyIHNsaWRlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9zbGlkZXIgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQvc2xpZGVyLnRzXCIpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBTbGlkZXJUZXh0SW5wdXRDb250cm9sbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNsaWRlclRleHRJbnB1dENvbnRyb2xsZXIoZG9jdW1lbnQsIGNvbmZpZykge1xuICAgICAgICB0aGlzLnZhbHVlXyA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgdGhpcy52aWV3TW9kZWwgPSBjb25maWcudmlld01vZGVsO1xuICAgICAgICB0aGlzLnNsaWRlckljXyA9IG5ldyBzbGlkZXJfMS5TbGlkZXJJbnB1dENvbnRyb2xsZXIoZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIHZhbHVlOiBjb25maWcudmFsdWUsXG4gICAgICAgICAgICB2aWV3TW9kZWw6IHRoaXMudmlld01vZGVsLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50ZXh0SWNfID0gbmV3IG51bWJlcl90ZXh0XzEuTnVtYmVyVGV4dElucHV0Q29udHJvbGxlcihkb2N1bWVudCwge1xuICAgICAgICAgICAgZm9ybWF0dGVyOiBjb25maWcuZm9ybWF0dGVyLFxuICAgICAgICAgICAgcGFyc2VyOiBjb25maWcucGFyc2VyLFxuICAgICAgICAgICAgdmFsdWU6IGNvbmZpZy52YWx1ZSxcbiAgICAgICAgICAgIHZpZXdNb2RlbDogdGhpcy52aWV3TW9kZWwsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnZpZXdfID0gbmV3IHNsaWRlcl90ZXh0XzEuU2xpZGVyVGV4dElucHV0Vmlldyhkb2N1bWVudCwge1xuICAgICAgICAgICAgbW9kZWw6IHRoaXMudmlld01vZGVsLFxuICAgICAgICAgICAgc2xpZGVySW5wdXRWaWV3OiB0aGlzLnNsaWRlckljXy52aWV3LFxuICAgICAgICAgICAgdGV4dElucHV0VmlldzogdGhpcy50ZXh0SWNfLnZpZXcsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2xpZGVyVGV4dElucHV0Q29udHJvbGxlci5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlXztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTbGlkZXJUZXh0SW5wdXRDb250cm9sbGVyLnByb3RvdHlwZSwgXCJ2aWV3XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aWV3XztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBTbGlkZXJUZXh0SW5wdXRDb250cm9sbGVyO1xufSgpKTtcbmV4cG9ydHMuU2xpZGVyVGV4dElucHV0Q29udHJvbGxlciA9IFNsaWRlclRleHRJbnB1dENvbnRyb2xsZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L3NsaWRlci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9zbGlkZXIudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TbGlkZXJJbnB1dENvbnRyb2xsZXIgPSB2b2lkIDA7XG52YXIgcmFuZ2VfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2NvbnN0cmFpbnQvcmFuZ2UgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvcmFuZ2UudHNcIik7XG52YXIgdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vY29uc3RyYWludC91dGlsICovIFwiLi9zcmMvbWFpbi9qcy9jb25zdHJhaW50L3V0aWwudHNcIik7XG52YXIgbnVtYmVyX3V0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvbnVtYmVyLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvbnVtYmVyLXV0aWwudHNcIik7XG52YXIgcG9pbnRlcl9oYW5kbGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL3BvaW50ZXItaGFuZGxlciAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9wb2ludGVyLWhhbmRsZXIudHNcIik7XG52YXIgdHlwZV91dGlsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL3R5cGUtdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy90eXBlLXV0aWwudHNcIik7XG52YXIgc2xpZGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi92aWV3L2lucHV0L3NsaWRlciAqLyBcIi4vc3JjL21haW4vanMvdmlldy9pbnB1dC9zbGlkZXIudHNcIik7XG52YXIgVWlVdGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdWktdXRpbCAqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci91aS11dGlsLnRzXCIpO1xuZnVuY3Rpb24gZmluZFJhbmdlKHZhbHVlKSB7XG4gICAgdmFyIGMgPSB2YWx1ZS5jb25zdHJhaW50XG4gICAgICAgID8gdXRpbF8xLkNvbnN0cmFpbnRVdGlsLmZpbmRDb25zdHJhaW50KHZhbHVlLmNvbnN0cmFpbnQsIHJhbmdlXzEuUmFuZ2VDb25zdHJhaW50KVxuICAgICAgICA6IG51bGw7XG4gICAgaWYgKCFjKSB7XG4gICAgICAgIHJldHVybiBbdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cbiAgICByZXR1cm4gW2MubWluVmFsdWUsIGMubWF4VmFsdWVdO1xufVxuZnVuY3Rpb24gZXN0aW1hdGVTdWl0YWJsZVJhbmdlKHZhbHVlKSB7XG4gICAgdmFyIF9hID0gZmluZFJhbmdlKHZhbHVlKSwgbWluID0gX2FbMF0sIG1heCA9IF9hWzFdO1xuICAgIHJldHVybiBbXG4gICAgICAgIHR5cGVfdXRpbF8xLlR5cGVVdGlsLmdldE9yRGVmYXVsdChtaW4sIDApLFxuICAgICAgICB0eXBlX3V0aWxfMS5UeXBlVXRpbC5nZXRPckRlZmF1bHQobWF4LCAxMDApLFxuICAgIF07XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIFNsaWRlcklucHV0Q29udHJvbGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTbGlkZXJJbnB1dENvbnRyb2xsZXIoZG9jdW1lbnQsIGNvbmZpZykge1xuICAgICAgICB0aGlzLm9uS2V5RG93bl8gPSB0aGlzLm9uS2V5RG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duXyA9IHRoaXMub25Qb2ludGVyRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlXyA9IHRoaXMub25Qb2ludGVyTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblBvaW50ZXJVcF8gPSB0aGlzLm9uUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICB0aGlzLnN0ZXBfID0gVWlVdGlsLmdldFN0ZXBGb3JUZXh0SW5wdXQodGhpcy52YWx1ZS5jb25zdHJhaW50KTtcbiAgICAgICAgdmFyIF9hID0gZXN0aW1hdGVTdWl0YWJsZVJhbmdlKHRoaXMudmFsdWUpLCBtaW4gPSBfYVswXSwgbWF4ID0gX2FbMV07XG4gICAgICAgIHRoaXMubWluVmFsdWVfID0gbWluO1xuICAgICAgICB0aGlzLm1heFZhbHVlXyA9IG1heDtcbiAgICAgICAgdGhpcy52aWV3TW9kZWwgPSBjb25maWcudmlld01vZGVsO1xuICAgICAgICB0aGlzLnZpZXcgPSBuZXcgc2xpZGVyXzEuU2xpZGVySW5wdXRWaWV3KGRvY3VtZW50LCB7XG4gICAgICAgICAgICBtYXhWYWx1ZTogdGhpcy5tYXhWYWx1ZV8sXG4gICAgICAgICAgICBtaW5WYWx1ZTogdGhpcy5taW5WYWx1ZV8sXG4gICAgICAgICAgICBtb2RlbDogdGhpcy52aWV3TW9kZWwsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucHRIYW5kbGVyXyA9IG5ldyBwb2ludGVyX2hhbmRsZXJfMS5Qb2ludGVySGFuZGxlcihkb2N1bWVudCwgdGhpcy52aWV3Lm91dGVyRWxlbWVudCk7XG4gICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vblBvaW50ZXJEb3duXyk7XG4gICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCd1cCcsIHRoaXMub25Qb2ludGVyVXBfKTtcbiAgICAgICAgdGhpcy52aWV3Lm91dGVyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd25fKTtcbiAgICB9XG4gICAgU2xpZGVySW5wdXRDb250cm9sbGVyLnByb3RvdHlwZS5oYW5kbGVQb2ludGVyRXZlbnRfID0gZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IG51bWJlcl91dGlsXzEuTnVtYmVyVXRpbC5tYXAoZC5weCwgMCwgMSwgdGhpcy5taW5WYWx1ZV8sIHRoaXMubWF4VmFsdWVfKTtcbiAgICB9O1xuICAgIFNsaWRlcklucHV0Q29udHJvbGxlci5wcm90b3R5cGUub25Qb2ludGVyRG93bl8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEpO1xuICAgIH07XG4gICAgU2xpZGVySW5wdXRDb250cm9sbGVyLnByb3RvdHlwZS5vblBvaW50ZXJNb3ZlXyA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSk7XG4gICAgfTtcbiAgICBTbGlkZXJJbnB1dENvbnRyb2xsZXIucHJvdG90eXBlLm9uUG9pbnRlclVwXyA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSk7XG4gICAgfTtcbiAgICBTbGlkZXJJbnB1dENvbnRyb2xsZXIucHJvdG90eXBlLm9uS2V5RG93bl8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSArPSBVaVV0aWwuZ2V0U3RlcEZvcktleSh0aGlzLnN0ZXBfLCBVaVV0aWwuZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzKGV2KSk7XG4gICAgfTtcbiAgICByZXR1cm4gU2xpZGVySW5wdXRDb250cm9sbGVyO1xufSgpKTtcbmV4cG9ydHMuU2xpZGVySW5wdXRDb250cm9sbGVyID0gU2xpZGVySW5wdXRDb250cm9sbGVyO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9zdi1wYWxldHRlLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvY29udHJvbGxlci9pbnB1dC9zdi1wYWxldHRlLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlN2UGFsZXR0ZUlucHV0Q29udHJvbGxlciA9IHZvaWQgMDtcbnZhciBudW1iZXJfdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy9udW1iZXItdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9udW1iZXItdXRpbC50c1wiKTtcbnZhciBwb2ludGVyX2hhbmRsZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvcG9pbnRlci1oYW5kbGVyICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3BvaW50ZXItaGFuZGxlci50c1wiKTtcbnZhciBjb2xvcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbW9kZWwvY29sb3IgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL2NvbG9yLnRzXCIpO1xudmFyIHN2X3BhbGV0dGVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3ZpZXcvaW5wdXQvc3YtcGFsZXR0ZSAqLyBcIi4vc3JjL21haW4vanMvdmlldy9pbnB1dC9zdi1wYWxldHRlLnRzXCIpO1xudmFyIFVpVXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3VpLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvdWktdXRpbC50c1wiKTtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgU3ZQYWxldHRlSW5wdXRDb250cm9sbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN2UGFsZXR0ZUlucHV0Q29udHJvbGxlcihkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHRoaXMub25LZXlEb3duXyA9IHRoaXMub25LZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25fID0gdGhpcy5vblBvaW50ZXJEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uUG9pbnRlck1vdmVfID0gdGhpcy5vblBvaW50ZXJNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uUG9pbnRlclVwXyA9IHRoaXMub25Qb2ludGVyVXBfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgIHRoaXMudmlld01vZGVsID0gY29uZmlnLnZpZXdNb2RlbDtcbiAgICAgICAgdGhpcy52aWV3ID0gbmV3IHN2X3BhbGV0dGVfMS5TdlBhbGV0dGVJbnB1dFZpZXcoZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLnZpZXdNb2RlbCxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wdEhhbmRsZXJfID0gbmV3IHBvaW50ZXJfaGFuZGxlcl8xLlBvaW50ZXJIYW5kbGVyKGRvY3VtZW50LCB0aGlzLnZpZXcuZWxlbWVudCk7XG4gICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vblBvaW50ZXJEb3duXyk7XG4gICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCd1cCcsIHRoaXMub25Qb2ludGVyVXBfKTtcbiAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duXyk7XG4gICAgfVxuICAgIFN2UGFsZXR0ZUlucHV0Q29udHJvbGxlci5wcm90b3R5cGUuaGFuZGxlUG9pbnRlckV2ZW50XyA9IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgIHZhciBzYXR1cmF0aW9uID0gbnVtYmVyX3V0aWxfMS5OdW1iZXJVdGlsLm1hcChkLnB4LCAwLCAxLCAwLCAxMDApO1xuICAgICAgICB2YXIgdmFsdWUgPSBudW1iZXJfdXRpbF8xLk51bWJlclV0aWwubWFwKGQucHksIDAsIDEsIDEwMCwgMCk7XG4gICAgICAgIHZhciBfYSA9IHRoaXMudmFsdWUucmF3VmFsdWUuZ2V0Q29tcG9uZW50cygnaHN2JyksIGggPSBfYVswXSwgYSA9IF9hWzNdO1xuICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gbmV3IGNvbG9yXzEuQ29sb3IoW2gsIHNhdHVyYXRpb24sIHZhbHVlLCBhXSwgJ2hzdicpO1xuICAgICAgICB0aGlzLnZpZXcudXBkYXRlKCk7XG4gICAgfTtcbiAgICBTdlBhbGV0dGVJbnB1dENvbnRyb2xsZXIucHJvdG90eXBlLm9uUG9pbnRlckRvd25fID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhKTtcbiAgICB9O1xuICAgIFN2UGFsZXR0ZUlucHV0Q29udHJvbGxlci5wcm90b3R5cGUub25Qb2ludGVyTW92ZV8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEpO1xuICAgIH07XG4gICAgU3ZQYWxldHRlSW5wdXRDb250cm9sbGVyLnByb3RvdHlwZS5vblBvaW50ZXJVcF8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEpO1xuICAgIH07XG4gICAgU3ZQYWxldHRlSW5wdXRDb250cm9sbGVyLnByb3RvdHlwZS5vbktleURvd25fID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgIGlmIChVaVV0aWwuaXNBcnJvd0tleShldi5rZXlDb2RlKSkge1xuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX2EgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlLmdldENvbXBvbmVudHMoJ2hzdicpLCBoID0gX2FbMF0sIHMgPSBfYVsxXSwgdiA9IF9hWzJdLCBhID0gX2FbM107XG4gICAgICAgIHZhciBiYXNlU3RlcCA9IFVpVXRpbC5nZXRCYXNlU3RlcEZvckNvbG9yKGZhbHNlKTtcbiAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IG5ldyBjb2xvcl8xLkNvbG9yKFtcbiAgICAgICAgICAgIGgsXG4gICAgICAgICAgICBzICsgVWlVdGlsLmdldFN0ZXBGb3JLZXkoYmFzZVN0ZXAsIFVpVXRpbC5nZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKSxcbiAgICAgICAgICAgIHYgKyBVaVV0aWwuZ2V0U3RlcEZvcktleShiYXNlU3RlcCwgVWlVdGlsLmdldFZlcnRpY2FsU3RlcEtleXMoZXYpKSxcbiAgICAgICAgICAgIGEsXG4gICAgICAgIF0sICdoc3YnKTtcbiAgICB9O1xuICAgIHJldHVybiBTdlBhbGV0dGVJbnB1dENvbnRyb2xsZXI7XG59KCkpO1xuZXhwb3J0cy5TdlBhbGV0dGVJbnB1dENvbnRyb2xsZXIgPSBTdlBhbGV0dGVJbnB1dENvbnRyb2xsZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L3RleHQudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2lucHV0L3RleHQudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGV4dElucHV0Q29udHJvbGxlciA9IHZvaWQgMDtcbnZhciB0eXBlX3V0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvdHlwZS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3R5cGUtdXRpbC50c1wiKTtcbnZhciB0ZXh0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi92aWV3L2lucHV0L3RleHQgKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvdGV4dC50c1wiKTtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgVGV4dElucHV0Q29udHJvbGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUZXh0SW5wdXRDb250cm9sbGVyKGRvY3VtZW50LCBjb25maWcpIHtcbiAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlXyA9IHRoaXMub25JbnB1dENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5wYXJzZXJfID0gY29uZmlnLnBhcnNlcjtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgdGhpcy52aWV3TW9kZWwgPSBjb25maWcudmlld01vZGVsO1xuICAgICAgICB0aGlzLnZpZXcgPSBuZXcgdGV4dF8xLlRleHRJbnB1dFZpZXcoZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIGZvcm1hdHRlcjogY29uZmlnLmZvcm1hdHRlcixcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLnZpZXdNb2RlbCxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52aWV3LmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uSW5wdXRDaGFuZ2VfKTtcbiAgICB9XG4gICAgVGV4dElucHV0Q29udHJvbGxlci5wcm90b3R5cGUub25JbnB1dENoYW5nZV8gPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgaW5wdXRFbGVtID0gdHlwZV91dGlsXzEuVHlwZVV0aWwuZm9yY2VDYXN0KGUuY3VycmVudFRhcmdldCk7XG4gICAgICAgIHZhciB2YWx1ZSA9IGlucHV0RWxlbS52YWx1ZTtcbiAgICAgICAgdmFyIHBhcnNlZFZhbHVlID0gdGhpcy5wYXJzZXJfKHZhbHVlKTtcbiAgICAgICAgaWYgKCF0eXBlX3V0aWxfMS5UeXBlVXRpbC5pc0VtcHR5KHBhcnNlZFZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IHBhcnNlZFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlldy51cGRhdGUoKTtcbiAgICB9O1xuICAgIHJldHVybiBUZXh0SW5wdXRDb250cm9sbGVyO1xufSgpKTtcbmV4cG9ydHMuVGV4dElucHV0Q29udHJvbGxlciA9IFRleHRJbnB1dENvbnRyb2xsZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL21vbml0b3ItYmluZGluZy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvY29udHJvbGxlci9tb25pdG9yLWJpbmRpbmcudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Nb25pdG9yQmluZGluZ0NvbnRyb2xsZXIgPSB2b2lkIDA7XG52YXIgbGFiZWxlZF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdmlldy9sYWJlbGVkICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L2xhYmVsZWQudHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIE1vbml0b3JCaW5kaW5nQ29udHJvbGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIoZG9jdW1lbnQsIGNvbmZpZykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmJpbmRpbmcgPSBjb25maWcuYmluZGluZztcbiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gY29uZmlnLmNvbnRyb2xsZXI7XG4gICAgICAgIHRoaXMudmlldyA9IG5ldyBsYWJlbGVkXzEuTGFiZWxlZFZpZXcoZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIGxhYmVsOiBjb25maWcubGFiZWwsXG4gICAgICAgICAgICBtb2RlbDogdGhpcy52aWV3TW9kZWwsXG4gICAgICAgICAgICB2aWV3OiB0aGlzLmNvbnRyb2xsZXIudmlldyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudmlld01vZGVsLmVtaXR0ZXIub24oJ2Rpc3Bvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5iaW5kaW5nLmRpc3Bvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIucHJvdG90eXBlLCBcInZpZXdNb2RlbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci52aWV3TW9kZWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gTW9uaXRvckJpbmRpbmdDb250cm9sbGVyO1xufSgpKTtcbmV4cG9ydHMuTW9uaXRvckJpbmRpbmdDb250cm9sbGVyID0gTW9uaXRvckJpbmRpbmdDb250cm9sbGVyO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci9tb25pdG9yL2dyYXBoLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvY29udHJvbGxlci9tb25pdG9yL2dyYXBoLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdyYXBoTW9uaXRvckNvbnRyb2xsZXIgPSB2b2lkIDA7XG52YXIgbnVtYmVyX3V0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvbnVtYmVyLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvbnVtYmVyLXV0aWwudHNcIik7XG52YXIgZ3JhcGhfY3Vyc29yXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9tb2RlbC9ncmFwaC1jdXJzb3IgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL2dyYXBoLWN1cnNvci50c1wiKTtcbnZhciBncmFwaF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vdmlldy9tb25pdG9yL2dyYXBoICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L21vbml0b3IvZ3JhcGgudHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIEdyYXBoTW9uaXRvckNvbnRyb2xsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gR3JhcGhNb25pdG9yQ29udHJvbGxlcihkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHRoaXMub25HcmFwaE1vdXNlTGVhdmVfID0gdGhpcy5vbkdyYXBoTW91c2VMZWF2ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbkdyYXBoTW91c2VNb3ZlXyA9IHRoaXMub25HcmFwaE1vdXNlTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgdGhpcy5jdXJzb3JfID0gbmV3IGdyYXBoX2N1cnNvcl8xLkdyYXBoQ3Vyc29yKCk7XG4gICAgICAgIHRoaXMudmlld01vZGVsID0gY29uZmlnLnZpZXdNb2RlbDtcbiAgICAgICAgdGhpcy52aWV3ID0gbmV3IGdyYXBoXzEuR3JhcGhNb25pdG9yVmlldyhkb2N1bWVudCwge1xuICAgICAgICAgICAgY3Vyc29yOiB0aGlzLmN1cnNvcl8sXG4gICAgICAgICAgICBmb3JtYXR0ZXI6IGNvbmZpZy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICBtYXhWYWx1ZTogY29uZmlnLm1heFZhbHVlLFxuICAgICAgICAgICAgbWluVmFsdWU6IGNvbmZpZy5taW5WYWx1ZSxcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLnZpZXdNb2RlbCxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52aWV3LmdyYXBoRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5vbkdyYXBoTW91c2VMZWF2ZV8pO1xuICAgICAgICB0aGlzLnZpZXcuZ3JhcGhFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25HcmFwaE1vdXNlTW92ZV8pO1xuICAgIH1cbiAgICBHcmFwaE1vbml0b3JDb250cm9sbGVyLnByb3RvdHlwZS5vbkdyYXBoTW91c2VMZWF2ZV8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY3Vyc29yXy5pbmRleCA9IC0xO1xuICAgIH07XG4gICAgR3JhcGhNb25pdG9yQ29udHJvbGxlci5wcm90b3R5cGUub25HcmFwaE1vdXNlTW92ZV8gPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy52aWV3LmdyYXBoRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdmFyIHggPSBlLm9mZnNldFg7XG4gICAgICAgIHRoaXMuY3Vyc29yXy5pbmRleCA9IE1hdGguZmxvb3IobnVtYmVyX3V0aWxfMS5OdW1iZXJVdGlsLm1hcCh4LCAwLCBib3VuZHMud2lkdGgsIDAsIHRoaXMudmFsdWUudG90YWxDb3VudCkpO1xuICAgIH07XG4gICAgcmV0dXJuIEdyYXBoTW9uaXRvckNvbnRyb2xsZXI7XG59KCkpO1xuZXhwb3J0cy5HcmFwaE1vbml0b3JDb250cm9sbGVyID0gR3JhcGhNb25pdG9yQ29udHJvbGxlcjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvbW9uaXRvci9tdWx0aS1sb2cudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvY29udHJvbGxlci9tb25pdG9yL211bHRpLWxvZy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTXVsdGlMb2dNb25pdG9yQ29udHJvbGxlciA9IHZvaWQgMDtcbnZhciBtdWx0aV9sb2dfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3ZpZXcvbW9uaXRvci9tdWx0aS1sb2cgKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvbW9uaXRvci9tdWx0aS1sb2cudHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIE11bHRpTG9nTW9uaXRvckNvbnRyb2xsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTXVsdGlMb2dNb25pdG9yQ29udHJvbGxlcihkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgIHRoaXMudmlld01vZGVsID0gY29uZmlnLnZpZXdNb2RlbDtcbiAgICAgICAgdGhpcy52aWV3ID0gbmV3IG11bHRpX2xvZ18xLk11bHRpTG9nTW9uaXRvclZpZXcoZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIGZvcm1hdHRlcjogY29uZmlnLmZvcm1hdHRlcixcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLnZpZXdNb2RlbCxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIE11bHRpTG9nTW9uaXRvckNvbnRyb2xsZXI7XG59KCkpO1xuZXhwb3J0cy5NdWx0aUxvZ01vbml0b3JDb250cm9sbGVyID0gTXVsdGlMb2dNb25pdG9yQ29udHJvbGxlcjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvbW9uaXRvci9zaW5nbGUtbG9nLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL21vbml0b3Ivc2luZ2xlLWxvZy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNpbmdsZUxvZ01vbml0b3JDb250cm9sbGVyID0gdm9pZCAwO1xudmFyIHNpbmdsZV9sb2dfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL3ZpZXcvbW9uaXRvci9zaW5nbGUtbG9nICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L21vbml0b3Ivc2luZ2xlLWxvZy50c1wiKTtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgU2luZ2xlTG9nTW9uaXRvckNvbnRyb2xsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2luZ2xlTG9nTW9uaXRvckNvbnRyb2xsZXIoZG9jdW1lbnQsIGNvbmZpZykge1xuICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICB0aGlzLnZpZXdNb2RlbCA9IGNvbmZpZy52aWV3TW9kZWw7XG4gICAgICAgIHRoaXMudmlldyA9IG5ldyBzaW5nbGVfbG9nXzEuU2luZ2xlTG9nTW9uaXRvclZpZXcoZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIGZvcm1hdHRlcjogY29uZmlnLmZvcm1hdHRlcixcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLnZpZXdNb2RlbCxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIFNpbmdsZUxvZ01vbml0b3JDb250cm9sbGVyO1xufSgpKTtcbmV4cG9ydHMuU2luZ2xlTG9nTW9uaXRvckNvbnRyb2xsZXIgPSBTaW5nbGVMb2dNb25pdG9yQ29udHJvbGxlcjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvcm9vdC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvcm9vdC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Sb290Q29udHJvbGxlciA9IHZvaWQgMDtcbnZhciBEb21VdGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWlzYy9kb20tdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9kb20tdXRpbC50c1wiKTtcbnZhciB0eXBlX3V0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21pc2MvdHlwZS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3R5cGUtdXRpbC50c1wiKTtcbnZhciBmb2xkZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21vZGVsL2ZvbGRlciAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvZm9sZGVyLnRzXCIpO1xudmFyIHVpX2NvbnRhaW5lcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbW9kZWwvdWktY29udGFpbmVyICovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC91aS1jb250YWluZXIudHNcIik7XG52YXIgcm9vdF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdmlldy9yb290ICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L3Jvb3QudHNcIik7XG52YXIgQ29udGFpbmVyVXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vY29udGFpbmVyLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvY29udGFpbmVyLXV0aWwudHNcIik7XG5mdW5jdGlvbiBjcmVhdGVGb2xkZXIoY29uZmlnKSB7XG4gICAgaWYgKCFjb25maWcudGl0bGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBuZXcgZm9sZGVyXzEuRm9sZGVyKGNvbmZpZy50aXRsZSwgdHlwZV91dGlsXzEuVHlwZVV0aWwuZ2V0T3JEZWZhdWx0KGNvbmZpZy5leHBhbmRlZCwgdHJ1ZSkpO1xufVxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBSb290Q29udHJvbGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBSb290Q29udHJvbGxlcihkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHRoaXMub25Db250YWluZXJUcmFuc2l0aW9uRW5kXyA9IHRoaXMub25Db250YWluZXJUcmFuc2l0aW9uRW5kXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uRm9sZGVyQmVmb3JlQ2hhbmdlXyA9IHRoaXMub25Gb2xkZXJCZWZvcmVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25UaXRsZUNsaWNrXyA9IHRoaXMub25UaXRsZUNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uVWlDb250YWluZXJBZGRfID0gdGhpcy5vblVpQ29udGFpbmVyQWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uVWlDb250YWluZXJJdGVtTGF5b3V0XyA9IHRoaXMub25VaUNvbnRhaW5lckl0ZW1MYXlvdXRfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25VaUNvbnRhaW5lclJlbW92ZV8gPSB0aGlzLm9uVWlDb250YWluZXJSZW1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZm9sZGVyID0gY3JlYXRlRm9sZGVyKGNvbmZpZyk7XG4gICAgICAgIGlmICh0aGlzLmZvbGRlcikge1xuICAgICAgICAgICAgdGhpcy5mb2xkZXIuZW1pdHRlci5vbignYmVmb3JlY2hhbmdlJywgdGhpcy5vbkZvbGRlckJlZm9yZUNoYW5nZV8pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudWNMaXN0XyA9IG5ldyB1aV9jb250YWluZXJfMS5VaUNvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLnVjTGlzdF8uZW1pdHRlci5vbignYWRkJywgdGhpcy5vblVpQ29udGFpbmVyQWRkXyk7XG4gICAgICAgIHRoaXMudWNMaXN0Xy5lbWl0dGVyLm9uKCdpdGVtbGF5b3V0JywgdGhpcy5vblVpQ29udGFpbmVySXRlbUxheW91dF8pO1xuICAgICAgICB0aGlzLnVjTGlzdF8uZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblVpQ29udGFpbmVyUmVtb3ZlXyk7XG4gICAgICAgIHRoaXMuZG9jXyA9IGRvY3VtZW50O1xuICAgICAgICB0aGlzLnZpZXdNb2RlbCA9IGNvbmZpZy52aWV3TW9kZWw7XG4gICAgICAgIHRoaXMudmlldyA9IG5ldyByb290XzEuUm9vdFZpZXcodGhpcy5kb2NfLCB7XG4gICAgICAgICAgICBmb2xkZXI6IHRoaXMuZm9sZGVyLFxuICAgICAgICAgICAgbW9kZWw6IHRoaXMudmlld01vZGVsLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMudmlldy50aXRsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMudmlldy50aXRsZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uVGl0bGVDbGlja18pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlldy5jb250YWluZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCB0aGlzLm9uQ29udGFpbmVyVHJhbnNpdGlvbkVuZF8pO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUm9vdENvbnRyb2xsZXIucHJvdG90eXBlLCBcImRvY3VtZW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2NfO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJvb3RDb250cm9sbGVyLnByb3RvdHlwZSwgXCJ1aUNvbnRhaW5lclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudWNMaXN0XztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFJvb3RDb250cm9sbGVyLnByb3RvdHlwZS5vbkZvbGRlckJlZm9yZUNoYW5nZV8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgaWYgKGV2LnByb3BlcnR5TmFtZSAhPT0gJ2V4cGFuZGVkJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmb2xkZXIgPSB0aGlzLmZvbGRlcjtcbiAgICAgICAgaWYgKCFmb2xkZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZV91dGlsXzEuVHlwZVV0aWwuaXNFbXB0eShmb2xkZXIuZXhwYW5kZWRIZWlnaHQpKSB7XG4gICAgICAgICAgICBmb2xkZXIuZXhwYW5kZWRIZWlnaHQgPSBDb250YWluZXJVdGlsLmNvbXB1dGVFeHBhbmRlZEZvbGRlckhlaWdodChmb2xkZXIsIHRoaXMudmlldy5jb250YWluZXJFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBmb2xkZXIuc2hvdWxkRml4SGVpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgRG9tVXRpbC5mb3JjZVJlZmxvdyh0aGlzLnZpZXcuY29udGFpbmVyRWxlbWVudCk7XG4gICAgfTtcbiAgICBSb290Q29udHJvbGxlci5wcm90b3R5cGUuYXBwbHlVaUNvbnRhaW5lckNoYW5nZV8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIENvbnRhaW5lclV0aWwudXBkYXRlQWxsSXRlbXNQb3NpdGlvbnModGhpcy51aUNvbnRhaW5lcik7XG4gICAgfTtcbiAgICBSb290Q29udHJvbGxlci5wcm90b3R5cGUub25VaUNvbnRhaW5lckFkZF8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgRG9tVXRpbC5pbnNlcnRFbGVtZW50QXQodGhpcy52aWV3LmNvbnRhaW5lckVsZW1lbnQsIGV2LnVpQ29udHJvbGxlci52aWV3LmVsZW1lbnQsIGV2LmluZGV4KTtcbiAgICAgICAgdGhpcy5hcHBseVVpQ29udGFpbmVyQ2hhbmdlXygpO1xuICAgIH07XG4gICAgUm9vdENvbnRyb2xsZXIucHJvdG90eXBlLm9uVWlDb250YWluZXJSZW1vdmVfID0gZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgdGhpcy5hcHBseVVpQ29udGFpbmVyQ2hhbmdlXygpO1xuICAgIH07XG4gICAgUm9vdENvbnRyb2xsZXIucHJvdG90eXBlLm9uVWlDb250YWluZXJJdGVtTGF5b3V0XyA9IGZ1bmN0aW9uIChfKSB7XG4gICAgICAgIHRoaXMuYXBwbHlVaUNvbnRhaW5lckNoYW5nZV8oKTtcbiAgICB9O1xuICAgIFJvb3RDb250cm9sbGVyLnByb3RvdHlwZS5vblRpdGxlQ2xpY2tfID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5mb2xkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZm9sZGVyLmV4cGFuZGVkID0gIXRoaXMuZm9sZGVyLmV4cGFuZGVkO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBSb290Q29udHJvbGxlci5wcm90b3R5cGUub25Db250YWluZXJUcmFuc2l0aW9uRW5kXyA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICBpZiAoZXYucHJvcGVydHlOYW1lICE9PSAnaGVpZ2h0Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvbGRlcikge1xuICAgICAgICAgICAgdGhpcy5mb2xkZXIuc2hvdWxkRml4SGVpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZvbGRlci5leHBhbmRlZEhlaWdodCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBSb290Q29udHJvbGxlcjtcbn0oKSk7XG5leHBvcnRzLlJvb3RDb250cm9sbGVyID0gUm9vdENvbnRyb2xsZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL3NlcGFyYXRvci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvY29udHJvbGxlci9zZXBhcmF0b3IudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZXBhcmF0b3JDb250cm9sbGVyID0gdm9pZCAwO1xudmFyIHNlcGFyYXRvcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdmlldy9zZXBhcmF0b3IgKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvc2VwYXJhdG9yLnRzXCIpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBTZXBhcmF0b3JDb250cm9sbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNlcGFyYXRvckNvbnRyb2xsZXIoZG9jdW1lbnQsIGNvbmZpZykge1xuICAgICAgICB0aGlzLnZpZXdNb2RlbCA9IGNvbmZpZy52aWV3TW9kZWw7XG4gICAgICAgIHRoaXMudmlldyA9IG5ldyBzZXBhcmF0b3JfMS5TZXBhcmF0b3JWaWV3KGRvY3VtZW50LCB7XG4gICAgICAgICAgICBtb2RlbDogdGhpcy52aWV3TW9kZWwsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gU2VwYXJhdG9yQ29udHJvbGxlcjtcbn0oKSk7XG5leHBvcnRzLlNlcGFyYXRvckNvbnRyb2xsZXIgPSBTZXBhcmF0b3JDb250cm9sbGVyO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvY29udHJvbGxlci91aS11dGlsLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvY29udHJvbGxlci91aS11dGlsLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEJhc2VTdGVwRm9yQ29sb3IgPSBleHBvcnRzLmdldFN1aXRhYmxlTWF4VmFsdWVGb3JQb2ludDJkUGFkID0gZXhwb3J0cy5nZXRTdWl0YWJsZURlY2ltYWxEaWdpdHMgPSBleHBvcnRzLmlzQXJyb3dLZXkgPSBleHBvcnRzLmlzVmVydGljYWxBcnJvd0tleSA9IGV4cG9ydHMuZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzID0gZXhwb3J0cy5nZXRWZXJ0aWNhbFN0ZXBLZXlzID0gZXhwb3J0cy5nZXRTdGVwRm9yS2V5ID0gZXhwb3J0cy5nZXRTdGVwRm9yVGV4dElucHV0ID0gZXhwb3J0cy5maW5kQ29udHJvbGxlcnMgPSBleHBvcnRzLm5vcm1hbGl6ZUlucHV0UGFyYW1zT3B0aW9ucyA9IHZvaWQgMDtcbnZhciBwb2ludF8yZF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vY29uc3RyYWludC9wb2ludC0yZCAqLyBcIi4vc3JjL21haW4vanMvY29uc3RyYWludC9wb2ludC0yZC50c1wiKTtcbnZhciByYW5nZV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vY29uc3RyYWludC9yYW5nZSAqLyBcIi4vc3JjL21haW4vanMvY29uc3RyYWludC9yYW5nZS50c1wiKTtcbnZhciBzdGVwXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9jb25zdHJhaW50L3N0ZXAgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvc3RlcC50c1wiKTtcbnZhciB1dGlsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9jb25zdHJhaW50L3V0aWwgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnN0cmFpbnQvdXRpbC50c1wiKTtcbnZhciBudW1iZXJfdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWlzYy9udW1iZXItdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9udW1iZXItdXRpbC50c1wiKTtcbnZhciB0eXBlX3V0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21pc2MvdHlwZS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3R5cGUtdXRpbC50c1wiKTtcbnZhciBmb2xkZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vZm9sZGVyICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2ZvbGRlci50c1wiKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBub3JtYWxpemVJbnB1dFBhcmFtc09wdGlvbnMob3B0aW9ucywgY29udmVydCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtLnRleHQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGNvbnZlcnQoaXRlbS52YWx1ZSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdmFyIHRleHRUb1ZhbHVlTWFwID0gb3B0aW9ucztcbiAgICB2YXIgdGV4dHMgPSBPYmplY3Qua2V5cyh0ZXh0VG9WYWx1ZU1hcCk7XG4gICAgcmV0dXJuIHRleHRzLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCB0ZXh0KSB7XG4gICAgICAgIHJldHVybiByZXN1bHQuY29uY2F0KHtcbiAgICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgICB2YWx1ZTogY29udmVydCh0ZXh0VG9WYWx1ZU1hcFt0ZXh0XSksXG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcbn1cbmV4cG9ydHMubm9ybWFsaXplSW5wdXRQYXJhbXNPcHRpb25zID0gbm9ybWFsaXplSW5wdXRQYXJhbXNPcHRpb25zO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGZpbmRDb250cm9sbGVycyh1aUNvbnRyb2xsZXJzLCBjb250cm9sbGVyQ2xhc3MpIHtcbiAgICByZXR1cm4gdWlDb250cm9sbGVycy5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdHMsIHVjKSB7XG4gICAgICAgIGlmICh1YyBpbnN0YW5jZW9mIGZvbGRlcl8xLkZvbGRlckNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgICAgcmVzdWx0cy5wdXNoLmFwcGx5KHJlc3VsdHMsIGZpbmRDb250cm9sbGVycyh1Yy51aUNvbnRhaW5lci5pdGVtcywgY29udHJvbGxlckNsYXNzKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVjIGluc3RhbmNlb2YgY29udHJvbGxlckNsYXNzKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2godWMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH0sIFtdKTtcbn1cbmV4cG9ydHMuZmluZENvbnRyb2xsZXJzID0gZmluZENvbnRyb2xsZXJzO1xuZnVuY3Rpb24gZmluZFN0ZXAoY29uc3RyYWludCkge1xuICAgIHZhciBjID0gY29uc3RyYWludFxuICAgICAgICA/IHV0aWxfMS5Db25zdHJhaW50VXRpbC5maW5kQ29uc3RyYWludChjb25zdHJhaW50LCBzdGVwXzEuU3RlcENvbnN0cmFpbnQpXG4gICAgICAgIDogbnVsbDtcbiAgICBpZiAoIWMpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjLnN0ZXA7XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gZ2V0U3RlcEZvclRleHRJbnB1dChjb25zdHJhaW50KSB7XG4gICAgdmFyIHN0ZXAgPSBmaW5kU3RlcChjb25zdHJhaW50KTtcbiAgICByZXR1cm4gdHlwZV91dGlsXzEuVHlwZVV0aWwuZ2V0T3JEZWZhdWx0KHN0ZXAsIDEpO1xufVxuZXhwb3J0cy5nZXRTdGVwRm9yVGV4dElucHV0ID0gZ2V0U3RlcEZvclRleHRJbnB1dDtcbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwLCBrZXlzKSB7XG4gICAgdmFyIHN0ZXAgPSBiYXNlU3RlcCAqIChrZXlzLmFsdEtleSA/IDAuMSA6IDEpICogKGtleXMuc2hpZnRLZXkgPyAxMCA6IDEpO1xuICAgIGlmIChrZXlzLnVwS2V5KSB7XG4gICAgICAgIHJldHVybiArc3RlcDtcbiAgICB9XG4gICAgZWxzZSBpZiAoa2V5cy5kb3duS2V5KSB7XG4gICAgICAgIHJldHVybiAtc3RlcDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG59XG5leHBvcnRzLmdldFN0ZXBGb3JLZXkgPSBnZXRTdGVwRm9yS2V5O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGdldFZlcnRpY2FsU3RlcEtleXMoZXYpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgZG93bktleTogZXYua2V5Q29kZSA9PT0gNDAsXG4gICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgdXBLZXk6IGV2LmtleUNvZGUgPT09IDM4LFxuICAgIH07XG59XG5leHBvcnRzLmdldFZlcnRpY2FsU3RlcEtleXMgPSBnZXRWZXJ0aWNhbFN0ZXBLZXlzO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGdldEhvcml6b250YWxTdGVwS2V5cyhldikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICBkb3duS2V5OiBldi5rZXlDb2RlID09PSAzNyxcbiAgICAgICAgc2hpZnRLZXk6IGV2LnNoaWZ0S2V5LFxuICAgICAgICB1cEtleTogZXYua2V5Q29kZSA9PT0gMzksXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzID0gZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGlzVmVydGljYWxBcnJvd0tleShrZXlDb2RlKSB7XG4gICAgcmV0dXJuIGtleUNvZGUgPT09IDM4IHx8IGtleUNvZGUgPT09IDQwO1xufVxuZXhwb3J0cy5pc1ZlcnRpY2FsQXJyb3dLZXkgPSBpc1ZlcnRpY2FsQXJyb3dLZXk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gaXNBcnJvd0tleShrZXlDb2RlKSB7XG4gICAgcmV0dXJuIGlzVmVydGljYWxBcnJvd0tleShrZXlDb2RlKSB8fCBrZXlDb2RlID09PSAzNyB8fCBrZXlDb2RlID09PSAzOTtcbn1cbmV4cG9ydHMuaXNBcnJvd0tleSA9IGlzQXJyb3dLZXk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gZ2V0U3VpdGFibGVEZWNpbWFsRGlnaXRzKGNvbnN0cmFpbnQsIHJhd1ZhbHVlKSB7XG4gICAgdmFyIHNjID0gY29uc3RyYWludCAmJiB1dGlsXzEuQ29uc3RyYWludFV0aWwuZmluZENvbnN0cmFpbnQoY29uc3RyYWludCwgc3RlcF8xLlN0ZXBDb25zdHJhaW50KTtcbiAgICBpZiAoc2MpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlcl91dGlsXzEuTnVtYmVyVXRpbC5nZXREZWNpbWFsRGlnaXRzKHNjLnN0ZXApO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5tYXgobnVtYmVyX3V0aWxfMS5OdW1iZXJVdGlsLmdldERlY2ltYWxEaWdpdHMocmF3VmFsdWUpLCAyKTtcbn1cbmV4cG9ydHMuZ2V0U3VpdGFibGVEZWNpbWFsRGlnaXRzID0gZ2V0U3VpdGFibGVEZWNpbWFsRGlnaXRzO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGdldFN1aXRhYmxlTWF4RGltZW5zaW9uVmFsdWUoY29uc3RyYWludCwgcmF3VmFsdWUpIHtcbiAgICB2YXIgcmMgPSBjb25zdHJhaW50ICYmIHV0aWxfMS5Db25zdHJhaW50VXRpbC5maW5kQ29uc3RyYWludChjb25zdHJhaW50LCByYW5nZV8xLlJhbmdlQ29uc3RyYWludCk7XG4gICAgaWYgKHJjKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChNYXRoLmFicyhyYy5taW5WYWx1ZSB8fCAwKSwgTWF0aC5hYnMocmMubWF4VmFsdWUgfHwgMCkpO1xuICAgIH1cbiAgICB2YXIgc3RlcCA9IGdldFN0ZXBGb3JUZXh0SW5wdXQoY29uc3RyYWludCk7XG4gICAgcmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHN0ZXApICogMTAsIE1hdGguYWJzKHJhd1ZhbHVlKSAqIDEwKTtcbn1cbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBnZXRTdWl0YWJsZU1heFZhbHVlRm9yUG9pbnQyZFBhZChjb25zdHJhaW50LCByYXdWYWx1ZSkge1xuICAgIHZhciB4YyA9IGNvbnN0cmFpbnQgaW5zdGFuY2VvZiBwb2ludF8yZF8xLlBvaW50MmRDb25zdHJhaW50XG4gICAgICAgID8gY29uc3RyYWludC54Q29uc3RyYWludFxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB2YXIgeWMgPSBjb25zdHJhaW50IGluc3RhbmNlb2YgcG9pbnRfMmRfMS5Qb2ludDJkQ29uc3RyYWludFxuICAgICAgICA/IGNvbnN0cmFpbnQueUNvbnN0cmFpbnRcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHhyID0gZ2V0U3VpdGFibGVNYXhEaW1lbnNpb25WYWx1ZSh4YywgcmF3VmFsdWUueCk7XG4gICAgdmFyIHlyID0gZ2V0U3VpdGFibGVNYXhEaW1lbnNpb25WYWx1ZSh5YywgcmF3VmFsdWUueSk7XG4gICAgcmV0dXJuIE1hdGgubWF4KHhyLCB5cik7XG59XG5leHBvcnRzLmdldFN1aXRhYmxlTWF4VmFsdWVGb3JQb2ludDJkUGFkID0gZ2V0U3VpdGFibGVNYXhWYWx1ZUZvclBvaW50MmRQYWQ7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gZ2V0QmFzZVN0ZXBGb3JDb2xvcihmb3JBbHBoYSkge1xuICAgIHJldHVybiBmb3JBbHBoYSA/IDAuMSA6IDE7XG59XG5leHBvcnRzLmdldEJhc2VTdGVwRm9yQ29sb3IgPSBnZXRCYXNlU3RlcEZvckNvbG9yO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvY29udmVydGVyL2Jvb2xlYW4udHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2NvbnZlcnRlci9ib29sZWFuLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudG9TdHJpbmcgPSBleHBvcnRzLmZyb21NaXhlZCA9IHZvaWQgMDtcbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBmcm9tTWl4ZWQodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gISF2YWx1ZTtcbn1cbmV4cG9ydHMuZnJvbU1peGVkID0gZnJvbU1peGVkO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5leHBvcnRzLnRvU3RyaW5nID0gdG9TdHJpbmc7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9jb252ZXJ0ZXIvY29sb3IudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9jb252ZXJ0ZXIvY29sb3IudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudG9SZ2JhTnVtYmVyID0gZXhwb3J0cy50b1JnYk51bWJlciA9IGV4cG9ydHMuZ2V0U3RyaW5naWZpZXIgPSBleHBvcnRzLnRvRnVuY3Rpb25hbEhzbGFTdHJpbmcgPSBleHBvcnRzLnRvRnVuY3Rpb25hbEhzbFN0cmluZyA9IGV4cG9ydHMudG9GdW5jdGlvbmFsUmdiYVN0cmluZyA9IGV4cG9ydHMudG9GdW5jdGlvbmFsUmdiU3RyaW5nID0gZXhwb3J0cy50b0hleFJnYmFTdHJpbmcgPSBleHBvcnRzLnRvSGV4UmdiU3RyaW5nID0gZXhwb3J0cy5mcm9tTnVtYmVyVG9SZ2JhID0gZXhwb3J0cy5mcm9tTnVtYmVyVG9SZ2IgPSBleHBvcnRzLmZyb21PYmplY3QgPSBleHBvcnRzLmZyb21TdHJpbmcgPSB2b2lkIDA7XG52YXIgbnVtYmVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9mb3JtYXR0ZXIvbnVtYmVyICovIFwiLi9zcmMvbWFpbi9qcy9mb3JtYXR0ZXIvbnVtYmVyLnRzXCIpO1xudmFyIENvbG9yTW9kZWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9taXNjL2NvbG9yLW1vZGVsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2NvbG9yLW1vZGVsLnRzXCIpO1xudmFyIG51bWJlcl91dGlsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9taXNjL251bWJlci11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL251bWJlci11dGlsLnRzXCIpO1xudmFyIGNvbG9yXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tb2RlbC9jb2xvciAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvY29sb3IudHNcIik7XG52YXIgTnVtYmVyQ29sb3JQYXJzZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9wYXJzZXIvbnVtYmVyLWNvbG9yICovIFwiLi9zcmMvbWFpbi9qcy9wYXJzZXIvbnVtYmVyLWNvbG9yLnRzXCIpO1xudmFyIFN0cmluZ0NvbG9yUGFyc2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vcGFyc2VyL3N0cmluZy1jb2xvciAqLyBcIi4vc3JjL21haW4vanMvcGFyc2VyL3N0cmluZy1jb2xvci50c1wiKTtcbmZ1bmN0aW9uIGNyZWF0ZUVtcHR5Q29sb3IoKSB7XG4gICAgcmV0dXJuIG5ldyBjb2xvcl8xLkNvbG9yKFswLCAwLCAwXSwgJ3JnYicpO1xufVxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGZyb21TdHJpbmcodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgY3YgPSBTdHJpbmdDb2xvclBhcnNlci5Db21wb3NpdGVQYXJzZXIodmFsdWUpO1xuICAgICAgICBpZiAoY3YpIHtcbiAgICAgICAgICAgIHJldHVybiBjdjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlRW1wdHlDb2xvcigpO1xufVxuZXhwb3J0cy5mcm9tU3RyaW5nID0gZnJvbVN0cmluZztcbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBmcm9tT2JqZWN0KHZhbHVlKSB7XG4gICAgaWYgKGNvbG9yXzEuQ29sb3IuaXNDb2xvck9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGNvbG9yXzEuQ29sb3IuZnJvbU9iamVjdCh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVFbXB0eUNvbG9yKCk7XG59XG5leHBvcnRzLmZyb21PYmplY3QgPSBmcm9tT2JqZWN0O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGZyb21OdW1iZXJUb1JnYih2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHZhciBjdiA9IE51bWJlckNvbG9yUGFyc2VyLlJnYlBhcnNlcih2YWx1ZSk7XG4gICAgICAgIGlmIChjdikge1xuICAgICAgICAgICAgcmV0dXJuIGN2O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVFbXB0eUNvbG9yKCk7XG59XG5leHBvcnRzLmZyb21OdW1iZXJUb1JnYiA9IGZyb21OdW1iZXJUb1JnYjtcbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBmcm9tTnVtYmVyVG9SZ2JhKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdmFyIGN2ID0gTnVtYmVyQ29sb3JQYXJzZXIuUmdiYVBhcnNlcih2YWx1ZSk7XG4gICAgICAgIGlmIChjdikge1xuICAgICAgICAgICAgcmV0dXJuIGN2O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVFbXB0eUNvbG9yKCk7XG59XG5leHBvcnRzLmZyb21OdW1iZXJUb1JnYmEgPSBmcm9tTnVtYmVyVG9SZ2JhO1xuZnVuY3Rpb24gemVyb2ZpbGwoY29tcCkge1xuICAgIHZhciBoZXggPSBudW1iZXJfdXRpbF8xLk51bWJlclV0aWwuY29uc3RyYWluKE1hdGguZmxvb3IoY29tcCksIDAsIDI1NSkudG9TdHJpbmcoMTYpO1xuICAgIHJldHVybiBoZXgubGVuZ3RoID09PSAxID8gXCIwXCIgKyBoZXggOiBoZXg7XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gdG9IZXhSZ2JTdHJpbmcodmFsdWUpIHtcbiAgICB2YXIgaGV4ZXMgPSBDb2xvck1vZGVsLndpdGhvdXRBbHBoYSh2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InKSlcbiAgICAgICAgLm1hcCh6ZXJvZmlsbClcbiAgICAgICAgLmpvaW4oJycpO1xuICAgIHJldHVybiBcIiNcIiArIGhleGVzO1xufVxuZXhwb3J0cy50b0hleFJnYlN0cmluZyA9IHRvSGV4UmdiU3RyaW5nO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIHRvSGV4UmdiYVN0cmluZyh2YWx1ZSkge1xuICAgIHZhciByZ2JhQ29tcHMgPSB2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InKTtcbiAgICB2YXIgaGV4ZXMgPSBbcmdiYUNvbXBzWzBdLCByZ2JhQ29tcHNbMV0sIHJnYmFDb21wc1syXSwgcmdiYUNvbXBzWzNdICogMjU1XVxuICAgICAgICAubWFwKHplcm9maWxsKVxuICAgICAgICAuam9pbignJyk7XG4gICAgcmV0dXJuIFwiI1wiICsgaGV4ZXM7XG59XG5leHBvcnRzLnRvSGV4UmdiYVN0cmluZyA9IHRvSGV4UmdiYVN0cmluZztcbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiB0b0Z1bmN0aW9uYWxSZ2JTdHJpbmcodmFsdWUpIHtcbiAgICB2YXIgZm9ybWF0dGVyID0gbmV3IG51bWJlcl8xLk51bWJlckZvcm1hdHRlcigwKTtcbiAgICB2YXIgY29tcHMgPSBDb2xvck1vZGVsLndpdGhvdXRBbHBoYSh2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InKSkubWFwKGZ1bmN0aW9uIChjb21wKSB7IHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KGNvbXApOyB9KTtcbiAgICByZXR1cm4gXCJyZ2IoXCIgKyBjb21wcy5qb2luKCcsICcpICsgXCIpXCI7XG59XG5leHBvcnRzLnRvRnVuY3Rpb25hbFJnYlN0cmluZyA9IHRvRnVuY3Rpb25hbFJnYlN0cmluZztcbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiB0b0Z1bmN0aW9uYWxSZ2JhU3RyaW5nKHZhbHVlKSB7XG4gICAgdmFyIGFGb3JtYXR0ZXIgPSBuZXcgbnVtYmVyXzEuTnVtYmVyRm9ybWF0dGVyKDIpO1xuICAgIHZhciByZ2JGb3JtYXR0ZXIgPSBuZXcgbnVtYmVyXzEuTnVtYmVyRm9ybWF0dGVyKDApO1xuICAgIHZhciBjb21wcyA9IHZhbHVlLmdldENvbXBvbmVudHMoJ3JnYicpLm1hcChmdW5jdGlvbiAoY29tcCwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGZvcm1hdHRlciA9IGluZGV4ID09PSAzID8gYUZvcm1hdHRlciA6IHJnYkZvcm1hdHRlcjtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQoY29tcCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFwicmdiYShcIiArIGNvbXBzLmpvaW4oJywgJykgKyBcIilcIjtcbn1cbmV4cG9ydHMudG9GdW5jdGlvbmFsUmdiYVN0cmluZyA9IHRvRnVuY3Rpb25hbFJnYmFTdHJpbmc7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gdG9GdW5jdGlvbmFsSHNsU3RyaW5nKHZhbHVlKSB7XG4gICAgdmFyIGZvcm1hdHRlciA9IG5ldyBudW1iZXJfMS5OdW1iZXJGb3JtYXR0ZXIoMCk7XG4gICAgdmFyIGNvbXBzID0gQ29sb3JNb2RlbC53aXRob3V0QWxwaGEodmFsdWUuZ2V0Q29tcG9uZW50cygnaHNsJykpLm1hcChmdW5jdGlvbiAoY29tcCkgeyByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdChjb21wKTsgfSk7XG4gICAgcmV0dXJuIFwiaHNsKFwiICsgY29tcHMuam9pbignLCAnKSArIFwiKVwiO1xufVxuZXhwb3J0cy50b0Z1bmN0aW9uYWxIc2xTdHJpbmcgPSB0b0Z1bmN0aW9uYWxIc2xTdHJpbmc7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gdG9GdW5jdGlvbmFsSHNsYVN0cmluZyh2YWx1ZSkge1xuICAgIHZhciBhRm9ybWF0dGVyID0gbmV3IG51bWJlcl8xLk51bWJlckZvcm1hdHRlcigyKTtcbiAgICB2YXIgaHNsRm9ybWF0dGVyID0gbmV3IG51bWJlcl8xLk51bWJlckZvcm1hdHRlcigwKTtcbiAgICB2YXIgY29tcHMgPSB2YWx1ZS5nZXRDb21wb25lbnRzKCdoc2wnKS5tYXAoZnVuY3Rpb24gKGNvbXAsIGluZGV4KSB7XG4gICAgICAgIHZhciBmb3JtYXR0ZXIgPSBpbmRleCA9PT0gMyA/IGFGb3JtYXR0ZXIgOiBoc2xGb3JtYXR0ZXI7XG4gICAgICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KGNvbXApO1xuICAgIH0pO1xuICAgIHJldHVybiBcImhzbGEoXCIgKyBjb21wcy5qb2luKCcsICcpICsgXCIpXCI7XG59XG5leHBvcnRzLnRvRnVuY3Rpb25hbEhzbGFTdHJpbmcgPSB0b0Z1bmN0aW9uYWxIc2xhU3RyaW5nO1xudmFyIE5PVEFUSU9OX1RPX1NUUklOR0lGSUVSX01BUCA9IHtcbiAgICAnZnVuYy5oc2wnOiB0b0Z1bmN0aW9uYWxIc2xTdHJpbmcsXG4gICAgJ2Z1bmMuaHNsYSc6IHRvRnVuY3Rpb25hbEhzbGFTdHJpbmcsXG4gICAgJ2Z1bmMucmdiJzogdG9GdW5jdGlvbmFsUmdiU3RyaW5nLFxuICAgICdmdW5jLnJnYmEnOiB0b0Z1bmN0aW9uYWxSZ2JhU3RyaW5nLFxuICAgICdoZXgucmdiJzogdG9IZXhSZ2JTdHJpbmcsXG4gICAgJ2hleC5yZ2JhJzogdG9IZXhSZ2JhU3RyaW5nLFxufTtcbmZ1bmN0aW9uIGdldFN0cmluZ2lmaWVyKG5vdGF0aW9uKSB7XG4gICAgcmV0dXJuIE5PVEFUSU9OX1RPX1NUUklOR0lGSUVSX01BUFtub3RhdGlvbl07XG59XG5leHBvcnRzLmdldFN0cmluZ2lmaWVyID0gZ2V0U3RyaW5naWZpZXI7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gdG9SZ2JOdW1iZXIodmFsdWUpIHtcbiAgICByZXR1cm4gQ29sb3JNb2RlbC53aXRob3V0QWxwaGEodmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJykpLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBjb21wKSB7XG4gICAgICAgIHJldHVybiAocmVzdWx0IDw8IDgpIHwgKE1hdGguZmxvb3IoY29tcCkgJiAweGZmKTtcbiAgICB9LCAwKTtcbn1cbmV4cG9ydHMudG9SZ2JOdW1iZXIgPSB0b1JnYk51bWJlcjtcbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiB0b1JnYmFOdW1iZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJykucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGNvbXAsIGluZGV4KSB7XG4gICAgICAgIHZhciBoZXggPSBNYXRoLmZsb29yKGluZGV4ID09PSAzID8gY29tcCAqIDI1NSA6IGNvbXApICYgMHhmZjtcbiAgICAgICAgcmV0dXJuIChyZXN1bHQgPDwgOCkgfCBoZXg7XG4gICAgfSwgMCk7XG59XG5leHBvcnRzLnRvUmdiYU51bWJlciA9IHRvUmdiYU51bWJlcjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2NvbnZlcnRlci9udW1iZXIudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvY29udmVydGVyL251bWJlci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudG9TdHJpbmcgPSBleHBvcnRzLmZyb21NaXhlZCA9IHZvaWQgMDtcbnZhciB0eXBlX3V0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21pc2MvdHlwZS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3R5cGUtdXRpbC50c1wiKTtcbnZhciBzdHJpbmdfbnVtYmVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9wYXJzZXIvc3RyaW5nLW51bWJlciAqLyBcIi4vc3JjL21haW4vanMvcGFyc2VyL3N0cmluZy1udW1iZXIudHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gZnJvbU1peGVkKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgcHYgPSBzdHJpbmdfbnVtYmVyXzEuU3RyaW5nTnVtYmVyUGFyc2VyKHZhbHVlKTtcbiAgICAgICAgaWYgKCF0eXBlX3V0aWxfMS5UeXBlVXRpbC5pc0VtcHR5KHB2KSkge1xuICAgICAgICAgICAgcmV0dXJuIHB2O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xufVxuZXhwb3J0cy5mcm9tTWl4ZWQgPSBmcm9tTWl4ZWQ7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cbmV4cG9ydHMudG9TdHJpbmcgPSB0b1N0cmluZztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2NvbnZlcnRlci9wb2ludC0yZC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2NvbnZlcnRlci9wb2ludC0yZC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tTWl4ZWQgPSB2b2lkIDA7XG52YXIgcG9pbnRfMmRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21vZGVsL3BvaW50LTJkICovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC9wb2ludC0yZC50c1wiKTtcbnZhciBhbnlfcG9pbnRfMmRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3BhcnNlci9hbnktcG9pbnQtMmQgKi8gXCIuL3NyYy9tYWluL2pzL3BhcnNlci9hbnktcG9pbnQtMmQudHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gZnJvbU1peGVkKHZhbHVlKSB7XG4gICAgcmV0dXJuIGFueV9wb2ludF8yZF8xLkFueVBvaW50MmRQYXJzZXIodmFsdWUpIHx8IG5ldyBwb2ludF8yZF8xLlBvaW50MmQoKTtcbn1cbmV4cG9ydHMuZnJvbU1peGVkID0gZnJvbU1peGVkO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvY29udmVydGVyL3N0cmluZy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9jb252ZXJ0ZXIvc3RyaW5nLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b1N0cmluZyA9IGV4cG9ydHMuZnJvbU1peGVkID0gdm9pZCAwO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGZyb21NaXhlZCh2YWx1ZSkge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuZXhwb3J0cy5mcm9tTWl4ZWQgPSBmcm9tTWl4ZWQ7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnRzLnRvU3RyaW5nID0gdG9TdHJpbmc7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9mb3JtYXR0ZXIvYm9vbGVhbi50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvZm9ybWF0dGVyL2Jvb2xlYW4udHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Cb29sZWFuRm9ybWF0dGVyID0gdm9pZCAwO1xudmFyIEJvb2xlYW5Db252ZXJ0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9jb252ZXJ0ZXIvYm9vbGVhbiAqLyBcIi4vc3JjL21haW4vanMvY29udmVydGVyL2Jvb2xlYW4udHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIEJvb2xlYW5Gb3JtYXR0ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQm9vbGVhbkZvcm1hdHRlcigpIHtcbiAgICB9XG4gICAgQm9vbGVhbkZvcm1hdHRlci5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuQ29udmVydGVyLnRvU3RyaW5nKHZhbHVlKTtcbiAgICB9O1xuICAgIHJldHVybiBCb29sZWFuRm9ybWF0dGVyO1xufSgpKTtcbmV4cG9ydHMuQm9vbGVhbkZvcm1hdHRlciA9IEJvb2xlYW5Gb3JtYXR0ZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9mb3JtYXR0ZXIvY29sb3IudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9mb3JtYXR0ZXIvY29sb3IudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29sb3JGb3JtYXR0ZXIgPSB2b2lkIDA7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIENvbG9yRm9ybWF0dGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbG9yRm9ybWF0dGVyKHN0cmluZ2lmaWVyKSB7XG4gICAgICAgIHRoaXMuc3RyaW5naWZpZXJfID0gc3RyaW5naWZpZXI7XG4gICAgfVxuICAgIENvbG9yRm9ybWF0dGVyLnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5naWZpZXJfKHZhbHVlKTtcbiAgICB9O1xuICAgIHJldHVybiBDb2xvckZvcm1hdHRlcjtcbn0oKSk7XG5leHBvcnRzLkNvbG9yRm9ybWF0dGVyID0gQ29sb3JGb3JtYXR0ZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9mb3JtYXR0ZXIvbnVtYmVyLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2Zvcm1hdHRlci9udW1iZXIudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk51bWJlckZvcm1hdHRlciA9IHZvaWQgMDtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgTnVtYmVyRm9ybWF0dGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE51bWJlckZvcm1hdHRlcihkaWdpdHMpIHtcbiAgICAgICAgdGhpcy5kaWdpdHNfID0gZGlnaXRzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTnVtYmVyRm9ybWF0dGVyLnByb3RvdHlwZSwgXCJkaWdpdHNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpZ2l0c187XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBOdW1iZXJGb3JtYXR0ZXIucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUudG9GaXhlZChNYXRoLm1heChNYXRoLm1pbih0aGlzLmRpZ2l0c18sIDIwKSwgMCkpO1xuICAgIH07XG4gICAgcmV0dXJuIE51bWJlckZvcm1hdHRlcjtcbn0oKSk7XG5leHBvcnRzLk51bWJlckZvcm1hdHRlciA9IE51bWJlckZvcm1hdHRlcjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL2Zvcm1hdHRlci9zdHJpbmcudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvZm9ybWF0dGVyL3N0cmluZy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU3RyaW5nRm9ybWF0dGVyID0gdm9pZCAwO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBTdHJpbmdGb3JtYXR0ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3RyaW5nRm9ybWF0dGVyKCkge1xuICAgIH1cbiAgICBTdHJpbmdGb3JtYXR0ZXIucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICByZXR1cm4gU3RyaW5nRm9ybWF0dGVyO1xufSgpKTtcbmV4cG9ydHMuU3RyaW5nRm9ybWF0dGVyID0gU3RyaW5nRm9ybWF0dGVyO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvaW5kZXgudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL2luZGV4LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIFN0eWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vc2Fzcy9idW5kbGUuc2NzcyAqLyBcIi4vc3JjL21haW4vc2Fzcy9idW5kbGUuc2Nzc1wiKTtcbnZhciB0d2Vha3BhbmVfd2l0aG91dF9zdHlsZV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90d2Vha3BhbmUtd2l0aG91dC1zdHlsZSAqLyBcIi4vc3JjL21haW4vanMvdHdlYWtwYW5lLXdpdGhvdXQtc3R5bGUudHNcIik7XG5mdW5jdGlvbiBlbWJlZERlZmF1bHRTdHlsZUlmTmVlZGVkKGRvY3VtZW50KSB7XG4gICAgdmFyIE1BUktFUiA9ICd0d2Vha3BhbmUnO1xuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwic3R5bGVbZGF0YS1mb3I9XCIgKyBNQVJLRVIgKyBcIl1cIikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgc3R5bGVFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICBzdHlsZUVsZW0uZGF0YXNldC5mb3IgPSBNQVJLRVI7XG4gICAgc3R5bGVFbGVtLnRleHRDb250ZW50ID0gU3R5bGUudG9TdHJpbmcoKTtcbiAgICBpZiAoZG9jdW1lbnQuaGVhZCkge1xuICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlRWxlbSk7XG4gICAgfVxufVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1kZWZhdWx0LWV4cG9ydFxudmFyIFR3ZWFrcGFuZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVHdlYWtwYW5lLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFR3ZWFrcGFuZShvcHRfY29uZmlnKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG9wdF9jb25maWcpIHx8IHRoaXM7XG4gICAgICAgIGVtYmVkRGVmYXVsdFN0eWxlSWZOZWVkZWQoX3RoaXMuZG9jdW1lbnQpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBUd2Vha3BhbmU7XG59KHR3ZWFrcGFuZV93aXRob3V0X3N0eWxlXzEuVHdlYWtwYW5lV2l0aG91dFN0eWxlKSk7XG5leHBvcnRzLmRlZmF1bHQgPSBUd2Vha3BhbmU7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2NsYXNzLW5hbWUudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9taXNjL2NsYXNzLW5hbWUudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ2xhc3NOYW1lID0gdm9pZCAwO1xudmFyIFBSRUZJWCA9ICd0cCc7XG52YXIgVFlQRV9UT19QT1NURklYX01BUCA9IHtcbiAgICAnJzogJ3YnLFxuICAgIGlucHV0OiAnaXYnLFxuICAgIG1vbml0b3I6ICdtdicsXG59O1xuZnVuY3Rpb24gQ2xhc3NOYW1lKHZpZXdOYW1lLCBvcHRfdmlld1R5cGUpIHtcbiAgICB2YXIgdmlld1R5cGUgPSBvcHRfdmlld1R5cGUgfHwgJyc7XG4gICAgdmFyIHBvc3RmaXggPSBUWVBFX1RPX1BPU1RGSVhfTUFQW3ZpZXdUeXBlXTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG9wdF9lbGVtZW50TmFtZSwgb3B0X21vZGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBQUkVGSVgsXG4gICAgICAgICAgICAnLScsXG4gICAgICAgICAgICB2aWV3TmFtZSxcbiAgICAgICAgICAgIHBvc3RmaXgsXG4gICAgICAgICAgICBvcHRfZWxlbWVudE5hbWUgPyBcIl9cIiArIG9wdF9lbGVtZW50TmFtZSA6ICcnLFxuICAgICAgICAgICAgb3B0X21vZGlmaWVyID8gXCItXCIgKyBvcHRfbW9kaWZpZXIgOiAnJyxcbiAgICAgICAgXS5qb2luKCcnKTtcbiAgICB9O1xufVxuZXhwb3J0cy5DbGFzc05hbWUgPSBDbGFzc05hbWU7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2NvbG9yLW1vZGVsLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL21pc2MvY29sb3ItbW9kZWwudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbnZlcnRNb2RlID0gZXhwb3J0cy53aXRoQWxwaGEgPSBleHBvcnRzLndpdGhvdXRBbHBoYSA9IGV4cG9ydHMub3BhcXVlID0gZXhwb3J0cy5oc3ZUb1JnYiA9IHZvaWQgMDtcbnZhciBudW1iZXJfdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9udW1iZXItdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9udW1iZXItdXRpbC50c1wiKTtcbmZ1bmN0aW9uIHJnYlRvSHNsKHIsIGcsIGIpIHtcbiAgICB2YXIgcnAgPSBudW1iZXJfdXRpbF8xLk51bWJlclV0aWwuY29uc3RyYWluKHIgLyAyNTUsIDAsIDEpO1xuICAgIHZhciBncCA9IG51bWJlcl91dGlsXzEuTnVtYmVyVXRpbC5jb25zdHJhaW4oZyAvIDI1NSwgMCwgMSk7XG4gICAgdmFyIGJwID0gbnVtYmVyX3V0aWxfMS5OdW1iZXJVdGlsLmNvbnN0cmFpbihiIC8gMjU1LCAwLCAxKTtcbiAgICB2YXIgY21heCA9IE1hdGgubWF4KHJwLCBncCwgYnApO1xuICAgIHZhciBjbWluID0gTWF0aC5taW4ocnAsIGdwLCBicCk7XG4gICAgdmFyIGMgPSBjbWF4IC0gY21pbjtcbiAgICB2YXIgaCA9IDA7XG4gICAgdmFyIHMgPSAwO1xuICAgIHZhciBsID0gKGNtaW4gKyBjbWF4KSAvIDI7XG4gICAgaWYgKGMgIT09IDApIHtcbiAgICAgICAgcyA9IGwgPiAwLjUgPyBjIC8gKDIgLSBjbWluIC0gY21heCkgOiBjIC8gKGNtYXggKyBjbWluKTtcbiAgICAgICAgaWYgKHJwID09PSBjbWF4KSB7XG4gICAgICAgICAgICBoID0gKGdwIC0gYnApIC8gYztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChncCA9PT0gY21heCkge1xuICAgICAgICAgICAgaCA9IDIgKyAoYnAgLSBycCkgLyBjO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaCA9IDQgKyAocnAgLSBncCkgLyBjO1xuICAgICAgICB9XG4gICAgICAgIGggPSBoIC8gNiArIChoIDwgMCA/IDEgOiAwKTtcbiAgICB9XG4gICAgcmV0dXJuIFtoICogMzYwLCBzICogMTAwLCBsICogMTAwXTtcbn1cbmZ1bmN0aW9uIGhzbFRvUmdiKGgsIHMsIGwpIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZjtcbiAgICB2YXIgaHAgPSAoKGggJSAzNjApICsgMzYwKSAlIDM2MDtcbiAgICB2YXIgc3AgPSBudW1iZXJfdXRpbF8xLk51bWJlclV0aWwuY29uc3RyYWluKHMgLyAxMDAsIDAsIDEpO1xuICAgIHZhciBscCA9IG51bWJlcl91dGlsXzEuTnVtYmVyVXRpbC5jb25zdHJhaW4obCAvIDEwMCwgMCwgMSk7XG4gICAgdmFyIGMgPSAoMSAtIE1hdGguYWJzKDIgKiBscCAtIDEpKSAqIHNwO1xuICAgIHZhciB4ID0gYyAqICgxIC0gTWF0aC5hYnMoKChocCAvIDYwKSAlIDIpIC0gMSkpO1xuICAgIHZhciBtID0gbHAgLSBjIC8gMjtcbiAgICB2YXIgcnAsIGdwLCBicDtcbiAgICBpZiAoaHAgPj0gMCAmJiBocCA8IDYwKSB7XG4gICAgICAgIF9hID0gW2MsIHgsIDBdLCBycCA9IF9hWzBdLCBncCA9IF9hWzFdLCBicCA9IF9hWzJdO1xuICAgIH1cbiAgICBlbHNlIGlmIChocCA+PSA2MCAmJiBocCA8IDEyMCkge1xuICAgICAgICBfYiA9IFt4LCBjLCAwXSwgcnAgPSBfYlswXSwgZ3AgPSBfYlsxXSwgYnAgPSBfYlsyXTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaHAgPj0gMTIwICYmIGhwIDwgMTgwKSB7XG4gICAgICAgIF9jID0gWzAsIGMsIHhdLCBycCA9IF9jWzBdLCBncCA9IF9jWzFdLCBicCA9IF9jWzJdO1xuICAgIH1cbiAgICBlbHNlIGlmIChocCA+PSAxODAgJiYgaHAgPCAyNDApIHtcbiAgICAgICAgX2QgPSBbMCwgeCwgY10sIHJwID0gX2RbMF0sIGdwID0gX2RbMV0sIGJwID0gX2RbMl07XG4gICAgfVxuICAgIGVsc2UgaWYgKGhwID49IDI0MCAmJiBocCA8IDMwMCkge1xuICAgICAgICBfZSA9IFt4LCAwLCBjXSwgcnAgPSBfZVswXSwgZ3AgPSBfZVsxXSwgYnAgPSBfZVsyXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIF9mID0gW2MsIDAsIHhdLCBycCA9IF9mWzBdLCBncCA9IF9mWzFdLCBicCA9IF9mWzJdO1xuICAgIH1cbiAgICByZXR1cm4gWyhycCArIG0pICogMjU1LCAoZ3AgKyBtKSAqIDI1NSwgKGJwICsgbSkgKiAyNTVdO1xufVxuZnVuY3Rpb24gcmdiVG9Ic3YociwgZywgYikge1xuICAgIHZhciBycCA9IG51bWJlcl91dGlsXzEuTnVtYmVyVXRpbC5jb25zdHJhaW4ociAvIDI1NSwgMCwgMSk7XG4gICAgdmFyIGdwID0gbnVtYmVyX3V0aWxfMS5OdW1iZXJVdGlsLmNvbnN0cmFpbihnIC8gMjU1LCAwLCAxKTtcbiAgICB2YXIgYnAgPSBudW1iZXJfdXRpbF8xLk51bWJlclV0aWwuY29uc3RyYWluKGIgLyAyNTUsIDAsIDEpO1xuICAgIHZhciBjbWF4ID0gTWF0aC5tYXgocnAsIGdwLCBicCk7XG4gICAgdmFyIGNtaW4gPSBNYXRoLm1pbihycCwgZ3AsIGJwKTtcbiAgICB2YXIgZCA9IGNtYXggLSBjbWluO1xuICAgIHZhciBoO1xuICAgIGlmIChkID09PSAwKSB7XG4gICAgICAgIGggPSAwO1xuICAgIH1cbiAgICBlbHNlIGlmIChjbWF4ID09PSBycCkge1xuICAgICAgICBoID0gNjAgKiAoKCgoKGdwIC0gYnApIC8gZCkgJSA2KSArIDYpICUgNik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNtYXggPT09IGdwKSB7XG4gICAgICAgIGggPSA2MCAqICgoYnAgLSBycCkgLyBkICsgMik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBoID0gNjAgKiAoKHJwIC0gZ3ApIC8gZCArIDQpO1xuICAgIH1cbiAgICB2YXIgcyA9IGNtYXggPT09IDAgPyAwIDogZCAvIGNtYXg7XG4gICAgdmFyIHYgPSBjbWF4O1xuICAgIHJldHVybiBbaCwgcyAqIDEwMCwgdiAqIDEwMF07XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gaHN2VG9SZ2IoaCwgcywgdikge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mO1xuICAgIHZhciBocCA9IG51bWJlcl91dGlsXzEuTnVtYmVyVXRpbC5sb29wKGgsIDM2MCk7XG4gICAgdmFyIHNwID0gbnVtYmVyX3V0aWxfMS5OdW1iZXJVdGlsLmNvbnN0cmFpbihzIC8gMTAwLCAwLCAxKTtcbiAgICB2YXIgdnAgPSBudW1iZXJfdXRpbF8xLk51bWJlclV0aWwuY29uc3RyYWluKHYgLyAxMDAsIDAsIDEpO1xuICAgIHZhciBjID0gdnAgKiBzcDtcbiAgICB2YXIgeCA9IGMgKiAoMSAtIE1hdGguYWJzKCgoaHAgLyA2MCkgJSAyKSAtIDEpKTtcbiAgICB2YXIgbSA9IHZwIC0gYztcbiAgICB2YXIgcnAsIGdwLCBicDtcbiAgICBpZiAoaHAgPj0gMCAmJiBocCA8IDYwKSB7XG4gICAgICAgIF9hID0gW2MsIHgsIDBdLCBycCA9IF9hWzBdLCBncCA9IF9hWzFdLCBicCA9IF9hWzJdO1xuICAgIH1cbiAgICBlbHNlIGlmIChocCA+PSA2MCAmJiBocCA8IDEyMCkge1xuICAgICAgICBfYiA9IFt4LCBjLCAwXSwgcnAgPSBfYlswXSwgZ3AgPSBfYlsxXSwgYnAgPSBfYlsyXTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaHAgPj0gMTIwICYmIGhwIDwgMTgwKSB7XG4gICAgICAgIF9jID0gWzAsIGMsIHhdLCBycCA9IF9jWzBdLCBncCA9IF9jWzFdLCBicCA9IF9jWzJdO1xuICAgIH1cbiAgICBlbHNlIGlmIChocCA+PSAxODAgJiYgaHAgPCAyNDApIHtcbiAgICAgICAgX2QgPSBbMCwgeCwgY10sIHJwID0gX2RbMF0sIGdwID0gX2RbMV0sIGJwID0gX2RbMl07XG4gICAgfVxuICAgIGVsc2UgaWYgKGhwID49IDI0MCAmJiBocCA8IDMwMCkge1xuICAgICAgICBfZSA9IFt4LCAwLCBjXSwgcnAgPSBfZVswXSwgZ3AgPSBfZVsxXSwgYnAgPSBfZVsyXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIF9mID0gW2MsIDAsIHhdLCBycCA9IF9mWzBdLCBncCA9IF9mWzFdLCBicCA9IF9mWzJdO1xuICAgIH1cbiAgICByZXR1cm4gWyhycCArIG0pICogMjU1LCAoZ3AgKyBtKSAqIDI1NSwgKGJwICsgbSkgKiAyNTVdO1xufVxuZXhwb3J0cy5oc3ZUb1JnYiA9IGhzdlRvUmdiO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIG9wYXF1ZShjb21wcykge1xuICAgIHJldHVybiBbY29tcHNbMF0sIGNvbXBzWzFdLCBjb21wc1syXSwgMV07XG59XG5leHBvcnRzLm9wYXF1ZSA9IG9wYXF1ZTtcbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiB3aXRob3V0QWxwaGEoY29tcHMpIHtcbiAgICByZXR1cm4gW2NvbXBzWzBdLCBjb21wc1sxXSwgY29tcHNbMl1dO1xufVxuZXhwb3J0cy53aXRob3V0QWxwaGEgPSB3aXRob3V0QWxwaGE7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gd2l0aEFscGhhKGNvbXBzLCBhbHBoYSkge1xuICAgIHJldHVybiBbY29tcHNbMF0sIGNvbXBzWzFdLCBjb21wc1syXSwgYWxwaGFdO1xufVxuZXhwb3J0cy53aXRoQWxwaGEgPSB3aXRoQWxwaGE7XG52YXIgTU9ERV9DT05WRVJURVJfTUFQID0ge1xuICAgIGhzbDoge1xuICAgICAgICBoc2w6IGZ1bmN0aW9uIChoLCBzLCBsKSB7IHJldHVybiBbaCwgcywgbF07IH0sXG4gICAgICAgIGhzdjogZnVuY3Rpb24gKGgsIHMsIGwpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IGhzbFRvUmdiKGgsIHMsIGwpLCByID0gX2FbMF0sIGcgPSBfYVsxXSwgYiA9IF9hWzJdO1xuICAgICAgICAgICAgcmV0dXJuIHJnYlRvSHN2KHIsIGcsIGIpO1xuICAgICAgICB9LFxuICAgICAgICByZ2I6IGhzbFRvUmdiLFxuICAgIH0sXG4gICAgaHN2OiB7XG4gICAgICAgIGhzbDogZnVuY3Rpb24gKGgsIHMsIHYpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IGhzdlRvUmdiKGgsIHMsIHYpLCByID0gX2FbMF0sIGcgPSBfYVsxXSwgYiA9IF9hWzJdO1xuICAgICAgICAgICAgcmV0dXJuIHJnYlRvSHNsKHIsIGcsIGIpO1xuICAgICAgICB9LFxuICAgICAgICBoc3Y6IGZ1bmN0aW9uIChoLCBzLCB2KSB7IHJldHVybiBbaCwgcywgdl07IH0sXG4gICAgICAgIHJnYjogaHN2VG9SZ2IsXG4gICAgfSxcbiAgICByZ2I6IHtcbiAgICAgICAgaHNsOiByZ2JUb0hzbCxcbiAgICAgICAgaHN2OiByZ2JUb0hzdixcbiAgICAgICAgcmdiOiBmdW5jdGlvbiAociwgZywgYikgeyByZXR1cm4gW3IsIGcsIGJdOyB9LFxuICAgIH0sXG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRNb2RlKGNvbXBvbmVudHMsIGZyb21Nb2RlLCB0b01vZGUpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IE1PREVfQ09OVkVSVEVSX01BUFtmcm9tTW9kZV0pW3RvTW9kZV0uYXBwbHkoX2EsIGNvbXBvbmVudHMpO1xufVxuZXhwb3J0cy5jb252ZXJ0TW9kZSA9IGNvbnZlcnRNb2RlO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvbWlzYy9jb25zdGFudHMudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL21pc2MvY29uc3RhbnRzLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29uc3RhbnRzID0gdm9pZCAwO1xuZXhwb3J0cy5Db25zdGFudHMgPSB7XG4gICAgbW9uaXRvckRlZmF1bHRJbnRlcnZhbDogMjAwLFxufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvZGlzcG9zaW5nLXV0aWwudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvbWlzYy9kaXNwb3NpbmctdXRpbC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGlzcG9zZUVsZW1lbnQgPSB2b2lkIDA7XG5mdW5jdGlvbiBkaXNwb3NlRWxlbWVudChlbGVtKSB7XG4gICAgaWYgKGVsZW0gJiYgZWxlbS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIGVsZW0ucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChlbGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5leHBvcnRzLmRpc3Bvc2VFbGVtZW50ID0gZGlzcG9zZUVsZW1lbnQ7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2RvbS11dGlsLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL21pc2MvZG9tLXV0aWwudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZmluZE5leHRUYXJnZXQgPSBleHBvcnRzLmluZGV4T2ZDaGlsZEVsZW1lbnQgPSBleHBvcnRzLnJlbW92ZUVsZW1lbnQgPSBleHBvcnRzLmluc2VydEVsZW1lbnRBdCA9IGV4cG9ydHMuY3JlYXRlU3ZnSWNvbkVsZW1lbnQgPSBleHBvcnRzLmdldENhbnZhc0NvbnRleHQgPSBleHBvcnRzLmdldFdpbmRvd0RvY3VtZW50ID0gZXhwb3J0cy5zdXBwb3J0c1RvdWNoID0gZXhwb3J0cy5kaXNhYmxlVHJhbnNpdGlvblRlbXBvcmFyaWx5ID0gZXhwb3J0cy5mb3JjZVJlZmxvdyA9IGV4cG9ydHMuU1ZHX05TID0gdm9pZCAwO1xudmFyIHR5cGVfdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90eXBlLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvdHlwZS11dGlsLnRzXCIpO1xuZXhwb3J0cy5TVkdfTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuZnVuY3Rpb24gZm9yY2VSZWZsb3coZWxlbWVudCkge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11bnVzZWQtZXhwcmVzc2lvblxuICAgIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xufVxuZXhwb3J0cy5mb3JjZVJlZmxvdyA9IGZvcmNlUmVmbG93O1xuZnVuY3Rpb24gZGlzYWJsZVRyYW5zaXRpb25UZW1wb3JhcmlseShlbGVtZW50LCBjYWxsYmFjaykge1xuICAgIHZhciB0ID0gZWxlbWVudC5zdHlsZS50cmFuc2l0aW9uO1xuICAgIGVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbiA9ICdub25lJztcbiAgICBjYWxsYmFjaygpO1xuICAgIGVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbiA9IHQ7XG59XG5leHBvcnRzLmRpc2FibGVUcmFuc2l0aW9uVGVtcG9yYXJpbHkgPSBkaXNhYmxlVHJhbnNpdGlvblRlbXBvcmFyaWx5O1xuZnVuY3Rpb24gc3VwcG9ydHNUb3VjaChkb2N1bWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5vbnRvdWNoc3RhcnQgIT09IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMuc3VwcG9ydHNUb3VjaCA9IHN1cHBvcnRzVG91Y2g7XG5mdW5jdGlvbiBnZXRXaW5kb3dEb2N1bWVudCgpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZnVuY3Rpb24tY29uc3RydWN0b3JcbiAgICB2YXIgZ2xvYmFsT2JqID0gdHlwZV91dGlsXzEuVHlwZVV0aWwuZm9yY2VDYXN0KG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpKTtcbiAgICByZXR1cm4gZ2xvYmFsT2JqLmRvY3VtZW50O1xufVxuZXhwb3J0cy5nZXRXaW5kb3dEb2N1bWVudCA9IGdldFdpbmRvd0RvY3VtZW50O1xuZnVuY3Rpb24gaXNCcm93c2VyKCkge1xuICAgIC8vIFdlYnBhY2sgZGVmaW5lcyBwcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrL25vZGUtbGlicy1icm93c2VyXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2RlZnVuY3R6b21iaWUvbm9kZS1wcm9jZXNzXG4gICAgcmV0dXJuICEhcHJvY2Vzcy5icm93c2VyO1xufVxuZnVuY3Rpb24gZ2V0Q2FudmFzQ29udGV4dChjYW52YXNFbGVtZW50KSB7XG4gICAgLy8gSFRNTENhbnZhc0VsZW1lbnQucHJvdG90eXBlLmdldENvbnRleHQgaXMgbm90IGRlZmluZWQgb24gdGVzdGluZyBlbnZpcm9ubWVudFxuICAgIHJldHVybiBpc0Jyb3dzZXIoKSA/IGNhbnZhc0VsZW1lbnQuZ2V0Q29udGV4dCgnMmQnKSA6IG51bGw7XG59XG5leHBvcnRzLmdldENhbnZhc0NvbnRleHQgPSBnZXRDYW52YXNDb250ZXh0O1xuLy8gdHNsaW50OmRpc2FibGU6IG1heC1saW5lLWxlbmd0aFxudmFyIElDT05fSURfVE9fSU5ORVJfSFRNTF9NQVAgPSB7XG4gICAgcDJkcGFkOiAnPHBhdGggZD1cIk04IDJWMTRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+PHBhdGggZD1cIk0yIDhIMTRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+PGNpcmNsZSBjeD1cIjhcIiBjeT1cIjhcIiByPVwiMlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+Jyxcbn07XG5mdW5jdGlvbiBjcmVhdGVTdmdJY29uRWxlbWVudChkb2N1bWVudCwgaWNvbklkKSB7XG4gICAgdmFyIGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZXhwb3J0cy5TVkdfTlMsICdzdmcnKTtcbiAgICBlbGVtLmlubmVySFRNTCA9IElDT05fSURfVE9fSU5ORVJfSFRNTF9NQVBbaWNvbklkXTtcbiAgICByZXR1cm4gZWxlbTtcbn1cbmV4cG9ydHMuY3JlYXRlU3ZnSWNvbkVsZW1lbnQgPSBjcmVhdGVTdmdJY29uRWxlbWVudDtcbmZ1bmN0aW9uIGluc2VydEVsZW1lbnRBdChwYXJlbnRFbGVtZW50LCBlbGVtZW50LCBpbmRleCkge1xuICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGVsZW1lbnQsIHBhcmVudEVsZW1lbnQuY2hpbGRyZW5baW5kZXhdKTtcbn1cbmV4cG9ydHMuaW5zZXJ0RWxlbWVudEF0ID0gaW5zZXJ0RWxlbWVudEF0O1xuZnVuY3Rpb24gcmVtb3ZlRWxlbWVudChlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gICAgfVxufVxuZXhwb3J0cy5yZW1vdmVFbGVtZW50ID0gcmVtb3ZlRWxlbWVudDtcbmZ1bmN0aW9uIGluZGV4T2ZDaGlsZEVsZW1lbnQoZWxlbWVudCkge1xuICAgIHZhciBwYXJlbnRFbGVtID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgIGlmICghcGFyZW50RWxlbSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHZhciBjaGlsZHJlbiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHBhcmVudEVsZW0uY2hpbGRyZW4pO1xuICAgIHJldHVybiBjaGlsZHJlbi5pbmRleE9mKGVsZW1lbnQpO1xufVxuZXhwb3J0cy5pbmRleE9mQ2hpbGRFbGVtZW50ID0gaW5kZXhPZkNoaWxkRWxlbWVudDtcbmZ1bmN0aW9uIGZpbmROZXh0VGFyZ2V0KGV2KSB7XG4gICAgaWYgKGV2LnJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVfdXRpbF8xLlR5cGVVdGlsLmZvcmNlQ2FzdChldi5yZWxhdGVkVGFyZ2V0KTtcbiAgICB9XG4gICAgLy8gV29ya2Fyb3VuZCBmb3IgRmlyZWZveFxuICAgIGlmICgnZXhwbGljaXRPcmlnaW5hbFRhcmdldCcgaW4gZXYpIHtcbiAgICAgICAgcmV0dXJuIGV2LmV4cGxpY2l0T3JpZ2luYWxUYXJnZXQ7XG4gICAgfVxuICAgIC8vIFRPRE86IFdvcmthcm91bmQgZm9yIFNhZmFyaVxuICAgIC8vIFNhZmFyaSBkb2Vzbid0IHNldCBuZXh0IHRhcmdldCBmb3Igc29tZSBlbGVtZW50c1xuICAgIC8vIChlLmcuIGJ1dHRvbiwgaW5wdXRbdHlwZT1jaGVja2JveF0sIGV0Yy4pXG4gICAgcmV0dXJuIG51bGw7XG59XG5leHBvcnRzLmZpbmROZXh0VGFyZ2V0ID0gZmluZE5leHRUYXJnZXQ7XG5cbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbCh0aGlzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanNcIikpKVxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvZW1pdHRlci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL21pc2MvZW1pdHRlci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FbWl0dGVyID0gdm9pZCAwO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBFbWl0dGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEVtaXR0ZXIoKSB7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzXyA9IHt9O1xuICAgIH1cbiAgICBFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgdmFyIG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzX1tldmVudE5hbWVdO1xuICAgICAgICBpZiAoIW9ic2VydmVycykge1xuICAgICAgICAgICAgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnNfW2V2ZW50TmFtZV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBvYnNlcnZlcnMucHVzaCh7XG4gICAgICAgICAgICBoYW5kbGVyOiBoYW5kbGVyLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgIHZhciBvYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVyc19bZXZlbnROYW1lXTtcbiAgICAgICAgaWYgKG9ic2VydmVycykge1xuICAgICAgICAgICAgdGhpcy5vYnNlcnZlcnNfW2V2ZW50TmFtZV0gPSBvYnNlcnZlcnMuZmlsdGVyKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYnNlcnZlci5oYW5kbGVyICE9PSBoYW5kbGVyO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2ZW50TmFtZSwgZXZlbnQpIHtcbiAgICAgICAgdmFyIG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzX1tldmVudE5hbWVdO1xuICAgICAgICBpZiAoIW9ic2VydmVycykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuaGFuZGxlcihldmVudCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIEVtaXR0ZXI7XG59KCkpO1xuZXhwb3J0cy5FbWl0dGVyID0gRW1pdHRlcjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvbnVtYmVyLXV0aWwudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvbWlzYy9udW1iZXItdXRpbC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTnVtYmVyVXRpbCA9IHZvaWQgMDtcbmV4cG9ydHMuTnVtYmVyVXRpbCA9IHtcbiAgICBtYXA6IGZ1bmN0aW9uICh2YWx1ZSwgc3RhcnQxLCBlbmQxLCBzdGFydDIsIGVuZDIpIHtcbiAgICAgICAgdmFyIHAgPSAodmFsdWUgLSBzdGFydDEpIC8gKGVuZDEgLSBzdGFydDEpO1xuICAgICAgICByZXR1cm4gc3RhcnQyICsgcCAqIChlbmQyIC0gc3RhcnQyKTtcbiAgICB9LFxuICAgIGdldERlY2ltYWxEaWdpdHM6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgdGV4dCA9IFN0cmluZyh2YWx1ZS50b0ZpeGVkKDEwKSk7XG4gICAgICAgIHZhciBmcmFjID0gdGV4dC5zcGxpdCgnLicpWzFdO1xuICAgICAgICByZXR1cm4gZnJhYy5yZXBsYWNlKC8wKyQvLCAnJykubGVuZ3RoO1xuICAgIH0sXG4gICAgY29uc3RyYWluOiBmdW5jdGlvbiAodmFsdWUsIG1pbiwgbWF4KSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWx1ZSwgbWluKSwgbWF4KTtcbiAgICB9LFxuICAgIGxvb3A6IGZ1bmN0aW9uICh2YWx1ZSwgbWF4KSB7XG4gICAgICAgIHJldHVybiAoKHZhbHVlICUgbWF4KSArIG1heCkgJSBtYXg7XG4gICAgfSxcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3BhbmUtZXJyb3IudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9taXNjL3BhbmUtZXJyb3IudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGFuZUVycm9yID0gdm9pZCAwO1xuZnVuY3Rpb24gY3JlYXRlTWVzc2FnZShjb25maWcpIHtcbiAgICBpZiAoY29uZmlnLnR5cGUgPT09ICdhbHJlYWR5ZGlzcG9zZWQnKSB7XG4gICAgICAgIHJldHVybiAnVmlldyBoYXMgYmVlbiBhbHJlYWR5IGRpc3Bvc2VkJztcbiAgICB9XG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnZW1wdHl2YWx1ZScpIHtcbiAgICAgICAgcmV0dXJuIFwiVmFsdWUgaXMgZW1wdHkgZm9yIFwiICsgY29uZmlnLmNvbnRleHQua2V5O1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnR5cGUgPT09ICdpbnZhbGlkcGFyYW1zJykge1xuICAgICAgICByZXR1cm4gXCJJbnZhbGlkIHBhcmFtZXRlcnMgZm9yIFwiICsgY29uZmlnLmNvbnRleHQubmFtZTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnbm9tYXRjaGluZ2NvbnRyb2xsZXInKSB7XG4gICAgICAgIHJldHVybiBcIk5vIG1hdGNoaW5nIGNvbnRyb2xsZXIgZm9yIFwiICsgY29uZmlnLmNvbnRleHQua2V5O1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnR5cGUgPT09ICdzaG91bGRuZXZlcmhhcHBlbicpIHtcbiAgICAgICAgcmV0dXJuICdUaGlzIGVycm9yIHNob3VsZCBuZXZlciBoYXBwZW4nO1xuICAgIH1cbiAgICByZXR1cm4gJ1VuZXhwZWN0ZWQgZXJyb3InO1xufVxudmFyIFBhbmVFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQYW5lRXJyb3IoY29uZmlnKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGNyZWF0ZU1lc3NhZ2UoY29uZmlnKTtcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKHRoaXMubWVzc2FnZSkuc3RhY2s7XG4gICAgICAgIHRoaXMudHlwZSA9IGNvbmZpZy50eXBlO1xuICAgIH1cbiAgICBQYW5lRXJyb3IuYWxyZWFkeURpc3Bvc2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFBhbmVFcnJvcih7IHR5cGU6ICdhbHJlYWR5ZGlzcG9zZWQnIH0pO1xuICAgIH07XG4gICAgUGFuZUVycm9yLnNob3VsZE5ldmVySGFwcGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFBhbmVFcnJvcih7IHR5cGU6ICdzaG91bGRuZXZlcmhhcHBlbicgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gUGFuZUVycm9yO1xufSgpKTtcbmV4cG9ydHMuUGFuZUVycm9yID0gUGFuZUVycm9yO1xuUGFuZUVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcblBhbmVFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYW5lRXJyb3I7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3BvaW50ZXItaGFuZGxlci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvbWlzYy9wb2ludGVyLWhhbmRsZXIudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Qb2ludGVySGFuZGxlciA9IHZvaWQgMDtcbnZhciBEb21VdGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9kb20tdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9kb20tdXRpbC50c1wiKTtcbnZhciBlbWl0dGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2VtaXR0ZXIgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvZW1pdHRlci50c1wiKTtcbi8qKlxuICogQSB1dGlsaXR5IGNsYXNzIHRvIGhhbmRsZSBib3RoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBQb2ludGVySGFuZGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQb2ludGVySGFuZGxlcihkb2N1bWVudCwgZWxlbWVudCkge1xuICAgICAgICB0aGlzLm9uRG9jdW1lbnRNb3VzZU1vdmVfID0gdGhpcy5vbkRvY3VtZW50TW91c2VNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uRG9jdW1lbnRNb3VzZVVwXyA9IHRoaXMub25Eb2N1bWVudE1vdXNlVXBfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25Nb3VzZURvd25fID0gdGhpcy5vbk1vdXNlRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblRvdWNoTW92ZV8gPSB0aGlzLm9uVG91Y2hNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uVG91Y2hTdGFydF8gPSB0aGlzLm9uVG91Y2hTdGFydF8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50O1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgZW1pdHRlcl8xLkVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5wcmVzc2VkXyA9IGZhbHNlO1xuICAgICAgICBpZiAoRG9tVXRpbC5zdXBwb3J0c1RvdWNoKHRoaXMuZG9jdW1lbnQpKSB7XG4gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydF8pO1xuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlXyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd25fKTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbkRvY3VtZW50TW91c2VNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uRG9jdW1lbnRNb3VzZVVwXyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgUG9pbnRlckhhbmRsZXIucHJvdG90eXBlLmNvbXB1dGVQb3NpdGlvbl8gPSBmdW5jdGlvbiAob2Zmc2V0WCwgb2Zmc2V0WSkge1xuICAgICAgICB2YXIgcmVjdCA9IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHB4OiBvZmZzZXRYIC8gcmVjdC53aWR0aCxcbiAgICAgICAgICAgIHB5OiBvZmZzZXRZIC8gcmVjdC5oZWlnaHQsXG4gICAgICAgIH07XG4gICAgfTtcbiAgICBQb2ludGVySGFuZGxlci5wcm90b3R5cGUub25Nb3VzZURvd25fID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAvLyBQcmV2ZW50IG5hdGl2ZSB0ZXh0IHNlbGVjdGlvblxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIChfYSA9IGUuY3VycmVudFRhcmdldCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvY3VzKCk7XG4gICAgICAgIHRoaXMucHJlc3NlZF8gPSB0cnVlO1xuICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnZG93bicsIHtcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuY29tcHV0ZVBvc2l0aW9uXyhlLm9mZnNldFgsIGUub2Zmc2V0WSksXG4gICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUG9pbnRlckhhbmRsZXIucHJvdG90eXBlLm9uRG9jdW1lbnRNb3VzZU1vdmVfID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnByZXNzZWRfKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdpbiA9IHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgICAgIHZhciByZWN0ID0gdGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbW92ZScsIHtcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuY29tcHV0ZVBvc2l0aW9uXyhlLnBhZ2VYIC0gKCgod2luICYmIHdpbi5zY3JvbGxYKSB8fCAwKSArIHJlY3QubGVmdCksIGUucGFnZVkgLSAoKCh3aW4gJiYgd2luLnNjcm9sbFkpIHx8IDApICsgcmVjdC50b3ApKSxcbiAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBQb2ludGVySGFuZGxlci5wcm90b3R5cGUub25Eb2N1bWVudE1vdXNlVXBfID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnByZXNzZWRfKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVzc2VkXyA9IGZhbHNlO1xuICAgICAgICB2YXIgd2luID0gdGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICAgICAgdmFyIHJlY3QgPSB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCd1cCcsIHtcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuY29tcHV0ZVBvc2l0aW9uXyhlLnBhZ2VYIC0gKCgod2luICYmIHdpbi5zY3JvbGxYKSB8fCAwKSArIHJlY3QubGVmdCksIGUucGFnZVkgLSAoKCh3aW4gJiYgd2luLnNjcm9sbFkpIHx8IDApICsgcmVjdC50b3ApKSxcbiAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBQb2ludGVySGFuZGxlci5wcm90b3R5cGUub25Ub3VjaFN0YXJ0XyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIC8vIFByZXZlbnQgbmF0aXZlIHBhZ2Ugc2Nyb2xsXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdmFyIHRvdWNoID0gZS50YXJnZXRUb3VjaGVzWzBdO1xuICAgICAgICB2YXIgcmVjdCA9IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2Rvd24nLCB7XG4gICAgICAgICAgICBkYXRhOiB0aGlzLmNvbXB1dGVQb3NpdGlvbl8odG91Y2guY2xpZW50WCAtIHJlY3QubGVmdCwgdG91Y2guY2xpZW50WSAtIHJlY3QudG9wKSxcbiAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBQb2ludGVySGFuZGxlci5wcm90b3R5cGUub25Ub3VjaE1vdmVfID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIHRvdWNoID0gZS50YXJnZXRUb3VjaGVzWzBdO1xuICAgICAgICB2YXIgcmVjdCA9IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ21vdmUnLCB7XG4gICAgICAgICAgICBkYXRhOiB0aGlzLmNvbXB1dGVQb3NpdGlvbl8odG91Y2guY2xpZW50WCAtIHJlY3QubGVmdCwgdG91Y2guY2xpZW50WSAtIHJlY3QudG9wKSxcbiAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gUG9pbnRlckhhbmRsZXI7XG59KCkpO1xuZXhwb3J0cy5Qb2ludGVySGFuZGxlciA9IFBvaW50ZXJIYW5kbGVyO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvbWlzYy90aWNrZXIvaW50ZXJ2YWwudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL21pc2MvdGlja2VyL2ludGVydmFsLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSW50ZXJ2YWxUaWNrZXIgPSB2b2lkIDA7XG52YXIgZGlzcG9zYWJsZV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbW9kZWwvZGlzcG9zYWJsZSAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvZGlzcG9zYWJsZS50c1wiKTtcbnZhciBlbWl0dGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9lbWl0dGVyICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2VtaXR0ZXIudHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIEludGVydmFsVGlja2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEludGVydmFsVGlja2VyKGRvY3VtZW50LCBpbnRlcnZhbCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLm9uVGlja18gPSB0aGlzLm9uVGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgLy8gdGhpcy5vbldpbmRvd0JsdXJfID0gdGhpcy5vbldpbmRvd0JsdXJfLmJpbmQodGhpcyk7XG4gICAgICAgIC8vIHRoaXMub25XaW5kb3dGb2N1c18gPSB0aGlzLm9uV2luZG93Rm9jdXNfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZG9jXyA9IGRvY3VtZW50O1xuICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgZW1pdHRlcl8xLkVtaXR0ZXIoKTtcbiAgICAgICAgaWYgKGludGVydmFsIDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuaWRfID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciB3aW4gPSB0aGlzLmRvY18uZGVmYXVsdFZpZXc7XG4gICAgICAgICAgICBpZiAod2luKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZF8gPSB3aW4uc2V0SW50ZXJ2YWwodGhpcy5vblRpY2tfLCBpbnRlcnZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETzogU3RvcCBvbiBibHVyP1xuICAgICAgICAvLyBjb25zdCB3aW4gPSBkb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICAgICAgLy8gaWYgKHdpbikge1xuICAgICAgICAvLyAgIHdpbi5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vbldpbmRvd0JsdXJfKTtcbiAgICAgICAgLy8gICB3aW4uYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLm9uV2luZG93Rm9jdXNfKTtcbiAgICAgICAgLy8gfVxuICAgICAgICB0aGlzLmRpc3Bvc2FibGUgPSBuZXcgZGlzcG9zYWJsZV8xLkRpc3Bvc2FibGUoKTtcbiAgICAgICAgdGhpcy5kaXNwb3NhYmxlLmVtaXR0ZXIub24oJ2Rpc3Bvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMuaWRfICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHdpbiA9IF90aGlzLmRvY18uZGVmYXVsdFZpZXc7XG4gICAgICAgICAgICAgICAgaWYgKHdpbikge1xuICAgICAgICAgICAgICAgICAgICB3aW4uY2xlYXJJbnRlcnZhbChfdGhpcy5pZF8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF90aGlzLmlkXyA9IG51bGw7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBJbnRlcnZhbFRpY2tlci5wcm90b3R5cGUub25UaWNrXyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gaWYgKCF0aGlzLmFjdGl2ZV8pIHtcbiAgICAgICAgLy8gXHRyZXR1cm47XG4gICAgICAgIC8vIH1cbiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3RpY2snLCB7XG4gICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIEludGVydmFsVGlja2VyO1xufSgpKTtcbmV4cG9ydHMuSW50ZXJ2YWxUaWNrZXIgPSBJbnRlcnZhbFRpY2tlcjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvdGlja2VyL21hbnVhbC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL21pc2MvdGlja2VyL21hbnVhbC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NYW51YWxUaWNrZXIgPSB2b2lkIDA7XG52YXIgZGlzcG9zYWJsZV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbW9kZWwvZGlzcG9zYWJsZSAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvZGlzcG9zYWJsZS50c1wiKTtcbnZhciBlbWl0dGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9lbWl0dGVyICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2VtaXR0ZXIudHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIE1hbnVhbFRpY2tlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBNYW51YWxUaWNrZXIoKSB7XG4gICAgICAgIHRoaXMuZGlzcG9zYWJsZSA9IG5ldyBkaXNwb3NhYmxlXzEuRGlzcG9zYWJsZSgpO1xuICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgZW1pdHRlcl8xLkVtaXR0ZXIoKTtcbiAgICB9XG4gICAgTWFudWFsVGlja2VyLnByb3RvdHlwZS50aWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndGljaycsIHtcbiAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gTWFudWFsVGlja2VyO1xufSgpKTtcbmV4cG9ydHMuTWFudWFsVGlja2VyID0gTWFudWFsVGlja2VyO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvbWlzYy90eXBlLXV0aWwudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL21pc2MvdHlwZS11dGlsLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVHlwZVV0aWwgPSB2b2lkIDA7XG5leHBvcnRzLlR5cGVVdGlsID0ge1xuICAgIGZvcmNlQ2FzdDogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfSxcbiAgICBpc0VtcHR5OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBnZXRPckRlZmF1bHQ6IGZ1bmN0aW9uICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHJldHVybiAhZXhwb3J0cy5UeXBlVXRpbC5pc0VtcHR5KHZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xuICAgIH0sXG4gICAgZGVlcEVxdWFsc0FycmF5OiBmdW5jdGlvbiAoYTEsIGEyKSB7XG4gICAgICAgIGlmIChhMS5sZW5ndGggIT09IGEyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYTEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhMVtpXSAhPT0gYTJbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC9idXR0b24udHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9tb2RlbC9idXR0b24udHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQnV0dG9uID0gdm9pZCAwO1xudmFyIGVtaXR0ZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21pc2MvZW1pdHRlciAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9lbWl0dGVyLnRzXCIpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBCdXR0b24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQnV0dG9uKHRpdGxlKSB7XG4gICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBlbWl0dGVyXzEuRW1pdHRlcigpO1xuICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7XG4gICAgfVxuICAgIEJ1dHRvbi5wcm90b3R5cGUuY2xpY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjbGljaycsIHtcbiAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gQnV0dG9uO1xufSgpKTtcbmV4cG9ydHMuQnV0dG9uID0gQnV0dG9uO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvY29sb3IudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL21vZGVsL2NvbG9yLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29sb3IgPSB2b2lkIDA7XG52YXIgQ29sb3JNb2RlbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21pc2MvY29sb3ItbW9kZWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvY29sb3ItbW9kZWwudHNcIik7XG52YXIgbnVtYmVyX3V0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21pc2MvbnVtYmVyLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvbnVtYmVyLXV0aWwudHNcIik7XG52YXIgdHlwZV91dGlsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9taXNjL3R5cGUtdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy90eXBlLXV0aWwudHNcIik7XG52YXIgQ09OU1RSQUlOVF9NQVAgPSB7XG4gICAgaHNsOiBmdW5jdGlvbiAoY29tcHMpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG51bWJlcl91dGlsXzEuTnVtYmVyVXRpbC5sb29wKGNvbXBzWzBdLCAzNjApLFxuICAgICAgICAgICAgbnVtYmVyX3V0aWxfMS5OdW1iZXJVdGlsLmNvbnN0cmFpbihjb21wc1sxXSwgMCwgMTAwKSxcbiAgICAgICAgICAgIG51bWJlcl91dGlsXzEuTnVtYmVyVXRpbC5jb25zdHJhaW4oY29tcHNbMl0sIDAsIDEwMCksXG4gICAgICAgICAgICBudW1iZXJfdXRpbF8xLk51bWJlclV0aWwuY29uc3RyYWluKHR5cGVfdXRpbF8xLlR5cGVVdGlsLmdldE9yRGVmYXVsdChjb21wc1szXSwgMSksIDAsIDEpLFxuICAgICAgICBdO1xuICAgIH0sXG4gICAgaHN2OiBmdW5jdGlvbiAoY29tcHMpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG51bWJlcl91dGlsXzEuTnVtYmVyVXRpbC5sb29wKGNvbXBzWzBdLCAzNjApLFxuICAgICAgICAgICAgbnVtYmVyX3V0aWxfMS5OdW1iZXJVdGlsLmNvbnN0cmFpbihjb21wc1sxXSwgMCwgMTAwKSxcbiAgICAgICAgICAgIG51bWJlcl91dGlsXzEuTnVtYmVyVXRpbC5jb25zdHJhaW4oY29tcHNbMl0sIDAsIDEwMCksXG4gICAgICAgICAgICBudW1iZXJfdXRpbF8xLk51bWJlclV0aWwuY29uc3RyYWluKHR5cGVfdXRpbF8xLlR5cGVVdGlsLmdldE9yRGVmYXVsdChjb21wc1szXSwgMSksIDAsIDEpLFxuICAgICAgICBdO1xuICAgIH0sXG4gICAgcmdiOiBmdW5jdGlvbiAoY29tcHMpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG51bWJlcl91dGlsXzEuTnVtYmVyVXRpbC5jb25zdHJhaW4oY29tcHNbMF0sIDAsIDI1NSksXG4gICAgICAgICAgICBudW1iZXJfdXRpbF8xLk51bWJlclV0aWwuY29uc3RyYWluKGNvbXBzWzFdLCAwLCAyNTUpLFxuICAgICAgICAgICAgbnVtYmVyX3V0aWxfMS5OdW1iZXJVdGlsLmNvbnN0cmFpbihjb21wc1syXSwgMCwgMjU1KSxcbiAgICAgICAgICAgIG51bWJlcl91dGlsXzEuTnVtYmVyVXRpbC5jb25zdHJhaW4odHlwZV91dGlsXzEuVHlwZVV0aWwuZ2V0T3JEZWZhdWx0KGNvbXBzWzNdLCAxKSwgMCwgMSksXG4gICAgICAgIF07XG4gICAgfSxcbn07XG5mdW5jdGlvbiBpc1JnYkNvbG9yQ29tcG9uZW50KG9iaiwga2V5KSB7XG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IHR5cGVfdXRpbF8xLlR5cGVVdGlsLmlzRW1wdHkob2JqKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBrZXkgaW4gb2JqICYmIHR5cGVvZiBvYmpba2V5XSA9PT0gJ251bWJlcic7XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIENvbG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbG9yKGNvbXBzLCBtb2RlKSB7XG4gICAgICAgIHRoaXMubW9kZV8gPSBtb2RlO1xuICAgICAgICB0aGlzLmNvbXBzXyA9IENPTlNUUkFJTlRfTUFQW21vZGVdKGNvbXBzKTtcbiAgICB9XG4gICAgQ29sb3IuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGNvbXBzID0gJ2EnIGluIG9iaiA/IFtvYmouciwgb2JqLmcsIG9iai5iLCBvYmouYV0gOiBbb2JqLnIsIG9iai5nLCBvYmouYl07XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IoY29tcHMsICdyZ2InKTtcbiAgICB9O1xuICAgIENvbG9yLnRvUmdiYU9iamVjdCA9IGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgICByZXR1cm4gY29sb3IudG9SZ2JhT2JqZWN0KCk7XG4gICAgfTtcbiAgICBDb2xvci5pc1JnYkNvbG9yT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gKGlzUmdiQ29sb3JDb21wb25lbnQob2JqLCAncicpICYmXG4gICAgICAgICAgICBpc1JnYkNvbG9yQ29tcG9uZW50KG9iaiwgJ2cnKSAmJlxuICAgICAgICAgICAgaXNSZ2JDb2xvckNvbXBvbmVudChvYmosICdiJykpO1xuICAgIH07XG4gICAgQ29sb3IuaXNSZ2JhQ29sb3JPYmplY3QgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzUmdiQ29sb3JPYmplY3Qob2JqKSAmJiBpc1JnYkNvbG9yQ29tcG9uZW50KG9iaiwgJ2EnKTtcbiAgICB9O1xuICAgIENvbG9yLmlzQ29sb3JPYmplY3QgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzUmdiQ29sb3JPYmplY3Qob2JqKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvci5wcm90b3R5cGUsIFwibW9kZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZV87XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBDb2xvci5wcm90b3R5cGUuZ2V0Q29tcG9uZW50cyA9IGZ1bmN0aW9uIChvcHRfbW9kZSkge1xuICAgICAgICByZXR1cm4gQ29sb3JNb2RlbC53aXRoQWxwaGEoQ29sb3JNb2RlbC5jb252ZXJ0TW9kZShDb2xvck1vZGVsLndpdGhvdXRBbHBoYSh0aGlzLmNvbXBzXyksIHRoaXMubW9kZV8sIG9wdF9tb2RlIHx8IHRoaXMubW9kZV8pLCB0aGlzLmNvbXBzX1szXSk7XG4gICAgfTtcbiAgICBDb2xvci5wcm90b3R5cGUudG9SZ2JhT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmdiQ29tcHMgPSB0aGlzLmdldENvbXBvbmVudHMoJ3JnYicpO1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpvYmplY3QtbGl0ZXJhbC1zb3J0LWtleXNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHI6IHJnYkNvbXBzWzBdLFxuICAgICAgICAgICAgZzogcmdiQ29tcHNbMV0sXG4gICAgICAgICAgICBiOiByZ2JDb21wc1syXSxcbiAgICAgICAgICAgIGE6IHJnYkNvbXBzWzNdLFxuICAgICAgICB9O1xuICAgICAgICAvLyB0c2xpbnQ6ZW5hYmxlOm9iamVjdC1saXRlcmFsLXNvcnQta2V5c1xuICAgIH07XG4gICAgcmV0dXJuIENvbG9yO1xufSgpKTtcbmV4cG9ydHMuQ29sb3IgPSBDb2xvcjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL2Rpc3Bvc2FibGUudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvbW9kZWwvZGlzcG9zYWJsZS50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRGlzcG9zYWJsZSA9IHZvaWQgMDtcbnZhciBlbWl0dGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9taXNjL2VtaXR0ZXIgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvZW1pdHRlci50c1wiKTtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgRGlzcG9zYWJsZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEaXNwb3NhYmxlKCkge1xuICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgZW1pdHRlcl8xLkVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5kaXNwb3NlZF8gPSBmYWxzZTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERpc3Bvc2FibGUucHJvdG90eXBlLCBcImRpc3Bvc2VkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwb3NlZF87XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBEaXNwb3NhYmxlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5kaXNwb3NlZF8pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc3Bvc2VkXyA9IHRydWU7XG4gICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdkaXNwb3NlJywge1xuICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICByZXR1cm4gRGlzcG9zYWJsZTtcbn0oKSk7XG5leHBvcnRzLkRpc3Bvc2FibGUgPSBEaXNwb3NhYmxlO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvZm9sZGFibGUudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL21vZGVsL2ZvbGRhYmxlLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRm9sZGFibGUgPSB2b2lkIDA7XG52YXIgZW1pdHRlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWlzYy9lbWl0dGVyICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2VtaXR0ZXIudHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIEZvbGRhYmxlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEZvbGRhYmxlKCkge1xuICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgZW1pdHRlcl8xLkVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5leHBhbmRlZF8gPSBmYWxzZTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZvbGRhYmxlLnByb3RvdHlwZSwgXCJleHBhbmRlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRfO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHBhbmRlZCkge1xuICAgICAgICAgICAgdmFyIGNoYW5nZWQgPSB0aGlzLmV4cGFuZGVkXyAhPT0gZXhwYW5kZWQ7XG4gICAgICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kZWRfID0gZXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIEZvbGRhYmxlO1xufSgpKTtcbmV4cG9ydHMuRm9sZGFibGUgPSBGb2xkYWJsZTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL2ZvbGRlci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL21vZGVsL2ZvbGRlci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Gb2xkZXIgPSB2b2lkIDA7XG52YXIgZW1pdHRlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWlzYy9lbWl0dGVyICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2VtaXR0ZXIudHNcIik7XG52YXIgdHlwZV91dGlsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9taXNjL3R5cGUtdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy90eXBlLXV0aWwudHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIEZvbGRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBGb2xkZXIodGl0bGUsIGV4cGFuZGVkKSB7XG4gICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBlbWl0dGVyXzEuRW1pdHRlcigpO1xuICAgICAgICB0aGlzLmV4cGFuZGVkXyA9IGV4cGFuZGVkO1xuICAgICAgICB0aGlzLmV4cGFuZGVkSGVpZ2h0XyA9IG51bGw7XG4gICAgICAgIHRoaXMudGVtcG9yYXJ5RXhwYW5kZWRfID0gbnVsbDtcbiAgICAgICAgdGhpcy5zaG91bGRGaXhIZWlnaHRfID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZvbGRlci5wcm90b3R5cGUsIFwiZXhwYW5kZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cGFuZGVkXztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHZhciBjaGFuZ2VkID0gdGhpcy5leHBhbmRlZF8gIT09IGV4cGFuZGVkO1xuICAgICAgICAgICAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2JlZm9yZWNoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6ICdleHBhbmRlZCcsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkXyA9IGV4cGFuZGVkO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6ICdleHBhbmRlZCcsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRm9sZGVyLnByb3RvdHlwZSwgXCJ0ZW1wb3JhcnlFeHBhbmRlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGVtcG9yYXJ5RXhwYW5kZWRfO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHBhbmRlZCkge1xuICAgICAgICAgICAgdmFyIGNoYW5nZWQgPSB0aGlzLnRlbXBvcmFyeUV4cGFuZGVkXyAhPT0gZXhwYW5kZWQ7XG4gICAgICAgICAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnYmVmb3JlY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogJ3RlbXBvcmFyeUV4cGFuZGVkJyxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudGVtcG9yYXJ5RXhwYW5kZWRfID0gZXhwYW5kZWQ7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogJ3RlbXBvcmFyeUV4cGFuZGVkJyxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGb2xkZXIucHJvdG90eXBlLCBcImV4cGFuZGVkSGVpZ2h0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHBhbmRlZEhlaWdodF87XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGV4cGFuZGVkSGVpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgY2hhbmdlZCA9IHRoaXMuZXhwYW5kZWRIZWlnaHRfICE9PSBleHBhbmRlZEhlaWdodDtcbiAgICAgICAgICAgIGlmICghY2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdiZWZvcmVjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiAnZXhwYW5kZWRIZWlnaHQnLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5leHBhbmRlZEhlaWdodF8gPSBleHBhbmRlZEhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiAnZXhwYW5kZWRIZWlnaHQnLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZvbGRlci5wcm90b3R5cGUsIFwic2hvdWxkRml4SGVpZ2h0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaG91bGRGaXhIZWlnaHRfO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaG91bGRGaXhIZWlnaHQpIHtcbiAgICAgICAgICAgIHZhciBjaGFuZ2VkID0gdGhpcy5zaG91bGRGaXhIZWlnaHRfICE9PSBzaG91bGRGaXhIZWlnaHQ7XG4gICAgICAgICAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnYmVmb3JlY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogJ3Nob3VsZEZpeEhlaWdodCcsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNob3VsZEZpeEhlaWdodF8gPSBzaG91bGRGaXhIZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogJ3Nob3VsZEZpeEhlaWdodCcsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRm9sZGVyLnByb3RvdHlwZSwgXCJzdHlsZUV4cGFuZGVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZV91dGlsXzEuVHlwZVV0aWwuZ2V0T3JEZWZhdWx0KHRoaXMudGVtcG9yYXJ5RXhwYW5kZWQsIHRoaXMuZXhwYW5kZWQpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZvbGRlci5wcm90b3R5cGUsIFwic3R5bGVIZWlnaHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zdHlsZUV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZEZpeEhlaWdodCAmJiAhdHlwZV91dGlsXzEuVHlwZVV0aWwuaXNFbXB0eSh0aGlzLmV4cGFuZGVkSGVpZ2h0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cGFuZGVkSGVpZ2h0ICsgXCJweFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICdhdXRvJztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBGb2xkZXI7XG59KCkpO1xuZXhwb3J0cy5Gb2xkZXIgPSBGb2xkZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC9ncmFwaC1jdXJzb3IudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9tb2RlbC9ncmFwaC1jdXJzb3IudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR3JhcGhDdXJzb3IgPSB2b2lkIDA7XG52YXIgZW1pdHRlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWlzYy9lbWl0dGVyICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2VtaXR0ZXIudHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIEdyYXBoQ3Vyc29yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEdyYXBoQ3Vyc29yKCkge1xuICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgZW1pdHRlcl8xLkVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5pbmRleF8gPSAtMTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEdyYXBoQ3Vyc29yLnByb3RvdHlwZSwgXCJpbmRleFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXhfO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgdmFyIGNoYW5nZWQgPSB0aGlzLmluZGV4XyAhPT0gaW5kZXg7XG4gICAgICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhfID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gR3JhcGhDdXJzb3I7XG59KCkpO1xuZXhwb3J0cy5HcmFwaEN1cnNvciA9IEdyYXBoQ3Vyc29yO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvaW5wdXQtdmFsdWUudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL21vZGVsL2lucHV0LXZhbHVlLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSW5wdXRWYWx1ZSA9IHZvaWQgMDtcbnZhciBlbWl0dGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9taXNjL2VtaXR0ZXIgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvZW1pdHRlci50c1wiKTtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgSW5wdXRWYWx1ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBJbnB1dFZhbHVlKGluaXRpYWxWYWx1ZSwgY29uc3RyYWludCkge1xuICAgICAgICB0aGlzLmNvbnN0cmFpbnRfID0gY29uc3RyYWludDtcbiAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IGVtaXR0ZXJfMS5FbWl0dGVyKCk7XG4gICAgICAgIHRoaXMucmF3VmFsdWVfID0gaW5pdGlhbFZhbHVlO1xuICAgIH1cbiAgICBJbnB1dFZhbHVlLmVxdWFsc1ZhbHVlID0gZnVuY3Rpb24gKHYxLCB2Mikge1xuICAgICAgICByZXR1cm4gdjEgPT09IHYyO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KElucHV0VmFsdWUucHJvdG90eXBlLCBcImNvbnN0cmFpbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cmFpbnRfO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KElucHV0VmFsdWUucHJvdG90eXBlLCBcInJhd1ZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYXdWYWx1ZV87XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHJhd1ZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgY29uc3RyYWluZWRWYWx1ZSA9IHRoaXMuY29uc3RyYWludF9cbiAgICAgICAgICAgICAgICA/IHRoaXMuY29uc3RyYWludF8uY29uc3RyYWluKHJhd1ZhbHVlKVxuICAgICAgICAgICAgICAgIDogcmF3VmFsdWU7XG4gICAgICAgICAgICB2YXIgY2hhbmdlZCA9ICFJbnB1dFZhbHVlLmVxdWFsc1ZhbHVlKHRoaXMucmF3VmFsdWVfLCBjb25zdHJhaW5lZFZhbHVlKTtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yYXdWYWx1ZV8gPSBjb25zdHJhaW5lZFZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlOiBjb25zdHJhaW5lZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gSW5wdXRWYWx1ZTtcbn0oKSk7XG5leHBvcnRzLklucHV0VmFsdWUgPSBJbnB1dFZhbHVlO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvbGlzdC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9tb2RlbC9saXN0LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5MaXN0ID0gdm9pZCAwO1xudmFyIGVtaXR0ZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21pc2MvZW1pdHRlciAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9lbWl0dGVyLnRzXCIpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBMaXN0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIExpc3QoKSB7XG4gICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBlbWl0dGVyXzEuRW1pdHRlcigpO1xuICAgICAgICB0aGlzLml0ZW1zXyA9IFtdO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTGlzdC5wcm90b3R5cGUsIFwiaXRlbXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1zXztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIExpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChpdGVtLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gb3B0X2luZGV4ICE9PSB1bmRlZmluZWQgPyBvcHRfaW5kZXggOiB0aGlzLml0ZW1zXy5sZW5ndGg7XG4gICAgICAgIHRoaXMuaXRlbXNfLnNwbGljZShpbmRleCwgMCwgaXRlbSk7XG4gICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdhZGQnLCB7XG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIExpc3QucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuaXRlbXNfLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLml0ZW1zXy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgncmVtb3ZlJywge1xuICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBMaXN0O1xufSgpKTtcbmV4cG9ydHMuTGlzdCA9IExpc3Q7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC9tb2RlbC1zeW5jLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL21vZGVsL21vZGVsLXN5bmMudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbm5lY3QgPSB2b2lkIDA7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY29ubmVjdChfYSkge1xuICAgIHZhciBwcmltYXJ5ID0gX2EucHJpbWFyeSwgc2Vjb25kYXJ5ID0gX2Euc2Vjb25kYXJ5O1xuICAgIHByaW1hcnkuZW1pdHRlcihwcmltYXJ5LnZhbHVlKS5vbignY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBwcmltYXJ5LmFwcGx5KHByaW1hcnkudmFsdWUsIHNlY29uZGFyeS52YWx1ZSk7XG4gICAgfSk7XG4gICAgc2Vjb25kYXJ5LmVtaXR0ZXIoc2Vjb25kYXJ5LnZhbHVlKS5vbignY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWNvbmRhcnkuYXBwbHkoc2Vjb25kYXJ5LnZhbHVlLCBwcmltYXJ5LnZhbHVlKTtcbiAgICB9KTtcbiAgICBwcmltYXJ5LmFwcGx5KHByaW1hcnkudmFsdWUsIHNlY29uZGFyeS52YWx1ZSk7XG59XG5leHBvcnRzLmNvbm5lY3QgPSBjb25uZWN0O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvbW9uaXRvci12YWx1ZS50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9tb2RlbC9tb25pdG9yLXZhbHVlLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Nb25pdG9yVmFsdWUgPSB2b2lkIDA7XG52YXIgZW1pdHRlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWlzYy9lbWl0dGVyICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2VtaXR0ZXIudHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIE1vbml0b3JWYWx1ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBNb25pdG9yVmFsdWUodG90YWxDb3VudCkge1xuICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgZW1pdHRlcl8xLkVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5yYXdWYWx1ZXNfID0gW107XG4gICAgICAgIHRoaXMudG90YWxDb3VudF8gPSB0b3RhbENvdW50O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9uaXRvclZhbHVlLnByb3RvdHlwZSwgXCJyYXdWYWx1ZXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhd1ZhbHVlc187XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9uaXRvclZhbHVlLnByb3RvdHlwZSwgXCJ0b3RhbENvdW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b3RhbENvdW50XztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE1vbml0b3JWYWx1ZS5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKHJhd1ZhbHVlKSB7XG4gICAgICAgIHRoaXMucmF3VmFsdWVzXy5wdXNoKHJhd1ZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMucmF3VmFsdWVzXy5sZW5ndGggPiB0aGlzLnRvdGFsQ291bnRfKSB7XG4gICAgICAgICAgICB0aGlzLnJhd1ZhbHVlc18uc3BsaWNlKDAsIHRoaXMucmF3VmFsdWVzXy5sZW5ndGggLSB0aGlzLnRvdGFsQ291bnRfKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndXBkYXRlJywge1xuICAgICAgICAgICAgcmF3VmFsdWU6IHJhd1ZhbHVlLFxuICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBNb25pdG9yVmFsdWU7XG59KCkpO1xuZXhwb3J0cy5Nb25pdG9yVmFsdWUgPSBNb25pdG9yVmFsdWU7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC9waWNrZWQtY29sb3IudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9tb2RlbC9waWNrZWQtY29sb3IudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGlja2VkQ29sb3IgPSB2b2lkIDA7XG52YXIgZW1pdHRlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWlzYy9lbWl0dGVyICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2VtaXR0ZXIudHNcIik7XG52YXIgUGlja2VkQ29sb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUGlja2VkQ29sb3IodmFsdWUpIHtcbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlXyA9IHRoaXMub25WYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5tb2RlXyA9ICdyZ2InO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBlbWl0dGVyXzEuRW1pdHRlcigpO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGlja2VkQ29sb3IucHJvdG90eXBlLCBcIm1vZGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVfO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtb2RlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlXyA9PT0gbW9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubW9kZV8gPSBtb2RlO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6ICdtb2RlJyxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFBpY2tlZENvbG9yLnByb3RvdHlwZS5vblZhbHVlQ2hhbmdlXyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgIHByb3BlcnR5TmFtZTogJ3ZhbHVlJyxcbiAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gUGlja2VkQ29sb3I7XG59KCkpO1xuZXhwb3J0cy5QaWNrZWRDb2xvciA9IFBpY2tlZENvbG9yO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvcG9pbnQtMmQudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL21vZGVsL3BvaW50LTJkLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUG9pbnQyZCA9IHZvaWQgMDtcbnZhciBQb2ludDJkID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFBvaW50MmQoeCwgeSkge1xuICAgICAgICBpZiAoeCA9PT0gdm9pZCAwKSB7IHggPSAwOyB9XG4gICAgICAgIGlmICh5ID09PSB2b2lkIDApIHsgeSA9IDA7IH1cbiAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgdGhpcy55ID0geTtcbiAgICB9XG4gICAgUG9pbnQyZC5wcm90b3R5cGUuZ2V0Q29tcG9uZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLngsIHRoaXMueV07XG4gICAgfTtcbiAgICBQb2ludDJkLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHRoaXMueCxcbiAgICAgICAgICAgIHk6IHRoaXMueSxcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBQb2ludDJkO1xufSgpKTtcbmV4cG9ydHMuUG9pbnQyZCA9IFBvaW50MmQ7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC90YXJnZXQudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9tb2RlbC90YXJnZXQudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGFyZ2V0ID0gdm9pZCAwO1xudmFyIHR5cGVfdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWlzYy90eXBlLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvdHlwZS11dGlsLnRzXCIpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBUYXJnZXQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGFyZ2V0KG9iamVjdCwga2V5LCBvcHRfaWQpIHtcbiAgICAgICAgdGhpcy5vYmpfID0gb2JqZWN0O1xuICAgICAgICB0aGlzLmtleV8gPSBrZXk7XG4gICAgICAgIHRoaXMucHJlc2V0S2V5XyA9IHR5cGVfdXRpbF8xLlR5cGVVdGlsLmdldE9yRGVmYXVsdChvcHRfaWQsIGtleSk7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUYXJnZXQucHJvdG90eXBlLCBcImtleVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMua2V5XztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUYXJnZXQucHJvdG90eXBlLCBcInByZXNldEtleVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJlc2V0S2V5XztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFRhcmdldC5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2JqX1t0aGlzLmtleV9dO1xuICAgIH07XG4gICAgVGFyZ2V0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLm9ial9bdGhpcy5rZXlfXSA9IHZhbHVlO1xuICAgIH07XG4gICAgcmV0dXJuIFRhcmdldDtcbn0oKSk7XG5leHBvcnRzLlRhcmdldCA9IFRhcmdldDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL3VpLWNvbnRhaW5lci50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL21vZGVsL3VpLWNvbnRhaW5lci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5VaUNvbnRhaW5lciA9IHZvaWQgMDtcbnZhciBmb2xkZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2NvbnRyb2xsZXIvZm9sZGVyICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL2ZvbGRlci50c1wiKTtcbnZhciBpbnB1dF9iaW5kaW5nXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9jb250cm9sbGVyL2lucHV0LWJpbmRpbmcgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvaW5wdXQtYmluZGluZy50c1wiKTtcbnZhciBtb25pdG9yX2JpbmRpbmdfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2NvbnRyb2xsZXIvbW9uaXRvci1iaW5kaW5nICovIFwiLi9zcmMvbWFpbi9qcy9jb250cm9sbGVyL21vbml0b3ItYmluZGluZy50c1wiKTtcbnZhciBlbWl0dGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9taXNjL2VtaXR0ZXIgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvZW1pdHRlci50c1wiKTtcbnZhciBsaXN0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xpc3QgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL2xpc3QudHNcIik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIFVpQ29udGFpbmVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFVpQ29udGFpbmVyKCkge1xuICAgICAgICB0aGlzLm9uSXRlbUZvbGRlckZvbGRfID0gdGhpcy5vbkl0ZW1Gb2xkZXJGb2xkXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uTGlzdEl0ZW1MYXlvdXRfID0gdGhpcy5vbkxpc3RJdGVtTGF5b3V0Xy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uU3ViaXRlbUxheW91dF8gPSB0aGlzLm9uU3ViaXRlbUxheW91dF8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblN1Yml0ZW1Gb2xkZXJGb2xkXyA9IHRoaXMub25TdWJpdGVtRm9sZGVyRm9sZF8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblN1Yml0ZW1JbnB1dENoYW5nZV8gPSB0aGlzLm9uU3ViaXRlbUlucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uU3ViaXRlbU1vbml0b3JVcGRhdGVfID0gdGhpcy5vblN1Yml0ZW1Nb25pdG9yVXBkYXRlXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uSXRlbUlucHV0Q2hhbmdlXyA9IHRoaXMub25JdGVtSW5wdXRDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25MaXN0QWRkXyA9IHRoaXMub25MaXN0QWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uTGlzdEl0ZW1EaXNwb3NlXyA9IHRoaXMub25MaXN0SXRlbURpc3Bvc2VfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25MaXN0UmVtb3ZlXyA9IHRoaXMub25MaXN0UmVtb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uSXRlbU1vbml0b3JVcGRhdGVfID0gdGhpcy5vbkl0ZW1Nb25pdG9yVXBkYXRlXy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnVjTGlzdF8gPSBuZXcgbGlzdF8xLkxpc3QoKTtcbiAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IGVtaXR0ZXJfMS5FbWl0dGVyKCk7XG4gICAgICAgIHRoaXMudWNMaXN0Xy5lbWl0dGVyLm9uKCdhZGQnLCB0aGlzLm9uTGlzdEFkZF8pO1xuICAgICAgICB0aGlzLnVjTGlzdF8uZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vbkxpc3RSZW1vdmVfKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFVpQ29udGFpbmVyLnByb3RvdHlwZSwgXCJpdGVtc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudWNMaXN0Xy5pdGVtcztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFVpQ29udGFpbmVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodWMsIG9wdF9pbmRleCkge1xuICAgICAgICB0aGlzLnVjTGlzdF8uYWRkKHVjLCBvcHRfaW5kZXgpO1xuICAgIH07XG4gICAgVWlDb250YWluZXIucHJvdG90eXBlLm9uTGlzdEFkZF8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgdmFyIHVjID0gZXYuaXRlbTtcbiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2FkZCcsIHtcbiAgICAgICAgICAgIGluZGV4OiBldi5pbmRleCxcbiAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIHVpQ29udHJvbGxlcjogdWMsXG4gICAgICAgIH0pO1xuICAgICAgICB1Yy52aWV3TW9kZWwuZW1pdHRlci5vbignZGlzcG9zZScsIHRoaXMub25MaXN0SXRlbURpc3Bvc2VfKTtcbiAgICAgICAgdWMudmlld01vZGVsLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25MaXN0SXRlbUxheW91dF8pO1xuICAgICAgICBpZiAodWMgaW5zdGFuY2VvZiBpbnB1dF9iaW5kaW5nXzEuSW5wdXRCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgdmFyIGVtaXR0ZXIgPSB1Yy5iaW5kaW5nLmVtaXR0ZXI7XG4gICAgICAgICAgICAvLyBUT0RPOiBGaW5kIG1vcmUgdHlwZS1zYWZlIHdheVxuICAgICAgICAgICAgZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkl0ZW1JbnB1dENoYW5nZV8pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVjIGluc3RhbmNlb2YgbW9uaXRvcl9iaW5kaW5nXzEuTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKSB7XG4gICAgICAgICAgICB2YXIgZW1pdHRlciA9IHVjLmJpbmRpbmcuZW1pdHRlcjtcbiAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgbW9yZSB0eXBlLXNhZmUgd2F5XG4gICAgICAgICAgICBlbWl0dGVyLm9uKCd1cGRhdGUnLCB0aGlzLm9uSXRlbU1vbml0b3JVcGRhdGVfKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1YyBpbnN0YW5jZW9mIGZvbGRlcl8xLkZvbGRlckNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHVjLmZvbGRlci5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uSXRlbUZvbGRlckZvbGRfKTtcbiAgICAgICAgICAgIHZhciBlbWl0dGVyID0gdWMudWlDb250YWluZXIuZW1pdHRlcjtcbiAgICAgICAgICAgIGVtaXR0ZXIub24oJ2l0ZW1mb2xkJywgdGhpcy5vblN1Yml0ZW1Gb2xkZXJGb2xkXyk7XG4gICAgICAgICAgICBlbWl0dGVyLm9uKCdpdGVtbGF5b3V0JywgdGhpcy5vblN1Yml0ZW1MYXlvdXRfKTtcbiAgICAgICAgICAgIGVtaXR0ZXIub24oJ2lucHV0Y2hhbmdlJywgdGhpcy5vblN1Yml0ZW1JbnB1dENoYW5nZV8pO1xuICAgICAgICAgICAgZW1pdHRlci5vbignbW9uaXRvcnVwZGF0ZScsIHRoaXMub25TdWJpdGVtTW9uaXRvclVwZGF0ZV8pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBVaUNvbnRhaW5lci5wcm90b3R5cGUub25MaXN0UmVtb3ZlXyA9IGZ1bmN0aW9uIChfKSB7XG4gICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdyZW1vdmUnLCB7XG4gICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgVWlDb250YWluZXIucHJvdG90eXBlLm9uTGlzdEl0ZW1MYXlvdXRfID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgIGlmIChldi5wcm9wZXJ0eU5hbWUgPT09ICdoaWRkZW4nIHx8IGV2LnByb3BlcnR5TmFtZSA9PT0gJ3Bvc2l0aW9ucycpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdpdGVtbGF5b3V0Jywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBVaUNvbnRhaW5lci5wcm90b3R5cGUub25MaXN0SXRlbURpc3Bvc2VfID0gZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGRpc3Bvc2VkVWNzID0gdGhpcy51Y0xpc3RfLml0ZW1zLmZpbHRlcihmdW5jdGlvbiAodWMpIHtcbiAgICAgICAgICAgIHJldHVybiB1Yy52aWV3TW9kZWwuZGlzcG9zZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBkaXNwb3NlZFVjcy5mb3JFYWNoKGZ1bmN0aW9uICh1Yykge1xuICAgICAgICAgICAgX3RoaXMudWNMaXN0Xy5yZW1vdmUodWMpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFVpQ29udGFpbmVyLnByb3RvdHlwZS5vbkl0ZW1JbnB1dENoYW5nZV8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2lucHV0Y2hhbmdlJywge1xuICAgICAgICAgICAgaW5wdXRCaW5kaW5nOiBldi5zZW5kZXIsXG4gICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB2YWx1ZTogZXYucmF3VmFsdWUsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgVWlDb250YWluZXIucHJvdG90eXBlLm9uSXRlbU1vbml0b3JVcGRhdGVfID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdtb25pdG9ydXBkYXRlJywge1xuICAgICAgICAgICAgbW9uaXRvckJpbmRpbmc6IGV2LnNlbmRlcixcbiAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIHZhbHVlOiBldi5yYXdWYWx1ZSxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBVaUNvbnRhaW5lci5wcm90b3R5cGUub25JdGVtRm9sZGVyRm9sZF8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgaWYgKGV2LnByb3BlcnR5TmFtZSAhPT0gJ2V4cGFuZGVkJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdpdGVtZm9sZCcsIHtcbiAgICAgICAgICAgIGV4cGFuZGVkOiBldi5zZW5kZXIuZXhwYW5kZWQsXG4gICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgVWlDb250YWluZXIucHJvdG90eXBlLm9uU3ViaXRlbUxheW91dF8gPSBmdW5jdGlvbiAoXykge1xuICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnaXRlbWxheW91dCcsIHtcbiAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBVaUNvbnRhaW5lci5wcm90b3R5cGUub25TdWJpdGVtSW5wdXRDaGFuZ2VfID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdpbnB1dGNoYW5nZScsIHtcbiAgICAgICAgICAgIGlucHV0QmluZGluZzogZXYuaW5wdXRCaW5kaW5nLFxuICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgdmFsdWU6IGV2LnZhbHVlLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFVpQ29udGFpbmVyLnByb3RvdHlwZS5vblN1Yml0ZW1Nb25pdG9yVXBkYXRlXyA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbW9uaXRvcnVwZGF0ZScsIHtcbiAgICAgICAgICAgIG1vbml0b3JCaW5kaW5nOiBldi5tb25pdG9yQmluZGluZyxcbiAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIHZhbHVlOiBldi52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBVaUNvbnRhaW5lci5wcm90b3R5cGUub25TdWJpdGVtRm9sZGVyRm9sZF8gPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2l0ZW1mb2xkJywge1xuICAgICAgICAgICAgZXhwYW5kZWQ6IGV2LmV4cGFuZGVkLFxuICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBVaUNvbnRhaW5lcjtcbn0oKSk7XG5leHBvcnRzLlVpQ29udGFpbmVyID0gVWlDb250YWluZXI7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC92aWV3LW1vZGVsLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL21vZGVsL3ZpZXctbW9kZWwudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZpZXdNb2RlbCA9IHZvaWQgMDtcbnZhciBlbWl0dGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9taXNjL2VtaXR0ZXIgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvZW1pdHRlci50c1wiKTtcbnZhciB0eXBlX3V0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21pc2MvdHlwZS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3R5cGUtdXRpbC50c1wiKTtcbnZhciBkaXNwb3NhYmxlXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2Rpc3Bvc2FibGUgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL2Rpc3Bvc2FibGUudHNcIik7XG52YXIgVmlld01vZGVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFZpZXdNb2RlbCgpIHtcbiAgICAgICAgdGhpcy5vbkRpc3Bvc2VfID0gdGhpcy5vbkRpc3Bvc2VfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBlbWl0dGVyXzEuRW1pdHRlcigpO1xuICAgICAgICB0aGlzLnBvc2l0aW9uc18gPSBbXTtcbiAgICAgICAgdGhpcy5oaWRkZW5fID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGlzcG9zYWJsZV8gPSBuZXcgZGlzcG9zYWJsZV8xLkRpc3Bvc2FibGUoKTtcbiAgICAgICAgdGhpcy5kaXNwb3NhYmxlXy5lbWl0dGVyLm9uKCdkaXNwb3NlJywgdGhpcy5vbkRpc3Bvc2VfKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZpZXdNb2RlbC5wcm90b3R5cGUsIFwiaGlkZGVuXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oaWRkZW5fO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChoaWRkZW4pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhpZGRlbl8gPT09IGhpZGRlbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaGlkZGVuXyA9IGhpZGRlbjtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWaWV3TW9kZWwucHJvdG90eXBlLCBcInBvc2l0aW9uc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb25zXztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zaXRpb25zKSB7XG4gICAgICAgICAgICBpZiAodHlwZV91dGlsXzEuVHlwZVV0aWwuZGVlcEVxdWFsc0FycmF5KHBvc2l0aW9ucywgdGhpcy5wb3NpdGlvbnNfKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25zXyA9IHBvc2l0aW9ucztcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiAncG9zaXRpb25zJyxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWaWV3TW9kZWwucHJvdG90eXBlLCBcImRpc3Bvc2VkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwb3NhYmxlXy5kaXNwb3NlZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFZpZXdNb2RlbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5kaXNwb3NhYmxlXy5kaXNwb3NlKCk7XG4gICAgfTtcbiAgICBWaWV3TW9kZWwucHJvdG90eXBlLm9uRGlzcG9zZV8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdkaXNwb3NlJywge1xuICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBWaWV3TW9kZWw7XG59KCkpO1xuZXhwb3J0cy5WaWV3TW9kZWwgPSBWaWV3TW9kZWw7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC92aWV3LXBvc2l0aW9ucy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvbW9kZWwvdmlldy1wb3NpdGlvbnMudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRBbGwgPSB2b2lkIDA7XG5mdW5jdGlvbiBnZXRBbGwoKSB7XG4gICAgcmV0dXJuIFsnZmlyc3QnLCAnbGFzdCddO1xufVxuZXhwb3J0cy5nZXRBbGwgPSBnZXRBbGw7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9wYXJzZXIvYW55LXBvaW50LTJkLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL3BhcnNlci9hbnktcG9pbnQtMmQudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFueVBvaW50MmRQYXJzZXIgPSB2b2lkIDA7XG52YXIgdHlwZV91dGlsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9taXNjL3R5cGUtdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy90eXBlLXV0aWwudHNcIik7XG52YXIgcG9pbnRfMmRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21vZGVsL3BvaW50LTJkICovIFwiLi9zcmMvbWFpbi9qcy9tb2RlbC9wb2ludC0yZC50c1wiKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnRzLkFueVBvaW50MmRQYXJzZXIgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKHR5cGVfdXRpbF8xLlR5cGVVdGlsLmlzRW1wdHkob2JqKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIHggPSBvYmoueDtcbiAgICB2YXIgeSA9IG9iai55O1xuICAgIGlmICh0eXBlb2YgeCAhPT0gJ251bWJlcicgfHwgdHlwZW9mIHkgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHBvaW50XzJkXzEuUG9pbnQyZCh4LCB5KTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9wYXJzZXIvbnVtYmVyLWNvbG9yLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL3BhcnNlci9udW1iZXItY29sb3IudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJnYmFQYXJzZXIgPSBleHBvcnRzLlJnYlBhcnNlciA9IHZvaWQgMDtcbnZhciBudW1iZXJfdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWlzYy9udW1iZXItdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9udW1iZXItdXRpbC50c1wiKTtcbnZhciBjb2xvcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbW9kZWwvY29sb3IgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL2NvbG9yLnRzXCIpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydHMuUmdiUGFyc2VyID0gZnVuY3Rpb24gKG51bSkge1xuICAgIHJldHVybiBuZXcgY29sb3JfMS5Db2xvcihbKG51bSA+PiAxNikgJiAweGZmLCAobnVtID4+IDgpICYgMHhmZiwgbnVtICYgMHhmZl0sICdyZ2InKTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0cy5SZ2JhUGFyc2VyID0gZnVuY3Rpb24gKG51bSkge1xuICAgIHJldHVybiBuZXcgY29sb3JfMS5Db2xvcihbXG4gICAgICAgIChudW0gPj4gMjQpICYgMHhmZixcbiAgICAgICAgKG51bSA+PiAxNikgJiAweGZmLFxuICAgICAgICAobnVtID4+IDgpICYgMHhmZixcbiAgICAgICAgbnVtYmVyX3V0aWxfMS5OdW1iZXJVdGlsLm1hcChudW0gJiAweGZmLCAwLCAyNTUsIDAsIDEpLFxuICAgIF0sICdyZ2InKTtcbn07XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy9wYXJzZXIvc3RyaW5nLWNvbG9yLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL3BhcnNlci9zdHJpbmctY29sb3IudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmhhc0FscGhhQ29tcG9uZW50ID0gZXhwb3J0cy5Db21wb3NpdGVQYXJzZXIgPSBleHBvcnRzLmdldE5vdGF0aW9uID0gdm9pZCAwO1xudmFyIG51bWJlcl91dGlsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9taXNjL251bWJlci11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL251bWJlci11dGlsLnRzXCIpO1xudmFyIGNvbG9yXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tb2RlbC9jb2xvciAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvY29sb3IudHNcIik7XG5mdW5jdGlvbiBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZSh0ZXh0LCBtYXhWYWx1ZSkge1xuICAgIHZhciBtID0gdGV4dC5tYXRjaCgvXiguKyklJC8pO1xuICAgIGlmICghbSkge1xuICAgICAgICByZXR1cm4gTWF0aC5taW4ocGFyc2VGbG9hdCh0ZXh0KSwgbWF4VmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5taW4ocGFyc2VGbG9hdChtWzFdKSAqIDAuMDEgKiBtYXhWYWx1ZSwgbWF4VmFsdWUpO1xufVxudmFyIEFOR0xFX1RPX0RFR19NQVAgPSB7XG4gICAgZGVnOiBmdW5jdGlvbiAoYW5nbGUpIHsgcmV0dXJuIGFuZ2xlOyB9LFxuICAgIGdyYWQ6IGZ1bmN0aW9uIChhbmdsZSkgeyByZXR1cm4gKGFuZ2xlICogMzYwKSAvIDQwMDsgfSxcbiAgICByYWQ6IGZ1bmN0aW9uIChhbmdsZSkgeyByZXR1cm4gKGFuZ2xlICogMzYwKSAvICgyICogTWF0aC5QSSk7IH0sXG4gICAgdHVybjogZnVuY3Rpb24gKGFuZ2xlKSB7IHJldHVybiBhbmdsZSAqIDM2MDsgfSxcbn07XG5mdW5jdGlvbiBwYXJzZUNzc051bWJlck9yQW5nbGUodGV4dCkge1xuICAgIHZhciBtID0gdGV4dC5tYXRjaCgvXihbMC05Ll0rPykoZGVnfGdyYWR8cmFkfHR1cm4pJC8pO1xuICAgIGlmICghbSkge1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh0ZXh0KTtcbiAgICB9XG4gICAgdmFyIGFuZ2xlID0gcGFyc2VGbG9hdChtWzFdKTtcbiAgICB2YXIgdW5pdCA9IG1bMl07XG4gICAgcmV0dXJuIEFOR0xFX1RPX0RFR19NQVBbdW5pdF0oYW5nbGUpO1xufVxudmFyIE5PVEFUSU9OX1RPX1BBUlNFUl9NQVAgPSB7XG4gICAgJ2Z1bmMucmdiJzogZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgdmFyIG0gPSB0ZXh0Lm1hdGNoKC9ecmdiXFwoXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccypcXCkkLyk7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBzID0gW1xuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsxXSwgMjU1KSxcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bMl0sIDI1NSksXG4gICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzNdLCAyNTUpLFxuICAgICAgICBdO1xuICAgICAgICBpZiAoaXNOYU4oY29tcHNbMF0pIHx8IGlzTmFOKGNvbXBzWzFdKSB8fCBpc05hTihjb21wc1syXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgY29sb3JfMS5Db2xvcihjb21wcywgJ3JnYicpO1xuICAgIH0sXG4gICAgJ2Z1bmMucmdiYSc6IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIHZhciBtID0gdGV4dC5tYXRjaCgvXnJnYmFcXChcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqXFwpJC8pO1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wcyA9IFtcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bMV0sIDI1NSksXG4gICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzJdLCAyNTUpLFxuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVszXSwgMjU1KSxcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bNF0sIDEpLFxuICAgICAgICBdO1xuICAgICAgICBpZiAoaXNOYU4oY29tcHNbMF0pIHx8XG4gICAgICAgICAgICBpc05hTihjb21wc1sxXSkgfHxcbiAgICAgICAgICAgIGlzTmFOKGNvbXBzWzJdKSB8fFxuICAgICAgICAgICAgaXNOYU4oY29tcHNbM10pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IGNvbG9yXzEuQ29sb3IoY29tcHMsICdyZ2InKTtcbiAgICB9LFxuICAgICdmdW5jLmhzbCc6IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIHZhciBtID0gdGV4dC5tYXRjaCgvXmhzbFxcKFxccyooWzAtOUEtRmEtZi5dKyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccypcXCkkLyk7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBzID0gW1xuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPckFuZ2xlKG1bMV0pLFxuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsyXSwgMTAwKSxcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bM10sIDEwMCksXG4gICAgICAgIF07XG4gICAgICAgIGlmIChpc05hTihjb21wc1swXSkgfHwgaXNOYU4oY29tcHNbMV0pIHx8IGlzTmFOKGNvbXBzWzJdKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBjb2xvcl8xLkNvbG9yKGNvbXBzLCAnaHNsJyk7XG4gICAgfSxcbiAgICAnZnVuYy5oc2xhJzogZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgdmFyIG0gPSB0ZXh0Lm1hdGNoKC9eaHNsYVxcKFxccyooWzAtOUEtRmEtZi5dKyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKlxcKSQvKTtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcHMgPSBbXG4gICAgICAgICAgICBwYXJzZUNzc051bWJlck9yQW5nbGUobVsxXSksXG4gICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzJdLCAxMDApLFxuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVszXSwgMTAwKSxcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bNF0sIDEpLFxuICAgICAgICBdO1xuICAgICAgICBpZiAoaXNOYU4oY29tcHNbMF0pIHx8XG4gICAgICAgICAgICBpc05hTihjb21wc1sxXSkgfHxcbiAgICAgICAgICAgIGlzTmFOKGNvbXBzWzJdKSB8fFxuICAgICAgICAgICAgaXNOYU4oY29tcHNbM10pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IGNvbG9yXzEuQ29sb3IoY29tcHMsICdoc2wnKTtcbiAgICB9LFxuICAgICdoZXgucmdiJzogZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgdmFyIG1ScmdnYmIgPSB0ZXh0Lm1hdGNoKC9eIyhbMC05QS1GYS1mXSkoWzAtOUEtRmEtZl0pKFswLTlBLUZhLWZdKSQvKTtcbiAgICAgICAgaWYgKG1ScmdnYmIpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgY29sb3JfMS5Db2xvcihbXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQobVJyZ2diYlsxXSArIG1ScmdnYmJbMV0sIDE2KSxcbiAgICAgICAgICAgICAgICBwYXJzZUludChtUnJnZ2JiWzJdICsgbVJyZ2diYlsyXSwgMTYpLFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KG1ScmdnYmJbM10gKyBtUnJnZ2JiWzNdLCAxNiksXG4gICAgICAgICAgICBdLCAncmdiJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1SZ2IgPSB0ZXh0Lm1hdGNoKC9eIyhbMC05QS1GYS1mXXsyfSkoWzAtOUEtRmEtZl17Mn0pKFswLTlBLUZhLWZdezJ9KSQvKTtcbiAgICAgICAgaWYgKG1SZ2IpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgY29sb3JfMS5Db2xvcihbcGFyc2VJbnQobVJnYlsxXSwgMTYpLCBwYXJzZUludChtUmdiWzJdLCAxNiksIHBhcnNlSW50KG1SZ2JbM10sIDE2KV0sICdyZ2InKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgICdoZXgucmdiYSc6IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIHZhciBtUnJnZ2JiID0gdGV4dC5tYXRjaCgvXiM/KFswLTlBLUZhLWZdKShbMC05QS1GYS1mXSkoWzAtOUEtRmEtZl0pKFswLTlBLUZhLWZdKSQvKTtcbiAgICAgICAgaWYgKG1ScmdnYmIpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgY29sb3JfMS5Db2xvcihbXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQobVJyZ2diYlsxXSArIG1ScmdnYmJbMV0sIDE2KSxcbiAgICAgICAgICAgICAgICBwYXJzZUludChtUnJnZ2JiWzJdICsgbVJyZ2diYlsyXSwgMTYpLFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KG1ScmdnYmJbM10gKyBtUnJnZ2JiWzNdLCAxNiksXG4gICAgICAgICAgICAgICAgbnVtYmVyX3V0aWxfMS5OdW1iZXJVdGlsLm1hcChwYXJzZUludChtUnJnZ2JiWzRdICsgbVJyZ2diYls0XSwgMTYpLCAwLCAyNTUsIDAsIDEpLFxuICAgICAgICAgICAgXSwgJ3JnYicpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtUmdiID0gdGV4dC5tYXRjaCgvXiM/KFswLTlBLUZhLWZdezJ9KShbMC05QS1GYS1mXXsyfSkoWzAtOUEtRmEtZl17Mn0pKFswLTlBLUZhLWZdezJ9KSQvKTtcbiAgICAgICAgaWYgKG1SZ2IpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgY29sb3JfMS5Db2xvcihbXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQobVJnYlsxXSwgMTYpLFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbMl0sIDE2KSxcbiAgICAgICAgICAgICAgICBwYXJzZUludChtUmdiWzNdLCAxNiksXG4gICAgICAgICAgICAgICAgbnVtYmVyX3V0aWxfMS5OdW1iZXJVdGlsLm1hcChwYXJzZUludChtUmdiWzRdLCAxNiksIDAsIDI1NSwgMCwgMSksXG4gICAgICAgICAgICBdLCAncmdiJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gZ2V0Tm90YXRpb24odGV4dCkge1xuICAgIHZhciBub3RhdGlvbnMgPSBPYmplY3Qua2V5cyhOT1RBVElPTl9UT19QQVJTRVJfTUFQKTtcbiAgICByZXR1cm4gbm90YXRpb25zLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBub3RhdGlvbikge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdWJwYXJzZXIgPSBOT1RBVElPTl9UT19QQVJTRVJfTUFQW25vdGF0aW9uXTtcbiAgICAgICAgcmV0dXJuIHN1YnBhcnNlcih0ZXh0KSA/IG5vdGF0aW9uIDogbnVsbDtcbiAgICB9LCBudWxsKTtcbn1cbmV4cG9ydHMuZ2V0Tm90YXRpb24gPSBnZXROb3RhdGlvbjtcbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnRzLkNvbXBvc2l0ZVBhcnNlciA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgdmFyIG5vdGF0aW9uID0gZ2V0Tm90YXRpb24odGV4dCk7XG4gICAgcmV0dXJuIG5vdGF0aW9uID8gTk9UQVRJT05fVE9fUEFSU0VSX01BUFtub3RhdGlvbl0odGV4dCkgOiBudWxsO1xufTtcbmZ1bmN0aW9uIGhhc0FscGhhQ29tcG9uZW50KG5vdGF0aW9uKSB7XG4gICAgcmV0dXJuIChub3RhdGlvbiA9PT0gJ2Z1bmMuaHNsYScgfHxcbiAgICAgICAgbm90YXRpb24gPT09ICdmdW5jLnJnYmEnIHx8XG4gICAgICAgIG5vdGF0aW9uID09PSAnaGV4LnJnYmEnKTtcbn1cbmV4cG9ydHMuaGFzQWxwaGFDb21wb25lbnQgPSBoYXNBbHBoYUNvbXBvbmVudDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL3BhcnNlci9zdHJpbmctbnVtYmVyLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy9wYXJzZXIvc3RyaW5nLW51bWJlci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlN0cmluZ051bWJlclBhcnNlciA9IHZvaWQgMDtcbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnRzLlN0cmluZ051bWJlclBhcnNlciA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgdmFyIG51bSA9IHBhcnNlRmxvYXQodGV4dCk7XG4gICAgaWYgKGlzTmFOKG51bSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudW07XG59O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvdHdlYWtwYW5lLXdpdGhvdXQtc3R5bGUudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL3R3ZWFrcGFuZS13aXRob3V0LXN0eWxlLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Ud2Vha3BhbmVXaXRob3V0U3R5bGUgPSB2b2lkIDA7XG52YXIgcm9vdF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hcGkvcm9vdCAqLyBcIi4vc3JjL21haW4vanMvYXBpL3Jvb3QudHNcIik7XG52YXIgcm9vdF8yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9jb250cm9sbGVyL3Jvb3QgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnRyb2xsZXIvcm9vdC50c1wiKTtcbnZhciBjbGFzc19uYW1lXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21pc2MvY2xhc3MtbmFtZSAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9jbGFzcy1uYW1lLnRzXCIpO1xudmFyIERvbVV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL21pc2MvZG9tLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvZG9tLXV0aWwudHNcIik7XG52YXIgcGFuZV9lcnJvcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9taXNjL3BhbmUtZXJyb3IgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvcGFuZS1lcnJvci50c1wiKTtcbnZhciB0eXBlX3V0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbWlzYy90eXBlLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvdHlwZS11dGlsLnRzXCIpO1xudmFyIHZpZXdfbW9kZWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbW9kZWwvdmlldy1tb2RlbCAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvdmlldy1tb2RlbC50c1wiKTtcbmZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRXcmFwcGVyRWxlbWVudChkb2N1bWVudCkge1xuICAgIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzX25hbWVfMS5DbGFzc05hbWUoJ2RmdycpKCkpO1xuICAgIGlmIChkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbSk7XG4gICAgfVxuICAgIHJldHVybiBlbGVtO1xufVxudmFyIFR3ZWFrcGFuZVdpdGhvdXRTdHlsZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVHdlYWtwYW5lV2l0aG91dFN0eWxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFR3ZWFrcGFuZVdpdGhvdXRTdHlsZShvcHRfY29uZmlnKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBjb25maWcgPSBvcHRfY29uZmlnIHx8IHt9O1xuICAgICAgICB2YXIgZG9jdW1lbnQgPSB0eXBlX3V0aWxfMS5UeXBlVXRpbC5nZXRPckRlZmF1bHQoY29uZmlnLmRvY3VtZW50LCBEb21VdGlsLmdldFdpbmRvd0RvY3VtZW50KCkpO1xuICAgICAgICB2YXIgcm9vdENvbnRyb2xsZXIgPSBuZXcgcm9vdF8yLlJvb3RDb250cm9sbGVyKGRvY3VtZW50LCB7XG4gICAgICAgICAgICBleHBhbmRlZDogY29uZmlnLmV4cGFuZGVkLFxuICAgICAgICAgICAgdmlld01vZGVsOiBuZXcgdmlld19tb2RlbF8xLlZpZXdNb2RlbCgpLFxuICAgICAgICAgICAgdGl0bGU6IGNvbmZpZy50aXRsZSxcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcm9vdENvbnRyb2xsZXIpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmNvbnRhaW5lckVsZW1fID1cbiAgICAgICAgICAgIGNvbmZpZy5jb250YWluZXIgfHwgY3JlYXRlRGVmYXVsdFdyYXBwZXJFbGVtZW50KGRvY3VtZW50KTtcbiAgICAgICAgX3RoaXMuY29udGFpbmVyRWxlbV8uYXBwZW5kQ2hpbGQoX3RoaXMuZWxlbWVudCk7XG4gICAgICAgIF90aGlzLmRvY18gPSBkb2N1bWVudDtcbiAgICAgICAgX3RoaXMudXNlc0RlZmF1bHRXcmFwcGVyXyA9ICFjb25maWcuY29udGFpbmVyO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFR3ZWFrcGFuZVdpdGhvdXRTdHlsZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lckVsZW0gPSB0aGlzLmNvbnRhaW5lckVsZW1fO1xuICAgICAgICBpZiAoIWNvbnRhaW5lckVsZW0pIHtcbiAgICAgICAgICAgIHRocm93IHBhbmVfZXJyb3JfMS5QYW5lRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudXNlc0RlZmF1bHRXcmFwcGVyXykge1xuICAgICAgICAgICAgdmFyIHBhcmVudEVsZW0gPSBjb250YWluZXJFbGVtLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAocGFyZW50RWxlbSkge1xuICAgICAgICAgICAgICAgIHBhcmVudEVsZW0ucmVtb3ZlQ2hpbGQoY29udGFpbmVyRWxlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250YWluZXJFbGVtXyA9IG51bGw7XG4gICAgICAgIHRoaXMuZG9jXyA9IG51bGw7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFR3ZWFrcGFuZVdpdGhvdXRTdHlsZS5wcm90b3R5cGUsIFwiZG9jdW1lbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kb2NfKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcGFuZV9lcnJvcl8xLlBhbmVFcnJvci5hbHJlYWR5RGlzcG9zZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvY187XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gVHdlYWtwYW5lV2l0aG91dFN0eWxlO1xufShyb290XzEuUm9vdEFwaSkpO1xuZXhwb3J0cy5Ud2Vha3BhbmVXaXRob3V0U3R5bGUgPSBUd2Vha3BhbmVXaXRob3V0U3R5bGU7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy92aWV3L2J1dHRvbi50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvdmlldy9idXR0b24udHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJ1dHRvblZpZXcgPSB2b2lkIDA7XG52YXIgY2xhc3NfbmFtZV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWlzYy9jbGFzcy1uYW1lICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2NsYXNzLW5hbWUudHNcIik7XG52YXIgRGlzcG9zaW5nVXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21pc2MvZGlzcG9zaW5nLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvZGlzcG9zaW5nLXV0aWwudHNcIik7XG52YXIgcGFuZV9lcnJvcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWlzYy9wYW5lLWVycm9yICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3BhbmUtZXJyb3IudHNcIik7XG52YXIgdmlld18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi92aWV3ICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L3ZpZXcudHNcIik7XG52YXIgY2xhc3NOYW1lID0gY2xhc3NfbmFtZV8xLkNsYXNzTmFtZSgnYnRuJyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIEJ1dHRvblZpZXcgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJ1dHRvblZpZXcsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQnV0dG9uVmlldyhkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRvY3VtZW50LCBjb25maWcpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmJ1dHRvbiA9IGNvbmZpZy5idXR0b247XG4gICAgICAgIF90aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoKSk7XG4gICAgICAgIHZhciBidXR0b25FbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgIGJ1dHRvbkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ2InKSk7XG4gICAgICAgIGJ1dHRvbkVsZW0udGV4dENvbnRlbnQgPSBfdGhpcy5idXR0b24udGl0bGU7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYnV0dG9uRWxlbSk7XG4gICAgICAgIF90aGlzLmJ1dHRvbkVsZW1fID0gYnV0dG9uRWxlbTtcbiAgICAgICAgY29uZmlnLm1vZGVsLmVtaXR0ZXIub24oJ2Rpc3Bvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5idXR0b25FbGVtXyA9IERpc3Bvc2luZ1V0aWwuZGlzcG9zZUVsZW1lbnQoX3RoaXMuYnV0dG9uRWxlbV8pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnV0dG9uVmlldy5wcm90b3R5cGUsIFwiYnV0dG9uRWxlbWVudFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmJ1dHRvbkVsZW1fKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcGFuZV9lcnJvcl8xLlBhbmVFcnJvci5hbHJlYWR5RGlzcG9zZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1dHRvbkVsZW1fO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIEJ1dHRvblZpZXc7XG59KHZpZXdfMS5WaWV3KSk7XG5leHBvcnRzLkJ1dHRvblZpZXcgPSBCdXR0b25WaWV3O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvdmlldy9mb2xkZXIudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL3ZpZXcvZm9sZGVyLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Gb2xkZXJWaWV3ID0gdm9pZCAwO1xudmFyIGNsYXNzX25hbWVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21pc2MvY2xhc3MtbmFtZSAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9jbGFzcy1uYW1lLnRzXCIpO1xudmFyIERpc3Bvc2luZ1V0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9taXNjL2Rpc3Bvc2luZy11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2Rpc3Bvc2luZy11dGlsLnRzXCIpO1xudmFyIHBhbmVfZXJyb3JfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21pc2MvcGFuZS1lcnJvciAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9wYW5lLWVycm9yLnRzXCIpO1xudmFyIHZpZXdfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdmlldyAqLyBcIi4vc3JjL21haW4vanMvdmlldy92aWV3LnRzXCIpO1xudmFyIGNsYXNzTmFtZSA9IGNsYXNzX25hbWVfMS5DbGFzc05hbWUoJ2ZsZCcpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBGb2xkZXJWaWV3ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhGb2xkZXJWaWV3LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEZvbGRlclZpZXcoZG9jdW1lbnQsIGNvbmZpZykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkb2N1bWVudCwgY29uZmlnKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vbkZvbGRlckNoYW5nZV8gPSBfdGhpcy5vbkZvbGRlckNoYW5nZV8uYmluZChfdGhpcyk7XG4gICAgICAgIF90aGlzLmZvbGRlcl8gPSBjb25maWcuZm9sZGVyO1xuICAgICAgICBfdGhpcy5mb2xkZXJfLmVtaXR0ZXIub24oJ2NoYW5nZScsIF90aGlzLm9uRm9sZGVyQ2hhbmdlXyk7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoKSk7XG4gICAgICAgIHZhciB0aXRsZUVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgdGl0bGVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCd0JykpO1xuICAgICAgICB0aXRsZUVsZW0udGV4dENvbnRlbnQgPSBfdGhpcy5mb2xkZXJfLnRpdGxlO1xuICAgICAgICBfdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRpdGxlRWxlbSk7XG4gICAgICAgIF90aGlzLnRpdGxlRWxlbV8gPSB0aXRsZUVsZW07XG4gICAgICAgIHZhciBtYXJrRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBtYXJrRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgnbScpKTtcbiAgICAgICAgX3RoaXMudGl0bGVFbGVtXy5hcHBlbmRDaGlsZChtYXJrRWxlbSk7XG4gICAgICAgIHZhciBjb250YWluZXJFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGNvbnRhaW5lckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ2MnKSk7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyRWxlbSk7XG4gICAgICAgIF90aGlzLmNvbnRhaW5lckVsZW1fID0gY29udGFpbmVyRWxlbTtcbiAgICAgICAgX3RoaXMuYXBwbHlNb2RlbF8oKTtcbiAgICAgICAgY29uZmlnLm1vZGVsLmVtaXR0ZXIub24oJ2Rpc3Bvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jb250YWluZXJFbGVtXyA9IERpc3Bvc2luZ1V0aWwuZGlzcG9zZUVsZW1lbnQoX3RoaXMuY29udGFpbmVyRWxlbV8pO1xuICAgICAgICAgICAgX3RoaXMudGl0bGVFbGVtXyA9IERpc3Bvc2luZ1V0aWwuZGlzcG9zZUVsZW1lbnQoX3RoaXMudGl0bGVFbGVtXyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGb2xkZXJWaWV3LnByb3RvdHlwZSwgXCJ0aXRsZUVsZW1lbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy50aXRsZUVsZW1fKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcGFuZV9lcnJvcl8xLlBhbmVFcnJvci5hbHJlYWR5RGlzcG9zZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpdGxlRWxlbV87XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRm9sZGVyVmlldy5wcm90b3R5cGUsIFwiY29udGFpbmVyRWxlbWVudFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRhaW5lckVsZW1fKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcGFuZV9lcnJvcl8xLlBhbmVFcnJvci5hbHJlYWR5RGlzcG9zZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lckVsZW1fO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgRm9sZGVyVmlldy5wcm90b3R5cGUuYXBwbHlNb2RlbF8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb250YWluZXJFbGVtID0gdGhpcy5jb250YWluZXJFbGVtXztcbiAgICAgICAgaWYgKCFjb250YWluZXJFbGVtKSB7XG4gICAgICAgICAgICB0aHJvdyBwYW5lX2Vycm9yXzEuUGFuZUVycm9yLmFscmVhZHlEaXNwb3NlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBleHBhbmRlZCA9IHRoaXMuZm9sZGVyXy5zdHlsZUV4cGFuZGVkO1xuICAgICAgICB2YXIgZXhwYW5kZWRDbGFzcyA9IGNsYXNzTmFtZSh1bmRlZmluZWQsICdleHBhbmRlZCcpO1xuICAgICAgICBpZiAoZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGV4cGFuZGVkQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoZXhwYW5kZWRDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyRWxlbS5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvbGRlcl8uc3R5bGVIZWlnaHQ7XG4gICAgfTtcbiAgICBGb2xkZXJWaWV3LnByb3RvdHlwZS5vbkZvbGRlckNoYW5nZV8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYXBwbHlNb2RlbF8oKTtcbiAgICB9O1xuICAgIHJldHVybiBGb2xkZXJWaWV3O1xufSh2aWV3XzEuVmlldykpO1xuZXhwb3J0cy5Gb2xkZXJWaWV3ID0gRm9sZGVyVmlldztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvYS1wYWxldHRlLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy92aWV3L2lucHV0L2EtcGFsZXR0ZS50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQVBhbGV0dGVJbnB1dFZpZXcgPSB2b2lkIDA7XG52YXIgQ29sb3JDb252ZXJ0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9jb252ZXJ0ZXIvY29sb3IgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnZlcnRlci9jb2xvci50c1wiKTtcbnZhciBjbGFzc19uYW1lXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2NsYXNzLW5hbWUgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvY2xhc3MtbmFtZS50c1wiKTtcbnZhciBEaXNwb3NpbmdVdGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy9kaXNwb3NpbmctdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9kaXNwb3NpbmctdXRpbC50c1wiKTtcbnZhciBudW1iZXJfdXRpbF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy9udW1iZXItdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9udW1iZXItdXRpbC50c1wiKTtcbnZhciBwYW5lX2Vycm9yXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL3BhbmUtZXJyb3IgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvcGFuZS1lcnJvci50c1wiKTtcbnZhciBjb2xvcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbW9kZWwvY29sb3IgKi8gXCIuL3NyYy9tYWluL2pzL21vZGVsL2NvbG9yLnRzXCIpO1xudmFyIHZpZXdfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3ZpZXcgKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvdmlldy50c1wiKTtcbnZhciBjbGFzc05hbWUgPSBjbGFzc19uYW1lXzEuQ2xhc3NOYW1lKCdhcGwnLCAnaW5wdXQnKTtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgQVBhbGV0dGVJbnB1dFZpZXcgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFQYWxldHRlSW5wdXRWaWV3LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFQYWxldHRlSW5wdXRWaWV3KGRvY3VtZW50LCBjb25maWcpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZG9jdW1lbnQsIGNvbmZpZykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25WYWx1ZUNoYW5nZV8gPSBfdGhpcy5vblZhbHVlQ2hhbmdlXy5iaW5kKF90aGlzKTtcbiAgICAgICAgX3RoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgIF90aGlzLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIF90aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgX3RoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgpKTtcbiAgICAgICAgX3RoaXMuZWxlbWVudC50YWJJbmRleCA9IDA7XG4gICAgICAgIHZhciBiYXJFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGJhckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ2InKSk7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYmFyRWxlbSk7XG4gICAgICAgIHZhciBjb2xvckVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgY29sb3JFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdjJykpO1xuICAgICAgICBiYXJFbGVtLmFwcGVuZENoaWxkKGNvbG9yRWxlbSk7XG4gICAgICAgIF90aGlzLmNvbG9yRWxlbV8gPSBjb2xvckVsZW07XG4gICAgICAgIHZhciBtYXJrZXJFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIG1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ20nKSk7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobWFya2VyRWxlbSk7XG4gICAgICAgIF90aGlzLm1hcmtlckVsZW1fID0gbWFya2VyRWxlbTtcbiAgICAgICAgdmFyIHByZXZpZXdFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHByZXZpZXdFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdwJykpO1xuICAgICAgICBfdGhpcy5tYXJrZXJFbGVtXy5hcHBlbmRDaGlsZChwcmV2aWV3RWxlbSk7XG4gICAgICAgIF90aGlzLnByZXZpZXdFbGVtXyA9IHByZXZpZXdFbGVtO1xuICAgICAgICBfdGhpcy51cGRhdGUoKTtcbiAgICAgICAgY29uZmlnLm1vZGVsLmVtaXR0ZXIub24oJ2Rpc3Bvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jb2xvckVsZW1fID0gRGlzcG9zaW5nVXRpbC5kaXNwb3NlRWxlbWVudChfdGhpcy5jb2xvckVsZW1fKTtcbiAgICAgICAgICAgIF90aGlzLm1hcmtlckVsZW1fID0gRGlzcG9zaW5nVXRpbC5kaXNwb3NlRWxlbWVudChfdGhpcy5tYXJrZXJFbGVtXyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFQYWxldHRlSW5wdXRWaWV3LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5tYXJrZXJFbGVtXyB8fCAhdGhpcy5wcmV2aWV3RWxlbV8gfHwgIXRoaXMuY29sb3JFbGVtXykge1xuICAgICAgICAgICAgdGhyb3cgcGFuZV9lcnJvcl8xLlBhbmVFcnJvci5hbHJlYWR5RGlzcG9zZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgIHZhciByZ2JhQ29tcHMgPSBjLmdldENvbXBvbmVudHMoJ3JnYicpO1xuICAgICAgICB2YXIgbGVmdENvbG9yID0gbmV3IGNvbG9yXzEuQ29sb3IoW3JnYmFDb21wc1swXSwgcmdiYUNvbXBzWzFdLCByZ2JhQ29tcHNbMl0sIDBdLCAncmdiJyk7XG4gICAgICAgIHZhciByaWdodENvbG9yID0gbmV3IGNvbG9yXzEuQ29sb3IoW3JnYmFDb21wc1swXSwgcmdiYUNvbXBzWzFdLCByZ2JhQ29tcHNbMl0sIDI1NV0sICdyZ2InKTtcbiAgICAgICAgdmFyIGdyYWRpZW50Q29tcHMgPSBbXG4gICAgICAgICAgICAndG8gcmlnaHQnLFxuICAgICAgICAgICAgQ29sb3JDb252ZXJ0ZXIudG9GdW5jdGlvbmFsUmdiYVN0cmluZyhsZWZ0Q29sb3IpLFxuICAgICAgICAgICAgQ29sb3JDb252ZXJ0ZXIudG9GdW5jdGlvbmFsUmdiYVN0cmluZyhyaWdodENvbG9yKSxcbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5jb2xvckVsZW1fLnN0eWxlLmJhY2tncm91bmQgPSBcImxpbmVhci1ncmFkaWVudChcIiArIGdyYWRpZW50Q29tcHMuam9pbignLCcpICsgXCIpXCI7XG4gICAgICAgIHRoaXMucHJldmlld0VsZW1fLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IENvbG9yQ29udmVydGVyLnRvRnVuY3Rpb25hbFJnYmFTdHJpbmcoYyk7XG4gICAgICAgIHZhciBsZWZ0ID0gbnVtYmVyX3V0aWxfMS5OdW1iZXJVdGlsLm1hcChyZ2JhQ29tcHNbM10sIDAsIDEsIDAsIDEwMCk7XG4gICAgICAgIHRoaXMubWFya2VyRWxlbV8uc3R5bGUubGVmdCA9IGxlZnQgKyBcIiVcIjtcbiAgICB9O1xuICAgIEFQYWxldHRlSW5wdXRWaWV3LnByb3RvdHlwZS5vblZhbHVlQ2hhbmdlXyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9O1xuICAgIHJldHVybiBBUGFsZXR0ZUlucHV0Vmlldztcbn0odmlld18xLlZpZXcpKTtcbmV4cG9ydHMuQVBhbGV0dGVJbnB1dFZpZXcgPSBBUGFsZXR0ZUlucHV0VmlldztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvY2hlY2tib3gudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvdmlldy9pbnB1dC9jaGVja2JveC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5DaGVja2JveElucHV0VmlldyA9IHZvaWQgMDtcbnZhciBjbGFzc19uYW1lXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2NsYXNzLW5hbWUgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvY2xhc3MtbmFtZS50c1wiKTtcbnZhciBEaXNwb3NpbmdVdGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy9kaXNwb3NpbmctdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9kaXNwb3NpbmctdXRpbC50c1wiKTtcbnZhciBwYW5lX2Vycm9yXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL3BhbmUtZXJyb3IgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvcGFuZS1lcnJvci50c1wiKTtcbnZhciB2aWV3XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92aWV3ICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L3ZpZXcudHNcIik7XG52YXIgY2xhc3NOYW1lID0gY2xhc3NfbmFtZV8xLkNsYXNzTmFtZSgnY2tiJywgJ2lucHV0Jyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIENoZWNrYm94SW5wdXRWaWV3ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDaGVja2JveElucHV0VmlldywgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDaGVja2JveElucHV0Vmlldyhkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRvY3VtZW50LCBjb25maWcpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uVmFsdWVDaGFuZ2VfID0gX3RoaXMub25WYWx1ZUNoYW5nZV8uYmluZChfdGhpcyk7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoKSk7XG4gICAgICAgIHZhciBsYWJlbEVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpO1xuICAgICAgICBsYWJlbEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ2wnKSk7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobGFiZWxFbGVtKTtcbiAgICAgICAgdmFyIGlucHV0RWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgIGlucHV0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgnaScpKTtcbiAgICAgICAgaW5wdXRFbGVtLnR5cGUgPSAnY2hlY2tib3gnO1xuICAgICAgICBsYWJlbEVsZW0uYXBwZW5kQ2hpbGQoaW5wdXRFbGVtKTtcbiAgICAgICAgX3RoaXMuaW5wdXRFbGVtXyA9IGlucHV0RWxlbTtcbiAgICAgICAgdmFyIG1hcmtFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIG1hcmtFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdtJykpO1xuICAgICAgICBsYWJlbEVsZW0uYXBwZW5kQ2hpbGQobWFya0VsZW0pO1xuICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgX3RoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICBfdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgX3RoaXMudXBkYXRlKCk7XG4gICAgICAgIGNvbmZpZy5tb2RlbC5lbWl0dGVyLm9uKCdkaXNwb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuaW5wdXRFbGVtXyA9IERpc3Bvc2luZ1V0aWwuZGlzcG9zZUVsZW1lbnQoX3RoaXMuaW5wdXRFbGVtXyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDaGVja2JveElucHV0Vmlldy5wcm90b3R5cGUsIFwiaW5wdXRFbGVtZW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5wdXRFbGVtXykge1xuICAgICAgICAgICAgICAgIHRocm93IHBhbmVfZXJyb3JfMS5QYW5lRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dEVsZW1fO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgQ2hlY2tib3hJbnB1dFZpZXcucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0RWxlbV8pIHtcbiAgICAgICAgICAgIHRocm93IHBhbmVfZXJyb3JfMS5QYW5lRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dEVsZW1fLmNoZWNrZWQgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgIH07XG4gICAgQ2hlY2tib3hJbnB1dFZpZXcucHJvdG90eXBlLm9uVmFsdWVDaGFuZ2VfID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIENoZWNrYm94SW5wdXRWaWV3O1xufSh2aWV3XzEuVmlldykpO1xuZXhwb3J0cy5DaGVja2JveElucHV0VmlldyA9IENoZWNrYm94SW5wdXRWaWV3O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvdmlldy9pbnB1dC9jb2xvci1jb21wb25lbnQtdGV4dHMudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvY29sb3ItY29tcG9uZW50LXRleHRzLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db2xvckNvbXBvbmVudFRleHRzSW5wdXRWaWV3ID0gdm9pZCAwO1xudmFyIG51bWJlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vZm9ybWF0dGVyL251bWJlciAqLyBcIi4vc3JjL21haW4vanMvZm9ybWF0dGVyL251bWJlci50c1wiKTtcbnZhciBjbGFzc19uYW1lXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2NsYXNzLW5hbWUgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvY2xhc3MtbmFtZS50c1wiKTtcbnZhciBEaXNwb3NpbmdVdGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy9kaXNwb3NpbmctdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9kaXNwb3NpbmctdXRpbC50c1wiKTtcbnZhciBwYW5lX2Vycm9yXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL3BhbmUtZXJyb3IgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvcGFuZS1lcnJvci50c1wiKTtcbnZhciB2aWV3XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92aWV3ICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L3ZpZXcudHNcIik7XG52YXIgY2xhc3NOYW1lID0gY2xhc3NfbmFtZV8xLkNsYXNzTmFtZSgnY2N0eHRzJywgJ2lucHV0Jyk7XG52YXIgRk9STUFUVEVSID0gbmV3IG51bWJlcl8xLk51bWJlckZvcm1hdHRlcigwKTtcbmZ1bmN0aW9uIGNyZWF0ZU1vZGVTZWxlY3RFbGVtZW50KGRvY3VtZW50KSB7XG4gICAgdmFyIHNlbGVjdEVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcbiAgICB2YXIgaXRlbXMgPSBbXG4gICAgICAgIHsgdGV4dDogJ1JHQicsIHZhbHVlOiAncmdiJyB9LFxuICAgICAgICB7IHRleHQ6ICdIU0wnLCB2YWx1ZTogJ2hzbCcgfSxcbiAgICAgICAgeyB0ZXh0OiAnSFNWJywgdmFsdWU6ICdoc3YnIH0sXG4gICAgXTtcbiAgICBzZWxlY3RFbGVtLmFwcGVuZENoaWxkKGl0ZW1zLnJlZHVjZShmdW5jdGlvbiAoZnJhZywgaXRlbSkge1xuICAgICAgICB2YXIgb3B0RWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuICAgICAgICBvcHRFbGVtLnRleHRDb250ZW50ID0gaXRlbS50ZXh0O1xuICAgICAgICBvcHRFbGVtLnZhbHVlID0gaXRlbS52YWx1ZTtcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChvcHRFbGVtKTtcbiAgICAgICAgcmV0dXJuIGZyYWc7XG4gICAgfSwgZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKSk7XG4gICAgcmV0dXJuIHNlbGVjdEVsZW07XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIENvbG9yQ29tcG9uZW50VGV4dHNJbnB1dFZpZXcgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENvbG9yQ29tcG9uZW50VGV4dHNJbnB1dFZpZXcsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ29sb3JDb21wb25lbnRUZXh0c0lucHV0Vmlldyhkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRvY3VtZW50LCBjb25maWcpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uVmFsdWVDaGFuZ2VfID0gX3RoaXMub25WYWx1ZUNoYW5nZV8uYmluZChfdGhpcyk7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoKSk7XG4gICAgICAgIHZhciBtb2RlRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBtb2RlRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgnbScpKTtcbiAgICAgICAgX3RoaXMubW9kZVNlbGVjdEVsZW1lbnQgPSBjcmVhdGVNb2RlU2VsZWN0RWxlbWVudChkb2N1bWVudCk7XG4gICAgICAgIF90aGlzLm1vZGVTZWxlY3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdtcycpKTtcbiAgICAgICAgbW9kZUVsZW0uYXBwZW5kQ2hpbGQoX3RoaXMubW9kZVNlbGVjdEVsZW1lbnQpO1xuICAgICAgICB2YXIgbW9kZU1hcmtlckVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgbW9kZU1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ21tJykpO1xuICAgICAgICBtb2RlRWxlbS5hcHBlbmRDaGlsZChtb2RlTWFya2VyRWxlbSk7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobW9kZUVsZW0pO1xuICAgICAgICB2YXIgd3JhcHBlckVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgd3JhcHBlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ3cnKSk7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQod3JhcHBlckVsZW0pO1xuICAgICAgICB2YXIgaW5wdXRFbGVtcyA9IFswLCAxLCAyXS5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGlucHV0RWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICBpbnB1dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ2knKSk7XG4gICAgICAgICAgICBpbnB1dEVsZW0udHlwZSA9ICd0ZXh0JztcbiAgICAgICAgICAgIHJldHVybiBpbnB1dEVsZW07XG4gICAgICAgIH0pO1xuICAgICAgICBpbnB1dEVsZW1zLmZvckVhY2goZnVuY3Rpb24gKGVsZW0pIHtcbiAgICAgICAgICAgIHdyYXBwZXJFbGVtLmFwcGVuZENoaWxkKGVsZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMuaW5wdXRFbGVtc18gPSBbaW5wdXRFbGVtc1swXSwgaW5wdXRFbGVtc1sxXSwgaW5wdXRFbGVtc1syXV07XG4gICAgICAgIF90aGlzLnBpY2tlZENvbG9yID0gY29uZmlnLnBpY2tlZENvbG9yO1xuICAgICAgICBfdGhpcy5waWNrZWRDb2xvci5lbWl0dGVyLm9uKCdjaGFuZ2UnLCBfdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgIF90aGlzLnVwZGF0ZSgpO1xuICAgICAgICBjb25maWcubW9kZWwuZW1pdHRlci5vbignZGlzcG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5pbnB1dEVsZW1zXykge1xuICAgICAgICAgICAgICAgIF90aGlzLmlucHV0RWxlbXNfLmZvckVhY2goZnVuY3Rpb24gKGVsZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgRGlzcG9zaW5nVXRpbC5kaXNwb3NlRWxlbWVudChlbGVtKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBfdGhpcy5pbnB1dEVsZW1zXyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvckNvbXBvbmVudFRleHRzSW5wdXRWaWV3LnByb3RvdHlwZSwgXCJpbnB1dEVsZW1lbnRzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5wdXRFbGVtc18pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBwYW5lX2Vycm9yXzEuUGFuZUVycm9yLmFscmVhZHlEaXNwb3NlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRFbGVtc187XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JDb21wb25lbnRUZXh0c0lucHV0Vmlldy5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBpY2tlZENvbG9yLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgQ29sb3JDb21wb25lbnRUZXh0c0lucHV0Vmlldy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5wdXRFbGVtcyA9IHRoaXMuaW5wdXRFbGVtc187XG4gICAgICAgIGlmICghaW5wdXRFbGVtcykge1xuICAgICAgICAgICAgdGhyb3cgcGFuZV9lcnJvcl8xLlBhbmVFcnJvci5hbHJlYWR5RGlzcG9zZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcHMgPSB0aGlzLnBpY2tlZENvbG9yLnZhbHVlLnJhd1ZhbHVlLmdldENvbXBvbmVudHModGhpcy5waWNrZWRDb2xvci5tb2RlKTtcbiAgICAgICAgY29tcHMuZm9yRWFjaChmdW5jdGlvbiAoY29tcCwgaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBpbnB1dEVsZW0gPSBpbnB1dEVsZW1zW2luZGV4XTtcbiAgICAgICAgICAgIGlmICghaW5wdXRFbGVtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5wdXRFbGVtLnZhbHVlID0gRk9STUFUVEVSLmZvcm1hdChjb21wKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBDb2xvckNvbXBvbmVudFRleHRzSW5wdXRWaWV3LnByb3RvdHlwZS5vblZhbHVlQ2hhbmdlXyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9O1xuICAgIHJldHVybiBDb2xvckNvbXBvbmVudFRleHRzSW5wdXRWaWV3O1xufSh2aWV3XzEuVmlldykpO1xuZXhwb3J0cy5Db2xvckNvbXBvbmVudFRleHRzSW5wdXRWaWV3ID0gQ29sb3JDb21wb25lbnRUZXh0c0lucHV0VmlldztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvY29sb3ItcGlja2VyLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy92aWV3L2lucHV0L2NvbG9yLXBpY2tlci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX3NwcmVhZEFycmF5cyA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheXMpIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxuICAgICAgICAgICAgcltrXSA9IGFbal07XG4gICAgcmV0dXJuIHI7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db2xvclBpY2tlcklucHV0VmlldyA9IHZvaWQgMDtcbnZhciBjbGFzc19uYW1lXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2NsYXNzLW5hbWUgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvY2xhc3MtbmFtZS50c1wiKTtcbnZhciB0eXBlX3V0aWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvdHlwZS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3R5cGUtdXRpbC50c1wiKTtcbnZhciB2aWV3XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92aWV3ICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L3ZpZXcudHNcIik7XG52YXIgY2xhc3NOYW1lID0gY2xhc3NfbmFtZV8xLkNsYXNzTmFtZSgnY2xwJywgJ2lucHV0Jyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIENvbG9yUGlja2VySW5wdXRWaWV3ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDb2xvclBpY2tlcklucHV0VmlldywgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb2xvclBpY2tlcklucHV0Vmlldyhkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRvY3VtZW50LCBjb25maWcpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uRm9sZGFibGVDaGFuZ2VfID0gX3RoaXMub25Gb2xkYWJsZUNoYW5nZV8uYmluZChfdGhpcyk7XG4gICAgICAgIF90aGlzLm9uVmFsdWVDaGFuZ2VfID0gX3RoaXMub25WYWx1ZUNoYW5nZV8uYmluZChfdGhpcyk7XG4gICAgICAgIF90aGlzLnBpY2tlZENvbG9yID0gY29uZmlnLnBpY2tlZENvbG9yO1xuICAgICAgICBfdGhpcy5waWNrZWRDb2xvci52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCBfdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgIF90aGlzLmZvbGRhYmxlID0gY29uZmlnLmZvbGRhYmxlO1xuICAgICAgICBfdGhpcy5mb2xkYWJsZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCBfdGhpcy5vbkZvbGRhYmxlQ2hhbmdlXyk7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoKSk7XG4gICAgICAgIHZhciBoc3ZFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGhzdkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ2hzdicpKTtcbiAgICAgICAgdmFyIHN2RWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzdkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ3N2JykpO1xuICAgICAgICBfdGhpcy5zdlBhbGV0dGVWaWV3XyA9IGNvbmZpZy5zdlBhbGV0dGVJbnB1dFZpZXc7XG4gICAgICAgIHN2RWxlbS5hcHBlbmRDaGlsZChfdGhpcy5zdlBhbGV0dGVWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgaHN2RWxlbS5hcHBlbmRDaGlsZChzdkVsZW0pO1xuICAgICAgICB2YXIgaEVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ2gnKSk7XG4gICAgICAgIF90aGlzLmhQYWxldHRlVmlld18gPSBjb25maWcuaFBhbGV0dGVJbnB1dFZpZXc7XG4gICAgICAgIGhFbGVtLmFwcGVuZENoaWxkKF90aGlzLmhQYWxldHRlVmlld18uZWxlbWVudCk7XG4gICAgICAgIGhzdkVsZW0uYXBwZW5kQ2hpbGQoaEVsZW0pO1xuICAgICAgICBfdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGhzdkVsZW0pO1xuICAgICAgICB2YXIgcmdiRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICByZ2JFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdyZ2InKSk7XG4gICAgICAgIF90aGlzLmNvbXBUZXh0c1ZpZXdfID0gY29uZmlnLmNvbXBvbmVudFRleHRzVmlldztcbiAgICAgICAgcmdiRWxlbS5hcHBlbmRDaGlsZChfdGhpcy5jb21wVGV4dHNWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgX3RoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChyZ2JFbGVtKTtcbiAgICAgICAgaWYgKGNvbmZpZy5hbHBoYUlucHV0Vmlld3MpIHtcbiAgICAgICAgICAgIF90aGlzLmFscGhhVmlld3NfID0ge1xuICAgICAgICAgICAgICAgIHBhbGV0dGU6IGNvbmZpZy5hbHBoYUlucHV0Vmlld3MucGFsZXR0ZSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBjb25maWcuYWxwaGFJbnB1dFZpZXdzLnRleHQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIGFFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBhRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgnYScpKTtcbiAgICAgICAgICAgIHZhciBhcEVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGFwRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgnYXAnKSk7XG4gICAgICAgICAgICBhcEVsZW0uYXBwZW5kQ2hpbGQoX3RoaXMuYWxwaGFWaWV3c18ucGFsZXR0ZS5lbGVtZW50KTtcbiAgICAgICAgICAgIGFFbGVtLmFwcGVuZENoaWxkKGFwRWxlbSk7XG4gICAgICAgICAgICB2YXIgYXRFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBhdEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ2F0JykpO1xuICAgICAgICAgICAgYXRFbGVtLmFwcGVuZENoaWxkKF90aGlzLmFscGhhVmlld3NfLnRleHQuZWxlbWVudCk7XG4gICAgICAgICAgICBhRWxlbS5hcHBlbmRDaGlsZChhdEVsZW0pO1xuICAgICAgICAgICAgX3RoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChhRWxlbSk7XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMudXBkYXRlKCk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yUGlja2VySW5wdXRWaWV3LnByb3RvdHlwZSwgXCJhbGxGb2N1c2FibGVFbGVtZW50c1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVsZW1zID0gX19zcHJlYWRBcnJheXMoW1xuICAgICAgICAgICAgICAgIHRoaXMuc3ZQYWxldHRlVmlld18uZWxlbWVudCxcbiAgICAgICAgICAgICAgICB0aGlzLmhQYWxldHRlVmlld18uZWxlbWVudFxuICAgICAgICAgICAgXSwgdGhpcy5jb21wVGV4dHNWaWV3Xy5pbnB1dEVsZW1lbnRzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFscGhhVmlld3NfKSB7XG4gICAgICAgICAgICAgICAgZWxlbXMucHVzaCh0aGlzLmFscGhhVmlld3NfLnBhbGV0dGUuZWxlbWVudCwgdGhpcy5hbHBoYVZpZXdzXy50ZXh0LmlucHV0RWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHlwZV91dGlsXzEuVHlwZVV0aWwuZm9yY2VDYXN0KGVsZW1zKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclBpY2tlcklucHV0Vmlldy5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBpY2tlZENvbG9yLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgQ29sb3JQaWNrZXJJbnB1dFZpZXcucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9sZGFibGUuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSh1bmRlZmluZWQsICdleHBhbmRlZCcpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSh1bmRlZmluZWQsICdleHBhbmRlZCcpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29sb3JQaWNrZXJJbnB1dFZpZXcucHJvdG90eXBlLm9uVmFsdWVDaGFuZ2VfID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH07XG4gICAgQ29sb3JQaWNrZXJJbnB1dFZpZXcucHJvdG90eXBlLm9uRm9sZGFibGVDaGFuZ2VfID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIENvbG9yUGlja2VySW5wdXRWaWV3O1xufSh2aWV3XzEuVmlldykpO1xuZXhwb3J0cy5Db2xvclBpY2tlcklucHV0VmlldyA9IENvbG9yUGlja2VySW5wdXRWaWV3O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvdmlldy9pbnB1dC9jb2xvci1zd2F0Y2gtdGV4dC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy92aWV3L2lucHV0L2NvbG9yLXN3YXRjaC10ZXh0LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvbG9yU3dhdGNoVGV4dElucHV0VmlldyA9IHZvaWQgMDtcbnZhciBjbGFzc19uYW1lXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2NsYXNzLW5hbWUgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvY2xhc3MtbmFtZS50c1wiKTtcbnZhciB2aWV3XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92aWV3ICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L3ZpZXcudHNcIik7XG52YXIgY2xhc3NOYW1lID0gY2xhc3NfbmFtZV8xLkNsYXNzTmFtZSgnY3N3dHh0JywgJ2lucHV0Jyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIENvbG9yU3dhdGNoVGV4dElucHV0VmlldyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ29sb3JTd2F0Y2hUZXh0SW5wdXRWaWV3LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENvbG9yU3dhdGNoVGV4dElucHV0Vmlldyhkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRvY3VtZW50LCBjb25maWcpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoKSk7XG4gICAgICAgIHZhciBzd2F0Y2hFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHN3YXRjaEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ3MnKSk7XG4gICAgICAgIF90aGlzLnN3YXRjaElucHV0Vmlld18gPSBjb25maWcuc3dhdGNoSW5wdXRWaWV3O1xuICAgICAgICBzd2F0Y2hFbGVtLmFwcGVuZENoaWxkKF90aGlzLnN3YXRjaElucHV0Vmlld18uZWxlbWVudCk7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc3dhdGNoRWxlbSk7XG4gICAgICAgIHZhciB0ZXh0RWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0ZXh0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgndCcpKTtcbiAgICAgICAgX3RoaXMudGV4dElucHV0VmlldyA9IGNvbmZpZy50ZXh0SW5wdXRWaWV3O1xuICAgICAgICB0ZXh0RWxlbS5hcHBlbmRDaGlsZChfdGhpcy50ZXh0SW5wdXRWaWV3LmVsZW1lbnQpO1xuICAgICAgICBfdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRleHRFbGVtKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JTd2F0Y2hUZXh0SW5wdXRWaWV3LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dElucHV0Vmlldy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIENvbG9yU3dhdGNoVGV4dElucHV0Vmlldy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnN3YXRjaElucHV0Vmlld18udXBkYXRlKCk7XG4gICAgICAgIHRoaXMudGV4dElucHV0Vmlldy51cGRhdGUoKTtcbiAgICB9O1xuICAgIHJldHVybiBDb2xvclN3YXRjaFRleHRJbnB1dFZpZXc7XG59KHZpZXdfMS5WaWV3KSk7XG5leHBvcnRzLkNvbG9yU3dhdGNoVGV4dElucHV0VmlldyA9IENvbG9yU3dhdGNoVGV4dElucHV0VmlldztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvY29sb3Itc3dhdGNoLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy92aWV3L2lucHV0L2NvbG9yLXN3YXRjaC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29sb3JTd2F0Y2hJbnB1dFZpZXcgPSB2b2lkIDA7XG52YXIgQ29sb3JDb252ZXJ0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9jb252ZXJ0ZXIvY29sb3IgKi8gXCIuL3NyYy9tYWluL2pzL2NvbnZlcnRlci9jb2xvci50c1wiKTtcbnZhciBjbGFzc19uYW1lXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2NsYXNzLW5hbWUgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvY2xhc3MtbmFtZS50c1wiKTtcbnZhciBEaXNwb3NpbmdVdGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy9kaXNwb3NpbmctdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9kaXNwb3NpbmctdXRpbC50c1wiKTtcbnZhciBwYW5lX2Vycm9yXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL3BhbmUtZXJyb3IgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvcGFuZS1lcnJvci50c1wiKTtcbnZhciB2aWV3XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92aWV3ICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L3ZpZXcudHNcIik7XG52YXIgY2xhc3NOYW1lID0gY2xhc3NfbmFtZV8xLkNsYXNzTmFtZSgnY3N3JywgJ2lucHV0Jyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIENvbG9yU3dhdGNoSW5wdXRWaWV3ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDb2xvclN3YXRjaElucHV0VmlldywgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb2xvclN3YXRjaElucHV0Vmlldyhkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRvY3VtZW50LCBjb25maWcpIHx8IHRoaXM7XG4gICAgICAgIGlmIChfdGhpcy5lbGVtZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBwYW5lX2Vycm9yXzEuUGFuZUVycm9yLmFscmVhZHlEaXNwb3NlZCgpO1xuICAgICAgICB9XG4gICAgICAgIF90aGlzLm9uVmFsdWVDaGFuZ2VfID0gX3RoaXMub25WYWx1ZUNoYW5nZV8uYmluZChfdGhpcyk7XG4gICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCBfdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgIF90aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICBfdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCkpO1xuICAgICAgICB2YXIgc3dhdGNoRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzd2F0Y2hFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdzdycpKTtcbiAgICAgICAgX3RoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChzd2F0Y2hFbGVtKTtcbiAgICAgICAgX3RoaXMuc3dhdGNoRWxlbV8gPSBzd2F0Y2hFbGVtO1xuICAgICAgICB2YXIgYnV0dG9uRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICBidXR0b25FbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdiJykpO1xuICAgICAgICBfdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGJ1dHRvbkVsZW0pO1xuICAgICAgICBfdGhpcy5idXR0b25FbGVtXyA9IGJ1dHRvbkVsZW07XG4gICAgICAgIHZhciBwaWNrZXJFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHBpY2tlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ3AnKSk7XG4gICAgICAgIF90aGlzLnBpY2tlclZpZXdfID0gY29uZmlnLnBpY2tlcklucHV0VmlldztcbiAgICAgICAgcGlja2VyRWxlbS5hcHBlbmRDaGlsZChfdGhpcy5waWNrZXJWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgX3RoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChwaWNrZXJFbGVtKTtcbiAgICAgICAgX3RoaXMudXBkYXRlKCk7XG4gICAgICAgIGNvbmZpZy5tb2RlbC5lbWl0dGVyLm9uKCdkaXNwb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuYnV0dG9uRWxlbV8gPSBEaXNwb3NpbmdVdGlsLmRpc3Bvc2VFbGVtZW50KF90aGlzLmJ1dHRvbkVsZW1fKTtcbiAgICAgICAgICAgIF90aGlzLnN3YXRjaEVsZW1fID0gRGlzcG9zaW5nVXRpbC5kaXNwb3NlRWxlbWVudChfdGhpcy5zd2F0Y2hFbGVtXyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclN3YXRjaElucHV0Vmlldy5wcm90b3R5cGUsIFwiYnV0dG9uRWxlbWVudFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYnV0dG9uRWxlbV8gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBwYW5lX2Vycm9yXzEuUGFuZUVycm9yLmFscmVhZHlEaXNwb3NlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnV0dG9uRWxlbV87XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBDb2xvclN3YXRjaElucHV0Vmlldy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3dhdGNoRWxlbV8pIHtcbiAgICAgICAgICAgIHRocm93IHBhbmVfZXJyb3JfMS5QYW5lRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgdGhpcy5zd2F0Y2hFbGVtXy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBDb2xvckNvbnZlcnRlci50b0hleFJnYmFTdHJpbmcodmFsdWUpO1xuICAgIH07XG4gICAgQ29sb3JTd2F0Y2hJbnB1dFZpZXcucHJvdG90eXBlLm9uVmFsdWVDaGFuZ2VfID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIENvbG9yU3dhdGNoSW5wdXRWaWV3O1xufSh2aWV3XzEuVmlldykpO1xuZXhwb3J0cy5Db2xvclN3YXRjaElucHV0VmlldyA9IENvbG9yU3dhdGNoSW5wdXRWaWV3O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvdmlldy9pbnB1dC9oLXBhbGV0dGUudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvaC1wYWxldHRlLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IUGFsZXR0ZUlucHV0VmlldyA9IHZvaWQgMDtcbnZhciBDb2xvckNvbnZlcnRlciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2NvbnZlcnRlci9jb2xvciAqLyBcIi4vc3JjL21haW4vanMvY29udmVydGVyL2NvbG9yLnRzXCIpO1xudmFyIGNsYXNzX25hbWVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvY2xhc3MtbmFtZSAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9jbGFzcy1uYW1lLnRzXCIpO1xudmFyIERpc3Bvc2luZ1V0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2Rpc3Bvc2luZy11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2Rpc3Bvc2luZy11dGlsLnRzXCIpO1xudmFyIG51bWJlcl91dGlsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL251bWJlci11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL251bWJlci11dGlsLnRzXCIpO1xudmFyIHBhbmVfZXJyb3JfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvcGFuZS1lcnJvciAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9wYW5lLWVycm9yLnRzXCIpO1xudmFyIGNvbG9yXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9tb2RlbC9jb2xvciAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvY29sb3IudHNcIik7XG52YXIgdmlld18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdmlldyAqLyBcIi4vc3JjL21haW4vanMvdmlldy92aWV3LnRzXCIpO1xudmFyIGNsYXNzTmFtZSA9IGNsYXNzX25hbWVfMS5DbGFzc05hbWUoJ2hwbCcsICdpbnB1dCcpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBIUGFsZXR0ZUlucHV0VmlldyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoSFBhbGV0dGVJbnB1dFZpZXcsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gSFBhbGV0dGVJbnB1dFZpZXcoZG9jdW1lbnQsIGNvbmZpZykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkb2N1bWVudCwgY29uZmlnKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vblZhbHVlQ2hhbmdlXyA9IF90aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQoX3RoaXMpO1xuICAgICAgICBfdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgX3RoaXMudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgX3RoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICBfdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCkpO1xuICAgICAgICBfdGhpcy5lbGVtZW50LnRhYkluZGV4ID0gMDtcbiAgICAgICAgdmFyIGNvbG9yRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBjb2xvckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ2MnKSk7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoY29sb3JFbGVtKTtcbiAgICAgICAgX3RoaXMuY29sb3JFbGVtXyA9IGNvbG9yRWxlbTtcbiAgICAgICAgdmFyIG1hcmtlckVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgbWFya2VyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgnbScpKTtcbiAgICAgICAgX3RoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtYXJrZXJFbGVtKTtcbiAgICAgICAgX3RoaXMubWFya2VyRWxlbV8gPSBtYXJrZXJFbGVtO1xuICAgICAgICBfdGhpcy51cGRhdGUoKTtcbiAgICAgICAgY29uZmlnLm1vZGVsLmVtaXR0ZXIub24oJ2Rpc3Bvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jb2xvckVsZW1fID0gRGlzcG9zaW5nVXRpbC5kaXNwb3NlRWxlbWVudChfdGhpcy5jb2xvckVsZW1fKTtcbiAgICAgICAgICAgIF90aGlzLm1hcmtlckVsZW1fID0gRGlzcG9zaW5nVXRpbC5kaXNwb3NlRWxlbWVudChfdGhpcy5tYXJrZXJFbGVtXyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEhQYWxldHRlSW5wdXRWaWV3LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5tYXJrZXJFbGVtXykge1xuICAgICAgICAgICAgdGhyb3cgcGFuZV9lcnJvcl8xLlBhbmVFcnJvci5hbHJlYWR5RGlzcG9zZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgIHZhciBoID0gYy5nZXRDb21wb25lbnRzKCdoc3YnKVswXTtcbiAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBDb2xvckNvbnZlcnRlci50b0Z1bmN0aW9uYWxSZ2JTdHJpbmcobmV3IGNvbG9yXzEuQ29sb3IoW2gsIDEwMCwgMTAwXSwgJ2hzdicpKTtcbiAgICAgICAgdmFyIGxlZnQgPSBudW1iZXJfdXRpbF8xLk51bWJlclV0aWwubWFwKGgsIDAsIDM2MCwgMCwgMTAwKTtcbiAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5sZWZ0ID0gbGVmdCArIFwiJVwiO1xuICAgIH07XG4gICAgSFBhbGV0dGVJbnB1dFZpZXcucHJvdG90eXBlLm9uVmFsdWVDaGFuZ2VfID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIEhQYWxldHRlSW5wdXRWaWV3O1xufSh2aWV3XzEuVmlldykpO1xuZXhwb3J0cy5IUGFsZXR0ZUlucHV0VmlldyA9IEhQYWxldHRlSW5wdXRWaWV3O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvdmlldy9pbnB1dC9saXN0LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvdmlldy9pbnB1dC9saXN0LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTGlzdElucHV0VmlldyA9IHZvaWQgMDtcbnZhciBjbGFzc19uYW1lXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2NsYXNzLW5hbWUgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvY2xhc3MtbmFtZS50c1wiKTtcbnZhciBEaXNwb3NpbmdVdGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy9kaXNwb3NpbmctdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9kaXNwb3NpbmctdXRpbC50c1wiKTtcbnZhciBwYW5lX2Vycm9yXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL3BhbmUtZXJyb3IgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvcGFuZS1lcnJvci50c1wiKTtcbnZhciB2aWV3XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92aWV3ICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L3ZpZXcudHNcIik7XG52YXIgY2xhc3NOYW1lID0gY2xhc3NfbmFtZV8xLkNsYXNzTmFtZSgnbHN0JywgJ2lucHV0Jyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIExpc3RJbnB1dFZpZXcgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKExpc3RJbnB1dFZpZXcsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTGlzdElucHV0Vmlldyhkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRvY3VtZW50LCBjb25maWcpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uVmFsdWVDaGFuZ2VfID0gX3RoaXMub25WYWx1ZUNoYW5nZV8uYmluZChfdGhpcyk7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoKSk7XG4gICAgICAgIF90aGlzLnN0cmluZ2lmeVZhbHVlXyA9IGNvbmZpZy5zdHJpbmdpZnlWYWx1ZTtcbiAgICAgICAgdmFyIHNlbGVjdEVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcbiAgICAgICAgc2VsZWN0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgncycpKTtcbiAgICAgICAgY29uZmlnLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBvcHRpb25FbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgICBvcHRpb25FbGVtLmRhdGFzZXQuaW5kZXggPSBTdHJpbmcoaW5kZXgpO1xuICAgICAgICAgICAgb3B0aW9uRWxlbS50ZXh0Q29udGVudCA9IGl0ZW0udGV4dDtcbiAgICAgICAgICAgIG9wdGlvbkVsZW0udmFsdWUgPSBfdGhpcy5zdHJpbmdpZnlWYWx1ZV8oaXRlbS52YWx1ZSk7XG4gICAgICAgICAgICBzZWxlY3RFbGVtLmFwcGVuZENoaWxkKG9wdGlvbkVsZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChzZWxlY3RFbGVtKTtcbiAgICAgICAgX3RoaXMuc2VsZWN0RWxlbV8gPSBzZWxlY3RFbGVtO1xuICAgICAgICB2YXIgbWFya0VsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgbWFya0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ20nKSk7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobWFya0VsZW0pO1xuICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgX3RoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICBfdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgX3RoaXMudXBkYXRlKCk7XG4gICAgICAgIGNvbmZpZy5tb2RlbC5lbWl0dGVyLm9uKCdkaXNwb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuc2VsZWN0RWxlbV8gPSBEaXNwb3NpbmdVdGlsLmRpc3Bvc2VFbGVtZW50KF90aGlzLnNlbGVjdEVsZW1fKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KExpc3RJbnB1dFZpZXcucHJvdG90eXBlLCBcInNlbGVjdEVsZW1lbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RFbGVtXykge1xuICAgICAgICAgICAgICAgIHRocm93IHBhbmVfZXJyb3JfMS5QYW5lRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RFbGVtXztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIExpc3RJbnB1dFZpZXcucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdEVsZW1fKSB7XG4gICAgICAgICAgICB0aHJvdyBwYW5lX2Vycm9yXzEuUGFuZUVycm9yLmFscmVhZHlEaXNwb3NlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0RWxlbV8udmFsdWUgPSB0aGlzLnN0cmluZ2lmeVZhbHVlXyh0aGlzLnZhbHVlLnJhd1ZhbHVlKTtcbiAgICB9O1xuICAgIExpc3RJbnB1dFZpZXcucHJvdG90eXBlLm9uVmFsdWVDaGFuZ2VfID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIExpc3RJbnB1dFZpZXc7XG59KHZpZXdfMS5WaWV3KSk7XG5leHBvcnRzLkxpc3RJbnB1dFZpZXcgPSBMaXN0SW5wdXRWaWV3O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvdmlldy9pbnB1dC9wb2ludC0yZC1wYWQtdGV4dC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy92aWV3L2lucHV0L3BvaW50LTJkLXBhZC10ZXh0LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBvaW50MmRQYWRUZXh0SW5wdXRWaWV3ID0gdm9pZCAwO1xudmFyIGNsYXNzX25hbWVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvY2xhc3MtbmFtZSAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9jbGFzcy1uYW1lLnRzXCIpO1xudmFyIERvbVV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2RvbS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2RvbS11dGlsLnRzXCIpO1xudmFyIHZpZXdfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3ZpZXcgKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvdmlldy50c1wiKTtcbnZhciBjbGFzc05hbWUgPSBjbGFzc19uYW1lXzEuQ2xhc3NOYW1lKCdwMmRwYWR0eHQnLCAnaW5wdXQnKTtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgUG9pbnQyZFBhZFRleHRJbnB1dFZpZXcgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFBvaW50MmRQYWRUZXh0SW5wdXRWaWV3LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFBvaW50MmRQYWRUZXh0SW5wdXRWaWV3KGRvY3VtZW50LCBjb25maWcpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZG9jdW1lbnQsIGNvbmZpZykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgpKTtcbiAgICAgICAgdmFyIHBhZFdyYXBwZXJFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHBhZFdyYXBwZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCd3JykpO1xuICAgICAgICBfdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHBhZFdyYXBwZXJFbGVtKTtcbiAgICAgICAgdmFyIGJ1dHRvbkVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgYnV0dG9uRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgnYicpKTtcbiAgICAgICAgYnV0dG9uRWxlbS5hcHBlbmRDaGlsZChEb21VdGlsLmNyZWF0ZVN2Z0ljb25FbGVtZW50KGRvY3VtZW50LCAncDJkcGFkJykpO1xuICAgICAgICBwYWRXcmFwcGVyRWxlbS5hcHBlbmRDaGlsZChidXR0b25FbGVtKTtcbiAgICAgICAgX3RoaXMucGFkQnV0dG9uRWxlbV8gPSBidXR0b25FbGVtO1xuICAgICAgICB2YXIgcGFkRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBwYWRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdwJykpO1xuICAgICAgICBwYWRXcmFwcGVyRWxlbS5hcHBlbmRDaGlsZChwYWRFbGVtKTtcbiAgICAgICAgX3RoaXMucGFkSW5wdXRWaWV3XyA9IGNvbmZpZy5wYWRJbnB1dFZpZXc7XG4gICAgICAgIHBhZEVsZW0uYXBwZW5kQ2hpbGQoX3RoaXMucGFkSW5wdXRWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgdmFyIHRleHRFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRleHRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCd0JykpO1xuICAgICAgICBfdGhpcy50ZXh0SW5wdXRWaWV3XyA9IGNvbmZpZy50ZXh0SW5wdXRWaWV3O1xuICAgICAgICB0ZXh0RWxlbS5hcHBlbmRDaGlsZChfdGhpcy50ZXh0SW5wdXRWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgX3RoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0RWxlbSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvaW50MmRQYWRUZXh0SW5wdXRWaWV3LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dElucHV0Vmlld18udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9pbnQyZFBhZFRleHRJbnB1dFZpZXcucHJvdG90eXBlLCBcInBhZEJ1dHRvbkVsZW1lbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZEJ1dHRvbkVsZW1fO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgUG9pbnQyZFBhZFRleHRJbnB1dFZpZXcucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wYWRJbnB1dFZpZXdfLnVwZGF0ZSgpO1xuICAgICAgICB0aGlzLnRleHRJbnB1dFZpZXdfLnVwZGF0ZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIFBvaW50MmRQYWRUZXh0SW5wdXRWaWV3O1xufSh2aWV3XzEuVmlldykpO1xuZXhwb3J0cy5Qb2ludDJkUGFkVGV4dElucHV0VmlldyA9IFBvaW50MmRQYWRUZXh0SW5wdXRWaWV3O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvdmlldy9pbnB1dC9wb2ludC0yZC1wYWQudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvcG9pbnQtMmQtcGFkLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Qb2ludDJkUGFkSW5wdXRWaWV3ID0gdm9pZCAwO1xudmFyIGNsYXNzX25hbWVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvY2xhc3MtbmFtZSAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9jbGFzcy1uYW1lLnRzXCIpO1xudmFyIERpc3Bvc2luZ1V0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2Rpc3Bvc2luZy11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2Rpc3Bvc2luZy11dGlsLnRzXCIpO1xudmFyIERvbVV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2RvbS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2RvbS11dGlsLnRzXCIpO1xudmFyIG51bWJlcl91dGlsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL251bWJlci11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL251bWJlci11dGlsLnRzXCIpO1xudmFyIHBhbmVfZXJyb3JfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvcGFuZS1lcnJvciAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9wYW5lLWVycm9yLnRzXCIpO1xudmFyIHZpZXdfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3ZpZXcgKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvdmlldy50c1wiKTtcbnZhciBTVkdfTlMgPSBEb21VdGlsLlNWR19OUztcbnZhciBjbGFzc05hbWUgPSBjbGFzc19uYW1lXzEuQ2xhc3NOYW1lKCdwMmRwYWQnLCAnaW5wdXQnKTtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgUG9pbnQyZFBhZElucHV0VmlldyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUG9pbnQyZFBhZElucHV0VmlldywgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBQb2ludDJkUGFkSW5wdXRWaWV3KGRvY3VtZW50LCBjb25maWcpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZG9jdW1lbnQsIGNvbmZpZykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25Gb2xkYWJsZUNoYW5nZV8gPSBfdGhpcy5vbkZvbGRhYmxlQ2hhbmdlXy5iaW5kKF90aGlzKTtcbiAgICAgICAgX3RoaXMub25WYWx1ZUNoYW5nZV8gPSBfdGhpcy5vblZhbHVlQ2hhbmdlXy5iaW5kKF90aGlzKTtcbiAgICAgICAgX3RoaXMuZm9sZGFibGUgPSBjb25maWcuZm9sZGFibGU7XG4gICAgICAgIF90aGlzLmZvbGRhYmxlLmVtaXR0ZXIub24oJ2NoYW5nZScsIF90aGlzLm9uRm9sZGFibGVDaGFuZ2VfKTtcbiAgICAgICAgX3RoaXMuaW52ZXJ0c1lfID0gY29uZmlnLmludmVydHNZO1xuICAgICAgICBfdGhpcy5tYXhWYWx1ZV8gPSBjb25maWcubWF4VmFsdWU7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoKSk7XG4gICAgICAgIHZhciBwYWRFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHBhZEVsZW0udGFiSW5kZXggPSAwO1xuICAgICAgICBwYWRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdwJykpO1xuICAgICAgICBfdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHBhZEVsZW0pO1xuICAgICAgICBfdGhpcy5wYWRFbGVtXyA9IHBhZEVsZW07XG4gICAgICAgIHZhciBzdmdFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3N2ZycpO1xuICAgICAgICBzdmdFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdnJykpO1xuICAgICAgICBfdGhpcy5wYWRFbGVtXy5hcHBlbmRDaGlsZChzdmdFbGVtKTtcbiAgICAgICAgX3RoaXMuc3ZnRWxlbV8gPSBzdmdFbGVtO1xuICAgICAgICB2YXIgeEF4aXNFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ2xpbmUnKTtcbiAgICAgICAgeEF4aXNFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdheCcpKTtcbiAgICAgICAgeEF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4MScsICcwJyk7XG4gICAgICAgIHhBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneTEnLCAnNTAlJyk7XG4gICAgICAgIHhBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneDInLCAnMTAwJScpO1xuICAgICAgICB4QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3kyJywgJzUwJScpO1xuICAgICAgICBfdGhpcy5zdmdFbGVtXy5hcHBlbmRDaGlsZCh4QXhpc0VsZW0pO1xuICAgICAgICB2YXIgeUF4aXNFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ2xpbmUnKTtcbiAgICAgICAgeUF4aXNFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdheCcpKTtcbiAgICAgICAgeUF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4MScsICc1MCUnKTtcbiAgICAgICAgeUF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5MScsICcwJyk7XG4gICAgICAgIHlBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneDInLCAnNTAlJyk7XG4gICAgICAgIHlBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneTInLCAnMTAwJScpO1xuICAgICAgICBfdGhpcy5zdmdFbGVtXy5hcHBlbmRDaGlsZCh5QXhpc0VsZW0pO1xuICAgICAgICB2YXIgbGluZUVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAnbGluZScpO1xuICAgICAgICBsaW5lRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgnbCcpKTtcbiAgICAgICAgbGluZUVsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3gxJywgJzUwJScpO1xuICAgICAgICBsaW5lRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneTEnLCAnNTAlJyk7XG4gICAgICAgIF90aGlzLnN2Z0VsZW1fLmFwcGVuZENoaWxkKGxpbmVFbGVtKTtcbiAgICAgICAgX3RoaXMubGluZUVsZW1fID0gbGluZUVsZW07XG4gICAgICAgIHZhciBtYXJrZXJFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ2NpcmNsZScpO1xuICAgICAgICBtYXJrZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdtJykpO1xuICAgICAgICBtYXJrZXJFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICdyJywgJzJweCcpO1xuICAgICAgICBfdGhpcy5zdmdFbGVtXy5hcHBlbmRDaGlsZChtYXJrZXJFbGVtKTtcbiAgICAgICAgX3RoaXMubWFya2VyRWxlbV8gPSBtYXJrZXJFbGVtO1xuICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgX3RoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICBfdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgX3RoaXMudXBkYXRlKCk7XG4gICAgICAgIGNvbmZpZy5tb2RlbC5lbWl0dGVyLm9uKCdkaXNwb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMucGFkRWxlbV8gPSBEaXNwb3NpbmdVdGlsLmRpc3Bvc2VFbGVtZW50KF90aGlzLnBhZEVsZW1fKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvaW50MmRQYWRJbnB1dFZpZXcucHJvdG90eXBlLCBcInBhZEVsZW1lbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wYWRFbGVtXykge1xuICAgICAgICAgICAgICAgIHRocm93IHBhbmVfZXJyb3JfMS5QYW5lRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYWRFbGVtXztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb2ludDJkUGFkSW5wdXRWaWV3LnByb3RvdHlwZSwgXCJhbGxGb2N1c2FibGVFbGVtZW50c1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBhZEVsZW1fKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcGFuZV9lcnJvcl8xLlBhbmVFcnJvci5hbHJlYWR5RGlzcG9zZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5wYWRFbGVtX107XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBQb2ludDJkUGFkSW5wdXRWaWV3LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmZvbGRhYmxlLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUodW5kZWZpbmVkLCAnZXhwYW5kZWQnKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUodW5kZWZpbmVkLCAnZXhwYW5kZWQnKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxpbmVFbGVtID0gdGhpcy5saW5lRWxlbV87XG4gICAgICAgIHZhciBtYXJrZXJFbGVtID0gdGhpcy5tYXJrZXJFbGVtXztcbiAgICAgICAgaWYgKCFsaW5lRWxlbSB8fCAhbWFya2VyRWxlbSkge1xuICAgICAgICAgICAgdGhyb3cgcGFuZV9lcnJvcl8xLlBhbmVFcnJvci5hbHJlYWR5RGlzcG9zZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX2EgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlLmdldENvbXBvbmVudHMoKSwgeCA9IF9hWzBdLCB5ID0gX2FbMV07XG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heFZhbHVlXztcbiAgICAgICAgdmFyIHB4ID0gbnVtYmVyX3V0aWxfMS5OdW1iZXJVdGlsLm1hcCh4LCAtbWF4LCArbWF4LCAwLCAxMDApO1xuICAgICAgICB2YXIgcHkgPSBudW1iZXJfdXRpbF8xLk51bWJlclV0aWwubWFwKHksIC1tYXgsICttYXgsIDAsIDEwMCk7XG4gICAgICAgIHZhciBpcHkgPSB0aGlzLmludmVydHNZXyA/IDEwMCAtIHB5IDogcHk7XG4gICAgICAgIGxpbmVFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4MicsIHB4ICsgXCIlXCIpO1xuICAgICAgICBsaW5lRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneTInLCBpcHkgKyBcIiVcIik7XG4gICAgICAgIG1hcmtlckVsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ2N4JywgcHggKyBcIiVcIik7XG4gICAgICAgIG1hcmtlckVsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ2N5JywgaXB5ICsgXCIlXCIpO1xuICAgIH07XG4gICAgUG9pbnQyZFBhZElucHV0Vmlldy5wcm90b3R5cGUub25WYWx1ZUNoYW5nZV8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfTtcbiAgICBQb2ludDJkUGFkSW5wdXRWaWV3LnByb3RvdHlwZS5vbkZvbGRhYmxlQ2hhbmdlXyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9O1xuICAgIHJldHVybiBQb2ludDJkUGFkSW5wdXRWaWV3O1xufSh2aWV3XzEuVmlldykpO1xuZXhwb3J0cy5Qb2ludDJkUGFkSW5wdXRWaWV3ID0gUG9pbnQyZFBhZElucHV0VmlldztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvcG9pbnQtMmQtdGV4dC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvcG9pbnQtMmQtdGV4dC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBvaW50MmRUZXh0SW5wdXRWaWV3ID0gdm9pZCAwO1xudmFyIGNsYXNzX25hbWVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvY2xhc3MtbmFtZSAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9jbGFzcy1uYW1lLnRzXCIpO1xudmFyIERpc3Bvc2luZ1V0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2Rpc3Bvc2luZy11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2Rpc3Bvc2luZy11dGlsLnRzXCIpO1xudmFyIHBhbmVfZXJyb3JfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvcGFuZS1lcnJvciAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9wYW5lLWVycm9yLnRzXCIpO1xudmFyIHZpZXdfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3ZpZXcgKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvdmlldy50c1wiKTtcbnZhciBDT01QT05FTlRfTEFCRUxTID0gWydYJywgJ1knXTtcbnZhciBjbGFzc05hbWUgPSBjbGFzc19uYW1lXzEuQ2xhc3NOYW1lKCdwMmR0eHQnLCAnaW5wdXQnKTtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgUG9pbnQyZFRleHRJbnB1dFZpZXcgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFBvaW50MmRUZXh0SW5wdXRWaWV3LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFBvaW50MmRUZXh0SW5wdXRWaWV3KGRvY3VtZW50LCBjb25maWcpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZG9jdW1lbnQsIGNvbmZpZykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25WYWx1ZUNoYW5nZV8gPSBfdGhpcy5vblZhbHVlQ2hhbmdlXy5iaW5kKF90aGlzKTtcbiAgICAgICAgX3RoaXMuZm9ybWF0dGVyc18gPSBbY29uZmlnLnhGb3JtYXR0ZXIsIGNvbmZpZy55Rm9ybWF0dGVyXTtcbiAgICAgICAgX3RoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgpKTtcbiAgICAgICAgdmFyIGlucHV0RWxlbXMgPSBDT01QT05FTlRfTEFCRUxTLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaW5wdXRFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgnaScpKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS50eXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0RWxlbTtcbiAgICAgICAgfSk7XG4gICAgICAgIENPTVBPTkVOVF9MQUJFTFMuZm9yRWFjaChmdW5jdGlvbiAoXywgaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCd3JykpO1xuICAgICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChpbnB1dEVsZW1zW2luZGV4XSk7XG4gICAgICAgICAgICBfdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGVsZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMuaW5wdXRFbGVtc18gPSBbaW5wdXRFbGVtc1swXSwgaW5wdXRFbGVtc1sxXV07XG4gICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCBfdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgIF90aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICBfdGhpcy51cGRhdGUoKTtcbiAgICAgICAgY29uZmlnLm1vZGVsLmVtaXR0ZXIub24oJ2Rpc3Bvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMuaW5wdXRFbGVtc18pIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5pbnB1dEVsZW1zXy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIERpc3Bvc2luZ1V0aWwuZGlzcG9zZUVsZW1lbnQoZWxlbSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgX3RoaXMuaW5wdXRFbGVtc18gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9pbnQyZFRleHRJbnB1dFZpZXcucHJvdG90eXBlLCBcImlucHV0RWxlbWVudHNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pbnB1dEVsZW1zXykge1xuICAgICAgICAgICAgICAgIHRocm93IHBhbmVfZXJyb3JfMS5QYW5lRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dEVsZW1zXztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFBvaW50MmRUZXh0SW5wdXRWaWV3LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBpbnB1dEVsZW1zID0gdGhpcy5pbnB1dEVsZW1zXztcbiAgICAgICAgaWYgKCFpbnB1dEVsZW1zKSB7XG4gICAgICAgICAgICB0aHJvdyBwYW5lX2Vycm9yXzEuUGFuZUVycm9yLmFscmVhZHlEaXNwb3NlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciB4eUNvbXBzID0gdGhpcy52YWx1ZS5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKCk7XG4gICAgICAgIHh5Q29tcHMuZm9yRWFjaChmdW5jdGlvbiAoY29tcCwgaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBpbnB1dEVsZW0gPSBpbnB1dEVsZW1zW2luZGV4XTtcbiAgICAgICAgICAgIGlucHV0RWxlbS52YWx1ZSA9IF90aGlzLmZvcm1hdHRlcnNfW2luZGV4XS5mb3JtYXQoY29tcCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUG9pbnQyZFRleHRJbnB1dFZpZXcucHJvdG90eXBlLm9uVmFsdWVDaGFuZ2VfID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIFBvaW50MmRUZXh0SW5wdXRWaWV3O1xufSh2aWV3XzEuVmlldykpO1xuZXhwb3J0cy5Qb2ludDJkVGV4dElucHV0VmlldyA9IFBvaW50MmRUZXh0SW5wdXRWaWV3O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvdmlldy9pbnB1dC9zbGlkZXItdGV4dC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy92aWV3L2lucHV0L3NsaWRlci10ZXh0LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNsaWRlclRleHRJbnB1dFZpZXcgPSB2b2lkIDA7XG52YXIgY2xhc3NfbmFtZV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy9jbGFzcy1uYW1lICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2NsYXNzLW5hbWUudHNcIik7XG52YXIgdmlld18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdmlldyAqLyBcIi4vc3JjL21haW4vanMvdmlldy92aWV3LnRzXCIpO1xudmFyIGNsYXNzTmFtZSA9IGNsYXNzX25hbWVfMS5DbGFzc05hbWUoJ3NsZHR4dCcsICdpbnB1dCcpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBTbGlkZXJUZXh0SW5wdXRWaWV3ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTbGlkZXJUZXh0SW5wdXRWaWV3LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNsaWRlclRleHRJbnB1dFZpZXcoZG9jdW1lbnQsIGNvbmZpZykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkb2N1bWVudCwgY29uZmlnKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCkpO1xuICAgICAgICB2YXIgc2xpZGVyRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzbGlkZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdzJykpO1xuICAgICAgICBfdGhpcy5zbGlkZXJJbnB1dFZpZXdfID0gY29uZmlnLnNsaWRlcklucHV0VmlldztcbiAgICAgICAgc2xpZGVyRWxlbS5hcHBlbmRDaGlsZChfdGhpcy5zbGlkZXJJbnB1dFZpZXdfLmVsZW1lbnQpO1xuICAgICAgICBfdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHNsaWRlckVsZW0pO1xuICAgICAgICB2YXIgdGV4dEVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGV4dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ3QnKSk7XG4gICAgICAgIF90aGlzLnRleHRJbnB1dFZpZXdfID0gY29uZmlnLnRleHRJbnB1dFZpZXc7XG4gICAgICAgIHRleHRFbGVtLmFwcGVuZENoaWxkKF90aGlzLnRleHRJbnB1dFZpZXdfLmVsZW1lbnQpO1xuICAgICAgICBfdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRleHRFbGVtKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2xpZGVyVGV4dElucHV0Vmlldy5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNsaWRlcklucHV0Vmlld18udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTbGlkZXJUZXh0SW5wdXRWaWV3LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc2xpZGVySW5wdXRWaWV3Xy51cGRhdGUoKTtcbiAgICAgICAgdGhpcy50ZXh0SW5wdXRWaWV3Xy51cGRhdGUoKTtcbiAgICB9O1xuICAgIHJldHVybiBTbGlkZXJUZXh0SW5wdXRWaWV3O1xufSh2aWV3XzEuVmlldykpO1xuZXhwb3J0cy5TbGlkZXJUZXh0SW5wdXRWaWV3ID0gU2xpZGVyVGV4dElucHV0VmlldztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvaW5wdXQvc2xpZGVyLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy92aWV3L2lucHV0L3NsaWRlci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2xpZGVySW5wdXRWaWV3ID0gdm9pZCAwO1xudmFyIGNsYXNzX25hbWVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvY2xhc3MtbmFtZSAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9jbGFzcy1uYW1lLnRzXCIpO1xudmFyIERpc3Bvc2luZ1V0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2Rpc3Bvc2luZy11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2Rpc3Bvc2luZy11dGlsLnRzXCIpO1xudmFyIG51bWJlcl91dGlsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL251bWJlci11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL251bWJlci11dGlsLnRzXCIpO1xudmFyIHBhbmVfZXJyb3JfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvcGFuZS1lcnJvciAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9wYW5lLWVycm9yLnRzXCIpO1xudmFyIHZpZXdfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3ZpZXcgKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvdmlldy50c1wiKTtcbnZhciBjbGFzc05hbWUgPSBjbGFzc19uYW1lXzEuQ2xhc3NOYW1lKCdzbGQnLCAnaW5wdXQnKTtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgU2xpZGVySW5wdXRWaWV3ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTbGlkZXJJbnB1dFZpZXcsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2xpZGVySW5wdXRWaWV3KGRvY3VtZW50LCBjb25maWcpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZG9jdW1lbnQsIGNvbmZpZykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25WYWx1ZUNoYW5nZV8gPSBfdGhpcy5vblZhbHVlQ2hhbmdlXy5iaW5kKF90aGlzKTtcbiAgICAgICAgX3RoaXMubWluVmFsdWVfID0gY29uZmlnLm1pblZhbHVlO1xuICAgICAgICBfdGhpcy5tYXhWYWx1ZV8gPSBjb25maWcubWF4VmFsdWU7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoKSk7XG4gICAgICAgIHZhciBvdXRlckVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgb3V0ZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdvJykpO1xuICAgICAgICBvdXRlckVsZW0udGFiSW5kZXggPSAwO1xuICAgICAgICBfdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKG91dGVyRWxlbSk7XG4gICAgICAgIF90aGlzLm91dGVyRWxlbV8gPSBvdXRlckVsZW07XG4gICAgICAgIHZhciBpbm5lckVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaW5uZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdpJykpO1xuICAgICAgICBfdGhpcy5vdXRlckVsZW1fLmFwcGVuZENoaWxkKGlubmVyRWxlbSk7XG4gICAgICAgIF90aGlzLmlubmVyRWxlbV8gPSBpbm5lckVsZW07XG4gICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCBfdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgIF90aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICBfdGhpcy51cGRhdGUoKTtcbiAgICAgICAgY29uZmlnLm1vZGVsLmVtaXR0ZXIub24oJ2Rpc3Bvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5pbm5lckVsZW1fID0gRGlzcG9zaW5nVXRpbC5kaXNwb3NlRWxlbWVudChfdGhpcy5pbm5lckVsZW1fKTtcbiAgICAgICAgICAgIF90aGlzLm91dGVyRWxlbV8gPSBEaXNwb3NpbmdVdGlsLmRpc3Bvc2VFbGVtZW50KF90aGlzLm91dGVyRWxlbV8pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2xpZGVySW5wdXRWaWV3LnByb3RvdHlwZSwgXCJvdXRlckVsZW1lbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5vdXRlckVsZW1fKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcGFuZV9lcnJvcl8xLlBhbmVFcnJvci5hbHJlYWR5RGlzcG9zZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLm91dGVyRWxlbV87XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2xpZGVySW5wdXRWaWV3LnByb3RvdHlwZSwgXCJpbm5lckVsZW1lbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pbm5lckVsZW1fKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcGFuZV9lcnJvcl8xLlBhbmVFcnJvci5hbHJlYWR5RGlzcG9zZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlubmVyRWxlbV87XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTbGlkZXJJbnB1dFZpZXcucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlubmVyRWxlbV8pIHtcbiAgICAgICAgICAgIHRocm93IHBhbmVfZXJyb3JfMS5QYW5lRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHAgPSBudW1iZXJfdXRpbF8xLk51bWJlclV0aWwuY29uc3RyYWluKG51bWJlcl91dGlsXzEuTnVtYmVyVXRpbC5tYXAodGhpcy52YWx1ZS5yYXdWYWx1ZSwgdGhpcy5taW5WYWx1ZV8sIHRoaXMubWF4VmFsdWVfLCAwLCAxMDApLCAwLCAxMDApO1xuICAgICAgICB0aGlzLmlubmVyRWxlbV8uc3R5bGUud2lkdGggPSBwICsgXCIlXCI7XG4gICAgfTtcbiAgICBTbGlkZXJJbnB1dFZpZXcucHJvdG90eXBlLm9uVmFsdWVDaGFuZ2VfID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIFNsaWRlcklucHV0Vmlldztcbn0odmlld18xLlZpZXcpKTtcbmV4cG9ydHMuU2xpZGVySW5wdXRWaWV3ID0gU2xpZGVySW5wdXRWaWV3O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvdmlldy9pbnB1dC9zdi1wYWxldHRlLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvdmlldy9pbnB1dC9zdi1wYWxldHRlLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU3ZQYWxldHRlSW5wdXRWaWV3ID0gdm9pZCAwO1xudmFyIGNsYXNzX25hbWVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvY2xhc3MtbmFtZSAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9jbGFzcy1uYW1lLnRzXCIpO1xudmFyIGNvbG9yX21vZGVsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2NvbG9yLW1vZGVsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2NvbG9yLW1vZGVsLnRzXCIpO1xudmFyIERpc3Bvc2luZ1V0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2Rpc3Bvc2luZy11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2Rpc3Bvc2luZy11dGlsLnRzXCIpO1xudmFyIERvbVV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2RvbS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2RvbS11dGlsLnRzXCIpO1xudmFyIG51bWJlcl91dGlsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL251bWJlci11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL251bWJlci11dGlsLnRzXCIpO1xudmFyIHBhbmVfZXJyb3JfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvcGFuZS1lcnJvciAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9wYW5lLWVycm9yLnRzXCIpO1xudmFyIHZpZXdfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3ZpZXcgKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvdmlldy50c1wiKTtcbnZhciBjbGFzc05hbWUgPSBjbGFzc19uYW1lXzEuQ2xhc3NOYW1lKCdzdnAnLCAnaW5wdXQnKTtcbnZhciBDQU5WQVNfUkVTT0wgPSA2NDtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgU3ZQYWxldHRlSW5wdXRWaWV3ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdlBhbGV0dGVJbnB1dFZpZXcsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ZQYWxldHRlSW5wdXRWaWV3KGRvY3VtZW50LCBjb25maWcpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZG9jdW1lbnQsIGNvbmZpZykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25WYWx1ZUNoYW5nZV8gPSBfdGhpcy5vblZhbHVlQ2hhbmdlXy5iaW5kKF90aGlzKTtcbiAgICAgICAgX3RoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgIF90aGlzLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIF90aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgX3RoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgpKTtcbiAgICAgICAgX3RoaXMuZWxlbWVudC50YWJJbmRleCA9IDA7XG4gICAgICAgIHZhciBjYW52YXNFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNhbnZhc0VsZW0uaGVpZ2h0ID0gQ0FOVkFTX1JFU09MO1xuICAgICAgICBjYW52YXNFbGVtLndpZHRoID0gQ0FOVkFTX1JFU09MO1xuICAgICAgICBjYW52YXNFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdjJykpO1xuICAgICAgICBfdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNhbnZhc0VsZW0pO1xuICAgICAgICBfdGhpcy5jYW52YXNFbGVtXyA9IGNhbnZhc0VsZW07XG4gICAgICAgIHZhciBtYXJrZXJFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIG1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ20nKSk7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobWFya2VyRWxlbSk7XG4gICAgICAgIF90aGlzLm1hcmtlckVsZW1fID0gbWFya2VyRWxlbTtcbiAgICAgICAgX3RoaXMudXBkYXRlKCk7XG4gICAgICAgIGNvbmZpZy5tb2RlbC5lbWl0dGVyLm9uKCdkaXNwb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuY2FudmFzRWxlbV8gPSBEaXNwb3NpbmdVdGlsLmRpc3Bvc2VFbGVtZW50KF90aGlzLmNhbnZhc0VsZW1fKTtcbiAgICAgICAgICAgIF90aGlzLm1hcmtlckVsZW1fID0gRGlzcG9zaW5nVXRpbC5kaXNwb3NlRWxlbWVudChfdGhpcy5tYXJrZXJFbGVtXyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdlBhbGV0dGVJbnB1dFZpZXcucHJvdG90eXBlLCBcImNhbnZhc0VsZW1lbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW52YXNFbGVtXykge1xuICAgICAgICAgICAgICAgIHRocm93IHBhbmVfZXJyb3JfMS5QYW5lRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXNFbGVtXztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN2UGFsZXR0ZUlucHV0Vmlldy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMubWFya2VyRWxlbV8pIHtcbiAgICAgICAgICAgIHRocm93IHBhbmVfZXJyb3JfMS5QYW5lRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGN0eCA9IERvbVV0aWwuZ2V0Q2FudmFzQ29udGV4dCh0aGlzLmNhbnZhc0VsZW1lbnQpO1xuICAgICAgICBpZiAoIWN0eCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgdmFyIGhzdkNvbXBzID0gYy5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5jYW52YXNFbGVtZW50LndpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5jYW52YXNFbGVtZW50LmhlaWdodDtcbiAgICAgICAgdmFyIGltZ0RhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgZGF0YSA9IGltZ0RhdGEuZGF0YTtcbiAgICAgICAgZm9yICh2YXIgaXkgPSAwOyBpeSA8IGhlaWdodDsgaXkrKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaXggPSAwOyBpeCA8IHdpZHRoOyBpeCsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHMgPSBudW1iZXJfdXRpbF8xLk51bWJlclV0aWwubWFwKGl4LCAwLCB3aWR0aCwgMCwgMTAwKTtcbiAgICAgICAgICAgICAgICB2YXIgdiA9IG51bWJlcl91dGlsXzEuTnVtYmVyVXRpbC5tYXAoaXksIDAsIGhlaWdodCwgMTAwLCAwKTtcbiAgICAgICAgICAgICAgICB2YXIgcmdiQ29tcHMgPSBjb2xvcl9tb2RlbF8xLmhzdlRvUmdiKGhzdkNvbXBzWzBdLCBzLCB2KTtcbiAgICAgICAgICAgICAgICB2YXIgaSA9IChpeSAqIHdpZHRoICsgaXgpICogNDtcbiAgICAgICAgICAgICAgICBkYXRhW2ldID0gcmdiQ29tcHNbMF07XG4gICAgICAgICAgICAgICAgZGF0YVtpICsgMV0gPSByZ2JDb21wc1sxXTtcbiAgICAgICAgICAgICAgICBkYXRhW2kgKyAyXSA9IHJnYkNvbXBzWzJdO1xuICAgICAgICAgICAgICAgIGRhdGFbaSArIDNdID0gMjU1O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoaW1nRGF0YSwgMCwgMCk7XG4gICAgICAgIHZhciBsZWZ0ID0gbnVtYmVyX3V0aWxfMS5OdW1iZXJVdGlsLm1hcChoc3ZDb21wc1sxXSwgMCwgMTAwLCAwLCAxMDApO1xuICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCIlXCI7XG4gICAgICAgIHZhciB0b3AgPSBudW1iZXJfdXRpbF8xLk51bWJlclV0aWwubWFwKGhzdkNvbXBzWzJdLCAwLCAxMDAsIDEwMCwgMCk7XG4gICAgICAgIHRoaXMubWFya2VyRWxlbV8uc3R5bGUudG9wID0gdG9wICsgXCIlXCI7XG4gICAgfTtcbiAgICBTdlBhbGV0dGVJbnB1dFZpZXcucHJvdG90eXBlLm9uVmFsdWVDaGFuZ2VfID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIFN2UGFsZXR0ZUlucHV0Vmlldztcbn0odmlld18xLlZpZXcpKTtcbmV4cG9ydHMuU3ZQYWxldHRlSW5wdXRWaWV3ID0gU3ZQYWxldHRlSW5wdXRWaWV3O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvdmlldy9pbnB1dC90ZXh0LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvdmlldy9pbnB1dC90ZXh0LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGV4dElucHV0VmlldyA9IHZvaWQgMDtcbnZhciBjbGFzc19uYW1lXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2NsYXNzLW5hbWUgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvY2xhc3MtbmFtZS50c1wiKTtcbnZhciBEaXNwb3NpbmdVdGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy9kaXNwb3NpbmctdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9kaXNwb3NpbmctdXRpbC50c1wiKTtcbnZhciBwYW5lX2Vycm9yXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL3BhbmUtZXJyb3IgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvcGFuZS1lcnJvci50c1wiKTtcbnZhciB2aWV3XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi92aWV3ICovIFwiLi9zcmMvbWFpbi9qcy92aWV3L3ZpZXcudHNcIik7XG52YXIgY2xhc3NOYW1lID0gY2xhc3NfbmFtZV8xLkNsYXNzTmFtZSgndHh0JywgJ2lucHV0Jyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIFRleHRJbnB1dFZpZXcgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRleHRJbnB1dFZpZXcsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVGV4dElucHV0Vmlldyhkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRvY3VtZW50LCBjb25maWcpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uVmFsdWVDaGFuZ2VfID0gX3RoaXMub25WYWx1ZUNoYW5nZV8uYmluZChfdGhpcyk7XG4gICAgICAgIF90aGlzLmZvcm1hdHRlcl8gPSBjb25maWcuZm9ybWF0dGVyO1xuICAgICAgICBfdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCkpO1xuICAgICAgICB2YXIgaW5wdXRFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgaW5wdXRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdpJykpO1xuICAgICAgICBpbnB1dEVsZW0udHlwZSA9ICd0ZXh0JztcbiAgICAgICAgX3RoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChpbnB1dEVsZW0pO1xuICAgICAgICBfdGhpcy5pbnB1dEVsZW1fID0gaW5wdXRFbGVtO1xuICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgX3RoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICBfdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgX3RoaXMudXBkYXRlKCk7XG4gICAgICAgIGNvbmZpZy5tb2RlbC5lbWl0dGVyLm9uKCdkaXNwb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuaW5wdXRFbGVtXyA9IERpc3Bvc2luZ1V0aWwuZGlzcG9zZUVsZW1lbnQoX3RoaXMuaW5wdXRFbGVtXyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0SW5wdXRWaWV3LnByb3RvdHlwZSwgXCJpbnB1dEVsZW1lbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pbnB1dEVsZW1fKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcGFuZV9lcnJvcl8xLlBhbmVFcnJvci5hbHJlYWR5RGlzcG9zZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0RWxlbV87XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBUZXh0SW5wdXRWaWV3LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbnB1dEVsZW1fKSB7XG4gICAgICAgICAgICB0aHJvdyBwYW5lX2Vycm9yXzEuUGFuZUVycm9yLmFscmVhZHlEaXNwb3NlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5wdXRFbGVtXy52YWx1ZSA9IHRoaXMuZm9ybWF0dGVyXy5mb3JtYXQodGhpcy52YWx1ZS5yYXdWYWx1ZSk7XG4gICAgfTtcbiAgICBUZXh0SW5wdXRWaWV3LnByb3RvdHlwZS5vblZhbHVlQ2hhbmdlXyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9O1xuICAgIHJldHVybiBUZXh0SW5wdXRWaWV3O1xufSh2aWV3XzEuVmlldykpO1xuZXhwb3J0cy5UZXh0SW5wdXRWaWV3ID0gVGV4dElucHV0VmlldztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvbGFiZWxlZC50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL3ZpZXcvbGFiZWxlZC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxhYmVsZWRWaWV3ID0gdm9pZCAwO1xudmFyIGNsYXNzX25hbWVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21pc2MvY2xhc3MtbmFtZSAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9jbGFzcy1uYW1lLnRzXCIpO1xudmFyIHZpZXdfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdmlldyAqLyBcIi4vc3JjL21haW4vanMvdmlldy92aWV3LnRzXCIpO1xudmFyIGNsYXNzTmFtZSA9IGNsYXNzX25hbWVfMS5DbGFzc05hbWUoJ2xibCcpO1xuZnVuY3Rpb24gY3JlYXRlTGFiZWxOb2RlKGRvY3VtZW50LCBsYWJlbCkge1xuICAgIHZhciBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIHZhciBsaW5lTm9kZXMgPSBsYWJlbC5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsaW5lKTtcbiAgICB9KTtcbiAgICBsaW5lTm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobGluZU5vZGUsIGluZGV4KSB7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChsaW5lTm9kZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZyYWc7XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIExhYmVsZWRWaWV3ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhMYWJlbGVkVmlldywgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBMYWJlbGVkVmlldyhkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRvY3VtZW50LCBjb25maWcpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmxhYmVsID0gY29uZmlnLmxhYmVsO1xuICAgICAgICBfdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCkpO1xuICAgICAgICB2YXIgbGFiZWxFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGxhYmVsRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgnbCcpKTtcbiAgICAgICAgbGFiZWxFbGVtLmFwcGVuZENoaWxkKGNyZWF0ZUxhYmVsTm9kZShkb2N1bWVudCwgX3RoaXMubGFiZWwpKTtcbiAgICAgICAgX3RoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChsYWJlbEVsZW0pO1xuICAgICAgICB2YXIgdmlld0VsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdmlld0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ3YnKSk7XG4gICAgICAgIHZpZXdFbGVtLmFwcGVuZENoaWxkKGNvbmZpZy52aWV3LmVsZW1lbnQpO1xuICAgICAgICBfdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHZpZXdFbGVtKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gTGFiZWxlZFZpZXc7XG59KHZpZXdfMS5WaWV3KSk7XG5leHBvcnRzLkxhYmVsZWRWaWV3ID0gTGFiZWxlZFZpZXc7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy92aWV3L21vbml0b3IvZ3JhcGgudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy92aWV3L21vbml0b3IvZ3JhcGgudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HcmFwaE1vbml0b3JWaWV3ID0gdm9pZCAwO1xudmFyIGNsYXNzX25hbWVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvY2xhc3MtbmFtZSAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9jbGFzcy1uYW1lLnRzXCIpO1xudmFyIERpc3Bvc2luZ1V0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2Rpc3Bvc2luZy11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2Rpc3Bvc2luZy11dGlsLnRzXCIpO1xudmFyIERvbVV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2RvbS11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2RvbS11dGlsLnRzXCIpO1xudmFyIG51bWJlcl91dGlsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL251bWJlci11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL251bWJlci11dGlsLnRzXCIpO1xudmFyIHBhbmVfZXJyb3JfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvcGFuZS1lcnJvciAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9wYW5lLWVycm9yLnRzXCIpO1xudmFyIHZpZXdfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3ZpZXcgKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvdmlldy50c1wiKTtcbnZhciBTVkdfTlMgPSBEb21VdGlsLlNWR19OUztcbnZhciBjbGFzc05hbWUgPSBjbGFzc19uYW1lXzEuQ2xhc3NOYW1lKCdncnAnLCAnbW9uaXRvcicpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBHcmFwaE1vbml0b3JWaWV3ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhHcmFwaE1vbml0b3JWaWV3LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEdyYXBoTW9uaXRvclZpZXcoZG9jdW1lbnQsIGNvbmZpZykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkb2N1bWVudCwgY29uZmlnKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vbkN1cnNvckNoYW5nZV8gPSBfdGhpcy5vbkN1cnNvckNoYW5nZV8uYmluZChfdGhpcyk7XG4gICAgICAgIF90aGlzLm9uVmFsdWVVcGRhdGVfID0gX3RoaXMub25WYWx1ZVVwZGF0ZV8uYmluZChfdGhpcyk7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoKSk7XG4gICAgICAgIF90aGlzLmZvcm1hdHRlcl8gPSBjb25maWcuZm9ybWF0dGVyO1xuICAgICAgICBfdGhpcy5taW5WYWx1ZV8gPSBjb25maWcubWluVmFsdWU7XG4gICAgICAgIF90aGlzLm1heFZhbHVlXyA9IGNvbmZpZy5tYXhWYWx1ZTtcbiAgICAgICAgX3RoaXMuY3Vyc29yXyA9IGNvbmZpZy5jdXJzb3I7XG4gICAgICAgIF90aGlzLmN1cnNvcl8uZW1pdHRlci5vbignY2hhbmdlJywgX3RoaXMub25DdXJzb3JDaGFuZ2VfKTtcbiAgICAgICAgdmFyIHN2Z0VsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAnc3ZnJyk7XG4gICAgICAgIHN2Z0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ2cnKSk7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc3ZnRWxlbSk7XG4gICAgICAgIF90aGlzLnN2Z0VsZW1fID0gc3ZnRWxlbTtcbiAgICAgICAgdmFyIGxpbmVFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3BvbHlsaW5lJyk7XG4gICAgICAgIF90aGlzLnN2Z0VsZW1fLmFwcGVuZENoaWxkKGxpbmVFbGVtKTtcbiAgICAgICAgX3RoaXMubGluZUVsZW1fID0gbGluZUVsZW07XG4gICAgICAgIHZhciB0b29sdGlwRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0b29sdGlwRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgndCcpKTtcbiAgICAgICAgX3RoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0b29sdGlwRWxlbSk7XG4gICAgICAgIF90aGlzLnRvb2x0aXBFbGVtXyA9IHRvb2x0aXBFbGVtO1xuICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbigndXBkYXRlJywgX3RoaXMub25WYWx1ZVVwZGF0ZV8pO1xuICAgICAgICBfdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgX3RoaXMudXBkYXRlKCk7XG4gICAgICAgIGNvbmZpZy5tb2RlbC5lbWl0dGVyLm9uKCdkaXNwb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMubGluZUVsZW1fID0gRGlzcG9zaW5nVXRpbC5kaXNwb3NlRWxlbWVudChfdGhpcy5saW5lRWxlbV8pO1xuICAgICAgICAgICAgX3RoaXMuc3ZnRWxlbV8gPSBEaXNwb3NpbmdVdGlsLmRpc3Bvc2VFbGVtZW50KF90aGlzLnN2Z0VsZW1fKTtcbiAgICAgICAgICAgIF90aGlzLnRvb2x0aXBFbGVtXyA9IERpc3Bvc2luZ1V0aWwuZGlzcG9zZUVsZW1lbnQoX3RoaXMudG9vbHRpcEVsZW1fKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEdyYXBoTW9uaXRvclZpZXcucHJvdG90eXBlLCBcImdyYXBoRWxlbWVudFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnN2Z0VsZW1fKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcGFuZV9lcnJvcl8xLlBhbmVFcnJvci5hbHJlYWR5RGlzcG9zZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN2Z0VsZW1fO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgR3JhcGhNb25pdG9yVmlldy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdG9vbHRpcEVsZW0gPSB0aGlzLnRvb2x0aXBFbGVtXztcbiAgICAgICAgaWYgKCF0aGlzLmxpbmVFbGVtXyB8fCAhdGhpcy5zdmdFbGVtXyB8fCAhdG9vbHRpcEVsZW0pIHtcbiAgICAgICAgICAgIHRocm93IHBhbmVfZXJyb3JfMS5QYW5lRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuc3ZnRWxlbV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIC8vIEdyYXBoXG4gICAgICAgIHZhciBtYXhJbmRleCA9IHRoaXMudmFsdWUudG90YWxDb3VudCAtIDE7XG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pblZhbHVlXztcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4VmFsdWVfO1xuICAgICAgICB0aGlzLmxpbmVFbGVtXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAncG9pbnRzJywgdGhpcy52YWx1ZS5yYXdWYWx1ZXNcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHYsIGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgeCA9IG51bWJlcl91dGlsXzEuTnVtYmVyVXRpbC5tYXAoaW5kZXgsIDAsIG1heEluZGV4LCAwLCBib3VuZHMud2lkdGgpO1xuICAgICAgICAgICAgdmFyIHkgPSBudW1iZXJfdXRpbF8xLk51bWJlclV0aWwubWFwKHYsIG1pbiwgbWF4LCBib3VuZHMuaGVpZ2h0LCAwKTtcbiAgICAgICAgICAgIHJldHVybiBbeCwgeV0uam9pbignLCcpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJyAnKSk7XG4gICAgICAgIC8vIEN1cnNvclxuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlc1t0aGlzLmN1cnNvcl8uaW5kZXhdO1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdG9vbHRpcEVsZW0uY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUoJ3QnLCAndmFsaWQnKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdG9vbHRpcEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ3QnLCAndmFsaWQnKSk7XG4gICAgICAgIHZhciB0eCA9IG51bWJlcl91dGlsXzEuTnVtYmVyVXRpbC5tYXAodGhpcy5jdXJzb3JfLmluZGV4LCAwLCBtYXhJbmRleCwgMCwgYm91bmRzLndpZHRoKTtcbiAgICAgICAgdmFyIHR5ID0gbnVtYmVyX3V0aWxfMS5OdW1iZXJVdGlsLm1hcCh2YWx1ZSwgbWluLCBtYXgsIGJvdW5kcy5oZWlnaHQsIDApO1xuICAgICAgICB0b29sdGlwRWxlbS5zdHlsZS5sZWZ0ID0gdHggKyBcInB4XCI7XG4gICAgICAgIHRvb2x0aXBFbGVtLnN0eWxlLnRvcCA9IHR5ICsgXCJweFwiO1xuICAgICAgICB0b29sdGlwRWxlbS50ZXh0Q29udGVudCA9IFwiXCIgKyB0aGlzLmZvcm1hdHRlcl8uZm9ybWF0KHZhbHVlKTtcbiAgICB9O1xuICAgIEdyYXBoTW9uaXRvclZpZXcucHJvdG90eXBlLm9uVmFsdWVVcGRhdGVfID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH07XG4gICAgR3JhcGhNb25pdG9yVmlldy5wcm90b3R5cGUub25DdXJzb3JDaGFuZ2VfID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIEdyYXBoTW9uaXRvclZpZXc7XG59KHZpZXdfMS5WaWV3KSk7XG5leHBvcnRzLkdyYXBoTW9uaXRvclZpZXcgPSBHcmFwaE1vbml0b3JWaWV3O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vc3JjL21haW4vanMvdmlldy9tb25pdG9yL211bHRpLWxvZy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy92aWV3L21vbml0b3IvbXVsdGktbG9nLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk11bHRpTG9nTW9uaXRvclZpZXcgPSB2b2lkIDA7XG52YXIgY2xhc3NfbmFtZV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy9jbGFzcy1uYW1lICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2NsYXNzLW5hbWUudHNcIik7XG52YXIgRGlzcG9zaW5nVXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvZGlzcG9zaW5nLXV0aWwgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvZGlzcG9zaW5nLXV0aWwudHNcIik7XG52YXIgcGFuZV9lcnJvcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vbWlzYy9wYW5lLWVycm9yICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL3BhbmUtZXJyb3IudHNcIik7XG52YXIgdmlld18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vdmlldyAqLyBcIi4vc3JjL21haW4vanMvdmlldy92aWV3LnRzXCIpO1xudmFyIGNsYXNzTmFtZSA9IGNsYXNzX25hbWVfMS5DbGFzc05hbWUoJ21sbCcsICdtb25pdG9yJyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIE11bHRpTG9nTW9uaXRvclZpZXcgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE11bHRpTG9nTW9uaXRvclZpZXcsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTXVsdGlMb2dNb25pdG9yVmlldyhkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRvY3VtZW50LCBjb25maWcpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uVmFsdWVVcGRhdGVfID0gX3RoaXMub25WYWx1ZVVwZGF0ZV8uYmluZChfdGhpcyk7XG4gICAgICAgIF90aGlzLmZvcm1hdHRlcl8gPSBjb25maWcuZm9ybWF0dGVyO1xuICAgICAgICBfdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCkpO1xuICAgICAgICB2YXIgdGV4dGFyZWFFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICAgICAgdGV4dGFyZWFFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdpJykpO1xuICAgICAgICB0ZXh0YXJlYUVsZW0ucmVhZE9ubHkgPSB0cnVlO1xuICAgICAgICBfdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRleHRhcmVhRWxlbSk7XG4gICAgICAgIF90aGlzLnRleHRhcmVhRWxlbV8gPSB0ZXh0YXJlYUVsZW07XG4gICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCd1cGRhdGUnLCBfdGhpcy5vblZhbHVlVXBkYXRlXyk7XG4gICAgICAgIF90aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICBfdGhpcy51cGRhdGUoKTtcbiAgICAgICAgY29uZmlnLm1vZGVsLmVtaXR0ZXIub24oJ2Rpc3Bvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy50ZXh0YXJlYUVsZW1fID0gRGlzcG9zaW5nVXRpbC5kaXNwb3NlRWxlbWVudChfdGhpcy50ZXh0YXJlYUVsZW1fKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgTXVsdGlMb2dNb25pdG9yVmlldy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgZWxlbSA9IHRoaXMudGV4dGFyZWFFbGVtXztcbiAgICAgICAgaWYgKCFlbGVtKSB7XG4gICAgICAgICAgICB0aHJvdyBwYW5lX2Vycm9yXzEuUGFuZUVycm9yLmFscmVhZHlEaXNwb3NlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzaG91bGRTY3JvbGwgPSBlbGVtLnNjcm9sbFRvcCA9PT0gZWxlbS5zY3JvbGxIZWlnaHQgLSBlbGVtLmNsaWVudEhlaWdodDtcbiAgICAgICAgZWxlbS50ZXh0Q29udGVudCA9IHRoaXMudmFsdWUucmF3VmFsdWVzXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLmZvcm1hdHRlcl8uZm9ybWF0KHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgICAgZWxlbS5zY3JvbGxUb3AgPSBlbGVtLnNjcm9sbEhlaWdodDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTXVsdGlMb2dNb25pdG9yVmlldy5wcm90b3R5cGUub25WYWx1ZVVwZGF0ZV8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfTtcbiAgICByZXR1cm4gTXVsdGlMb2dNb25pdG9yVmlldztcbn0odmlld18xLlZpZXcpKTtcbmV4cG9ydHMuTXVsdGlMb2dNb25pdG9yVmlldyA9IE11bHRpTG9nTW9uaXRvclZpZXc7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy92aWV3L21vbml0b3Ivc2luZ2xlLWxvZy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vanMvdmlldy9tb25pdG9yL3NpbmdsZS1sb2cudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNpbmdsZUxvZ01vbml0b3JWaWV3ID0gdm9pZCAwO1xudmFyIGNsYXNzX25hbWVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvY2xhc3MtbmFtZSAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9jbGFzcy1uYW1lLnRzXCIpO1xudmFyIERpc3Bvc2luZ1V0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9taXNjL2Rpc3Bvc2luZy11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2Rpc3Bvc2luZy11dGlsLnRzXCIpO1xudmFyIHBhbmVfZXJyb3JfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL21pc2MvcGFuZS1lcnJvciAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9wYW5lLWVycm9yLnRzXCIpO1xudmFyIHZpZXdfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL3ZpZXcgKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvdmlldy50c1wiKTtcbnZhciBjbGFzc05hbWUgPSBjbGFzc19uYW1lXzEuQ2xhc3NOYW1lKCdzZ2wnLCAnbW9uaXRvcicpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBTaW5nbGVMb2dNb25pdG9yVmlldyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2luZ2xlTG9nTW9uaXRvclZpZXcsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2luZ2xlTG9nTW9uaXRvclZpZXcoZG9jdW1lbnQsIGNvbmZpZykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkb2N1bWVudCwgY29uZmlnKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vblZhbHVlVXBkYXRlXyA9IF90aGlzLm9uVmFsdWVVcGRhdGVfLmJpbmQoX3RoaXMpO1xuICAgICAgICBfdGhpcy5mb3JtYXR0ZXJfID0gY29uZmlnLmZvcm1hdHRlcjtcbiAgICAgICAgX3RoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgpKTtcbiAgICAgICAgdmFyIGlucHV0RWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgIGlucHV0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgnaScpKTtcbiAgICAgICAgaW5wdXRFbGVtLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgaW5wdXRFbGVtLnR5cGUgPSAndGV4dCc7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaW5wdXRFbGVtKTtcbiAgICAgICAgX3RoaXMuaW5wdXRFbGVtXyA9IGlucHV0RWxlbTtcbiAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ3VwZGF0ZScsIF90aGlzLm9uVmFsdWVVcGRhdGVfKTtcbiAgICAgICAgX3RoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgIF90aGlzLnVwZGF0ZSgpO1xuICAgICAgICBjb25maWcubW9kZWwuZW1pdHRlci5vbignZGlzcG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmlucHV0RWxlbV8gPSBEaXNwb3NpbmdVdGlsLmRpc3Bvc2VFbGVtZW50KF90aGlzLmlucHV0RWxlbV8pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTaW5nbGVMb2dNb25pdG9yVmlldy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5wdXRFbGVtXykge1xuICAgICAgICAgICAgdGhyb3cgcGFuZV9lcnJvcl8xLlBhbmVFcnJvci5hbHJlYWR5RGlzcG9zZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy52YWx1ZS5yYXdWYWx1ZXM7XG4gICAgICAgIHRoaXMuaW5wdXRFbGVtXy52YWx1ZSA9XG4gICAgICAgICAgICB2YWx1ZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gdGhpcy5mb3JtYXR0ZXJfLmZvcm1hdCh2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdKVxuICAgICAgICAgICAgICAgIDogJyc7XG4gICAgfTtcbiAgICBTaW5nbGVMb2dNb25pdG9yVmlldy5wcm90b3R5cGUub25WYWx1ZVVwZGF0ZV8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfTtcbiAgICByZXR1cm4gU2luZ2xlTG9nTW9uaXRvclZpZXc7XG59KHZpZXdfMS5WaWV3KSk7XG5leHBvcnRzLlNpbmdsZUxvZ01vbml0b3JWaWV3ID0gU2luZ2xlTG9nTW9uaXRvclZpZXc7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwiLi9zcmMvbWFpbi9qcy92aWV3L3Jvb3QudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy92aWV3L3Jvb3QudHMgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Sb290VmlldyA9IHZvaWQgMDtcbnZhciBjbGFzc19uYW1lXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9taXNjL2NsYXNzLW5hbWUgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvY2xhc3MtbmFtZS50c1wiKTtcbnZhciBEaXNwb3NpbmdVdGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbWlzYy9kaXNwb3NpbmctdXRpbCAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9kaXNwb3NpbmctdXRpbC50c1wiKTtcbnZhciBwYW5lX2Vycm9yXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9taXNjL3BhbmUtZXJyb3IgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvcGFuZS1lcnJvci50c1wiKTtcbnZhciB2aWV3XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3ZpZXcgKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvdmlldy50c1wiKTtcbnZhciBjbGFzc05hbWUgPSBjbGFzc19uYW1lXzEuQ2xhc3NOYW1lKCdyb3QnKTtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgUm9vdFZpZXcgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFJvb3RWaWV3LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJvb3RWaWV3KGRvY3VtZW50LCBjb25maWcpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZG9jdW1lbnQsIGNvbmZpZykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25Gb2xkZXJDaGFuZ2VfID0gX3RoaXMub25Gb2xkZXJDaGFuZ2VfLmJpbmQoX3RoaXMpO1xuICAgICAgICBfdGhpcy5mb2xkZXJfID0gY29uZmlnLmZvbGRlcjtcbiAgICAgICAgaWYgKF90aGlzLmZvbGRlcl8pIHtcbiAgICAgICAgICAgIF90aGlzLmZvbGRlcl8uZW1pdHRlci5vbignY2hhbmdlJywgX3RoaXMub25Gb2xkZXJDaGFuZ2VfKTtcbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCkpO1xuICAgICAgICB2YXIgZm9sZGVyID0gX3RoaXMuZm9sZGVyXztcbiAgICAgICAgaWYgKGZvbGRlcikge1xuICAgICAgICAgICAgdmFyIHRpdGxlRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgICAgdGl0bGVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCd0JykpO1xuICAgICAgICAgICAgdGl0bGVFbGVtLnRleHRDb250ZW50ID0gZm9sZGVyLnRpdGxlO1xuICAgICAgICAgICAgX3RoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aXRsZUVsZW0pO1xuICAgICAgICAgICAgdmFyIG1hcmtFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtYXJrRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgnbScpKTtcbiAgICAgICAgICAgIHRpdGxlRWxlbS5hcHBlbmRDaGlsZChtYXJrRWxlbSk7XG4gICAgICAgICAgICBfdGhpcy50aXRsZUVsZW1fID0gdGl0bGVFbGVtO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb250YWluZXJFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGNvbnRhaW5lckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ2MnKSk7XG4gICAgICAgIF90aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyRWxlbSk7XG4gICAgICAgIF90aGlzLmNvbnRhaW5lckVsZW1fID0gY29udGFpbmVyRWxlbTtcbiAgICAgICAgX3RoaXMuYXBwbHlNb2RlbF8oKTtcbiAgICAgICAgY29uZmlnLm1vZGVsLmVtaXR0ZXIub24oJ2Rpc3Bvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jb250YWluZXJFbGVtXyA9IERpc3Bvc2luZ1V0aWwuZGlzcG9zZUVsZW1lbnQoX3RoaXMuY29udGFpbmVyRWxlbV8pO1xuICAgICAgICAgICAgX3RoaXMuZm9sZGVyXyA9IG51bGw7XG4gICAgICAgICAgICBfdGhpcy50aXRsZUVsZW1fID0gRGlzcG9zaW5nVXRpbC5kaXNwb3NlRWxlbWVudChfdGhpcy50aXRsZUVsZW1fKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJvb3RWaWV3LnByb3RvdHlwZSwgXCJ0aXRsZUVsZW1lbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpdGxlRWxlbV87XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUm9vdFZpZXcucHJvdG90eXBlLCBcImNvbnRhaW5lckVsZW1lbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250YWluZXJFbGVtXykge1xuICAgICAgICAgICAgICAgIHRocm93IHBhbmVfZXJyb3JfMS5QYW5lRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXJFbGVtXztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFJvb3RWaWV3LnByb3RvdHlwZS5hcHBseU1vZGVsXyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lckVsZW0gPSB0aGlzLmNvbnRhaW5lckVsZW1fO1xuICAgICAgICBpZiAoIWNvbnRhaW5lckVsZW0pIHtcbiAgICAgICAgICAgIHRocm93IHBhbmVfZXJyb3JfMS5QYW5lRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGV4cGFuZGVkID0gdGhpcy5mb2xkZXJfID8gdGhpcy5mb2xkZXJfLnN0eWxlRXhwYW5kZWQgOiB0cnVlO1xuICAgICAgICB2YXIgZXhwYW5kZWRDbGFzcyA9IGNsYXNzTmFtZSh1bmRlZmluZWQsICdleHBhbmRlZCcpO1xuICAgICAgICBpZiAoZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGV4cGFuZGVkQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoZXhwYW5kZWRDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyRWxlbS5zdHlsZS5oZWlnaHQgPSB0aGlzLmZvbGRlcl9cbiAgICAgICAgICAgID8gdGhpcy5mb2xkZXJfLnN0eWxlSGVpZ2h0XG4gICAgICAgICAgICA6ICdhdXRvJztcbiAgICB9O1xuICAgIFJvb3RWaWV3LnByb3RvdHlwZS5vbkZvbGRlckNoYW5nZV8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYXBwbHlNb2RlbF8oKTtcbiAgICB9O1xuICAgIHJldHVybiBSb290Vmlldztcbn0odmlld18xLlZpZXcpKTtcbmV4cG9ydHMuUm9vdFZpZXcgPSBSb290VmlldztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvc2VwYXJhdG9yLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXG4gICEqKiogLi9zcmMvbWFpbi9qcy92aWV3L3NlcGFyYXRvci50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2VwYXJhdG9yVmlldyA9IHZvaWQgMDtcbnZhciBjbGFzc19uYW1lXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9taXNjL2NsYXNzLW5hbWUgKi8gXCIuL3NyYy9tYWluL2pzL21pc2MvY2xhc3MtbmFtZS50c1wiKTtcbnZhciB2aWV3XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3ZpZXcgKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvdmlldy50c1wiKTtcbnZhciBjbGFzc05hbWUgPSBjbGFzc19uYW1lXzEuQ2xhc3NOYW1lKCdzcHQnKTtcbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgU2VwYXJhdG9yVmlldyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2VwYXJhdG9yVmlldywgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTZXBhcmF0b3JWaWV3KGRvY3VtZW50LCBjb25maWcpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZG9jdW1lbnQsIGNvbmZpZykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgpKTtcbiAgICAgICAgdmFyIGhyRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2hyJyk7XG4gICAgICAgIGhyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgncicpKTtcbiAgICAgICAgX3RoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChockVsZW0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTZXBhcmF0b3JWaWV3O1xufSh2aWV3XzEuVmlldykpO1xuZXhwb3J0cy5TZXBhcmF0b3JWaWV3ID0gU2VwYXJhdG9yVmlldztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL2pzL3ZpZXcvdmlldy50c1wiOlxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3NyYy9tYWluL2pzL3ZpZXcvdmlldy50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5WaWV3ID0gdm9pZCAwO1xudmFyIGNsYXNzX25hbWVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21pc2MvY2xhc3MtbmFtZSAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9jbGFzcy1uYW1lLnRzXCIpO1xudmFyIERpc3Bvc2luZ1V0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9taXNjL2Rpc3Bvc2luZy11dGlsICovIFwiLi9zcmMvbWFpbi9qcy9taXNjL2Rpc3Bvc2luZy11dGlsLnRzXCIpO1xudmFyIHBhbmVfZXJyb3JfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21pc2MvcGFuZS1lcnJvciAqLyBcIi4vc3JjL21haW4vanMvbWlzYy9wYW5lLWVycm9yLnRzXCIpO1xudmFyIFZpZXdQb3NpdGlvbnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tb2RlbC92aWV3LXBvc2l0aW9ucyAqLyBcIi4vc3JjL21haW4vanMvbW9kZWwvdmlldy1wb3NpdGlvbnMudHNcIik7XG52YXIgY2xhc3NOYW1lID0gY2xhc3NfbmFtZV8xLkNsYXNzTmFtZSgnJyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIFZpZXcgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVmlldyhkb2N1bWVudCwgY29uZmlnKSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2VfID0gdGhpcy5vbkNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbkRpc3Bvc2VfID0gdGhpcy5vbkRpc3Bvc2VfLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMubW9kZWxfID0gY29uZmlnLm1vZGVsO1xuICAgICAgICB0aGlzLm1vZGVsXy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlXyk7XG4gICAgICAgIHRoaXMubW9kZWxfLmVtaXR0ZXIub24oJ2Rpc3Bvc2UnLCB0aGlzLm9uRGlzcG9zZV8pO1xuICAgICAgICB0aGlzLmRvY18gPSBkb2N1bWVudDtcbiAgICAgICAgdGhpcy5lbGVtXyA9IHRoaXMuZG9jXy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5lbGVtXy5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgpKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZpZXcucHJvdG90eXBlLCBcImRvY3VtZW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZG9jXykge1xuICAgICAgICAgICAgICAgIHRocm93IHBhbmVfZXJyb3JfMS5QYW5lRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2NfO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZpZXcucHJvdG90eXBlLCBcImVsZW1lbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5lbGVtXykge1xuICAgICAgICAgICAgICAgIHRocm93IHBhbmVfZXJyb3JfMS5QYW5lRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtXztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFZpZXcucHJvdG90eXBlLm9uRGlzcG9zZV8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZG9jXyA9IG51bGw7XG4gICAgICAgIHRoaXMuZWxlbV8gPSBEaXNwb3NpbmdVdGlsLmRpc3Bvc2VFbGVtZW50KHRoaXMuZWxlbV8pO1xuICAgIH07XG4gICAgVmlldy5wcm90b3R5cGUub25DaGFuZ2VfID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgIHZhciBlbGVtID0gdGhpcy5lbGVtXztcbiAgICAgICAgaWYgKCFlbGVtKSB7XG4gICAgICAgICAgICB0aHJvdyBwYW5lX2Vycm9yXzEuUGFuZUVycm9yLmFscmVhZHlEaXNwb3NlZCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldi5wcm9wZXJ0eU5hbWUgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICB2YXIgaGlkZGVuQ2xhc3MgPSBjbGFzc05hbWUodW5kZWZpbmVkLCAnaGlkZGVuJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbF8uaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKGhpZGRlbkNsYXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LnJlbW92ZShoaWRkZW5DbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYucHJvcGVydHlOYW1lID09PSAncG9zaXRpb25zJykge1xuICAgICAgICAgICAgVmlld1Bvc2l0aW9ucy5nZXRBbGwoKS5mb3JFYWNoKGZ1bmN0aW9uIChwb3MpIHtcbiAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKHVuZGVmaW5lZCwgcG9zKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubW9kZWxfLnBvc2l0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChwb3MpIHtcbiAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKHVuZGVmaW5lZCwgcG9zKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFZpZXc7XG59KCkpO1xuZXhwb3J0cy5WaWV3ID0gVmlldztcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3NyYy9tYWluL3Nhc3MvYnVuZGxlLnNjc3NcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vc3JjL21haW4vc2Fzcy9idW5kbGUuc2NzcyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzICovIFwiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaSwgXCIudHAtZmxkdl90LC50cC1yb3R2X3R7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjA7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0O21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1mb2xkZXItYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0tZm9sZGVyLWZvcmVncm91bmQtY29sb3IpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjI0cHg7bGluZS1oZWlnaHQ6MjRweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1sZWZ0OjMwcHg7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpsZWZ0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjEwMCU7dHJhbnNpdGlvbjpib3JkZXItcmFkaXVzIC4ycyBlYXNlLWluLW91dCAuMnN9LnRwLWZsZHZfdDpob3ZlciwudHAtcm90dl90OmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tZm9sZGVyLWJhY2tncm91bmQtY29sb3ItaG92ZXIpfS50cC1mbGR2X3Q6Zm9jdXMsLnRwLXJvdHZfdDpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWZvbGRlci1iYWNrZ3JvdW5kLWNvbG9yLWZvY3VzKX0udHAtZmxkdl90OmFjdGl2ZSwudHAtcm90dl90OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWZvbGRlci1iYWNrZ3JvdW5kLWNvbG9yLWFjdGl2ZSl9LnRwLWZsZHZfbSwudHAtcm90dl9te2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHZhcigtLWZvbGRlci1mb3JlZ3JvdW5kLWNvbG9yKSwgdmFyKC0tZm9sZGVyLWZvcmVncm91bmQtY29sb3IpIDJweCwgdHJhbnNwYXJlbnQgMnB4LCB0cmFuc3BhcmVudCA0cHgsIHZhcigtLWZvbGRlci1mb3JlZ3JvdW5kLWNvbG9yKSA0cHgpO2JvcmRlci1yYWRpdXM6MnB4O2JvdHRvbTowO2NvbnRlbnQ6Jyc7ZGlzcGxheTpibG9jaztoZWlnaHQ6NnB4O2xlZnQ6MTJweDttYXJnaW46YXV0bztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQ7d2lkdGg6NnB4fS50cC1mbGR2LnRwLWZsZHYtZXhwYW5kZWQ+LnRwLWZsZHZfdD4udHAtZmxkdl9tLC50cC1yb3R2LnRwLXJvdHYtZXhwYW5kZWQgLnRwLXJvdHZfbXt0cmFuc2Zvcm06bm9uZX0udHAtZmxkdl9jLC50cC1yb3R2X2N7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDowO29wYWNpdHk6MDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1ib3R0b206MDtwYWRkaW5nLXRvcDowO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb246aGVpZ2h0IC4ycyBlYXNlLWluLW91dCxvcGFjaXR5IC4ycyBsaW5lYXIscGFkZGluZyAuMnMgZWFzZS1pbi1vdXR9LnRwLWZsZHZfYz4udHAtZmxkdi50cC12LWZpcnN0LC50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1maXJzdHttYXJnaW4tdG9wOi00cHh9LnRwLWZsZHZfYz4udHAtZmxkdi50cC12LWxhc3QsLnRwLXJvdHZfYz4udHAtZmxkdi50cC12LWxhc3R7bWFyZ2luLWJvdHRvbTotNHB4fS50cC1mbGR2X2M+Kjpub3QoLnRwLXYtZmlyc3QpLC50cC1yb3R2X2M+Kjpub3QoLnRwLXYtZmlyc3Qpe21hcmdpbi10b3A6NHB4fS50cC1mbGR2X2M+LnRwLWZsZHY6bm90KC50cC12LWhpZGRlbikrLnRwLWZsZHYsLnRwLXJvdHZfYz4udHAtZmxkdjpub3QoLnRwLXYtaGlkZGVuKSsudHAtZmxkdnttYXJnaW4tdG9wOjB9LnRwLWZsZHZfYz4udHAtc3B0djpub3QoLnRwLXYtaGlkZGVuKSsudHAtc3B0diwudHAtcm90dl9jPi50cC1zcHR2Om5vdCgudHAtdi1oaWRkZW4pKy50cC1zcHR2e21hcmdpbi10b3A6MH0udHAtZmxkdi50cC1mbGR2LWV4cGFuZGVkPi50cC1mbGR2X2MsLnRwLXJvdHYudHAtcm90di1leHBhbmRlZCAudHAtcm90dl9je29wYWNpdHk6MTtwYWRkaW5nLWJvdHRvbTo0cHg7cGFkZGluZy10b3A6NHB4O3RyYW5zZm9ybTpub25lO292ZXJmbG93OnZpc2libGU7dHJhbnNpdGlvbjpoZWlnaHQgLjJzIGVhc2UtaW4tb3V0LG9wYWNpdHkgLjJzIGxpbmVhciAuMnMscGFkZGluZyAuMnMgZWFzZS1pbi1vdXR9LnRwLWJ0bnZ7cGFkZGluZzowIDRweH0udHAtYnRudl9iey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci13aWR0aDowO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdDttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnV0dG9uLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1yYWRpdXM6MnB4O2NvbG9yOnZhcigtLWJ1dHRvbi1mb3JlZ3JvdW5kLWNvbG9yKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OmJvbGQ7aGVpZ2h0OjIwcHg7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjEwMCV9LnRwLWJ0bnZfYjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yLWhvdmVyKX0udHAtYnRudl9iOmZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnV0dG9uLWJhY2tncm91bmQtY29sb3ItZm9jdXMpfS50cC1idG52X2I6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnV0dG9uLWJhY2tncm91bmQtY29sb3ItYWN0aXZlKX0udHAtZGZ3dntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6OHB4O3JpZ2h0OjhweDt3aWR0aDoyNTZweH0udHAtZmxkdi50cC1mbGR2LWV4cGFuZGVkIC50cC1mbGR2X3R7dHJhbnNpdGlvbjpib3JkZXItcmFkaXVzIDBzfS50cC1mbGR2X2N7Ym9yZGVyLWxlZnQ6dmFyKC0tZm9sZGVyLWJhY2tncm91bmQtY29sb3IpIHNvbGlkIDRweH0udHAtZmxkdl90OmhvdmVyKy50cC1mbGR2X2N7Ym9yZGVyLWxlZnQtY29sb3I6dmFyKC0tZm9sZGVyLWJhY2tncm91bmQtY29sb3ItaG92ZXIpfS50cC1mbGR2X3Q6Zm9jdXMrLnRwLWZsZHZfY3tib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1mb2xkZXItYmFja2dyb3VuZC1jb2xvci1mb2N1cyl9LnRwLWZsZHZfdDphY3RpdmUrLnRwLWZsZHZfY3tib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1mb2xkZXItYmFja2dyb3VuZC1jb2xvci1hY3RpdmUpfS50cC1mbGR2X2M+LnRwLWZsZHZ7bWFyZ2luLWxlZnQ6NHB4fS50cC1mbGR2X2M+LnRwLWZsZHY+LnRwLWZsZHZfdHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjJweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjJweH0udHAtZmxkdl9jPi50cC1mbGR2LnRwLWZsZHYtZXhwYW5kZWQ+LnRwLWZsZHZfdHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LnRwLWZsZHZfYyAudHAtZmxkdj4udHAtZmxkdl9je2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MnB4fS50cC1ja2Jpdl9se2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmV9LnRwLWNrYml2X2l7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjA7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0O21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7YmFja2dyb3VuZDpyZWQ7bGVmdDowO29wYWNpdHk6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH0udHAtY2tiaXZfbXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWlucHV0LWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1yYWRpdXM6MnB4O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjIwcHg7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MjBweH0udHAtY2tiaXZfbTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQtZm9yZWdyb3VuZC1jb2xvcik7Ym9yZGVyLXJhZGl1czoycHg7Ym90dG9tOjRweDtjb250ZW50OicnO2Rpc3BsYXk6YmxvY2s7bGVmdDo0cHg7b3BhY2l0eTowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjRweDt0b3A6NHB4fS50cC1ja2Jpdl9pOmhvdmVyKy50cC1ja2Jpdl9te2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQtYmFja2dyb3VuZC1jb2xvci1ob3Zlcil9LnRwLWNrYml2X2k6Zm9jdXMrLnRwLWNrYml2X217YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yLWZvY3VzKX0udHAtY2tiaXZfaTphY3RpdmUrLnRwLWNrYml2X217YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yLWFjdGl2ZSl9LnRwLWNrYml2X2k6Y2hlY2tlZCsudHAtY2tiaXZfbTo6YmVmb3Jle29wYWNpdHk6MX0udHAtY2N0eHRzaXZ7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCV9LnRwLWNjdHh0c2l2X217bWFyZ2luLXJpZ2h0OjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtY2N0eHRzaXZfbXN7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjA7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0O21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7Ym9yZGVyLXJhZGl1czoycHg7Y29sb3I6dmFyKC0tbGFiZWwtZm9yZWdyb3VuZC1jb2xvcik7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjIwcHg7bGluZS1oZWlnaHQ6MjBweDtwYWRkaW5nOjAgMThweCAwIDRweH0udHAtY2N0eHRzaXZfbXM6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yLWhvdmVyKX0udHAtY2N0eHRzaXZfbXM6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yLWZvY3VzKX0udHAtY2N0eHRzaXZfbXM6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQtYmFja2dyb3VuZC1jb2xvci1hY3RpdmUpfS50cC1jY3R4dHNpdl9tbXtib3JkZXItY29sb3I6dmFyKC0tbGFiZWwtZm9yZWdyb3VuZC1jb2xvcikgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDozcHg7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDo2cHg7cG9pbnRlci1ldmVudHM6bm9uZTt3aWR0aDo2cHg7Ym90dG9tOjA7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NnB4O3RvcDozcHh9LnRwLWNjdHh0c2l2X3d7ZGlzcGxheTpmbGV4O2ZsZXg6MX0udHAtY2N0eHRzaXZfaXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItd2lkdGg6MDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXQ7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWlucHV0LWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1pbnB1dC1mb3JlZ3JvdW5kLWNvbG9yKTtmb250LWZhbWlseTppbmhlcml0O2hlaWdodDoyMHB4O2xpbmUtaGVpZ2h0OjIwcHg7bWluLXdpZHRoOjA7d2lkdGg6MTAwJTtib3JkZXItcmFkaXVzOjA7ZmxleDoxO3BhZGRpbmc6MCA0cHh9LnRwLWNjdHh0c2l2X2k6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yLWhvdmVyKX0udHAtY2N0eHRzaXZfaTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWlucHV0LWJhY2tncm91bmQtY29sb3ItZm9jdXMpfS50cC1jY3R4dHNpdl9pOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWlucHV0LWJhY2tncm91bmQtY29sb3ItYWN0aXZlKX0udHAtY2N0eHRzaXZfaTpmaXJzdC1jaGlsZHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjJweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjJweH0udHAtY2N0eHRzaXZfaTpsYXN0LWNoaWxke2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjJweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czoycHh9LnRwLWNjdHh0c2l2X2krLnRwLWNjdHh0c2l2X2l7bWFyZ2luLWxlZnQ6MnB4fS50cC1jbHBpdntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJhc2UtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXJhZGl1czo2cHg7Ym94LXNoYWRvdzowIDJweCA0cHggdmFyKC0tYmFzZS1zaGFkb3ctY29sb3IpO2Rpc3BsYXk6bm9uZTtwYWRkaW5nOjRweDtwb3NpdGlvbjpyZWxhdGl2ZTt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwMDB9LnRwLWNscGl2LnRwLWNscGl2LWV4cGFuZGVke2Rpc3BsYXk6YmxvY2s7dmlzaWJpbGl0eTp2aXNpYmxlfS50cC1jbHBpdl9oLC50cC1jbHBpdl9hcHttYXJnaW4tbGVmdDo2cHg7bWFyZ2luLXJpZ2h0OjZweH0udHAtY2xwaXZfaHttYXJnaW4tdG9wOjRweH0udHAtY2xwaXZfcmdie2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOjRweDt3aWR0aDoxMDAlfS50cC1jbHBpdl9he2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOjRweDtwYWRkaW5nLXRvcDo4cHg7cG9zaXRpb246cmVsYXRpdmV9LnRwLWNscGl2X2E6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tc2VwYXJhdG9yLWNvbG9yKTtjb250ZW50OicnO2hlaWdodDo0cHg7bGVmdDotNHB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi00cHg7dG9wOjB9LnRwLWNscGl2X2Fwe2ZsZXg6M30udHAtY2xwaXZfYXR7ZmxleDoxO21hcmdpbi1sZWZ0OjRweH0udHAtc3ZwaXZ7Ym9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtc3ZwaXZfY3tjdXJzb3I6Y3Jvc3NoYWlyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjgwcHg7d2lkdGg6MTAwJX0udHAtc3ZwaXZfbXtib3JkZXItcmFkaXVzOjEwMCU7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsMC43NSkgc29saWQgMnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LWZpbHRlcjpkcm9wLXNoYWRvdygwIDAgMXB4IHJnYmEoMCwwLDAsMC4zKSk7ZmlsdGVyOmRyb3Atc2hhZG93KDAgMCAxcHggcmdiYSgwLDAsMCwwLjMpKTtoZWlnaHQ6MTJweDttYXJnaW4tbGVmdDotNnB4O21hcmdpbi10b3A6LTZweDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEycHh9LnRwLXN2cGl2OmZvY3VzIC50cC1zdnBpdl9te2JvcmRlci1jb2xvcjojZmZmfS50cC1ocGxpdntjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6MjBweDtvdXRsaW5lOm5vbmU7cG9zaXRpb246cmVsYXRpdmV9LnRwLWhwbGl2X2N7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFFQUFBQUFCQ0FZQUFBQnViYWdYQUFBQVEwbEVRVlFvVTJQOHo4RHduMEdDZ1FFRGkyT0svUkJnWUhqQmdJcGZvdkZoOGo4WUJJZ3pGR1F4dXFFZ1BoYURPVDVnT2hQa2RDeE9aZUJnK0lERlpaaUdBZ0NhU1NNWXRjUkhMZ0FBQUFCSlJVNUVya0pnZ2c9PSk7YmFja2dyb3VuZC1wb3NpdGlvbjpsZWZ0IHRvcDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtib3JkZXItcmFkaXVzOjJweDtkaXNwbGF5OmJsb2NrO2hlaWdodDo0cHg7bGVmdDowO21hcmdpbi10b3A6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEwMCV9LnRwLWhwbGl2X217Ym9yZGVyLXJhZGl1czoycHg7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsMC43NSkgc29saWQgMnB4O2JveC1zaGFkb3c6MCAwIDJweCByZ2JhKDAsMCwwLDAuMSk7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxMnB4O2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi02cHg7bWFyZ2luLXRvcDotNnB4O3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDoxMnB4fS50cC1ocGxpdjpmb2N1cyAudHAtaHBsaXZfbXtib3JkZXItY29sb3I6I2ZmZn0udHAtYXBsaXZ7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjIwcHg7b3V0bGluZTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1hcGxpdl9ie2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSksbGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSk7YmFja2dyb3VuZC1zaXplOjRweCA0cHg7YmFja2dyb3VuZC1wb3NpdGlvbjowIDAsMnB4IDJweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czoycHg7ZGlzcGxheTpibG9jaztoZWlnaHQ6NHB4O2xlZnQ6MDttYXJnaW4tdG9wOi0ycHg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7d2lkdGg6MTAwJX0udHAtYXBsaXZfY3tib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtYXBsaXZfbXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byB0b3AgcmlnaHQsICNkZGQgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDc1JSwgI2RkZCA3NSUpLGxpbmVhci1ncmFkaWVudCh0byB0b3AgcmlnaHQsICNkZGQgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDc1JSwgI2RkZCA3NSUpO2JhY2tncm91bmQtc2l6ZToxMnB4IDEycHg7YmFja2dyb3VuZC1wb3NpdGlvbjowIDAsNnB4IDZweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czoycHg7Ym94LXNoYWRvdzowIDAgMnB4IHJnYmEoMCwwLDAsMC4xKTtoZWlnaHQ6MTJweDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotNnB4O21hcmdpbi10b3A6LTZweDtvdmVyZmxvdzpoaWRkZW47cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEycHh9LnRwLWFwbGl2X3B7Ym9yZGVyLXJhZGl1czoycHg7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsMC43NSkgc29saWQgMnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtYXBsaXY6Zm9jdXMgLnRwLWFwbGl2X3B7Ym9yZGVyLWNvbG9yOiNmZmZ9LnRwLWxzdGl2e2Rpc3BsYXk6YmxvY2s7cGFkZGluZzowO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1sc3Rpdl9zey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci13aWR0aDowO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdDttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnV0dG9uLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1yYWRpdXM6MnB4O2NvbG9yOnZhcigtLWJ1dHRvbi1mb3JlZ3JvdW5kLWNvbG9yKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmJsb2NrO2hlaWdodDoyMHB4O2xpbmUtaGVpZ2h0OjIwcHg7cGFkZGluZzowIDRweDt3aWR0aDoxMDAlfS50cC1sc3Rpdl9zOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnV0dG9uLWJhY2tncm91bmQtY29sb3ItaG92ZXIpfS50cC1sc3Rpdl9zOmZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnV0dG9uLWJhY2tncm91bmQtY29sb3ItZm9jdXMpfS50cC1sc3Rpdl9zOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yLWFjdGl2ZSl9LnRwLWxzdGl2X217Ym9yZGVyLWNvbG9yOnZhcigtLWJ1dHRvbi1mb3JlZ3JvdW5kLWNvbG9yKSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjNweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjZweDtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjZweDtib3R0b206MDttYXJnaW46YXV0bztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDo2cHg7dG9wOjNweH0udHAtcDJkcGFkaXZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1iYXNlLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1yYWRpdXM6NnB4O2JveC1zaGFkb3c6MCAycHggNHB4IHZhcigtLWJhc2Utc2hhZG93LWNvbG9yKTtkaXNwbGF5Om5vbmU7cGFkZGluZzo0cHggNHB4IDRweCAyOHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3Zpc2liaWxpdHk6aGlkZGVuO3otaW5kZXg6MTAwMH0udHAtcDJkcGFkaXYudHAtcDJkcGFkaXYtZXhwYW5kZWR7ZGlzcGxheTpibG9jazt2aXNpYmlsaXR5OnZpc2libGV9LnRwLXAyZHBhZGl2X3B7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjA7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0O21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0taW5wdXQtZm9yZWdyb3VuZC1jb2xvcik7Zm9udC1mYW1pbHk6aW5oZXJpdDtoZWlnaHQ6MjBweDtsaW5lLWhlaWdodDoyMHB4O21pbi13aWR0aDowO3dpZHRoOjEwMCU7Y3Vyc29yOmNyb3NzaGFpcjtoZWlnaHQ6MDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1ib3R0b206MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtcDJkcGFkaXZfcDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWlucHV0LWJhY2tncm91bmQtY29sb3ItaG92ZXIpfS50cC1wMmRwYWRpdl9wOmZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQtYmFja2dyb3VuZC1jb2xvci1mb2N1cyl9LnRwLXAyZHBhZGl2X3A6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQtYmFja2dyb3VuZC1jb2xvci1hY3RpdmUpfS50cC1wMmRwYWRpdl9ne2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJX0udHAtcDJkcGFkaXZfYXh7c3Ryb2tlOnZhcigtLWlucHV0LWd1aWRlLWNvbG9yKX0udHAtcDJkcGFkaXZfbHtzdHJva2U6dmFyKC0taW5wdXQtZm9yZWdyb3VuZC1jb2xvcik7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWRhc2hhcnJheToxcHggM3B4fS50cC1wMmRwYWRpdl9te2ZpbGw6dmFyKC0taW5wdXQtZm9yZWdyb3VuZC1jb2xvcil9LnRwLXAyZHBhZHR4dGl2e2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtcDJkcGFkdHh0aXZfYnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItd2lkdGg6MDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXQ7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItcmFkaXVzOjJweDtjb2xvcjp2YXIoLS1idXR0b24tZm9yZWdyb3VuZC1jb2xvcik7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztmb250LXdlaWdodDpib2xkO2hlaWdodDoyMHB4O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtoZWlnaHQ6MjBweDtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoyMHB4fS50cC1wMmRwYWR0eHRpdl9iOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnV0dG9uLWJhY2tncm91bmQtY29sb3ItaG92ZXIpfS50cC1wMmRwYWR0eHRpdl9iOmZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnV0dG9uLWJhY2tncm91bmQtY29sb3ItZm9jdXMpfS50cC1wMmRwYWR0eHRpdl9iOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yLWFjdGl2ZSl9LnRwLXAyZHBhZHR4dGl2X2Igc3Zne2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjE2cHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tdG9wOi04cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDoxNnB4fS50cC1wMmRwYWR0eHRpdl9we2xlZnQ6LTRweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotNHB4O3RvcDoyMHB4fS50cC1wMmRwYWR0eHRpdl90e21hcmdpbi1sZWZ0OjRweH0udHAtcDJkdHh0aXZ7ZGlzcGxheTpmbGV4fS50cC1wMmR0eHRpdl93e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LnRwLXAyZHR4dGl2X3crLnRwLXAyZHR4dGl2X3d7bWFyZ2luLWxlZnQ6MnB4fS50cC1wMmR0eHRpdl9pey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci13aWR0aDowO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdDttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXJhZGl1czoycHg7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLWlucHV0LWZvcmVncm91bmQtY29sb3IpO2ZvbnQtZmFtaWx5OmluaGVyaXQ7aGVpZ2h0OjIwcHg7bGluZS1oZWlnaHQ6MjBweDttaW4td2lkdGg6MDt3aWR0aDoxMDAlO3BhZGRpbmc6MCA0cHg7d2lkdGg6MTAwJX0udHAtcDJkdHh0aXZfaTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWlucHV0LWJhY2tncm91bmQtY29sb3ItaG92ZXIpfS50cC1wMmR0eHRpdl9pOmZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQtYmFja2dyb3VuZC1jb2xvci1mb2N1cyl9LnRwLXAyZHR4dGl2X2k6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQtYmFja2dyb3VuZC1jb2xvci1hY3RpdmUpfS50cC1wMmR0eHRpdl93Om50aC1jaGlsZCgxKSAudHAtcDJkdHh0aXZfaXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LnRwLXAyZHR4dGl2X3c6bnRoLWNoaWxkKDIpIC50cC1wMmR0eHRpdl9pe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LnRwLXNsZGl2e2Rpc3BsYXk6YmxvY2s7cGFkZGluZzowfS50cC1zbGRpdl9ve2JveC1zaXppbmc6Ym9yZGVyLWJveDtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6MjBweDttYXJnaW46MCA2cHg7b3V0bGluZTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1zbGRpdl9vOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItcmFkaXVzOjFweDtib3R0b206MDtjb250ZW50OicnO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjJweDtsZWZ0OjA7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtc2xkaXZfaXtoZWlnaHQ6MTAwJTtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9LnRwLXNsZGl2X2k6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItcmFkaXVzOjJweDtib3R0b206MDtjb250ZW50OicnO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEycHg7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTZweDt0b3A6MDt3aWR0aDoxMnB4fS50cC1zbGRpdl9vOmhvdmVyIC50cC1zbGRpdl9pOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idXR0b24tYmFja2dyb3VuZC1jb2xvci1ob3Zlcil9LnRwLXNsZGl2X286Zm9jdXMgLnRwLXNsZGl2X2k6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yLWZvY3VzKX0udHAtc2xkaXZfbzphY3RpdmUgLnRwLXNsZGl2X2k6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yLWFjdGl2ZSl9LnRwLXR4dGl2e2Rpc3BsYXk6YmxvY2s7cGFkZGluZzowfS50cC10eHRpdl9pey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci13aWR0aDowO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdDttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXJhZGl1czoycHg7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLWlucHV0LWZvcmVncm91bmQtY29sb3IpO2ZvbnQtZmFtaWx5OmluaGVyaXQ7aGVpZ2h0OjIwcHg7bGluZS1oZWlnaHQ6MjBweDttaW4td2lkdGg6MDt3aWR0aDoxMDAlO3BhZGRpbmc6MCA0cHh9LnRwLXR4dGl2X2k6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yLWhvdmVyKX0udHAtdHh0aXZfaTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWlucHV0LWJhY2tncm91bmQtY29sb3ItZm9jdXMpfS50cC10eHRpdl9pOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWlucHV0LWJhY2tncm91bmQtY29sb3ItYWN0aXZlKX0udHAtY3N3aXZ7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZGRkIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNkZGQgNzUlKSxsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZGRkIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNkZGQgNzUlKTtiYWNrZ3JvdW5kLXNpemU6MTBweCAxMHB4O2JhY2tncm91bmQtcG9zaXRpb246MCAwLDVweCA1cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6MnB4fS50cC1jc3dpdl9zd3std2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItd2lkdGg6MDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXQ7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWlucHV0LWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1pbnB1dC1mb3JlZ3JvdW5kLWNvbG9yKTtmb250LWZhbWlseTppbmhlcml0O2hlaWdodDoyMHB4O2xpbmUtaGVpZ2h0OjIwcHg7bWluLXdpZHRoOjA7d2lkdGg6MTAwJX0udHAtY3N3aXZfc3c6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yLWhvdmVyKX0udHAtY3N3aXZfc3c6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yLWZvY3VzKX0udHAtY3N3aXZfc3c6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQtYmFja2dyb3VuZC1jb2xvci1hY3RpdmUpfS50cC1jc3dpdl9iey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci13aWR0aDowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjIwcHg7bGVmdDowO21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MjBweH0udHAtY3N3aXZfYjpmb2N1czo6YWZ0ZXJ7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsMC43NSkgc29saWQgMnB4O2JvcmRlci1yYWRpdXM6MnB4O2JvdHRvbTowO2NvbnRlbnQ6Jyc7ZGlzcGxheTpibG9jaztsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtY3N3aXZfcHtsZWZ0Oi00cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTRweDt0b3A6MjBweH0udHAtY3N3dHh0aXZ7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1jc3d0eHRpdl9ze2ZsZXgtZ3JvdzowO2ZsZXgtc2hyaW5rOjA7d2lkdGg6MjBweH0udHAtY3N3dHh0aXZfdHtmbGV4OjE7bWFyZ2luLWxlZnQ6NHB4fS50cC1zbGR0eHRpdntkaXNwbGF5OmZsZXh9LnRwLXNsZHR4dGl2X3N7ZmxleDoyfS50cC1zbGR0eHRpdl90e2ZsZXg6MTttYXJnaW4tbGVmdDo0cHh9LnRwLWxibHZ7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtwYWRkaW5nLWxlZnQ6NHB4O3BhZGRpbmctcmlnaHQ6NHB4fS50cC1sYmx2X2x7Y29sb3I6dmFyKC0tbGFiZWwtZm9yZWdyb3VuZC1jb2xvcik7ZmxleDoxOy13ZWJraXQtaHlwaGVuczphdXRvOy1tcy1oeXBoZW5zOmF1dG87aHlwaGVuczphdXRvO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6NHB4O3BhZGRpbmctcmlnaHQ6MTZweH0udHAtbGJsdl92e2FsaWduLXNlbGY6ZmxleC1zdGFydDtmbGV4LWdyb3c6MDtmbGV4LXNocmluazowO3dpZHRoOjE2MHB4fS50cC1ncnBtdntkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MDtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtZ3JwbXZfZ3std2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItd2lkdGg6MDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXQ7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbml0b3ItYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXJhZGl1czoycHg7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbml0b3ItZm9yZWdyb3VuZC1jb2xvcik7aGVpZ2h0OjIwcHg7d2lkdGg6MTAwJTtkaXNwbGF5OmJsb2NrO2hlaWdodDo2MHB4fS50cC1ncnBtdl9nIHBvbHlsaW5le2ZpbGw6bm9uZTtzdHJva2U6dmFyKC0tbW9uaXRvci1mb3JlZ3JvdW5kLWNvbG9yKTtzdHJva2UtbGluZWpvaW46cm91bmR9LnRwLWdycG12X3R7Y29sb3I6dmFyKC0tbW9uaXRvci1mb3JlZ3JvdW5kLWNvbG9yKTtmb250LXNpemU6MC45ZW07bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dGV4dC1pbmRlbnQ6NHB4O3RvcDowO3Zpc2liaWxpdHk6aGlkZGVufS50cC1ncnBtdl90LnRwLWdycG12X3QtdmFsaWR7dmlzaWJpbGl0eTp2aXNpYmxlfS50cC1ncnBtdl90OjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25pdG9yLWZvcmVncm91bmQtY29sb3IpO2JvcmRlci1yYWRpdXM6MTAwJTtjb250ZW50OicnO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjRweDtsZWZ0Oi0ycHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0ycHg7d2lkdGg6NHB4fS50cC1zZ2xtdl9pey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci13aWR0aDowO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdDttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uaXRvci1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uaXRvci1mb3JlZ3JvdW5kLWNvbG9yKTtoZWlnaHQ6MjBweDt3aWR0aDoxMDAlO3BhZGRpbmc6MCA0cHh9LnRwLW1sbG12X2l7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjA7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0O21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25pdG9yLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25pdG9yLWZvcmVncm91bmQtY29sb3IpO2hlaWdodDoyMHB4O3dpZHRoOjEwMCU7ZGlzcGxheTpibG9jaztoZWlnaHQ6NjBweDtsaW5lLWhlaWdodDoyMHB4O3BhZGRpbmc6MCA0cHg7cmVzaXplOm5vbmU7d2hpdGUtc3BhY2U6cHJlfS50cC1jc3dtdl9zd3std2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItd2lkdGg6MDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXQ7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbml0b3ItYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXJhZGl1czoycHg7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbml0b3ItZm9yZWdyb3VuZC1jb2xvcik7aGVpZ2h0OjIwcHg7d2lkdGg6MTAwJX0udHAtcm90dnstLWZvbnQtZmFtaWx5OiB2YXIoLS10cC1mb250LWZhbWlseSwgUm9ib3RvIE1vbm8sU291cmNlIENvZGUgUHJvLE1lbmxvLENvdXJpZXIsbW9ub3NwYWNlKTstLWJhc2UtYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdHAtYmFzZS1iYWNrZ3JvdW5kLWNvbG9yLCAjMmYzMTM3KTstLWJhc2Utc2hhZG93LWNvbG9yOiB2YXIoLS10cC1iYXNlLXNoYWRvdy1jb2xvciwgcmdiYSgwLDAsMCwwLjIpKTstLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10cC1idXR0b24tYmFja2dyb3VuZC1jb2xvciwgI2FkYWZiOCk7LS1idXR0b24tYmFja2dyb3VuZC1jb2xvci1hY3RpdmU6IHZhcigtLXRwLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yLWFjdGl2ZSwgI2Q2ZDdkYik7LS1idXR0b24tYmFja2dyb3VuZC1jb2xvci1mb2N1czogdmFyKC0tdHAtYnV0dG9uLWJhY2tncm91bmQtY29sb3ItZm9jdXMsICNjOGNhZDApOy0tYnV0dG9uLWJhY2tncm91bmQtY29sb3ItaG92ZXI6IHZhcigtLXRwLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yLWhvdmVyLCAjYmJiY2M0KTstLWJ1dHRvbi1mb3JlZ3JvdW5kLWNvbG9yOiB2YXIoLS10cC1idXR0b24tZm9yZWdyb3VuZC1jb2xvciwgIzJmMzEzNyk7LS1mb2xkZXItYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdHAtZm9sZGVyLWJhY2tncm91bmQtY29sb3IsIHJnYmEoMjAwLDIwMiwyMDgsMC4xKSk7LS1mb2xkZXItYmFja2dyb3VuZC1jb2xvci1hY3RpdmU6IHZhcigtLXRwLWZvbGRlci1iYWNrZ3JvdW5kLWNvbG9yLWFjdGl2ZSwgcmdiYSgyMDAsMjAyLDIwOCwwLjI1KSk7LS1mb2xkZXItYmFja2dyb3VuZC1jb2xvci1mb2N1czogdmFyKC0tdHAtZm9sZGVyLWJhY2tncm91bmQtY29sb3ItZm9jdXMsIHJnYmEoMjAwLDIwMiwyMDgsMC4yKSk7LS1mb2xkZXItYmFja2dyb3VuZC1jb2xvci1ob3ZlcjogdmFyKC0tdHAtZm9sZGVyLWJhY2tncm91bmQtY29sb3ItaG92ZXIsIHJnYmEoMjAwLDIwMiwyMDgsMC4xNSkpOy0tZm9sZGVyLWZvcmVncm91bmQtY29sb3I6IHZhcigtLXRwLWZvbGRlci1mb3JlZ3JvdW5kLWNvbG9yLCAjYzhjYWQwKTstLWlucHV0LWJhY2tncm91bmQtY29sb3I6IHZhcigtLXRwLWlucHV0LWJhY2tncm91bmQtY29sb3IsIHJnYmEoMjAwLDIwMiwyMDgsMC4xNSkpOy0taW5wdXQtYmFja2dyb3VuZC1jb2xvci1hY3RpdmU6IHZhcigtLXRwLWlucHV0LWJhY2tncm91bmQtY29sb3ItYWN0aXZlLCByZ2JhKDIwMCwyMDIsMjA4LDAuMzUpKTstLWlucHV0LWJhY2tncm91bmQtY29sb3ItZm9jdXM6IHZhcigtLXRwLWlucHV0LWJhY2tncm91bmQtY29sb3ItZm9jdXMsIHJnYmEoMjAwLDIwMiwyMDgsMC4yNSkpOy0taW5wdXQtYmFja2dyb3VuZC1jb2xvci1ob3ZlcjogdmFyKC0tdHAtaW5wdXQtYmFja2dyb3VuZC1jb2xvci1ob3ZlciwgcmdiYSgyMDAsMjAyLDIwOCwwLjE1KSk7LS1pbnB1dC1mb3JlZ3JvdW5kLWNvbG9yOiB2YXIoLS10cC1pbnB1dC1mb3JlZ3JvdW5kLWNvbG9yLCAjYzhjYWQwKTstLWlucHV0LWd1aWRlLWNvbG9yOiB2YXIoLS10cC1pbnB1dC1ndWlkZS1jb2xvciwgcmdiYSg0Nyw0OSw1NSwwLjUpKTstLWxhYmVsLWZvcmVncm91bmQtY29sb3I6IHZhcigtLXRwLWxhYmVsLWZvcmVncm91bmQtY29sb3IsIHJnYmEoMjAwLDIwMiwyMDgsMC44KSk7LS1tb25pdG9yLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXRwLW1vbml0b3ItYmFja2dyb3VuZC1jb2xvciwgcmdiYSgyNCwyNCwyNywwLjUpKTstLW1vbml0b3ItZm9yZWdyb3VuZC1jb2xvcjogdmFyKC0tdHAtbW9uaXRvci1mb3JlZ3JvdW5kLWNvbG9yLCByZ2JhKDIwMCwyMDIsMjA4LDAuNykpOy0tc2VwYXJhdG9yLWNvbG9yOiB2YXIoLS10cC1zZXBhcmF0b3ItY29sb3IsIHJnYmEoMjQsMjQsMjcsMC4zKSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1iYXNlLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1yYWRpdXM6NnB4O2JveC1zaGFkb3c6MCAycHggNHB4IHZhcigtLWJhc2Utc2hhZG93LWNvbG9yKTtmb250LWZhbWlseTp2YXIoLS1mb250LWZhbWlseSk7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NTAwO3RleHQtYWxpZ246bGVmdH0udHAtcm90dl90e2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NnB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjZweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjZweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo2cHh9LnRwLXJvdHYudHAtcm90di1leHBhbmRlZCAudHAtcm90dl90e2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS50cC1yb3R2X217dHJhbnNpdGlvbjpub25lfS50cC1yb3R2X2M+LnRwLWZsZHY6bGFzdC1jaGlsZD4udHAtZmxkdl9je2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NnB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjZweH0udHAtcm90dl9jPi50cC1mbGR2Omxhc3QtY2hpbGQ6bm90KC50cC1mbGR2LWV4cGFuZGVkKT4udHAtZmxkdl90e2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NnB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjZweH0udHAtcm90dl9jPi50cC1mbGR2OmZpcnN0LWNoaWxkPi50cC1mbGR2X3R7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo2cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NnB4fS50cC1zcHR2X3J7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1zZXBhcmF0b3ItY29sb3IpO2JvcmRlci13aWR0aDowO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjRweDttYXJnaW46MDt3aWR0aDoxMDAlfS50cC12LnRwLXYtaGlkZGVue2Rpc3BsYXk6bm9uZX1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG5cblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSlbXCJkZWZhdWx0XCJdO1xufSk7IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB2ZWMyQ29weShvdXQsIGEpIHtcbiAgICBvdXRbMF0gPSBhWzBdXG4gICAgb3V0WzFdID0gYVsxXVxuICAgIHJldHVybiBvdXRcbn0iLCJjb25zdCBjYW52YXNTa2V0Y2ggPSByZXF1aXJlKFwiY2FudmFzLXNrZXRjaFwiKTtcbmNvbnN0IHtcbiAgbm9pc2UxRCxcbiAgZ2V0UmFuZG9tU2VlZCxcbiAgc2V0U2VlZCxcbn0gPSByZXF1aXJlKFwiY2FudmFzLXNrZXRjaC11dGlsL3JhbmRvbVwiKTtcbmNvbnN0IHsgbGVycCB9ID0gcmVxdWlyZShcImNhbnZhcy1za2V0Y2gtdXRpbC9tYXRoXCIpO1xuY29uc3QgeyBjbGlwUG9seWxpbmVzVG9Cb3ggfSA9IHJlcXVpcmUoXCJjYW52YXMtc2tldGNoLXV0aWwvZ2VvbWV0cnlcIik7XG5jb25zdCB7IHBhdGhzVG9TVkcgfSA9IHJlcXVpcmUoXCJjYW52YXMtc2tldGNoLXV0aWwvcGVucGxvdFwiKTtcbmNvbnN0IHsgY29zLCBzaW4sIFBJIH0gPSBNYXRoO1xuY29uc3QgVHdlYWtwYW5lID0gcmVxdWlyZShcInR3ZWFrcGFuZVwiKTtcbnZhciBGaWxlU2F2ZXIgPSByZXF1aXJlKFwiZmlsZS1zYXZlclwiKTtcblxuY29uc3QgZGF0YSA9IHtcbiAgYmFja2dyb3VuZDogXCIjZmZmXCIsXG4gIGxpbmVDb2xvcjogXCIjMDAwXCIsXG4gIG5saW5lczogMjAwLFxuICBhbmdsZUxlZnQ6IC0wLjQsXG4gIGFuZ2xlUmlnaHQ6IDAuMyxcbiAgbm9pc2VGcmVxOiAwLjA1LFxuICBub2lzZUFtcGw6IDUsXG4gIGxpbmVXaWR0aDogMC4wNSxcbiAgc2hpZnQ6IDAsXG4gIHNtb290aDogMCxcbiAgbWFyZ2luOiAxLFxuICBkcmlmdEJvdHRvbTogMCxcbiAgc2VlZDogOTksXG4gIGQ6IDEuNSxcbiAgc3F1YXJlZDogZmFsc2UsXG4gIGRhcmttb2RlOiBmYWxzZSxcbn07XG5cbmNvbnN0IHNldHRpbmdzID0ge1xuICBkaW1lbnNpb25zOiBcIkE0XCIsXG4gIG9yaWVudGF0aW9uOiBcInBvcnRyYWl0XCIsXG4gIHBpeGVsc1BlckluY2g6IDMwMCxcbiAgc2NhbGVUb1ZpZXc6IHRydWUsXG4gIHVuaXRzOiBcImNtXCIsXG4gIHByZWZpeDogXCJkdW5lXCIsXG4gIGRhdGEsXG59O1xuXG5jb25zdCBza2V0Y2ggPSAoeyB3aWR0aCwgaGVpZ2h0LCB1bml0cywgZGF0YSB9KSA9PiB7XG4gIGNvbnN0IGRyYXdMaW5lcyA9ICh7XG4gICAgbmxpbmVzLFxuICAgIG5vaXNlRnJlcSxcbiAgICBub2lzZUFtcGwsXG4gICAgc2hpZnQsXG4gICAgc21vb3RoLFxuICAgIGFuZ2xlTGVmdCxcbiAgICBhbmdsZVJpZ2h0LFxuICAgIGRyaWZ0Qm90dG9tLFxuICAgIG1hcmdpbixcbiAgICBzZWVkLFxuICAgIHNxdWFyZWQsXG4gICAgZCxcbiAgfSkgPT4ge1xuICAgIC8vIExpc3Qgb2YgcG9seWxpbmVzIGZvciBvdXIgcGVuIHBsb3RcbiAgICBsZXQgbGluZXMgPSBbXTtcbiAgICBjb25zdCBkaXN0YW5jZSA9IGQgKiB3aWR0aDtcbiAgICBzZXRTZWVkKHNlZWQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmxpbmVzOyBpKyspIHtcbiAgICAgIGxldCB5ID0gbGVycCgtaGVpZ2h0ICogMC4zLCBoZWlnaHQgKiAxLjMsIGkgLyBubGluZXMpO1xuICAgICAgbGV0IHggPVxuICAgICAgICB3aWR0aCAvIDIgK1xuICAgICAgICBub2lzZTFEKHksIG5vaXNlRnJlcSwgbm9pc2VBbXBsKSArXG4gICAgICAgIHNoaWZ0ICtcbiAgICAgICAgKGkgLyBubGluZXMpICogZHJpZnRCb3R0b207XG4gICAgICAvL3Ntb290aCA9IGxlcnAoMCwgMSwgaSAvIG5saW5lcyk7XG4gICAgICAvLyBpZiB5b3UgYXJlIGF0IHBvaW50ICh4LHkpIGFuZCBtb3ZlIGEgZGlzdGFuY2UgZCBpbiBhbmdsZSBhbHBoYSxcbiAgICAgIC8vIHRoZW4gdGhlIG5ldyBwb2ludHMgYXJlXG4gICAgICAvLyB4eCA9IHggKyAoZCAqIGNvcyhhbHBoYSkpXG4gICAgICAvLyB5eSA9IHkgKyAoZCAqIHNpbihhbHBoYSkpXG4gICAgICBsZXQgeDAgPSB4ICsgZGlzdGFuY2UgKiBjb3MoKGFuZ2xlTGVmdCAtIFBJKSAqICgxIC0gc21vb3RoKSk7XG4gICAgICBsZXQgeTAgPSB5ICsgZGlzdGFuY2UgKiBzaW4oKGFuZ2xlTGVmdCAtIFBJKSAqICgxIC0gc21vb3RoKSk7XG4gICAgICBsZXQgeDEgPSB4ICsgZGlzdGFuY2UgKiBjb3MoYW5nbGVSaWdodCAqICgxIC0gc21vb3RoKSk7XG4gICAgICBsZXQgeTEgPSB5ICsgZGlzdGFuY2UgKiBzaW4oYW5nbGVSaWdodCAqICgxIC0gc21vb3RoKSk7XG4gICAgICBsaW5lcy5wdXNoKFtcbiAgICAgICAgW3gwLCB5MF0sXG4gICAgICAgIFt4LCB5XSxcbiAgICAgICAgW3gxLCB5MV0sXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICAvLyBDbGlwIGFsbCB0aGUgbGluZXMgdG8gYSBtYXJnaW5cbiAgICBsZXQgbWFyZ2luSDtcbiAgICBsZXQgbWFyZ2luVjtcbiAgICBpZiAoc3F1YXJlZCkge1xuICAgICAgY29uc3Qgc2lkZUxlbmd0aCA9XG4gICAgICAgIHdpZHRoID4gaGVpZ2h0ID8gaGVpZ2h0IC0gMiAqIG1hcmdpbiA6IHdpZHRoIC0gMiAqIG1hcmdpbjtcbiAgICAgIG1hcmdpbkggPSAod2lkdGggLSBzaWRlTGVuZ3RoKSAvIDI7XG4gICAgICBtYXJnaW5WID0gKGhlaWdodCAtIHNpZGVMZW5ndGgpIC8gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFyZ2luSCA9IG1hcmdpblYgPSBtYXJnaW47XG4gICAgfVxuICAgIGNvbnN0IGJveCA9IFttYXJnaW5ILCBtYXJnaW5WLCB3aWR0aCAtIG1hcmdpbkgsIGhlaWdodCAtIG1hcmdpblZdO1xuICAgIGxpbmVzID0gY2xpcFBvbHlsaW5lc1RvQm94KGxpbmVzLCBib3gpO1xuXG4gICAgcmV0dXJuIGxpbmVzO1xuICB9O1xuXG4gIC8vIFJlbmRlciBjYW52YXMgZnJvbSBsaW5lc1xuICByZXR1cm4gKHsgY29udGV4dCwgZGF0YSB9KSA9PiB7XG4gICAgY29uc3QgeyBiYWNrZ3JvdW5kIH0gPSBkYXRhO1xuXG4gICAgLy8gQ2xlYXIgY2FudmFzXG4gICAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICAvLyBGaWxsIHdpdGggd2hpdGVcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGJhY2tncm91bmQ7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIC8vRHJhdyBsaW5lc1xuICAgIGNvbnN0IGxpbmVzID0gZHJhd0xpbmVzKGRhdGEpO1xuXG4gICAgLy8gRHJhdyBsaW5lc1xuICAgIGxpbmVzLmZvckVhY2goKHBvaW50cykgPT4ge1xuICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgIHBvaW50cy5mb3JFYWNoKChwKSA9PiBjb250ZXh0LmxpbmVUbyhwWzBdLCBwWzFdKSk7XG4gICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IGRhdGEubGluZVdpZHRoO1xuICAgICAgY29udGV4dC5saW5lSm9pbiA9IFwicm91bmRcIjtcbiAgICAgIGNvbnRleHQubGluZUNhcCA9IFwicm91bmRcIjtcbiAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBkYXRhLmxpbmVDb2xvcjtcbiAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgY29udGV4dC5jYW52YXMsXG4gICAgICB7XG4gICAgICAgIGRhdGE6IHBhdGhzVG9TVkcobGluZXMsIHtcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgdW5pdHMsXG4gICAgICAgIH0pLFxuICAgICAgICBleHRlbnNpb246IFwiLnN2Z1wiLFxuICAgICAgfSxcbiAgICBdO1xuICB9O1xufTtcblxuKGFzeW5jICgpID0+IHtcbiAgY29uc3QgbWFuYWdlciA9IGF3YWl0IGNhbnZhc1NrZXRjaChza2V0Y2gsIHNldHRpbmdzKTtcblxuICAvLyBDYW4gZGlzYWJsZSB0aGlzIGVudGlyZWx5XG4gIGNvbnN0IHVzZUdVSSA9IHRydWU7XG4gIGlmICh1c2VHVUkpIHtcbiAgICAvLyB0d2Vha3BhbmVcbiAgICBjb25zdCBndWkgPSBuZXcgVHdlYWtwYW5lKCk7XG4gICAgY29uc3QgcGFuZSA9IGd1aS5hZGRGb2xkZXIoe1xuICAgICAgdGl0bGU6IFwiUGFyYW1ldGVyc1wiLFxuICAgIH0pO1xuICAgIGd1aS5vbihcImNoYW5nZVwiLCByZW5kZXIpO1xuXG4gICAgY29uc3QgZGltcyA9IHBhbmUuYWRkRm9sZGVyKHtcbiAgICAgIHRpdGxlOiBcIkRpbWVuc2lvbnNcIixcbiAgICB9KTtcbiAgICBkaW1zXG4gICAgICAuYWRkSW5wdXQoc2V0dGluZ3MsIFwiZGltZW5zaW9uc1wiLCB7XG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBBNDogXCJBNFwiLFxuICAgICAgICAgIEEzOiBcIkEzXCIsXG4gICAgICAgICAgVVNsZXR0ZXI6IFwibGV0dGVyXCIsXG4gICAgICAgICAgcG9zdGNhcmQ6IFwicG9zdGNhcmRcIixcbiAgICAgICAgICBcIjExclwiOiBcIjExclwiLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5vbihcImNoYW5nZVwiLCB1cGRhdGUpO1xuICAgIGRpbXNcbiAgICAgIC5hZGRJbnB1dChzZXR0aW5ncywgXCJvcmllbnRhdGlvblwiLCB7XG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBwb3J0cmFpdDogXCJwb3J0cmFpdFwiLFxuICAgICAgICAgIGxhbmRzY2FwZTogXCJsYW5kc2NhcGVcIixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAub24oXCJjaGFuZ2VcIiwgdXBkYXRlKTtcbiAgICBkaW1zLmFkZElucHV0KGRhdGEsIFwibWFyZ2luXCIsIHsgbWluOiAwLCBtYXg6IDUsIHN0ZXA6IDAuNSB9KTtcbiAgICBkaW1zLmFkZElucHV0KGRhdGEsIFwic3F1YXJlZFwiKTtcbiAgICBwYW5lLmFkZElucHV0KGRhdGEsIFwibmxpbmVzXCIsIHsgc3RlcDogMSwgbWluOiAxMCwgbWF4OiA1MDAgfSk7XG4gICAgcGFuZS5hZGRJbnB1dChkYXRhLCBcImJhY2tncm91bmRcIik7XG4gICAgcGFuZS5hZGRJbnB1dChkYXRhLCBcImxpbmVDb2xvclwiKTtcbiAgICBwYW5lLmFkZElucHV0KGRhdGEsIFwiYW5nbGVMZWZ0XCIsIHsgbWluOiAtMSwgbWF4OiAxIH0pO1xuICAgIHBhbmUuYWRkSW5wdXQoZGF0YSwgXCJhbmdsZVJpZ2h0XCIsIHsgbWluOiAtMSwgbWF4OiAxIH0pO1xuICAgIHBhbmUuYWRkSW5wdXQoZGF0YSwgXCJkXCIsIHsgbWluOiAwLjAxLCBtYXg6IDMsIGxhYmVsOiBcImxpbmUgbGVuZ3RoXCIgfSk7XG4gICAgcGFuZS5hZGRJbnB1dChkYXRhLCBcImxpbmVXaWR0aFwiLCB7IG1pbjogMC4wMSwgbWF4OiAwLjIgfSk7XG4gICAgcGFuZS5hZGRJbnB1dChkYXRhLCBcImRyaWZ0Qm90dG9tXCIsIHsgbWluOiAtNTAsIG1heDogNTAgfSk7XG4gICAgcGFuZS5hZGRJbnB1dChkYXRhLCBcInNoaWZ0XCIsIHsgbWluOiAtNTAsIG1heDogNTAgfSk7XG4gICAgY29uc3Qgcm5nID0gcGFuZS5hZGRGb2xkZXIoe1xuICAgICAgZXhwYW5kZWQ6IHRydWUsXG4gICAgICB0aXRsZTogXCJSTkdcIixcbiAgICB9KTtcbiAgICBybmcuYWRkQnV0dG9uKHsgdGl0bGU6IFwiUmVzZWVkXCIgfSkub24oXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBkYXRhLnNlZWQgPSBnZXRSYW5kb21TZWVkKCk7XG4gICAgICByZW5kZXIoKTtcbiAgICB9KTtcbiAgICBybmcuYWRkSW5wdXQoZGF0YSwgXCJub2lzZUFtcGxcIiwgeyBzdGVwOiAxLCBtaW46IC0xMCwgbWF4OiAxMCB9KTtcbiAgICBybmcuYWRkSW5wdXQoZGF0YSwgXCJub2lzZUZyZXFcIiwgeyBtaW46IDAsIG1heDogMC4yIH0pO1xuICAgIHBhbmUuYWRkQnV0dG9uKHsgdGl0bGU6IFwiRXhwb3J0IGxpbmVzIGFzIFNWR1wiIH0pLm9uKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3ZnID0gbWFuYWdlci5yZW5kZXIoKTtcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbc3ZnWzFdLmRhdGFdLCB7IHR5cGU6IFwiaW1hZ2Uvc3ZnK3htbFwiIH0pO1xuICAgICAgRmlsZVNhdmVyLnNhdmVBcyhibG9iLCBcInBlbnBsb3Quc3ZnXCIpO1xuICAgIH0pO1xuICAgIHBhbmUuYWRkQnV0dG9uKHsgdGl0bGU6IFwiU2F2ZSBQTkdcIiB9KS5vbihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHN2ZyA9IG1hbmFnZXIucmVuZGVyKCk7XG4gICAgICBjb25zdCBjYW52YXMgPSBzdmdbMF07XG4gICAgICBjYW52YXMudG9CbG9iKGZ1bmN0aW9uIChibG9iKSB7XG4gICAgICAgIEZpbGVTYXZlci5zYXZlQXMoYmxvYiwgXCJwZW5wbG90LnBuZ1wiKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHBhbmUuYWRkSW5wdXQoZGF0YSwgXCJkYXJrbW9kZVwiKS5vbihcImNoYW5nZVwiLCAocykgPT4ge1xuICAgICAgaWYgKHMpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5iYWNrZ3JvdW5kID0gXCIjMjgyYTJiXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmJhY2tncm91bmQgPSBcIndoaXRlXCI7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgbWFuYWdlci5yZW5kZXIoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICBtYW5hZ2VyLmxvYWRBbmRSdW4oc2tldGNoLCBzZXR0aW5ncyk7XG4gICAgbWFuYWdlci5yZW5kZXIoKTtcbiAgfVxufSkoKTtcbiIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbnZhciBLX01BWF9MRU5HVEggPSAweDdmZmZmZmZmXG5leHBvcnRzLmtNYXhMZW5ndGggPSBLX01BWF9MRU5HVEhcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgUHJpbnQgd2FybmluZyBhbmQgcmVjb21tZW5kIHVzaW5nIGBidWZmZXJgIHY0Lnggd2hpY2ggaGFzIGFuIE9iamVjdFxuICogICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogV2UgcmVwb3J0IHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0eXBlZCBhcnJheXMgaWYgdGhlIGFyZSBub3Qgc3ViY2xhc3NhYmxlXG4gKiB1c2luZyBfX3Byb3RvX18uIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgXG4gKiAoU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzgpLiBJRSAxMCBsYWNrcyBzdXBwb3J0XG4gKiBmb3IgX19wcm90b19fIGFuZCBoYXMgYSBidWdneSB0eXBlZCBhcnJheSBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbmlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICAnVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5ICcgK1xuICAgICdgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LidcbiAgKVxufVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIC8vIENhbiB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZD9cbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0geyBfX3Byb3RvX186IFVpbnQ4QXJyYXkucHJvdG90eXBlLCBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH0gfVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ3BhcmVudCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5idWZmZXJcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlci5wcm90b3R5cGUsICdvZmZzZXQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHRoaXMpKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHRoaXMuYnl0ZU9mZnNldFxuICB9XG59KVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAobGVuZ3RoID4gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBsZW5ndGggKyAnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJylcbiAgfVxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICBidWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gYnVmXG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuZnVuY3Rpb24gQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUoYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG4vLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICE9IG51bGwgJiZcbiAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlciwgU3ltYm9sLnNwZWNpZXMsIHtcbiAgICB2YWx1ZTogbnVsbCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG5mdW5jdGlvbiBmcm9tICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHZhbHVlKVxuICB9XG5cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgICAnb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdmFsdWUpXG4gICAgKVxuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2UodmFsdWUsIEFycmF5QnVmZmVyKSB8fFxuICAgICAgKHZhbHVlICYmIGlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLCBBcnJheUJ1ZmZlcikpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJ1xuICAgIClcbiAgfVxuXG4gIHZhciB2YWx1ZU9mID0gdmFsdWUudmFsdWVPZiAmJiB2YWx1ZS52YWx1ZU9mKClcbiAgaWYgKHZhbHVlT2YgIT0gbnVsbCAmJiB2YWx1ZU9mICE9PSB2YWx1ZSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZU9mLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICB2YXIgYiA9IGZyb21PYmplY3QodmFsdWUpXG4gIGlmIChiKSByZXR1cm4gYlxuXG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9QcmltaXRpdmUgIT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oXG4gICAgICB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdKCdzdHJpbmcnKSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoXG4gICAgKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICApXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gTm90ZTogQ2hhbmdlIHByb3RvdHlwZSAqYWZ0ZXIqIEJ1ZmZlci5mcm9tIGlzIGRlZmluZWQgdG8gd29ya2Fyb3VuZCBDaHJvbWUgYnVnOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC8xNDhcbkJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbkJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBzaXplICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0dGVkIGFzIGEgc3RhcnQgb2Zmc2V0LlxuICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnXG4gICAgICA/IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgICAgOiBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsKVxuICB9XG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiBhbGxvYyhzaXplWywgZmlsbFssIGVuY29kaW5nXV0pXG4gKiovXG5CdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAoc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApXG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IGJ1Zi53cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuXG4gIGlmIChhY3R1YWwgIT09IGxlbmd0aCkge1xuICAgIC8vIFdyaXRpbmcgYSBoZXggc3RyaW5nLCBmb3IgZXhhbXBsZSwgdGhhdCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbFxuICAgIC8vIGNhdXNlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyIHRvIGJlIGlnbm9yZWQuIChlLmcuXG4gICAgLy8gJ2FieHhjZCcgd2lsbCBiZSB0cmVhdGVkIGFzICdhYicpXG4gICAgYnVmID0gYnVmLnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZSAoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIGJ1ZltpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wib2Zmc2V0XCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJsZW5ndGhcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgdmFyIGJ1ZlxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgYnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0IChvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW4pXG5cbiAgICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGJ1ZlxuICAgIH1cblxuICAgIG9iai5jb3B5KGJ1ZiwgMCwgMCwgbGVuKVxuICAgIHJldHVybiBidWZcbiAgfVxuXG4gIGlmIChvYmoubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IG51bWJlcklzTmFOKG9iai5sZW5ndGgpKSB7XG4gICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKDApXG4gICAgfVxuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iailcbiAgfVxuXG4gIGlmIChvYmoudHlwZSA9PT0gJ0J1ZmZlcicgJiYgQXJyYXkuaXNBcnJheShvYmouZGF0YSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5TGlrZShvYmouZGF0YSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja2VkIChsZW5ndGgpIHtcbiAgLy8gTm90ZTogY2Fubm90IHVzZSBgbGVuZ3RoIDwgS19NQVhfTEVOR1RIYCBoZXJlIGJlY2F1c2UgdGhhdCBmYWlscyB3aGVuXG4gIC8vIGxlbmd0aCBpcyBOYU4gKHdoaWNoIGlzIG90aGVyd2lzZSBjb2VyY2VkIHRvIHplcm8uKVxuICBpZiAobGVuZ3RoID49IEtfTUFYX0xFTkdUSCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplOiAweCcgKyBLX01BWF9MRU5HVEgudG9TdHJpbmcoMTYpICsgJyBieXRlcycpXG4gIH1cbiAgcmV0dXJuIGxlbmd0aCB8IDBcbn1cblxuZnVuY3Rpb24gU2xvd0J1ZmZlciAobGVuZ3RoKSB7XG4gIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcVxuICAgIGxlbmd0aCA9IDBcbiAgfVxuICByZXR1cm4gQnVmZmVyLmFsbG9jKCtsZW5ndGgpXG59XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyIChiKSB7XG4gIHJldHVybiBiICE9IG51bGwgJiYgYi5faXNCdWZmZXIgPT09IHRydWUgJiZcbiAgICBiICE9PSBCdWZmZXIucHJvdG90eXBlIC8vIHNvIEJ1ZmZlci5pc0J1ZmZlcihCdWZmZXIucHJvdG90eXBlKSB3aWxsIGJlIGZhbHNlXG59XG5cbkJ1ZmZlci5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICBpZiAoaXNJbnN0YW5jZShhLCBVaW50OEFycmF5KSkgYSA9IEJ1ZmZlci5mcm9tKGEsIGEub2Zmc2V0LCBhLmJ5dGVMZW5ndGgpXG4gIGlmIChpc0luc3RhbmNlKGIsIFVpbnQ4QXJyYXkpKSBiID0gQnVmZmVyLmZyb20oYiwgYi5vZmZzZXQsIGIuYnl0ZUxlbmd0aClcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwiYnVmMVwiLCBcImJ1ZjJcIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheSdcbiAgICApXG4gIH1cblxuICBpZiAoYSA9PT0gYikgcmV0dXJuIDBcblxuICB2YXIgeCA9IGEubGVuZ3RoXG4gIHZhciB5ID0gYi5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXVxuICAgICAgeSA9IGJbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG5CdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAnYmluYXJ5JzpcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5CdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0IChsaXN0LCBsZW5ndGgpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGxpc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMClcbiAgfVxuXG4gIHZhciBpXG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGxlbmd0aCA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoXG4gICAgfVxuICB9XG5cbiAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW5ndGgpXG4gIHZhciBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGJ1ZiA9IGxpc3RbaV1cbiAgICBpZiAoaXNJbnN0YW5jZShidWYsIFVpbnQ4QXJyYXkpKSB7XG4gICAgICBidWYgPSBCdWZmZXIuZnJvbShidWYpXG4gICAgfVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IGlzSW5zdGFuY2Uoc3RyaW5nLCBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiAnICtcbiAgICAgICdSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2Ygc3RyaW5nXG4gICAgKVxuICB9XG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIG11c3RNYXRjaCA9IChhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gPT09IHRydWUpXG4gIGlmICghbXVzdE1hdGNoICYmIGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkge1xuICAgICAgICAgIHJldHVybiBtdXN0TWF0Y2ggPyAtMSA6IHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIH1cbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG5cbiAgLy8gVGhpcyBiZWhhdmVzIG5laXRoZXIgbGlrZSBTdHJpbmcgbm9yIFVpbnQ4QXJyYXkgaW4gdGhhdCB3ZSBzZXQgc3RhcnQvZW5kXG4gIC8vIHRvIHRoZWlyIHVwcGVyL2xvd2VyIGJvdW5kcyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG91dCBvZiByYW5nZS5cbiAgLy8gdW5kZWZpbmVkIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIHBlciBFQ01BLTI2MiA2dGggRWRpdGlvbixcbiAgLy8gU2VjdGlvbiAxMy4zLjMuNyBSdW50aW1lIFNlbWFudGljczogS2V5ZWRCaW5kaW5nSW5pdGlhbGl6YXRpb24uXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGFydCA+IHRoaXMubGVuZ3RoLiBEb25lIGhlcmUgdG8gcHJldmVudCBwb3RlbnRpYWwgdWludDMyXG4gIC8vIGNvZXJjaW9uIGZhaWwgYmVsb3cuXG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyBGb3JjZSBjb2Vyc2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuICBlbmQgPj4+PSAwXG4gIHN0YXJ0ID4+Pj0gMFxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGlzIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgKGFuZCB0aGUgYGlzLWJ1ZmZlcmAgbnBtIHBhY2thZ2UpXG4vLyB0byBkZXRlY3QgYSBCdWZmZXIgaW5zdGFuY2UuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBgaW5zdGFuY2VvZiBCdWZmZXJgXG4vLyByZWxpYWJseSBpbiBhIGJyb3dzZXJpZnkgY29udGV4dCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIGRpZmZlcmVudFxuLy8gY29waWVzIG9mIHRoZSAnYnVmZmVyJyBwYWNrYWdlIGluIHVzZS4gVGhpcyBtZXRob2Qgd29ya3MgZXZlbiBmb3IgQnVmZmVyXG4vLyBpbnN0YW5jZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgZnJvbSBhbm90aGVyIGNvcHkgb2YgdGhlIGBidWZmZXJgIHBhY2thZ2UuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNTRcbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuXG5mdW5jdGlvbiBzd2FwIChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcgPSBCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nXG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkucmVwbGFjZSgvKC57Mn0pL2csICckMSAnKS50cmltKClcbiAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoaXNJbnN0YW5jZSh0YXJnZXQsIFVpbnQ4QXJyYXkpKSB7XG4gICAgdGFyZ2V0ID0gQnVmZmVyLmZyb20odGFyZ2V0LCB0YXJnZXQub2Zmc2V0LCB0YXJnZXQuYnl0ZUxlbmd0aClcbiAgfVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJ0YXJnZXRcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiAnICtcbiAgICAgICdSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHRhcmdldClcbiAgICApXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0IC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChudW1iZXJJc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuXG4gIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7XG4gICAgbGVuZ3RoID0gc3RyTGVuIC8gMlxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KVxuICAgIGlmIChudW1iZXJJc05hTihwYXJzZWQpKSByZXR1cm4gaVxuICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHBhcnNlZFxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIHV0ZjhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGFzY2lpV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gbGF0aW4xV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYXNjaWlXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJhc2U2NFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB1Y3MyV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUgKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcpXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgb2Zmc2V0WywgbGVuZ3RoXVssIGVuY29kaW5nXSlcbiAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCA+Pj4gMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERikgPyAzXG4gICAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIChieXRlc1tpICsgMV0gKiAyNTYpKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBuZXdCdWZcbn1cblxuLypcbiAqIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYnVmZmVyIGlzbid0IHRyeWluZyB0byB3cml0ZSBvdXQgb2YgYm91bmRzLlxuICovXG5mdW5jdGlvbiBjaGVja09mZnNldCAob2Zmc2V0LCBleHQsIGxlbmd0aCkge1xuICBpZiAoKG9mZnNldCAlIDEpICE9PSAwIHx8IG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdvZmZzZXQgaXMgbm90IHVpbnQnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gbGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoXG4gIHZhciBtdWwgPSAxXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0taV1cbiAgd2hpbGUgKGkgPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1pXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgNTIsIDgpXG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJidWZmZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJylcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgKDggKiBieXRlTGVuZ3RoKSAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gMFxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgLSAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweDdmLCAtMHg4MClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgNCwgMy40MDI4MjM0NjYzODUyODg2ZSszOCwgLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gd3JpdGVGbG9hdExFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXInKVxuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKGVuZCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0XG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFVzZSBidWlsdC1pbiB3aGVuIGF2YWlsYWJsZSwgbWlzc2luZyBmcm9tIElFMTFcbiAgICB0aGlzLmNvcHlXaXRoaW4odGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpXG4gIH0gZWxzZSBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKHZhciBpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmICgoZW5jb2RpbmcgPT09ICd1dGY4JyAmJiBjb2RlIDwgMTI4KSB8fFxuICAgICAgICAgIGVuY29kaW5nID09PSAnbGF0aW4xJykge1xuICAgICAgICAvLyBGYXN0IHBhdGg6IElmIGB2YWxgIGZpdHMgaW50byBhIHNpbmdsZSBieXRlLCB1c2UgdGhhdCBudW1lcmljIHZhbHVlLlxuICAgICAgICB2YWwgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMjU1XG4gIH1cblxuICAvLyBJbnZhbGlkIHJhbmdlcyBhcmUgbm90IHNldCB0byBhIGRlZmF1bHQsIHNvIGNhbiByYW5nZSBjaGVjayBlYXJseS5cbiAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ091dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj4+IDBcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMFxuXG4gIGlmICghdmFsKSB2YWwgPSAwXG5cbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgdGhpc1tpXSA9IHZhbFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlIFwiJyArIHZhbCArXG4gICAgICAgICdcIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCBcInZhbHVlXCInKVxuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgZW5kIC0gc3RhcnQ7ICsraSkge1xuICAgICAgdGhpc1tpICsgc3RhcnRdID0gYnl0ZXNbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cbnZhciBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXisvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHRha2VzIGVxdWFsIHNpZ25zIGFzIGVuZCBvZiB0aGUgQmFzZTY0IGVuY29kaW5nXG4gIHN0ciA9IHN0ci5zcGxpdCgnPScpWzBdXG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHIudHJpbSgpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuLy8gQXJyYXlCdWZmZXIgb3IgVWludDhBcnJheSBvYmplY3RzIGZyb20gb3RoZXIgY29udGV4dHMgKGkuZS4gaWZyYW1lcykgZG8gbm90IHBhc3Ncbi8vIHRoZSBgaW5zdGFuY2VvZmAgY2hlY2sgYnV0IHRoZXkgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgb2YgdGhhdCB0eXBlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTY2XG5mdW5jdGlvbiBpc0luc3RhbmNlIChvYmosIHR5cGUpIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIHR5cGUgfHxcbiAgICAob2JqICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yLm5hbWUgIT0gbnVsbCAmJlxuICAgICAgb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09IHR5cGUubmFtZSlcbn1cbmZ1bmN0aW9uIG51bWJlcklzTmFOIChvYmopIHtcbiAgLy8gRm9yIElFMTEgc3VwcG9ydFxuICByZXR1cm4gb2JqICE9PSBvYmogLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cbiIsIi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG5leHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCJcbmdsb2JhbC5DQU5WQVNfU0tFVENIX0RFRkFVTFRfU1RPUkFHRV9LRVkgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiJdfQ==