',dropdown:'',p2dpad:''};function I(t,e){const n=t.createElementNS(R,"svg");return n.innerHTML=N[e],n}function B(t,e,n){t.insertBefore(e,t.children[n])}function U(t){t.parentElement&&t.parentElement.removeChild(t)}function K(t){for(;t.children.length>0;)t.removeChild(t.children[0])}function H(t){return t.relatedTarget?t.relatedTarget:"explicitOriginalTarget"in t?t.explicitOriginalTarget:null}const z=m("lbl");class ${constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(z()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("div");n.classList.add(z("l")),g(e.props,"label",(e=>{a(e)?this.element.classList.add(z(void 0,"nol")):(this.element.classList.remove(z(void 0,"nol")),function(t){for(;t.childNodes.length>0;)t.removeChild(t.childNodes[0])}(n),n.appendChild(function(t,e){const n=t.createDocumentFragment();return e.split("\n").map((e=>t.createTextNode(e))).forEach(((e,i)=>{i>0&&n.appendChild(t.createElement("br")),n.appendChild(e)})),n}(t,e)))})),this.element.appendChild(n),this.labelElement=n;const i=t.createElement("div");i.classList.add(z("v")),this.element.appendChild(i),this.valueElement=i}}class q extends D{constructor(t,e){const n=e.valueController.viewProps;super(Object.assign(Object.assign({},e),{view:new $(t,{props:e.props,viewProps:n}),viewProps:n})),this.props=e.props,this.valueController=e.valueController,this.view.valueElement.appendChild(this.valueController.view.element)}}const G={id:"button",type:"blade",accept(t){const e=L,n=A(t,{title:e.required.string,view:e.required.constant("button"),label:e.optional.string});return n?{params:n}:null},controller:t=>new q(t.document,{blade:t.blade,props:M.fromObject({label:t.params.label}),valueController:new C(t.document,{props:M.fromObject({title:t.params.title}),viewProps:t.viewProps})}),api:t=>t.controller instanceof q&&t.controller.valueController instanceof C?new h(t.controller):null};class Y extends D{constructor(t){super(t),this.value=t.value}}function W(){return new M({positions:E([],{equals:l})})}class Q extends M{constructor(t){super(t)}static create(t){const e=M.createCore({completed:!0,expanded:t,expandedHeight:null,shouldFixHeight:!1,temporaryExpanded:null});return new Q(e)}get styleExpanded(){var t;return null!==(t=this.get("temporaryExpanded"))&&void 0!==t?t:this.get("expanded")}get styleHeight(){if(!this.styleExpanded)return"0";const t=this.get("expandedHeight");return this.get("shouldFixHeight")&&!a(t)?`${t}px`:"auto"}bindExpandedClass(t,e){const n=()=>{this.styleExpanded?t.classList.add(e):t.classList.remove(e)};g(this,"expanded",n),g(this,"temporaryExpanded",n)}cleanUpTransition(){this.set("shouldFixHeight",!1),this.set("expandedHeight",null),this.set("completed",!0)}}function X(t,e){e.style.height=t.styleHeight}function Z(t,e){t.value("expanded").emitter.on("beforechange",(()=>{t.set("completed",!1),a(t.get("expandedHeight"))&&t.set("expandedHeight",function(t,e){let n=0;return function(t,e){const n=t.style.transition;t.style.transition="none",e(),t.style.transition=n}(e,(()=>{t.set("expandedHeight",null),t.set("temporaryExpanded",!0),n=e.clientHeight,t.set("temporaryExpanded",null)})),n}(t,e)),t.set("shouldFixHeight",!0)})),t.emitter.on("change",(()=>{X(t,e)})),X(t,e),e.addEventListener("transitionend",(e=>{"height"===e.propertyName&&t.cleanUpTransition()}))}class J extends e{constructor(t,e){super(t),this.rackApi_=e}}class tt{constructor(t){this.emitter=new u,this.items_=[],this.cache_=new Set,this.onSubListAdd_=this.onSubListAdd_.bind(this),this.onSubListRemove_=this.onSubListRemove_.bind(this),this.extract_=t}get items(){return this.items_}allItems(){return Array.from(this.cache_)}find(t){for(const e of this.allItems())if(t(e))return e;return null}includes(t){return this.cache_.has(t)}add(t,e){if(this.includes(t))throw c.shouldNeverHappen();const n=void 0!==e?e:this.items_.length;this.items_.splice(n,0,t),this.cache_.add(t);const i=this.extract_(t);i&&(i.emitter.on("add",this.onSubListAdd_),i.emitter.on("remove",this.onSubListRemove_),i.allItems().forEach((t=>{this.cache_.add(t)}))),this.emitter.emit("add",{index:n,item:t,root:this,target:this})}remove(t){const e=this.items_.indexOf(t);if(e<0)return;this.items_.splice(e,1),this.cache_.delete(t);const n=this.extract_(t);n&&(n.emitter.off("add",this.onSubListAdd_),n.emitter.off("remove",this.onSubListRemove_)),this.emitter.emit("remove",{index:e,item:t,root:this,target:this})}onSubListAdd_(t){this.cache_.add(t.item),this.emitter.emit("add",{index:t.index,item:t.item,root:this,target:t.target})}onSubListRemove_(t){this.cache_.delete(t.item),this.emitter.emit("remove",{index:t.index,item:t.item,root:this,target:t.target})}}class et extends e{constructor(t){super(t),this.onBindingChange_=this.onBindingChange_.bind(this),this.emitter_=new u,this.controller_.binding.emitter.on("change",this.onBindingChange_)}get label(){return this.controller_.props.get("label")}set label(t){this.controller_.props.set("label",t)}on(t,e){const n=e.bind(this);return this.emitter_.on(t,(t=>{n(t.event)})),this}refresh(){this.controller_.binding.read()}onBindingChange_(t){const e=t.sender.target.read();this.emitter_.emit("change",{event:new i(this,e,this.controller_.binding.target.presetKey,t.options.last)})}}class nt extends q{constructor(t,e){super(t,e),this.binding=e.binding}}class it extends e{constructor(t){super(t),this.onBindingUpdate_=this.onBindingUpdate_.bind(this),this.emitter_=new u,this.controller_.binding.emitter.on("update",this.onBindingUpdate_)}get label(){return this.controller_.props.get("label")}set label(t){this.controller_.props.set("label",t)}on(t,e){const n=e.bind(this);return this.emitter_.on(t,(t=>{n(t.event)})),this}refresh(){this.controller_.binding.read()}onBindingUpdate_(t){const e=t.sender.target.read();this.emitter_.emit("update",{event:new r(this,e,this.controller_.binding.target.presetKey)})}}class rt extends q{constructor(t,e){super(t,e),this.binding=e.binding,this.viewProps.bindDisabled(this.binding.ticker),this.viewProps.handleDispose((()=>{this.binding.dispose()}))}}function ot(t){return t instanceof lt?t.apiSet_:t instanceof J?t.rackApi_.apiSet_:null}function st(t,e){const n=t.find((t=>t.controller_===e));if(!n)throw c.shouldNeverHappen();return n}function at(t,e,n){if(!d.isBindable(t))throw c.notBindable();return new d(t,e,n)}class lt extends e{constructor(t,e){super(t),this.onRackAdd_=this.onRackAdd_.bind(this),this.onRackRemove_=this.onRackRemove_.bind(this),this.onRackInputChange_=this.onRackInputChange_.bind(this),this.onRackMonitorUpdate_=this.onRackMonitorUpdate_.bind(this),this.emitter_=new u,this.apiSet_=new tt(ot),this.pool_=e;const n=this.controller_.rack;n.emitter.on("add",this.onRackAdd_),n.emitter.on("remove",this.onRackRemove_),n.emitter.on("inputchange",this.onRackInputChange_),n.emitter.on("monitorupdate",this.onRackMonitorUpdate_),n.children.forEach((t=>{this.setUpApi_(t)}))}get children(){return this.controller_.rack.children.map((t=>st(this.apiSet_,t)))}addInput(t,e,n){const i=null!=n?n:{},r=this.pool_.createInput(this.controller_.view.element.ownerDocument,at(t,e,i.presetKey),i),o=new et(r);return this.add(o,i.index)}addMonitor(t,e,n){const i=null!=n?n:{},r=this.pool_.createMonitor(this.controller_.view.element.ownerDocument,at(t,e),i),o=new it(r);return this.add(o,i.index)}addFolder(t){return function(t,e){return t.addBlade(Object.assign(Object.assign({},e),{view:"folder"}))}(this,t)}addButton(t){return function(t,e){return t.addBlade(Object.assign(Object.assign({},e),{view:"button"}))}(this,t)}addSeparator(t){return function(t,e){return t.addBlade(Object.assign(Object.assign({},null!=e?e:{}),{view:"separator"}))}(this,t)}addTab(t){return function(t,e){return t.addBlade(Object.assign(Object.assign({},e),{view:"tab"}))}(this,t)}add(t,e){this.controller_.rack.add(t.controller_,e);const n=this.apiSet_.find((e=>e.controller_===t.controller_));return n&&this.apiSet_.remove(n),this.apiSet_.add(t),t}remove(t){this.controller_.rack.remove(t.controller_)}addBlade(t){const e=this.pool_.createBlade(this.controller_.view.element.ownerDocument,t),n=this.pool_.createBladeApi(e);return this.add(n,t.index)}on(t,e){const n=e.bind(this);return this.emitter_.on(t,(t=>{n(t.event)})),this}setUpApi_(t){this.apiSet_.find((e=>e.controller_===t))||this.apiSet_.add(this.pool_.createBladeApi(t))}onRackAdd_(t){this.setUpApi_(t.bladeController)}onRackRemove_(t){if(t.isRoot){const e=st(this.apiSet_,t.bladeController);this.apiSet_.remove(e)}}onRackInputChange_(t){const e=t.bladeController;if(e instanceof nt){const n=st(this.apiSet_,e),r=e.binding;this.emitter_.emit("change",{event:new i(n,r.target.read(),r.target.presetKey,t.options.last)})}else if(e instanceof Y){const n=st(this.apiSet_,e);this.emitter_.emit("change",{event:new i(n,e.value.rawValue,void 0,t.options.last)})}}onRackMonitorUpdate_(t){if(!(t.bladeController instanceof rt))throw c.shouldNeverHappen();const e=st(this.apiSet_,t.bladeController),n=t.bladeController.binding;this.emitter_.emit("update",{event:new r(e,n.target.read(),n.target.presetKey)})}}class pt extends J{constructor(t,e){super(t,new lt(t.rackController,e)),this.emitter_=new u,this.controller_.foldable.value("expanded").emitter.on("change",(t=>{this.emitter_.emit("fold",{event:new o(this,t.sender.rawValue)})})),this.rackApi_.on("change",(t=>{this.emitter_.emit("change",{event:t})})),this.rackApi_.on("update",(t=>{this.emitter_.emit("update",{event:t})}))}get expanded(){return this.controller_.foldable.get("expanded")}set expanded(t){this.controller_.foldable.set("expanded",t)}get title(){return this.controller_.props.get("title")}set title(t){this.controller_.props.set("title",t)}get children(){return this.rackApi_.children}addInput(t,e,n){return this.rackApi_.addInput(t,e,n)}addMonitor(t,e,n){return this.rackApi_.addMonitor(t,e,n)}addFolder(t){return this.rackApi_.addFolder(t)}addButton(t){return this.rackApi_.addButton(t)}addSeparator(t){return this.rackApi_.addSeparator(t)}addTab(t){return this.rackApi_.addTab(t)}add(t,e){return this.rackApi_.add(t,e)}remove(t){this.rackApi_.remove(t)}addBlade(t){return this.rackApi_.addBlade(t)}on(t,e){const n=e.bind(this);return this.emitter_.on(t,(t=>{n(t.event)})),this}}class ct extends D{constructor(t){super({blade:t.blade,view:t.view,viewProps:t.rackController.viewProps}),this.rackController=t.rackController}}class dt{constructor(t,e){const n=m(e.viewName);this.element=t.createElement("div"),this.element.classList.add(n()),e.viewProps.bindClassModifiers(this.element)}}function ht(t){return t instanceof mt?t.rack:t instanceof ct?t.rackController.rack:null}function ut(t){const e=ht(t);return e?e.bcSet_:null}class vt{constructor(t){var e;this.onBladePositionsChange_=this.onBladePositionsChange_.bind(this),this.onSetAdd_=this.onSetAdd_.bind(this),this.onSetRemove_=this.onSetRemove_.bind(this),this.onChildDispose_=this.onChildDispose_.bind(this),this.onChildPositionsChange_=this.onChildPositionsChange_.bind(this),this.onChildInputChange_=this.onChildInputChange_.bind(this),this.onChildMonitorUpdate_=this.onChildMonitorUpdate_.bind(this),this.onChildValueChange_=this.onChildValueChange_.bind(this),this.onChildViewPropsChange_=this.onChildViewPropsChange_.bind(this),this.onDescendantLayout_=this.onDescendantLayout_.bind(this),this.onDescendantInputChange_=this.onDescendantInputChange_.bind(this),this.onDescendantMonitorUpdate_=this.onDescendantMonitorUpdate_.bind(this),this.emitter=new u,this.blade_=null!=t?t:null,null===(e=this.blade_)||void 0===e||e.value("positions").emitter.on("change",this.onBladePositionsChange_),this.bcSet_=new tt(ut),this.bcSet_.emitter.on("add",this.onSetAdd_),this.bcSet_.emitter.on("remove",this.onSetRemove_)}get children(){return this.bcSet_.items}add(t,e){t.parent&&t.parent.remove(t),t.parent_=this,this.bcSet_.add(t,e)}remove(t){t.parent_=null,this.bcSet_.remove(t)}find(t){return this.bcSet_.allItems().filter((e=>e instanceof t))}onSetAdd_(t){this.updatePositions_();const e=t.target===t.root;if(this.emitter.emit("add",{bladeController:t.item,index:t.index,isRoot:e,sender:this}),!e)return;const n=t.item;if(n.viewProps.emitter.on("change",this.onChildViewPropsChange_),n.blade.value("positions").emitter.on("change",this.onChildPositionsChange_),n.viewProps.handleDispose(this.onChildDispose_),n instanceof nt)n.binding.emitter.on("change",this.onChildInputChange_);else if(n instanceof rt)n.binding.emitter.on("update",this.onChildMonitorUpdate_);else if(n instanceof Y)n.value.emitter.on("change",this.onChildValueChange_);else{const t=ht(n);if(t){const e=t.emitter;e.on("layout",this.onDescendantLayout_),e.on("inputchange",this.onDescendantInputChange_),e.on("monitorupdate",this.onDescendantMonitorUpdate_)}}}onSetRemove_(t){this.updatePositions_();const e=t.target===t.root;if(this.emitter.emit("remove",{bladeController:t.item,isRoot:e,sender:this}),!e)return;const n=t.item;if(n instanceof nt)n.binding.emitter.off("change",this.onChildInputChange_);else if(n instanceof rt)n.binding.emitter.off("update",this.onChildMonitorUpdate_);else if(n instanceof Y)n.value.emitter.off("change",this.onChildValueChange_);else{const t=ht(n);if(t){const e=t.emitter;e.off("layout",this.onDescendantLayout_),e.off("inputchange",this.onDescendantInputChange_),e.off("monitorupdate",this.onDescendantMonitorUpdate_)}}}updatePositions_(){const t=this.bcSet_.items.filter((t=>!t.viewProps.get("hidden"))),e=t[0],n=t[t.length-1];this.bcSet_.items.forEach((t=>{const i=[];t===e&&(i.push("first"),this.blade_&&!this.blade_.get("positions").includes("veryfirst")||i.push("veryfirst")),t===n&&(i.push("last"),this.blade_&&!this.blade_.get("positions").includes("verylast")||i.push("verylast")),t.blade.set("positions",i)}))}onChildPositionsChange_(){this.updatePositions_(),this.emitter.emit("layout",{sender:this})}onChildViewPropsChange_(t){this.updatePositions_(),this.emitter.emit("layout",{sender:this})}onChildDispose_(){this.bcSet_.items.filter((t=>t.viewProps.get("disposed"))).forEach((t=>{this.bcSet_.remove(t)}))}onChildInputChange_(t){const e=function(t,e){for(let n=0;n{for(let t=this.rack.children.length-1;t>=0;t--){this.rack.children[t].viewProps.set("disposed",!0)}}))}onRackAdd_(t){t.isRoot&&B(this.view.element,t.bladeController.view.element,t.index)}onRackRemove_(t){t.isRoot&&U(t.bladeController.view.element)}}const ft=m("cnt");class bt{constructor(t,e){var n;this.className_=m(null!==(n=e.viewName)&&void 0!==n?n:"fld"),this.element=t.createElement("div"),this.element.classList.add(this.className_(),ft()),e.viewProps.bindClassModifiers(this.element),this.foldable_=e.foldable,this.foldable_.bindExpandedClass(this.element,this.className_(void 0,"expanded")),g(this.foldable_,"completed",_(this.element,this.className_(void 0,"cpl")));const i=t.createElement("button");i.classList.add(this.className_("b")),g(e.props,"title",(t=>{a(t)?this.element.classList.add(this.className_(void 0,"not")):this.element.classList.remove(this.className_(void 0,"not"))})),e.viewProps.bindDisabled(i),this.element.appendChild(i),this.buttonElement=i;const r=t.createElement("div");r.classList.add(this.className_("t")),w(e.props.value("title"),r),this.buttonElement.appendChild(r),this.titleElement=r;const o=t.createElement("div");o.classList.add(this.className_("m")),this.buttonElement.appendChild(o);const s=e.containerElement;s.classList.add(this.className_("c")),this.element.appendChild(s),this.containerElement=s}}class gt extends ct{constructor(t,e){var n;const i=Q.create(null===(n=e.expanded)||void 0===n||n),r=new mt(t,{blade:e.blade,root:e.root,viewProps:e.viewProps});super(Object.assign(Object.assign({},e),{rackController:r,view:new bt(t,{containerElement:r.view.element,foldable:i,props:e.props,viewName:e.root?"rot":void 0,viewProps:e.viewProps})})),this.onTitleClick_=this.onTitleClick_.bind(this),this.props=e.props,this.foldable=i,Z(this.foldable,this.view.containerElement),this.rackController.rack.emitter.on("add",(()=>{this.foldable.cleanUpTransition()})),this.rackController.rack.emitter.on("remove",(()=>{this.foldable.cleanUpTransition()})),this.view.buttonElement.addEventListener("click",this.onTitleClick_)}get document(){return this.view.element.ownerDocument}onTitleClick_(){this.foldable.set("expanded",!this.foldable.get("expanded"))}}const _t={id:"folder",type:"blade",accept(t){const e=L,n=A(t,{title:e.required.string,view:e.required.constant("folder"),expanded:e.optional.boolean});return n?{params:n}:null},controller:t=>new gt(t.document,{blade:t.blade,expanded:t.params.expanded,props:M.fromObject({title:t.params.title}),viewProps:t.viewProps}),api:t=>t.controller instanceof gt?new pt(t.controller,t.pool):null};class wt extends Y{constructor(t,e){const n=e.valueController.viewProps;super(Object.assign(Object.assign({},e),{value:e.valueController.value,view:new $(t,{props:e.props,viewProps:n}),viewProps:n})),this.props=e.props,this.valueController=e.valueController,this.view.valueElement.appendChild(this.valueController.view.element)}}class yt extends e{}const xt=m("spr");class Ct{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(xt()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("hr");n.classList.add(xt("r")),this.element.appendChild(n)}}class kt extends D{constructor(t,e){super(Object.assign(Object.assign({},e),{view:new Ct(t,{viewProps:e.viewProps})}))}}const Pt={id:"separator",type:"blade",accept(t){const e=A(t,{view:L.required.constant("separator")});return e?{params:e}:null},controller:t=>new kt(t.document,{blade:t.blade,viewProps:t.viewProps}),api:t=>t.controller instanceof kt?new yt(t.controller):null},Et=m("");function Mt(t,e){return _(t,Et(void 0,e))}class Vt extends M{constructor(t){super(t)}static create(t){var e,n;const i=null!=t?t:{},r={disabled:null!==(e=i.disabled)&&void 0!==e&&e,disposed:!1,hidden:null!==(n=i.hidden)&&void 0!==n&&n},o=M.createCore(r);return new Vt(o)}bindClassModifiers(t){g(this,"disabled",Mt(t,"disabled")),g(this,"hidden",Mt(t,"hidden"))}bindDisabled(t){g(this,"disabled",(e=>{t.disabled=e}))}bindTabIndex(t){g(this,"disabled",(e=>{t.tabIndex=e?-1:0}))}handleDispose(t){this.value("disposed").emitter.on("change",(e=>{e&&t()}))}}const St=m("tbi");class Lt{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(St()),e.viewProps.bindClassModifiers(this.element),g(e.props,"selected",(t=>{t?this.element.classList.add(St(void 0,"sel")):this.element.classList.remove(St(void 0,"sel"))}));const n=t.createElement("button");n.classList.add(St("b")),e.viewProps.bindDisabled(n),this.element.appendChild(n),this.buttonElement=n;const i=t.createElement("div");i.classList.add(St("t")),w(e.props.value("title"),i),this.buttonElement.appendChild(i),this.titleElement=i}}class At{constructor(t,e){this.emitter=new u,this.onClick_=this.onClick_.bind(this),this.props=e.props,this.viewProps=e.viewProps,this.view=new Lt(t,{props:e.props,viewProps:e.viewProps}),this.view.buttonElement.addEventListener("click",this.onClick_)}onClick_(){this.emitter.emit("click",{sender:this})}}class Tt{constructor(t,e){this.onItemClick_=this.onItemClick_.bind(this),this.ic_=new At(t,{props:e.itemProps,viewProps:Vt.create()}),this.ic_.emitter.on("click",this.onItemClick_),this.cc_=new mt(t,{blade:W(),viewProps:Vt.create()}),this.props=e.props,g(this.props,"selected",(t=>{this.itemController.props.set("selected",t),this.contentController.viewProps.set("hidden",!t)}))}get itemController(){return this.ic_}get contentController(){return this.cc_}onItemClick_(){this.props.set("selected",!0)}}class jt{constructor(t,e){this.controller_=t,this.rackApi_=e}get title(){var t;return null!==(t=this.controller_.itemController.props.get("title"))&&void 0!==t?t:""}set title(t){this.controller_.itemController.props.set("title",t)}get selected(){return this.controller_.props.get("selected")}set selected(t){this.controller_.props.set("selected",t)}get children(){return this.rackApi_.children}addButton(t){return this.rackApi_.addButton(t)}addFolder(t){return this.rackApi_.addFolder(t)}addSeparator(t){return this.rackApi_.addSeparator(t)}addTab(t){return this.rackApi_.addTab(t)}add(t,e){this.rackApi_.add(t,e)}remove(t){this.rackApi_.remove(t)}addInput(t,e,n){return this.rackApi_.addInput(t,e,n)}addMonitor(t,e,n){return this.rackApi_.addMonitor(t,e,n)}addBlade(t){return this.rackApi_.addBlade(t)}}class Dt extends J{constructor(t,e){super(t,new lt(t.rackController,e)),this.onPageAdd_=this.onPageAdd_.bind(this),this.onPageRemove_=this.onPageRemove_.bind(this),this.onSelect_=this.onSelect_.bind(this),this.emitter_=new u,this.pageApiMap_=new Map,this.rackApi_.on("change",(t=>{this.emitter_.emit("change",{event:t})})),this.rackApi_.on("update",(t=>{this.emitter_.emit("update",{event:t})})),this.controller_.tab.selectedIndex.emitter.on("change",this.onSelect_),this.controller_.pageSet.emitter.on("add",this.onPageAdd_),this.controller_.pageSet.emitter.on("remove",this.onPageRemove_),this.controller_.pageSet.items.forEach((t=>{this.setUpPageApi_(t)}))}get pages(){return this.controller_.pageSet.items.map((t=>{const e=this.pageApiMap_.get(t);if(!e)throw c.shouldNeverHappen();return e}))}addPage(t){const e=new Tt(this.controller_.view.element.ownerDocument,{itemProps:M.fromObject({selected:!1,title:t.title}),props:M.fromObject({selected:!1})});this.controller_.add(e,t.index);const n=this.pageApiMap_.get(e);if(!n)throw c.shouldNeverHappen();return n}removePage(t){this.controller_.remove(t)}on(t,e){const n=e.bind(this);return this.emitter_.on(t,(t=>{n(t.event)})),this}setUpPageApi_(t){const e=this.rackApi_.apiSet_.find((e=>e.controller_===t.contentController));if(!e)throw c.shouldNeverHappen();const n=new jt(t,e);this.pageApiMap_.set(t,n)}onPageAdd_(t){this.setUpPageApi_(t.item)}onPageRemove_(t){if(!this.pageApiMap_.get(t.item))throw c.shouldNeverHappen();this.pageApiMap_.delete(t.item)}onSelect_(t){this.emitter_.emit("select",{event:new s(this,t.rawValue)})}}class Rt{constructor(){this.onItemSelectedChange_=this.onItemSelectedChange_.bind(this),this.empty=E(!0),this.selectedIndex=E(-1),this.items_=[]}add(t,e){this.items_.splice(null!=e?e:this.items_.length,0,t),t.emitter.on("change",this.onItemSelectedChange_),this.keepSelection_()}remove(t){const e=this.items_.indexOf(t);e<0||(this.items_.splice(e,1),t.emitter.off("change",this.onItemSelectedChange_),this.keepSelection_())}keepSelection_(){if(0===this.items_.length)return this.selectedIndex.rawValue=-1,void(this.empty.rawValue=!0);const t=this.items_.findIndex((t=>t.rawValue));t<0?(this.items_.forEach(((t,e)=>{t.rawValue=0===e})),this.selectedIndex.rawValue=0):(this.items_.forEach(((e,n)=>{e.rawValue=n===t})),this.selectedIndex.rawValue=t),this.empty.rawValue=!1}onItemSelectedChange_(t){if(t.rawValue){const e=this.items_.findIndex((e=>e===t.sender));this.items_.forEach(((t,n)=>{t.rawValue=n===e})),this.selectedIndex.rawValue=e}else this.keepSelection_()}}const Ot=m("tab");class Ft{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(Ot(),ft()),e.viewProps.bindClassModifiers(this.element),b(e.empty,_(this.element,Ot(void 0,"nop")));const n=t.createElement("div");n.classList.add(Ot("i")),this.element.appendChild(n),this.itemsElement=n;const i=e.contentsElement;i.classList.add(Ot("c")),this.element.appendChild(i),this.contentsElement=i}}class Nt extends ct{constructor(t,e){const n=new mt(t,{blade:e.blade,viewProps:e.viewProps}),i=new Rt;super({blade:e.blade,rackController:n,view:new Ft(t,{contentsElement:n.view.element,empty:i.empty,viewProps:e.viewProps})}),this.onPageAdd_=this.onPageAdd_.bind(this),this.onPageRemove_=this.onPageRemove_.bind(this),this.pageSet_=new tt((()=>null)),this.pageSet_.emitter.on("add",this.onPageAdd_),this.pageSet_.emitter.on("remove",this.onPageRemove_),this.tab=i}get pageSet(){return this.pageSet_}add(t,e){this.pageSet_.add(t,e)}remove(t){this.pageSet_.remove(this.pageSet_.items[t])}onPageAdd_(t){const e=t.item;B(this.view.itemsElement,e.itemController.view.element,t.index),this.rackController.rack.add(e.contentController,t.index),this.tab.add(e.props.value("selected"))}onPageRemove_(t){const e=t.item;U(e.itemController.view.element),this.rackController.rack.remove(e.contentController),this.tab.remove(e.props.value("selected"))}}const It={id:"tab",type:"blade",accept(t){const e=L,n=A(t,{pages:e.required.array(e.required.object({title:e.required.string})),view:e.required.constant("tab")});return n&&0!==n.pages.length?{params:n}:null},controller(t){const e=new Nt(t.document,{blade:t.blade,viewProps:t.viewProps});return t.params.pages.forEach((n=>{const i=new Tt(t.document,{itemProps:M.fromObject({selected:!1,title:n.title}),props:M.fromObject({selected:!1})});e.add(i)})),e},api:t=>t.controller instanceof Nt?new Dt(t.controller,t.pool):null};class Bt{constructor(){this.disabled=!1,this.emitter=new u}dispose(){}tick(){this.disabled||this.emitter.emit("tick",{sender:this})}}class Ut{constructor(t,e){this.disabled_=!1,this.timerId_=null,this.onTick_=this.onTick_.bind(this),this.doc_=t,this.emitter=new u,this.interval_=e,this.setTimer_()}get disabled(){return this.disabled_}set disabled(t){this.disabled_=t,this.disabled_?this.clearTimer_():this.setTimer_()}dispose(){this.clearTimer_()}clearTimer_(){if(null===this.timerId_)return;const t=this.doc_.defaultView;t&&t.clearInterval(this.timerId_),this.timerId_=null}setTimer_(){if(this.clearTimer_(),this.interval_<=0)return;const t=this.doc_.defaultView;t&&(this.timerId_=t.setInterval(this.onTick_,this.interval_))}onTick_(){this.disabled_||this.emitter.emit("tick",{sender:this})}}class Kt{constructor(t){this.constraints=t}constrain(t){return this.constraints.reduce(((t,e)=>e.constrain(t)),t)}}function Ht(t,e){if(t instanceof e)return t;if(t instanceof Kt){const n=t.constraints.reduce(((t,n)=>t||(n instanceof e?n:null)),null);if(n)return n}return null}class zt{constructor(t){this.options=t}constrain(t){const e=this.options;if(0===e.length)return t;return e.filter((e=>e.value===t)).length>0?t:e[0].value}}class $t{constructor(t){this.maxValue=t.max,this.minValue=t.min}constrain(t){let e=t;return a(this.minValue)||(e=Math.max(e,this.minValue)),a(this.maxValue)||(e=Math.min(e,this.maxValue)),e}}class qt{constructor(t,e=0){this.step=t,this.origin=e}constrain(t){const e=this.origin%this.step;return e+Math.round((t-e)/this.step)*this.step}}const Gt=m("lst");class Yt{constructor(t,e){this.onValueChange_=this.onValueChange_.bind(this),this.props_=e.props,this.element=t.createElement("div"),this.element.classList.add(Gt()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("select");n.classList.add(Gt("s")),g(this.props_,"options",(e=>{K(n),e.forEach(((e,i)=>{const r=t.createElement("option");r.dataset.index=String(i),r.textContent=e.text,r.value=String(e.value),n.appendChild(r)}))})),e.viewProps.bindDisabled(n),this.element.appendChild(n),this.selectElement=n;const i=t.createElement("div");i.classList.add(Gt("m")),i.appendChild(I(t,"dropdown")),this.element.appendChild(i),e.value.emitter.on("change",this.onValueChange_),this.value_=e.value,this.update_()}update_(){this.selectElement.value=String(this.value_.rawValue)}onValueChange_(){this.update_()}}class Wt{constructor(t,e){this.onSelectChange_=this.onSelectChange_.bind(this),this.props=e.props,this.value=e.value,this.viewProps=e.viewProps,this.view=new Yt(t,{props:this.props,value:this.value,viewProps:this.viewProps}),this.view.selectElement.addEventListener("change",this.onSelectChange_)}onSelectChange_(t){const e=t.currentTarget.selectedOptions.item(0);if(!e)return;const n=Number(e.dataset.index);this.value.rawValue=this.props.get("options")[n].value}}const Qt=m("pop");class Xt{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(Qt()),e.viewProps.bindClassModifiers(this.element),b(e.shows,_(this.element,Qt(void 0,"v")))}}class Zt{constructor(t,e){this.shows=E(!1),this.viewProps=e.viewProps,this.view=new Xt(t,{shows:this.shows,viewProps:this.viewProps})}}const Jt=m("txt");class te{constructor(t,e){this.onChange_=this.onChange_.bind(this),this.element=t.createElement("div"),this.element.classList.add(Jt()),e.viewProps.bindClassModifiers(this.element),this.props_=e.props,this.props_.emitter.on("change",this.onChange_);const n=t.createElement("input");n.classList.add(Jt("i")),n.type="text",e.viewProps.bindDisabled(n),this.element.appendChild(n),this.inputElement=n,e.value.emitter.on("change",this.onChange_),this.value_=e.value,this.refresh()}refresh(){const t=this.props_.get("formatter");this.inputElement.value=t(this.value_.rawValue)}onChange_(){this.refresh()}}class ee{constructor(t,e){this.onInputChange_=this.onInputChange_.bind(this),this.parser_=e.parser,this.props=e.props,this.value=e.value,this.viewProps=e.viewProps,this.view=new te(t,{props:e.props,value:this.value,viewProps:this.viewProps}),this.view.inputElement.addEventListener("change",this.onInputChange_)}onInputChange_(t){const e=this.parser_(t.currentTarget.value);a(e)||(this.value.rawValue=e),this.view.refresh()}}function ne(t){return"false"!==t&&!!t}function ie(t){return function(t){return String(t)}(t)}class re{constructor(t){this.text=t}evaluate(){return Number(this.text)}toString(){return this.text}}const oe={"**":(t,e)=>Math.pow(t,e),"*":(t,e)=>t*e,"/":(t,e)=>t/e,"%":(t,e)=>t%e,"+":(t,e)=>t+e,"-":(t,e)=>t-e,"<<":(t,e)=>t<>":(t,e)=>t>>e,">>>":(t,e)=>t>>>e,"&":(t,e)=>t&e,"^":(t,e)=>t^e,"|":(t,e)=>t|e};class se{constructor(t,e,n){this.left=e,this.operator=t,this.right=n}evaluate(){const t=oe[this.operator];if(!t)throw new Error(`unexpected binary operator: '${this.operator}`);return t(this.left.evaluate(),this.right.evaluate())}toString(){return["b(",this.left.toString(),this.operator,this.right.toString(),")"].join(" ")}}const ae={"+":t=>t,"-":t=>-t,"~":t=>~t};class le{constructor(t,e){this.operator=t,this.expression=e}evaluate(){const t=ae[this.operator];if(!t)throw new Error(`unexpected unary operator: '${this.operator}`);return t(this.expression.evaluate())}toString(){return["u(",this.operator,this.expression.toString(),")"].join(" ")}}function pe(t){return(e,n)=>{for(let i=0;ie.startsWith(t,n)))[0];return i?(n+=i.length,{cursor:n+=ce(e,n).length,operator:i}):null}const _e=[["**"],["*","/","%"],["+","-"],["<<",">>>",">>"],["&"],["^"],["|"]].reduce(((t,e)=>function(t,e){return(n,i)=>{const r=t(n,i);if(!r)return null;i=r.cursor;let o=r.evaluable;for(;;){const r=ge(e,n,i);if(!r)break;const s=t(n,i=r.cursor);if(!s)return null;i=s.cursor,o=new se(r.operator,o,s.evaluable)}return o?{cursor:i,evaluable:o}:null}}(t,e)),(function t(e,n){const i=be(e,n);if(i)return i;const r=e.substr(n,1);if("+"!==r&&"-"!==r&&"~"!==r)return null;const o=t(e,n+=r.length);return o?{cursor:n=o.cursor,evaluable:new le(r,o.evaluable)}:null}));function we(t,e){return e+=ce(t,e).length,_e(t,e)}function ye(t){var e;const n=function(t){const e=we(t,0);return e?e.cursor+ce(t,e.cursor).length!==t.length?null:e.evaluable:null}(t);return null!==(e=null==n?void 0:n.evaluate())&&void 0!==e?e:null}function xe(t){if("number"==typeof t)return t;if("string"==typeof t){const e=ye(t);if(!a(e))return e}return 0}function Ce(t){return String(t)}function ke(t){return e=>e.toFixed(Math.max(Math.min(t,20),0))}const Pe=ke(0);function Ee(t){return Pe(t)+"%"}function Me(t){return String(t)}function Ve(t){return t}function Se(t,e){for(;t.length{o((()=>{e.setRawValue(n(t,e),i.options)}))})),e.emitter.on("change",(r=>{o((()=>{t.setRawValue(i(t,e),r.options)})),o((()=>{e.setRawValue(n(t,e),r.options)}))})),o((()=>{e.setRawValue(n(t,e),{forceEmit:!1,last:!0})}))}function je(t,e){const n=t*(e.altKey?.1:1)*(e.shiftKey?10:1);return e.upKey?+n:e.downKey?-n:0}function De(t){return{altKey:t.altKey,downKey:"ArrowDown"===t.key,shiftKey:t.shiftKey,upKey:"ArrowUp"===t.key}}function Re(t){return{altKey:t.altKey,downKey:"ArrowLeft"===t.key,shiftKey:t.shiftKey,upKey:"ArrowRight"===t.key}}function Oe(t){return function(t){return"ArrowUp"===t||"ArrowDown"===t}(t)||"ArrowLeft"===t||"ArrowRight"===t}function Fe(t,e){var n,i;const r=e.ownerDocument.defaultView,o=e.getBoundingClientRect();return{x:t.pageX-((null!==(n=r&&r.scrollX)&&void 0!==n?n:0)+o.left),y:t.pageY-((null!==(i=r&&r.scrollY)&&void 0!==i?i:0)+o.top)}}class Ne{constructor(t){this.lastTouch_=null,this.onDocumentMouseMove_=this.onDocumentMouseMove_.bind(this),this.onDocumentMouseUp_=this.onDocumentMouseUp_.bind(this),this.onMouseDown_=this.onMouseDown_.bind(this),this.onTouchEnd_=this.onTouchEnd_.bind(this),this.onTouchMove_=this.onTouchMove_.bind(this),this.onTouchStart_=this.onTouchStart_.bind(this),this.elem_=t,this.emitter=new u,t.addEventListener("touchstart",this.onTouchStart_,{passive:!1}),t.addEventListener("touchmove",this.onTouchMove_,{passive:!0}),t.addEventListener("touchend",this.onTouchEnd_),t.addEventListener("mousedown",this.onMouseDown_)}computePosition_(t){const e=this.elem_.getBoundingClientRect();return{bounds:{width:e.width,height:e.height},point:t?{x:t.x,y:t.y}:null}}onMouseDown_(t){var e;t.preventDefault(),null===(e=t.currentTarget)||void 0===e||e.focus();const n=this.elem_.ownerDocument;n.addEventListener("mousemove",this.onDocumentMouseMove_),n.addEventListener("mouseup",this.onDocumentMouseUp_),this.emitter.emit("down",{altKey:t.altKey,data:this.computePosition_(Fe(t,this.elem_)),sender:this,shiftKey:t.shiftKey})}onDocumentMouseMove_(t){this.emitter.emit("move",{altKey:t.altKey,data:this.computePosition_(Fe(t,this.elem_)),sender:this,shiftKey:t.shiftKey})}onDocumentMouseUp_(t){const e=this.elem_.ownerDocument;e.removeEventListener("mousemove",this.onDocumentMouseMove_),e.removeEventListener("mouseup",this.onDocumentMouseUp_),this.emitter.emit("up",{altKey:t.altKey,data:this.computePosition_(Fe(t,this.elem_)),sender:this,shiftKey:t.shiftKey})}onTouchStart_(t){t.preventDefault();const e=t.targetTouches.item(0),n=this.elem_.getBoundingClientRect();this.emitter.emit("down",{altKey:t.altKey,data:this.computePosition_(e?{x:e.clientX-n.left,y:e.clientY-n.top}:void 0),sender:this,shiftKey:t.shiftKey}),this.lastTouch_=e}onTouchMove_(t){const e=t.targetTouches.item(0),n=this.elem_.getBoundingClientRect();this.emitter.emit("move",{altKey:t.altKey,data:this.computePosition_(e?{x:e.clientX-n.left,y:e.clientY-n.top}:void 0),sender:this,shiftKey:t.shiftKey}),this.lastTouch_=e}onTouchEnd_(t){var e;const n=null!==(e=t.targetTouches.item(0))&&void 0!==e?e:this.lastTouch_,i=this.elem_.getBoundingClientRect();this.emitter.emit("up",{altKey:t.altKey,data:this.computePosition_(n?{x:n.clientX-i.left,y:n.clientY-i.top}:void 0),sender:this,shiftKey:t.shiftKey})}}function Ie(t,e,n,i,r){return i+(t-e)/(n-e)*(r-i)}function Be(t){return String(t.toFixed(10)).split(".")[1].replace(/0+$/,"").length}function Ue(t,e,n){return Math.min(Math.max(t,e),n)}function Ke(t,e){return(t%e+e)%e}const He=m("txt");class ze{constructor(t,e){this.onChange_=this.onChange_.bind(this),this.props_=e.props,this.props_.emitter.on("change",this.onChange_),this.element=t.createElement("div"),this.element.classList.add(He(),He(void 0,"num")),e.arrayPosition&&this.element.classList.add(He(void 0,e.arrayPosition)),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("input");n.classList.add(He("i")),n.type="text",e.viewProps.bindDisabled(n),this.element.appendChild(n),this.inputElement=n,this.onDraggingChange_=this.onDraggingChange_.bind(this),this.dragging_=e.dragging,this.dragging_.emitter.on("change",this.onDraggingChange_),this.element.classList.add(He()),this.inputElement.classList.add(He("i"));const i=t.createElement("div");i.classList.add(He("k")),this.element.appendChild(i),this.knobElement=i;const r=t.createElementNS(R,"svg");r.classList.add(He("g")),this.knobElement.appendChild(r);const o=t.createElementNS(R,"path");o.classList.add(He("gb")),r.appendChild(o),this.guideBodyElem_=o;const s=t.createElementNS(R,"path");s.classList.add(He("gh")),r.appendChild(s),this.guideHeadElem_=s;const a=t.createElement("div");a.classList.add(m("tt")()),this.knobElement.appendChild(a),this.tooltipElem_=a,e.value.emitter.on("change",this.onChange_),this.value=e.value,this.refresh()}onDraggingChange_(t){if(null===t.rawValue)return void this.element.classList.remove(He(void 0,"drg"));this.element.classList.add(He(void 0,"drg"));const e=t.rawValue/this.props_.get("draggingScale"),n=e+(e>0?-1:e<0?1:0),i=Ue(-n,-4,4);this.guideHeadElem_.setAttributeNS(null,"d",[`M ${n+i},0 L${n},4 L${n+i},8`,`M ${e},-1 L${e},9`].join(" ")),this.guideBodyElem_.setAttributeNS(null,"d",`M 0,4 L${e},4`);const r=this.props_.get("formatter");this.tooltipElem_.textContent=r(this.value.rawValue),this.tooltipElem_.style.left=`${e}px`}refresh(){const t=this.props_.get("formatter");this.inputElement.value=t(this.value.rawValue)}onChange_(){this.refresh()}}class $e{constructor(t,e){var n;this.originRawValue_=0,this.onInputChange_=this.onInputChange_.bind(this),this.onInputKeyDown_=this.onInputKeyDown_.bind(this),this.onInputKeyUp_=this.onInputKeyUp_.bind(this),this.onPointerDown_=this.onPointerDown_.bind(this),this.onPointerMove_=this.onPointerMove_.bind(this),this.onPointerUp_=this.onPointerUp_.bind(this),this.baseStep_=e.baseStep,this.parser_=e.parser,this.props=e.props,this.sliderProps_=null!==(n=e.sliderProps)&&void 0!==n?n:null,this.value=e.value,this.viewProps=e.viewProps,this.dragging_=E(null),this.view=new ze(t,{arrayPosition:e.arrayPosition,dragging:this.dragging_,props:this.props,value:this.value,viewProps:this.viewProps}),this.view.inputElement.addEventListener("change",this.onInputChange_),this.view.inputElement.addEventListener("keydown",this.onInputKeyDown_),this.view.inputElement.addEventListener("keyup",this.onInputKeyUp_);const i=new Ne(this.view.knobElement);i.emitter.on("down",this.onPointerDown_),i.emitter.on("move",this.onPointerMove_),i.emitter.on("up",this.onPointerUp_)}constrainValue_(t){var e,n;const i=null===(e=this.sliderProps_)||void 0===e?void 0:e.get("minValue"),r=null===(n=this.sliderProps_)||void 0===n?void 0:n.get("maxValue");let o=t;return void 0!==i&&(o=Math.max(o,i)),void 0!==r&&(o=Math.min(o,r)),o}onInputChange_(t){const e=this.parser_(t.currentTarget.value);a(e)||(this.value.rawValue=this.constrainValue_(e)),this.view.refresh()}onInputKeyDown_(t){const e=je(this.baseStep_,De(t));0!==e&&this.value.setRawValue(this.constrainValue_(this.value.rawValue+e),{forceEmit:!1,last:!1})}onInputKeyUp_(t){0!==je(this.baseStep_,De(t))&&this.value.setRawValue(this.value.rawValue,{forceEmit:!0,last:!0})}onPointerDown_(){this.originRawValue_=this.value.rawValue,this.dragging_.rawValue=0}computeDraggingValue_(t){if(!t.point)return null;return this.constrainValue_(this.originRawValue_+(t.point.x-t.bounds.width/2)*this.props.get("draggingScale"))}onPointerMove_(t){const e=this.computeDraggingValue_(t.data);null!==e&&(this.value.setRawValue(e,{forceEmit:!1,last:!1}),this.dragging_.rawValue=this.value.rawValue-this.originRawValue_)}onPointerUp_(t){const e=this.computeDraggingValue_(t.data);null!==e&&(this.value.setRawValue(e,{forceEmit:!0,last:!0}),this.dragging_.rawValue=null)}}const qe=m("sld");class Ge{constructor(t,e){this.onChange_=this.onChange_.bind(this),this.props_=e.props,this.props_.emitter.on("change",this.onChange_),this.element=t.createElement("div"),this.element.classList.add(qe()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("div");n.classList.add(qe("t")),e.viewProps.bindTabIndex(n),this.element.appendChild(n),this.trackElement=n;const i=t.createElement("div");i.classList.add(qe("k")),this.trackElement.appendChild(i),this.knobElement=i,e.value.emitter.on("change",this.onChange_),this.value=e.value,this.update_()}update_(){const t=Ue(Ie(this.value.rawValue,this.props_.get("minValue"),this.props_.get("maxValue"),0,100),0,100);this.knobElement.style.width=`${t}%`}onChange_(){this.update_()}}class Ye{constructor(t,e){this.onKeyDown_=this.onKeyDown_.bind(this),this.onKeyUp_=this.onKeyUp_.bind(this),this.onPointerDownOrMove_=this.onPointerDownOrMove_.bind(this),this.onPointerUp_=this.onPointerUp_.bind(this),this.baseStep_=e.baseStep,this.value=e.value,this.viewProps=e.viewProps,this.props=e.props,this.view=new Ge(t,{props:this.props,value:this.value,viewProps:this.viewProps}),this.ptHandler_=new Ne(this.view.trackElement),this.ptHandler_.emitter.on("down",this.onPointerDownOrMove_),this.ptHandler_.emitter.on("move",this.onPointerDownOrMove_),this.ptHandler_.emitter.on("up",this.onPointerUp_),this.view.trackElement.addEventListener("keydown",this.onKeyDown_),this.view.trackElement.addEventListener("keyup",this.onKeyUp_)}handlePointerEvent_(t,e){t.point&&this.value.setRawValue(Ie(Ue(t.point.x,0,t.bounds.width),0,t.bounds.width,this.props.get("minValue"),this.props.get("maxValue")),e)}onPointerDownOrMove_(t){this.handlePointerEvent_(t.data,{forceEmit:!1,last:!1})}onPointerUp_(t){this.handlePointerEvent_(t.data,{forceEmit:!0,last:!0})}onKeyDown_(t){const e=je(this.baseStep_,Re(t));0!==e&&this.value.setRawValue(this.value.rawValue+e,{forceEmit:!1,last:!1})}onKeyUp_(t){0!==je(this.baseStep_,Re(t))&&this.value.setRawValue(this.value.rawValue,{forceEmit:!0,last:!0})}}const We=m("sldtxt");class Qe{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(We());const n=t.createElement("div");n.classList.add(We("s")),this.sliderView_=e.sliderView,n.appendChild(this.sliderView_.element),this.element.appendChild(n);const i=t.createElement("div");i.classList.add(We("t")),this.textView_=e.textView,i.appendChild(this.textView_.element),this.element.appendChild(i)}}class Xe{constructor(t,e){this.value=e.value,this.viewProps=e.viewProps,this.sliderC_=new Ye(t,{baseStep:e.baseStep,props:e.sliderProps,value:e.value,viewProps:this.viewProps}),this.textC_=new $e(t,{baseStep:e.baseStep,parser:e.parser,props:e.textProps,sliderProps:e.sliderProps,value:e.value,viewProps:e.viewProps}),this.view=new Qe(t,{sliderView:this.sliderC_.view,textView:this.textC_.view})}get sliderController(){return this.sliderC_}get textController(){return this.textC_}}function Ze(t,e){t.write(e)}function Je(t){const e=L;return Array.isArray(t)?e.required.array(e.required.object({text:e.required.string,value:e.required.raw}))(t).value:"object"==typeof t?e.required.raw(t).value:void 0}function tn(t){if("inline"===t||"popup"===t)return t}function en(t){return L.required.object({max:L.optional.number,min:L.optional.number,step:L.optional.number})(t).value}function nn(t){if(Array.isArray(t))return t;const e=[];return Object.keys(t).forEach((n=>{e.push({text:n,value:t[n]})})),e}function rn(t){return a(t)?null:new zt(nn(t))}function on(t){const e=t?Ht(t,zt):null;return e?e.options:null}function sn(t,e){const n=t&&Ht(t,qt);return n?Be(n.step):Math.max(Be(e),2)}function an(t){const e=function(t){const e=t?Ht(t,qt):null;return e?e.step:null}(t);return null!=e?e:1}function ln(t,e){var n;const i=t&&Ht(t,qt),r=Math.abs(null!==(n=null==i?void 0:i.step)&&void 0!==n?n:e);return 0===r?.1:Math.pow(10,Math.floor(Math.log10(r))-1)}const pn=m("ckb");class cn{constructor(t,e){this.onValueChange_=this.onValueChange_.bind(this),this.element=t.createElement("div"),this.element.classList.add(pn()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("label");n.classList.add(pn("l")),this.element.appendChild(n);const i=t.createElement("input");i.classList.add(pn("i")),i.type="checkbox",n.appendChild(i),this.inputElement=i,e.viewProps.bindDisabled(this.inputElement);const r=t.createElement("div");r.classList.add(pn("w")),n.appendChild(r);const o=I(t,"check");r.appendChild(o),e.value.emitter.on("change",this.onValueChange_),this.value=e.value,this.update_()}update_(){this.inputElement.checked=this.value.rawValue}onValueChange_(){this.update_()}}class dn{constructor(t,e){this.onInputChange_=this.onInputChange_.bind(this),this.value=e.value,this.viewProps=e.viewProps,this.view=new cn(t,{value:this.value,viewProps:this.viewProps}),this.view.inputElement.addEventListener("change",this.onInputChange_)}onInputChange_(t){this.value.rawValue=t.currentTarget.checked}}const hn={id:"input-bool",type:"input",accept:(t,e)=>{if("boolean"!=typeof t)return null;const n=A(e,{options:L.optional.custom(Je)});return n?{initialValue:t,params:n}:null},binding:{reader:t=>ne,constraint:t=>function(t){const e=[],n=rn(t.options);return n&&e.push(n),new Kt(e)}(t.params),writer:t=>Ze},controller:t=>{var e;const n=t.document,i=t.value,r=t.constraint;return r&&Ht(r,zt)?new Wt(n,{props:M.fromObject({options:null!==(e=on(r))&&void 0!==e?e:[]}),value:i,viewProps:t.viewProps}):new dn(n,{value:i,viewProps:t.viewProps})}},un=m("col");class vn{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(un()),e.foldable.bindExpandedClass(this.element,un(void 0,"expanded")),g(e.foldable,"completed",_(this.element,un(void 0,"cpl")));const n=t.createElement("div");n.classList.add(un("h")),this.element.appendChild(n);const i=t.createElement("div");i.classList.add(un("s")),n.appendChild(i),this.swatchElement=i;const r=t.createElement("div");if(r.classList.add(un("t")),n.appendChild(r),this.textElement=r,"inline"===e.pickerLayout){const e=t.createElement("div");e.classList.add(un("p")),this.element.appendChild(e),this.pickerElement=e}else this.pickerElement=null}}function mn(t,e,n){const i=Ke(t,360),r=Ue(e/100,0,1),o=Ue(n/100,0,1),s=o*r,a=s*(1-Math.abs(i/60%2-1)),l=o-s;let p,c,d;return[p,c,d]=i>=0&&i<60?[s,a,0]:i>=60&&i<120?[a,s,0]:i>=120&&i<180?[0,s,a]:i>=180&&i<240?[0,a,s]:i>=240&&i<300?[a,0,s]:[s,0,a],[255*(p+l),255*(c+l),255*(d+l)]}function fn(t){return[t[0],t[1],t[2]]}function bn(t,e){return[t[0],t[1],t[2],e]}const gn={hsl:{hsl:(t,e,n)=>[t,e,n],hsv:function(t,e,n){const i=n+e*(100-Math.abs(2*n-100))/200;return[t,0!==i?e*(100-Math.abs(2*n-100))/i:0,n+e*(100-Math.abs(2*n-100))/200]},rgb:function(t,e,n){const i=(t%360+360)%360,r=Ue(e/100,0,1),o=Ue(n/100,0,1),s=(1-Math.abs(2*o-1))*r,a=s*(1-Math.abs(i/60%2-1)),l=o-s/2;let p,c,d;return[p,c,d]=i>=0&&i<60?[s,a,0]:i>=60&&i<120?[a,s,0]:i>=120&&i<180?[0,s,a]:i>=180&&i<240?[0,a,s]:i>=240&&i<300?[a,0,s]:[s,0,a],[255*(p+l),255*(c+l),255*(d+l)]}},hsv:{hsl:function(t,e,n){const i=100-Math.abs(n*(200-e)/100-100);return[t,0!==i?e*n/i:0,n*(200-e)/200]},hsv:(t,e,n)=>[t,e,n],rgb:mn},rgb:{hsl:function(t,e,n){const i=Ue(t/255,0,1),r=Ue(e/255,0,1),o=Ue(n/255,0,1),s=Math.max(i,r,o),a=Math.min(i,r,o),l=s-a;let p=0,c=0;const d=(a+s)/2;return 0!==l&&(c=l/(1-Math.abs(s+a-1)),p=i===s?(r-o)/l:r===s?2+(o-i)/l:4+(i-r)/l,p=p/6+(p<0?1:0)),[360*p,100*c,100*d]},hsv:function(t,e,n){const i=Ue(t/255,0,1),r=Ue(e/255,0,1),o=Ue(n/255,0,1),s=Math.max(i,r,o),a=s-Math.min(i,r,o);let l;return l=0===a?0:s===i?((r-o)/a%6+6)%6*60:s===r?60*((o-i)/a+2):60*((i-r)/a+4),[l,100*(0===s?0:a/s),100*s]},rgb:(t,e,n)=>[t,e,n]}};function _n(t,e){return["float"===e?1:"rgb"===t?255:360,"float"===e?1:"rgb"===t?255:100,"float"===e?1:"rgb"===t?255:100]}function wn(t,e,n,i){const r=_n(e,n),o=_n(e,i);return t.map(((t,e)=>t/r[e]*o[e]))}function yn(t,e){return"object"==typeof t&&!a(t)&&(e in t&&"number"==typeof t[e])}class xn{constructor(t,e,n="int"){this.mode=e,this.type=n,this.comps_=function(t,e,n){var i;const r=_n(e,n);return["rgb"===e?Ue(t[0],0,r[0]):Ke(t[0],r[0]),Ue(t[1],0,r[1]),Ue(t[2],0,r[2]),Ue(null!==(i=t[3])&&void 0!==i?i:1,0,1)]}(t,e,n)}static black(t="int"){return new xn([0,0,0],"rgb",t)}static fromObject(t,e="int"){return new xn("a"in t?[t.r,t.g,t.b,t.a]:[t.r,t.g,t.b],"rgb",e)}static toRgbaObject(t,e="int"){return t.toRgbaObject(e)}static isRgbColorObject(t){return yn(t,"r")&&yn(t,"g")&&yn(t,"b")}static isRgbaColorObject(t){return this.isRgbColorObject(t)&&yn(t,"a")}static isColorObject(t){return this.isRgbColorObject(t)}static equals(t,e){if(t.mode!==e.mode)return!1;const n=t.comps_,i=e.comps_;for(let t=0;tt.inputElement))];return this.alphaViews_&&t.push(this.alphaViews_.palette.element,this.alphaViews_.text.inputElement),t}}function Pn(t){return"int"===t?"int":"float"===t?"float":void 0}function En(t){const e=L;return A(t,{alpha:e.optional.boolean,color:e.optional.object({alpha:e.optional.boolean,type:e.optional.custom(Pn)}),expanded:e.optional.boolean,picker:e.optional.custom(tn)})}function Mn(t){return t?.1:1}function Vn(t){var e;return null===(e=t.color)||void 0===e?void 0:e.type}function Sn(t,e){const n=t.match(/^(.+)%$/);return n?Math.min(.01*parseFloat(n[1])*e,e):Math.min(parseFloat(t),e)}const Ln={deg:t=>t,grad:t=>360*t/400,rad:t=>360*t/(2*Math.PI),turn:t=>360*t};function An(t){const e=t.match(/^([0-9.]+?)(deg|grad|rad|turn)$/);if(!e)return parseFloat(t);const n=parseFloat(e[1]);return Ln[e[2]](n)}function Tn(t){const e=t.match(/^rgb\(\s*([0-9A-Fa-f.]+%?)\s*,\s*([0-9A-Fa-f.]+%?)\s*,\s*([0-9A-Fa-f.]+%?)\s*\)$/);if(!e)return null;const n=[Sn(e[1],255),Sn(e[2],255),Sn(e[3],255)];return isNaN(n[0])||isNaN(n[1])||isNaN(n[2])?null:n}function jn(t){return e=>{const n=Tn(e);return n?new xn(n,"rgb",t):null}}function Dn(t){const e=t.match(/^rgba\(\s*([0-9A-Fa-f.]+%?)\s*,\s*([0-9A-Fa-f.]+%?)\s*,\s*([0-9A-Fa-f.]+%?)\s*,\s*([0-9A-Fa-f.]+%?)\s*\)$/);if(!e)return null;const n=[Sn(e[1],255),Sn(e[2],255),Sn(e[3],255),Sn(e[4],1)];return isNaN(n[0])||isNaN(n[1])||isNaN(n[2])||isNaN(n[3])?null:n}function Rn(t){return e=>{const n=Dn(e);return n?new xn(n,"rgb",t):null}}function On(t){const e=t.match(/^hsl\(\s*([0-9A-Fa-f.]+(?:deg|grad|rad|turn)?)\s*,\s*([0-9A-Fa-f.]+%?)\s*,\s*([0-9A-Fa-f.]+%?)\s*\)$/);if(!e)return null;const n=[An(e[1]),Sn(e[2],100),Sn(e[3],100)];return isNaN(n[0])||isNaN(n[1])||isNaN(n[2])?null:n}function Fn(t){return e=>{const n=On(e);return n?new xn(n,"hsl",t):null}}function Nn(t){const e=t.match(/^hsla\(\s*([0-9A-Fa-f.]+(?:deg|grad|rad|turn)?)\s*,\s*([0-9A-Fa-f.]+%?)\s*,\s*([0-9A-Fa-f.]+%?)\s*,\s*([0-9A-Fa-f.]+%?)\s*\)$/);if(!e)return null;const n=[An(e[1]),Sn(e[2],100),Sn(e[3],100),Sn(e[4],1)];return isNaN(n[0])||isNaN(n[1])||isNaN(n[2])||isNaN(n[3])?null:n}function In(t){return e=>{const n=Nn(e);return n?new xn(n,"hsl",t):null}}function Bn(t){const e=t.match(/^#([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/);if(e)return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)];const n=t.match(/^(?:#|0x)([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/);return n?[parseInt(n[1],16),parseInt(n[2],16),parseInt(n[3],16)]:null}function Un(t){const e=t.match(/^#?([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/);if(e)return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16),Ie(parseInt(e[4]+e[4],16),0,255,0,1)];const n=t.match(/^(?:#|0x)?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/);return n?[parseInt(n[1],16),parseInt(n[2],16),parseInt(n[3],16),Ie(parseInt(n[4],16),0,255,0,1)]:null}function Kn(t){const e=t.match(/^\{\s*r\s*:\s*([0-9A-Fa-f.]+%?)\s*,\s*g\s*:\s*([0-9A-Fa-f.]+%?)\s*,\s*b\s*:\s*([0-9A-Fa-f.]+%?)\s*\}$/);if(!e)return null;const n=[parseFloat(e[1]),parseFloat(e[2]),parseFloat(e[3])];return isNaN(n[0])||isNaN(n[1])||isNaN(n[2])?null:n}function Hn(t){return e=>{const n=Kn(e);return n?new xn(n,"rgb",t):null}}function zn(t){const e=t.match(/^\{\s*r\s*:\s*([0-9A-Fa-f.]+%?)\s*,\s*g\s*:\s*([0-9A-Fa-f.]+%?)\s*,\s*b\s*:\s*([0-9A-Fa-f.]+%?)\s*,\s*a\s*:\s*([0-9A-Fa-f.]+%?)\s*\}$/);if(!e)return null;const n=[parseFloat(e[1]),parseFloat(e[2]),parseFloat(e[3]),parseFloat(e[4])];return isNaN(n[0])||isNaN(n[1])||isNaN(n[2])||isNaN(n[3])?null:n}function $n(t){return e=>{const n=zn(e);return n?new xn(n,"rgb",t):null}}const qn=[{parser:Bn,result:{alpha:!1,mode:"rgb",notation:"hex"}},{parser:Un,result:{alpha:!0,mode:"rgb",notation:"hex"}},{parser:Tn,result:{alpha:!1,mode:"rgb",notation:"func"}},{parser:Dn,result:{alpha:!0,mode:"rgb",notation:"func"}},{parser:On,result:{alpha:!1,mode:"hsl",notation:"func"}},{parser:Nn,result:{alpha:!0,mode:"hsl",notation:"func"}},{parser:Kn,result:{alpha:!1,mode:"rgb",notation:"object"}},{parser:zn,result:{alpha:!0,mode:"rgb",notation:"object"}}];function Gn(t,e="int"){const n=function(t){return qn.reduce(((e,{parser:n,result:i})=>e||(n(t)?i:null)),null)}(t);return n?"hex"===n.notation&&"float"!==e?Object.assign(Object.assign({},n),{type:"int"}):"func"===n.notation?Object.assign(Object.assign({},n),{type:e}):null:null}const Yn={int:[function(t){const e=Bn(t);return e?new xn(e,"rgb","int"):null},function(t){const e=Un(t);return e?new xn(e,"rgb","int"):null},jn("int"),Rn("int"),Fn("int"),In("int"),Hn("int"),$n("int")],float:[jn("float"),Rn("float"),Fn("float"),In("float"),Hn("float"),$n("float")]};function Wn(t){const e=Yn[t];return t=>e.reduce(((e,n)=>e||n(t)),null)}function Qn(t){const e=Ue(Math.floor(t),0,255).toString(16);return 1===e.length?`0${e}`:e}function Xn(t,e="#"){return`${e}${fn(t.getComponents("rgb")).map(Qn).join("")}`}function Zn(t,e="#"){const n=t.getComponents("rgb");return`${e}${[n[0],n[1],n[2],255*n[3]].map(Qn).join("")}`}function Jn(t,e){const n=ke("float"===e?2:0);return`rgb(${fn(t.getComponents("rgb",e)).map((t=>n(t))).join(", ")})`}function ti(t){return e=>Jn(e,t)}function ei(t,e){const n=ke(2),i=ke("float"===e?2:0);return`rgba(${t.getComponents("rgb",e).map(((t,e)=>(3===e?n:i)(t))).join(", ")})`}function ni(t){return e=>ei(e,t)}function ii(t,e){const n=ke("float"===e?2:0),i=["r","g","b"];return`{${fn(t.getComponents("rgb",e)).map(((t,e)=>`${i[e]}: ${n(t)}`)).join(", ")}}`}function ri(t){return e=>ii(e,t)}function oi(t,e){const n=ke(2),i=ke("float"===e?2:0),r=["r","g","b","a"];return`{${t.getComponents("rgb",e).map(((t,e)=>`${r[e]}: ${(3===e?n:i)(t)}`)).join(", ")}}`}function si(t){return e=>oi(e,t)}const ai=[{format:{alpha:!1,mode:"rgb",notation:"hex",type:"int"},stringifier:Xn},{format:{alpha:!0,mode:"rgb",notation:"hex",type:"int"},stringifier:Zn},{format:{alpha:!1,mode:"hsl",notation:"func",type:"int"},stringifier:function(t){const e=[ke(0),Ee,Ee];return`hsl(${fn(t.getComponents("hsl")).map(((t,n)=>e[n](t))).join(", ")})`}},{format:{alpha:!0,mode:"hsl",notation:"func",type:"int"},stringifier:function(t){const e=[ke(0),Ee,Ee,ke(2)];return`hsla(${t.getComponents("hsl").map(((t,n)=>e[n](t))).join(", ")})`}},...["int","float"].reduce(((t,e)=>[...t,{format:{alpha:!1,mode:"rgb",notation:"func",type:e},stringifier:ti(e)},{format:{alpha:!0,mode:"rgb",notation:"func",type:e},stringifier:ni(e)},{format:{alpha:!1,mode:"rgb",notation:"object",type:e},stringifier:ri(e)},{format:{alpha:!0,mode:"rgb",notation:"object",type:e},stringifier:si(e)}]),[])];function li(t){return ai.reduce(((e,n)=>{return e||((i=n.format).alpha===(r=t).alpha&&i.mode===r.mode&&i.notation===r.notation&&i.type===r.type?n.stringifier:null);var i,r}),null)}const pi=m("apl");class ci{constructor(t,e){this.onValueChange_=this.onValueChange_.bind(this),this.value=e.value,this.value.emitter.on("change",this.onValueChange_),this.element=t.createElement("div"),this.element.classList.add(pi()),e.viewProps.bindTabIndex(this.element);const n=t.createElement("div");n.classList.add(pi("b")),this.element.appendChild(n);const i=t.createElement("div");i.classList.add(pi("c")),n.appendChild(i),this.colorElem_=i;const r=t.createElement("div");r.classList.add(pi("m")),this.element.appendChild(r),this.markerElem_=r;const o=t.createElement("div");o.classList.add(pi("p")),this.markerElem_.appendChild(o),this.previewElem_=o,this.update_()}update_(){const t=this.value.rawValue,e=t.getComponents("rgb"),n=new xn([e[0],e[1],e[2],0],"rgb"),i=new xn([e[0],e[1],e[2],255],"rgb"),r=["to right",ei(n),ei(i)];this.colorElem_.style.background=`linear-gradient(${r.join(",")})`,this.previewElem_.style.backgroundColor=ei(t);const o=Ie(e[3],0,1,0,100);this.markerElem_.style.left=`${o}%`}onValueChange_(){this.update_()}}class di{constructor(t,e){this.onKeyDown_=this.onKeyDown_.bind(this),this.onKeyUp_=this.onKeyUp_.bind(this),this.onPointerDown_=this.onPointerDown_.bind(this),this.onPointerMove_=this.onPointerMove_.bind(this),this.onPointerUp_=this.onPointerUp_.bind(this),this.value=e.value,this.viewProps=e.viewProps,this.view=new ci(t,{value:this.value,viewProps:this.viewProps}),this.ptHandler_=new Ne(this.view.element),this.ptHandler_.emitter.on("down",this.onPointerDown_),this.ptHandler_.emitter.on("move",this.onPointerMove_),this.ptHandler_.emitter.on("up",this.onPointerUp_),this.view.element.addEventListener("keydown",this.onKeyDown_),this.view.element.addEventListener("keyup",this.onKeyUp_)}handlePointerEvent_(t,e){if(!t.point)return;const n=t.point.x/t.bounds.width,i=this.value.rawValue,[r,o,s]=i.getComponents("hsv");this.value.setRawValue(new xn([r,o,s,n],"hsv"),e)}onPointerDown_(t){this.handlePointerEvent_(t.data,{forceEmit:!1,last:!1})}onPointerMove_(t){this.handlePointerEvent_(t.data,{forceEmit:!1,last:!1})}onPointerUp_(t){this.handlePointerEvent_(t.data,{forceEmit:!0,last:!0})}onKeyDown_(t){const e=je(Mn(!0),Re(t));if(0===e)return;const n=this.value.rawValue,[i,r,o,s]=n.getComponents("hsv");this.value.setRawValue(new xn([i,r,o,s+e],"hsv"),{forceEmit:!1,last:!1})}onKeyUp_(t){0!==je(Mn(!0),Re(t))&&this.value.setRawValue(this.value.rawValue,{forceEmit:!0,last:!0})}}const hi=m("coltxt");class ui{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(hi());const n=t.createElement("div");n.classList.add(hi("m")),this.modeElem_=function(t){const e=t.createElement("select");return e.appendChild([{text:"RGB",value:"rgb"},{text:"HSL",value:"hsl"},{text:"HSV",value:"hsv"}].reduce(((e,n)=>{const i=t.createElement("option");return i.textContent=n.text,i.value=n.value,e.appendChild(i),e}),t.createDocumentFragment())),e}(t),this.modeElem_.classList.add(hi("ms")),n.appendChild(this.modeSelectElement);const i=t.createElement("div");i.classList.add(hi("mm")),i.appendChild(I(t,"dropdown")),n.appendChild(i),this.element.appendChild(n);const r=t.createElement("div");r.classList.add(hi("w")),this.element.appendChild(r),this.textsElem_=r,this.textViews_=e.textViews,this.applyTextViews_(),b(e.colorMode,(t=>{this.modeElem_.value=t}))}get modeSelectElement(){return this.modeElem_}get textViews(){return this.textViews_}set textViews(t){this.textViews_=t,this.applyTextViews_()}applyTextViews_(){K(this.textsElem_);const t=this.element.ownerDocument;this.textViews_.forEach((e=>{const n=t.createElement("div");n.classList.add(hi("c")),n.appendChild(e.element),this.textsElem_.appendChild(n)}))}}function vi(t,e,n){const i=_n(t,e)[n];return new $t({min:0,max:i})}function mi(t,e,n){return new $e(t,{arrayPosition:0===n?"fst":2===n?"lst":"mid",baseStep:Mn(!1),parser:e.parser,props:M.fromObject({draggingScale:"float"===e.colorType?.01:1,formatter:(i=e.colorType,ke("float"===i?2:0))}),value:E(0,{constraint:vi(e.colorMode,e.colorType,n)}),viewProps:e.viewProps});var i}class fi{constructor(t,e){this.onModeSelectChange_=this.onModeSelectChange_.bind(this),this.colorType_=e.colorType,this.parser_=e.parser,this.value=e.value,this.viewProps=e.viewProps,this.colorMode=E(this.value.rawValue.mode),this.ccs_=this.createComponentControllers_(t),this.view=new ui(t,{colorMode:this.colorMode,textViews:[this.ccs_[0].view,this.ccs_[1].view,this.ccs_[2].view]}),this.view.modeSelectElement.addEventListener("change",this.onModeSelectChange_)}createComponentControllers_(t){const e={colorMode:this.colorMode.rawValue,colorType:this.colorType_,parser:this.parser_,viewProps:this.viewProps},n=[mi(t,e,0),mi(t,e,1),mi(t,e,2)];return n.forEach(((t,e)=>{Te({primary:this.value,secondary:t.value,forward:t=>t.rawValue.getComponents(this.colorMode.rawValue,this.colorType_)[e],backward:(t,n)=>{const i=this.colorMode.rawValue,r=t.rawValue.getComponents(i,this.colorType_);return r[e]=n.rawValue,new xn(bn(fn(r),r[3]),i,this.colorType_)}})})),n}onModeSelectChange_(t){this.colorMode.rawValue=t.currentTarget.value,this.ccs_=this.createComponentControllers_(this.view.element.ownerDocument),this.view.textViews=[this.ccs_[0].view,this.ccs_[1].view,this.ccs_[2].view]}}const bi=m("hpl");class gi{constructor(t,e){this.onValueChange_=this.onValueChange_.bind(this),this.value=e.value,this.value.emitter.on("change",this.onValueChange_),this.element=t.createElement("div"),this.element.classList.add(bi()),e.viewProps.bindTabIndex(this.element);const n=t.createElement("div");n.classList.add(bi("c")),this.element.appendChild(n);const i=t.createElement("div");i.classList.add(bi("m")),this.element.appendChild(i),this.markerElem_=i,this.update_()}update_(){const t=this.value.rawValue,[e]=t.getComponents("hsv");this.markerElem_.style.backgroundColor=Jn(new xn([e,100,100],"hsv"));const n=Ie(e,0,360,0,100);this.markerElem_.style.left=`${n}%`}onValueChange_(){this.update_()}}class _i{constructor(t,e){this.onKeyDown_=this.onKeyDown_.bind(this),this.onKeyUp_=this.onKeyUp_.bind(this),this.onPointerDown_=this.onPointerDown_.bind(this),this.onPointerMove_=this.onPointerMove_.bind(this),this.onPointerUp_=this.onPointerUp_.bind(this),this.value=e.value,this.viewProps=e.viewProps,this.view=new gi(t,{value:this.value,viewProps:this.viewProps}),this.ptHandler_=new Ne(this.view.element),this.ptHandler_.emitter.on("down",this.onPointerDown_),this.ptHandler_.emitter.on("move",this.onPointerMove_),this.ptHandler_.emitter.on("up",this.onPointerUp_),this.view.element.addEventListener("keydown",this.onKeyDown_),this.view.element.addEventListener("keyup",this.onKeyUp_)}handlePointerEvent_(t,e){if(!t.point)return;const n=Ie(Ue(t.point.x,0,t.bounds.width),0,t.bounds.width,0,359),i=this.value.rawValue,[,r,o,s]=i.getComponents("hsv");this.value.setRawValue(new xn([n,r,o,s],"hsv"),e)}onPointerDown_(t){this.handlePointerEvent_(t.data,{forceEmit:!1,last:!1})}onPointerMove_(t){this.handlePointerEvent_(t.data,{forceEmit:!1,last:!1})}onPointerUp_(t){this.handlePointerEvent_(t.data,{forceEmit:!0,last:!0})}onKeyDown_(t){const e=je(Mn(!1),Re(t));if(0===e)return;const n=this.value.rawValue,[i,r,o,s]=n.getComponents("hsv");this.value.setRawValue(new xn([i+e,r,o,s],"hsv"),{forceEmit:!1,last:!1})}onKeyUp_(t){0!==je(Mn(!1),Re(t))&&this.value.setRawValue(this.value.rawValue,{forceEmit:!0,last:!0})}}const wi=m("svp");class yi{constructor(t,e){this.onValueChange_=this.onValueChange_.bind(this),this.value=e.value,this.value.emitter.on("change",this.onValueChange_),this.element=t.createElement("div"),this.element.classList.add(wi()),e.viewProps.bindTabIndex(this.element);const n=t.createElement("canvas");n.height=64,n.width=64,n.classList.add(wi("c")),this.element.appendChild(n),this.canvasElement=n;const i=t.createElement("div");i.classList.add(wi("m")),this.element.appendChild(i),this.markerElem_=i,this.update_()}update_(){const t=function(t){const e=t.ownerDocument.defaultView;return e&&"document"in e?t.getContext("2d"):null}(this.canvasElement);if(!t)return;const e=this.value.rawValue.getComponents("hsv"),n=this.canvasElement.width,i=this.canvasElement.height,r=t.getImageData(0,0,n,i),o=r.data;for(let t=0;tt.rawValue.getComponents()[3],backward:(t,e)=>{const n=t.rawValue.getComponents();return n[3]=e.rawValue,new xn(n,t.rawValue.mode)}}),this.textC_=new fi(t,{colorType:e.colorType,parser:ye,value:this.value,viewProps:this.viewProps}),this.view=new kn(t,{alphaViews:this.alphaIcs_?{palette:this.alphaIcs_.palette.view,text:this.alphaIcs_.text.view}:null,hPaletteView:this.hPaletteC_.view,supportsAlpha:e.supportsAlpha,svPaletteView:this.svPaletteC_.view,textView:this.textC_.view})}get textController(){return this.textC_}}const ki=m("colsw");class Pi{constructor(t,e){this.onValueChange_=this.onValueChange_.bind(this),e.value.emitter.on("change",this.onValueChange_),this.value=e.value,this.element=t.createElement("div"),this.element.classList.add(ki()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("div");n.classList.add(ki("sw")),this.element.appendChild(n),this.swatchElem_=n;const i=t.createElement("button");i.classList.add(ki("b")),e.viewProps.bindDisabled(i),this.element.appendChild(i),this.buttonElement=i,this.update_()}update_(){this.swatchElem_.style.backgroundColor=Zn(this.value.rawValue)}onValueChange_(){this.update_()}}class Ei{constructor(t,e){this.value=e.value,this.viewProps=e.viewProps,this.view=new Pi(t,{value:this.value,viewProps:this.viewProps})}}class Mi{constructor(t,e){this.onButtonBlur_=this.onButtonBlur_.bind(this),this.onButtonClick_=this.onButtonClick_.bind(this),this.onPopupChildBlur_=this.onPopupChildBlur_.bind(this),this.onPopupChildKeydown_=this.onPopupChildKeydown_.bind(this),this.value=e.value,this.viewProps=e.viewProps,this.foldable_=Q.create(e.expanded),this.swatchC_=new Ei(t,{value:this.value,viewProps:this.viewProps});const n=this.swatchC_.view.buttonElement;n.addEventListener("blur",this.onButtonBlur_),n.addEventListener("click",this.onButtonClick_),this.textC_=new ee(t,{parser:e.parser,props:M.fromObject({formatter:e.formatter}),value:this.value,viewProps:this.viewProps}),this.view=new vn(t,{foldable:this.foldable_,pickerLayout:e.pickerLayout}),this.view.swatchElement.appendChild(this.swatchC_.view.element),this.view.textElement.appendChild(this.textC_.view.element),this.popC_="popup"===e.pickerLayout?new Zt(t,{viewProps:this.viewProps}):null;const i=new Ci(t,{colorType:e.colorType,supportsAlpha:e.supportsAlpha,value:this.value,viewProps:this.viewProps});i.view.allFocusableElements.forEach((t=>{t.addEventListener("blur",this.onPopupChildBlur_),t.addEventListener("keydown",this.onPopupChildKeydown_)})),this.pickerC_=i,this.popC_?(this.view.element.appendChild(this.popC_.view.element),this.popC_.view.element.appendChild(i.view.element),Te({primary:this.foldable_.value("expanded"),secondary:this.popC_.shows,forward:t=>t.rawValue,backward:(t,e)=>e.rawValue})):this.view.pickerElement&&(this.view.pickerElement.appendChild(this.pickerC_.view.element),Z(this.foldable_,this.view.pickerElement))}get textController(){return this.textC_}onButtonBlur_(t){if(!this.popC_)return;const e=t.relatedTarget;e&&this.view.element.contains(e)||(this.popC_.shows.rawValue=!1)}onButtonClick_(){this.foldable_.set("expanded",!this.foldable_.get("expanded")),this.foldable_.get("expanded")&&this.pickerC_.view.allFocusableElements[0].focus()}onPopupChildBlur_(t){if(!this.popC_)return;const e=this.popC_.view.element,n=H(t);n&&e.contains(n)||n&&n===this.swatchC_.view.buttonElement&&!O(e.ownerDocument)||(this.popC_.shows.rawValue=!1)}onPopupChildKeydown_(t){this.popC_?"Escape"===t.key&&(this.popC_.shows.rawValue=!1):this.view.pickerElement&&"Escape"===t.key&&this.swatchC_.view.buttonElement.focus()}}function Vi(t){return fn(t.getComponents("rgb")).reduce(((t,e)=>t<<8|255&Math.floor(e)),0)}function Si(t){return t.getComponents("rgb").reduce(((t,e,n)=>t<<8|255&Math.floor(3===n?255*e:e)),0)>>>0}function Li(t){return"number"!=typeof t?xn.black():new xn([(e=t)>>16&255,e>>8&255,255&e],"rgb");var e}function Ai(t){return"number"!=typeof t?xn.black():new xn([(e=t)>>24&255,e>>16&255,e>>8&255,Ie(255&e,0,255,0,1)],"rgb");var e}function Ti(t){var e;return!(!(null==t?void 0:t.alpha)&&!(null===(e=null==t?void 0:t.color)||void 0===e?void 0:e.alpha))}function ji(t){return t?t=>Zn(t,"0x"):t=>Xn(t,"0x")}const Di={id:"input-color-number",type:"input",accept:(t,e)=>{if("number"!=typeof t)return null;if(!function(t){return"color"in t||"view"in t&&"color"===t.view}(e))return null;const n=En(e);return n?{initialValue:t,params:n}:null},binding:{reader:t=>Ti(t.params)?Ai:Li,equals:xn.equals,writer:t=>function(t){const e=t?Si:Vi;return(t,n)=>{Ze(t,e(n))}}(Ti(t.params))},controller:t=>{const e=Ti(t.params),n="expanded"in t.params?t.params.expanded:void 0,i="picker"in t.params?t.params.picker:void 0;return new Mi(t.document,{colorType:"int",expanded:null!=n&&n,formatter:ji(e),parser:Wn("int"),pickerLayout:null!=i?i:"popup",supportsAlpha:e,value:t.value,viewProps:t.viewProps})}};function Ri(t){return e=>function(t,e){return xn.isColorObject(t)?xn.fromObject(t,e):xn.black(e)}(e,t)}function Oi(t,e){return n=>t?oi(n,e):ii(n,e)}const Fi={id:"input-color-object",type:"input",accept:(t,e)=>{if(!xn.isColorObject(t))return null;const n=En(e);return n?{initialValue:t,params:n}:null},binding:{reader:t=>Ri(Vn(t.params)),equals:xn.equals,writer:t=>{return e=xn.isRgbaColorObject(t.initialValue),n=Vn(t.params),(t,i)=>{e?function(t,e,n){const i=e.toRgbaObject(n);t.writeProperty("r",i.r),t.writeProperty("g",i.g),t.writeProperty("b",i.b),t.writeProperty("a",i.a)}(t,i,n):function(t,e,n){const i=e.toRgbaObject(n);t.writeProperty("r",i.r),t.writeProperty("g",i.g),t.writeProperty("b",i.b)}(t,i,n)};var e,n}},controller:t=>{var e;const n=xn.isRgbaColorObject(t.initialValue),i="expanded"in t.params?t.params.expanded:void 0,r="picker"in t.params?t.params.picker:void 0,o=null!==(e=Vn(t.params))&&void 0!==e?e:"int";return new Mi(t.document,{colorType:o,expanded:null!=i&&i,formatter:Oi(n,o),parser:Wn(o),pickerLayout:null!=r?r:"popup",supportsAlpha:n,value:t.value,viewProps:t.viewProps})}},Ni={id:"input-color-string",type:"input",accept:(t,e)=>{if("string"!=typeof t)return null;if("view"in e&&"text"===e.view)return null;const n=Gn(t,Vn(e));if(!n)return null;if(!li(n))return null;const i=En(e);return i?{initialValue:t,params:i}:null},binding:{reader:t=>{var e;return function(t){const e=Yn[t];return n=>{if("string"!=typeof n)return xn.black(t);const i=e.reduce(((t,e)=>t||e(n)),null);return null!=i?i:xn.black(t)}}(null!==(e=Vn(t.params))&&void 0!==e?e:"int")},equals:xn.equals,writer:t=>{const e=Gn(t.initialValue,Vn(t.params));if(!e)throw c.shouldNeverHappen();const n=function(t){const e=li(t);return e?(t,n)=>{Ze(t,e(n))}:null}(e);if(!n)throw c.notBindable();return n}},controller:t=>{const e=Gn(t.initialValue,Vn(t.params));if(!e)throw c.shouldNeverHappen();const n=li(e);if(!n)throw c.shouldNeverHappen();const i="expanded"in t.params?t.params.expanded:void 0,r="picker"in t.params?t.params.picker:void 0;return new Mi(t.document,{colorType:e.type,expanded:null!=i&&i,formatter:n,parser:Wn(e.type),pickerLayout:null!=r?r:"popup",supportsAlpha:e.alpha,value:t.value,viewProps:t.viewProps})}};class Ii{constructor(t){this.components=t.components,this.asm_=t.assembly}constrain(t){const e=this.asm_.toComponents(t).map(((t,e)=>{var n,i;return null!==(i=null===(n=this.components[e])||void 0===n?void 0:n.constrain(t))&&void 0!==i?i:t}));return this.asm_.fromComponents(e)}}const Bi=m("pndtxt");class Ui{constructor(t,e){this.textViews=e.textViews,this.element=t.createElement("div"),this.element.classList.add(Bi()),this.textViews.forEach((e=>{const n=t.createElement("div");n.classList.add(Bi("a")),n.appendChild(e.element),this.element.appendChild(n)}))}}class Ki{constructor(t,e){this.value=e.value,this.viewProps=e.viewProps,this.acs_=e.axes.map(((n,i)=>function(t,e,n){return new $e(t,{arrayPosition:0===n?"fst":n===e.axes.length-1?"lst":"mid",baseStep:e.axes[n].baseStep,parser:e.parser,props:e.axes[n].textProps,value:E(0,{constraint:e.axes[n].constraint}),viewProps:e.viewProps})}(t,e,i))),this.acs_.forEach(((t,n)=>{Te({primary:this.value,secondary:t.value,forward:t=>e.assembly.toComponents(t.rawValue)[n],backward:(t,i)=>{const r=e.assembly.toComponents(t.rawValue);return r[n]=i.rawValue,e.assembly.fromComponents(r)}})})),this.view=new Ui(t,{textViews:this.acs_.map((t=>t.view))})}}function Hi(t,e){return"step"in t&&!a(t.step)?new qt(t.step,e):null}function zi(t){return"max"in t&&!a(t.max)||"min"in t&&!a(t.min)?new $t({max:t.max,min:t.min}):null}function $i(t){const[e,n]=function(t){const e=t?Ht(t,$t):null;return e?[e.minValue,e.maxValue]:[void 0,void 0]}(t);return[null!=e?e:0,null!=n?n:100]}const qi={id:"input-number",type:"input",accept:(t,e)=>{if("number"!=typeof t)return null;const n=L,i=A(e,{format:n.optional.function,max:n.optional.number,min:n.optional.number,options:n.optional.custom(Je),step:n.optional.number});return i?{initialValue:t,params:i}:null},binding:{reader:t=>xe,constraint:t=>function(t,e){const n=[],i=Hi(t,e);i&&n.push(i);const r=zi(t);r&&n.push(r);const o=rn(t.options);return o&&n.push(o),new Kt(n)}(t.params,t.initialValue),writer:t=>Ze},controller:t=>{var e,n;const i=t.value,r=t.constraint;if(r&&Ht(r,zt))return new Wt(t.document,{props:M.fromObject({options:null!==(e=on(r))&&void 0!==e?e:[]}),value:i,viewProps:t.viewProps});const o=null!==(n="format"in t.params?t.params.format:void 0)&&void 0!==n?n:ke(sn(r,i.rawValue));if(r&&Ht(r,$t)){const[e,n]=$i(r);return new Xe(t.document,{baseStep:an(r),parser:ye,sliderProps:M.fromObject({maxValue:n,minValue:e}),textProps:M.fromObject({draggingScale:ln(r,i.rawValue),formatter:o}),value:i,viewProps:t.viewProps})}return new $e(t.document,{baseStep:an(r),parser:ye,props:M.fromObject({draggingScale:ln(r,i.rawValue),formatter:o}),value:i,viewProps:t.viewProps})}};class Gi{constructor(t=0,e=0){this.x=t,this.y=e}getComponents(){return[this.x,this.y]}static isObject(t){if(a(t))return!1;return"number"==typeof t.x&&"number"==typeof t.y}static equals(t,e){return t.x===e.x&&t.y===e.y}toObject(){return{x:this.x,y:this.y}}}const Yi={toComponents:t=>t.getComponents(),fromComponents:t=>new Gi(...t)},Wi=m("p2d");class Qi{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(Wi()),e.viewProps.bindClassModifiers(this.element),b(e.expanded,_(this.element,Wi(void 0,"expanded")));const n=t.createElement("div");n.classList.add(Wi("h")),this.element.appendChild(n);const i=t.createElement("button");i.classList.add(Wi("b")),i.appendChild(I(t,"p2dpad")),e.viewProps.bindDisabled(i),n.appendChild(i),this.buttonElement=i;const r=t.createElement("div");if(r.classList.add(Wi("t")),n.appendChild(r),this.textElement=r,"inline"===e.pickerLayout){const e=t.createElement("div");e.classList.add(Wi("p")),this.element.appendChild(e),this.pickerElement=e}else this.pickerElement=null}}const Xi=m("p2dp");class Zi{constructor(t,e){this.onFoldableChange_=this.onFoldableChange_.bind(this),this.onValueChange_=this.onValueChange_.bind(this),this.invertsY_=e.invertsY,this.maxValue_=e.maxValue,this.element=t.createElement("div"),this.element.classList.add(Xi()),"popup"===e.layout&&this.element.classList.add(Xi(void 0,"p"));const n=t.createElement("div");n.classList.add(Xi("p")),e.viewProps.bindTabIndex(n),this.element.appendChild(n),this.padElement=n;const i=t.createElementNS(R,"svg");i.classList.add(Xi("g")),this.padElement.appendChild(i),this.svgElem_=i;const r=t.createElementNS(R,"line");r.classList.add(Xi("ax")),r.setAttributeNS(null,"x1","0"),r.setAttributeNS(null,"y1","50%"),r.setAttributeNS(null,"x2","100%"),r.setAttributeNS(null,"y2","50%"),this.svgElem_.appendChild(r);const o=t.createElementNS(R,"line");o.classList.add(Xi("ax")),o.setAttributeNS(null,"x1","50%"),o.setAttributeNS(null,"y1","0"),o.setAttributeNS(null,"x2","50%"),o.setAttributeNS(null,"y2","100%"),this.svgElem_.appendChild(o);const s=t.createElementNS(R,"line");s.classList.add(Xi("l")),s.setAttributeNS(null,"x1","50%"),s.setAttributeNS(null,"y1","50%"),this.svgElem_.appendChild(s),this.lineElem_=s;const a=t.createElement("div");a.classList.add(Xi("m")),this.padElement.appendChild(a),this.markerElem_=a,e.value.emitter.on("change",this.onValueChange_),this.value=e.value,this.update_()}get allFocusableElements(){return[this.padElement]}update_(){const[t,e]=this.value.rawValue.getComponents(),n=this.maxValue_,i=Ie(t,-n,+n,0,100),r=Ie(e,-n,+n,0,100),o=this.invertsY_?100-r:r;this.lineElem_.setAttributeNS(null,"x2",`${i}%`),this.lineElem_.setAttributeNS(null,"y2",`${o}%`),this.markerElem_.style.left=`${i}%`,this.markerElem_.style.top=`${o}%`}onValueChange_(){this.update_()}onFoldableChange_(){this.update_()}}function Ji(t,e,n){return[je(e[0],Re(t)),je(e[1],De(t))*(n?1:-1)]}class tr{constructor(t,e){this.onPadKeyDown_=this.onPadKeyDown_.bind(this),this.onPadKeyUp_=this.onPadKeyUp_.bind(this),this.onPointerDown_=this.onPointerDown_.bind(this),this.onPointerMove_=this.onPointerMove_.bind(this),this.onPointerUp_=this.onPointerUp_.bind(this),this.value=e.value,this.viewProps=e.viewProps,this.baseSteps_=e.baseSteps,this.maxValue_=e.maxValue,this.invertsY_=e.invertsY,this.view=new Zi(t,{invertsY:this.invertsY_,layout:e.layout,maxValue:this.maxValue_,value:this.value,viewProps:this.viewProps}),this.ptHandler_=new Ne(this.view.padElement),this.ptHandler_.emitter.on("down",this.onPointerDown_),this.ptHandler_.emitter.on("move",this.onPointerMove_),this.ptHandler_.emitter.on("up",this.onPointerUp_),this.view.padElement.addEventListener("keydown",this.onPadKeyDown_),this.view.padElement.addEventListener("keyup",this.onPadKeyUp_)}handlePointerEvent_(t,e){if(!t.point)return;const n=this.maxValue_,i=Ie(t.point.x,0,t.bounds.width,-n,+n),r=Ie(this.invertsY_?t.bounds.height-t.point.y:t.point.y,0,t.bounds.height,-n,+n);this.value.setRawValue(new Gi(i,r),e)}onPointerDown_(t){this.handlePointerEvent_(t.data,{forceEmit:!1,last:!1})}onPointerMove_(t){this.handlePointerEvent_(t.data,{forceEmit:!1,last:!1})}onPointerUp_(t){this.handlePointerEvent_(t.data,{forceEmit:!0,last:!0})}onPadKeyDown_(t){Oe(t.key)&&t.preventDefault();const[e,n]=Ji(t,this.baseSteps_,this.invertsY_);0===e&&0===n||this.value.setRawValue(new Gi(this.value.rawValue.x+e,this.value.rawValue.y+n),{forceEmit:!1,last:!1})}onPadKeyUp_(t){const[e,n]=Ji(t,this.baseSteps_,this.invertsY_);0===e&&0===n||this.value.setRawValue(this.value.rawValue,{forceEmit:!0,last:!0})}}class er{constructor(t,e){var n,i;this.onPopupChildBlur_=this.onPopupChildBlur_.bind(this),this.onPopupChildKeydown_=this.onPopupChildKeydown_.bind(this),this.onPadButtonBlur_=this.onPadButtonBlur_.bind(this),this.onPadButtonClick_=this.onPadButtonClick_.bind(this),this.value=e.value,this.viewProps=e.viewProps,this.foldable_=Q.create(e.expanded),this.popC_="popup"===e.pickerLayout?new Zt(t,{viewProps:this.viewProps}):null;const r=new tr(t,{baseSteps:[e.axes[0].baseStep,e.axes[1].baseStep],invertsY:e.invertsY,layout:e.pickerLayout,maxValue:e.maxValue,value:this.value,viewProps:this.viewProps});r.view.allFocusableElements.forEach((t=>{t.addEventListener("blur",this.onPopupChildBlur_),t.addEventListener("keydown",this.onPopupChildKeydown_)})),this.pickerC_=r,this.textC_=new Ki(t,{assembly:Yi,axes:e.axes,parser:e.parser,value:this.value,viewProps:this.viewProps}),this.view=new Qi(t,{expanded:this.foldable_.value("expanded"),pickerLayout:e.pickerLayout,viewProps:this.viewProps}),this.view.textElement.appendChild(this.textC_.view.element),null===(n=this.view.buttonElement)||void 0===n||n.addEventListener("blur",this.onPadButtonBlur_),null===(i=this.view.buttonElement)||void 0===i||i.addEventListener("click",this.onPadButtonClick_),this.popC_?(this.view.element.appendChild(this.popC_.view.element),this.popC_.view.element.appendChild(this.pickerC_.view.element),Te({primary:this.foldable_.value("expanded"),secondary:this.popC_.shows,forward:t=>t.rawValue,backward:(t,e)=>e.rawValue})):this.view.pickerElement&&(this.view.pickerElement.appendChild(this.pickerC_.view.element),Z(this.foldable_,this.view.pickerElement))}onPadButtonBlur_(t){if(!this.popC_)return;const e=t.relatedTarget;e&&this.view.element.contains(e)||(this.popC_.shows.rawValue=!1)}onPadButtonClick_(){this.foldable_.set("expanded",!this.foldable_.get("expanded")),this.foldable_.get("expanded")&&this.pickerC_.view.allFocusableElements[0].focus()}onPopupChildBlur_(t){if(!this.popC_)return;const e=this.popC_.view.element,n=H(t);n&&e.contains(n)||n&&n===this.view.buttonElement&&!O(e.ownerDocument)||(this.popC_.shows.rawValue=!1)}onPopupChildKeydown_(t){this.popC_?"Escape"===t.key&&(this.popC_.shows.rawValue=!1):this.view.pickerElement&&"Escape"===t.key&&this.view.buttonElement.focus()}}function nr(t){return Gi.isObject(t)?new Gi(t.x,t.y):new Gi}function ir(t,e){t.writeProperty("x",e.x),t.writeProperty("y",e.y)}function rr(t,e){if(!t)return;const n=[],i=Hi(t,e);i&&n.push(i);const r=zi(t);return r&&n.push(r),new Kt(n)}function or(t,e){var n,i;const r=t&&Ht(t,$t);if(r)return Math.max(Math.abs(null!==(n=r.minValue)&&void 0!==n?n:0),Math.abs(null!==(i=r.maxValue)&&void 0!==i?i:0));const o=an(t);return Math.max(10*Math.abs(o),10*Math.abs(e))}function sr(t,e){const n=e instanceof Ii?e.components[1]:void 0,i=or(e instanceof Ii?e.components[0]:void 0,t.x),r=or(n,t.y);return Math.max(i,r)}function ar(t,e){return{baseStep:an(e),constraint:e,textProps:M.fromObject({draggingScale:ln(e,t),formatter:ke(sn(e,t))})}}function lr(t){if(!("y"in t))return!1;const e=t.y;return!!e&&("inverted"in e&&!!e.inverted)}const pr={id:"input-point2d",type:"input",accept:(t,e)=>{if(!Gi.isObject(t))return null;const n=L,i=A(e,{expanded:n.optional.boolean,picker:n.optional.custom(tn),x:n.optional.custom(en),y:n.optional.object({inverted:n.optional.boolean,max:n.optional.number,min:n.optional.number,step:n.optional.number})});return i?{initialValue:t,params:i}:null},binding:{reader:t=>nr,constraint:t=>{return new Ii({assembly:Yi,components:[rr("x"in(e=t.params)?e.x:void 0,(n=t.initialValue).x),rr("y"in e?e.y:void 0,n.y)]});var e,n},equals:Gi.equals,writer:t=>ir},controller:t=>{const e=t.document,n=t.value,i=t.constraint;if(!(i instanceof Ii))throw c.shouldNeverHappen();const r="expanded"in t.params?t.params.expanded:void 0,o="picker"in t.params?t.params.picker:void 0;return new er(e,{axes:[ar(n.rawValue.x,i.components[0]),ar(n.rawValue.y,i.components[1])],expanded:null!=r&&r,invertsY:lr(t.params),maxValue:sr(n.rawValue,i),parser:ye,pickerLayout:null!=o?o:"popup",value:n,viewProps:t.viewProps})}};class cr{constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}getComponents(){return[this.x,this.y,this.z]}static isObject(t){if(a(t))return!1;return"number"==typeof t.x&&"number"==typeof t.y&&"number"==typeof t.z}static equals(t,e){return t.x===e.x&&t.y===e.y&&t.z===e.z}toObject(){return{x:this.x,y:this.y,z:this.z}}}const dr={toComponents:t=>t.getComponents(),fromComponents:t=>new cr(...t)};function hr(t){return cr.isObject(t)?new cr(t.x,t.y,t.z):new cr}function ur(t,e){t.writeProperty("x",e.x),t.writeProperty("y",e.y),t.writeProperty("z",e.z)}function vr(t,e){return{baseStep:an(e),constraint:e,textProps:M.fromObject({draggingScale:ln(e,t),formatter:ke(sn(e,t))})}}const mr={id:"input-point3d",type:"input",accept:(t,e)=>{if(!cr.isObject(t))return null;const n=L,i=A(e,{x:n.optional.custom(en),y:n.optional.custom(en),z:n.optional.custom(en)});return i?{initialValue:t,params:i}:null},binding:{reader:t=>hr,constraint:t=>{return new Ii({assembly:dr,components:[rr("x"in(e=t.params)?e.x:void 0,(n=t.initialValue).x),rr("y"in e?e.y:void 0,n.y),rr("z"in e?e.z:void 0,n.z)]});var e,n},equals:cr.equals,writer:t=>ur},controller:t=>{const e=t.value,n=t.constraint;if(!(n instanceof Ii))throw c.shouldNeverHappen();return new Ki(t.document,{assembly:dr,axes:[vr(e.rawValue.x,n.components[0]),vr(e.rawValue.y,n.components[1]),vr(e.rawValue.z,n.components[2])],parser:ye,value:e,viewProps:t.viewProps})}};class fr{constructor(t=0,e=0,n=0,i=0){this.x=t,this.y=e,this.z=n,this.w=i}getComponents(){return[this.x,this.y,this.z,this.w]}static isObject(t){if(a(t))return!1;return"number"==typeof t.x&&"number"==typeof t.y&&"number"==typeof t.z&&"number"==typeof t.w}static equals(t,e){return t.x===e.x&&t.y===e.y&&t.z===e.z&&t.w===e.w}toObject(){return{x:this.x,y:this.y,z:this.z,w:this.w}}}const br={toComponents:t=>t.getComponents(),fromComponents:t=>new fr(...t)};function gr(t){return fr.isObject(t)?new fr(t.x,t.y,t.z,t.w):new fr}function _r(t,e){t.writeProperty("x",e.x),t.writeProperty("y",e.y),t.writeProperty("z",e.z),t.writeProperty("w",e.w)}const wr={id:"input-point4d",type:"input",accept:(t,e)=>{if(!fr.isObject(t))return null;const n=L,i=A(e,{x:n.optional.custom(en),y:n.optional.custom(en),z:n.optional.custom(en),w:n.optional.custom(en)});return i?{initialValue:t,params:i}:null},binding:{reader:t=>gr,constraint:t=>{return new Ii({assembly:br,components:[rr("x"in(e=t.params)?e.x:void 0,(n=t.initialValue).x),rr("y"in e?e.y:void 0,n.y),rr("z"in e?e.z:void 0,n.z),rr("w"in e?e.w:void 0,n.w)]});var e,n},equals:fr.equals,writer:t=>_r},controller:t=>{const e=t.value,n=t.constraint;if(!(n instanceof Ii))throw c.shouldNeverHappen();return new Ki(t.document,{assembly:br,axes:e.rawValue.getComponents().map(((t,e)=>{return i=t,{baseStep:an(r=n.components[e]),constraint:r,textProps:M.fromObject({draggingScale:ln(r,i),formatter:ke(sn(r,i))})};var i,r})),parser:ye,value:e,viewProps:t.viewProps})}};const yr={id:"input-string",type:"input",accept:(t,e)=>{if("string"!=typeof t)return null;const n=A(e,{options:L.optional.custom(Je)});return n?{initialValue:t,params:n}:null},binding:{reader:t=>Me,constraint:t=>function(t){const e=[],n=rn(t.options);return n&&e.push(n),new Kt(e)}(t.params),writer:t=>Ze},controller:t=>{var e;const n=t.document,i=t.value,r=t.constraint;return r&&Ht(r,zt)?new Wt(n,{props:M.fromObject({options:null!==(e=on(r))&&void 0!==e?e:[]}),value:i,viewProps:t.viewProps}):new ee(n,{parser:t=>t,props:M.fromObject({formatter:Ve}),value:i,viewProps:t.viewProps})}},xr={defaultInterval:200,defaultLineCount:3},Cr=m("mll");class kr{constructor(t,e){this.onValueUpdate_=this.onValueUpdate_.bind(this),this.formatter_=e.formatter,this.element=t.createElement("div"),this.element.classList.add(Cr()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("textarea");n.classList.add(Cr("i")),n.style.height=`calc(var(--bld-us) * ${e.lineCount})`,n.readOnly=!0,e.viewProps.bindDisabled(n),this.element.appendChild(n),this.textareaElem_=n,e.value.emitter.on("change",this.onValueUpdate_),this.value=e.value,this.update_()}update_(){const t=this.textareaElem_,e=t.scrollTop===t.scrollHeight-t.clientHeight,n=[];this.value.rawValue.forEach((t=>{void 0!==t&&n.push(this.formatter_(t))})),t.textContent=n.join("\n"),e&&(t.scrollTop=t.scrollHeight)}onValueUpdate_(){this.update_()}}class Pr{constructor(t,e){this.value=e.value,this.viewProps=e.viewProps,this.view=new kr(t,{formatter:e.formatter,lineCount:e.lineCount,value:this.value,viewProps:this.viewProps})}}const Er=m("sgl");class Mr{constructor(t,e){this.onValueUpdate_=this.onValueUpdate_.bind(this),this.formatter_=e.formatter,this.element=t.createElement("div"),this.element.classList.add(Er()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("input");n.classList.add(Er("i")),n.readOnly=!0,n.type="text",e.viewProps.bindDisabled(n),this.element.appendChild(n),this.inputElement=n,e.value.emitter.on("change",this.onValueUpdate_),this.value=e.value,this.update_()}update_(){const t=this.value.rawValue,e=t[t.length-1];this.inputElement.value=void 0!==e?this.formatter_(e):""}onValueUpdate_(){this.update_()}}class Vr{constructor(t,e){this.value=e.value,this.viewProps=e.viewProps,this.view=new Mr(t,{formatter:e.formatter,value:this.value,viewProps:this.viewProps})}}const Sr={id:"monitor-bool",type:"monitor",accept:(t,e)=>{if("boolean"!=typeof t)return null;const n=A(e,{lineCount:L.optional.number});return n?{initialValue:t,params:n}:null},binding:{reader:t=>ne},controller:t=>{var e;return 1===t.value.rawValue.length?new Vr(t.document,{formatter:ie,value:t.value,viewProps:t.viewProps}):new Pr(t.document,{formatter:ie,lineCount:null!==(e=t.params.lineCount)&&void 0!==e?e:xr.defaultLineCount,value:t.value,viewProps:t.viewProps})}},Lr=m("grl");class Ar{constructor(t,e){this.onCursorChange_=this.onCursorChange_.bind(this),this.onValueUpdate_=this.onValueUpdate_.bind(this),this.element=t.createElement("div"),this.element.classList.add(Lr()),e.viewProps.bindClassModifiers(this.element),this.formatter_=e.formatter,this.props_=e.props,this.cursor_=e.cursor,this.cursor_.emitter.on("change",this.onCursorChange_);const n=t.createElementNS(R,"svg");n.classList.add(Lr("g")),n.style.height=`calc(var(--bld-us) * ${e.lineCount})`,this.element.appendChild(n),this.svgElem_=n;const i=t.createElementNS(R,"polyline");this.svgElem_.appendChild(i),this.lineElem_=i;const r=t.createElement("div");r.classList.add(Lr("t"),m("tt")()),this.element.appendChild(r),this.tooltipElem_=r,e.value.emitter.on("change",this.onValueUpdate_),this.value=e.value,this.update_()}get graphElement(){return this.svgElem_}update_(){const t=this.svgElem_.getBoundingClientRect(),e=this.value.rawValue.length-1,n=this.props_.get("minValue"),i=this.props_.get("maxValue"),r=[];this.value.rawValue.forEach(((o,s)=>{if(void 0===o)return;const a=Ie(s,0,e,0,t.width),l=Ie(o,n,i,t.height,0);r.push([a,l].join(","))})),this.lineElem_.setAttributeNS(null,"points",r.join(" "));const o=this.tooltipElem_,s=this.value.rawValue[this.cursor_.rawValue];if(void 0===s)return void o.classList.remove(Lr("t","a"));const a=Ie(this.cursor_.rawValue,0,e,0,t.width),l=Ie(s,n,i,t.height,0);o.style.left=`${a}px`,o.style.top=`${l}px`,o.textContent=`${this.formatter_(s)}`,o.classList.contains(Lr("t","a"))||(o.classList.add(Lr("t","a"),Lr("t","in")),o.classList.remove(Lr("t","in")))}onValueUpdate_(){this.update_()}onCursorChange_(){this.update_()}}class Tr{constructor(t,e){if(this.onGraphMouseMove_=this.onGraphMouseMove_.bind(this),this.onGraphMouseLeave_=this.onGraphMouseLeave_.bind(this),this.onGraphPointerDown_=this.onGraphPointerDown_.bind(this),this.onGraphPointerMove_=this.onGraphPointerMove_.bind(this),this.onGraphPointerUp_=this.onGraphPointerUp_.bind(this),this.props_=e.props,this.value=e.value,this.viewProps=e.viewProps,this.cursor_=E(-1),this.view=new Ar(t,{cursor:this.cursor_,formatter:e.formatter,lineCount:e.lineCount,props:this.props_,value:this.value,viewProps:this.viewProps}),O(t)){const t=new Ne(this.view.element);t.emitter.on("down",this.onGraphPointerDown_),t.emitter.on("move",this.onGraphPointerMove_),t.emitter.on("up",this.onGraphPointerUp_)}else this.view.element.addEventListener("mousemove",this.onGraphMouseMove_),this.view.element.addEventListener("mouseleave",this.onGraphMouseLeave_)}onGraphMouseLeave_(){this.cursor_.rawValue=-1}onGraphMouseMove_(t){const e=this.view.element.getBoundingClientRect();this.cursor_.rawValue=Math.floor(Ie(t.offsetX,0,e.width,0,this.value.rawValue.length))}onGraphPointerDown_(t){this.onGraphPointerMove_(t)}onGraphPointerMove_(t){this.cursor_.rawValue=t.data.point?Math.floor(Ie(t.data.point.x,0,t.data.bounds.width,0,this.value.rawValue.length)):-1}onGraphPointerUp_(){this.cursor_.rawValue=-1}}function jr(t){return"format"in t&&!a(t.format)?t.format:ke(2)}function Dr(t){return"view"in t&&"graph"===t.view}const Rr={id:"monitor-number",type:"monitor",accept:(t,e)=>{if("number"!=typeof t)return null;const n=A(e,{format:L.optional.function,lineCount:L.optional.number,max:L.optional.number,min:L.optional.number,view:L.optional.string});return n?{initialValue:t,params:n}:null},binding:{defaultBufferSize:t=>Dr(t)?64:1,reader:t=>xe},controller:t=>Dr(t.params)?function(t){var e,n,i;return new Tr(t.document,{formatter:jr(t.params),lineCount:null!==(e=t.params.lineCount)&&void 0!==e?e:xr.defaultLineCount,props:M.fromObject({maxValue:null!==(n="max"in t.params?t.params.max:null)&&void 0!==n?n:100,minValue:null!==(i="min"in t.params?t.params.min:null)&&void 0!==i?i:0}),value:t.value,viewProps:t.viewProps})}(t):function(t){var e;return 1===t.value.rawValue.length?new Vr(t.document,{formatter:jr(t.params),value:t.value,viewProps:t.viewProps}):new Pr(t.document,{formatter:jr(t.params),lineCount:null!==(e=t.params.lineCount)&&void 0!==e?e:xr.defaultLineCount,value:t.value,viewProps:t.viewProps})}(t)},Or={id:"monitor-string",type:"monitor",accept:(t,e)=>{if("string"!=typeof t)return null;const n=A(e,{lineCount:L.optional.number,multiline:L.optional.boolean});return n?{initialValue:t,params:n}:null},binding:{reader:t=>Me},controller:t=>{var e;const n=t.value;return n.rawValue.length>1||"multiline"in t.params&&t.params.multiline?new Pr(t.document,{formatter:Ve,lineCount:null!==(e=t.params.lineCount)&&void 0!==e?e:xr.defaultLineCount,value:n,viewProps:t.viewProps}):new Vr(t.document,{formatter:Ve,value:n,viewProps:t.viewProps})}};class Fr{constructor(t){this.onValueChange_=this.onValueChange_.bind(this),this.reader=t.reader,this.writer=t.writer,this.emitter=new u,this.value=t.value,this.value.emitter.on("change",this.onValueChange_),this.target=t.target,this.read()}read(){const t=this.target.read();void 0!==t&&(this.value.rawValue=this.reader(t))}write_(t){this.writer(this.target,t)}onValueChange_(t){this.write_(t.rawValue),this.emitter.emit("change",{options:t.options,rawValue:t.rawValue,sender:this})}}class Nr{constructor(t){this.onTick_=this.onTick_.bind(this),this.reader_=t.reader,this.target=t.target,this.emitter=new u,this.value=t.value,this.ticker=t.ticker,this.ticker.emitter.on("tick",this.onTick_),this.read()}dispose(){this.ticker.dispose()}read(){const t=this.target.read();if(void 0===t)return;const e=this.value.rawValue,n=this.reader_(t);this.value.rawValue=function(t,e){const n=[...Ae(t),e];return n.length>t.length?n.splice(0,n.length-t.length):Se(n,t.length),n}(e,n),this.emitter.emit("update",{rawValue:n,sender:this})}onTick_(t){this.read()}}function Ir(t,e){return 0===e?new Bt:new Ut(t,null!=e?e:xr.defaultInterval)}class Br{constructor(){this.pluginsMap_={blades:[],inputs:[],monitors:[]}}getAll(){return[...this.pluginsMap_.blades,...this.pluginsMap_.inputs,...this.pluginsMap_.monitors]}register(t){"blade"===t.type?this.pluginsMap_.blades.unshift(t):"input"===t.type?this.pluginsMap_.inputs.unshift(t):"monitor"===t.type&&this.pluginsMap_.monitors.unshift(t)}createInput(t,e,n){if(a(e.read()))throw new c({context:{key:e.key},type:"nomatchingcontroller"});const i=this.pluginsMap_.inputs.reduce(((i,r)=>null!=i?i:function(t,e){const n=t.accept(e.target.read(),e.params);if(a(n))return null;const i=L,r={target:e.target,initialValue:n.initialValue,params:n.params},o=t.binding.reader(r),s=t.binding.constraint?t.binding.constraint(r):void 0,l=E(o(n.initialValue),{constraint:s,equals:t.binding.equals}),p=new Fr({reader:o,target:e.target,value:l,writer:t.binding.writer(r)}),c=i.optional.boolean(e.params.disabled).value,d=i.optional.boolean(e.params.hidden).value,h=t.controller({constraint:s,document:e.document,initialValue:n.initialValue,params:n.params,value:p.value,viewProps:Vt.create({disabled:c,hidden:d})}),u=i.optional.string(e.params.label).value;return new nt(e.document,{binding:p,blade:W(),props:M.fromObject({label:null!=u?u:e.target.key}),valueController:h})}(r,{document:t,target:e,params:n})),null);if(i)return i;throw new c({context:{key:e.key},type:"nomatchingcontroller"})}createMonitor(t,e,n){const i=this.pluginsMap_.monitors.reduce(((i,r)=>null!=i?i:function(t,e){var n,i,r;const o=L,s=t.accept(e.target.read(),e.params);if(a(s))return null;const l=t.binding.reader({target:e.target,initialValue:s.initialValue,params:s.params}),p=null!==(i=null!==(n=o.optional.number(e.params.bufferSize).value)&&void 0!==n?n:t.binding.defaultBufferSize&&t.binding.defaultBufferSize(s.params))&&void 0!==i?i:1,c=o.optional.number(e.params.interval).value,d=new Nr({reader:l,target:e.target,ticker:Ir(e.document,c),value:Le(p)}),h=o.optional.boolean(e.params.disabled).value,u=o.optional.boolean(e.params.hidden).value,v=t.controller({document:e.document,params:s.params,value:d.value,viewProps:Vt.create({disabled:h,hidden:u})}),m=null!==(r=o.optional.string(e.params.label).value)&&void 0!==r?r:e.target.key;return new rt(e.document,{binding:d,blade:W(),props:M.fromObject({label:m}),valueController:v})}(r,{document:t,params:n,target:e})),null);if(i)return i;throw new c({context:{key:e.key},type:"nomatchingcontroller"})}createBlade(t,e){const n=this.pluginsMap_.blades.reduce(((n,i)=>null!=n?n:function(t,e){const n=t.accept(e.params);if(!n)return null;const i=L.optional.boolean(e.params.disabled).value,r=L.optional.boolean(e.params.hidden).value;return t.controller({blade:W(),document:e.document,params:Object.assign(Object.assign({},n.params),{disabled:i,hidden:r}),viewProps:Vt.create({disabled:i,hidden:r})})}(i,{document:t,params:e})),null);if(!n)throw new c({type:"nomatchingview",context:{params:e}});return n}createBladeApi(t){if(t instanceof nt)return new et(t);if(t instanceof rt)return new it(t);if(t instanceof mt)return new lt(t,this);const e=this.pluginsMap_.blades.reduce(((e,n)=>null!=e?e:n.api({controller:t,pool:this})),null);if(!e)throw c.shouldNeverHappen();return e}}class Ur extends e{constructor(t){super(t),this.emitter_=new u,this.controller_.valueController.value.emitter.on("change",(t=>{this.emitter_.emit("change",{event:new i(this,t.rawValue)})}))}get label(){return this.controller_.props.get("label")}set label(t){this.controller_.props.set("label",t)}get options(){return this.controller_.valueController.props.get("options")}set options(t){this.controller_.valueController.props.set("options",t)}get value(){return this.controller_.valueController.value.rawValue}set value(t){this.controller_.valueController.value.rawValue=t}on(t,e){const n=e.bind(this);return this.emitter_.on(t,(t=>{n(t.event)})),this}}class Kr extends e{constructor(t){super(t),this.emitter_=new u,this.controller_.valueController.value.emitter.on("change",(t=>{this.emitter_.emit("change",{event:new i(this,t.rawValue)})}))}get label(){return this.controller_.props.get("label")}set label(t){this.controller_.props.set("label",t)}get maxValue(){return this.controller_.valueController.sliderController.props.get("maxValue")}set maxValue(t){this.controller_.valueController.sliderController.props.set("maxValue",t)}get minValue(){return this.controller_.valueController.sliderController.props.get("minValue")}set minValue(t){this.controller_.valueController.sliderController.props.set("minValue",t)}get value(){return this.controller_.valueController.value.rawValue}set value(t){this.controller_.valueController.value.rawValue=t}on(t,e){const n=e.bind(this);return this.emitter_.on(t,(t=>{n(t.event)})),this}}class Hr extends e{constructor(t){super(t),this.emitter_=new u,this.controller_.valueController.value.emitter.on("change",(t=>{this.emitter_.emit("change",{event:new i(this,t.rawValue)})}))}get label(){return this.controller_.props.get("label")}set label(t){this.controller_.props.set("label",t)}get formatter(){return this.controller_.valueController.props.get("formatter")}set formatter(t){this.controller_.valueController.props.set("formatter",t)}get value(){return this.controller_.valueController.value.rawValue}set value(t){this.controller_.valueController.value.rawValue=t}on(t,e){const n=e.bind(this);return this.emitter_.on(t,(t=>{n(t.event)})),this}}const zr={id:"list",type:"blade",accept(t){const e=L,n=A(t,{options:e.required.custom(Je),value:e.required.raw,view:e.required.constant("list"),label:e.optional.string});return n?{params:n}:null},controller(t){const e=new Wt(t.document,{props:M.fromObject({options:nn(t.params.options)}),value:E(t.params.value),viewProps:t.viewProps});return new wt(t.document,{blade:t.blade,props:M.fromObject({label:t.params.label}),valueController:e})},api:t=>t.controller instanceof wt&&t.controller.valueController instanceof Wt?new Ur(t.controller):null};class $r extends pt{constructor(t,e){super(t,e)}get element(){return this.controller_.view.element}importPreset(t){!function(t,e){t.forEach((t=>{const n=e[t.presetKey];void 0!==n&&t.write(n)}))}(this.controller_.rackController.rack.find(nt).map((t=>t.binding.target)),t),this.refresh()}exportPreset(){return function(t){return t.reduce(((t,e)=>Object.assign(t,{[e.presetKey]:e.read()})),{})}(this.controller_.rackController.rack.find(nt).map((t=>t.binding.target)))}refresh(){this.controller_.rackController.rack.find(nt).forEach((t=>{t.binding.read()})),this.controller_.rackController.rack.find(rt).forEach((t=>{t.binding.read()}))}}class qr extends gt{constructor(t,e){super(t,{expanded:e.expanded,blade:e.blade,props:e.props,root:!0,viewProps:e.viewProps})}}const Gr={id:"slider",type:"blade",accept(t){const e=L,n=A(t,{max:e.required.number,min:e.required.number,view:e.required.constant("slider"),format:e.optional.function,label:e.optional.string,value:e.optional.number});return n?{params:n}:null},controller(t){var e,n;const i=null!==(e=t.params.value)&&void 0!==e?e:0,r=new Xe(t.document,{baseStep:1,parser:ye,sliderProps:M.fromObject({maxValue:t.params.max,minValue:t.params.min}),textProps:M.fromObject({draggingScale:ln(void 0,i),formatter:null!==(n=t.params.format)&&void 0!==n?n:Ce}),value:E(i),viewProps:t.viewProps});return new wt(t.document,{blade:t.blade,props:M.fromObject({label:t.params.label}),valueController:r})},api:t=>t.controller instanceof wt&&t.controller.valueController instanceof Xe?new Kr(t.controller):null},Yr={id:"text",type:"blade",accept(t){const e=L,n=A(t,{parse:e.required.function,value:e.required.raw,view:e.required.constant("text"),format:e.optional.function,label:e.optional.string});return n?{params:n}:null},controller(t){var e;const n=new ee(t.document,{parser:t.params.parse,props:M.fromObject({formatter:null!==(e=t.params.format)&&void 0!==e?e:t=>String(t)}),value:E(t.params.value),viewProps:t.viewProps});return new wt(t.document,{blade:t.blade,props:M.fromObject({label:t.params.label}),valueController:n})},api:t=>t.controller instanceof wt&&t.controller.valueController instanceof ee?new Hr(t.controller):null};function Wr(t,e,n){if(t.querySelector(`style[data-tp-style=${e}]`))return;const i=t.createElement("style");i.dataset.tpStyle=e,i.textContent=n,t.head.appendChild(i)}const Qr=new class{constructor(t){const[e,n]=t.split("-"),i=e.split(".");this.major=parseInt(i[0],10),this.minor=parseInt(i[1],10),this.patch=parseInt(i[2],10),this.prerelease=null!=n?n:null}toString(){const t=[this.major,this.minor,this.patch].join(".");return null!==this.prerelease?[t,this.prerelease].join("-"):t}}("3.1.0");t.BladeApi=e,t.ButtonApi=h,t.FolderApi=pt,t.InputBindingApi=et,t.ListApi=Ur,t.MonitorBindingApi=it,t.Pane=class extends $r{constructor(t){var e,n;const i=null!=t?t:{},r=null!==(e=i.document)&&void 0!==e?e:F(),o=function(){const t=new Br;return[pr,mr,wr,yr,qi,Ni,Fi,Di,hn,Sr,Or,Rr,G,_t,Pt,It].forEach((e=>{t.register(e)})),t}();super(new qr(r,{expanded:i.expanded,blade:W(),props:M.fromObject({title:i.title}),viewProps:Vt.create()}),o),this.pool_=o,this.containerElem_=null!==(n=i.container)&&void 0!==n?n:function(t){const e=t.createElement("div");return e.classList.add(m("dfw")()),t.body&&t.body.appendChild(e),e}(r),this.containerElem_.appendChild(this.element),this.doc_=r,this.usesDefaultWrapper_=!i.container,this.setUpDefaultPlugins_()}get document(){if(!this.doc_)throw c.alreadyDisposed();return this.doc_}dispose(){const t=this.containerElem_;if(!t)throw c.alreadyDisposed();if(this.usesDefaultWrapper_){const e=t.parentElement;e&&e.removeChild(t)}this.containerElem_=null,this.doc_=null,super.dispose()}registerPlugin(t){("plugin"in t?[t.plugin]:"plugins"in t?t.plugins:[]).forEach((t=>{this.pool_.register(t),this.embedPluginStyle_(t)}))}embedPluginStyle_(t){t.css&&Wr(this.document,`plugin-${t.id}`,t.css)}setUpDefaultPlugins_(){Wr(this.document,"default",'.tp-tbiv_b,.tp-coltxtv_ms,.tp-ckbv_i,.tp-rotv_b,.tp-fldv_b,.tp-mllv_i,.tp-sglv_i,.tp-grlv_g,.tp-txtv_i,.tp-p2dpv_p,.tp-colswv_sw,.tp-p2dv_b,.tp-btnv_b,.tp-lstv_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}.tp-p2dv_b,.tp-btnv_b,.tp-lstv_s{background-color:var(--btn-bg);border-radius:var(--elm-br);color:var(--btn-fg);cursor:pointer;display:block;font-weight:bold;height:var(--bld-us);line-height:var(--bld-us);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tp-p2dv_b:hover,.tp-btnv_b:hover,.tp-lstv_s:hover{background-color:var(--btn-bg-h)}.tp-p2dv_b:focus,.tp-btnv_b:focus,.tp-lstv_s:focus{background-color:var(--btn-bg-f)}.tp-p2dv_b:active,.tp-btnv_b:active,.tp-lstv_s:active{background-color:var(--btn-bg-a)}.tp-p2dv_b:disabled,.tp-btnv_b:disabled,.tp-lstv_s:disabled{opacity:.5}.tp-txtv_i,.tp-p2dpv_p,.tp-colswv_sw{background-color:var(--in-bg);border-radius:var(--elm-br);box-sizing:border-box;color:var(--in-fg);font-family:inherit;height:var(--bld-us);line-height:var(--bld-us);min-width:0;width:100%}.tp-txtv_i:hover,.tp-p2dpv_p:hover,.tp-colswv_sw:hover{background-color:var(--in-bg-h)}.tp-txtv_i:focus,.tp-p2dpv_p:focus,.tp-colswv_sw:focus{background-color:var(--in-bg-f)}.tp-txtv_i:active,.tp-p2dpv_p:active,.tp-colswv_sw:active{background-color:var(--in-bg-a)}.tp-txtv_i:disabled,.tp-p2dpv_p:disabled,.tp-colswv_sw:disabled{opacity:.5}.tp-mllv_i,.tp-sglv_i,.tp-grlv_g{background-color:var(--mo-bg);border-radius:var(--elm-br);box-sizing:border-box;color:var(--mo-fg);height:var(--bld-us);scrollbar-color:currentColor transparent;scrollbar-width:thin;width:100%}.tp-mllv_i::-webkit-scrollbar,.tp-sglv_i::-webkit-scrollbar,.tp-grlv_g::-webkit-scrollbar{height:8px;width:8px}.tp-mllv_i::-webkit-scrollbar-corner,.tp-sglv_i::-webkit-scrollbar-corner,.tp-grlv_g::-webkit-scrollbar-corner{background-color:transparent}.tp-mllv_i::-webkit-scrollbar-thumb,.tp-sglv_i::-webkit-scrollbar-thumb,.tp-grlv_g::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:currentColor;border:transparent solid 2px;border-radius:4px}.tp-rotv{--font-family: var(--tp-font-family, Roboto Mono, Source Code Pro, Menlo, Courier, monospace);--bs-br: var(--tp-base-border-radius, 6px);--cnt-h-p: var(--tp-container-horizontal-padding, 4px);--cnt-v-p: var(--tp-container-vertical-padding, 4px);--elm-br: var(--tp-element-border-radius, 2px);--bld-s: var(--tp-blade-spacing, 4px);--bld-us: var(--tp-blade-unit-size, 20px);--bs-bg: var(--tp-base-background-color, #28292e);--bs-sh: var(--tp-base-shadow-color, rgba(0, 0, 0, 0.2));--btn-bg: var(--tp-button-background-color, #adafb8);--btn-bg-a: var(--tp-button-background-color-active, #d6d7db);--btn-bg-f: var(--tp-button-background-color-focus, #c8cad0);--btn-bg-h: var(--tp-button-background-color-hover, #bbbcc4);--btn-fg: var(--tp-button-foreground-color, #28292e);--cnt-bg: var(--tp-container-background-color, rgba(187, 188, 196, 0.1));--cnt-bg-a: var(--tp-container-background-color-active, rgba(187, 188, 196, 0.25));--cnt-bg-f: var(--tp-container-background-color-focus, rgba(187, 188, 196, 0.2));--cnt-bg-h: var(--tp-container-background-color-hover, rgba(187, 188, 196, 0.15));--cnt-fg: var(--tp-container-foreground-color, #bbbcc4);--in-bg: var(--tp-input-background-color, rgba(187, 188, 196, 0.1));--in-bg-a: var(--tp-input-background-color-active, rgba(187, 188, 196, 0.25));--in-bg-f: var(--tp-input-background-color-focus, rgba(187, 188, 196, 0.2));--in-bg-h: var(--tp-input-background-color-hover, rgba(187, 188, 196, 0.15));--in-fg: var(--tp-input-foreground-color, #bbbcc4);--lbl-fg: var(--tp-label-foreground-color, rgba(187, 188, 196, 0.7));--mo-bg: var(--tp-monitor-background-color, rgba(0, 0, 0, 0.2));--mo-fg: var(--tp-monitor-foreground-color, rgba(187, 188, 196, 0.7));--grv-fg: var(--tp-groove-foreground-color, rgba(187, 188, 196, 0.1))}.tp-rotv_c>.tp-cntv.tp-v-lst,.tp-tabv_c .tp-brkv>.tp-cntv.tp-v-lst,.tp-fldv_c>.tp-cntv.tp-v-lst{margin-bottom:calc(-1*var(--cnt-v-p))}.tp-rotv_c>.tp-fldv.tp-v-lst .tp-fldv_c,.tp-tabv_c .tp-brkv>.tp-fldv.tp-v-lst .tp-fldv_c,.tp-fldv_c>.tp-fldv.tp-v-lst .tp-fldv_c{border-bottom-left-radius:0}.tp-rotv_c>.tp-fldv.tp-v-lst .tp-fldv_b,.tp-tabv_c .tp-brkv>.tp-fldv.tp-v-lst .tp-fldv_b,.tp-fldv_c>.tp-fldv.tp-v-lst .tp-fldv_b{border-bottom-left-radius:0}.tp-rotv_c>*:not(.tp-v-fst),.tp-tabv_c .tp-brkv>*:not(.tp-v-fst),.tp-fldv_c>*:not(.tp-v-fst){margin-top:var(--bld-s)}.tp-rotv_c>.tp-sprv:not(.tp-v-fst),.tp-tabv_c .tp-brkv>.tp-sprv:not(.tp-v-fst),.tp-fldv_c>.tp-sprv:not(.tp-v-fst),.tp-rotv_c>.tp-cntv:not(.tp-v-fst),.tp-tabv_c .tp-brkv>.tp-cntv:not(.tp-v-fst),.tp-fldv_c>.tp-cntv:not(.tp-v-fst){margin-top:var(--cnt-v-p)}.tp-rotv_c>.tp-sprv+*:not(.tp-v-hidden),.tp-tabv_c .tp-brkv>.tp-sprv+*:not(.tp-v-hidden),.tp-fldv_c>.tp-sprv+*:not(.tp-v-hidden),.tp-rotv_c>.tp-cntv+*:not(.tp-v-hidden),.tp-tabv_c .tp-brkv>.tp-cntv+*:not(.tp-v-hidden),.tp-fldv_c>.tp-cntv+*:not(.tp-v-hidden){margin-top:var(--cnt-v-p)}.tp-rotv_c>.tp-sprv:not(.tp-v-hidden)+.tp-sprv,.tp-tabv_c .tp-brkv>.tp-sprv:not(.tp-v-hidden)+.tp-sprv,.tp-fldv_c>.tp-sprv:not(.tp-v-hidden)+.tp-sprv,.tp-rotv_c>.tp-cntv:not(.tp-v-hidden)+.tp-cntv,.tp-tabv_c .tp-brkv>.tp-cntv:not(.tp-v-hidden)+.tp-cntv,.tp-fldv_c>.tp-cntv:not(.tp-v-hidden)+.tp-cntv{margin-top:0}.tp-tabv_c .tp-brkv>.tp-cntv,.tp-fldv_c>.tp-cntv{margin-left:4px}.tp-tabv_c .tp-brkv>.tp-fldv>.tp-fldv_b,.tp-fldv_c>.tp-fldv>.tp-fldv_b{border-top-left-radius:var(--elm-br);border-bottom-left-radius:var(--elm-br)}.tp-tabv_c .tp-brkv>.tp-fldv.tp-fldv-expanded>.tp-fldv_b,.tp-fldv_c>.tp-fldv.tp-fldv-expanded>.tp-fldv_b{border-bottom-left-radius:0}.tp-tabv_c .tp-brkv .tp-fldv>.tp-fldv_c,.tp-fldv_c .tp-fldv>.tp-fldv_c{border-bottom-left-radius:var(--elm-br)}.tp-tabv_c .tp-brkv>.tp-tabv>.tp-tabv_i,.tp-fldv_c>.tp-tabv>.tp-tabv_i{border-top-left-radius:var(--elm-br)}.tp-tabv_c .tp-brkv .tp-tabv>.tp-tabv_c,.tp-fldv_c .tp-tabv>.tp-tabv_c{border-bottom-left-radius:var(--elm-br)}.tp-rotv_b,.tp-fldv_b{background-color:var(--cnt-bg);color:var(--cnt-fg);cursor:pointer;display:block;height:calc(var(--bld-us) + 4px);line-height:calc(var(--bld-us) + 4px);overflow:hidden;padding-left:var(--cnt-h-p);padding-right:calc(4px + var(--bld-us) + var(--cnt-h-p));position:relative;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%;transition:border-radius .2s ease-in-out .2s}.tp-rotv_b:hover,.tp-fldv_b:hover{background-color:var(--cnt-bg-h)}.tp-rotv_b:focus,.tp-fldv_b:focus{background-color:var(--cnt-bg-f)}.tp-rotv_b:active,.tp-fldv_b:active{background-color:var(--cnt-bg-a)}.tp-rotv_b:disabled,.tp-fldv_b:disabled{opacity:.5}.tp-rotv_m,.tp-fldv_m{background:linear-gradient(to left, var(--cnt-fg), var(--cnt-fg) 2px, transparent 2px, transparent 4px, var(--cnt-fg) 4px);border-radius:2px;bottom:0;content:"";display:block;height:6px;right:calc(var(--cnt-h-p) + (var(--bld-us) + 4px - 6px)/2 - 2px);margin:auto;opacity:.5;position:absolute;top:0;transform:rotate(90deg);transition:transform .2s ease-in-out;width:6px}.tp-rotv.tp-rotv-expanded .tp-rotv_m,.tp-fldv.tp-fldv-expanded>.tp-fldv_b>.tp-fldv_m{transform:none}.tp-rotv_c,.tp-fldv_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-rotv.tp-rotv-cpl:not(.tp-rotv-expanded) .tp-rotv_c,.tp-fldv.tp-fldv-cpl:not(.tp-fldv-expanded)>.tp-fldv_c{display:none}.tp-rotv.tp-rotv-expanded .tp-rotv_c,.tp-fldv.tp-fldv-expanded>.tp-fldv_c{opacity:1;padding-bottom:var(--cnt-v-p);padding-top:var(--cnt-v-p);transform:none;overflow:visible;transition:height .2s ease-in-out,opacity .2s linear .2s,padding .2s ease-in-out}.tp-lstv,.tp-coltxtv_m{position:relative}.tp-lstv_s{padding:0 20px 0 4px;width:100%}.tp-lstv_m,.tp-coltxtv_mm{bottom:0;margin:auto;pointer-events:none;position:absolute;right:2px;top:0}.tp-lstv_m svg,.tp-coltxtv_mm svg{bottom:0;height:16px;margin:auto;position:absolute;right:0;top:0;width:16px}.tp-lstv_m svg path,.tp-coltxtv_mm svg path{fill:currentColor}.tp-pndtxtv,.tp-coltxtv_w{display:flex}.tp-pndtxtv_a,.tp-coltxtv_c{width:100%}.tp-pndtxtv_a+.tp-pndtxtv_a,.tp-coltxtv_c+.tp-pndtxtv_a,.tp-pndtxtv_a+.tp-coltxtv_c,.tp-coltxtv_c+.tp-coltxtv_c{margin-left:2px}.tp-btnv_b{width:100%}.tp-btnv_t{text-align:center}.tp-ckbv_l{display:block;position:relative}.tp-ckbv_i{left:0;opacity:0;position:absolute;top:0}.tp-ckbv_w{background-color:var(--in-bg);border-radius:var(--elm-br);cursor:pointer;display:block;height:var(--bld-us);position:relative;width:var(--bld-us)}.tp-ckbv_w svg{bottom:0;display:block;height:16px;left:0;margin:auto;opacity:0;position:absolute;right:0;top:0;width:16px}.tp-ckbv_w svg path{fill:none;stroke:var(--in-fg);stroke-width:2}.tp-ckbv_i:hover+.tp-ckbv_w{background-color:var(--in-bg-h)}.tp-ckbv_i:focus+.tp-ckbv_w{background-color:var(--in-bg-f)}.tp-ckbv_i:active+.tp-ckbv_w{background-color:var(--in-bg-a)}.tp-ckbv_i:checked+.tp-ckbv_w svg{opacity:1}.tp-ckbv.tp-v-disabled .tp-ckbv_w{opacity:.5}.tp-colv{position:relative}.tp-colv_h{display:flex}.tp-colv_s{flex-grow:0;flex-shrink:0;width:var(--bld-us)}.tp-colv_t{flex:1;margin-left:4px}.tp-colv_p{height:0;margin-top:0;opacity:0;overflow:hidden;transition:height .2s ease-in-out,opacity .2s linear,margin .2s ease-in-out}.tp-colv.tp-colv-cpl .tp-colv_p{overflow:visible}.tp-colv.tp-colv-expanded .tp-colv_p{margin-top:var(--bld-s);opacity:1}.tp-colv .tp-popv{left:calc(-1*var(--cnt-h-p));right:calc(-1*var(--cnt-h-p));top:var(--bld-us)}.tp-colpv_h,.tp-colpv_ap{margin-left:6px;margin-right:6px}.tp-colpv_h{margin-top:var(--bld-s)}.tp-colpv_rgb{display:flex;margin-top:var(--bld-s);width:100%}.tp-colpv_a{display:flex;margin-top:var(--cnt-v-p);padding-top:calc(var(--cnt-v-p) + 2px);position:relative}.tp-colpv_a:before{background-color:var(--grv-fg);content:"";height:2px;left:calc(-1*var(--cnt-h-p));position:absolute;right:calc(-1*var(--cnt-h-p));top:0}.tp-colpv_ap{align-items:center;display:flex;flex:3}.tp-colpv_at{flex:1;margin-left:4px}.tp-svpv{border-radius:var(--elm-br);outline:none;overflow:hidden;position:relative}.tp-svpv_c{cursor:crosshair;display:block;height:calc(var(--bld-us)*4);width:100%}.tp-svpv_m{border-radius:100%;border:rgba(255,255,255,.75) solid 2px;box-sizing:border-box;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-svpv:focus .tp-svpv_m{border-color:#fff}.tp-hplv{cursor:pointer;height:var(--bld-us);outline:none;position:relative}.tp-hplv_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-hplv_m{border-radius:var(--elm-br);border:rgba(255,255,255,.75) solid 2px;box-shadow:0 0 2px rgba(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-hplv:focus .tp-hplv_m{border-color:#fff}.tp-aplv{cursor:pointer;height:var(--bld-us);outline:none;position:relative;width:100%}.tp-aplv_b{background-color:#fff;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;border-radius:2px;display:block;height:4px;left:0;margin-top:-2px;overflow:hidden;position:absolute;top:50%;width:100%}.tp-aplv_c{bottom:0;left:0;position:absolute;right:0;top:0}.tp-aplv_m{background-color:#fff;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;border-radius:var(--elm-br);box-shadow:0 0 2px rgba(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-aplv_p{border-radius:var(--elm-br);border:rgba(255,255,255,.75) solid 2px;box-sizing:border-box;bottom:0;left:0;position:absolute;right:0;top:0}.tp-aplv:focus .tp-aplv_p{border-color:#fff}.tp-colswv{background-color:#fff;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;border-radius:var(--elm-br);overflow:hidden}.tp-colswv.tp-v-disabled{opacity:.5}.tp-colswv_sw{border-radius:0}.tp-colswv_b{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;cursor:pointer;display:block;height:var(--bld-us);left:0;margin:0;outline:none;padding:0;position:absolute;top:0;width:var(--bld-us)}.tp-colswv_b:focus::after{border:rgba(255,255,255,.75) solid 2px;border-radius:var(--elm-br);bottom:0;content:"";display:block;left:0;position:absolute;right:0;top:0}.tp-coltxtv{display:flex;width:100%}.tp-coltxtv_m{margin-right:4px}.tp-coltxtv_ms{border-radius:var(--elm-br);color:var(--lbl-fg);cursor:pointer;height:var(--bld-us);line-height:var(--bld-us);padding:0 18px 0 4px}.tp-coltxtv_ms:hover{background-color:var(--in-bg-h)}.tp-coltxtv_ms:focus{background-color:var(--in-bg-f)}.tp-coltxtv_ms:active{background-color:var(--in-bg-a)}.tp-coltxtv_mm{color:var(--lbl-fg)}.tp-coltxtv_w{flex:1}.tp-dfwv{position:absolute;top:8px;right:8px;width:256px}.tp-fldv.tp-fldv-not .tp-fldv_b{display:none}.tp-fldv_t{padding-left:4px}.tp-fldv_c{border-left:var(--cnt-bg) solid 4px}.tp-fldv_b:hover+.tp-fldv_c{border-left-color:var(--cnt-bg-h)}.tp-fldv_b:focus+.tp-fldv_c{border-left-color:var(--cnt-bg-f)}.tp-fldv_b:active+.tp-fldv_c{border-left-color:var(--cnt-bg-a)}.tp-grlv{position:relative}.tp-grlv_g{display:block;height:calc(var(--bld-us)*3)}.tp-grlv_g polyline{fill:none;stroke:var(--mo-fg);stroke-linejoin:round}.tp-grlv_t{margin-top:-4px;transition:left .05s,top .05s;visibility:hidden}.tp-grlv_t.tp-grlv_t-a{visibility:visible}.tp-grlv_t.tp-grlv_t-in{transition:none}.tp-grlv.tp-v-disabled .tp-grlv_g{opacity:.5}.tp-grlv .tp-ttv{background-color:var(--mo-fg)}.tp-grlv .tp-ttv::before{border-top-color:var(--mo-fg)}.tp-lblv{align-items:center;display:flex;line-height:1.3;padding-left:var(--cnt-h-p);padding-right:var(--cnt-h-p)}.tp-lblv.tp-lblv-nol{display:block}.tp-lblv_l{color:var(--lbl-fg);flex:1;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;overflow:hidden;padding-left:4px;padding-right:16px}.tp-lblv.tp-v-disabled .tp-lblv_l{opacity:.5}.tp-lblv.tp-lblv-nol .tp-lblv_l{display:none}.tp-lblv_v{align-self:flex-start;flex-grow:0;flex-shrink:0;width:160px}.tp-lblv.tp-lblv-nol .tp-lblv_v{width:100%}.tp-lstv_s{padding:0 20px 0 4px;width:100%}.tp-lstv_m{color:var(--btn-fg)}.tp-sglv_i{padding:0 4px}.tp-sglv.tp-v-disabled .tp-sglv_i{opacity:.5}.tp-mllv_i{display:block;height:calc(var(--bld-us)*3);line-height:var(--bld-us);padding:0 4px;resize:none;white-space:pre}.tp-mllv.tp-v-disabled .tp-mllv_i{opacity:.5}.tp-p2dv{position:relative}.tp-p2dv_h{display:flex}.tp-p2dv_b{height:var(--bld-us);margin-right:4px;position:relative;width:var(--bld-us)}.tp-p2dv_b svg{display:block;height:16px;left:50%;margin-left:-8px;margin-top:-8px;position:absolute;top:50%;width:16px}.tp-p2dv_b svg path{stroke:currentColor;stroke-width:2}.tp-p2dv_b svg circle{fill:currentColor}.tp-p2dv_t{flex:1}.tp-p2dv_p{height:0;margin-top:0;opacity:0;overflow:hidden;transition:height .2s ease-in-out,opacity .2s linear,margin .2s ease-in-out}.tp-p2dv.tp-p2dv-expanded .tp-p2dv_p{margin-top:var(--bld-s);opacity:1}.tp-p2dv .tp-popv{left:calc(-1*var(--cnt-h-p));right:calc(-1*var(--cnt-h-p));top:var(--bld-us)}.tp-p2dpv{padding-left:calc(var(--bld-us) + 4px)}.tp-p2dpv_p{cursor:crosshair;height:0;overflow:hidden;padding-bottom:100%;position:relative}.tp-p2dpv_g{display:block;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%}.tp-p2dpv_ax{opacity:.1;stroke:var(--in-fg);stroke-dasharray:1}.tp-p2dpv_l{opacity:.5;stroke:var(--in-fg);stroke-dasharray:1}.tp-p2dpv_m{border:var(--in-fg) solid 1px;border-radius:50%;box-sizing:border-box;height:4px;margin-left:-2px;margin-top:-2px;position:absolute;width:4px}.tp-p2dpv_p:focus .tp-p2dpv_m{background-color:var(--in-fg);border-width:0}.tp-popv{background-color:var(--bs-bg);border-radius:6px;box-shadow:0 2px 4px var(--bs-sh);display:none;max-width:168px;padding:var(--cnt-v-p) var(--cnt-h-p);position:absolute;visibility:hidden;z-index:1000}.tp-popv.tp-popv-v{display:block;visibility:visible}.tp-sprv_r{background-color:var(--grv-fg);border-width:0;display:block;height:2px;margin:0;width:100%}.tp-sldv.tp-v-disabled{opacity:.5}.tp-sldv_t{box-sizing:border-box;cursor:pointer;height:var(--bld-us);margin:0 6px;outline:none;position:relative}.tp-sldv_t::before{background-color:var(--in-bg);border-radius:1px;bottom:0;content:"";display:block;height:2px;left:0;margin:auto;position:absolute;right:0;top:0}.tp-sldv_k{height:100%;left:0;position:absolute;top:0}.tp-sldv_k::before{background-color:var(--in-fg);border-radius:1px;bottom:0;content:"";display:block;height:2px;left:0;margin-bottom:auto;margin-top:auto;position:absolute;right:0;top:0}.tp-sldv_k::after{background-color:var(--btn-bg);border-radius:var(--elm-br);bottom:0;content:"";display:block;height:12px;margin-bottom:auto;margin-top:auto;position:absolute;right:-6px;top:0;width:12px}.tp-sldv_t:hover .tp-sldv_k::after{background-color:var(--btn-bg-h)}.tp-sldv_t:focus .tp-sldv_k::after{background-color:var(--btn-bg-f)}.tp-sldv_t:active .tp-sldv_k::after{background-color:var(--btn-bg-a)}.tp-sldtxtv{display:flex}.tp-sldtxtv_s{flex:2}.tp-sldtxtv_t{flex:1;margin-left:4px}.tp-tabv.tp-v-disabled{opacity:.5}.tp-tabv_i{align-items:flex-end;display:flex;overflow:hidden}.tp-tabv.tp-tabv-nop .tp-tabv_i{height:calc(var(--bld-us) + 4px);position:relative}.tp-tabv.tp-tabv-nop .tp-tabv_i::before{background-color:var(--cnt-bg);bottom:0;content:"";height:2px;left:0;position:absolute;right:0}.tp-tabv_c{border-left:var(--cnt-bg) solid 4px;padding-bottom:var(--cnt-v-p);padding-top:var(--cnt-v-p)}.tp-tbiv{flex:1;min-width:0;position:relative}.tp-tbiv+.tp-tbiv{margin-left:2px}.tp-tbiv+.tp-tbiv::before{background-color:var(--cnt-bg);bottom:0;content:"";height:2px;left:-2px;position:absolute;width:2px}.tp-tbiv_b{background-color:var(--cnt-bg);display:block;padding-left:calc(var(--cnt-h-p) + 4px);padding-right:calc(var(--cnt-h-p) + 4px);width:100%}.tp-tbiv_b:hover{background-color:var(--cnt-bg-h)}.tp-tbiv_b:focus{background-color:var(--cnt-bg-f)}.tp-tbiv_b:active{background-color:var(--cnt-bg-a)}.tp-tbiv_b:disabled{opacity:.5}.tp-tbiv_t{color:var(--cnt-fg);height:calc(var(--bld-us) + 4px);line-height:calc(var(--bld-us) + 4px);opacity:.5;overflow:hidden;text-overflow:ellipsis}.tp-tbiv.tp-tbiv-sel .tp-tbiv_t{opacity:1}.tp-txtv{position:relative}.tp-txtv_i{padding:0 4px}.tp-txtv.tp-txtv-fst .tp-txtv_i{border-bottom-right-radius:0;border-top-right-radius:0}.tp-txtv.tp-txtv-mid .tp-txtv_i{border-radius:0}.tp-txtv.tp-txtv-lst .tp-txtv_i{border-bottom-left-radius:0;border-top-left-radius:0}.tp-txtv.tp-txtv-num .tp-txtv_i{text-align:right}.tp-txtv.tp-txtv-drg .tp-txtv_i{opacity:.3}.tp-txtv_k{cursor:pointer;height:100%;left:-3px;position:absolute;top:0;width:12px}.tp-txtv_k::before{background-color:var(--in-fg);border-radius:1px;bottom:0;content:"";height:calc(var(--bld-us) - 4px);left:50%;margin-bottom:auto;margin-left:-1px;margin-top:auto;opacity:.1;position:absolute;top:0;transition:border-radius .1s,height .1s,transform .1s,width .1s;width:2px}.tp-txtv_k:hover::before,.tp-txtv.tp-txtv-drg .tp-txtv_k::before{opacity:1}.tp-txtv.tp-txtv-drg .tp-txtv_k::before{border-radius:50%;height:4px;transform:translateX(-1px);width:4px}.tp-txtv_g{bottom:0;display:block;height:8px;left:50%;margin:auto;overflow:visible;pointer-events:none;position:absolute;top:0;visibility:hidden;width:100%}.tp-txtv.tp-txtv-drg .tp-txtv_g{visibility:visible}.tp-txtv_gb{fill:none;stroke:var(--in-fg);stroke-dasharray:1}.tp-txtv_gh{fill:none;stroke:var(--in-fg)}.tp-txtv .tp-ttv{margin-left:6px;visibility:hidden}.tp-txtv.tp-txtv-drg .tp-ttv{visibility:visible}.tp-ttv{background-color:var(--in-fg);border-radius:var(--elm-br);color:var(--bs-bg);padding:2px 4px;pointer-events:none;position:absolute;transform:translate(-50%, -100%)}.tp-ttv::before{border-color:var(--in-fg) transparent transparent transparent;border-style:solid;border-width:2px;box-sizing:border-box;content:"";font-size:.9em;height:4px;left:50%;margin-left:-2px;position:absolute;top:100%;width:4px}.tp-rotv{background-color:var(--bs-bg);border-radius:var(--bs-br);box-shadow:0 2px 4px var(--bs-sh);font-family:var(--font-family);font-size:11px;font-weight:500;line-height:1;text-align:left}.tp-rotv_b{border-bottom-left-radius:var(--bs-br);border-bottom-right-radius:var(--bs-br);border-top-left-radius:var(--bs-br);border-top-right-radius:var(--bs-br);padding-left:calc(4px + var(--bld-us) + var(--cnt-h-p));text-align:center}.tp-rotv.tp-rotv-expanded .tp-rotv_b{border-bottom-left-radius:0;border-bottom-right-radius:0}.tp-rotv.tp-rotv-not .tp-rotv_b{display:none}.tp-rotv_c>.tp-fldv.tp-v-lst>.tp-fldv_c,.tp-rotv_c>.tp-tabv.tp-v-lst>.tp-tabv_c{border-bottom-left-radius:var(--bs-br);border-bottom-right-radius:var(--bs-br)}.tp-rotv_c>.tp-fldv.tp-v-lst:not(.tp-fldv-expanded)>.tp-fldv_b{border-bottom-left-radius:var(--bs-br);border-bottom-right-radius:var(--bs-br)}.tp-rotv_c .tp-fldv.tp-v-vlst:not(.tp-fldv-expanded)>.tp-fldv_b{border-bottom-right-radius:var(--bs-br)}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-fldv.tp-v-fst{margin-top:calc(-1*var(--cnt-v-p))}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-fldv.tp-v-fst>.tp-fldv_b{border-top-left-radius:var(--bs-br);border-top-right-radius:var(--bs-br)}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-tabv.tp-v-fst{margin-top:calc(-1*var(--cnt-v-p))}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-tabv.tp-v-fst>.tp-tabv_i{border-top-left-radius:var(--bs-br);border-top-right-radius:var(--bs-br)}.tp-rotv.tp-v-disabled,.tp-rotv .tp-v-disabled{pointer-events:none}.tp-rotv.tp-v-hidden,.tp-rotv .tp-v-hidden{display:none}'),this.pool_.getAll().forEach((t=>{this.embedPluginStyle_(t)})),this.registerPlugin({plugins:[Gr,zr,It,Yr]})}},t.SeparatorApi=yt,t.SliderApi=Kr,t.TabApi=Dt,t.TabPageApi=jt,t.TextApi=Hr,t.TpChangeEvent=i,t.VERSION=Qr,Object.defineProperty(t,"__esModule",{value:!0})}))},{}],17:[function(t,e,n){"use strict";var i=s(t("canvas-sketch")),r=s(t("canvas-sketch-util/random")),o=s(t("canvas-sketch-util/color"));function s(t){return t&&t.__esModule?t:{default:t}}const a=t("tweakpane"),l={dimensions:[1080,1080]},p={cell:20,rows:10,scaleMin:1,scaleMax:30,freq:.001,amp:.2,animate:!0,frame:0,style:"chars",fg:{r:255,g:255,b:255,a:255},bg:{r:0,g:0,b:0,a:1},font:"FreeSerif",preset:""};let c,d="M",h=1e3;const u=document.createElement("canvas"),v=u.getContext("2d"),m=({})=>({context:t,width:e,height:n})=>{const i=p.cell,r=Math.floor(e/i),s=Math.floor(n/i),a=r*s;u.width=r,u.height=s,v.fillStyle="black",v.fillRect(0,0,r,s),h=r;const l=`rgba(${p.fg.r},${p.fg.g},${p.fg.b},${p.fg.a})`;v.fillStyle=l,v.font=`${h}px ${p.font}`,v.textBaseline="top";const c=v.measureText(d),m=-1*c.actualBoundingBoxLeft,b=-1*c.actualBoundingBoxAscent,g=c.actualBoundingBoxLeft+c.actualBoundingBoxRight,_=c.actualBoundingBoxAscent+c.actualBoundingBoxDescent,w=.5*(r-g)-m,y=.5*(s-_)-b;v.save(),v.translate(w,y),v.beginPath(),v.rect(m,b,g,_),v.stroke(),v.fillText(d,0,0),v.restore();const x=v.getImageData(0,0,r,s).data;t.fillStyle=`rgb(${p.bg.r},${p.bg.g},${p.bg.b})`,t.fillRect(0,0,e,n),t.textBaseline="middle",t.textAlign="center";const C=o.default.parse(l);for(let e=0;e{if(t<50)return"";if(t<100)return".";if(t<150)return"-";if(t<200)return"+";const e=`_= /${d}`.split("");return r.default.pick(e)};document.addEventListener("keyup",(t=>{d=t.key.toUpperCase(),c.render()}));(()=>{let t;t=(new a.Pane).addFolder({title:"General"}).on("change",(t=>{c.render()})),t.addInput(p,"bg"),t.addInput(p,"fg"),t.addInput(p,"font"),t.addInput(p,"style",{options:{dots:"dots",pixels:"pixels",chars:"chars"}}).on("change",(t=>{c.render()})),t.addInput(p,"cell",{min:2,max:50,step:1})})(),(async()=>{c=await(0,i.default)(m,l)})()},{"canvas-sketch":10,"canvas-sketch-util/color":1,"canvas-sketch-util/random":9,tweakpane:16}],18:[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:{})},{}]},{},[17,18]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyIiwiZSIsIm4iLCJ0IiwibyIsImkiLCJmIiwiYyIsInJlcXVpcmUiLCJ1IiwiYSIsIkVycm9yIiwiY29kZSIsInAiLCJleHBvcnRzIiwiY2FsbCIsImxlbmd0aCIsIm1vZHVsZSIsImNzc0NvbG9yIiwibmFtZXMiLCJyZ2JMdW1pbmFuY2UiLCJIU0xVdGlsIiwiaGV4VG9SR0JBIiwiUkdCQVRvSGV4IiwicGFyc2UiLCJzdHlsZSIsInJlbGF0aXZlTHVtaW5hbmNlIiwiY29sb3IiLCJyZXN1bHQiLCJyZ2IiLCJjb250cmFzdFJhdGlvIiwiY29sb3JBIiwiY29sb3JCIiwiYiIsIk1hdGgiLCJtYXgiLCJtaW4iLCJvZmZzZXRIU0wiLCJoIiwicyIsImwiLCJoc2xhIiwiYmxlbmQiLCJiYWNrZ3JvdW5kIiwiZm9yZWdyb3VuZCIsIm9wYWNpdHkiLCJiZyIsImZnIiwiYzAiLCJyZ2JhIiwiYzEiLCJhbHBoYSIsImlzRmluaXRlIiwiUkdCQVRvSFNMQSIsIkhTTEFUb1JHQkEiLCJhbGljZWJsdWUiLCJhbnRpcXVld2hpdGUiLCJhcXVhIiwiYXF1YW1hcmluZSIsImF6dXJlIiwiYmVpZ2UiLCJiaXNxdWUiLCJibGFjayIsImJsYW5jaGVkYWxtb25kIiwiYmx1ZSIsImJsdWV2aW9sZXQiLCJicm93biIsImJ1cmx5d29vZCIsImNhZGV0Ymx1ZSIsImNoYXJ0cmV1c2UiLCJjaG9jb2xhdGUiLCJjb3JhbCIsImNvcm5mbG93ZXJibHVlIiwiY29ybnNpbGsiLCJjcmltc29uIiwiY3lhbiIsImRhcmtibHVlIiwiZGFya2N5YW4iLCJkYXJrZ29sZGVucm9kIiwiZGFya2dyYXkiLCJkYXJrZ3JlZW4iLCJkYXJrZ3JleSIsImRhcmtraGFraSIsImRhcmttYWdlbnRhIiwiZGFya29saXZlZ3JlZW4iLCJkYXJrb3JhbmdlIiwiZGFya29yY2hpZCIsImRhcmtyZWQiLCJkYXJrc2FsbW9uIiwiZGFya3NlYWdyZWVuIiwiZGFya3NsYXRlYmx1ZSIsImRhcmtzbGF0ZWdyYXkiLCJkYXJrc2xhdGVncmV5IiwiZGFya3R1cnF1b2lzZSIsImRhcmt2aW9sZXQiLCJkZWVwcGluayIsImRlZXBza3libHVlIiwiZGltZ3JheSIsImRpbWdyZXkiLCJkb2RnZXJibHVlIiwiZmlyZWJyaWNrIiwiZmxvcmFsd2hpdGUiLCJmb3Jlc3RncmVlbiIsImZ1Y2hzaWEiLCJnYWluc2Jvcm8iLCJnaG9zdHdoaXRlIiwiZ29sZCIsImdvbGRlbnJvZCIsImdyYXkiLCJncmVlbiIsImdyZWVueWVsbG93IiwiZ3JleSIsImhvbmV5ZGV3IiwiaG90cGluayIsImluZGlhbnJlZCIsImluZGlnbyIsIml2b3J5Iiwia2hha2kiLCJsYXZlbmRlciIsImxhdmVuZGVyYmx1c2giLCJsYXduZ3JlZW4iLCJsZW1vbmNoaWZmb24iLCJsaWdodGJsdWUiLCJsaWdodGNvcmFsIiwibGlnaHRjeWFuIiwibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCJsaWdodGdyYXkiLCJsaWdodGdyZWVuIiwibGlnaHRncmV5IiwibGlnaHRwaW5rIiwibGlnaHRzYWxtb24iLCJsaWdodHNlYWdyZWVuIiwibGlnaHRza3libHVlIiwibGlnaHRzbGF0ZWdyYXkiLCJsaWdodHNsYXRlZ3JleSIsImxpZ2h0c3RlZWxibHVlIiwibGlnaHR5ZWxsb3ciLCJsaW1lIiwibGltZWdyZWVuIiwibGluZW4iLCJtYWdlbnRhIiwibWFyb29uIiwibWVkaXVtYXF1YW1hcmluZSIsIm1lZGl1bWJsdWUiLCJtZWRpdW1vcmNoaWQiLCJtZWRpdW1wdXJwbGUiLCJtZWRpdW1zZWFncmVlbiIsIm1lZGl1bXNsYXRlYmx1ZSIsIm1lZGl1bXNwcmluZ2dyZWVuIiwibWVkaXVtdHVycXVvaXNlIiwibWVkaXVtdmlvbGV0cmVkIiwibWlkbmlnaHRibHVlIiwibWludGNyZWFtIiwibWlzdHlyb3NlIiwibW9jY2FzaW4iLCJuYXZham93aGl0ZSIsIm5hdnkiLCJvbGRsYWNlIiwib2xpdmUiLCJvbGl2ZWRyYWIiLCJvcmFuZ2UiLCJvcmFuZ2VyZWQiLCJvcmNoaWQiLCJwYWxlZ29sZGVucm9kIiwicGFsZWdyZWVuIiwicGFsZXR1cnF1b2lzZSIsInBhbGV2aW9sZXRyZWQiLCJwYXBheWF3aGlwIiwicGVhY2hwdWZmIiwicGVydSIsInBpbmsiLCJwbHVtIiwicG93ZGVyYmx1ZSIsInB1cnBsZSIsInJlYmVjY2FwdXJwbGUiLCJyZWQiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNsYXRlZ3JleSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZSIsIndoaXRlc21va2UiLCJ5ZWxsb3ciLCJ5ZWxsb3dncmVlbiIsIndyYXAiLCJwYXJzZVN0eWxlIiwic3RyIiwiVHlwZUVycm9yIiwiaGV4IiwidG9Mb3dlckNhc2UiLCJ0ZXN0IiwibWF0Y2giLCJleGVjIiwidHlwZSIsInJlcGxhY2UiLCJwYXJ0cyIsInNwbGl0IiwibWFwIiwicm91bmQiLCJwYXJzZUZsb2F0Iiwic2xpY2UiLCJoc2wiLCJyZ2JTdHlsZSIsImciLCJqb2luIiwiaHNsU3R5bGUiLCJBcnJheSIsImlzQXJyYXkiLCJwYXJzZUludCIsInJlcGVhdCIsIm51bSIsImZsb2F0SFNMMlJHQiIsImZsb2F0UkdCMkhTTCIsImZsb2F0SFNMIiwiaHVlIiwiZmxvYXRSR0IiLCJsb3djIiwiYWRqdXN0R2FtbWEiLCJwb3ciLCJyc3JnYiIsImdzcmdiIiwiYnNyZ2IiLCJhbHBoYVBhcmFtIiwidG9TdHJpbmciLCJ2YWx1ZSIsImZyb20iLCJ0byIsImN5Y2xlIiwiZmxvb3IiLCJzZWVkUmFuZG9tIiwiU2ltcGxleE5vaXNlIiwiZGVmaW5lZCIsImNyZWF0ZVJhbmRvbSIsImRlZmF1bHRTZWVkIiwiY3VycmVudFNlZWQiLCJjdXJyZW50UmFuZG9tIiwibm9pc2VHZW5lcmF0b3IiLCJkZWZhdWx0UmFuZG9tIiwicmFuZG9tIiwiX25leHRHYXVzc2lhbiIsIl9oYXNOZXh0R2F1c3NpYW4iLCJzZXRTZWVkIiwiZ2V0U2VlZCIsImdldFJhbmRvbVNlZWQiLCJTdHJpbmciLCJ2YWx1ZU5vblplcm8iLCJwZXJtdXRlTm9pc2UiLCJjcmVhdGVOb2lzZSIsIm5vaXNlMUQiLCJ4IiwiZnJlcXVlbmN5IiwiYW1wbGl0dWRlIiwibm9pc2UyRCIsInkiLCJub2lzZTNEIiwieiIsIm5vaXNlNEQiLCJ3Iiwic2lnbiIsImJvb2xlYW4iLCJjaGFuY2UiLCJyYW5nZSIsInJhbmdlRmxvb3IiLCJwaWNrIiwiYXJyYXkiLCJzaHVmZmxlIiwiYXJyIiwicmFuZCIsInRtcCIsImxlbiIsInJldCIsIm9uQ2lyY2xlIiwiaW5zaWRlQ2lyY2xlIiwicmFkaXVzIiwib3V0Iiwic3FydCIsIm9uU3BoZXJlIiwiUEkiLCJ2IiwicGhpIiwidGhldGEiLCJhY29zIiwic2luIiwiY29zIiwiaW5zaWRlU3BoZXJlIiwiayIsImNicnQiLCJxdWF0ZXJuaW9uIiwidTEiLCJ1MiIsInUzIiwic3ExIiwic3EyIiwidGhldGExIiwidGhldGEyIiwid2VpZ2h0ZWQiLCJ3ZWlnaHRlZFNldCIsInNldCIsIndlaWdodGVkU2V0SW5kZXgiLCJnYXVzc2lhbiIsIm1lYW4iLCJzdGFuZGFyZERlcml2YXRpb24iLCJ2MSIsInYyIiwibXVsdGlwbGllciIsImxvZyIsInNlZWQiLCJvcHQiLCJ1bmRlZmluZWQiLCJ3ZWlnaHQiLCJ3ZWlnaHRzIiwidG90YWxXZWlnaHQiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJPYmplY3QiLCJoYXNPd25Qcm9wZXJ0eSIsInByb3RvdHlwZSIsInByb3BJc0VudW1lcmFibGUiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvT2JqZWN0IiwidmFsIiwib2JqZWN0QXNzaWduIiwiYXNzaWduIiwidGVzdDEiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwidGVzdDIiLCJmcm9tQ2hhckNvZGUiLCJ0ZXN0MyIsImZvckVhY2giLCJsZXR0ZXIiLCJrZXlzIiwiZXJyIiwic2hvdWxkVXNlTmF0aXZlIiwidGFyZ2V0Iiwic291cmNlIiwic3ltYm9scyIsImFyZ3VtZW50cyIsImtleSIsImJyb3dzZXIiLCJjb21tb25qc0dsb2JhbCIsInBlcmZvcm1hbmNlIiwibm93IiwiRGF0ZSIsImlzUHJvbWlzZV8xIiwib2JqIiwidGhlbiIsImlzRG9tIiwid2luZG93IiwiTm9kZSIsIm5vZGVUeXBlIiwibm9kZU5hbWUiLCJnZXRDbGllbnRBUEkiLCJhcmd1bWVudHMkMSIsImlzQnJvd3NlciIsImRvY3VtZW50IiwiY2FjaGUiLCJzaGltIiwicHVzaCIsInN1cHBvcnRzQXJndW1lbnRzQ2xhc3MiLCJzdXBwb3J0ZWQiLCJvYmplY3QiLCJ1bnN1cHBvcnRlZCIsInBTbGljZSIsImRlZXBFcXVhbCIsImFjdHVhbCIsImV4cGVjdGVkIiwib3B0cyIsImdldFRpbWUiLCJzdHJpY3QiLCJpc1VuZGVmaW5lZE9yTnVsbCIsImlzX2FyZ3VtZW50cyIsImlzQnVmZmVyIiwia2EiLCJrYiIsInNvcnQiLCJvYmpFcXVpdiIsImNvcHkiLCJnbG9iYWwiLCJ0b2tlbiIsInRpbWV6b25lIiwidGltZXpvbmVDbGlwIiwiZGF0ZUZvcm1hdCIsImRhdGUiLCJtYXNrIiwidXRjIiwiZ210Iiwia2luZE9mIiwiaXNOYU4iLCJtYXNrU2xpY2UiLCJtYXNrcyIsIl8iLCJkIiwiRCIsIm0iLCJIIiwiTSIsIkwiLCJnZXRUaW1lem9uZU9mZnNldCIsIlciLCJnZXRXZWVrIiwiTiIsImdldERheU9mV2VlayIsImZsYWdzIiwiZGQiLCJwYWQiLCJkZGQiLCJpMThuIiwiZGF5TmFtZXMiLCJkZGRkIiwibW0iLCJtbW0iLCJtb250aE5hbWVzIiwibW1tbSIsInl5IiwieXl5eSIsImhoIiwiSEgiLCJNTSIsInNzIiwidGltZU5hbWVzIiwidHQiLCJUIiwiVFQiLCJaIiwicG9wIiwiYWJzIiwiUyIsInRhcmdldFRodXJzZGF5IiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsImdldERhdGUiLCJzZXREYXRlIiwiZ2V0RGF5IiwiZmlyc3RUaHVyc2RheSIsImRzIiwic2V0SG91cnMiLCJnZXRIb3VycyIsImRvdyIsImRlZmF1bHQiLCJzaG9ydERhdGUiLCJtZWRpdW1EYXRlIiwibG9uZ0RhdGUiLCJmdWxsRGF0ZSIsInNob3J0VGltZSIsIm1lZGl1bVRpbWUiLCJsb25nVGltZSIsImlzb0RhdGUiLCJpc29UaW1lIiwiaXNvRGF0ZVRpbWUiLCJpc29VdGNEYXRlVGltZSIsImV4cGlyZXNIZWFkZXJGb3JtYXQiLCJyZXMiLCJyZXBlYXRTdHJpbmciLCJzdWJzdHIiLCJsaW5rIiwibm9vcCIsImRlZmF1bHRFeHRzIiwiZXh0ZW5zaW9uIiwicHJlZml4Iiwic3VmZml4Iiwic3VwcG9ydGVkRW5jb2RpbmdzIiwic3RyZWFtIiwiaXNTdGFydCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmlsZW5hbWUiLCJyZXNvbHZlRmlsZW5hbWUiLCJmcmFtZSIsImZ1bmMiLCJjbGllbnQiLCJvdXRwdXQiLCJldiIsInNhdmVEYXRhVVJMIiwiZGF0YVVSTCIsInNwbGl0SW5kZXgiLCJpbmRleE9mIiwiYmFzZTY0IiwiYnl0ZVN0cmluZyIsImF0b2IiLCJtaW1lTWF0Y2giLCJtaW1lIiwiYWIiLCJBcnJheUJ1ZmZlciIsImlhIiwiVWludDhBcnJheSIsImNoYXJDb2RlQXQiLCJCbG9iIiwiY3JlYXRlQmxvYkZyb21EYXRhVVJMIiwiYmxvYiIsInNhdmVCbG9iIiwiY3JlYXRlRWxlbWVudCIsInZpc2liaWxpdHkiLCJkb3dubG9hZCIsImhyZWYiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJvbmNsaWNrIiwic2V0VGltZW91dCIsInJldm9rZU9iamVjdFVSTCIsInBhcmVudEVsZW1lbnQiLCJyZW1vdmVDaGlsZCIsInJlbW92ZUF0dHJpYnV0ZSIsImNsaWNrIiwiZmlsZSIsInRvdGFsRnJhbWVzIiwiY2giLCJsYXllclN0ciIsInRvdGFsTGF5ZXJzIiwibGF5ZXIiLCJmaWx0ZXIiLCJCb29sZWFuIiwibmFtZSIsInRpbWVTdGFtcCIsImhhc2giLCJjb21tb25UeXBvcyIsImRpbWVuc2lvbiIsImFuaW1hdGVkIiwiYW5pbWF0aW5nIiwidW5pdCIsIlA1IiwicGl4ZWxsYXRlZCIsImxvb3BpbmciLCJwaXhlbFBlckluY2giLCJhbGxLZXlzIiwiY2hlY2tTZXR0aW5ncyIsInNldHRpbmdzIiwiY29uc29sZSIsIndhcm4iLCJpbmNsdWRlcyIsInBhcGVyU2l6ZXMiLCJyZWR1Y2UiLCJkaWN0IiwicHJlc2V0IiwiaXRlbSIsInVuaXRzIiwiZGltZW5zaW9ucyIsImNvbnZlcnNpb25zIiwic3lzdGVtIiwiZmFjdG9yIiwiY20iLCJwdCIsInBjIiwiaW4iLCJmdCIsImFuY2hvcnMiLCJtZXRyaWMiLCJyYXRpbyIsImltcGVyaWFsIiwiY29udmVydExlbmd0aCIsImZyb21Vbml0IiwidG9Vbml0IiwicGl4ZWxzUGVySW5jaCIsImRlZmluZWQkMSIsInByZWNpc2lvbiIsInJvdW5kUGl4ZWwiLCJ0b0ZhY3RvciIsImZyb21GYWN0b3IiLCJpc1RvUGl4ZWwiLCJmcm9tVW5pdERhdGEiLCJ0b1VuaXREYXRhIiwiYW5jaG9yIiwiZGVjaW1hbHMiLCJOdW1iZXIiLCJjb252ZXJ0RGlzdGFuY2UkMSIsInVuaXRzRnJvbSIsInVuaXRzVG8iLCJyZXNpemVDYW52YXMiLCJwcm9wcyIsIndpZHRoIiwiaGVpZ2h0Iiwic3R5bGVXaWR0aCIsInN0eWxlSGVpZ2h0IiwiY2FudmFzV2lkdGgiLCJjYW52YXNIZWlnaHQiLCJoYXNEaW1lbnNpb25zIiwiY2hlY2tJZkhhc0RpbWVuc2lvbnMiLCJleHBvcnRpbmciLCJzY2FsZVRvRml0Iiwic2NhbGVUb1ZpZXciLCJwaXhlbFJhdGlvIiwiZXhwb3J0UGl4ZWxSYXRpbyIsImJsZWVkIiwiZGV2aWNlUGl4ZWxSYXRpbyIsImJhc2VQaXhlbFJhdGlvIiwibWF4UGl4ZWxSYXRpbyIsInRyaW1XaWR0aCIsInRyaW1IZWlnaHQiLCJyZWYiLCJlbGVtZW50IiwicGFyZW50IiwiaW5uZXJXaWR0aCIsImlubmVySGVpZ2h0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0UGFyZW50U2l6ZSIsInBhcmVudFdpZHRoIiwicGFyZW50SGVpZ2h0IiwiZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQiLCJoaWdoZXN0IiwibG93ZXN0Iiwib3JpZW50YXRpb24iLCJsYW5kc2NhcGUiLCJyZWFsV2lkdGgiLCJyZWFsSGVpZ2h0IiwiYXNwZWN0Iiwid2luZG93QXNwZWN0Iiwic2NhbGVUb0ZpdFBhZGRpbmciLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsImdldENhbnZhc0NvbnRleHRfMSIsImNhbnZhcyIsImdsIiwiYXR0cmlicyIsImdldENvbnRleHQiLCJjcmVhdGVDYW52YXMiLCJjb250ZXh0Iiwib3duc0NhbnZhcyIsIm5ld0NhbnZhcyIsImNyZWF0ZUNhbnZhc0VsZW1lbnQiLCJhdHRyaWJ1dGVzIiwicGl4ZWxhdGVkIiwiaW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwibW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwib0ltYWdlU21vb3RoaW5nRW5hYmxlZCIsIndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCIsIm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwiU2tldGNoTWFuYWdlciIsIl9zZXR0aW5ncyIsIl9wcm9wcyIsIl9za2V0Y2giLCJfcmFmIiwiX3JlY29yZFRpbWVvdXQiLCJfbGFzdFJlZHJhd1Jlc3VsdCIsIl9pc1A1UmVzaXppbmciLCJfa2V5Ym9hcmRTaG9ydGN1dHMiLCJoYW5kbGVyIiwiZW5hYmxlZCIsImtleUNvZGUiLCJhbHRLZXkiLCJtZXRhS2V5IiwiY3RybEtleSIsInRvZ2dsZVBsYXkiLCJwcmV2ZW50RGVmYXVsdCIsImNvbW1pdCIsInNhdmUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImtleWJvYXJkU2hvcnRjdXRzIiwidGhpcyQxIiwiaG90a2V5cyIsInNoaWZ0S2V5IiwicmVjb3JkaW5nIiwiZW5kUmVjb3JkIiwicnVuIiwicmVjb3JkIiwiZXhwb3J0RnJhbWUiLCJwbGF5aW5nIiwicGF1c2UiLCJwbGF5IiwiX2FuaW1hdGVIYW5kbGVyIiwiYW5pbWF0ZSIsIl9yZXNpemVIYW5kbGVyIiwicmVzaXplIiwicmVuZGVyIiwic2tldGNoIiwiZ2V0IiwidGhpcyIsIl9jb21wdXRlUGxheWhlYWQiLCJjdXJyZW50VGltZSIsImR1cmF0aW9uIiwiX2NvbXB1dGVGcmFtZSIsInBsYXloZWFkIiwidGltZSIsImZwcyIsIl9jb21wdXRlQ3VycmVudEZyYW1lIiwiX2dldFNpemVQcm9wcyIsInZpZXdwb3J0V2lkdGgiLCJ2aWV3cG9ydEhlaWdodCIsImRpc3Bvc2UiLCJzdGFydGVkIiwiX3NpZ25hbEJlZ2luIiwidGljayIsIl9jYW5jZWxUaW1lb3V0cyIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiX2xhc3RUaW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZXJyb3IiLCJzdG9wIiwiZGVsdGFUaW1lIiwiZXhwb3J0T3B0cyIsIl9jcmVhdGVFeHBvcnRPcHRpb25zIiwiZnJhbWVJbnRlcnZhbCIsIl9zaWduYWxFbmQiLCJiZWdpblJlY29yZCIsIl93cmFwQ29udGV4dFNjYWxlIiwiY2F0Y2giLCJyZXNwb25zZSIsImJlZ2luIiwiZW5kIiwid2FzUmVjb3JkaW5nIiwic2VxdWVuY2UiLCJlbmNvZGluZyIsImVuY29kaW5nUXVhbGl0eSIsImRhdGVmb3JtYXQiLCJhbGwiLCJwcmVFeHBvcnQiLCJjb21taXRPcHRzIiwiX2RvRXhwb3J0RnJhbWUiLCJkcmF3UmVzdWx0IiwiY29uY2F0IiwiaGFzRGF0YU9iamVjdCIsImRhdGEiLCJ0b0RhdGFVUkwiLCJleHBvcnRDYW52YXMiLCJsYXllckxpc3QiLCJjdXJPcHQiLCJzYXZlUGFyYW0iLCJzYXZlUHJvbWlzZSIsInNhdmVGaWxlIiwic2F2ZVJlc3VsdCIsInNhdmVkRXZlbnRzIiwiZXZlbnRXaXRoT3V0cHV0IiwiZmluZCIsIm91dHB1dE5hbWUiLCJpc0NsaWVudCIsInNvbWUiLCJpc1N0cmVhbWluZyIsIm9mU2VxIiwicG9zdEV4cG9ydCIsImNiIiwiX3ByZVJlbmRlciIsIl9wb3N0UmVuZGVyIiwicDUiLCJzY2FsZSIsInNjYWxlWCIsInNjYWxlWSIsInNjYWxlQ29udGV4dCIsInJlc3RvcmUiLCJmbHVzaCIsInJlZHJhdyIsInN1Ym1pdERyYXdDYWxsIiwidXBkYXRlIiwibm90WWV0U3VwcG9ydGVkIiwib2xkQ2FudmFzIiwib2xkQ29udGV4dCIsInRpbWVPcHRzIiwidGltZVByb3BzIiwiZ2V0VGltZVByb3BzIiwiX3NldHVwR0xLZXkiLCJfYXBwZW5kQ2FudmFzSWZOZWVkZWQiLCJkcmF3Iiwib2xkU2l6ZXMiLCJuZXdQcm9wcyIsInBpeGVsRGVuc2l0eSIsInN0eWxlQ2FudmFzIiwibmV3U2l6ZXMiLCJjaGFuZ2VkIiwiZGVlcEVxdWFsXzEiLCJfc2l6ZUNoYW5nZWQiLCJmcmFtZUludGVydmFsTVMiLCJkZWx0YVRpbWVNUyIsImhhc0R1cmF0aW9uIiwiaXNOZXdGcmFtZSIsInBsYXliYWNrUmF0ZSIsIm5ld1RpbWUiLCJ0aW1lU2NhbGUiLCJpc0ZpbmlzaGVkIiwiaXNMb29wU3RhcnQiLCJsb29wIiwibGFzdEZyYW1lIiwiZGlzcGF0Y2giLCJtb3VudCIsInVubW91bnQiLCJkZXRhY2giLCJjdHgiLCJjbGVhciIsImNsZWFyQ29sb3IiLCJidWZmZXJEYXRhIiwiaGFzVG90YWxGcmFtZXMiLCJ0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiIsImR1cmF0aW9uRnJvbVRvdGFsRnJhbWVzIiwiSW5maW5pdHkiLCJzdGFydFRpbWUiLCJzdGFydEZyYW1lIiwiaGFzU3RhcnRUaW1lIiwiaGFzU3RhcnRGcmFtZSIsInNldHVwIiwibG9hZEFuZFJ1biIsImNhbnZhc1NrZXRjaCIsIm5ld1NldHRpbmdzIiwibG9hZCIsInVubG9hZCIsImRlc3Ryb3kiLCJjcmVhdGVTa2V0Y2giLCJwcmVsb2FkIiwiUDVDb25zdHJ1Y3RvciIsInA1U2tldGNoIiwiaXNHTCIsInJlbmRlcmVyIiwiV0VCR0wiLCJQMkQiLCJub0xvb3AiLCJzZXRBdHRyaWJ1dGVzIiwiX3JlbmRlcmVyIiwiZHJhd2luZ0NvbnRleHQiLCJsb2FkZXIiLCJhdHRhY2giLCJtZXNzYWdlIiwiQ0FDSEUiLCJydW50aW1lQ29sbGlzaW9ucyIsImhvdElEIiwiaXNIb3QiLCJob3QiLCJpZCIsImlzSW5qZWN0aW5nIiwicHJldmlvdXNEYXRhIiwiY2FjaGVHZXQiLCJuZXh0Iiwib2xkTWFuYWdlciIsIm1hbmFnZXIiLCJjYWNoZVB1dCIsIlBhcGVyU2l6ZXMiLCJ0MSIsInQyIiwidDMiLCJkZWx0YSIsInBvb2wiLCJHTE9CQUwiLCJzdGFydGRlbm9tIiwic2lnbmlmaWNhbmNlIiwib3ZlcmZsb3ciLCJvbGRSYW5kb20iLCJBUkM0Iiwia2V5bGVuIiwibWUiLCJqIiwiY291bnQiLCJmbGF0dGVuIiwiZGVwdGgiLCJwcm9wIiwidHlwIiwibWl4a2V5Iiwic21lYXIiLCJzdHJpbmdzZWVkIiwidG9zdHJpbmciLCJhdXRvc2VlZCIsImNyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsIm5hdmlnYXRvciIsInBsdWdpbnMiLCJzY3JlZW4iLCJhcHBseSIsIm9wdGlvbnMiLCJ1c2VfZW50cm9weSIsImVudHJvcHkiLCJhcmM0IiwicmVzZXRHbG9iYWwiLCJGMiIsIkcyIiwiRzMiLCJGNCIsIkc0IiwicmFuZG9tT3JTZWVkIiwiczAiLCJzMSIsInMyIiwibWFzaCIsIm1hc2hlciIsImFsZWEiLCJidWlsZFBlcm11dGF0aW9uVGFibGUiLCJwZXJtIiwicGVybU1vZDEyIiwiYXV4IiwiZ3JhZDMiLCJGbG9hdDMyQXJyYXkiLCJncmFkNCIsInhpbiIsInlpbiIsImkxIiwiajEiLCJuMCIsIm4xIiwibjIiLCJ4MCIsInkwIiwieDEiLCJ5MSIsIngyIiwieTIiLCJpaSIsImpqIiwidDAiLCJnaTAiLCJnaTEiLCJnaTIiLCJ6aW4iLCJuMyIsImsxIiwiaTIiLCJqMiIsImsyIiwiejAiLCJ6MSIsInoyIiwieDMiLCJ5MyIsInozIiwia2siLCJnaTMiLCJuNCIsImwxIiwibDIiLCJpMyIsImozIiwiazMiLCJsMyIsIncwIiwicmFua3giLCJyYW5reSIsInJhbmt6IiwicmFua3ciLCJ3MSIsIncyIiwidzMiLCJ4NCIsInk0IiwiejQiLCJ3NCIsImxsIiwidDQiLCJnaTQiLCJfYnVpbGRQZXJtdXRhdGlvblRhYmxlIiwiZGVmaW5lIiwiYW1kIiwiZmFjdG9yeSIsImdsb2JhbFRoaXMiLCJzZWxmIiwiVHdlYWtwYW5lIiwiQmxhZGVBcGkiLCJjb25zdHJ1Y3RvciIsImNvbnRyb2xsZXIiLCJjb250cm9sbGVyXyIsInZpZXciLCJkaXNhYmxlZCIsInZpZXdQcm9wcyIsImhpZGRlbiIsIlRwRXZlbnQiLCJUcENoYW5nZUV2ZW50IiwicHJlc2V0S2V5IiwibGFzdCIsInN1cGVyIiwiVHBVcGRhdGVFdmVudCIsIlRwRm9sZEV2ZW50IiwiZXhwYW5kZWQiLCJUcFRhYlNlbGVjdEV2ZW50IiwiaW5kZXgiLCJpc0VtcHR5IiwiZGVlcEVxdWFsc0FycmF5IiwiYTEiLCJhMiIsIkNSRUFURV9NRVNTQUdFX01BUCIsImFscmVhZHlkaXNwb3NlZCIsImludmFsaWRwYXJhbXMiLCJub21hdGNoaW5nY29udHJvbGxlciIsIm5vbWF0Y2hpbmd2aWV3IiwiSlNPTiIsInN0cmluZ2lmeSIsInBhcmFtcyIsIm5vdGJpbmRhYmxlIiwicHJvcGVydHlub3Rmb3VuZCIsInNob3VsZG5ldmVyaGFwcGVuIiwiVHBFcnJvciIsImNvbmZpZyIsIl9hIiwic3RhY2siLCJzdGF0aWMiLCJCaW5kaW5nVGFyZ2V0Iiwib3B0X2lkIiwib2JqXyIsImtleV8iLCJwcmVzZXRLZXlfIiwicmVhZCIsIndyaXRlIiwid3JpdGVQcm9wZXJ0eSIsInZhbHVlT2JqIiwiaXNCaW5kYWJsZSIsIm5vdEJpbmRhYmxlIiwicHJvcGVydHlOb3RGb3VuZCIsIkJ1dHRvbkFwaSIsImxhYmVsIiwidGl0bGUiLCJ2YWx1ZUNvbnRyb2xsZXIiLCJvbiIsImV2ZW50TmFtZSIsImJoIiwiYmluZCIsImVtaXR0ZXIiLCJFbWl0dGVyIiwib2JzZXJ2ZXJzXyIsIm9ic2VydmVycyIsIm9mZiIsIm9ic2VydmVyIiwiZW1pdCIsImV2ZW50IiwiUFJFRklYIiwiQ2xhc3NOYW1lIiwidmlld05hbWUiLCJvcHRfZWxlbWVudE5hbWUiLCJvcHRfbW9kaWZpZXIiLCJleHRyYWN0VmFsdWUiLCJyYXdWYWx1ZSIsImJpbmRWYWx1ZSIsImFwcGx5VmFsdWUiLCJoMSIsImgyIiwiaW5wdXQiLCJiaW5kVmFsdWVNYXAiLCJ2YWx1ZU1hcCIsInZhbHVlVG9DbGFzc05hbWUiLCJlbGVtIiwiY2xhc3NOYW1lIiwiYWN0aXZlIiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlIiwiYXBwbHlDbGFzcyIsImJpbmRWYWx1ZVRvVGV4dENvbnRlbnQiLCJ0ZXh0IiwidGV4dENvbnRlbnQiLCJjbGFzc05hbWUkcSIsIkJ1dHRvblZpZXciLCJkb2MiLCJiaW5kQ2xhc3NNb2RpZmllcnMiLCJidXR0b25FbGVtIiwiYmluZERpc2FibGVkIiwiYnV0dG9uRWxlbWVudCIsInRpdGxlRWxlbSIsIkJ1dHRvbkNvbnRyb2xsZXIiLCJvbkNsaWNrXyIsInNlbmRlciIsIkJvdW5kVmFsdWUiLCJpbml0aWFsVmFsdWUiLCJjb25zdHJhaW50XyIsImNvbnN0cmFpbnQiLCJlcXVhbHNfIiwiZXF1YWxzIiwicmF3VmFsdWVfIiwic2V0UmF3VmFsdWUiLCJmb3JjZUVtaXQiLCJjb25zdHJhaW5lZFZhbHVlIiwiY29uc3RyYWluIiwiUHJpbWl0aXZlVmFsdWUiLCJ2YWx1ZV8iLCJjcmVhdGVWYWx1ZSIsIlZhbHVlTWFwIiwidmFsTWFwXyIsImNvcmUiLCJjcmVhdGVDb3JlIiwiY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlciIsIm9wdGlvbmFsIiwic3VjY2VlZGVkIiwiY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcnMiLCJjdXN0b20iLCJudW1iZXIiLCJzdHJpbmciLCJmdW5jdGlvbiIsImNvbnN0YW50IiwicmF3Iiwia2V5VG9QYXJzZXJNYXAiLCJwYXJzZXIiLCJwYXJzZU9iamVjdCIsIml0ZW1QYXJzZXIiLCJwYXJzZUl0ZW0iLCJQYXJhbXNQYXJzZXJzIiwicmVxdWlyZWQiLCJwYXJzZVBhcmFtcyIsImNsYXNzTmFtZSRwIiwiUE9TX1RPX0NMQVNTX05BTUVfTUFQIiwidmVyeWZpcnN0IiwiZmlyc3QiLCJ2ZXJ5bGFzdCIsIkJsYWRlQ29udHJvbGxlciIsInBhcmVudF8iLCJibGFkZSIsInBvcyIsImhhbmRsZURpc3Bvc2UiLCJkaXNwb3NlRWxlbWVudCIsIlNWR19OUyIsInN1cHBvcnRzVG91Y2giLCJvbnRvdWNoc3RhcnQiLCJnZXRXaW5kb3dEb2N1bWVudCIsIkZ1bmN0aW9uIiwiSUNPTl9JRF9UT19JTk5FUl9IVE1MX01BUCIsImNoZWNrIiwiZHJvcGRvd24iLCJwMmRwYWQiLCJjcmVhdGVTdmdJY29uRWxlbWVudCIsImljb25JZCIsImNyZWF0ZUVsZW1lbnROUyIsImlubmVySFRNTCIsImluc2VydEVsZW1lbnRBdCIsImluc2VydEJlZm9yZSIsImNoaWxkcmVuIiwicmVtb3ZlRWxlbWVudCIsInJlbW92ZUNoaWxkRWxlbWVudHMiLCJmaW5kTmV4dFRhcmdldCIsInJlbGF0ZWRUYXJnZXQiLCJleHBsaWNpdE9yaWdpbmFsVGFyZ2V0IiwiY2xhc3NOYW1lJG8iLCJMYWJlbFZpZXciLCJsYWJlbEVsZW0iLCJjaGlsZE5vZGVzIiwicmVtb3ZlQ2hpbGROb2RlcyIsImZyYWciLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwibGluZSIsImNyZWF0ZVRleHROb2RlIiwibGluZU5vZGUiLCJjcmVhdGVMYWJlbE5vZGUiLCJsYWJlbEVsZW1lbnQiLCJ2YWx1ZUVsZW0iLCJ2YWx1ZUVsZW1lbnQiLCJMYWJlbENvbnRyb2xsZXIiLCJCdXR0b25CbGFkZVBsdWdpbiIsImFjY2VwdCIsImFyZ3MiLCJmcm9tT2JqZWN0IiwiYXBpIiwiVmFsdWVCbGFkZUNvbnRyb2xsZXIiLCJjcmVhdGVCbGFkZSIsInBvc2l0aW9ucyIsIkZvbGRhYmxlIiwiY29tcGxldGVkIiwiZXhwYW5kZWRIZWlnaHQiLCJzaG91bGRGaXhIZWlnaHQiLCJ0ZW1wb3JhcnlFeHBhbmRlZCIsInN0eWxlRXhwYW5kZWQiLCJleEhlaWdodCIsImJpbmRFeHBhbmRlZENsYXNzIiwiZXhwYW5kZWRDbGFzc05hbWUiLCJvbkV4cGFuZCIsImNsZWFuVXBUcmFuc2l0aW9uIiwiYXBwbHlIZWlnaHQiLCJmb2xkYWJsZSIsImJpbmRGb2xkYWJsZSIsImZvbGRlciIsImNvbnRhaW5lckVsZW1lbnQiLCJjYWxsYmFjayIsInRyYW5zaXRpb24iLCJkaXNhYmxlVHJhbnNpdGlvblRlbXBvcmFyaWx5IiwiY2xpZW50SGVpZ2h0IiwiY29tcHV0ZUV4cGFuZGVkRm9sZGVySGVpZ2h0IiwicHJvcGVydHlOYW1lIiwiUmFja0xpa2VBcGkiLCJyYWNrQXBpIiwicmFja0FwaV8iLCJOZXN0ZWRPcmRlcmVkU2V0IiwiZXh0cmFjdCIsIml0ZW1zXyIsImNhY2hlXyIsIlNldCIsIm9uU3ViTGlzdEFkZF8iLCJvblN1Ykxpc3RSZW1vdmVfIiwiZXh0cmFjdF8iLCJpdGVtcyIsImFsbEl0ZW1zIiwiaGFzIiwib3B0X2luZGV4Iiwic2hvdWxkTmV2ZXJIYXBwZW4iLCJzcGxpY2UiLCJzdWJMaXN0Iiwicm9vdCIsImRlbGV0ZSIsIklucHV0QmluZGluZ0FwaSIsIm9uQmluZGluZ0NoYW5nZV8iLCJlbWl0dGVyXyIsImJpbmRpbmciLCJyZWZyZXNoIiwiSW5wdXRCaW5kaW5nQ29udHJvbGxlciIsIk1vbml0b3JCaW5kaW5nQXBpIiwib25CaW5kaW5nVXBkYXRlXyIsIk1vbml0b3JCaW5kaW5nQ29udHJvbGxlciIsInRpY2tlciIsImZpbmRTdWJCbGFkZUFwaVNldCIsIlJhY2tBcGkiLCJnZXRBcGlCeUNvbnRyb2xsZXIiLCJhcGlTZXQiLCJjcmVhdGVCaW5kaW5nVGFyZ2V0Iiwib25SYWNrQWRkXyIsIm9uUmFja1JlbW92ZV8iLCJvblJhY2tJbnB1dENoYW5nZV8iLCJvblJhY2tNb25pdG9yVXBkYXRlXyIsImFwaVNldF8iLCJwb29sXyIsInJhY2siLCJiYyIsInNldFVwQXBpXyIsImFkZElucHV0Iiwib3B0X3BhcmFtcyIsImNyZWF0ZUlucHV0Iiwib3duZXJEb2N1bWVudCIsImFkZE1vbml0b3IiLCJjcmVhdGVNb25pdG9yIiwiYWRkRm9sZGVyIiwiYWRkQmxhZGUiLCJhZGRGb2xkZXJBc0JsYWRlIiwiYWRkQnV0dG9uIiwiYWRkQnV0dG9uQXNCbGFkZSIsImFkZFNlcGFyYXRvciIsImFkZFNlcGFyYXRvckFzQmxhZGUiLCJhZGRUYWIiLCJhZGRUYWJBc0JsYWRlIiwiZ2FwaSIsImNyZWF0ZUJsYWRlQXBpIiwiYmxhZGVDb250cm9sbGVyIiwiaXNSb290IiwiRm9sZGVyQXBpIiwicmFja0NvbnRyb2xsZXIiLCJSYWNrTGlrZUNvbnRyb2xsZXIiLCJQbGFpblZpZXciLCJmaW5kU3ViUmFjayIsIlJhY2tDb250cm9sbGVyIiwiZmluZFN1YkJsYWRlQ29udHJvbGxlclNldCIsIkJsYWRlUmFjayIsIm9uQmxhZGVQb3NpdGlvbnNDaGFuZ2VfIiwib25TZXRBZGRfIiwib25TZXRSZW1vdmVfIiwib25DaGlsZERpc3Bvc2VfIiwib25DaGlsZFBvc2l0aW9uc0NoYW5nZV8iLCJvbkNoaWxkSW5wdXRDaGFuZ2VfIiwib25DaGlsZE1vbml0b3JVcGRhdGVfIiwib25DaGlsZFZhbHVlQ2hhbmdlXyIsIm9uQ2hpbGRWaWV3UHJvcHNDaGFuZ2VfIiwib25EZXNjZW5kYW50TGF5b3V0XyIsIm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXyIsIm9uRGVzY2VuZGFudE1vbml0b3JVcGRhdGVfIiwiYmxhZGVfIiwiYmNTZXRfIiwiY29udHJvbGxlckNsYXNzIiwidXBkYXRlUG9zaXRpb25zXyIsInZpc2libGVJdGVtcyIsImZpcnN0VmlzaWJsZUl0ZW0iLCJsYXN0VmlzaWJsZUl0ZW0iLCJwcyIsIl9ldiIsImJjcyIsImZpbmRJbnB1dEJpbmRpbmdDb250cm9sbGVyIiwiZmluZE1vbml0b3JCaW5kaW5nQ29udHJvbGxlciIsImZpbmRWYWx1ZUJsYWRlQ29udHJvbGxlciIsImJsYWRlQ29udGFpbmVyQ2xhc3NOYW1lIiwiRm9sZGVyVmlldyIsImNsYXNzTmFtZV8iLCJmb2xkYWJsZV8iLCJ0aXRsZUVsZW1lbnQiLCJtYXJrRWxlbSIsImNvbnRhaW5lckVsZW0iLCJGb2xkZXJDb250cm9sbGVyIiwiY3JlYXRlIiwicmMiLCJvblRpdGxlQ2xpY2tfIiwiRm9sZGVyQmxhZGVQbHVnaW4iLCJMYWJlbGVkVmFsdWVDb250cm9sbGVyIiwiU2VwYXJhdG9yQXBpIiwiY2xhc3NOYW1lJG4iLCJTZXBhcmF0b3JWaWV3IiwiaHJFbGVtIiwiU2VwYXJhdG9yQ29udHJvbGxlciIsIlNlcGFyYXRvckJsYWRlUGx1Z2luIiwiY2xhc3NOYW1lJG0iLCJ2YWx1ZVRvTW9kaWZpZXIiLCJtb2RpZmllciIsIlZpZXdQcm9wcyIsIm9wdF9pbml0aWFsVmFsdWUiLCJfYiIsImNvcmVPYmoiLCJkaXNwb3NlZCIsImJpbmRUYWJJbmRleCIsInRhYkluZGV4IiwiY2xhc3NOYW1lJGwiLCJUYWJJdGVtVmlldyIsInNlbGVjdGVkIiwiVGFiSXRlbUNvbnRyb2xsZXIiLCJUYWJQYWdlQ29udHJvbGxlciIsIm9uSXRlbUNsaWNrXyIsImljXyIsIml0ZW1Qcm9wcyIsImNjXyIsIml0ZW1Db250cm9sbGVyIiwiY29udGVudENvbnRyb2xsZXIiLCJUYWJQYWdlQXBpIiwiY29udGVudFJhY2tBcGkiLCJUYWJBcGkiLCJvblBhZ2VBZGRfIiwib25QYWdlUmVtb3ZlXyIsIm9uU2VsZWN0XyIsInBhZ2VBcGlNYXBfIiwiTWFwIiwidGFiIiwic2VsZWN0ZWRJbmRleCIsInBhZ2VTZXQiLCJzZXRVcFBhZ2VBcGlfIiwicGFnZXMiLCJhZGRQYWdlIiwicmVtb3ZlUGFnZSIsIlRhYiIsIm9uSXRlbVNlbGVjdGVkQ2hhbmdlXyIsImVtcHR5Iiwia2VlcFNlbGVjdGlvbl8iLCJmaXJzdFNlbEluZGV4IiwiZmluZEluZGV4IiwiY2xhc3NOYW1lJGsiLCJUYWJWaWV3IiwiaXRlbXNFbGVtIiwiaXRlbXNFbGVtZW50IiwiY29udGVudHNFbGVtIiwiY29udGVudHNFbGVtZW50IiwiVGFiQ29udHJvbGxlciIsImNyIiwicGFnZVNldF8iLCJUYWJCbGFkZVBsdWdpbiIsIk1hbnVhbFRpY2tlciIsIkludGVydmFsVGlja2VyIiwiaW50ZXJ2YWwiLCJkaXNhYmxlZF8iLCJ0aW1lcklkXyIsIm9uVGlja18iLCJkb2NfIiwiaW50ZXJ2YWxfIiwic2V0VGltZXJfIiwiaW5hY3RpdmUiLCJjbGVhclRpbWVyXyIsIndpbiIsImRlZmF1bHRWaWV3IiwiY2xlYXJJbnRlcnZhbCIsInNldEludGVydmFsIiwiQ29tcG9zaXRlQ29uc3RyYWludCIsImNvbnN0cmFpbnRzIiwiZmluZENvbnN0cmFpbnQiLCJjb25zdHJhaW50Q2xhc3MiLCJ0bXBSZXN1bHQiLCJzYyIsIkxpc3RDb25zdHJhaW50IiwiUmFuZ2VDb25zdHJhaW50IiwibWF4VmFsdWUiLCJtaW5WYWx1ZSIsIlN0ZXBDb25zdHJhaW50Iiwic3RlcCIsIm9yaWdpbiIsImNsYXNzTmFtZSRqIiwiTGlzdFZpZXciLCJvblZhbHVlQ2hhbmdlXyIsInByb3BzXyIsInNlbGVjdEVsZW0iLCJvcHRpb25FbGVtIiwiZGF0YXNldCIsInNlbGVjdEVsZW1lbnQiLCJ1cGRhdGVfIiwiTGlzdENvbnRyb2xsZXIiLCJvblNlbGVjdENoYW5nZV8iLCJvcHRFbGVtIiwiY3VycmVudFRhcmdldCIsInNlbGVjdGVkT3B0aW9ucyIsIml0ZW1JbmRleCIsImNsYXNzTmFtZSRpIiwiUG9wdXBWaWV3Iiwic2hvd3MiLCJQb3B1cENvbnRyb2xsZXIiLCJjbGFzc05hbWUkaCIsIlRleHRWaWV3Iiwib25DaGFuZ2VfIiwiaW5wdXRFbGVtIiwiaW5wdXRFbGVtZW50IiwiZm9ybWF0dGVyIiwiVGV4dENvbnRyb2xsZXIiLCJvbklucHV0Q2hhbmdlXyIsInBhcnNlcl8iLCJwYXJzZWRWYWx1ZSIsImJvb2xGcm9tVW5rbm93biIsIkJvb2xlYW5Gb3JtYXR0ZXIiLCJib29sVG9TdHJpbmciLCJOdW1iZXJMaXRlcmFsTm9kZSIsImV2YWx1YXRlIiwiQklOQVJZX09QRVJBVElPTl9NQVAiLCJCaW5hcnlPcGVyYXRpb25Ob2RlIiwib3BlcmF0b3IiLCJsZWZ0IiwicmlnaHQiLCJvcCIsIlVOQVJZX09QRVJBVElPTl9NQVAiLCJVbmFyeU9wZXJhdGlvbk5vZGUiLCJleHByIiwiZXhwcmVzc2lvbiIsImNvbWJpbmVSZWFkZXIiLCJwYXJzZXJzIiwiY3Vyc29yIiwicmVhZFdoaXRlc3BhY2UiLCJyZWFkRGVjaW1hbERpZ2l0cyIsInJlYWRFeHBvbmVudFBhcnQiLCJzaSIsInNkcyIsInJlYWRTaWduZWRJbnRlZ2VyIiwicmVhZERlY2ltYWxJbnRlZ2VyTGl0ZXJhbCIsIm56ZCIsInJlYWROb25aZXJvRGlnaXQiLCJyZWFkRGVjaW1hbExpdGVyYWwiLCJkaWwiLCJkb3QiLCJkZHMiLCJyZWFkTm9uRGVjaW1hbEludGVnZXJMaXRlcmFsIiwiYmRzIiwicGFyc2VCaW5hcnlEaWdpdHMiLCJvZHMiLCJyZWFkT2N0YWxEaWdpdHMiLCJoZHMiLCJyZWFkSGV4RGlnaXRzIiwicmVhZE51bWVyaWNMaXRlcmFsIiwicGFyc2VQcmltYXJ5RXhwcmVzc2lvbiIsImV2YWx1YWJsZSIsInBhcnNlTGl0ZXJhbCIsInBhcnNlRXhwcmVzc2lvbiIsImNsIiwicGFyc2VQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiIsInJlYWRCaW5hcnlPcGVyYXRvciIsIm9wcyIsInN0YXJ0c1dpdGgiLCJwYXJzZUJpbmFyeU9wZXJhdGlvbkV4cHJlc3Npb24iLCJleHByUGFyc2VyIiwiZmlyc3RFeHByIiwibmV4dEV4cHIiLCJjcmVhdGVCaW5hcnlPcGVyYXRpb25FeHByZXNzaW9uUGFyc2VyIiwicGFyc2VVbmFyeUV4cHJlc3Npb24iLCJwYXJzZU51bWJlciIsInBhcnNlRWNtYU51bWJlckV4cHJlc3Npb24iLCJudW1iZXJGcm9tVW5rbm93biIsInB2IiwibnVtYmVyVG9TdHJpbmciLCJjcmVhdGVOdW1iZXJGb3JtYXR0ZXIiLCJkaWdpdHMiLCJ0b0ZpeGVkIiwiaW5uZXJGb3JtYXR0ZXIiLCJmb3JtYXRQZXJjZW50YWdlIiwic3RyaW5nRnJvbVVua25vd24iLCJmb3JtYXRTdHJpbmciLCJmaWxsQnVmZmVyIiwiYnVmZmVyIiwiYnVmZmVyU2l6ZSIsImluaXRpYWxpemVCdWZmZXIiLCJjcmVhdGVUcmltbWVkQnVmZmVyIiwiY29ubmVjdFZhbHVlcyIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJmb3J3YXJkIiwiYmFja3dhcmQiLCJjaGFuZ2luZyIsInByZXZlbnRGZWVkYmFjayIsImdldFN0ZXBGb3JLZXkiLCJiYXNlU3RlcCIsInVwS2V5IiwiZG93bktleSIsImdldFZlcnRpY2FsU3RlcEtleXMiLCJnZXRIb3Jpem9udGFsU3RlcEtleXMiLCJpc0Fycm93S2V5IiwiaXNWZXJ0aWNhbEFycm93S2V5IiwiY29tcHV0ZU9mZnNldCQxIiwicmVjdCIsInBhZ2VYIiwic2Nyb2xsWCIsInBhZ2VZIiwic2Nyb2xsWSIsInRvcCIsIlBvaW50ZXJIYW5kbGVyIiwibGFzdFRvdWNoXyIsIm9uRG9jdW1lbnRNb3VzZU1vdmVfIiwib25Eb2N1bWVudE1vdXNlVXBfIiwib25Nb3VzZURvd25fIiwib25Ub3VjaEVuZF8iLCJvblRvdWNoTW92ZV8iLCJvblRvdWNoU3RhcnRfIiwiZWxlbV8iLCJwYXNzaXZlIiwiY29tcHV0ZVBvc2l0aW9uXyIsIm9mZnNldCIsImJvdW5kcyIsInBvaW50IiwiZm9jdXMiLCJ0b3VjaCIsInRhcmdldFRvdWNoZXMiLCJjbGllbnRYIiwiY2xpZW50WSIsIm1hcFJhbmdlIiwic3RhcnQxIiwiZW5kMSIsInN0YXJ0MiIsImVuZDIiLCJnZXREZWNpbWFsRGlnaXRzIiwiY29uc3RyYWluUmFuZ2UiLCJsb29wUmFuZ2UiLCJjbGFzc05hbWUkZyIsIk51bWJlclRleHRWaWV3IiwiYXJyYXlQb3NpdGlvbiIsIm9uRHJhZ2dpbmdDaGFuZ2VfIiwiZHJhZ2dpbmdfIiwiZHJhZ2dpbmciLCJrbm9iRWxlbSIsImtub2JFbGVtZW50IiwiZ3VpZGVFbGVtIiwiYm9keUVsZW0iLCJndWlkZUJvZHlFbGVtXyIsImhlYWRFbGVtIiwiZ3VpZGVIZWFkRWxlbV8iLCJ0b29sdGlwRWxlbSIsInRvb2x0aXBFbGVtXyIsImFveCIsImFkeCIsInNldEF0dHJpYnV0ZU5TIiwiTnVtYmVyVGV4dENvbnRyb2xsZXIiLCJvcmlnaW5SYXdWYWx1ZV8iLCJvbklucHV0S2V5RG93bl8iLCJvbklucHV0S2V5VXBfIiwib25Qb2ludGVyRG93bl8iLCJvblBvaW50ZXJNb3ZlXyIsIm9uUG9pbnRlclVwXyIsImJhc2VTdGVwXyIsInNsaWRlclByb3BzXyIsInNsaWRlclByb3BzIiwicGgiLCJjb25zdHJhaW5WYWx1ZV8iLCJjb21wdXRlRHJhZ2dpbmdWYWx1ZV8iLCJjbGFzc05hbWUkZiIsIlNsaWRlclZpZXciLCJ0cmFja0VsZW0iLCJ0cmFja0VsZW1lbnQiLCJTbGlkZXJDb250cm9sbGVyIiwib25LZXlEb3duXyIsIm9uS2V5VXBfIiwib25Qb2ludGVyRG93bk9yTW92ZV8iLCJwdEhhbmRsZXJfIiwiaGFuZGxlUG9pbnRlckV2ZW50XyIsImNsYXNzTmFtZSRlIiwiU2xpZGVyVGV4dFZpZXciLCJzbGlkZXJFbGVtIiwic2xpZGVyVmlld18iLCJzbGlkZXJWaWV3IiwidGV4dEVsZW0iLCJ0ZXh0Vmlld18iLCJ0ZXh0VmlldyIsIlNsaWRlclRleHRDb250cm9sbGVyIiwic2xpZGVyQ18iLCJ0ZXh0Q18iLCJ0ZXh0UHJvcHMiLCJzbGlkZXJDb250cm9sbGVyIiwidGV4dENvbnRyb2xsZXIiLCJ3cml0ZVByaW1pdGl2ZSIsInBhcnNlTGlzdE9wdGlvbnMiLCJwYXJzZVBpY2tlckxheW91dCIsInBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXMiLCJub3JtYWxpemVMaXN0T3B0aW9ucyIsImNyZWF0ZUxpc3RDb25zdHJhaW50IiwiZmluZExpc3RJdGVtcyIsImdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyIsImdldEJhc2VTdGVwIiwiZmluZFN0ZXAiLCJnZXRTdWl0YWJsZURyYWdnaW5nU2NhbGUiLCJiYXNlIiwibG9nMTAiLCJjbGFzc05hbWUkZCIsIkNoZWNrYm94VmlldyIsIndyYXBwZXJFbGVtIiwiY2hlY2tlZCIsIkNoZWNrYm94Q29udHJvbGxlciIsIkJvb2xlYW5JbnB1dFBsdWdpbiIsInJlYWRlciIsIl9hcmdzIiwibGMiLCJjcmVhdGVDb25zdHJhaW50JDYiLCJ3cml0ZXIiLCJjbGFzc05hbWUkYyIsIkNvbG9yVmlldyIsInN3YXRjaEVsZW0iLCJzd2F0Y2hFbGVtZW50IiwidGV4dEVsZW1lbnQiLCJwaWNrZXJMYXlvdXQiLCJwaWNrZXJFbGVtIiwicGlja2VyRWxlbWVudCIsImhzdlRvUmdiSW50IiwiaHAiLCJzcCIsInZwIiwicnAiLCJncCIsImJwIiwicmVtb3ZlQWxwaGFDb21wb25lbnQiLCJjb21wcyIsImFwcGVuZEFscGhhQ29tcG9uZW50IiwiTU9ERV9DT05WRVJURVJfTUFQIiwiaHN2Iiwic2QiLCJscCIsImNtYXgiLCJjbWluIiwiZ2V0Q29sb3JNYXhDb21wb25lbnRzIiwibW9kZSIsImNvbnZlcnRDb2xvclR5cGUiLCJmbXMiLCJ0bXMiLCJpc1JnYkNvbG9yQ29tcG9uZW50IiwiQ29sb3IiLCJjb21wc18iLCJjb21wb25lbnRzIiwibXMiLCJjb25zdHJhaW5Db2xvckNvbXBvbmVudHMiLCJ0b1JnYmFPYmplY3QiLCJpc1JnYkNvbG9yT2JqZWN0IiwiY29tcHMxIiwiY29tcHMyIiwiZ2V0Q29tcG9uZW50cyIsIm9wdF9tb2RlIiwiaW50Q29tcHMiLCJjb252ZXJ0Q29sb3IiLCJyZ2JDb21wcyIsImNsYXNzTmFtZSRiIiwiQ29sb3JQaWNrZXJWaWV3IiwiYWxwaGFWaWV3c18iLCJoc3ZFbGVtIiwic3ZFbGVtIiwic3ZQYWxldHRlVmlld18iLCJzdlBhbGV0dGVWaWV3IiwiaEVsZW0iLCJoUGFsZXR0ZVZpZXdfIiwiaFBhbGV0dGVWaWV3IiwicmdiRWxlbSIsImFscGhhVmlld3MiLCJwYWxldHRlIiwiYUVsZW0iLCJhcEVsZW0iLCJhdEVsZW0iLCJhbGxGb2N1c2FibGVFbGVtZW50cyIsImVsZW1zIiwibW9kZVNlbGVjdEVsZW1lbnQiLCJ0ZXh0Vmlld3MiLCJwYXJzZUNvbG9yVHlwZSIsInBhcnNlQ29sb3JJbnB1dFBhcmFtcyIsInBpY2tlciIsImdldEJhc2VTdGVwRm9yQ29sb3IiLCJmb3JBbHBoYSIsImV4dHJhY3RDb2xvclR5cGUiLCJwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZSIsIkFOR0xFX1RPX0RFR19NQVAiLCJkZWciLCJhbmdsZSIsImdyYWQiLCJyYWQiLCJ0dXJuIiwicGFyc2VDc3NOdW1iZXJPckFuZ2xlIiwicGFyc2VGdW5jdGlvbmFsUmdiQ29sb3JDb21wb25lbnRzIiwiY3JlYXRlRnVuY3Rpb25hbFJnYkNvbG9yUGFyc2VyIiwicGFyc2VGdW5jdGlvbmFsUmdiYUNvbG9yQ29tcG9uZW50cyIsImNyZWF0ZUZ1bmN0aW9uYWxSZ2JhQ29sb3JQYXJzZXIiLCJwYXJzZUhzbENvbG9yQ29tcG9uZW50cyIsImNyZWF0ZUhzbENvbG9yUGFyc2VyIiwicGFyc2VIc2xhQ29sb3JDb21wb25lbnRzIiwiY3JlYXRlSHNsYUNvbG9yUGFyc2VyIiwicGFyc2VIZXhSZ2JDb2xvckNvbXBvbmVudHMiLCJtUmdiIiwibVJyZ2diYiIsInBhcnNlSGV4UmdiYUNvbG9yQ29tcG9uZW50cyIsInBhcnNlT2JqZWN0UmdiQ29sb3JDb21wb25lbnRzIiwiY3JlYXRlT2JqZWN0UmdiQ29sb3JQYXJzZXIiLCJwYXJzZU9iamVjdFJnYmFDb2xvckNvbXBvbmVudHMiLCJjcmVhdGVPYmplY3RSZ2JhQ29sb3JQYXJzZXIiLCJQQVJTRVJfQU5EX1JFU1VMVCIsIm5vdGF0aW9uIiwiZGV0ZWN0U3RyaW5nQ29sb3JGb3JtYXQiLCJwcmV2IiwiZGV0ZWN0aW9uIiwiZGV0ZWN0U3RyaW5nQ29sb3IiLCJUWVBFX1RPX1BBUlNFUlMiLCJpbnQiLCJmbG9hdCIsImNyZWF0ZUNvbG9yU3RyaW5nUGFyc2VyIiwiemVyb2ZpbGwiLCJjb21wIiwiY29sb3JUb0hleFJnYlN0cmluZyIsImNvbG9yVG9IZXhSZ2JhU3RyaW5nIiwicmdiYUNvbXBzIiwiY29sb3JUb0Z1bmN0aW9uYWxSZ2JTdHJpbmciLCJvcHRfdHlwZSIsImNyZWF0ZUZ1bmN0aW9uYWxSZ2JDb2xvckZvcm1hdHRlciIsImNvbG9yVG9GdW5jdGlvbmFsUmdiYVN0cmluZyIsImFGb3JtYXR0ZXIiLCJyZ2JGb3JtYXR0ZXIiLCJjcmVhdGVGdW5jdGlvbmFsUmdiYUNvbG9yRm9ybWF0dGVyIiwiY29sb3JUb09iamVjdFJnYlN0cmluZyIsImNyZWF0ZU9iamVjdFJnYkNvbG9yRm9ybWF0dGVyIiwiY29sb3JUb09iamVjdFJnYmFTdHJpbmciLCJjcmVhdGVPYmplY3RSZ2JhQ29sb3JGb3JtYXR0ZXIiLCJGT1JNQVRfQU5EX1NUUklOR0lGSUVSUyIsImZvcm1hdCIsInN0cmluZ2lmaWVyIiwiZm9ybWF0dGVycyIsImZpbmRDb2xvclN0cmluZ2lmaWVyIiwiZmFzIiwiZjEiLCJmMiIsImNsYXNzTmFtZSRhIiwiQVBhbGV0dGVWaWV3IiwiYmFyRWxlbSIsImNvbG9yRWxlbSIsImNvbG9yRWxlbV8iLCJtYXJrZXJFbGVtIiwibWFya2VyRWxlbV8iLCJwcmV2aWV3RWxlbSIsInByZXZpZXdFbGVtXyIsImxlZnRDb2xvciIsInJpZ2h0Q29sb3IiLCJncmFkaWVudENvbXBzIiwiYmFja2dyb3VuZENvbG9yIiwiQVBhbGV0dGVDb250cm9sbGVyIiwiY2xhc3NOYW1lJDkiLCJDb2xvclRleHRWaWV3IiwibW9kZUVsZW0iLCJtb2RlRWxlbV8iLCJjcmVhdGVNb2RlU2VsZWN0RWxlbWVudCIsIm1vZGVNYXJrZXJFbGVtIiwidGV4dHNFbGVtIiwidGV4dHNFbGVtXyIsInRleHRWaWV3c18iLCJhcHBseVRleHRWaWV3c18iLCJjb2xvck1vZGUiLCJjb21wRWxlbSIsImNyZWF0ZUNvbnN0cmFpbnQkNSIsImNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXIiLCJkcmFnZ2luZ1NjYWxlIiwiY29sb3JUeXBlIiwiQ29sb3JUZXh0Q29udHJvbGxlciIsIm9uTW9kZVNlbGVjdENoYW5nZV8iLCJjb2xvclR5cGVfIiwiY2NzXyIsImNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXJzXyIsImNjIiwiY2NzIiwiY3MiLCJwaWNrZWRNb2RlIiwiY2xhc3NOYW1lJDgiLCJIUGFsZXR0ZVZpZXciLCJIUGFsZXR0ZUNvbnRyb2xsZXIiLCJjbGFzc05hbWUkNyIsIlN2UGFsZXR0ZVZpZXciLCJjYW52YXNFbGVtIiwiY2FudmFzRWxlbWVudCIsImdldENhbnZhc0NvbnRleHQiLCJoc3ZDb21wcyIsImltZ0RhdGEiLCJnZXRJbWFnZURhdGEiLCJpeSIsIml4IiwicHV0SW1hZ2VEYXRhIiwiU3ZQYWxldHRlQ29udHJvbGxlciIsInNhdHVyYXRpb24iLCJkdiIsIkNvbG9yUGlja2VyQ29udHJvbGxlciIsImhQYWxldHRlQ18iLCJzdlBhbGV0dGVDXyIsImFscGhhSWNzXyIsInN1cHBvcnRzQWxwaGEiLCJjbGFzc05hbWUkNiIsIkNvbG9yU3dhdGNoVmlldyIsInN3YXRjaEVsZW1fIiwiQ29sb3JTd2F0Y2hDb250cm9sbGVyIiwiQ29sb3JDb250cm9sbGVyIiwib25CdXR0b25CbHVyXyIsIm9uQnV0dG9uQ2xpY2tfIiwib25Qb3B1cENoaWxkQmx1cl8iLCJvblBvcHVwQ2hpbGRLZXlkb3duXyIsInN3YXRjaENfIiwicG9wQ18iLCJwaWNrZXJDIiwicGlja2VyQ18iLCJuZXh0VGFyZ2V0IiwiY29udGFpbnMiLCJjb2xvclRvUmdiTnVtYmVyIiwiY29sb3JUb1JnYmFOdW1iZXIiLCJjb2xvckZyb21SZ2JOdW1iZXIiLCJjb2xvckZyb21SZ2JhTnVtYmVyIiwic2hvdWxkU3VwcG9ydEFscGhhJDEiLCJpbnB1dFBhcmFtcyIsImNyZWF0ZUZvcm1hdHRlciQxIiwiTnVtYmVyQ29sb3JJbnB1dFBsdWdpbiIsImlzRm9yQ29sb3IiLCJjb2xvclRvTnVtYmVyIiwiY3JlYXRlQ29sb3JOdW1iZXJXcml0ZXIiLCJjcmVhdGVDb2xvck9iamVjdFJlYWRlciIsImlzQ29sb3JPYmplY3QiLCJjb2xvckZyb21PYmplY3QiLCJjcmVhdGVDb2xvck9iamVjdEZvcm1hdHRlciIsIk9iamVjdENvbG9ySW5wdXRQbHVnaW4iLCJjcmVhdGVDb2xvck9iamVjdFdyaXRlciIsImlzUmdiYUNvbG9yT2JqZWN0IiwiaW5WYWx1ZSIsIndyaXRlUmdiYUNvbG9yT2JqZWN0Iiwid3JpdGVSZ2JDb2xvck9iamVjdCIsIlN0cmluZ0NvbG9ySW5wdXRQbHVnaW4iLCJjcmVhdGVDb2xvclN0cmluZ0JpbmRpbmdSZWFkZXIiLCJjcmVhdGVDb2xvclN0cmluZ1dyaXRlciIsIlBvaW50TmRDb25zdHJhaW50IiwiYXNtXyIsImFzc2VtYmx5IiwidG9Db21wb25lbnRzIiwiZnJvbUNvbXBvbmVudHMiLCJjbGFzc05hbWUkNSIsIlBvaW50TmRUZXh0VmlldyIsImF4aXNFbGVtIiwiUG9pbnROZFRleHRDb250cm9sbGVyIiwiYWNzXyIsImF4ZXMiLCJjcmVhdGVBeGlzQ29udHJvbGxlciIsImFjIiwiY3JlYXRlU3RlcENvbnN0cmFpbnQiLCJjcmVhdGVSYW5nZUNvbnN0cmFpbnQiLCJlc3RpbWF0ZVN1aXRhYmxlUmFuZ2UiLCJmaW5kUmFuZ2UiLCJOdW1iZXJJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbnN0cmFpbnQkNCIsIlBvaW50MmQiLCJQb2ludDJkQXNzZW1ibHkiLCJjbGFzc05hbWUkNCIsIlBvaW50MmRWaWV3IiwiY2xhc3NOYW1lJDMiLCJQb2ludDJkUGlja2VyVmlldyIsIm9uRm9sZGFibGVDaGFuZ2VfIiwiaW52ZXJ0c1lfIiwiaW52ZXJ0c1kiLCJtYXhWYWx1ZV8iLCJsYXlvdXQiLCJwYWRFbGVtIiwicGFkRWxlbWVudCIsInN2Z0VsZW0iLCJzdmdFbGVtXyIsInhBeGlzRWxlbSIsInlBeGlzRWxlbSIsImxpbmVFbGVtIiwibGluZUVsZW1fIiwicHgiLCJweSIsImlweSIsImNvbXB1dGVPZmZzZXQiLCJiYXNlU3RlcHMiLCJQb2ludDJkUGlja2VyQ29udHJvbGxlciIsIm9uUGFkS2V5RG93bl8iLCJvblBhZEtleVVwXyIsImJhc2VTdGVwc18iLCJkeCIsImR5IiwiUG9pbnQyZENvbnRyb2xsZXIiLCJvblBhZEJ1dHRvbkJsdXJfIiwib25QYWRCdXR0b25DbGlja18iLCJwYWRDIiwicG9pbnQyZEZyb21Vbmtub3duIiwiaXNPYmplY3QiLCJ3cml0ZVBvaW50MmQiLCJjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50IiwicnMiLCJnZXRTdWl0YWJsZU1heERpbWVuc2lvblZhbHVlIiwiZ2V0U3VpdGFibGVNYXhWYWx1ZSIsInljIiwieHIiLCJ5ciIsImNyZWF0ZUF4aXMkMiIsInNob3VsZEludmVydFkiLCJ5UGFyYW1zIiwiaW52ZXJ0ZWQiLCJQb2ludDJkSW5wdXRQbHVnaW4iLCJjcmVhdGVDb25zdHJhaW50JDMiLCJQb2ludDNkIiwiUG9pbnQzZEFzc2VtYmx5IiwicG9pbnQzZEZyb21Vbmtub3duIiwid3JpdGVQb2ludDNkIiwiY3JlYXRlQXhpcyQxIiwiUG9pbnQzZElucHV0UGx1Z2luIiwiY3JlYXRlQ29uc3RyYWludCQyIiwiUG9pbnQ0ZCIsIlBvaW50NGRBc3NlbWJseSIsInBvaW50NGRGcm9tVW5rbm93biIsIndyaXRlUG9pbnQ0ZCIsIlBvaW50NGRJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbnN0cmFpbnQkMSIsImNyZWF0ZUF4aXMiLCJTdHJpbmdJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbnN0cmFpbnQiLCJDb25zdGFudHMiLCJkZWZhdWx0SW50ZXJ2YWwiLCJkZWZhdWx0TGluZUNvdW50IiwiY2xhc3NOYW1lJDIiLCJNdWx0aUxvZ1ZpZXciLCJvblZhbHVlVXBkYXRlXyIsImZvcm1hdHRlcl8iLCJ0ZXh0YXJlYUVsZW0iLCJsaW5lQ291bnQiLCJyZWFkT25seSIsInRleHRhcmVhRWxlbV8iLCJzaG91bGRTY3JvbGwiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJsaW5lcyIsIk11bHRpTG9nQ29udHJvbGxlciIsImNsYXNzTmFtZSQxIiwiU2luZ2xlTG9nVmlldyIsInZhbHVlcyIsImxhc3RWYWx1ZSIsIlNpbmdsZUxvZ0NvbnRyb2xsZXIiLCJCb29sZWFuTW9uaXRvclBsdWdpbiIsIkdyYXBoTG9nVmlldyIsIm9uQ3Vyc29yQ2hhbmdlXyIsImN1cnNvcl8iLCJncmFwaEVsZW1lbnQiLCJtYXhJbmRleCIsInBvaW50cyIsInR4IiwidHkiLCJHcmFwaExvZ0NvbnRyb2xsZXIiLCJvbkdyYXBoTW91c2VNb3ZlXyIsIm9uR3JhcGhNb3VzZUxlYXZlXyIsIm9uR3JhcGhQb2ludGVyRG93bl8iLCJvbkdyYXBoUG9pbnRlck1vdmVfIiwib25HcmFwaFBvaW50ZXJVcF8iLCJvZmZzZXRYIiwiY3JlYXRlRm9ybWF0dGVyIiwic2hvdWxkU2hvd0dyYXBoIiwiTnVtYmVyTW9uaXRvclBsdWdpbiIsImRlZmF1bHRCdWZmZXJTaXplIiwiX2MiLCJjcmVhdGVHcmFwaE1vbml0b3IiLCJjcmVhdGVUZXh0TW9uaXRvciIsIlN0cmluZ01vbml0b3JQbHVnaW4iLCJtdWx0aWxpbmUiLCJJbnB1dEJpbmRpbmciLCJ0YXJnZXRWYWx1ZSIsIndyaXRlXyIsIk1vbml0b3JCaW5kaW5nIiwicmVhZGVyXyIsIm5ld1ZhbHVlIiwibmV3QnVmZmVyIiwiY3JlYXRlUHVzaGVkQnVmZmVyIiwiY3JlYXRlVGlja2VyIiwiUGx1Z2luUG9vbCIsInBsdWdpbnNNYXBfIiwiYmxhZGVzIiwiaW5wdXRzIiwibW9uaXRvcnMiLCJnZXRBbGwiLCJyZWdpc3RlciIsInVuc2hpZnQiLCJwbHVnaW4iLCJ2YWx1ZUFyZ3MiLCJjcmVhdGVJbnB1dEJpbmRpbmdDb250cm9sbGVyIiwiUCIsImNyZWF0ZU1vbml0b3JCaW5kaW5nQ29udHJvbGxlciIsImNyZWF0ZUJsYWRlQ29udHJvbGxlciIsIkxpc3RBcGkiLCJTbGlkZXJBcGkiLCJUZXh0QXBpIiwiTGlzdEJsYWRlUGx1Z2luIiwiaWMiLCJSb290QXBpIiwiaW1wb3J0UHJlc2V0IiwidGFyZ2V0cyIsImltcG9ydFByZXNldEpzb24iLCJpYmMiLCJleHBvcnRQcmVzZXQiLCJleHBvcnRQcmVzZXRKc29uIiwibWJjIiwiUm9vdENvbnRyb2xsZXIiLCJTbGlkZXJCbGFkZVBsdWdpbiIsInZjIiwiVGV4dEJsYWRlUGx1Z2luIiwiZW1iZWRTdHlsZSIsImNzcyIsInF1ZXJ5U2VsZWN0b3IiLCJzdHlsZUVsZW0iLCJ0cFN0eWxlIiwiaGVhZCIsIlZFUlNJT04iLCJwcmVyZWxlYXNlIiwiY29yZUNvbXBzIiwibWFqb3IiLCJtaW5vciIsInBhdGNoIiwiUGFuZSIsIm9wdF9jb25maWciLCJjcmVhdGVEZWZhdWx0UGx1Z2luUG9vbCIsImNvbnRhaW5lckVsZW1fIiwiY29udGFpbmVyIiwiY3JlYXRlRGVmYXVsdFdyYXBwZXJFbGVtZW50IiwidXNlc0RlZmF1bHRXcmFwcGVyXyIsInNldFVwRGVmYXVsdFBsdWdpbnNfIiwiYWxyZWFkeURpc3Bvc2VkIiwicGFyZW50RWxlbSIsInJlZ2lzdGVyUGx1Z2luIiwiYnVuZGxlIiwiZW1iZWRQbHVnaW5TdHlsZV8iLCJkZWZpbmVQcm9wZXJ0eSIsIl9jYW52YXNTa2V0Y2giLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3JhbmRvbSIsIl9jb2xvciIsIlR3ZWFrUGFuZSIsImNlbGwiLCJyb3dzIiwic2NhbGVNaW4iLCJzY2FsZU1heCIsImZyZXEiLCJhbXAiLCJmb250IiwiZm9udFNpemUiLCJ0eXBlQ2FudmFzIiwidHlwZUNvbnRleHQiLCJjb2xzIiwibnVtX2NlbGxzIiwiZmlsbFN0eWxlIiwiZmlsbFJlY3QiLCJ0ZXh0QmFzZWxpbmUiLCJtZXRyaWNzIiwibWVhc3VyZVRleHQiLCJteCIsImFjdHVhbEJvdW5kaW5nQm94TGVmdCIsIm15IiwiYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQiLCJtdyIsImFjdHVhbEJvdW5kaW5nQm94UmlnaHQiLCJtaCIsImFjdHVhbEJvdW5kaW5nQm94RGVzY2VudCIsInRyYW5zbGF0ZSIsImJlZ2luUGF0aCIsInN0cm9rZSIsImZpbGxUZXh0IiwidHlwZURhdGEiLCJ0ZXh0QWxpZ24iLCJwX2ZnIiwiZ2x5cGgiLCJnZXRHbHlwaCIsImFyYyIsImZpbGwiLCJnbHlwaHMiLCJ0b1VwcGVyQ2FzZSIsImRvdHMiLCJwaXhlbHMiLCJjaGFycyIsImNyZWF0ZVBhbmUiLCJhc3luYyIsInN0YXJ0IiwiQ0FOVkFTX1NLRVRDSF9ERUZBVUxUX1NUT1JBR0VfS0VZIiwibG9jYXRpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi91c3IvbG9jYWwvbGliL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLWNsaS9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9jb2xvci5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL2Nzcy1jb2xvci1uYW1lcy5qc29uIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvY3NzLWNvbG9yLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvaGV4LXRvLXJnYmEuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9oc2wuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9yZWxhdGl2ZS1sdW1pbmFuY2UuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9yZ2JhLXRvLWhleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL3dyYXAuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9yaWdodC1ub3cvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2lzLXByb21pc2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9pcy1kb20vaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi91dGlsLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvcmVwZWF0LXN0cmluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvbGliL2tleXMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2xpYi9pc19hcmd1bWVudHMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGF0ZWZvcm1hdC9saWIvZGF0ZWZvcm1hdC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL3BhZC1sZWZ0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvc2F2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2FjY2Vzc2liaWxpdHkuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9wYXBlci1zaXplcy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2NvbnZlcnQtbGVuZ3RoL2NvbnZlcnQtbGVuZ3RoLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGVmaW5lZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2Rpc3RhbmNlcy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUvcmVzaXplQ2FudmFzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZ2V0LWNhbnZhcy1jb250ZXh0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY29yZS9jcmVhdGVDYW52YXMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL1NrZXRjaE1hbmFnZXIuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL2tleWJvYXJkU2hvcnRjdXRzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY2FudmFzLXNrZXRjaC5qcyIsIm5vZGVfbW9kdWxlcy9kZWZpbmVkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zsb2F0LWhzbDJyZ2IvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmxvYXQtcmdiMmhzbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zZWVkLXJhbmRvbS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zaW1wbGV4LW5vaXNlL3NpbXBsZXgtbm9pc2UuanMiLCJub2RlX21vZHVsZXMvdHdlYWtwYW5lL2Rpc3QvdHdlYWtwYW5lLmpzIiwic2tldGNoZXMvc2tldGNoLTA0LmpzIiwiY2FudmFzLXNrZXRjaC1jbGkvaW5qZWN0ZWQvc3RvcmFnZS1rZXkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsInZhciBjc3NDb2xvciA9IHJlcXVpcmUoJy4vbGliL2Nzcy1jb2xvcicpO1xudmFyIG5hbWVzID0gcmVxdWlyZSgnLi9saWIvY3NzLWNvbG9yLW5hbWVzLmpzb24nKTtcbnZhciByZ2JMdW1pbmFuY2UgPSByZXF1aXJlKCcuL2xpYi9yZWxhdGl2ZS1sdW1pbmFuY2UnKTtcbnZhciBIU0xVdGlsID0gcmVxdWlyZSgnLi9saWIvaHNsJyk7XG52YXIgaGV4VG9SR0JBID0gcmVxdWlyZSgnLi9saWIvaGV4LXRvLXJnYmEnKTtcbnZhciBSR0JBVG9IZXggPSByZXF1aXJlKCcuL2xpYi9yZ2JhLXRvLWhleCcpO1xuXG5tb2R1bGUuZXhwb3J0cy5wYXJzZSA9IGNzc0NvbG9yLnBhcnNlO1xubW9kdWxlLmV4cG9ydHMuc3R5bGUgPSBjc3NDb2xvci5zdHlsZTtcbm1vZHVsZS5leHBvcnRzLm5hbWVzID0gbmFtZXM7XG5cbm1vZHVsZS5leHBvcnRzLnJlbGF0aXZlTHVtaW5hbmNlID0gZnVuY3Rpb24gcmVsYXRpdmVMdW1pbmFuY2UgKGNvbG9yKSB7XG4gIHZhciByZXN1bHQgPSBtb2R1bGUuZXhwb3J0cy5wYXJzZShjb2xvcik7XG4gIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHJnYkx1bWluYW5jZShyZXN1bHQucmdiKTtcbn07XG5cbi8vIEV4dHJhY3RlZCBmcm9tIEB0bWN3IC8gd2NhZy1jb250cmFzdFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RtY3cvd2NhZy1jb250cmFzdFxubW9kdWxlLmV4cG9ydHMuY29udHJhc3RSYXRpbyA9IGZ1bmN0aW9uIGNvbnRyYXN0UmF0aW8gKGNvbG9yQSwgY29sb3JCKSB7XG4gIHZhciBhID0gbW9kdWxlLmV4cG9ydHMucmVsYXRpdmVMdW1pbmFuY2UoY29sb3JBKTtcbiAgdmFyIGIgPSBtb2R1bGUuZXhwb3J0cy5yZWxhdGl2ZUx1bWluYW5jZShjb2xvckIpO1xuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gIHZhciBsMSA9IE1hdGgubWF4KGEsIGIpO1xuICB2YXIgbDIgPSBNYXRoLm1pbihhLCBiKTtcbiAgcmV0dXJuIChsMSArIDAuMDUpIC8gKGwyICsgMC4wNSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5vZmZzZXRIU0wgPSBmdW5jdGlvbiAoY29sb3IsIGgsIHMsIGwpIHtcbiAgdmFyIHJlc3VsdCA9IG1vZHVsZS5leHBvcnRzLnBhcnNlKGNvbG9yKTtcbiAgaWYgKCFyZXN1bHQpIHJldHVybiBudWxsO1xuICByZXN1bHQuaHNsYVswXSArPSBoIHx8IDA7XG4gIHJlc3VsdC5oc2xhWzFdID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCByZXN1bHQuaHNsYVsxXSArIChzIHx8IDApKSk7XG4gIHJlc3VsdC5oc2xhWzJdID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCByZXN1bHQuaHNsYVsyXSArIChsIHx8IDApKSk7XG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cy5wYXJzZSh7IGhzbGE6IHJlc3VsdC5oc2xhIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMuYmxlbmQgPSBmdW5jdGlvbiAoYmFja2dyb3VuZCwgZm9yZWdyb3VuZCwgb3BhY2l0eSkge1xuICB2YXIgYmcgPSBtb2R1bGUuZXhwb3J0cy5wYXJzZShiYWNrZ3JvdW5kKTtcbiAgdmFyIGZnID0gbW9kdWxlLmV4cG9ydHMucGFyc2UoZm9yZWdyb3VuZCk7XG4gIGlmIChiZyA9PSBudWxsIHx8IGZnID09IG51bGwpIHJldHVybiBudWxsO1xuXG4gIHZhciBjMCA9IGJnLnJnYmE7XG4gIHZhciBjMSA9IGZnLnJnYmE7XG4gIG9wYWNpdHkgPSB0eXBlb2Ygb3BhY2l0eSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUob3BhY2l0eSkgPyBvcGFjaXR5IDogMS4wO1xuICB2YXIgYWxwaGEgPSBvcGFjaXR5ICogYzFbM107XG4gIGlmIChhbHBoYSA+PSAxKSB7XG4gICAgLy8gZm9yZWdyb3VuZCBpcyBvcGFxdWUgc28gbm8gYmxlbmQgcmVxdWlyZWRcbiAgICByZXR1cm4gZmc7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICBjMVtpXSA9IGMxW2ldICogYWxwaGEgKyBjMFtpXSAqIChjMFszXSAqICgxIC0gYWxwaGEpKTtcbiAgfVxuICBjMVszXSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGFscGhhICsgYzBbM10gKiAoMSAtIGFscGhhKSkpO1xuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMucGFyc2UoYzEpOyAvLyByZS1wYXJzZSB0byBnZXQgbmV3IG1ldGFkYXRhXG59O1xuXG4vLyBFeHBvc2VkIGJ1dCBub3QgeWV0IGRvY3VtZW50ZWRcbm1vZHVsZS5leHBvcnRzLmhleFRvUkdCQSA9IGhleFRvUkdCQTtcbm1vZHVsZS5leHBvcnRzLlJHQkFUb0hleCA9IFJHQkFUb0hleDtcbm1vZHVsZS5leHBvcnRzLlJHQkFUb0hTTEEgPSBIU0xVdGlsLlJHQkFUb0hTTEE7XG5tb2R1bGUuZXhwb3J0cy5IU0xBVG9SR0JBID0gSFNMVXRpbC5IU0xBVG9SR0JBO1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcImFsaWNlYmx1ZVwiOiBcIiNmMGY4ZmZcIixcbiAgXCJhbnRpcXVld2hpdGVcIjogXCIjZmFlYmQ3XCIsXG4gIFwiYXF1YVwiOiBcIiMwMGZmZmZcIixcbiAgXCJhcXVhbWFyaW5lXCI6IFwiIzdmZmZkNFwiLFxuICBcImF6dXJlXCI6IFwiI2YwZmZmZlwiLFxuICBcImJlaWdlXCI6IFwiI2Y1ZjVkY1wiLFxuICBcImJpc3F1ZVwiOiBcIiNmZmU0YzRcIixcbiAgXCJibGFja1wiOiBcIiMwMDAwMDBcIixcbiAgXCJibGFuY2hlZGFsbW9uZFwiOiBcIiNmZmViY2RcIixcbiAgXCJibHVlXCI6IFwiIzAwMDBmZlwiLFxuICBcImJsdWV2aW9sZXRcIjogXCIjOGEyYmUyXCIsXG4gIFwiYnJvd25cIjogXCIjYTUyYTJhXCIsXG4gIFwiYnVybHl3b29kXCI6IFwiI2RlYjg4N1wiLFxuICBcImNhZGV0Ymx1ZVwiOiBcIiM1ZjllYTBcIixcbiAgXCJjaGFydHJldXNlXCI6IFwiIzdmZmYwMFwiLFxuICBcImNob2NvbGF0ZVwiOiBcIiNkMjY5MWVcIixcbiAgXCJjb3JhbFwiOiBcIiNmZjdmNTBcIixcbiAgXCJjb3JuZmxvd2VyYmx1ZVwiOiBcIiM2NDk1ZWRcIixcbiAgXCJjb3Juc2lsa1wiOiBcIiNmZmY4ZGNcIixcbiAgXCJjcmltc29uXCI6IFwiI2RjMTQzY1wiLFxuICBcImN5YW5cIjogXCIjMDBmZmZmXCIsXG4gIFwiZGFya2JsdWVcIjogXCIjMDAwMDhiXCIsXG4gIFwiZGFya2N5YW5cIjogXCIjMDA4YjhiXCIsXG4gIFwiZGFya2dvbGRlbnJvZFwiOiBcIiNiODg2MGJcIixcbiAgXCJkYXJrZ3JheVwiOiBcIiNhOWE5YTlcIixcbiAgXCJkYXJrZ3JlZW5cIjogXCIjMDA2NDAwXCIsXG4gIFwiZGFya2dyZXlcIjogXCIjYTlhOWE5XCIsXG4gIFwiZGFya2toYWtpXCI6IFwiI2JkYjc2YlwiLFxuICBcImRhcmttYWdlbnRhXCI6IFwiIzhiMDA4YlwiLFxuICBcImRhcmtvbGl2ZWdyZWVuXCI6IFwiIzU1NmIyZlwiLFxuICBcImRhcmtvcmFuZ2VcIjogXCIjZmY4YzAwXCIsXG4gIFwiZGFya29yY2hpZFwiOiBcIiM5OTMyY2NcIixcbiAgXCJkYXJrcmVkXCI6IFwiIzhiMDAwMFwiLFxuICBcImRhcmtzYWxtb25cIjogXCIjZTk5NjdhXCIsXG4gIFwiZGFya3NlYWdyZWVuXCI6IFwiIzhmYmM4ZlwiLFxuICBcImRhcmtzbGF0ZWJsdWVcIjogXCIjNDgzZDhiXCIsXG4gIFwiZGFya3NsYXRlZ3JheVwiOiBcIiMyZjRmNGZcIixcbiAgXCJkYXJrc2xhdGVncmV5XCI6IFwiIzJmNGY0ZlwiLFxuICBcImRhcmt0dXJxdW9pc2VcIjogXCIjMDBjZWQxXCIsXG4gIFwiZGFya3Zpb2xldFwiOiBcIiM5NDAwZDNcIixcbiAgXCJkZWVwcGlua1wiOiBcIiNmZjE0OTNcIixcbiAgXCJkZWVwc2t5Ymx1ZVwiOiBcIiMwMGJmZmZcIixcbiAgXCJkaW1ncmF5XCI6IFwiIzY5Njk2OVwiLFxuICBcImRpbWdyZXlcIjogXCIjNjk2OTY5XCIsXG4gIFwiZG9kZ2VyYmx1ZVwiOiBcIiMxZTkwZmZcIixcbiAgXCJmaXJlYnJpY2tcIjogXCIjYjIyMjIyXCIsXG4gIFwiZmxvcmFsd2hpdGVcIjogXCIjZmZmYWYwXCIsXG4gIFwiZm9yZXN0Z3JlZW5cIjogXCIjMjI4YjIyXCIsXG4gIFwiZnVjaHNpYVwiOiBcIiNmZjAwZmZcIixcbiAgXCJnYWluc2Jvcm9cIjogXCIjZGNkY2RjXCIsXG4gIFwiZ2hvc3R3aGl0ZVwiOiBcIiNmOGY4ZmZcIixcbiAgXCJnb2xkXCI6IFwiI2ZmZDcwMFwiLFxuICBcImdvbGRlbnJvZFwiOiBcIiNkYWE1MjBcIixcbiAgXCJncmF5XCI6IFwiIzgwODA4MFwiLFxuICBcImdyZWVuXCI6IFwiIzAwODAwMFwiLFxuICBcImdyZWVueWVsbG93XCI6IFwiI2FkZmYyZlwiLFxuICBcImdyZXlcIjogXCIjODA4MDgwXCIsXG4gIFwiaG9uZXlkZXdcIjogXCIjZjBmZmYwXCIsXG4gIFwiaG90cGlua1wiOiBcIiNmZjY5YjRcIixcbiAgXCJpbmRpYW5yZWRcIjogXCIjY2Q1YzVjXCIsXG4gIFwiaW5kaWdvXCI6IFwiIzRiMDA4MlwiLFxuICBcIml2b3J5XCI6IFwiI2ZmZmZmMFwiLFxuICBcImtoYWtpXCI6IFwiI2YwZTY4Y1wiLFxuICBcImxhdmVuZGVyXCI6IFwiI2U2ZTZmYVwiLFxuICBcImxhdmVuZGVyYmx1c2hcIjogXCIjZmZmMGY1XCIsXG4gIFwibGF3bmdyZWVuXCI6IFwiIzdjZmMwMFwiLFxuICBcImxlbW9uY2hpZmZvblwiOiBcIiNmZmZhY2RcIixcbiAgXCJsaWdodGJsdWVcIjogXCIjYWRkOGU2XCIsXG4gIFwibGlnaHRjb3JhbFwiOiBcIiNmMDgwODBcIixcbiAgXCJsaWdodGN5YW5cIjogXCIjZTBmZmZmXCIsXG4gIFwibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIjogXCIjZmFmYWQyXCIsXG4gIFwibGlnaHRncmF5XCI6IFwiI2QzZDNkM1wiLFxuICBcImxpZ2h0Z3JlZW5cIjogXCIjOTBlZTkwXCIsXG4gIFwibGlnaHRncmV5XCI6IFwiI2QzZDNkM1wiLFxuICBcImxpZ2h0cGlua1wiOiBcIiNmZmI2YzFcIixcbiAgXCJsaWdodHNhbG1vblwiOiBcIiNmZmEwN2FcIixcbiAgXCJsaWdodHNlYWdyZWVuXCI6IFwiIzIwYjJhYVwiLFxuICBcImxpZ2h0c2t5Ymx1ZVwiOiBcIiM4N2NlZmFcIixcbiAgXCJsaWdodHNsYXRlZ3JheVwiOiBcIiM3Nzg4OTlcIixcbiAgXCJsaWdodHNsYXRlZ3JleVwiOiBcIiM3Nzg4OTlcIixcbiAgXCJsaWdodHN0ZWVsYmx1ZVwiOiBcIiNiMGM0ZGVcIixcbiAgXCJsaWdodHllbGxvd1wiOiBcIiNmZmZmZTBcIixcbiAgXCJsaW1lXCI6IFwiIzAwZmYwMFwiLFxuICBcImxpbWVncmVlblwiOiBcIiMzMmNkMzJcIixcbiAgXCJsaW5lblwiOiBcIiNmYWYwZTZcIixcbiAgXCJtYWdlbnRhXCI6IFwiI2ZmMDBmZlwiLFxuICBcIm1hcm9vblwiOiBcIiM4MDAwMDBcIixcbiAgXCJtZWRpdW1hcXVhbWFyaW5lXCI6IFwiIzY2Y2RhYVwiLFxuICBcIm1lZGl1bWJsdWVcIjogXCIjMDAwMGNkXCIsXG4gIFwibWVkaXVtb3JjaGlkXCI6IFwiI2JhNTVkM1wiLFxuICBcIm1lZGl1bXB1cnBsZVwiOiBcIiM5MzcwZGJcIixcbiAgXCJtZWRpdW1zZWFncmVlblwiOiBcIiMzY2IzNzFcIixcbiAgXCJtZWRpdW1zbGF0ZWJsdWVcIjogXCIjN2I2OGVlXCIsXG4gIFwibWVkaXVtc3ByaW5nZ3JlZW5cIjogXCIjMDBmYTlhXCIsXG4gIFwibWVkaXVtdHVycXVvaXNlXCI6IFwiIzQ4ZDFjY1wiLFxuICBcIm1lZGl1bXZpb2xldHJlZFwiOiBcIiNjNzE1ODVcIixcbiAgXCJtaWRuaWdodGJsdWVcIjogXCIjMTkxOTcwXCIsXG4gIFwibWludGNyZWFtXCI6IFwiI2Y1ZmZmYVwiLFxuICBcIm1pc3R5cm9zZVwiOiBcIiNmZmU0ZTFcIixcbiAgXCJtb2NjYXNpblwiOiBcIiNmZmU0YjVcIixcbiAgXCJuYXZham93aGl0ZVwiOiBcIiNmZmRlYWRcIixcbiAgXCJuYXZ5XCI6IFwiIzAwMDA4MFwiLFxuICBcIm9sZGxhY2VcIjogXCIjZmRmNWU2XCIsXG4gIFwib2xpdmVcIjogXCIjODA4MDAwXCIsXG4gIFwib2xpdmVkcmFiXCI6IFwiIzZiOGUyM1wiLFxuICBcIm9yYW5nZVwiOiBcIiNmZmE1MDBcIixcbiAgXCJvcmFuZ2VyZWRcIjogXCIjZmY0NTAwXCIsXG4gIFwib3JjaGlkXCI6IFwiI2RhNzBkNlwiLFxuICBcInBhbGVnb2xkZW5yb2RcIjogXCIjZWVlOGFhXCIsXG4gIFwicGFsZWdyZWVuXCI6IFwiIzk4ZmI5OFwiLFxuICBcInBhbGV0dXJxdW9pc2VcIjogXCIjYWZlZWVlXCIsXG4gIFwicGFsZXZpb2xldHJlZFwiOiBcIiNkYjcwOTNcIixcbiAgXCJwYXBheWF3aGlwXCI6IFwiI2ZmZWZkNVwiLFxuICBcInBlYWNocHVmZlwiOiBcIiNmZmRhYjlcIixcbiAgXCJwZXJ1XCI6IFwiI2NkODUzZlwiLFxuICBcInBpbmtcIjogXCIjZmZjMGNiXCIsXG4gIFwicGx1bVwiOiBcIiNkZGEwZGRcIixcbiAgXCJwb3dkZXJibHVlXCI6IFwiI2IwZTBlNlwiLFxuICBcInB1cnBsZVwiOiBcIiM4MDAwODBcIixcbiAgXCJyZWJlY2NhcHVycGxlXCI6IFwiIzY2MzM5OVwiLFxuICBcInJlZFwiOiBcIiNmZjAwMDBcIixcbiAgXCJyb3N5YnJvd25cIjogXCIjYmM4ZjhmXCIsXG4gIFwicm95YWxibHVlXCI6IFwiIzQxNjllMVwiLFxuICBcInNhZGRsZWJyb3duXCI6IFwiIzhiNDUxM1wiLFxuICBcInNhbG1vblwiOiBcIiNmYTgwNzJcIixcbiAgXCJzYW5keWJyb3duXCI6IFwiI2Y0YTQ2MFwiLFxuICBcInNlYWdyZWVuXCI6IFwiIzJlOGI1N1wiLFxuICBcInNlYXNoZWxsXCI6IFwiI2ZmZjVlZVwiLFxuICBcInNpZW5uYVwiOiBcIiNhMDUyMmRcIixcbiAgXCJzaWx2ZXJcIjogXCIjYzBjMGMwXCIsXG4gIFwic2t5Ymx1ZVwiOiBcIiM4N2NlZWJcIixcbiAgXCJzbGF0ZWJsdWVcIjogXCIjNmE1YWNkXCIsXG4gIFwic2xhdGVncmF5XCI6IFwiIzcwODA5MFwiLFxuICBcInNsYXRlZ3JleVwiOiBcIiM3MDgwOTBcIixcbiAgXCJzbm93XCI6IFwiI2ZmZmFmYVwiLFxuICBcInNwcmluZ2dyZWVuXCI6IFwiIzAwZmY3ZlwiLFxuICBcInN0ZWVsYmx1ZVwiOiBcIiM0NjgyYjRcIixcbiAgXCJ0YW5cIjogXCIjZDJiNDhjXCIsXG4gIFwidGVhbFwiOiBcIiMwMDgwODBcIixcbiAgXCJ0aGlzdGxlXCI6IFwiI2Q4YmZkOFwiLFxuICBcInRvbWF0b1wiOiBcIiNmZjYzNDdcIixcbiAgXCJ0dXJxdW9pc2VcIjogXCIjNDBlMGQwXCIsXG4gIFwidmlvbGV0XCI6IFwiI2VlODJlZVwiLFxuICBcIndoZWF0XCI6IFwiI2Y1ZGViM1wiLFxuICBcIndoaXRlXCI6IFwiI2ZmZmZmZlwiLFxuICBcIndoaXRlc21va2VcIjogXCIjZjVmNWY1XCIsXG4gIFwieWVsbG93XCI6IFwiI2ZmZmYwMFwiLFxuICBcInllbGxvd2dyZWVuXCI6IFwiIzlhY2QzMlwiXG59IiwiXG52YXIgbmFtZXMgPSByZXF1aXJlKCcuL2Nzcy1jb2xvci1uYW1lcy5qc29uJyk7XG52YXIgSFNMVXRpbCA9IHJlcXVpcmUoJy4vaHNsJyk7XG52YXIgaGV4VG9SR0JBID0gcmVxdWlyZSgnLi9oZXgtdG8tcmdiYScpO1xudmFyIFJHQkFUb0hleCA9IHJlcXVpcmUoJy4vcmdiYS10by1oZXgnKTtcbnZhciB3cmFwID0gcmVxdWlyZSgnLi93cmFwJyk7XG5cbmZ1bmN0aW9uIHBhcnNlU3R5bGUgKHN0cikge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb2xvciBwYXJzaW5nIG11c3QgYmUgcGVyZm9ybWVkIG9uIGEgc3RyaW5nIHBhcmFtZXRlcicpO1xuICB9XG5cbiAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKHN0ciBpbiBuYW1lcykge1xuICAgIHN0ciA9IG5hbWVzW3N0cl07XG4gIH0gZWxzZSBpZiAoc3RyID09PSAndHJhbnNwYXJlbnQnKSB7XG4gICAgc3RyID0gJyMwMDAwMDAwMCc7XG4gIH1cblxuICB2YXIgcmdiYSwgaHNsYSwgaGV4O1xuICBpZiAoL14jW2EtZjAtOV0rJC8udGVzdChzdHIpKSB7XG4gICAgcmdiYSA9IGhleFRvUkdCQShzdHIpO1xuICAgIGhleCA9IFJHQkFUb0hleChyZ2JhKTtcbiAgICBoc2xhID0gSFNMVXRpbC5SR0JBVG9IU0xBKHJnYmEpO1xuICB9IGVsc2Uge1xuICAgIHZhciBtYXRjaCA9IC9eKCg/OnJnYnxoc2wpYT8pXFxzKlxcKChbXildKilcXCkvLmV4ZWMoc3RyKTtcbiAgICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdHlwZSA9IG1hdGNoWzFdLnJlcGxhY2UoL2EkLywgJycpO1xuICAgIHZhciBwYXJ0cyA9IG1hdGNoWzJdLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKS5zcGxpdCgvXFxzKixcXHMqLykubWFwKGZ1bmN0aW9uIChuLCBpKSB7XG4gICAgICAvLyBvcGFxdWUgcGFydFxuICAgICAgaWYgKGkgPD0gMikgcmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChuKSB8fCAwKTtcbiAgICAgIC8vIGFscGhhIHBhcnRcbiAgICAgIGVsc2Uge1xuICAgICAgICBuID0gcGFyc2VGbG9hdChuKTtcbiAgICAgICAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCAhaXNGaW5pdGUobikpIG4gPSAxO1xuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBmaWxsIGluIGFscGhhIHdpdGggMS4wIGJ5IGRlZmF1bHRcbiAgICBpZiAodHlwZW9mIHBhcnRzWzNdID09PSAndW5kZWZpbmVkJyB8fCAhaXNGaW5pdGUocGFydHNbM10pKSB7XG4gICAgICBwYXJ0c1szXSA9IDE7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAncmdiJykge1xuICAgICAgaHNsYSA9IEhTTFV0aWwuUkdCQVRvSFNMQShwYXJ0cyk7XG4gICAgICByZ2JhID0gcGFydHM7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnaHNsJykge1xuICAgICAgcmdiYSA9IEhTTFV0aWwuSFNMQVRvUkdCQShwYXJ0cyk7XG4gICAgICBwYXJ0c1swXSA9IHdyYXAocGFydHNbMF0sIDAsIDM2MCk7XG4gICAgICBoc2xhID0gcGFydHM7XG4gICAgfVxuICAgIGhleCA9IFJHQkFUb0hleChyZ2JhKTtcbiAgfVxuXG4gIGlmICghcmdiYSAmJiAhaGV4ICYmICFoc2xhKSByZXR1cm4gbnVsbDtcblxuICB2YXIgcmV0ID0ge1xuICAgIGhleDogaGV4LFxuICAgIGFscGhhOiByZ2JhWzNdLFxuICAgIHJnYjogcmdiYS5zbGljZSgwLCAzKSxcbiAgICByZ2JhOiByZ2JhLFxuICAgIGhzbDogaHNsYS5zbGljZSgwLCAzKSxcbiAgICBoc2xhOiBoc2xhXG4gIH07XG5cbiAgcmV0dXJuIHJldDtcbn1cblxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBwYXJzZUNvbG9yO1xuZnVuY3Rpb24gcGFyc2VDb2xvciAoY29sb3IpIHtcbiAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGFyc2VTdHlsZShjb2xvcik7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjb2xvcikgJiYgY29sb3IubGVuZ3RoID49IDMpIHtcbiAgICB2YXIgcmdiU3RyID0gcmdiU3R5bGUoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgY29sb3JbM10pO1xuICAgIHJldHVybiBwYXJzZVN0eWxlKHJnYlN0cik7XG4gIH0gZWxzZSBpZiAoY29sb3IgJiYgdHlwZW9mIGNvbG9yID09PSAnb2JqZWN0Jykge1xuICAgIHZhciBzdHI7XG4gICAgaWYgKGNvbG9yLmhleCkgc3RyID0gY29sb3IuaGV4O1xuICAgIGVsc2UgaWYgKGNvbG9yLnJnYmEpIHN0ciA9IHJnYlN0eWxlKGNvbG9yLnJnYmFbMF0sIGNvbG9yLnJnYmFbMV0sIGNvbG9yLnJnYmFbMl0sIGNvbG9yLnJnYmFbM10pO1xuICAgIGVsc2UgaWYgKGNvbG9yLmhzbGEpIHN0ciA9IGhzbFN0eWxlKGNvbG9yLmhzbGFbMF0sIGNvbG9yLmhzbGFbMV0sIGNvbG9yLmhzbGFbMl0sIGNvbG9yLmhzbGFbM10pO1xuICAgIGVsc2UgaWYgKGNvbG9yLnJnYikgc3RyID0gcmdiU3R5bGUoY29sb3IucmdiWzBdLCBjb2xvci5yZ2JbMV0sIGNvbG9yLnJnYlsyXSk7XG4gICAgZWxzZSBpZiAoY29sb3IuaHNsKSBzdHIgPSBoc2xTdHlsZShjb2xvci5oc2xbMF0sIGNvbG9yLmhzbFsxXSwgY29sb3IuaHNsWzJdKTtcbiAgICBpZiAoc3RyKSByZXR1cm4gcGFyc2VTdHlsZShzdHIpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5zdHlsZSA9IHN0eWxlO1xuZnVuY3Rpb24gc3R5bGUgKGNvbG9yKSB7XG4gIHZhciByZXN1bHQgPSBtb2R1bGUuZXhwb3J0cy5wYXJzZShjb2xvcik7XG4gIGlmIChyZXN1bHQpIHtcbiAgICB2YXIgcmdiYSA9IHJlc3VsdC5yZ2JhO1xuICAgIHJldHVybiByZ2JTdHlsZShyZ2JhWzBdLCByZ2JhWzFdLCByZ2JhWzJdLCByZ2JhWzNdKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gcmdiU3R5bGUgKHIsIGcsIGIsIGEpIHtcbiAgciA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZChyKSkpO1xuICBnID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKGcpKSk7XG4gIGIgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoYikpKTtcbiAgaWYgKGEgPT09IDEgfHwgIWlzRmluaXRlKGEpIHx8IHR5cGVvZiBhID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiAncmdiKCcgKyBbIHIsIGcsIGIgXS5qb2luKCcsICcpICsgJyknO1xuICB9IGVsc2Uge1xuICAgIGEgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBhKSk7XG4gICAgcmV0dXJuICdyZ2JhKCcgKyBbIHIsIGcsIGIsIGEgXS5qb2luKCcsICcpICsgJyknO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhzbFN0eWxlIChoLCBzLCBsLCBhKSB7XG4gIGggPSB3cmFwKGgsIDAsIDM2MCk7XG4gIGggPSBNYXRoLm1heCgwLCBNYXRoLm1pbigzNjAsIE1hdGgucm91bmQoaCkpKTtcbiAgcyA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChzKSkpO1xuICBsID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKGwpKSk7XG4gIGlmIChhID09PSAxIHx8ICFpc0Zpbml0ZShhKSB8fCB0eXBlb2YgYSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gJ2hzbCgnICsgWyBoLCBzLCBsIF0uam9pbignLCAnKSArICcpJztcbiAgfSBlbHNlIHtcbiAgICBhID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgYSkpO1xuICAgIHJldHVybiAnaHNsYSgnICsgWyBoLCBzLCBsLCBhIF0uam9pbignLCAnKSArICcpJztcbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBoZXhUb1JHQkE7XG5mdW5jdGlvbiBoZXhUb1JHQkEgKHN0cikge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdIZXggY29kZSBwYXJzaW5nIG11c3QgYmUgcGVyZm9ybWVkIG9uIGEgc3RyaW5nIHBhcmFtZXRlcicpO1xuICB9XG5cbiAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKCEvXiNbYS1mMC05XSskLy50ZXN0KHN0cikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBoZXggPSBzdHIucmVwbGFjZSgvXiMvLCAnJyk7XG4gIHZhciBhbHBoYSA9IDE7XG5cbiAgaWYgKGhleC5sZW5ndGggPT09IDgpIHtcbiAgICBhbHBoYSA9IHBhcnNlSW50KGhleC5zbGljZSg2LCA4KSwgMTYpIC8gMjU1O1xuICAgIGhleCA9IGhleC5zbGljZSgwLCA2KTtcbiAgfVxuXG4gIGlmIChoZXgubGVuZ3RoID09PSA0KSB7XG4gICAgYWxwaGEgPSBwYXJzZUludChoZXguc2xpY2UoMywgNCkucmVwZWF0KDIpLCAxNikgLyAyNTU7XG4gICAgaGV4ID0gaGV4LnNsaWNlKDAsIDMpO1xuICB9XG5cbiAgaWYgKGhleC5sZW5ndGggPT09IDMpIHtcbiAgICBoZXggPSBoZXhbMF0gKyBoZXhbMF0gKyBoZXhbMV0gKyBoZXhbMV0gKyBoZXhbMl0gKyBoZXhbMl07XG4gIH1cblxuICB2YXIgbnVtID0gcGFyc2VJbnQoaGV4LCAxNik7XG4gIHZhciByZWQgPSBudW0gPj4gMTY7XG4gIHZhciBncmVlbiA9IChudW0gPj4gOCkgJiAyNTU7XG4gIHZhciBibHVlID0gbnVtICYgMjU1O1xuXG4gIHJldHVybiBbIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIF07XG59XG4iLCJ2YXIgZmxvYXRIU0wyUkdCID0gcmVxdWlyZSgnZmxvYXQtaHNsMnJnYicpO1xudmFyIGZsb2F0UkdCMkhTTCA9IHJlcXVpcmUoJ2Zsb2F0LXJnYjJoc2wnKTtcbnZhciB3cmFwID0gcmVxdWlyZSgnLi93cmFwJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJHQkFUb0hTTEEgPSBSR0JBVG9IU0xBO1xuZnVuY3Rpb24gUkdCQVRvSFNMQSAocmdiYSkge1xuICB2YXIgZmxvYXRIU0wgPSBmbG9hdFJHQjJIU0woWyByZ2JhWzBdIC8gMjU1LCByZ2JhWzFdIC8gMjU1LCByZ2JhWzJdIC8gMjU1IF0pO1xuICByZXR1cm4gW1xuICAgIE1hdGgubWF4KDAsIE1hdGgubWluKDM2MCwgTWF0aC5yb3VuZChmbG9hdEhTTFswXSAqIDM2MCkpKSxcbiAgICBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQoZmxvYXRIU0xbMV0gKiAxMDApKSksXG4gICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKGZsb2F0SFNMWzJdICogMTAwKSkpLFxuICAgIHJnYmFbM11cbiAgXTtcbn1cblxubW9kdWxlLmV4cG9ydHMuSFNMQVRvUkdCQSA9IEhTTEFUb1JHQkE7XG5mdW5jdGlvbiBIU0xBVG9SR0JBIChoc2xhKSB7XG4gIHZhciBodWUgPSB3cmFwKGhzbGFbMF0sIDAsIDM2MCk7XG4gIHZhciBmbG9hdFJHQiA9IGZsb2F0SFNMMlJHQihbIGh1ZSAvIDM2MCwgaHNsYVsxXSAvIDEwMCwgaHNsYVsyXSAvIDEwMCBdKTtcbiAgcmV0dXJuIFtcbiAgICBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoZmxvYXRSR0JbMF0gKiAyNTUpKSksXG4gICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKGZsb2F0UkdCWzFdICogMjU1KSkpLFxuICAgIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZChmbG9hdFJHQlsyXSAqIDI1NSkpKSxcbiAgICBoc2xhWzNdXG4gIF07XG59XG4iLCIvLyBFeHRyYWN0ZWQgZnJvbSBAdG1jdyAvIHdjYWctY29udHJhc3Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90bWN3L3JlbGF0aXZlLWx1bWluYW5jZS9ibG9iL21hc3Rlci9pbmRleC5qc1xuXG4vLyAjIFJlbGF0aXZlIGx1bWluYW5jZVxuLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyNyZWxhdGl2ZWx1bWluYW5jZWRlZlxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTHVtaW5hbmNlXyhyZWxhdGl2ZSlcbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0x1bWlub3NpdHlfZnVuY3Rpb25cbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JlYy5fNzA5I0x1bWFfY29lZmZpY2llbnRzXG5cbi8vIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGNvZWZmaWNpZW50c1xudmFyIHJjID0gMC4yMTI2O1xudmFyIGdjID0gMC43MTUyO1xudmFyIGJjID0gMC4wNzIyO1xuLy8gbG93LWdhbW1hIGFkanVzdCBjb2VmZmljaWVudFxudmFyIGxvd2MgPSAxIC8gMTIuOTI7XG5cbmZ1bmN0aW9uIGFkanVzdEdhbW1hIChhKSB7XG4gIHJldHVybiBNYXRoLnBvdygoYSArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlbGF0aXZlTHVtaW5hbmNlO1xuZnVuY3Rpb24gcmVsYXRpdmVMdW1pbmFuY2UgKHJnYikge1xuICB2YXIgcnNyZ2IgPSByZ2JbMF0gLyAyNTU7XG4gIHZhciBnc3JnYiA9IHJnYlsxXSAvIDI1NTtcbiAgdmFyIGJzcmdiID0gcmdiWzJdIC8gMjU1O1xuICB2YXIgciA9IHJzcmdiIDw9IDAuMDM5MjggPyByc3JnYiAqIGxvd2MgOiBhZGp1c3RHYW1tYShyc3JnYik7XG4gIHZhciBnID0gZ3NyZ2IgPD0gMC4wMzkyOCA/IGdzcmdiICogbG93YyA6IGFkanVzdEdhbW1hKGdzcmdiKTtcbiAgdmFyIGIgPSBic3JnYiA8PSAwLjAzOTI4ID8gYnNyZ2IgKiBsb3djIDogYWRqdXN0R2FtbWEoYnNyZ2IpO1xuICByZXR1cm4gciAqIHJjICsgZyAqIGdjICsgYiAqIGJjO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZ2JhVG9IZXg7XG5mdW5jdGlvbiByZ2JhVG9IZXggKHJnYmEpIHtcbiAgaWYgKCFyZ2JhIHx8ICFBcnJheS5pc0FycmF5KHJnYmEpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTXVzdCBzcGVjaWZ5IGFuIGFycmF5IHRvIGNvbnZlcnQgaW50byBhIGhleCBjb2RlJyk7XG4gIH1cblxuICB2YXIgciA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZChyZ2JhWzBdIHx8IDApKSk7XG4gIHZhciBnID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHJnYmFbMV0gfHwgMCkpKTtcbiAgdmFyIGIgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQocmdiYVsyXSB8fCAwKSkpO1xuXG4gIHZhciBhbHBoYSA9IHJnYmFbM107XG4gIGlmICh0eXBlb2YgYWxwaGEgPT09ICd1bmRlZmluZWQnIHx8ICFpc0Zpbml0ZShhbHBoYSkpIHtcbiAgICBhbHBoYSA9IDE7XG4gIH1cbiAgdmFyIGEgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoYWxwaGEgKiAyNTUpKSk7XG4gIHZhciBhbHBoYVBhcmFtID0gYSA9PT0gMjU1ID8gJycgOiAoYSB8IDEgPDwgOCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpO1xuICB2YXIgcmVzdWx0ID0gKChiIHwgZyA8PCA4IHwgciA8PCAxNikgfCAxIDw8IDI0KS50b1N0cmluZygxNikuc2xpY2UoMSkgKyBhbHBoYVBhcmFtO1xuICByZXR1cm4gJyMnICsgcmVzdWx0O1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB3cmFwO1xuZnVuY3Rpb24gd3JhcCAodmFsdWUsIGZyb20sIHRvKSB7XG4gIGlmICh0eXBlb2YgZnJvbSAhPT0gJ251bWJlcicgfHwgdHlwZW9mIHRvICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ011c3Qgc3BlY2lmeSBcInRvXCIgYW5kIFwiZnJvbVwiIGFyZ3VtZW50cyBhcyBudW1iZXJzJyk7XG4gIH1cbiAgLy8gYWxnb3JpdGhtIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTg1MjYyOC81OTk4ODRcbiAgaWYgKGZyb20gPiB0bykge1xuICAgIHZhciB0ID0gZnJvbTtcbiAgICBmcm9tID0gdG87XG4gICAgdG8gPSB0O1xuICB9XG4gIHZhciBjeWNsZSA9IHRvIC0gZnJvbTtcbiAgaWYgKGN5Y2xlID09PSAwKSB7XG4gICAgcmV0dXJuIHRvO1xuICB9XG4gIHJldHVybiB2YWx1ZSAtIGN5Y2xlICogTWF0aC5mbG9vcigodmFsdWUgLSBmcm9tKSAvIGN5Y2xlKTtcbn1cbiIsInZhciBzZWVkUmFuZG9tID0gcmVxdWlyZSgnc2VlZC1yYW5kb20nKTtcbnZhciBTaW1wbGV4Tm9pc2UgPSByZXF1aXJlKCdzaW1wbGV4LW5vaXNlJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcblxuZnVuY3Rpb24gY3JlYXRlUmFuZG9tIChkZWZhdWx0U2VlZCkge1xuICBkZWZhdWx0U2VlZCA9IGRlZmluZWQoZGVmYXVsdFNlZWQsIG51bGwpO1xuICB2YXIgZGVmYXVsdFJhbmRvbSA9IE1hdGgucmFuZG9tO1xuICB2YXIgY3VycmVudFNlZWQ7XG4gIHZhciBjdXJyZW50UmFuZG9tO1xuICB2YXIgbm9pc2VHZW5lcmF0b3I7XG4gIHZhciBfbmV4dEdhdXNzaWFuID0gbnVsbDtcbiAgdmFyIF9oYXNOZXh0R2F1c3NpYW4gPSBmYWxzZTtcblxuICBzZXRTZWVkKGRlZmF1bHRTZWVkKTtcblxuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBjcmVhdGVSYW5kb206IGZ1bmN0aW9uIChkZWZhdWx0U2VlZCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVJhbmRvbShkZWZhdWx0U2VlZCk7XG4gICAgfSxcbiAgICBzZXRTZWVkOiBzZXRTZWVkLFxuICAgIGdldFNlZWQ6IGdldFNlZWQsXG4gICAgZ2V0UmFuZG9tU2VlZDogZ2V0UmFuZG9tU2VlZCxcbiAgICB2YWx1ZU5vblplcm86IHZhbHVlTm9uWmVybyxcbiAgICBwZXJtdXRlTm9pc2U6IHBlcm11dGVOb2lzZSxcbiAgICBub2lzZTFEOiBub2lzZTFELFxuICAgIG5vaXNlMkQ6IG5vaXNlMkQsXG4gICAgbm9pc2UzRDogbm9pc2UzRCxcbiAgICBub2lzZTREOiBub2lzZTRELFxuICAgIHNpZ246IHNpZ24sXG4gICAgYm9vbGVhbjogYm9vbGVhbixcbiAgICBjaGFuY2U6IGNoYW5jZSxcbiAgICByYW5nZTogcmFuZ2UsXG4gICAgcmFuZ2VGbG9vcjogcmFuZ2VGbG9vcixcbiAgICBwaWNrOiBwaWNrLFxuICAgIHNodWZmbGU6IHNodWZmbGUsXG4gICAgb25DaXJjbGU6IG9uQ2lyY2xlLFxuICAgIGluc2lkZUNpcmNsZTogaW5zaWRlQ2lyY2xlLFxuICAgIG9uU3BoZXJlOiBvblNwaGVyZSxcbiAgICBpbnNpZGVTcGhlcmU6IGluc2lkZVNwaGVyZSxcbiAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLFxuICAgIHdlaWdodGVkOiB3ZWlnaHRlZCxcbiAgICB3ZWlnaHRlZFNldDogd2VpZ2h0ZWRTZXQsXG4gICAgd2VpZ2h0ZWRTZXRJbmRleDogd2VpZ2h0ZWRTZXRJbmRleCxcbiAgICBnYXVzc2lhbjogZ2F1c3NpYW5cbiAgfTtcblxuICBmdW5jdGlvbiBzZXRTZWVkIChzZWVkLCBvcHQpIHtcbiAgICBpZiAodHlwZW9mIHNlZWQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBzZWVkID09PSAnc3RyaW5nJykge1xuICAgICAgY3VycmVudFNlZWQgPSBzZWVkO1xuICAgICAgY3VycmVudFJhbmRvbSA9IHNlZWRSYW5kb20oY3VycmVudFNlZWQsIG9wdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRTZWVkID0gdW5kZWZpbmVkO1xuICAgICAgY3VycmVudFJhbmRvbSA9IGRlZmF1bHRSYW5kb207XG4gICAgfVxuICAgIG5vaXNlR2VuZXJhdG9yID0gY3JlYXRlTm9pc2UoKTtcbiAgICBfbmV4dEdhdXNzaWFuID0gbnVsbDtcbiAgICBfaGFzTmV4dEdhdXNzaWFuID0gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiB2YWx1ZSAoKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRSYW5kb20oKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbHVlTm9uWmVybyAoKSB7XG4gICAgdmFyIHUgPSAwO1xuICAgIHdoaWxlICh1ID09PSAwKSB1ID0gdmFsdWUoKTtcbiAgICByZXR1cm4gdTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNlZWQgKCkge1xuICAgIHJldHVybiBjdXJyZW50U2VlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFJhbmRvbVNlZWQgKCkge1xuICAgIHZhciBzZWVkID0gU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApKTtcbiAgICByZXR1cm4gc2VlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vaXNlICgpIHtcbiAgICByZXR1cm4gbmV3IFNpbXBsZXhOb2lzZShjdXJyZW50UmFuZG9tKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlcm11dGVOb2lzZSAoKSB7XG4gICAgbm9pc2VHZW5lcmF0b3IgPSBjcmVhdGVOb2lzZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9pc2UxRCAoeCwgZnJlcXVlbmN5LCBhbXBsaXR1ZGUpIHtcbiAgICBpZiAoIWlzRmluaXRlKHgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd4IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGZyZXF1ZW5jeSA9IGRlZmluZWQoZnJlcXVlbmN5LCAxKTtcbiAgICBhbXBsaXR1ZGUgPSBkZWZpbmVkKGFtcGxpdHVkZSwgMSk7XG4gICAgcmV0dXJuIGFtcGxpdHVkZSAqIG5vaXNlR2VuZXJhdG9yLm5vaXNlMkQoeCAqIGZyZXF1ZW5jeSwgMCk7XG4gIH1cblxuICBmdW5jdGlvbiBub2lzZTJEICh4LCB5LCBmcmVxdWVuY3ksIGFtcGxpdHVkZSkge1xuICAgIGlmICghaXNGaW5pdGUoeCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ggY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh5KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneSBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTJEKHggKiBmcmVxdWVuY3ksIHkgKiBmcmVxdWVuY3kpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9pc2UzRCAoeCwgeSwgeiwgZnJlcXVlbmN5LCBhbXBsaXR1ZGUpIHtcbiAgICBpZiAoIWlzRmluaXRlKHgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd4IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3kgY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh6KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneiBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTNEKFxuICAgICAgeCAqIGZyZXF1ZW5jeSxcbiAgICAgIHkgKiBmcmVxdWVuY3ksXG4gICAgICB6ICogZnJlcXVlbmN5XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vaXNlNEQgKHgsIHksIHosIHcsIGZyZXF1ZW5jeSwgYW1wbGl0dWRlKSB7XG4gICAgaWYgKCFpc0Zpbml0ZSh4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneCBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd5IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ogY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh3KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigndyBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTREKFxuICAgICAgeCAqIGZyZXF1ZW5jeSxcbiAgICAgIHkgKiBmcmVxdWVuY3ksXG4gICAgICB6ICogZnJlcXVlbmN5LFxuICAgICAgdyAqIGZyZXF1ZW5jeVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBzaWduICgpIHtcbiAgICByZXR1cm4gYm9vbGVhbigpID8gMSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gYm9vbGVhbiAoKSB7XG4gICAgcmV0dXJuIHZhbHVlKCkgPiAwLjU7XG4gIH1cblxuICBmdW5jdGlvbiBjaGFuY2UgKG4pIHtcbiAgICBuID0gZGVmaW5lZChuLCAwLjUpO1xuICAgIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIG4gdG8gYmUgYSBudW1iZXInKTtcbiAgICByZXR1cm4gdmFsdWUoKSA8IG47XG4gIH1cblxuICBmdW5jdGlvbiByYW5nZSAobWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtaW4gIT09ICdudW1iZXInIHx8IHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhbGwgYXJndW1lbnRzIHRvIGJlIG51bWJlcnMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUoKSAqIChtYXggLSBtaW4pICsgbWluO1xuICB9XG5cbiAgZnVuY3Rpb24gcmFuZ2VGbG9vciAobWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtaW4gIT09ICdudW1iZXInIHx8IHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhbGwgYXJndW1lbnRzIHRvIGJlIG51bWJlcnMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gTWF0aC5mbG9vcihyYW5nZShtaW4sIG1heCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGljayAoYXJyYXkpIHtcbiAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBhcnJheVtyYW5nZUZsb29yKDAsIGFycmF5Lmxlbmd0aCldO1xuICB9XG5cbiAgZnVuY3Rpb24gc2h1ZmZsZSAoYXJyKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIEFycmF5LCBnb3QgJyArIHR5cGVvZiBhcnIpO1xuICAgIH1cblxuICAgIHZhciByYW5kO1xuICAgIHZhciB0bXA7XG4gICAgdmFyIGxlbiA9IGFyci5sZW5ndGg7XG4gICAgdmFyIHJldCA9IGFyci5zbGljZSgpO1xuICAgIHdoaWxlIChsZW4pIHtcbiAgICAgIHJhbmQgPSBNYXRoLmZsb29yKHZhbHVlKCkgKiBsZW4tLSk7XG4gICAgICB0bXAgPSByZXRbbGVuXTtcbiAgICAgIHJldFtsZW5dID0gcmV0W3JhbmRdO1xuICAgICAgcmV0W3JhbmRdID0gdG1wO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgZnVuY3Rpb24gb25DaXJjbGUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICB2YXIgdGhldGEgPSB2YWx1ZSgpICogMi4wICogTWF0aC5QSTtcbiAgICBvdXRbMF0gPSByYWRpdXMgKiBNYXRoLmNvcyh0aGV0YSk7XG4gICAgb3V0WzFdID0gcmFkaXVzICogTWF0aC5zaW4odGhldGEpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNpZGVDaXJjbGUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICBvbkNpcmNsZSgxLCBvdXQpO1xuICAgIHZhciByID0gcmFkaXVzICogTWF0aC5zcXJ0KHZhbHVlKCkpO1xuICAgIG91dFswXSAqPSByO1xuICAgIG91dFsxXSAqPSByO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBvblNwaGVyZSAocmFkaXVzLCBvdXQpIHtcbiAgICByYWRpdXMgPSBkZWZpbmVkKHJhZGl1cywgMSk7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIHZhciB1ID0gdmFsdWUoKSAqIE1hdGguUEkgKiAyO1xuICAgIHZhciB2ID0gdmFsdWUoKSAqIDIgLSAxO1xuICAgIHZhciBwaGkgPSB1O1xuICAgIHZhciB0aGV0YSA9IE1hdGguYWNvcyh2KTtcbiAgICBvdXRbMF0gPSByYWRpdXMgKiBNYXRoLnNpbih0aGV0YSkgKiBNYXRoLmNvcyhwaGkpO1xuICAgIG91dFsxXSA9IHJhZGl1cyAqIE1hdGguc2luKHRoZXRhKSAqIE1hdGguc2luKHBoaSk7XG4gICAgb3V0WzJdID0gcmFkaXVzICogTWF0aC5jb3ModGhldGEpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNpZGVTcGhlcmUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICB2YXIgdSA9IHZhbHVlKCkgKiBNYXRoLlBJICogMjtcbiAgICB2YXIgdiA9IHZhbHVlKCkgKiAyIC0gMTtcbiAgICB2YXIgayA9IHZhbHVlKCk7XG5cbiAgICB2YXIgcGhpID0gdTtcbiAgICB2YXIgdGhldGEgPSBNYXRoLmFjb3Modik7XG4gICAgdmFyIHIgPSByYWRpdXMgKiBNYXRoLmNicnQoayk7XG4gICAgb3V0WzBdID0gciAqIE1hdGguc2luKHRoZXRhKSAqIE1hdGguY29zKHBoaSk7XG4gICAgb3V0WzFdID0gciAqIE1hdGguc2luKHRoZXRhKSAqIE1hdGguc2luKHBoaSk7XG4gICAgb3V0WzJdID0gciAqIE1hdGguY29zKHRoZXRhKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gcXVhdGVybmlvbiAob3V0KSB7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIHZhciB1MSA9IHZhbHVlKCk7XG4gICAgdmFyIHUyID0gdmFsdWUoKTtcbiAgICB2YXIgdTMgPSB2YWx1ZSgpO1xuXG4gICAgdmFyIHNxMSA9IE1hdGguc3FydCgxIC0gdTEpO1xuICAgIHZhciBzcTIgPSBNYXRoLnNxcnQodTEpO1xuXG4gICAgdmFyIHRoZXRhMSA9IE1hdGguUEkgKiAyICogdTI7XG4gICAgdmFyIHRoZXRhMiA9IE1hdGguUEkgKiAyICogdTM7XG5cbiAgICB2YXIgeCA9IE1hdGguc2luKHRoZXRhMSkgKiBzcTE7XG4gICAgdmFyIHkgPSBNYXRoLmNvcyh0aGV0YTEpICogc3ExO1xuICAgIHZhciB6ID0gTWF0aC5zaW4odGhldGEyKSAqIHNxMjtcbiAgICB2YXIgdyA9IE1hdGguY29zKHRoZXRhMikgKiBzcTI7XG4gICAgb3V0WzBdID0geDtcbiAgICBvdXRbMV0gPSB5O1xuICAgIG91dFsyXSA9IHo7XG4gICAgb3V0WzNdID0gdztcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gd2VpZ2h0ZWRTZXQgKHNldCkge1xuICAgIHNldCA9IHNldCB8fCBbXTtcbiAgICBpZiAoc2V0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHNldFt3ZWlnaHRlZFNldEluZGV4KHNldCldLnZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gd2VpZ2h0ZWRTZXRJbmRleCAoc2V0KSB7XG4gICAgc2V0ID0gc2V0IHx8IFtdO1xuICAgIGlmIChzZXQubGVuZ3RoID09PSAwKSByZXR1cm4gLTE7XG4gICAgcmV0dXJuIHdlaWdodGVkKHNldC5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLndlaWdodDtcbiAgICB9KSk7XG4gIH1cblxuICBmdW5jdGlvbiB3ZWlnaHRlZCAod2VpZ2h0cykge1xuICAgIHdlaWdodHMgPSB3ZWlnaHRzIHx8IFtdO1xuICAgIGlmICh3ZWlnaHRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xO1xuICAgIHZhciB0b3RhbFdlaWdodCA9IDA7XG4gICAgdmFyIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2VpZ2h0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdG90YWxXZWlnaHQgKz0gd2VpZ2h0c1tpXTtcbiAgICB9XG5cbiAgICBpZiAodG90YWxXZWlnaHQgPD0gMCkgdGhyb3cgbmV3IEVycm9yKCdXZWlnaHRzIG11c3Qgc3VtIHRvID4gMCcpO1xuXG4gICAgdmFyIHJhbmRvbSA9IHZhbHVlKCkgKiB0b3RhbFdlaWdodDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgd2VpZ2h0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJhbmRvbSA8IHdlaWdodHNbaV0pIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgICByYW5kb20gLT0gd2VpZ2h0c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmdW5jdGlvbiBnYXVzc2lhbiAobWVhbiwgc3RhbmRhcmREZXJpdmF0aW9uKSB7XG4gICAgbWVhbiA9IGRlZmluZWQobWVhbiwgMCk7XG4gICAgc3RhbmRhcmREZXJpdmF0aW9uID0gZGVmaW5lZChzdGFuZGFyZERlcml2YXRpb24sIDEpO1xuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW5qZGstbWlycm9yL2pkazd1LWpkay9ibG9iL2Y0ZDgwOTU3ZTg5YTE5YTI5YmI5Zjk4MDdkMmEyODM1MWVkN2Y3ZGYvc3JjL3NoYXJlL2NsYXNzZXMvamF2YS91dGlsL1JhbmRvbS5qYXZhI0w0OTZcbiAgICBpZiAoX2hhc05leHRHYXVzc2lhbikge1xuICAgICAgX2hhc05leHRHYXVzc2lhbiA9IGZhbHNlO1xuICAgICAgdmFyIHJlc3VsdCA9IF9uZXh0R2F1c3NpYW47XG4gICAgICBfbmV4dEdhdXNzaWFuID0gbnVsbDtcbiAgICAgIHJldHVybiBtZWFuICsgc3RhbmRhcmREZXJpdmF0aW9uICogcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdjEgPSAwO1xuICAgICAgdmFyIHYyID0gMDtcbiAgICAgIHZhciBzID0gMDtcbiAgICAgIGRvIHtcbiAgICAgICAgdjEgPSB2YWx1ZSgpICogMiAtIDE7IC8vIGJldHdlZW4gLTEgYW5kIDFcbiAgICAgICAgdjIgPSB2YWx1ZSgpICogMiAtIDE7IC8vIGJldHdlZW4gLTEgYW5kIDFcbiAgICAgICAgcyA9IHYxICogdjEgKyB2MiAqIHYyO1xuICAgICAgfSB3aGlsZSAocyA+PSAxIHx8IHMgPT09IDApO1xuICAgICAgdmFyIG11bHRpcGxpZXIgPSBNYXRoLnNxcnQoLTIgKiBNYXRoLmxvZyhzKSAvIHMpO1xuICAgICAgX25leHRHYXVzc2lhbiA9ICh2MiAqIG11bHRpcGxpZXIpO1xuICAgICAgX2hhc05leHRHYXVzc2lhbiA9IHRydWU7XG4gICAgICByZXR1cm4gbWVhbiArIHN0YW5kYXJkRGVyaXZhdGlvbiAqICh2MSAqIG11bHRpcGxpZXIpO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJhbmRvbSgpO1xuIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID1cbiAgZ2xvYmFsLnBlcmZvcm1hbmNlICYmXG4gIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPyBmdW5jdGlvbiBub3coKSB7XG4gICAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpXG4gIH0gOiBEYXRlLm5vdyB8fCBmdW5jdGlvbiBub3coKSB7XG4gICAgcmV0dXJuICtuZXcgRGF0ZVxuICB9XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGlzUHJvbWlzZTtcblxuZnVuY3Rpb24gaXNQcm9taXNlKG9iaikge1xuICByZXR1cm4gISFvYmogJiYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gaXNOb2RlXG5cbmZ1bmN0aW9uIGlzTm9kZSAodmFsKSB7XG4gIHJldHVybiAoIXZhbCB8fCB0eXBlb2YgdmFsICE9PSAnb2JqZWN0JylcbiAgICA/IGZhbHNlXG4gICAgOiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHdpbmRvdy5Ob2RlID09PSAnb2JqZWN0JylcbiAgICAgID8gKHZhbCBpbnN0YW5jZW9mIHdpbmRvdy5Ob2RlKVxuICAgICAgOiAodHlwZW9mIHZhbC5ub2RlVHlwZSA9PT0gJ251bWJlcicpICYmXG4gICAgICAgICh0eXBlb2YgdmFsLm5vZGVOYW1lID09PSAnc3RyaW5nJylcbn1cbiIsIi8vIFRPRE86IFdlIGNhbiByZW1vdmUgYSBodWdlIGNodW5rIG9mIGJ1bmRsZSBzaXplIGJ5IHVzaW5nIGEgc21hbGxlclxuLy8gdXRpbGl0eSBtb2R1bGUgZm9yIGNvbnZlcnRpbmcgdW5pdHMuXG5pbXBvcnQgaXNET00gZnJvbSAnaXMtZG9tJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudEFQSSAoKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3dbJ2NhbnZhcy1za2V0Y2gtY2xpJ107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkICgpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJndW1lbnRzW2ldICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHNbaV07XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Jyb3dzZXIgKCkge1xuICByZXR1cm4gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2ViR0xDb250ZXh0IChjdHgpIHtcbiAgcmV0dXJuIHR5cGVvZiBjdHguY2xlYXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGN0eC5jbGVhckNvbG9yID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjdHguYnVmZmVyRGF0YSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FudmFzIChlbGVtZW50KSB7XG4gIHJldHVybiBpc0RPTShlbGVtZW50KSAmJiAvY2FudmFzL2kudGVzdChlbGVtZW50Lm5vZGVOYW1lKSAmJiB0eXBlb2YgZWxlbWVudC5nZXRDb250ZXh0ID09PSAnZnVuY3Rpb24nO1xufVxuIiwiLyohXG4gKiByZXBlYXQtc3RyaW5nIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9yZXBlYXQtc3RyaW5nPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBKb24gU2NobGlua2VydC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogUmVzdWx0cyBjYWNoZVxuICovXG5cbnZhciByZXMgPSAnJztcbnZhciBjYWNoZTtcblxuLyoqXG4gKiBFeHBvc2UgYHJlcGVhdGBcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcGVhdDtcblxuLyoqXG4gKiBSZXBlYXQgdGhlIGdpdmVuIGBzdHJpbmdgIHRoZSBzcGVjaWZpZWQgYG51bWJlcmBcbiAqIG9mIHRpbWVzLlxuICpcbiAqICoqRXhhbXBsZToqKlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVwZWF0ID0gcmVxdWlyZSgncmVwZWF0LXN0cmluZycpO1xuICogcmVwZWF0KCdBJywgNSk7XG4gKiAvLz0+IEFBQUFBXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYHN0cmluZ2AgVGhlIHN0cmluZyB0byByZXBlYXRcbiAqIEBwYXJhbSB7TnVtYmVyfSBgbnVtYmVyYCBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgc3RyaW5nXG4gKiBAcmV0dXJuIHtTdHJpbmd9IFJlcGVhdGVkIHN0cmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiByZXBlYXQoc3RyLCBudW0pIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhwZWN0ZWQgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIC8vIGNvdmVyIGNvbW1vbiwgcXVpY2sgdXNlIGNhc2VzXG4gIGlmIChudW0gPT09IDEpIHJldHVybiBzdHI7XG4gIGlmIChudW0gPT09IDIpIHJldHVybiBzdHIgKyBzdHI7XG5cbiAgdmFyIG1heCA9IHN0ci5sZW5ndGggKiBudW07XG4gIGlmIChjYWNoZSAhPT0gc3RyIHx8IHR5cGVvZiBjYWNoZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjYWNoZSA9IHN0cjtcbiAgICByZXMgPSAnJztcbiAgfSBlbHNlIGlmIChyZXMubGVuZ3RoID49IG1heCkge1xuICAgIHJldHVybiByZXMuc3Vic3RyKDAsIG1heCk7XG4gIH1cblxuICB3aGlsZSAobWF4ID4gcmVzLmxlbmd0aCAmJiBudW0gPiAxKSB7XG4gICAgaWYgKG51bSAmIDEpIHtcbiAgICAgIHJlcyArPSBzdHI7XG4gICAgfVxuXG4gICAgbnVtID4+PSAxO1xuICAgIHN0ciArPSBzdHI7XG4gIH1cblxuICByZXMgKz0gc3RyO1xuICByZXMgPSByZXMuc3Vic3RyKDAsIG1heCk7XG4gIHJldHVybiByZXM7XG59XG4iLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbidcbiAgPyBPYmplY3Qua2V5cyA6IHNoaW07XG5cbmV4cG9ydHMuc2hpbSA9IHNoaW07XG5mdW5jdGlvbiBzaGltIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gIHJldHVybiBrZXlzO1xufVxuIiwidmFyIHN1cHBvcnRzQXJndW1lbnRzQ2xhc3MgPSAoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudHMpXG59KSgpID09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBzdXBwb3J0c0FyZ3VtZW50c0NsYXNzID8gc3VwcG9ydGVkIDogdW5zdXBwb3J0ZWQ7XG5cbmV4cG9ydHMuc3VwcG9ydGVkID0gc3VwcG9ydGVkO1xuZnVuY3Rpb24gc3VwcG9ydGVkKG9iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG59O1xuXG5leHBvcnRzLnVuc3VwcG9ydGVkID0gdW5zdXBwb3J0ZWQ7XG5mdW5jdGlvbiB1bnN1cHBvcnRlZChvYmplY3Qpe1xuICByZXR1cm4gb2JqZWN0ICYmXG4gICAgdHlwZW9mIG9iamVjdCA9PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiBvYmplY3QubGVuZ3RoID09ICdudW1iZXInICYmXG4gICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ2NhbGxlZScpICYmXG4gICAgIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsICdjYWxsZWUnKSB8fFxuICAgIGZhbHNlO1xufTtcbiIsInZhciBwU2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4vbGliL2tleXMuanMnKTtcbnZhciBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vbGliL2lzX2FyZ3VtZW50cy5qcycpO1xuXG52YXIgZGVlcEVxdWFsID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYWN0dWFsLCBleHBlY3RlZCwgb3B0cykge1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcbiAgLy8gNy4xLiBBbGwgaWRlbnRpY2FsIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfSBlbHNlIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBEYXRlICYmIGV4cGVjdGVkIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBhY3R1YWwuZ2V0VGltZSgpID09PSBleHBlY3RlZC5nZXRUaW1lKCk7XG5cbiAgLy8gNy4zLiBPdGhlciBwYWlycyB0aGF0IGRvIG5vdCBib3RoIHBhc3MgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnLFxuICAvLyBlcXVpdmFsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5ID09LlxuICB9IGVsc2UgaWYgKCFhY3R1YWwgfHwgIWV4cGVjdGVkIHx8IHR5cGVvZiBhY3R1YWwgIT0gJ29iamVjdCcgJiYgdHlwZW9mIGV4cGVjdGVkICE9ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG9wdHMuc3RyaWN0ID8gYWN0dWFsID09PSBleHBlY3RlZCA6IGFjdHVhbCA9PSBleHBlY3RlZDtcblxuICAvLyA3LjQuIEZvciBhbGwgb3RoZXIgT2JqZWN0IHBhaXJzLCBpbmNsdWRpbmcgQXJyYXkgb2JqZWN0cywgZXF1aXZhbGVuY2UgaXNcbiAgLy8gZGV0ZXJtaW5lZCBieSBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGFzIHZlcmlmaWVkXG4gIC8vIHdpdGggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKSwgdGhlIHNhbWUgc2V0IG9mIGtleXNcbiAgLy8gKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksIGVxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeVxuICAvLyBjb3JyZXNwb25kaW5nIGtleSwgYW5kIGFuIGlkZW50aWNhbCAncHJvdG90eXBlJyBwcm9wZXJ0eS4gTm90ZTogdGhpc1xuICAvLyBhY2NvdW50cyBmb3IgYm90aCBuYW1lZCBhbmQgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIEFycmF5cy5cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCwgb3B0cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWRPck51bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyICh4KSB7XG4gIGlmICgheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHgubGVuZ3RoICE9PSAnbnVtYmVyJykgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIHguY29weSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgeC5zbGljZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoeC5sZW5ndGggPiAwICYmIHR5cGVvZiB4WzBdICE9PSAnbnVtYmVyJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYiwgb3B0cykge1xuICB2YXIgaSwga2V5O1xuICBpZiAoaXNVbmRlZmluZWRPck51bGwoYSkgfHwgaXNVbmRlZmluZWRPck51bGwoYikpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvLyBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuXG4gIGlmIChhLnByb3RvdHlwZSAhPT0gYi5wcm90b3R5cGUpIHJldHVybiBmYWxzZTtcbiAgLy9+fn5JJ3ZlIG1hbmFnZWQgdG8gYnJlYWsgT2JqZWN0LmtleXMgdGhyb3VnaCBzY3Jld3kgYXJndW1lbnRzIHBhc3NpbmcuXG4gIC8vICAgQ29udmVydGluZyB0byBhcnJheSBzb2x2ZXMgdGhlIHByb2JsZW0uXG4gIGlmIChpc0FyZ3VtZW50cyhhKSkge1xuICAgIGlmICghaXNBcmd1bWVudHMoYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgYSA9IHBTbGljZS5jYWxsKGEpO1xuICAgIGIgPSBwU2xpY2UuY2FsbChiKTtcbiAgICByZXR1cm4gZGVlcEVxdWFsKGEsIGIsIG9wdHMpO1xuICB9XG4gIGlmIChpc0J1ZmZlcihhKSkge1xuICAgIGlmICghaXNCdWZmZXIoYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYVtpXSAhPT0gYltpXSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB0cnkge1xuICAgIHZhciBrYSA9IG9iamVjdEtleXMoYSksXG4gICAgICAgIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgfSBjYXRjaCAoZSkgey8vaGFwcGVucyB3aGVuIG9uZSBpcyBhIHN0cmluZyBsaXRlcmFsIGFuZCB0aGUgb3RoZXIgaXNuJ3RcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPSBrYi5sZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvL3RoZSBzYW1lIHNldCBvZiBrZXlzIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLFxuICBrYS5zb3J0KCk7XG4gIGtiLnNvcnQoKTtcbiAgLy9+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPSBrYltpXSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvL2VxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeSBjb3JyZXNwb25kaW5nIGtleSwgYW5kXG4gIC8vfn5+cG9zc2libHkgZXhwZW5zaXZlIGRlZXAgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGtleSA9IGthW2ldO1xuICAgIGlmICghZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBvcHRzKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGI7XG59XG4iLCIvKlxuICogRGF0ZSBGb3JtYXQgMS4yLjNcbiAqIChjKSAyMDA3LTIwMDkgU3RldmVuIExldml0aGFuIDxzdGV2ZW5sZXZpdGhhbi5jb20+XG4gKiBNSVQgbGljZW5zZVxuICpcbiAqIEluY2x1ZGVzIGVuaGFuY2VtZW50cyBieSBTY290dCBUcmVuZGEgPHNjb3R0LnRyZW5kYS5uZXQ+XG4gKiBhbmQgS3JpcyBLb3dhbCA8Y2l4YXIuY29tL35rcmlzLmtvd2FsLz5cbiAqXG4gKiBBY2NlcHRzIGEgZGF0ZSwgYSBtYXNrLCBvciBhIGRhdGUgYW5kIGEgbWFzay5cbiAqIFJldHVybnMgYSBmb3JtYXR0ZWQgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSBkYXRlIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGRhdGUvdGltZS5cbiAqIFRoZSBtYXNrIGRlZmF1bHRzIHRvIGRhdGVGb3JtYXQubWFza3MuZGVmYXVsdC5cbiAqL1xuXG4oZnVuY3Rpb24oZ2xvYmFsKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgZGF0ZUZvcm1hdCA9IChmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0b2tlbiA9IC9kezEsNH18bXsxLDR9fHl5KD86eXkpP3woW0hoTXNUdF0pXFwxP3xbTGxvU1pXTl18XCJbXlwiXSpcInwnW14nXSonL2c7XG4gICAgICB2YXIgdGltZXpvbmUgPSAvXFxiKD86W1BNQ0VBXVtTRFBdVHwoPzpQYWNpZmljfE1vdW50YWlufENlbnRyYWx8RWFzdGVybnxBdGxhbnRpYykgKD86U3RhbmRhcmR8RGF5bGlnaHR8UHJldmFpbGluZykgVGltZXwoPzpHTVR8VVRDKSg/OlstK11cXGR7NH0pPylcXGIvZztcbiAgICAgIHZhciB0aW1lem9uZUNsaXAgPSAvW14tK1xcZEEtWl0vZztcbiAgXG4gICAgICAvLyBSZWdleGVzIGFuZCBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBhcmUgY2FjaGVkIHRocm91Z2ggY2xvc3VyZVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRlLCBtYXNrLCB1dGMsIGdtdCkge1xuICBcbiAgICAgICAgLy8gWW91IGNhbid0IHByb3ZpZGUgdXRjIGlmIHlvdSBza2lwIG90aGVyIGFyZ3MgKHVzZSB0aGUgJ1VUQzonIG1hc2sgcHJlZml4KVxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiBraW5kT2YoZGF0ZSkgPT09ICdzdHJpbmcnICYmICEvXFxkLy50ZXN0KGRhdGUpKSB7XG4gICAgICAgICAgbWFzayA9IGRhdGU7XG4gICAgICAgICAgZGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICBcbiAgICAgICAgZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGU7XG4gIFxuICAgICAgICBpZighKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgfVxuICBcbiAgICAgICAgaWYgKGlzTmFOKGRhdGUpKSB7XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbnZhbGlkIGRhdGUnKTtcbiAgICAgICAgfVxuICBcbiAgICAgICAgbWFzayA9IFN0cmluZyhkYXRlRm9ybWF0Lm1hc2tzW21hc2tdIHx8IG1hc2sgfHwgZGF0ZUZvcm1hdC5tYXNrc1snZGVmYXVsdCddKTtcbiAgXG4gICAgICAgIC8vIEFsbG93IHNldHRpbmcgdGhlIHV0Yy9nbXQgYXJndW1lbnQgdmlhIHRoZSBtYXNrXG4gICAgICAgIHZhciBtYXNrU2xpY2UgPSBtYXNrLnNsaWNlKDAsIDQpO1xuICAgICAgICBpZiAobWFza1NsaWNlID09PSAnVVRDOicgfHwgbWFza1NsaWNlID09PSAnR01UOicpIHtcbiAgICAgICAgICBtYXNrID0gbWFzay5zbGljZSg0KTtcbiAgICAgICAgICB1dGMgPSB0cnVlO1xuICAgICAgICAgIGlmIChtYXNrU2xpY2UgPT09ICdHTVQ6Jykge1xuICAgICAgICAgICAgZ210ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgXG4gICAgICAgIHZhciBfID0gdXRjID8gJ2dldFVUQycgOiAnZ2V0JztcbiAgICAgICAgdmFyIGQgPSBkYXRlW18gKyAnRGF0ZSddKCk7XG4gICAgICAgIHZhciBEID0gZGF0ZVtfICsgJ0RheSddKCk7XG4gICAgICAgIHZhciBtID0gZGF0ZVtfICsgJ01vbnRoJ10oKTtcbiAgICAgICAgdmFyIHkgPSBkYXRlW18gKyAnRnVsbFllYXInXSgpO1xuICAgICAgICB2YXIgSCA9IGRhdGVbXyArICdIb3VycyddKCk7XG4gICAgICAgIHZhciBNID0gZGF0ZVtfICsgJ01pbnV0ZXMnXSgpO1xuICAgICAgICB2YXIgcyA9IGRhdGVbXyArICdTZWNvbmRzJ10oKTtcbiAgICAgICAgdmFyIEwgPSBkYXRlW18gKyAnTWlsbGlzZWNvbmRzJ10oKTtcbiAgICAgICAgdmFyIG8gPSB1dGMgPyAwIDogZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgICAgICB2YXIgVyA9IGdldFdlZWsoZGF0ZSk7XG4gICAgICAgIHZhciBOID0gZ2V0RGF5T2ZXZWVrKGRhdGUpO1xuICAgICAgICB2YXIgZmxhZ3MgPSB7XG4gICAgICAgICAgZDogICAgZCxcbiAgICAgICAgICBkZDogICBwYWQoZCksXG4gICAgICAgICAgZGRkOiAgZGF0ZUZvcm1hdC5pMThuLmRheU5hbWVzW0RdLFxuICAgICAgICAgIGRkZGQ6IGRhdGVGb3JtYXQuaTE4bi5kYXlOYW1lc1tEICsgN10sXG4gICAgICAgICAgbTogICAgbSArIDEsXG4gICAgICAgICAgbW06ICAgcGFkKG0gKyAxKSxcbiAgICAgICAgICBtbW06ICBkYXRlRm9ybWF0LmkxOG4ubW9udGhOYW1lc1ttXSxcbiAgICAgICAgICBtbW1tOiBkYXRlRm9ybWF0LmkxOG4ubW9udGhOYW1lc1ttICsgMTJdLFxuICAgICAgICAgIHl5OiAgIFN0cmluZyh5KS5zbGljZSgyKSxcbiAgICAgICAgICB5eXl5OiB5LFxuICAgICAgICAgIGg6ICAgIEggJSAxMiB8fCAxMixcbiAgICAgICAgICBoaDogICBwYWQoSCAlIDEyIHx8IDEyKSxcbiAgICAgICAgICBIOiAgICBILFxuICAgICAgICAgIEhIOiAgIHBhZChIKSxcbiAgICAgICAgICBNOiAgICBNLFxuICAgICAgICAgIE1NOiAgIHBhZChNKSxcbiAgICAgICAgICBzOiAgICBzLFxuICAgICAgICAgIHNzOiAgIHBhZChzKSxcbiAgICAgICAgICBsOiAgICBwYWQoTCwgMyksXG4gICAgICAgICAgTDogICAgcGFkKE1hdGgucm91bmQoTCAvIDEwKSksXG4gICAgICAgICAgdDogICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1swXSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbMV0sXG4gICAgICAgICAgdHQ6ICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1syXSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbM10sXG4gICAgICAgICAgVDogICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1s0XSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbNV0sXG4gICAgICAgICAgVFQ6ICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1s2XSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbN10sXG4gICAgICAgICAgWjogICAgZ210ID8gJ0dNVCcgOiB1dGMgPyAnVVRDJyA6IChTdHJpbmcoZGF0ZSkubWF0Y2godGltZXpvbmUpIHx8IFsnJ10pLnBvcCgpLnJlcGxhY2UodGltZXpvbmVDbGlwLCAnJyksXG4gICAgICAgICAgbzogICAgKG8gPiAwID8gJy0nIDogJysnKSArIHBhZChNYXRoLmZsb29yKE1hdGguYWJzKG8pIC8gNjApICogMTAwICsgTWF0aC5hYnMobykgJSA2MCwgNCksXG4gICAgICAgICAgUzogICAgWyd0aCcsICdzdCcsICduZCcsICdyZCddW2QgJSAxMCA+IDMgPyAwIDogKGQgJSAxMDAgLSBkICUgMTAgIT0gMTApICogZCAlIDEwXSxcbiAgICAgICAgICBXOiAgICBXLFxuICAgICAgICAgIE46ICAgIE5cbiAgICAgICAgfTtcbiAgXG4gICAgICAgIHJldHVybiBtYXNrLnJlcGxhY2UodG9rZW4sIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgIGlmIChtYXRjaCBpbiBmbGFncykge1xuICAgICAgICAgICAgcmV0dXJuIGZsYWdzW21hdGNoXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLnNsaWNlKDEsIG1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSkoKTtcblxuICBkYXRlRm9ybWF0Lm1hc2tzID0ge1xuICAgICdkZWZhdWx0JzogICAgICAgICAgICAgICAnZGRkIG1tbSBkZCB5eXl5IEhIOk1NOnNzJyxcbiAgICAnc2hvcnREYXRlJzogICAgICAgICAgICAgJ20vZC95eScsXG4gICAgJ21lZGl1bURhdGUnOiAgICAgICAgICAgICdtbW0gZCwgeXl5eScsXG4gICAgJ2xvbmdEYXRlJzogICAgICAgICAgICAgICdtbW1tIGQsIHl5eXknLFxuICAgICdmdWxsRGF0ZSc6ICAgICAgICAgICAgICAnZGRkZCwgbW1tbSBkLCB5eXl5JyxcbiAgICAnc2hvcnRUaW1lJzogICAgICAgICAgICAgJ2g6TU0gVFQnLFxuICAgICdtZWRpdW1UaW1lJzogICAgICAgICAgICAnaDpNTTpzcyBUVCcsXG4gICAgJ2xvbmdUaW1lJzogICAgICAgICAgICAgICdoOk1NOnNzIFRUIFonLFxuICAgICdpc29EYXRlJzogICAgICAgICAgICAgICAneXl5eS1tbS1kZCcsXG4gICAgJ2lzb1RpbWUnOiAgICAgICAgICAgICAgICdISDpNTTpzcycsXG4gICAgJ2lzb0RhdGVUaW1lJzogICAgICAgICAgICd5eXl5LW1tLWRkXFwnVFxcJ0hIOk1NOnNzbycsXG4gICAgJ2lzb1V0Y0RhdGVUaW1lJzogICAgICAgICdVVEM6eXl5eS1tbS1kZFxcJ1RcXCdISDpNTTpzc1xcJ1pcXCcnLFxuICAgICdleHBpcmVzSGVhZGVyRm9ybWF0JzogICAnZGRkLCBkZCBtbW0geXl5eSBISDpNTTpzcyBaJ1xuICB9O1xuXG4gIC8vIEludGVybmF0aW9uYWxpemF0aW9uIHN0cmluZ3NcbiAgZGF0ZUZvcm1hdC5pMThuID0ge1xuICAgIGRheU5hbWVzOiBbXG4gICAgICAnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0JyxcbiAgICAgICdTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSdcbiAgICBdLFxuICAgIG1vbnRoTmFtZXM6IFtcbiAgICAgICdKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYycsXG4gICAgICAnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlcidcbiAgICBdLFxuICAgIHRpbWVOYW1lczogW1xuICAgICAgJ2EnLCAncCcsICdhbScsICdwbScsICdBJywgJ1AnLCAnQU0nLCAnUE0nXG4gICAgXVxuICB9O1xuXG5mdW5jdGlvbiBwYWQodmFsLCBsZW4pIHtcbiAgdmFsID0gU3RyaW5nKHZhbCk7XG4gIGxlbiA9IGxlbiB8fCAyO1xuICB3aGlsZSAodmFsLmxlbmd0aCA8IGxlbikge1xuICAgIHZhbCA9ICcwJyArIHZhbDtcbiAgfVxuICByZXR1cm4gdmFsO1xufVxuXG4vKipcbiAqIEdldCB0aGUgSVNPIDg2MDEgd2VlayBudW1iZXJcbiAqIEJhc2VkIG9uIGNvbW1lbnRzIGZyb21cbiAqIGh0dHA6Ly90ZWNoYmxvZy5wcm9jdXJpb3Mubmwvay9uNjE4L25ld3Mvdmlldy8zMzc5Ni8xNDg2My9DYWxjdWxhdGUtSVNPLTg2MDEtd2Vlay1hbmQteWVhci1pbi1qYXZhc2NyaXB0Lmh0bWxcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IGBkYXRlYFxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXRXZWVrKGRhdGUpIHtcbiAgLy8gUmVtb3ZlIHRpbWUgY29tcG9uZW50cyBvZiBkYXRlXG4gIHZhciB0YXJnZXRUaHVyc2RheSA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSk7XG5cbiAgLy8gQ2hhbmdlIGRhdGUgdG8gVGh1cnNkYXkgc2FtZSB3ZWVrXG4gIHRhcmdldFRodXJzZGF5LnNldERhdGUodGFyZ2V0VGh1cnNkYXkuZ2V0RGF0ZSgpIC0gKCh0YXJnZXRUaHVyc2RheS5nZXREYXkoKSArIDYpICUgNykgKyAzKTtcblxuICAvLyBUYWtlIEphbnVhcnkgNHRoIGFzIGl0IGlzIGFsd2F5cyBpbiB3ZWVrIDEgKHNlZSBJU08gODYwMSlcbiAgdmFyIGZpcnN0VGh1cnNkYXkgPSBuZXcgRGF0ZSh0YXJnZXRUaHVyc2RheS5nZXRGdWxsWWVhcigpLCAwLCA0KTtcblxuICAvLyBDaGFuZ2UgZGF0ZSB0byBUaHVyc2RheSBzYW1lIHdlZWtcbiAgZmlyc3RUaHVyc2RheS5zZXREYXRlKGZpcnN0VGh1cnNkYXkuZ2V0RGF0ZSgpIC0gKChmaXJzdFRodXJzZGF5LmdldERheSgpICsgNikgJSA3KSArIDMpO1xuXG4gIC8vIENoZWNrIGlmIGRheWxpZ2h0LXNhdmluZy10aW1lLXN3aXRjaCBvY2N1cnJlZCBhbmQgY29ycmVjdCBmb3IgaXRcbiAgdmFyIGRzID0gdGFyZ2V0VGh1cnNkYXkuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIGZpcnN0VGh1cnNkYXkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgdGFyZ2V0VGh1cnNkYXkuc2V0SG91cnModGFyZ2V0VGh1cnNkYXkuZ2V0SG91cnMoKSAtIGRzKTtcblxuICAvLyBOdW1iZXIgb2Ygd2Vla3MgYmV0d2VlbiB0YXJnZXQgVGh1cnNkYXkgYW5kIGZpcnN0IFRodXJzZGF5XG4gIHZhciB3ZWVrRGlmZiA9ICh0YXJnZXRUaHVyc2RheSAtIGZpcnN0VGh1cnNkYXkpIC8gKDg2NDAwMDAwKjcpO1xuICByZXR1cm4gMSArIE1hdGguZmxvb3Iod2Vla0RpZmYpO1xufVxuXG4vKipcbiAqIEdldCBJU08tODYwMSBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgb2YgdGhlIHdlZWtcbiAqIDEgKGZvciBNb25kYXkpIHRocm91Z2ggNyAoZm9yIFN1bmRheSlcbiAqIFxuICogQHBhcmFtICB7T2JqZWN0fSBgZGF0ZWBcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0RGF5T2ZXZWVrKGRhdGUpIHtcbiAgdmFyIGRvdyA9IGRhdGUuZ2V0RGF5KCk7XG4gIGlmKGRvdyA9PT0gMCkge1xuICAgIGRvdyA9IDc7XG4gIH1cbiAgcmV0dXJuIGRvdztcbn1cblxuLyoqXG4gKiBraW5kLW9mIHNob3J0Y3V0XG4gKiBAcGFyYW0gIHsqfSB2YWxcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24ga2luZE9mKHZhbCkge1xuICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdudWxsJztcbiAgfVxuXG4gIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB0eXBlb2YgdmFsO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgIHJldHVybiAnYXJyYXknO1xuICB9XG5cbiAgcmV0dXJuIHt9LnRvU3RyaW5nLmNhbGwodmFsKVxuICAgIC5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKTtcbn07XG5cblxuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGRhdGVGb3JtYXQ7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBkYXRlRm9ybWF0O1xuICB9IGVsc2Uge1xuICAgIGdsb2JhbC5kYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdDtcbiAgfVxufSkodGhpcyk7XG4iLCIvKiFcbiAqIHBhZC1sZWZ0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9wYWQtbGVmdD5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgSm9uIFNjaGxpbmtlcnQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVwZWF0ID0gcmVxdWlyZSgncmVwZWF0LXN0cmluZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhZExlZnQoc3RyLCBudW0sIGNoKSB7XG4gIHN0ciA9IHN0ci50b1N0cmluZygpO1xuXG4gIGlmICh0eXBlb2YgbnVtID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBpZiAoY2ggPT09IDApIHtcbiAgICBjaCA9ICcwJztcbiAgfSBlbHNlIGlmIChjaCkge1xuICAgIGNoID0gY2gudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICBjaCA9ICcgJztcbiAgfVxuXG4gIHJldHVybiByZXBlYXQoY2gsIG51bSAtIHN0ci5sZW5ndGgpICsgc3RyO1xufTtcbiIsImltcG9ydCBkYXRlZm9ybWF0IGZyb20gJ2RhdGVmb3JtYXQnO1xuaW1wb3J0IGFzc2lnbiBmcm9tICdvYmplY3QtYXNzaWduJztcbmltcG9ydCBwYWRMZWZ0IGZyb20gJ3BhZC1sZWZ0JztcbmltcG9ydCB7IGdldENsaWVudEFQSSB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcbmxldCBsaW5rO1xubGV0IGRlZmF1bHRFeHRzID0geyBleHRlbnNpb246ICcnLCBwcmVmaXg6ICcnLCBzdWZmaXg6ICcnIH07XG5cbi8vIEFsdGVybmF0aXZlIHNvbHV0aW9uIGZvciBzYXZpbmcgZmlsZXMsXG4vLyBhIGJpdCBzbG93ZXIgYW5kIGRvZXMgbm90IHdvcmsgaW4gU2FmYXJpXG4vLyBmdW5jdGlvbiBmZXRjaEJsb2JGcm9tRGF0YVVSTCAoZGF0YVVSTCkge1xuLy8gICByZXR1cm4gd2luZG93LmZldGNoKGRhdGFVUkwpLnRoZW4ocmVzID0+IHJlcy5ibG9iKCkpO1xuLy8gfVxuXG5jb25zdCBzdXBwb3J0ZWRFbmNvZGluZ3MgPSBbXG4gICdpbWFnZS9wbmcnLFxuICAnaW1hZ2UvanBlZycsXG4gICdpbWFnZS93ZWJwJ1xuXTtcblxuZnVuY3Rpb24gc3RyZWFtIChpc1N0YXJ0LCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBvcHRzID0gYXNzaWduKHt9LCBkZWZhdWx0RXh0cywgb3B0cyk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSByZXNvbHZlRmlsZW5hbWUoT2JqZWN0LmFzc2lnbih7fSwgb3B0cywge1xuICAgICAgZXh0ZW5zaW9uOiAnJyxcbiAgICAgIGZyYW1lOiB1bmRlZmluZWRcbiAgICB9KSk7XG4gICAgY29uc3QgZnVuYyA9IGlzU3RhcnQgPyAnc3RyZWFtU3RhcnQnIDogJ3N0cmVhbUVuZCc7XG4gICAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gICAgaWYgKGNsaWVudCAmJiBjbGllbnQub3V0cHV0ICYmIHR5cGVvZiBjbGllbnRbZnVuY10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBjbGllbnRbZnVuY10oYXNzaWduKHt9LCBvcHRzLCB7IGZpbGVuYW1lIH0pKVxuICAgICAgICAudGhlbihldiA9PiByZXNvbHZlKGV2KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXNvbHZlKHsgZmlsZW5hbWUsIGNsaWVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbVN0YXJ0IChvcHRzID0ge30pIHtcbiAgcmV0dXJuIHN0cmVhbSh0cnVlLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbUVuZCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBzdHJlYW0oZmFsc2UsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0Q2FudmFzIChjYW52YXMsIG9wdCA9IHt9KSB7XG4gIGNvbnN0IGVuY29kaW5nID0gb3B0LmVuY29kaW5nIHx8ICdpbWFnZS9wbmcnO1xuICBpZiAoIXN1cHBvcnRlZEVuY29kaW5ncy5pbmNsdWRlcyhlbmNvZGluZykpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjYW52YXMgZW5jb2RpbmcgJHtlbmNvZGluZ31gKTtcbiAgbGV0IGV4dGVuc2lvbiA9IChlbmNvZGluZy5zcGxpdCgnLycpWzFdIHx8ICcnKS5yZXBsYWNlKC9qcGVnL2ksICdqcGcnKTtcbiAgaWYgKGV4dGVuc2lvbikgZXh0ZW5zaW9uID0gYC4ke2V4dGVuc2lvbn1gLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiB7XG4gICAgZXh0ZW5zaW9uLFxuICAgIHR5cGU6IGVuY29kaW5nLFxuICAgIGRhdGFVUkw6IGNhbnZhcy50b0RhdGFVUkwoZW5jb2RpbmcsIG9wdC5lbmNvZGluZ1F1YWxpdHkpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJsb2JGcm9tRGF0YVVSTCAoZGF0YVVSTCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBzcGxpdEluZGV4ID0gZGF0YVVSTC5pbmRleE9mKCcsJyk7XG4gICAgaWYgKHNwbGl0SW5kZXggPT09IC0xKSB7XG4gICAgICByZXNvbHZlKG5ldyB3aW5kb3cuQmxvYigpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmFzZTY0ID0gZGF0YVVSTC5zbGljZShzcGxpdEluZGV4ICsgMSk7XG4gICAgY29uc3QgYnl0ZVN0cmluZyA9IHdpbmRvdy5hdG9iKGJhc2U2NCk7XG4gICAgY29uc3QgdHlwZSA9IGRhdGFVUkwuc2xpY2UoMCwgc3BsaXRJbmRleCk7XG4gICAgY29uc3QgbWltZU1hdGNoID0gL2RhdGE6KFteO10rKS8uZXhlYyh0eXBlKTtcbiAgICBjb25zdCBtaW1lID0gKG1pbWVNYXRjaCA/IG1pbWVNYXRjaFsxXSA6ICcnKSB8fCB1bmRlZmluZWQ7XG4gICAgY29uc3QgYWIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpO1xuICAgIGNvbnN0IGlhID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgaWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIHJlc29sdmUobmV3IHdpbmRvdy5CbG9iKFsgYWIgXSwgeyB0eXBlOiBtaW1lIH0pKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlRGF0YVVSTCAoZGF0YVVSTCwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBjcmVhdGVCbG9iRnJvbURhdGFVUkwoZGF0YVVSTClcbiAgICAudGhlbihibG9iID0+IHNhdmVCbG9iKGJsb2IsIG9wdHMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVCbG9iIChibG9iLCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIG9wdHMgPSBhc3NpZ24oe30sIGRlZmF1bHRFeHRzLCBvcHRzKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IG9wdHMuZmlsZW5hbWU7XG5cbiAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgICBpZiAoY2xpZW50ICYmIHR5cGVvZiBjbGllbnQuc2F2ZUJsb2IgPT09ICdmdW5jdGlvbicgJiYgY2xpZW50Lm91dHB1dCkge1xuICAgICAgLy8gbmF0aXZlIHNhdmluZyB1c2luZyBhIENMSSB0b29sXG4gICAgICByZXR1cm4gY2xpZW50LnNhdmVCbG9iKGJsb2IsIGFzc2lnbih7fSwgb3B0cywgeyBmaWxlbmFtZSB9KSlcbiAgICAgICAgLnRoZW4oZXYgPT4gcmVzb2x2ZShldikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmb3JjZSBkb3dubG9hZFxuICAgICAgaWYgKCFsaW5rKSB7XG4gICAgICAgIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICBsaW5rLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgfVxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgbGluay5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgbGluay5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICBsaW5rLm9uY2xpY2sgPSBub29wO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICBpZiAobGluay5wYXJlbnRFbGVtZW50KSBsaW5rLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgICAgICAgbGluay5yZW1vdmVBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgICAgICByZXNvbHZlKHsgZmlsZW5hbWUsIGNsaWVudDogZmFsc2UgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUZpbGUgKGRhdGEsIG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJ0cyA9IEFycmF5LmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogWyBkYXRhIF07XG4gIGNvbnN0IGJsb2IgPSBuZXcgd2luZG93LkJsb2IocGFydHMsIHsgdHlwZTogb3B0cy50eXBlIHx8ICcnIH0pO1xuICByZXR1cm4gc2F2ZUJsb2IoYmxvYiwgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lU3RhbXAgKCkge1xuICBjb25zdCBkYXRlRm9ybWF0U3RyID0gYHl5eXkubW0uZGQtSEguTU0uc3NgO1xuICByZXR1cm4gZGF0ZWZvcm1hdChuZXcgRGF0ZSgpLCBkYXRlRm9ybWF0U3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRGaWxlIChwcmVmaXggPSAnJywgc3VmZml4ID0gJycsIGV4dCkge1xuICAvLyBjb25zdCBkYXRlRm9ybWF0U3RyID0gYHl5eXkubW0uZGQtSEguTU0uc3NgO1xuICBjb25zdCBkYXRlRm9ybWF0U3RyID0gYHl5eXktbW0tZGQgJ2F0JyBoLk1NLnNzIFRUYDtcbiAgcmV0dXJuIGAke3ByZWZpeH0ke2RhdGVmb3JtYXQobmV3IERhdGUoKSwgZGF0ZUZvcm1hdFN0cil9JHtzdWZmaXh9JHtleHR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVGaWxlbmFtZSAob3B0ID0ge30pIHtcbiAgb3B0ID0gYXNzaWduKHt9LCBvcHQpO1xuXG4gIC8vIEN1c3RvbSBmaWxlbmFtZSBmdW5jdGlvblxuICBpZiAodHlwZW9mIG9wdC5maWxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG9wdC5maWxlKG9wdCk7XG4gIH0gZWxzZSBpZiAob3B0LmZpbGUpIHtcbiAgICByZXR1cm4gb3B0LmZpbGU7XG4gIH1cblxuICBsZXQgZnJhbWUgPSBudWxsO1xuICBsZXQgZXh0ZW5zaW9uID0gJyc7XG4gIGlmICh0eXBlb2Ygb3B0LmV4dGVuc2lvbiA9PT0gJ3N0cmluZycpIGV4dGVuc2lvbiA9IG9wdC5leHRlbnNpb247XG5cbiAgaWYgKHR5cGVvZiBvcHQuZnJhbWUgPT09ICdudW1iZXInKSB7XG4gICAgbGV0IHRvdGFsRnJhbWVzO1xuICAgIGlmICh0eXBlb2Ygb3B0LnRvdGFsRnJhbWVzID09PSAnbnVtYmVyJykge1xuICAgICAgdG90YWxGcmFtZXMgPSBvcHQudG90YWxGcmFtZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvdGFsRnJhbWVzID0gTWF0aC5tYXgoMTAwMDAsIG9wdC5mcmFtZSk7XG4gICAgfVxuICAgIGZyYW1lID0gcGFkTGVmdChTdHJpbmcob3B0LmZyYW1lKSwgU3RyaW5nKHRvdGFsRnJhbWVzKS5sZW5ndGgsICcwJyk7XG4gIH1cblxuICBjb25zdCBsYXllclN0ciA9IGlzRmluaXRlKG9wdC50b3RhbExheWVycykgJiYgaXNGaW5pdGUob3B0LmxheWVyKSAmJiBvcHQudG90YWxMYXllcnMgPiAxID8gYCR7b3B0LmxheWVyfWAgOiAnJztcbiAgaWYgKGZyYW1lICE9IG51bGwpIHtcbiAgICByZXR1cm4gWyBsYXllclN0ciwgZnJhbWUgXS5maWx0ZXIoQm9vbGVhbikuam9pbignLScpICsgZXh0ZW5zaW9uO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRlZmF1bHRGaWxlTmFtZSA9IG9wdC50aW1lU3RhbXA7XG4gICAgcmV0dXJuIFsgb3B0LnByZWZpeCwgb3B0Lm5hbWUgfHwgZGVmYXVsdEZpbGVOYW1lLCBsYXllclN0ciwgb3B0Lmhhc2gsIG9wdC5zdWZmaXggXS5maWx0ZXIoQm9vbGVhbikuam9pbignLScpICsgZXh0ZW5zaW9uO1xuICB9XG59XG4iLCIvLyBIYW5kbGUgc29tZSBjb21tb24gdHlwb3NcbmNvbnN0IGNvbW1vblR5cG9zID0ge1xuICBkaW1lbnNpb246ICdkaW1lbnNpb25zJyxcbiAgYW5pbWF0ZWQ6ICdhbmltYXRlJyxcbiAgYW5pbWF0aW5nOiAnYW5pbWF0ZScsXG4gIHVuaXQ6ICd1bml0cycsXG4gIFA1OiAncDUnLFxuICBwaXhlbGxhdGVkOiAncGl4ZWxhdGVkJyxcbiAgbG9vcGluZzogJ2xvb3AnLFxuICBwaXhlbFBlckluY2g6ICdwaXhlbHMnXG59O1xuXG4vLyBIYW5kbGUgYWxsIG90aGVyIHR5cG9zXG5jb25zdCBhbGxLZXlzID0gW1xuICAnZGltZW5zaW9ucycsICd1bml0cycsICdwaXhlbHNQZXJJbmNoJywgJ29yaWVudGF0aW9uJyxcbiAgJ3NjYWxlVG9GaXQnLCAnc2NhbGVUb1ZpZXcnLCAnYmxlZWQnLCAncGl4ZWxSYXRpbycsXG4gICdleHBvcnRQaXhlbFJhdGlvJywgJ21heFBpeGVsUmF0aW8nLCAnc2NhbGVDb250ZXh0JyxcbiAgJ3Jlc2l6ZUNhbnZhcycsICdzdHlsZUNhbnZhcycsICdjYW52YXMnLCAnY29udGV4dCcsICdhdHRyaWJ1dGVzJyxcbiAgJ3BhcmVudCcsICdmaWxlJywgJ25hbWUnLCAncHJlZml4JywgJ3N1ZmZpeCcsICdhbmltYXRlJywgJ3BsYXlpbmcnLFxuICAnbG9vcCcsICdkdXJhdGlvbicsICd0b3RhbEZyYW1lcycsICdmcHMnLCAncGxheWJhY2tSYXRlJywgJ3RpbWVTY2FsZScsXG4gICdmcmFtZScsICd0aW1lJywgJ2ZsdXNoJywgJ3BpeGVsYXRlZCcsICdob3RrZXlzJywgJ3A1JywgJ2lkJyxcbiAgJ3NjYWxlVG9GaXRQYWRkaW5nJywgJ2RhdGEnLCAncGFyYW1zJywgJ2VuY29kaW5nJywgJ2VuY29kaW5nUXVhbGl0eSdcbl07XG5cbi8vIFRoaXMgaXMgZmFpcmx5IG9waW5pb25hdGVkIGFuZCBmb3JjZXMgdXNlcnMgdG8gdXNlIHRoZSAnZGF0YScgcGFyYW1ldGVyXG4vLyBpZiB0aGV5IHdhbnQgdG8gcGFzcyBhbG9uZyBub24tc2V0dGluZyBvYmplY3RzLi4uXG5leHBvcnQgY29uc3QgY2hlY2tTZXR0aW5ncyA9IChzZXR0aW5ncykgPT4ge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2V0dGluZ3MpO1xuICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoa2V5IGluIGNvbW1vblR5cG9zKSB7XG4gICAgICBjb25zdCBhY3R1YWwgPSBjb21tb25UeXBvc1trZXldO1xuICAgICAgY29uc29sZS53YXJuKGBbY2FudmFzLXNrZXRjaF0gQ291bGQgbm90IHJlY29nbml6ZSB0aGUgc2V0dGluZyBcIiR7a2V5fVwiLCBkaWQgeW91IG1lYW4gXCIke2FjdHVhbH1cIj9gKTtcbiAgICB9IGVsc2UgaWYgKCFhbGxLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW2NhbnZhcy1za2V0Y2hdIENvdWxkIG5vdCByZWNvZ25pemUgdGhlIHNldHRpbmcgXCIke2tleX1cImApO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiY29uc3QgZGVmYXVsdFVuaXRzID0gJ21tJztcblxuY29uc3QgZGF0YSA9IFtcbiAgLy8gQ29tbW9uIFBhcGVyIFNpemVzXG4gIC8vIChNb3N0bHkgTm9ydGgtQW1lcmljYW4gYmFzZWQpXG4gIFsgJ3Bvc3RjYXJkJywgMTAxLjYsIDE1Mi40IF0sXG4gIFsgJ3Bvc3Rlci1zbWFsbCcsIDI4MCwgNDMwIF0sXG4gIFsgJ3Bvc3RlcicsIDQ2MCwgNjEwIF0sXG4gIFsgJ3Bvc3Rlci1sYXJnZScsIDYxMCwgOTEwIF0sXG4gIFsgJ2J1c2luZXNzLWNhcmQnLCA1MC44LCA4OC45IF0sXG5cbiAgLy8gUGhvdG9ncmFwaGljIFByaW50IFBhcGVyIFNpemVzXG4gIFsgJzJyJywgNjQsIDg5IF0sXG4gIFsgJzNyJywgODksIDEyNyBdLFxuICBbICc0cicsIDEwMiwgMTUyIF0sXG4gIFsgJzVyJywgMTI3LCAxNzggXSwgLy8gNeKAs3g34oCzXG4gIFsgJzZyJywgMTUyLCAyMDMgXSwgLy8gNuKAs3g44oCzXG4gIFsgJzhyJywgMjAzLCAyNTQgXSwgLy8gOOKAs3gxMOKAs1xuICBbICcxMHInLCAyNTQsIDMwNSBdLCAvLyAxMOKAs3gxMuKAs1xuICBbICcxMXInLCAyNzksIDM1NiBdLCAvLyAxMeKAs3gxNOKAs1xuICBbICcxMnInLCAzMDUsIDM4MSBdLFxuXG4gIC8vIFN0YW5kYXJkIFBhcGVyIFNpemVzXG4gIFsgJ2EwJywgODQxLCAxMTg5IF0sXG4gIFsgJ2ExJywgNTk0LCA4NDEgXSxcbiAgWyAnYTInLCA0MjAsIDU5NCBdLFxuICBbICdhMycsIDI5NywgNDIwIF0sXG4gIFsgJ2E0JywgMjEwLCAyOTcgXSxcbiAgWyAnYTUnLCAxNDgsIDIxMCBdLFxuICBbICdhNicsIDEwNSwgMTQ4IF0sXG4gIFsgJ2E3JywgNzQsIDEwNSBdLFxuICBbICdhOCcsIDUyLCA3NCBdLFxuICBbICdhOScsIDM3LCA1MiBdLFxuICBbICdhMTAnLCAyNiwgMzcgXSxcbiAgWyAnMmEwJywgMTE4OSwgMTY4MiBdLFxuICBbICc0YTAnLCAxNjgyLCAyMzc4IF0sXG4gIFsgJ2IwJywgMTAwMCwgMTQxNCBdLFxuICBbICdiMScsIDcwNywgMTAwMCBdLFxuICBbICdiMSsnLCA3MjAsIDEwMjAgXSxcbiAgWyAnYjInLCA1MDAsIDcwNyBdLFxuICBbICdiMisnLCA1MjAsIDcyMCBdLFxuICBbICdiMycsIDM1MywgNTAwIF0sXG4gIFsgJ2I0JywgMjUwLCAzNTMgXSxcbiAgWyAnYjUnLCAxNzYsIDI1MCBdLFxuICBbICdiNicsIDEyNSwgMTc2IF0sXG4gIFsgJ2I3JywgODgsIDEyNSBdLFxuICBbICdiOCcsIDYyLCA4OCBdLFxuICBbICdiOScsIDQ0LCA2MiBdLFxuICBbICdiMTAnLCAzMSwgNDQgXSxcbiAgWyAnYjExJywgMjIsIDMyIF0sXG4gIFsgJ2IxMicsIDE2LCAyMiBdLFxuICBbICdjMCcsIDkxNywgMTI5NyBdLFxuICBbICdjMScsIDY0OCwgOTE3IF0sXG4gIFsgJ2MyJywgNDU4LCA2NDggXSxcbiAgWyAnYzMnLCAzMjQsIDQ1OCBdLFxuICBbICdjNCcsIDIyOSwgMzI0IF0sXG4gIFsgJ2M1JywgMTYyLCAyMjkgXSxcbiAgWyAnYzYnLCAxMTQsIDE2MiBdLFxuICBbICdjNycsIDgxLCAxMTQgXSxcbiAgWyAnYzgnLCA1NywgODEgXSxcbiAgWyAnYzknLCA0MCwgNTcgXSxcbiAgWyAnYzEwJywgMjgsIDQwIF0sXG4gIFsgJ2MxMScsIDIyLCAzMiBdLFxuICBbICdjMTInLCAxNiwgMjIgXSxcblxuICAvLyBVc2UgaW5jaGVzIGZvciBOb3J0aCBBbWVyaWNhbiBzaXplcyxcbiAgLy8gYXMgaXQgcHJvZHVjZXMgbGVzcyBmbG9hdCBwcmVjaXNpb24gZXJyb3JzXG4gIFsgJ2hhbGYtbGV0dGVyJywgNS41LCA4LjUsICdpbicgXSxcbiAgWyAnbGV0dGVyJywgOC41LCAxMSwgJ2luJyBdLFxuICBbICdsZWdhbCcsIDguNSwgMTQsICdpbicgXSxcbiAgWyAnanVuaW9yLWxlZ2FsJywgNSwgOCwgJ2luJyBdLFxuICBbICdsZWRnZXInLCAxMSwgMTcsICdpbicgXSxcbiAgWyAndGFibG9pZCcsIDExLCAxNywgJ2luJyBdLFxuICBbICdhbnNpLWEnLCA4LjUsIDExLjAsICdpbicgXSxcbiAgWyAnYW5zaS1iJywgMTEuMCwgMTcuMCwgJ2luJyBdLFxuICBbICdhbnNpLWMnLCAxNy4wLCAyMi4wLCAnaW4nIF0sXG4gIFsgJ2Fuc2ktZCcsIDIyLjAsIDM0LjAsICdpbicgXSxcbiAgWyAnYW5zaS1lJywgMzQuMCwgNDQuMCwgJ2luJyBdLFxuICBbICdhcmNoLWEnLCA5LCAxMiwgJ2luJyBdLFxuICBbICdhcmNoLWInLCAxMiwgMTgsICdpbicgXSxcbiAgWyAnYXJjaC1jJywgMTgsIDI0LCAnaW4nIF0sXG4gIFsgJ2FyY2gtZCcsIDI0LCAzNiwgJ2luJyBdLFxuICBbICdhcmNoLWUnLCAzNiwgNDgsICdpbicgXSxcbiAgWyAnYXJjaC1lMScsIDMwLCA0MiwgJ2luJyBdLFxuICBbICdhcmNoLWUyJywgMjYsIDM4LCAnaW4nIF0sXG4gIFsgJ2FyY2gtZTMnLCAyNywgMzksICdpbicgXVxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZGF0YS5yZWR1Y2UoKGRpY3QsIHByZXNldCkgPT4ge1xuICBjb25zdCBpdGVtID0ge1xuICAgIHVuaXRzOiBwcmVzZXRbM10gfHwgZGVmYXVsdFVuaXRzLFxuICAgIGRpbWVuc2lvbnM6IFsgcHJlc2V0WzFdLCBwcmVzZXRbMl0gXVxuICB9O1xuICBkaWN0W3ByZXNldFswXV0gPSBpdGVtO1xuICBkaWN0W3ByZXNldFswXS5yZXBsYWNlKC8tL2csICcgJyldID0gaXRlbTtcbiAgcmV0dXJuIGRpY3Q7XG59LCB7fSk7XG4iLCJ2YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcbnZhciB1bml0cyA9IFsgJ21tJywgJ2NtJywgJ20nLCAncGMnLCAncHQnLCAnaW4nLCAnZnQnLCAncHgnIF07XG5cbnZhciBjb252ZXJzaW9ucyA9IHtcbiAgLy8gbWV0cmljXG4gIG06IHtcbiAgICBzeXN0ZW06ICdtZXRyaWMnLFxuICAgIGZhY3RvcjogMVxuICB9LFxuICBjbToge1xuICAgIHN5c3RlbTogJ21ldHJpYycsXG4gICAgZmFjdG9yOiAxIC8gMTAwXG4gIH0sXG4gIG1tOiB7XG4gICAgc3lzdGVtOiAnbWV0cmljJyxcbiAgICBmYWN0b3I6IDEgLyAxMDAwXG4gIH0sXG4gIC8vIGltcGVyaWFsXG4gIHB0OiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMSAvIDcyXG4gIH0sXG4gIHBjOiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMSAvIDZcbiAgfSxcbiAgaW46IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxXG4gIH0sXG4gIGZ0OiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMTJcbiAgfVxufTtcblxuY29uc3QgYW5jaG9ycyA9IHtcbiAgbWV0cmljOiB7XG4gICAgdW5pdDogJ20nLFxuICAgIHJhdGlvOiAxIC8gMC4wMjU0XG4gIH0sXG4gIGltcGVyaWFsOiB7XG4gICAgdW5pdDogJ2luJyxcbiAgICByYXRpbzogMC4wMjU0XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJvdW5kICh2YWx1ZSwgZGVjaW1hbHMpIHtcbiAgcmV0dXJuIE51bWJlcihNYXRoLnJvdW5kKHZhbHVlICsgJ2UnICsgZGVjaW1hbHMpICsgJ2UtJyArIGRlY2ltYWxzKTtcbn1cblxuZnVuY3Rpb24gY29udmVydERpc3RhbmNlICh2YWx1ZSwgZnJvbVVuaXQsIHRvVW5pdCwgb3B0cykge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhaXNGaW5pdGUodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyJyk7XG4gIGlmICghZnJvbVVuaXQgfHwgIXRvVW5pdCkgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHNwZWNpZnkgZnJvbSBhbmQgdG8gdW5pdHMnKTtcblxuICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgdmFyIHBpeGVsc1BlckluY2ggPSBkZWZpbmVkKG9wdHMucGl4ZWxzUGVySW5jaCwgOTYpO1xuICB2YXIgcHJlY2lzaW9uID0gb3B0cy5wcmVjaXNpb247XG4gIHZhciByb3VuZFBpeGVsID0gb3B0cy5yb3VuZFBpeGVsICE9PSBmYWxzZTtcblxuICBmcm9tVW5pdCA9IGZyb21Vbml0LnRvTG93ZXJDYXNlKCk7XG4gIHRvVW5pdCA9IHRvVW5pdC50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmICh1bml0cy5pbmRleE9mKGZyb21Vbml0KSA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcm9tIHVuaXQgXCInICsgZnJvbVVuaXQgKyAnXCIsIG11c3QgYmUgb25lIG9mOiAnICsgdW5pdHMuam9pbignLCAnKSk7XG4gIGlmICh1bml0cy5pbmRleE9mKHRvVW5pdCkgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZnJvbSB1bml0IFwiJyArIHRvVW5pdCArICdcIiwgbXVzdCBiZSBvbmUgb2Y6ICcgKyB1bml0cy5qb2luKCcsICcpKTtcblxuICBpZiAoZnJvbVVuaXQgPT09IHRvVW5pdCkge1xuICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY29udmVydCBmcm9tIEEgdG8gQiBzaW5jZSB0aGV5IGFyZSB0aGUgc2FtZSBhbHJlYWR5XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgdmFyIHRvRmFjdG9yID0gMTtcbiAgdmFyIGZyb21GYWN0b3IgPSAxO1xuICB2YXIgaXNUb1BpeGVsID0gZmFsc2U7XG5cbiAgaWYgKGZyb21Vbml0ID09PSAncHgnKSB7XG4gICAgZnJvbUZhY3RvciA9IDEgLyBwaXhlbHNQZXJJbmNoO1xuICAgIGZyb21Vbml0ID0gJ2luJztcbiAgfVxuICBpZiAodG9Vbml0ID09PSAncHgnKSB7XG4gICAgaXNUb1BpeGVsID0gdHJ1ZTtcbiAgICB0b0ZhY3RvciA9IHBpeGVsc1BlckluY2g7XG4gICAgdG9Vbml0ID0gJ2luJztcbiAgfVxuXG4gIHZhciBmcm9tVW5pdERhdGEgPSBjb252ZXJzaW9uc1tmcm9tVW5pdF07XG4gIHZhciB0b1VuaXREYXRhID0gY29udmVyc2lvbnNbdG9Vbml0XTtcblxuICAvLyBzb3VyY2UgdG8gYW5jaG9yIGluc2lkZSBzb3VyY2UncyBzeXN0ZW1cbiAgdmFyIGFuY2hvciA9IHZhbHVlICogZnJvbVVuaXREYXRhLmZhY3RvciAqIGZyb21GYWN0b3I7XG5cbiAgLy8gaWYgc3lzdGVtcyBkaWZmZXIsIGNvbnZlcnQgb25lIHRvIGFub3RoZXJcbiAgaWYgKGZyb21Vbml0RGF0YS5zeXN0ZW0gIT09IHRvVW5pdERhdGEuc3lzdGVtKSB7XG4gICAgLy8gcmVndWxhciAnbScgdG8gJ2luJyBhbmQgc28gZm9ydGhcbiAgICBhbmNob3IgKj0gYW5jaG9yc1tmcm9tVW5pdERhdGEuc3lzdGVtXS5yYXRpbztcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBhbmNob3IgLyB0b1VuaXREYXRhLmZhY3RvciAqIHRvRmFjdG9yO1xuICBpZiAoaXNUb1BpeGVsICYmIHJvdW5kUGl4ZWwpIHtcbiAgICByZXN1bHQgPSBNYXRoLnJvdW5kKHJlc3VsdCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByZWNpc2lvbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUocHJlY2lzaW9uKSkge1xuICAgIHJlc3VsdCA9IHJvdW5kKHJlc3VsdCwgcHJlY2lzaW9uKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnREaXN0YW5jZTtcbm1vZHVsZS5leHBvcnRzLnVuaXRzID0gdW5pdHM7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYXJndW1lbnRzW2ldICE9PSB1bmRlZmluZWQpIHJldHVybiBhcmd1bWVudHNbaV07XG4gICAgfVxufTtcbiIsImltcG9ydCBwYXBlclNpemVzIGZyb20gJy4vcGFwZXItc2l6ZXMnO1xuaW1wb3J0IGNvbnZlcnRMZW5ndGggZnJvbSAnY29udmVydC1sZW5ndGgnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQgKGRpbWVuc2lvbnMsIHVuaXRzVG8gPSAncHgnLCBwaXhlbHNQZXJJbmNoID0gNzIpIHtcbiAgaWYgKHR5cGVvZiBkaW1lbnNpb25zID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGtleSA9IGRpbWVuc2lvbnMudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIShrZXkgaW4gcGFwZXJTaXplcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGRpbWVuc2lvbiBwcmVzZXQgXCIke2RpbWVuc2lvbnN9XCIgaXMgbm90IHN1cHBvcnRlZCBvciBjb3VsZCBub3QgYmUgZm91bmQ7IHRyeSB1c2luZyBhNCwgYTMsIHBvc3RjYXJkLCBsZXR0ZXIsIGV0Yy5gKVxuICAgIH1cbiAgICBjb25zdCBwcmVzZXQgPSBwYXBlclNpemVzW2tleV07XG4gICAgcmV0dXJuIHByZXNldC5kaW1lbnNpb25zLm1hcChkID0+IHtcbiAgICAgIHJldHVybiBjb252ZXJ0RGlzdGFuY2UoZCwgcHJlc2V0LnVuaXRzLCB1bml0c1RvLCBwaXhlbHNQZXJJbmNoKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGltZW5zaW9ucztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERpc3RhbmNlIChkaW1lbnNpb24sIHVuaXRzRnJvbSA9ICdweCcsIHVuaXRzVG8gPSAncHgnLCBwaXhlbHNQZXJJbmNoID0gNzIpIHtcbiAgcmV0dXJuIGNvbnZlcnRMZW5ndGgoZGltZW5zaW9uLCB1bml0c0Zyb20sIHVuaXRzVG8sIHtcbiAgICBwaXhlbHNQZXJJbmNoLFxuICAgIHByZWNpc2lvbjogNCxcbiAgICByb3VuZFBpeGVsOiB0cnVlXG4gIH0pO1xufVxuIiwiaW1wb3J0IHsgZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQsIGNvbnZlcnREaXN0YW5jZSB9IGZyb20gJy4uL2Rpc3RhbmNlcyc7XG5pbXBvcnQgeyBpc0Jyb3dzZXIsIGRlZmluZWQgfSBmcm9tICcuLi91dGlsJztcblxuZnVuY3Rpb24gY2hlY2tJZkhhc0RpbWVuc2lvbnMgKHNldHRpbmdzKSB7XG4gIGlmICghc2V0dGluZ3MuZGltZW5zaW9ucykgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIHNldHRpbmdzLmRpbWVuc2lvbnMgPT09ICdzdHJpbmcnKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc2V0dGluZ3MuZGltZW5zaW9ucykgJiYgc2V0dGluZ3MuZGltZW5zaW9ucy5sZW5ndGggPj0gMikgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50U2l6ZSAocHJvcHMsIHNldHRpbmdzKSB7XG4gIC8vIFdoZW4gbm8geyBkaW1lbnNpb24gfSBpcyBwYXNzZWQgaW4gbm9kZSwgd2UgZGVmYXVsdCB0byBIVE1MIGNhbnZhcyBzaXplXG4gIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICByZXR1cm4gWyAzMDAsIDE1MCBdO1xuICB9XG5cbiAgbGV0IGVsZW1lbnQgPSBzZXR0aW5ncy5wYXJlbnQgfHwgd2luZG93O1xuXG4gIGlmIChlbGVtZW50ID09PSB3aW5kb3cgfHxcbiAgICAgIGVsZW1lbnQgPT09IGRvY3VtZW50IHx8XG4gICAgICBlbGVtZW50ID09PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgcmV0dXJuIFsgd2luZG93LmlubmVyV2lkdGgsIHdpbmRvdy5pbm5lckhlaWdodCBdO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gWyB3aWR0aCwgaGVpZ2h0IF07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzaXplQ2FudmFzIChwcm9wcywgc2V0dGluZ3MpIHtcbiAgbGV0IHdpZHRoLCBoZWlnaHQ7XG4gIGxldCBzdHlsZVdpZHRoLCBzdHlsZUhlaWdodDtcbiAgbGV0IGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQ7XG5cbiAgY29uc3QgYnJvd3NlciA9IGlzQnJvd3NlcigpO1xuICBjb25zdCBkaW1lbnNpb25zID0gc2V0dGluZ3MuZGltZW5zaW9ucztcbiAgY29uc3QgaGFzRGltZW5zaW9ucyA9IGNoZWNrSWZIYXNEaW1lbnNpb25zKHNldHRpbmdzKTtcbiAgY29uc3QgZXhwb3J0aW5nID0gcHJvcHMuZXhwb3J0aW5nO1xuICBsZXQgc2NhbGVUb0ZpdCA9IGhhc0RpbWVuc2lvbnMgPyBzZXR0aW5ncy5zY2FsZVRvRml0ICE9PSBmYWxzZSA6IGZhbHNlO1xuICBsZXQgc2NhbGVUb1ZpZXcgPSAoIWV4cG9ydGluZyAmJiBoYXNEaW1lbnNpb25zKSA/IHNldHRpbmdzLnNjYWxlVG9WaWV3IDogdHJ1ZTtcbiAgLy8gaW4gbm9kZSwgY2FuY2VsIGJvdGggb2YgdGhlc2Ugb3B0aW9uc1xuICBpZiAoIWJyb3dzZXIpIHNjYWxlVG9GaXQgPSBzY2FsZVRvVmlldyA9IGZhbHNlO1xuICBjb25zdCB1bml0cyA9IHNldHRpbmdzLnVuaXRzO1xuICBjb25zdCBwaXhlbHNQZXJJbmNoID0gKHR5cGVvZiBzZXR0aW5ncy5waXhlbHNQZXJJbmNoID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzZXR0aW5ncy5waXhlbHNQZXJJbmNoKSkgPyBzZXR0aW5ncy5waXhlbHNQZXJJbmNoIDogNzI7XG4gIGNvbnN0IGJsZWVkID0gZGVmaW5lZChzZXR0aW5ncy5ibGVlZCwgMCk7XG5cbiAgY29uc3QgZGV2aWNlUGl4ZWxSYXRpbyA9IGJyb3dzZXIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDE7XG4gIGNvbnN0IGJhc2VQaXhlbFJhdGlvID0gc2NhbGVUb1ZpZXcgPyBkZXZpY2VQaXhlbFJhdGlvIDogMTtcblxuICBsZXQgcGl4ZWxSYXRpbywgZXhwb3J0UGl4ZWxSYXRpbztcblxuICAvLyBJZiBhIHBpeGVsIHJhdGlvIGlzIHNwZWNpZmllZCwgd2Ugd2lsbCB1c2UgaXQuXG4gIC8vIE90aGVyd2lzZTpcbiAgLy8gIC0+IElmIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIHVzZSBiYXNlIHJhdGlvIChpLmUuIHNpemUgZm9yIGV4cG9ydClcbiAgLy8gIC0+IElmIG5vIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIHVzZSBkZXZpY2UgcmF0aW8gKGkuZS4gc2l6ZSBmb3Igc2NyZWVuKVxuICBpZiAodHlwZW9mIHNldHRpbmdzLnBpeGVsUmF0aW8gPT09ICdudW1iZXInICYmIGlzRmluaXRlKHNldHRpbmdzLnBpeGVsUmF0aW8pKSB7XG4gICAgLy8gV2hlbiB7IHBpeGVsUmF0aW8gfSBpcyBzcGVjaWZpZWQsIGl0J3MgYWxzbyB1c2VkIGFzIGRlZmF1bHQgZXhwb3J0UGl4ZWxSYXRpby5cbiAgICBwaXhlbFJhdGlvID0gc2V0dGluZ3MucGl4ZWxSYXRpbztcbiAgICBleHBvcnRQaXhlbFJhdGlvID0gZGVmaW5lZChzZXR0aW5ncy5leHBvcnRQaXhlbFJhdGlvLCBwaXhlbFJhdGlvKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoaGFzRGltZW5zaW9ucykge1xuICAgICAgLy8gV2hlbiBhIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIHVzZSB0aGUgYmFzZSByYXRpbyByYXRoZXIgdGhhbiBzY3JlZW4gcmF0aW9cbiAgICAgIHBpeGVsUmF0aW8gPSBiYXNlUGl4ZWxSYXRpbztcbiAgICAgIC8vIERlZmF1bHQgdG8gYSBwaXhlbCByYXRpbyBvZiAxIHNvIHRoYXQgeW91IGVuZCB1cCB3aXRoIHRoZSBzYW1lIGRpbWVuc2lvblxuICAgICAgLy8geW91IHNwZWNpZmllZCwgaS5lLiBbIDUwMCwgNTAwIF0gaXMgZXhwb3J0ZWQgYXMgNTAweDUwMCBweFxuICAgICAgZXhwb3J0UGl4ZWxSYXRpbyA9IGRlZmluZWQoc2V0dGluZ3MuZXhwb3J0UGl4ZWxSYXRpbywgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIGFzc3VtZSBmdWxsLXNjcmVlbiByZXRpbmEgc2l6aW5nXG4gICAgICBwaXhlbFJhdGlvID0gZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgIC8vIERlZmF1bHQgdG8gc2NyZWVuIHBpeGVsIHJhdGlvLCBzbyB0aGF0IGl0J3MgbGlrZSB0YWtpbmcgYSBkZXZpY2Ugc2NyZWVuc2hvdFxuICAgICAgZXhwb3J0UGl4ZWxSYXRpbyA9IGRlZmluZWQoc2V0dGluZ3MuZXhwb3J0UGl4ZWxSYXRpbywgcGl4ZWxSYXRpbyk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2xhbXAgcGl4ZWwgcmF0aW9cbiAgaWYgKHR5cGVvZiBzZXR0aW5ncy5tYXhQaXhlbFJhdGlvID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzZXR0aW5ncy5tYXhQaXhlbFJhdGlvKSkge1xuICAgIHBpeGVsUmF0aW8gPSBNYXRoLm1pbihzZXR0aW5ncy5tYXhQaXhlbFJhdGlvLCBwaXhlbFJhdGlvKTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBleHBvcnQgcGl4ZWwgcmF0aW9cbiAgaWYgKGV4cG9ydGluZykge1xuICAgIHBpeGVsUmF0aW8gPSBleHBvcnRQaXhlbFJhdGlvO1xuICB9XG5cbiAgLy8gcGFyZW50V2lkdGggPSB0eXBlb2YgcGFyZW50V2lkdGggPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdE5vZGVTaXplWzBdIDogcGFyZW50V2lkdGg7XG4gIC8vIHBhcmVudEhlaWdodCA9IHR5cGVvZiBwYXJlbnRIZWlnaHQgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdE5vZGVTaXplWzFdIDogcGFyZW50SGVpZ2h0O1xuXG4gIGxldCBbIHBhcmVudFdpZHRoLCBwYXJlbnRIZWlnaHQgXSA9IGdldFBhcmVudFNpemUocHJvcHMsIHNldHRpbmdzKTtcbiAgbGV0IHRyaW1XaWR0aCwgdHJpbUhlaWdodDtcblxuICAvLyBZb3UgY2FuIHNwZWNpZnkgYSBkaW1lbnNpb25zIGluIHBpeGVscyBvciBjbS9tL2luL2V0Y1xuICBpZiAoaGFzRGltZW5zaW9ucykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGdldERpbWVuc2lvbnNGcm9tUHJlc2V0KGRpbWVuc2lvbnMsIHVuaXRzLCBwaXhlbHNQZXJJbmNoKTtcbiAgICBjb25zdCBoaWdoZXN0ID0gTWF0aC5tYXgocmVzdWx0WzBdLCByZXN1bHRbMV0pO1xuICAgIGNvbnN0IGxvd2VzdCA9IE1hdGgubWluKHJlc3VsdFswXSwgcmVzdWx0WzFdKTtcbiAgICBpZiAoc2V0dGluZ3Mub3JpZW50YXRpb24pIHtcbiAgICAgIGNvbnN0IGxhbmRzY2FwZSA9IHNldHRpbmdzLm9yaWVudGF0aW9uID09PSAnbGFuZHNjYXBlJztcbiAgICAgIHdpZHRoID0gbGFuZHNjYXBlID8gaGlnaGVzdCA6IGxvd2VzdDtcbiAgICAgIGhlaWdodCA9IGxhbmRzY2FwZSA/IGxvd2VzdCA6IGhpZ2hlc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpZHRoID0gcmVzdWx0WzBdO1xuICAgICAgaGVpZ2h0ID0gcmVzdWx0WzFdO1xuICAgIH1cblxuICAgIHRyaW1XaWR0aCA9IHdpZHRoO1xuICAgIHRyaW1IZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAvLyBBcHBseSBibGVlZCB3aGljaCBpcyBhc3N1bWVkIHRvIGJlIGluIHRoZSBzYW1lIHVuaXRzXG4gICAgd2lkdGggKz0gYmxlZWQgKiAyO1xuICAgIGhlaWdodCArPSBibGVlZCAqIDI7XG4gIH0gZWxzZSB7XG4gICAgd2lkdGggPSBwYXJlbnRXaWR0aDtcbiAgICBoZWlnaHQgPSBwYXJlbnRIZWlnaHQ7XG4gICAgdHJpbVdpZHRoID0gd2lkdGg7XG4gICAgdHJpbUhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIC8vIFJlYWwgc2l6ZSBpbiBwaXhlbHMgYWZ0ZXIgUFBJIGlzIHRha2VuIGludG8gYWNjb3VudFxuICBsZXQgcmVhbFdpZHRoID0gd2lkdGg7XG4gIGxldCByZWFsSGVpZ2h0ID0gaGVpZ2h0O1xuICBpZiAoaGFzRGltZW5zaW9ucyAmJiB1bml0cykge1xuICAgIC8vIENvbnZlcnQgdG8gZGlnaXRhbC9waXhlbCB1bml0cyBpZiBuZWNlc3NhcnlcbiAgICByZWFsV2lkdGggPSBjb252ZXJ0RGlzdGFuY2Uod2lkdGgsIHVuaXRzLCAncHgnLCBwaXhlbHNQZXJJbmNoKTtcbiAgICByZWFsSGVpZ2h0ID0gY29udmVydERpc3RhbmNlKGhlaWdodCwgdW5pdHMsICdweCcsIHBpeGVsc1BlckluY2gpO1xuICB9XG5cbiAgLy8gSG93IGJpZyB0byBzZXQgdGhlICd2aWV3JyBvZiB0aGUgY2FudmFzIGluIHRoZSBicm93c2VyIChpLmUuIHN0eWxlKVxuICBzdHlsZVdpZHRoID0gTWF0aC5yb3VuZChyZWFsV2lkdGgpO1xuICBzdHlsZUhlaWdodCA9IE1hdGgucm91bmQocmVhbEhlaWdodCk7XG5cbiAgLy8gSWYgd2Ugd2lzaCB0byBzY2FsZSB0aGUgdmlldyB0byB0aGUgYnJvd3NlciB3aW5kb3dcbiAgaWYgKHNjYWxlVG9GaXQgJiYgIWV4cG9ydGluZyAmJiBoYXNEaW1lbnNpb25zKSB7XG4gICAgY29uc3QgYXNwZWN0ID0gd2lkdGggLyBoZWlnaHQ7XG4gICAgY29uc3Qgd2luZG93QXNwZWN0ID0gcGFyZW50V2lkdGggLyBwYXJlbnRIZWlnaHQ7XG4gICAgY29uc3Qgc2NhbGVUb0ZpdFBhZGRpbmcgPSBkZWZpbmVkKHNldHRpbmdzLnNjYWxlVG9GaXRQYWRkaW5nLCA0MCk7XG4gICAgY29uc3QgbWF4V2lkdGggPSBNYXRoLnJvdW5kKHBhcmVudFdpZHRoIC0gc2NhbGVUb0ZpdFBhZGRpbmcgKiAyKTtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSBNYXRoLnJvdW5kKHBhcmVudEhlaWdodCAtIHNjYWxlVG9GaXRQYWRkaW5nICogMik7XG4gICAgaWYgKHN0eWxlV2lkdGggPiBtYXhXaWR0aCB8fCBzdHlsZUhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgaWYgKHdpbmRvd0FzcGVjdCA+IGFzcGVjdCkge1xuICAgICAgICBzdHlsZUhlaWdodCA9IG1heEhlaWdodDtcbiAgICAgICAgc3R5bGVXaWR0aCA9IE1hdGgucm91bmQoc3R5bGVIZWlnaHQgKiBhc3BlY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGVXaWR0aCA9IG1heFdpZHRoO1xuICAgICAgICBzdHlsZUhlaWdodCA9IE1hdGgucm91bmQoc3R5bGVXaWR0aCAvIGFzcGVjdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FudmFzV2lkdGggPSBzY2FsZVRvVmlldyA/IE1hdGgucm91bmQocGl4ZWxSYXRpbyAqIHN0eWxlV2lkdGgpIDogTWF0aC5yb3VuZChwaXhlbFJhdGlvICogcmVhbFdpZHRoKTtcbiAgY2FudmFzSGVpZ2h0ID0gc2NhbGVUb1ZpZXcgPyBNYXRoLnJvdW5kKHBpeGVsUmF0aW8gKiBzdHlsZUhlaWdodCkgOiBNYXRoLnJvdW5kKHBpeGVsUmF0aW8gKiByZWFsSGVpZ2h0KTtcblxuICBjb25zdCB2aWV3cG9ydFdpZHRoID0gc2NhbGVUb1ZpZXcgPyBNYXRoLnJvdW5kKHN0eWxlV2lkdGgpIDogTWF0aC5yb3VuZChyZWFsV2lkdGgpO1xuICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHNjYWxlVG9WaWV3ID8gTWF0aC5yb3VuZChzdHlsZUhlaWdodCkgOiBNYXRoLnJvdW5kKHJlYWxIZWlnaHQpO1xuXG4gIGNvbnN0IHNjYWxlWCA9IGNhbnZhc1dpZHRoIC8gd2lkdGg7XG4gIGNvbnN0IHNjYWxlWSA9IGNhbnZhc0hlaWdodCAvIGhlaWdodDtcblxuICAvLyBBc3NpZ24gdG8gY3VycmVudCBwcm9wc1xuICByZXR1cm4ge1xuICAgIGJsZWVkLFxuICAgIHBpeGVsUmF0aW8sXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGRpbWVuc2lvbnM6IFsgd2lkdGgsIGhlaWdodCBdLFxuICAgIHVuaXRzOiB1bml0cyB8fCAncHgnLFxuICAgIHNjYWxlWCxcbiAgICBzY2FsZVksXG4gICAgcGl4ZWxzUGVySW5jaCxcbiAgICB2aWV3cG9ydFdpZHRoLFxuICAgIHZpZXdwb3J0SGVpZ2h0LFxuICAgIGNhbnZhc1dpZHRoLFxuICAgIGNhbnZhc0hlaWdodCxcbiAgICB0cmltV2lkdGgsXG4gICAgdHJpbUhlaWdodCxcbiAgICBzdHlsZVdpZHRoLFxuICAgIHN0eWxlSGVpZ2h0XG4gIH07XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGdldENhbnZhc0NvbnRleHRcbmZ1bmN0aW9uIGdldENhbnZhc0NvbnRleHQgKHR5cGUsIG9wdHMpIHtcbiAgaWYgKHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ211c3Qgc3BlY2lmeSB0eXBlIHN0cmluZycpXG4gIH1cblxuICBvcHRzID0gb3B0cyB8fCB7fVxuXG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnICYmICFvcHRzLmNhbnZhcykge1xuICAgIHJldHVybiBudWxsIC8vIGNoZWNrIGZvciBOb2RlXG4gIH1cblxuICB2YXIgY2FudmFzID0gb3B0cy5jYW52YXMgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcbiAgaWYgKHR5cGVvZiBvcHRzLndpZHRoID09PSAnbnVtYmVyJykge1xuICAgIGNhbnZhcy53aWR0aCA9IG9wdHMud2lkdGhcbiAgfVxuICBpZiAodHlwZW9mIG9wdHMuaGVpZ2h0ID09PSAnbnVtYmVyJykge1xuICAgIGNhbnZhcy5oZWlnaHQgPSBvcHRzLmhlaWdodFxuICB9XG5cbiAgdmFyIGF0dHJpYnMgPSBvcHRzXG4gIHZhciBnbFxuICB0cnkge1xuICAgIHZhciBuYW1lcyA9IFsgdHlwZSBdXG4gICAgLy8gcHJlZml4IEdMIGNvbnRleHRzXG4gICAgaWYgKHR5cGUuaW5kZXhPZignd2ViZ2wnKSA9PT0gMCkge1xuICAgICAgbmFtZXMucHVzaCgnZXhwZXJpbWVudGFsLScgKyB0eXBlKVxuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQobmFtZXNbaV0sIGF0dHJpYnMpXG4gICAgICBpZiAoZ2wpIHJldHVybiBnbFxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGdsID0gbnVsbFxuICB9XG4gIHJldHVybiAoZ2wgfHwgbnVsbCkgLy8gZW5zdXJlIG51bGwgb24gZmFpbFxufVxuIiwiaW1wb3J0IGFzc2lnbiBmcm9tICdvYmplY3QtYXNzaWduJztcbmltcG9ydCBnZXRDYW52YXNDb250ZXh0IGZyb20gJ2dldC1jYW52YXMtY29udGV4dCc7XG5pbXBvcnQgeyBpc0Jyb3dzZXIgfSBmcm9tICcuLi91dGlsJztcblxuZnVuY3Rpb24gY3JlYXRlQ2FudmFzRWxlbWVudCAoKSB7XG4gIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGFwcGVhcnMgeW91IGFyZSBydW5pbmcgZnJvbSBOb2RlLmpzIG9yIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQuIFRyeSBwYXNzaW5nIGluIGFuIGV4aXN0aW5nIHsgY2FudmFzIH0gaW50ZXJmYWNlIGluc3RlYWQuJyk7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVDYW52YXMgKHNldHRpbmdzID0ge30pIHtcbiAgbGV0IGNvbnRleHQsIGNhbnZhcztcbiAgbGV0IG93bnNDYW52YXMgPSBmYWxzZTtcbiAgaWYgKHNldHRpbmdzLmNhbnZhcyAhPT0gZmFsc2UpIHtcbiAgICAvLyBEZXRlcm1pbmUgdGhlIGNhbnZhcyBhbmQgY29udGV4dCB0byBjcmVhdGVcbiAgICBjb250ZXh0ID0gc2V0dGluZ3MuY29udGV4dDtcbiAgICBpZiAoIWNvbnRleHQgfHwgdHlwZW9mIGNvbnRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbmV3Q2FudmFzID0gc2V0dGluZ3MuY2FudmFzO1xuICAgICAgaWYgKCFuZXdDYW52YXMpIHtcbiAgICAgICAgbmV3Q2FudmFzID0gY3JlYXRlQ2FudmFzRWxlbWVudCgpO1xuICAgICAgICBvd25zQ2FudmFzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0IHx8ICcyZCc7XG4gICAgICBpZiAodHlwZW9mIG5ld0NhbnZhcy5nZXRDb250ZXh0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHNwZWNpZmllZCB7IGNhbnZhcyB9IGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIGdldENvbnRleHQoKSBmdW5jdGlvbiwgbWF5YmUgaXQgaXMgbm90IGEgPGNhbnZhcz4gdGFnP2ApO1xuICAgICAgfVxuICAgICAgY29udGV4dCA9IGdldENhbnZhc0NvbnRleHQodHlwZSwgYXNzaWduKHt9LCBzZXR0aW5ncy5hdHRyaWJ1dGVzLCB7IGNhbnZhczogbmV3Q2FudmFzIH0pKTtcbiAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCBhdCBjYW52YXMuZ2V0Q29udGV4dCgnJHt0eXBlfScpIC0gdGhlIGJyb3dzZXIgbWF5IG5vdCBzdXBwb3J0IHRoaXMgY29udGV4dCwgb3IgYSBkaWZmZXJlbnQgY29udGV4dCBtYXkgYWxyZWFkeSBiZSBpbiB1c2Ugd2l0aCB0aGlzIGNhbnZhcy5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYW52YXMgPSBjb250ZXh0LmNhbnZhcztcbiAgICAvLyBFbnN1cmUgY29udGV4dCBtYXRjaGVzIHVzZXIncyBjYW52YXMgZXhwZWN0YXRpb25zXG4gICAgaWYgKHNldHRpbmdzLmNhbnZhcyAmJiBjYW52YXMgIT09IHNldHRpbmdzLmNhbnZhcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgeyBjYW52YXMgfSBhbmQgeyBjb250ZXh0IH0gc2V0dGluZ3MgbXVzdCBwb2ludCB0byB0aGUgc2FtZSB1bmRlcmx5aW5nIGNhbnZhcyBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgcGl4ZWxhdGlvbiB0byBjYW52YXMgaWYgbmVjZXNzYXJ5LCB0aGlzIGlzIG1vc3RseSBhIGNvbnZlbmllbmNlIHV0aWxpdHlcbiAgICBpZiAoc2V0dGluZ3MucGl4ZWxhdGVkKSB7XG4gICAgICBjb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgY29udGV4dC5tb3pJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQub0ltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQubXNJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNhbnZhcy5zdHlsZVsnaW1hZ2UtcmVuZGVyaW5nJ10gPSAncGl4ZWxhdGVkJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgY2FudmFzLCBjb250ZXh0LCBvd25zQ2FudmFzIH07XG59XG4iLCJpbXBvcnQgYXNzaWduIGZyb20gJ29iamVjdC1hc3NpZ24nO1xuaW1wb3J0IHJpZ2h0Tm93IGZyb20gJ3JpZ2h0LW5vdyc7XG5pbXBvcnQgaXNQcm9taXNlIGZyb20gJ2lzLXByb21pc2UnO1xuaW1wb3J0IHsgaXNCcm93c2VyLCBkZWZpbmVkLCBpc1dlYkdMQ29udGV4dCwgaXNDYW52YXMsIGdldENsaWVudEFQSSB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tICdkZWVwLWVxdWFsJztcbmltcG9ydCB7XG4gIHJlc29sdmVGaWxlbmFtZSxcbiAgc2F2ZUZpbGUsXG4gIHNhdmVEYXRhVVJMLFxuICBnZXRUaW1lU3RhbXAsXG4gIGV4cG9ydENhbnZhcyxcbiAgc3RyZWFtU3RhcnQsXG4gIHN0cmVhbUVuZFxufSBmcm9tICcuLi9zYXZlJztcbmltcG9ydCB7IGNoZWNrU2V0dGluZ3MgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcblxuaW1wb3J0IGtleWJvYXJkU2hvcnRjdXRzIGZyb20gJy4va2V5Ym9hcmRTaG9ydGN1dHMnO1xuaW1wb3J0IHJlc2l6ZUNhbnZhcyBmcm9tICcuL3Jlc2l6ZUNhbnZhcyc7XG5pbXBvcnQgY3JlYXRlQ2FudmFzIGZyb20gJy4vY3JlYXRlQ2FudmFzJztcblxuY2xhc3MgU2tldGNoTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9zZXR0aW5ncyA9IHt9O1xuICAgIHRoaXMuX3Byb3BzID0ge307XG4gICAgdGhpcy5fc2tldGNoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3JhZiA9IG51bGw7XG4gICAgdGhpcy5fcmVjb3JkVGltZW91dCA9IG51bGw7XG5cbiAgICAvLyBTb21lIGhhY2t5IHRoaW5ncyByZXF1aXJlZCB0byBnZXQgYXJvdW5kIHA1LmpzIHN0cnVjdHVyZVxuICAgIHRoaXMuX2xhc3RSZWRyYXdSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5faXNQNVJlc2l6aW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0cyA9IGtleWJvYXJkU2hvcnRjdXRzKHtcbiAgICAgIGVuYWJsZWQ6ICgpID0+IHRoaXMuc2V0dGluZ3MuaG90a2V5cyAhPT0gZmFsc2UsXG4gICAgICBzYXZlOiAoZXYpID0+IHtcbiAgICAgICAgaWYgKGV2LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMucmVjb3JkaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmVuZFJlY29yZCgpO1xuICAgICAgICAgICAgdGhpcy5ydW4oKTtcbiAgICAgICAgICB9IGVsc2UgdGhpcy5yZWNvcmQoKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5wcm9wcy5yZWNvcmRpbmcpIHtcbiAgICAgICAgICB0aGlzLmV4cG9ydEZyYW1lKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0b2dnbGVQbGF5OiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnBsYXlpbmcpIHRoaXMucGF1c2UoKTtcbiAgICAgICAgZWxzZSB0aGlzLnBsYXkoKTtcbiAgICAgIH0sXG4gICAgICBjb21taXQ6IChldikgPT4ge1xuICAgICAgICB0aGlzLmV4cG9ydEZyYW1lKHsgY29tbWl0OiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fYW5pbWF0ZUhhbmRsZXIgPSAoKSA9PiB0aGlzLmFuaW1hdGUoKTtcblxuICAgIHRoaXMuX3Jlc2l6ZUhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5yZXNpemUoKTtcbiAgICAgIC8vIE9ubHkgcmUtcmVuZGVyIHdoZW4gc2l6ZSBhY3R1YWxseSBjaGFuZ2VzXG4gICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBnZXQgc2tldGNoICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2tldGNoO1xuICB9XG5cbiAgZ2V0IHNldHRpbmdzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3M7XG4gIH1cblxuICBnZXQgcHJvcHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9wcm9wcztcbiAgfVxuXG4gIF9jb21wdXRlUGxheWhlYWQgKGN1cnJlbnRUaW1lLCBkdXJhdGlvbikge1xuICAgIGNvbnN0IGhhc0R1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShkdXJhdGlvbik7XG4gICAgcmV0dXJuIGhhc0R1cmF0aW9uID8gY3VycmVudFRpbWUgLyBkdXJhdGlvbiA6IDA7XG4gIH1cblxuICBfY29tcHV0ZUZyYW1lIChwbGF5aGVhZCwgdGltZSwgdG90YWxGcmFtZXMsIGZwcykge1xuICAgIHJldHVybiAoaXNGaW5pdGUodG90YWxGcmFtZXMpICYmIHRvdGFsRnJhbWVzID4gMSlcbiAgICAgID8gTWF0aC5mbG9vcihwbGF5aGVhZCAqICh0b3RhbEZyYW1lcyAtIDEpKVxuICAgICAgOiBNYXRoLmZsb29yKGZwcyAqIHRpbWUpO1xuICB9XG5cbiAgX2NvbXB1dGVDdXJyZW50RnJhbWUgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb21wdXRlRnJhbWUoXG4gICAgICB0aGlzLnByb3BzLnBsYXloZWFkLCB0aGlzLnByb3BzLnRpbWUsXG4gICAgICB0aGlzLnByb3BzLnRvdGFsRnJhbWVzLCB0aGlzLnByb3BzLmZwc1xuICAgICk7XG4gIH1cblxuICBfZ2V0U2l6ZVByb3BzICgpIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiBwcm9wcy53aWR0aCxcbiAgICAgIGhlaWdodDogcHJvcHMuaGVpZ2h0LFxuICAgICAgcGl4ZWxSYXRpbzogcHJvcHMucGl4ZWxSYXRpbyxcbiAgICAgIGNhbnZhc1dpZHRoOiBwcm9wcy5jYW52YXNXaWR0aCxcbiAgICAgIGNhbnZhc0hlaWdodDogcHJvcHMuY2FudmFzSGVpZ2h0LFxuICAgICAgdmlld3BvcnRXaWR0aDogcHJvcHMudmlld3BvcnRXaWR0aCxcbiAgICAgIHZpZXdwb3J0SGVpZ2h0OiBwcm9wcy52aWV3cG9ydEhlaWdodFxuICAgIH07XG4gIH1cblxuICBydW4gKCkge1xuICAgIGlmICghdGhpcy5za2V0Y2gpIHRocm93IG5ldyBFcnJvcignc2hvdWxkIHdhaXQgdW50aWwgc2tldGNoIGlzIGxvYWRlZCBiZWZvcmUgdHJ5aW5nIHRvIHBsYXkoKScpO1xuXG4gICAgLy8gU3RhcnQgYW4gYW5pbWF0aW9uIGZyYW1lIGxvb3AgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MucGxheWluZyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMucGxheSgpO1xuICAgIH1cblxuICAgIC8vIExldCdzIGxldCB0aGlzIHdhcm5pbmcgaGFuZyBhcm91bmQgZm9yIGEgZmV3IHZlcnNpb25zLi4uXG4gICAgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaC5kaXNwb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0luIGNhbnZhcy1za2V0Y2hAMC4wLjIzIHRoZSBkaXNwb3NlKCkgZXZlbnQgaGFzIGJlZW4gcmVuYW1lZCB0byB1bmxvYWQoKScpO1xuICAgIH1cblxuICAgIC8vIEluIGNhc2Ugd2UgYXJlbid0IHBsYXlpbmcgb3IgYW5pbWF0ZWQsIG1ha2Ugc3VyZSB3ZSBzdGlsbCB0cmlnZ2VyIGJlZ2luIG1lc3NhZ2UuLi5cbiAgICBpZiAoIXRoaXMucHJvcHMuc3RhcnRlZCkge1xuICAgICAgdGhpcy5fc2lnbmFsQmVnaW4oKTtcbiAgICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gUmVuZGVyIGFuIGluaXRpYWwgZnJhbWVcbiAgICB0aGlzLnRpY2soKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgX2NhbmNlbFRpbWVvdXRzICgpIHtcbiAgICBpZiAodGhpcy5fcmFmICE9IG51bGwgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JhZik7XG4gICAgICB0aGlzLl9yYWYgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcmVjb3JkVGltZW91dCAhPSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fcmVjb3JkVGltZW91dCk7XG4gICAgICB0aGlzLl9yZWNvcmRUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwbGF5ICgpIHtcbiAgICBsZXQgYW5pbWF0ZSA9IHRoaXMuc2V0dGluZ3MuYW5pbWF0ZTtcbiAgICBpZiAoJ2FuaW1hdGlvbicgaW4gdGhpcy5zZXR0aW5ncykge1xuICAgICAgYW5pbWF0ZSA9IHRydWU7XG4gICAgICBjb25zb2xlLndhcm4oJ1tjYW52YXMtc2tldGNoXSB7IGFuaW1hdGlvbiB9IGhhcyBiZWVuIHJlbmFtZWQgdG8geyBhbmltYXRlIH0nKTtcbiAgICB9XG4gICAgaWYgKCFhbmltYXRlKSByZXR1cm47XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgICAgY29uc29sZS5lcnJvcignW2NhbnZhcy1za2V0Y2hdIFdBUk46IFVzaW5nIHsgYW5pbWF0ZSB9IGluIE5vZGUuanMgaXMgbm90IHlldCBzdXBwb3J0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMucGxheWluZykgcmV0dXJuO1xuICAgIGlmICghdGhpcy5wcm9wcy5zdGFydGVkKSB7XG4gICAgICB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgdGhpcy5wcm9wcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZygncGxheScsIHRoaXMucHJvcHMudGltZSlcblxuICAgIC8vIFN0YXJ0IGEgcmVuZGVyIGxvb3BcbiAgICB0aGlzLnByb3BzLnBsYXlpbmcgPSB0cnVlO1xuICAgIHRoaXMuX2NhbmNlbFRpbWVvdXRzKCk7XG4gICAgdGhpcy5fbGFzdFRpbWUgPSByaWdodE5vdygpO1xuICAgIHRoaXMuX3JhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0ZUhhbmRsZXIpO1xuICB9XG5cbiAgcGF1c2UgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJlY29yZGluZykgdGhpcy5lbmRSZWNvcmQoKTtcbiAgICB0aGlzLnByb3BzLnBsYXlpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuX2NhbmNlbFRpbWVvdXRzKCk7XG4gIH1cblxuICB0b2dnbGVQbGF5ICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wbGF5aW5nKSB0aGlzLnBhdXNlKCk7XG4gICAgZWxzZSB0aGlzLnBsYXkoKTtcbiAgfVxuXG4gIC8vIFN0b3AgYW5kIHJlc2V0IHRvIGZyYW1lIHplcm9cbiAgc3RvcCAoKSB7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMucHJvcHMuZnJhbWUgPSAwO1xuICAgIHRoaXMucHJvcHMucGxheWhlYWQgPSAwO1xuICAgIHRoaXMucHJvcHMudGltZSA9IDA7XG4gICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZWNvcmQgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJlY29yZGluZykgcmV0dXJuO1xuICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tjYW52YXMtc2tldGNoXSBXQVJOOiBSZWNvcmRpbmcgZnJvbSBOb2RlLmpzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdG9wKCk7XG4gICAgdGhpcy5wcm9wcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnByb3BzLnJlY29yZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBleHBvcnRPcHRzID0gdGhpcy5fY3JlYXRlRXhwb3J0T3B0aW9ucyh7IHNlcXVlbmNlOiB0cnVlIH0pO1xuXG4gICAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEgLyB0aGlzLnByb3BzLmZwcztcbiAgICAvLyBSZW5kZXIgZWFjaCBmcmFtZSBpbiB0aGUgc2VxdWVuY2VcbiAgICB0aGlzLl9jYW5jZWxUaW1lb3V0cygpO1xuICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMucHJvcHMucmVjb3JkaW5nKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IGZyYW1lSW50ZXJ2YWw7XG4gICAgICB0aGlzLnRpY2soKTtcbiAgICAgIHJldHVybiB0aGlzLmV4cG9ydEZyYW1lKGV4cG9ydE9wdHMpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMucHJvcHMucmVjb3JkaW5nKSByZXR1cm47IC8vIHdhcyBjYW5jZWxsZWQgYmVmb3JlXG4gICAgICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgICAgICAgIHRoaXMucHJvcHMuZnJhbWUrKztcbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5mcmFtZSA8IHRoaXMucHJvcHMudG90YWxGcmFtZXMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMudGltZSArPSBmcmFtZUludGVydmFsO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5wbGF5aGVhZCA9IHRoaXMuX2NvbXB1dGVQbGF5aGVhZCh0aGlzLnByb3BzLnRpbWUsIHRoaXMucHJvcHMuZHVyYXRpb24pO1xuICAgICAgICAgICAgdGhpcy5fcmVjb3JkVGltZW91dCA9IHNldFRpbWVvdXQodGljaywgMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGaW5pc2hlZCByZWNvcmRpbmcnKTtcbiAgICAgICAgICAgIHRoaXMuX3NpZ25hbEVuZCgpO1xuICAgICAgICAgICAgdGhpcy5lbmRSZWNvcmQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5ydW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBUcmlnZ2VyIGEgc3RhcnQgZXZlbnQgYmVmb3JlIHdlIGJlZ2luIHJlY29yZGluZ1xuICAgIGlmICghdGhpcy5wcm9wcy5zdGFydGVkKSB7XG4gICAgICB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgdGhpcy5wcm9wcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyICdiZWdpbiByZWNvcmQnIGV2ZW50XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5iZWdpblJlY29yZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC5iZWdpblJlY29yZChwcm9wcykpO1xuICAgIH1cblxuICAgIC8vIEluaXRpYXRlIGEgc3RyZWFtaW5nIHN0YXJ0IGlmIG5lY2Vzc2FyeVxuICAgIHN0cmVhbVN0YXJ0KGV4cG9ydE9wdHMpXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5fcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgX3NpZ25hbEJlZ2luICgpIHtcbiAgICBpZiAodGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLmJlZ2luID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLmJlZ2luKHByb3BzKSk7XG4gICAgfVxuICB9XG5cbiAgX3NpZ25hbEVuZCAoKSB7XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5lbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3dyYXBDb250ZXh0U2NhbGUocHJvcHMgPT4gdGhpcy5za2V0Y2guZW5kKHByb3BzKSk7XG4gICAgfVxuICB9XG5cbiAgZW5kUmVjb3JkICgpIHtcbiAgICBjb25zdCB3YXNSZWNvcmRpbmcgPSB0aGlzLnByb3BzLnJlY29yZGluZztcblxuICAgIHRoaXMuX2NhbmNlbFRpbWVvdXRzKCk7XG4gICAgdGhpcy5wcm9wcy5yZWNvcmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IDA7XG4gICAgdGhpcy5wcm9wcy5wbGF5aW5nID0gZmFsc2U7XG5cbiAgICAvLyB0ZWxsIENMSSB0aGF0IHN0cmVhbSBoYXMgZmluaXNoZWRcbiAgICByZXR1cm4gc3RyZWFtRW5kKClcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyBUcmlnZ2VyICdlbmQgcmVjb3JkJyBldmVudFxuICAgICAgICBpZiAod2FzUmVjb3JkaW5nICYmIHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5lbmRSZWNvcmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLmVuZFJlY29yZChwcm9wcykpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVFeHBvcnRPcHRpb25zIChvcHQgPSB7fSkge1xuICAgIHJldHVybiB7XG4gICAgICBzZXF1ZW5jZTogb3B0LnNlcXVlbmNlLFxuICAgICAgc2F2ZTogb3B0LnNhdmUsXG4gICAgICBmcHM6IHRoaXMucHJvcHMuZnBzLFxuICAgICAgZnJhbWU6IG9wdC5zZXF1ZW5jZSA/IHRoaXMucHJvcHMuZnJhbWUgOiB1bmRlZmluZWQsXG4gICAgICBmaWxlOiB0aGlzLnNldHRpbmdzLmZpbGUsXG4gICAgICBuYW1lOiB0aGlzLnNldHRpbmdzLm5hbWUsXG4gICAgICBwcmVmaXg6IHRoaXMuc2V0dGluZ3MucHJlZml4LFxuICAgICAgc3VmZml4OiB0aGlzLnNldHRpbmdzLnN1ZmZpeCxcbiAgICAgIGVuY29kaW5nOiB0aGlzLnNldHRpbmdzLmVuY29kaW5nLFxuICAgICAgZW5jb2RpbmdRdWFsaXR5OiB0aGlzLnNldHRpbmdzLmVuY29kaW5nUXVhbGl0eSxcbiAgICAgIHRpbWVTdGFtcDogb3B0LnRpbWVTdGFtcCB8fCBnZXRUaW1lU3RhbXAoKSxcbiAgICAgIHRvdGFsRnJhbWVzOiBpc0Zpbml0ZSh0aGlzLnByb3BzLnRvdGFsRnJhbWVzKSA/IE1hdGgubWF4KDAsIHRoaXMucHJvcHMudG90YWxGcmFtZXMpIDogMTAwMFxuICAgIH07XG4gIH1cblxuICBleHBvcnRGcmFtZSAob3B0ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuc2tldGNoKSByZXR1cm4gUHJvbWlzZS5hbGwoW10pO1xuICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2gucHJlRXhwb3J0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLnNrZXRjaC5wcmVFeHBvcnQoKTtcbiAgICB9XG5cbiAgICAvLyBPcHRpb25zIGZvciBleHBvcnQgZnVuY3Rpb25cbiAgICBsZXQgZXhwb3J0T3B0cyA9IHRoaXMuX2NyZWF0ZUV4cG9ydE9wdGlvbnMob3B0KTtcblxuICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICAgIGxldCBwID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKGNsaWVudCAmJiBvcHQuY29tbWl0ICYmIHR5cGVvZiBjbGllbnQuY29tbWl0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBjb21taXRPcHRzID0gYXNzaWduKHt9LCBleHBvcnRPcHRzKTtcbiAgICAgIGNvbnN0IGhhc2ggPSBjbGllbnQuY29tbWl0KGNvbW1pdE9wdHMpO1xuICAgICAgaWYgKGlzUHJvbWlzZShoYXNoKSkgcCA9IGhhc2g7XG4gICAgICBlbHNlIHAgPSBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHAudGhlbihoYXNoID0+IHtcbiAgICAgIHJldHVybiB0aGlzLl9kb0V4cG9ydEZyYW1lKGFzc2lnbih7fSwgZXhwb3J0T3B0cywgeyBoYXNoOiBoYXNoIHx8ICcnIH0pKTtcbiAgICB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAvLyBNb3N0IGNvbW1vbiB1c2VjYXNlIGlzIHRvIGV4cG9ydCBhIHNpbmdsZSBsYXllcixcbiAgICAgIC8vIHNvIGxldCdzIG9wdGltaXplIHRoZSB1c2VyIGV4cGVyaWVuY2UgZm9yIHRoYXQuXG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMSkgcmV0dXJuIHJlc3VsdFswXTtcbiAgICAgIGVsc2UgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgfVxuXG4gIF9kb0V4cG9ydEZyYW1lIChleHBvcnRPcHRzID0ge30pIHtcbiAgICB0aGlzLl9wcm9wcy5leHBvcnRpbmcgPSB0cnVlO1xuXG4gICAgLy8gUmVzaXplIHRvIG91dHB1dCByZXNvbHV0aW9uXG4gICAgdGhpcy5yZXNpemUoKTtcblxuICAgIC8vIERyYXcgYXQgdGhpcyBvdXRwdXQgcmVzb2x1dGlvblxuICAgIGxldCBkcmF3UmVzdWx0ID0gdGhpcy5yZW5kZXIoKTtcblxuICAgIC8vIFRoZSBzZWxmIG93bmVkIGNhbnZhcyAobWF5IGJlIHVuZGVmaW5lZC4uLiEpXG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5wcm9wcy5jYW52YXM7XG5cbiAgICAvLyBHZXQgbGlzdCBvZiByZXN1bHRzIGZyb20gcmVuZGVyXG4gICAgaWYgKHR5cGVvZiBkcmF3UmVzdWx0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZHJhd1Jlc3VsdCA9IFsgY2FudmFzIF07XG4gICAgfVxuICAgIGRyYXdSZXN1bHQgPSBbXS5jb25jYXQoZHJhd1Jlc3VsdCkuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgLy8gVHJhbnNmb3JtIHRoZSBjYW52YXMvZmlsZSBkZXNjcmlwdG9ycyBpbnRvIGEgY29uc2lzdGVudCBmb3JtYXQsXG4gICAgLy8gYW5kIHB1bGwgb3V0IGFueSBkYXRhIFVSTHMgZnJvbSBjYW52YXMgZWxlbWVudHNcbiAgICBkcmF3UmVzdWx0ID0gZHJhd1Jlc3VsdC5tYXAocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IGhhc0RhdGFPYmplY3QgPSB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgKCdkYXRhJyBpbiByZXN1bHQgfHwgJ2RhdGFVUkwnIGluIHJlc3VsdCk7XG4gICAgICBjb25zdCBkYXRhID0gaGFzRGF0YU9iamVjdCA/IHJlc3VsdC5kYXRhIDogcmVzdWx0O1xuICAgICAgY29uc3Qgb3B0cyA9IGhhc0RhdGFPYmplY3QgPyBhc3NpZ24oe30sIHJlc3VsdCwgeyBkYXRhIH0pIDogeyBkYXRhIH07XG4gICAgICBpZiAoaXNDYW52YXMoZGF0YSkpIHtcbiAgICAgICAgY29uc3QgZW5jb2RpbmcgPSBvcHRzLmVuY29kaW5nIHx8IGV4cG9ydE9wdHMuZW5jb2Rpbmc7XG4gICAgICAgIGNvbnN0IGVuY29kaW5nUXVhbGl0eSA9IGRlZmluZWQob3B0cy5lbmNvZGluZ1F1YWxpdHksIGV4cG9ydE9wdHMuZW5jb2RpbmdRdWFsaXR5LCAwLjk1KTtcbiAgICAgICAgY29uc3QgeyBkYXRhVVJMLCBleHRlbnNpb24sIHR5cGUgfSA9IGV4cG9ydENhbnZhcyhkYXRhLCB7IGVuY29kaW5nLCBlbmNvZGluZ1F1YWxpdHkgfSk7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG9wdHMsIHsgZGF0YVVSTCwgZXh0ZW5zaW9uLCB0eXBlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9wdHM7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBOb3cgcmV0dXJuIHRvIHJlZ3VsYXIgcmVuZGVyaW5nIG1vZGVcbiAgICB0aGlzLl9wcm9wcy5leHBvcnRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJlc2l6ZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG5cbiAgICAvLyBBbmQgbm93IHdlIGNhbiBzYXZlIGVhY2ggcmVzdWx0XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGRyYXdSZXN1bHQubWFwKChyZXN1bHQsIGksIGxheWVyTGlzdCkgPT4ge1xuICAgICAgLy8gQnkgZGVmYXVsdCwgaWYgcmVuZGVyaW5nIG11bHRpcGxlIGxheWVycyB3ZSB3aWxsIGdpdmUgdGhlbSBpbmRpY2VzXG4gICAgICBjb25zdCBjdXJPcHQgPSBhc3NpZ24oe1xuICAgICAgICBleHRlbnNpb246ICcnLFxuICAgICAgICBwcmVmaXg6ICcnLFxuICAgICAgICBzdWZmaXg6ICcnXG4gICAgICB9LCBleHBvcnRPcHRzLCByZXN1bHQsIHtcbiAgICAgICAgbGF5ZXI6IGksXG4gICAgICAgIHRvdGFsTGF5ZXJzOiBsYXllckxpc3QubGVuZ3RoXG4gICAgICB9KTtcblxuICAgICAgLy8gSWYgZXhwb3J0IGlzIGV4cGxpY2l0bHkgbm90IHNhdmluZywgbWFrZSBzdXJlIG5vdGhpbmcgc2F2ZXNcbiAgICAgIC8vIE90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBsYXllciBzYXZlIG9wdGlvbiwgb3IgZmFsbGJhY2sgdG8gdHJ1ZVxuICAgICAgY29uc3Qgc2F2ZVBhcmFtID0gZXhwb3J0T3B0cy5zYXZlID09PSBmYWxzZSA/IGZhbHNlIDogcmVzdWx0LnNhdmU7XG4gICAgICBjdXJPcHQuc2F2ZSA9IHNhdmVQYXJhbSAhPT0gZmFsc2U7XG5cbiAgICAgIC8vIFJlc29sdmUgYSBmdWxsIGZpbGVuYW1lIGZyb20gYWxsIHRoZSBvcHRpb25zXG4gICAgICBjdXJPcHQuZmlsZW5hbWUgPSByZXNvbHZlRmlsZW5hbWUoY3VyT3B0KTtcblxuICAgICAgLy8gQ2xlYW4gdXAgc29tZSBwYXJhbWV0ZXJzIHRoYXQgbWF5IGJlIGFtYmlndW91cyB0byB0aGUgdXNlclxuICAgICAgZGVsZXRlIGN1ck9wdC5lbmNvZGluZztcbiAgICAgIGRlbGV0ZSBjdXJPcHQuZW5jb2RpbmdRdWFsaXR5O1xuXG4gICAgICAvLyBDbGVhbiBpdCB1cCBmdXJ0aGVyIGJ5IGp1c3QgcmVtb3ZpbmcgdW5kZWZpbmVkIHZhbHVlc1xuICAgICAgZm9yIChsZXQgayBpbiBjdXJPcHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjdXJPcHRba10gPT09ICd1bmRlZmluZWQnKSBkZWxldGUgY3VyT3B0W2tdO1xuICAgICAgfVxuXG4gICAgICBsZXQgc2F2ZVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgaWYgKGN1ck9wdC5zYXZlKSB7XG4gICAgICAgIC8vIFdoZXRoZXIgdG8gYWN0dWFsbHkgc2F2ZSAoZG93bmxvYWQpIHRoaXMgZnJhZ21lbnRcbiAgICAgICAgY29uc3QgZGF0YSA9IGN1ck9wdC5kYXRhO1xuICAgICAgICBpZiAoY3VyT3B0LmRhdGFVUkwpIHtcbiAgICAgICAgICBjb25zdCBkYXRhVVJMID0gY3VyT3B0LmRhdGFVUkw7XG4gICAgICAgICAgc2F2ZVByb21pc2UgPSBzYXZlRGF0YVVSTChkYXRhVVJMLCBjdXJPcHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNhdmVQcm9taXNlID0gc2F2ZUZpbGUoZGF0YSwgY3VyT3B0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNhdmVQcm9taXNlLnRoZW4oc2F2ZVJlc3VsdCA9PiB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjdXJPcHQsIHNhdmVSZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfSkpLnRoZW4oZXYgPT4ge1xuICAgICAgY29uc3Qgc2F2ZWRFdmVudHMgPSBldi5maWx0ZXIoZSA9PiBlLnNhdmUpO1xuICAgICAgaWYgKHNhdmVkRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gTG9nIHRoZSBzYXZlZCBleHBvcnRzXG4gICAgICAgIGNvbnN0IGV2ZW50V2l0aE91dHB1dCA9IHNhdmVkRXZlbnRzLmZpbmQoZSA9PiBlLm91dHB1dE5hbWUpO1xuICAgICAgICBjb25zdCBpc0NsaWVudCA9IHNhdmVkRXZlbnRzLnNvbWUoZSA9PiBlLmNsaWVudCk7XG4gICAgICAgIGNvbnN0IGlzU3RyZWFtaW5nID0gc2F2ZWRFdmVudHMuc29tZShlID0+IGUuc3RyZWFtKTtcbiAgICAgICAgbGV0IGl0ZW07XG4gICAgICAgIC8vIG1hbnkgZmlsZXMsIGp1c3QgbG9nIGhvdyBtYW55IHdlcmUgZXhwb3J0ZWRcbiAgICAgICAgaWYgKHNhdmVkRXZlbnRzLmxlbmd0aCA+IDEpIGl0ZW0gPSBzYXZlZEV2ZW50cy5sZW5ndGg7XG4gICAgICAgIC8vIGluIENMSSwgd2Uga25vdyBleGFjdCBwYXRoIGRpcm5hbWVcbiAgICAgICAgZWxzZSBpZiAoZXZlbnRXaXRoT3V0cHV0KSBpdGVtID0gYCR7ZXZlbnRXaXRoT3V0cHV0Lm91dHB1dE5hbWV9LyR7c2F2ZWRFdmVudHNbMF0uZmlsZW5hbWV9YDtcbiAgICAgICAgLy8gaW4gYnJvd3Nlciwgd2UgY2FuIG9ubHkga25vdyBpdCB3ZW50IHRvIFwiYnJvd3NlciBkb3dubG9hZCBmb2xkZXJcIlxuICAgICAgICBlbHNlIGl0ZW0gPSBgJHtzYXZlZEV2ZW50c1swXS5maWxlbmFtZX1gO1xuICAgICAgICBsZXQgb2ZTZXEgPSAnJztcbiAgICAgICAgaWYgKGV4cG9ydE9wdHMuc2VxdWVuY2UpIHtcbiAgICAgICAgICBjb25zdCBoYXNUb3RhbEZyYW1lcyA9IGlzRmluaXRlKHRoaXMucHJvcHMudG90YWxGcmFtZXMpO1xuICAgICAgICAgIG9mU2VxID0gaGFzVG90YWxGcmFtZXMgPyBgIChmcmFtZSAke2V4cG9ydE9wdHMuZnJhbWUgKyAxfSAvICR7dGhpcy5wcm9wcy50b3RhbEZyYW1lc30pYCA6IGAgKGZyYW1lICR7ZXhwb3J0T3B0cy5mcmFtZX0pYDtcbiAgICAgICAgfSBlbHNlIGlmIChzYXZlZEV2ZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgb2ZTZXEgPSBgIGZpbGVzYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGllbnQgPSBpc0NsaWVudCA/ICdjYW52YXMtc2tldGNoLWNsaScgOiAnY2FudmFzLXNrZXRjaCc7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGlzU3RyZWFtaW5nID8gJ1N0cmVhbWluZyBpbnRvJyA6ICdFeHBvcnRlZCc7XG4gICAgICAgIGNvbnNvbGUubG9nKGAlY1ske2NsaWVudH1dJWMgJHthY3Rpb259ICVjJHtpdGVtfSVjJHtvZlNlcX1gLCAnY29sb3I6ICM4ZThlOGU7JywgJ2NvbG9yOiBpbml0aWFsOycsICdmb250LXdlaWdodDogYm9sZDsnLCAnZm9udC13ZWlnaHQ6IGluaXRpYWw7Jyk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnBvc3RFeHBvcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5za2V0Y2gucG9zdEV4cG9ydCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV2O1xuICAgIH0pO1xuICB9XG5cbiAgX3dyYXBDb250ZXh0U2NhbGUgKGNiKSB7XG4gICAgdGhpcy5fcHJlUmVuZGVyKCk7XG4gICAgY2IodGhpcy5wcm9wcyk7XG4gICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuICB9XG5cbiAgX3ByZVJlbmRlciAoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gU2NhbGUgY29udGV4dCBmb3IgdW5pdCBzaXppbmdcbiAgICBpZiAoIXRoaXMucHJvcHMuZ2wgJiYgcHJvcHMuY29udGV4dCAmJiAhcHJvcHMucDUpIHtcbiAgICAgIHByb3BzLmNvbnRleHQuc2F2ZSgpO1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3Muc2NhbGVDb250ZXh0ICE9PSBmYWxzZSkge1xuICAgICAgICBwcm9wcy5jb250ZXh0LnNjYWxlKHByb3BzLnNjYWxlWCwgcHJvcHMuc2NhbGVZKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5wNS5zY2FsZShwcm9wcy5zY2FsZVggLyBwcm9wcy5waXhlbFJhdGlvLCBwcm9wcy5zY2FsZVkgLyBwcm9wcy5waXhlbFJhdGlvKTtcbiAgICB9XG4gIH1cblxuICBfcG9zdFJlbmRlciAoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKCF0aGlzLnByb3BzLmdsICYmIHByb3BzLmNvbnRleHQgJiYgIXByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5jb250ZXh0LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICAvLyBGbHVzaCBieSBkZWZhdWx0LCB0aGlzIG1heSBiZSByZXZpc2l0ZWQgYXQgYSBsYXRlciBwb2ludC5cbiAgICAvLyBXZSBkbyB0aGlzIHRvIGVuc3VyZSB0b0RhdGFVUkwgY2FuIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlci5cbiAgICAvLyBNb3N0IGxpa2VseSBicm93c2VycyBhbHJlYWR5IGhhbmRsZSB0aGlzLCBzbyB3ZSBtYXkgcmV2aXNpdCB0aGlzIGFuZFxuICAgIC8vIHJlbW92ZSBpdCBpZiBpdCBpbXByb3ZlcyBwZXJmb3JtYW5jZSB3aXRob3V0IGFueSB1c2FiaWxpdHkgaXNzdWVzLlxuICAgIGlmIChwcm9wcy5nbCAmJiB0aGlzLnNldHRpbmdzLmZsdXNoICE9PSBmYWxzZSAmJiAhcHJvcHMucDUpIHtcbiAgICAgIHByb3BzLmdsLmZsdXNoKCk7XG4gICAgfVxuICB9XG5cbiAgdGljayAoKSB7XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC50aWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl9wcmVSZW5kZXIoKTtcbiAgICAgIHRoaXMuc2tldGNoLnRpY2sodGhpcy5wcm9wcyk7XG4gICAgICB0aGlzLl9wb3N0UmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wNSkge1xuICAgICAgdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMucHJvcHMucDUucmVkcmF3KCk7XG4gICAgICByZXR1cm4gdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0RHJhd0NhbGwoKTtcbiAgICB9XG4gIH1cblxuICBzdWJtaXREcmF3Q2FsbCAoKSB7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgIHRoaXMuX3ByZVJlbmRlcigpO1xuXG4gICAgbGV0IGRyYXdSZXN1bHQ7XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkcmF3UmVzdWx0ID0gdGhpcy5za2V0Y2gocHJvcHMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZHJhd1Jlc3VsdCA9IHRoaXMuc2tldGNoLnJlbmRlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuXG4gICAgcmV0dXJuIGRyYXdSZXN1bHQ7XG4gIH1cblxuICB1cGRhdGUgKG9wdCA9IHt9KSB7XG4gICAgLy8gQ3VycmVudGx5IHVwZGF0ZSgpIGlzIG9ubHkgZm9jdXNlZCBvbiByZXNpemluZyxcbiAgICAvLyBidXQgbGF0ZXIgd2Ugd2lsbCBzdXBwb3J0IG90aGVyIG9wdGlvbnMgbGlrZSBzd2l0Y2hpbmdcbiAgICAvLyBmcmFtZXMgYW5kIHN1Y2guXG4gICAgY29uc3Qgbm90WWV0U3VwcG9ydGVkID0gW1xuICAgICAgJ2FuaW1hdGUnXG4gICAgXTtcblxuICAgIE9iamVjdC5rZXlzKG9wdCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKG5vdFlldFN1cHBvcnRlZC5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvcnJ5LCB0aGUgeyAke2tleX0gfSBvcHRpb24gaXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCB1cGRhdGUoKS5gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG9sZENhbnZhcyA9IHRoaXMuX3NldHRpbmdzLmNhbnZhcztcbiAgICBjb25zdCBvbGRDb250ZXh0ID0gdGhpcy5fc2V0dGluZ3MuY29udGV4dDtcblxuICAgIC8vIE1lcmdlIG5ldyBvcHRpb25zIGludG8gc2V0dGluZ3NcbiAgICBmb3IgKGxldCBrZXkgaW4gb3B0KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdFtrZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gaWdub3JlIHVuZGVmaW5lZFxuICAgICAgICB0aGlzLl9zZXR0aW5nc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWVyZ2UgaW4gdGltZSBwcm9wc1xuICAgIGNvbnN0IHRpbWVPcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fc2V0dGluZ3MsIG9wdCk7XG4gICAgaWYgKCd0aW1lJyBpbiBvcHQgJiYgJ2ZyYW1lJyBpbiBvcHQpIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IHsgdGltZSB9IG9yIHsgZnJhbWUgfSBidXQgbm90IGJvdGgnKTtcbiAgICBlbHNlIGlmICgndGltZScgaW4gb3B0KSBkZWxldGUgdGltZU9wdHMuZnJhbWU7XG4gICAgZWxzZSBpZiAoJ2ZyYW1lJyBpbiBvcHQpIGRlbGV0ZSB0aW1lT3B0cy50aW1lO1xuICAgIGlmICgnZHVyYXRpb24nIGluIG9wdCAmJiAndG90YWxGcmFtZXMnIGluIG9wdCkgdGhyb3cgbmV3IEVycm9yKCdZb3Ugc2hvdWxkIHNwZWNpZnkgeyBkdXJhdGlvbiB9IG9yIHsgdG90YWxGcmFtZXMgfSBidXQgbm90IGJvdGgnKTtcbiAgICBlbHNlIGlmICgnZHVyYXRpb24nIGluIG9wdCkgZGVsZXRlIHRpbWVPcHRzLnRvdGFsRnJhbWVzO1xuICAgIGVsc2UgaWYgKCd0b3RhbEZyYW1lcycgaW4gb3B0KSBkZWxldGUgdGltZU9wdHMuZHVyYXRpb247XG5cbiAgICAvLyBNZXJnZSBpbiB1c2VyIGRhdGEgd2l0aG91dCBjb3B5aW5nXG4gICAgaWYgKCdkYXRhJyBpbiBvcHQpIHRoaXMuX3Byb3BzLmRhdGEgPSBvcHQuZGF0YTtcblxuICAgIGNvbnN0IHRpbWVQcm9wcyA9IHRoaXMuZ2V0VGltZVByb3BzKHRpbWVPcHRzKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX3Byb3BzLCB0aW1lUHJvcHMpO1xuXG4gICAgLy8gSWYgZWl0aGVyIGNhbnZhcyBvciBjb250ZXh0IGlzIGNoYW5nZWQsIHdlIHNob3VsZCByZS11cGRhdGVcbiAgICBpZiAob2xkQ2FudmFzICE9PSB0aGlzLl9zZXR0aW5ncy5jYW52YXMgfHwgb2xkQ29udGV4dCAhPT0gdGhpcy5fc2V0dGluZ3MuY29udGV4dCkge1xuICAgICAgY29uc3QgeyBjYW52YXMsIGNvbnRleHQgfSA9IGNyZWF0ZUNhbnZhcyh0aGlzLl9zZXR0aW5ncyk7XG5cbiAgICAgIHRoaXMucHJvcHMuY2FudmFzID0gY2FudmFzO1xuICAgICAgdGhpcy5wcm9wcy5jb250ZXh0ID0gY29udGV4dDtcblxuICAgICAgLy8gRGVsZXRlIG9yIGFkZCBhICdnbCcgcHJvcCBmb3IgY29udmVuaWVuY2VcbiAgICAgIHRoaXMuX3NldHVwR0xLZXkoKTtcblxuICAgICAgLy8gUmUtbW91bnQgdGhlIG5ldyBjYW52YXMgaWYgaXQgaGFzIG5vIHBhcmVudFxuICAgICAgdGhpcy5fYXBwZW5kQ2FudmFzSWZOZWVkZWQoKTtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgdG8gc3VwcG9ydCBQNS5qc1xuICAgIGlmIChvcHQucDUgJiYgdHlwZW9mIG9wdC5wNSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5wcm9wcy5wNSA9IG9wdC5wNTtcbiAgICAgIHRoaXMucHJvcHMucDUuZHJhdyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzUDVSZXNpemluZykgcmV0dXJuO1xuICAgICAgICB0aGlzLl9sYXN0UmVkcmF3UmVzdWx0ID0gdGhpcy5zdWJtaXREcmF3Q2FsbCgpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgcGxheWluZyBzdGF0ZSBpZiBuZWNlc3NhcnlcbiAgICBpZiAoJ3BsYXlpbmcnIGluIG9wdCkge1xuICAgICAgaWYgKG9wdC5wbGF5aW5nKSB0aGlzLnBsYXkoKTtcbiAgICAgIGVsc2UgdGhpcy5wYXVzZSgpO1xuICAgIH1cblxuICAgIGNoZWNrU2V0dGluZ3ModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgLy8gRHJhdyBuZXcgZnJhbWVcbiAgICB0aGlzLnJlc2l6ZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgcmV0dXJuIHRoaXMucHJvcHM7XG4gIH1cblxuICByZXNpemUgKCkge1xuICAgIGNvbnN0IG9sZFNpemVzID0gdGhpcy5fZ2V0U2l6ZVByb3BzKCk7XG5cbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3M7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gUmVjb21wdXRlIG5ldyBwcm9wZXJ0aWVzIGJhc2VkIG9uIGN1cnJlbnQgc2V0dXBcbiAgICBjb25zdCBuZXdQcm9wcyA9IHJlc2l6ZUNhbnZhcyhwcm9wcywgc2V0dGluZ3MpO1xuXG4gICAgLy8gQXNzaWduIHRvIGN1cnJlbnQgcHJvcHNcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX3Byb3BzLCBuZXdQcm9wcyk7XG5cbiAgICAvLyBOb3cgd2UgYWN0dWFsbHkgdXBkYXRlIHRoZSBjYW52YXMgd2lkdGgvaGVpZ2h0IGFuZCBzdHlsZSBwcm9wc1xuICAgIGNvbnN0IHtcbiAgICAgIHBpeGVsUmF0aW8sXG4gICAgICBjYW52YXNXaWR0aCxcbiAgICAgIGNhbnZhc0hlaWdodCxcbiAgICAgIHN0eWxlV2lkdGgsXG4gICAgICBzdHlsZUhlaWdodFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gVXBkYXRlIGNhbnZhcyBzZXR0aW5nc1xuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMucHJvcHMuY2FudmFzO1xuICAgIGlmIChjYW52YXMgJiYgc2V0dGluZ3MucmVzaXplQ2FudmFzICE9PSBmYWxzZSkge1xuICAgICAgaWYgKHByb3BzLnA1KSB7XG4gICAgICAgIC8vIFA1LmpzIHNwZWNpZmljIGVkZ2UgY2FzZVxuICAgICAgICBpZiAoY2FudmFzLndpZHRoICE9PSBjYW52YXNXaWR0aCB8fCBjYW52YXMuaGVpZ2h0ICE9PSBjYW52YXNIZWlnaHQpIHtcbiAgICAgICAgICB0aGlzLl9pc1A1UmVzaXppbmcgPSB0cnVlO1xuICAgICAgICAgIC8vIFRoaXMgY2F1c2VzIGEgcmUtZHJhdyA6XFwgc28gd2UgaWdub3JlIGRyYXdzIGluIHRoZSBtZWFuIHRpbWUuLi4gc29ydGEgaGFja3lcbiAgICAgICAgICBwcm9wcy5wNS5waXhlbERlbnNpdHkocGl4ZWxSYXRpbyk7XG4gICAgICAgICAgcHJvcHMucDUucmVzaXplQ2FudmFzKGNhbnZhc1dpZHRoIC8gcGl4ZWxSYXRpbywgY2FudmFzSGVpZ2h0IC8gcGl4ZWxSYXRpbywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuX2lzUDVSZXNpemluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3JjZSBjYW52YXMgc2l6ZVxuICAgICAgICBpZiAoY2FudmFzLndpZHRoICE9PSBjYW52YXNXaWR0aCkgY2FudmFzLndpZHRoID0gY2FudmFzV2lkdGg7XG4gICAgICAgIGlmIChjYW52YXMuaGVpZ2h0ICE9PSBjYW52YXNIZWlnaHQpIGNhbnZhcy5oZWlnaHQgPSBjYW52YXNIZWlnaHQ7XG4gICAgICB9XG4gICAgICAvLyBVcGRhdGUgY2FudmFzIHN0eWxlXG4gICAgICBpZiAoaXNCcm93c2VyKCkgJiYgc2V0dGluZ3Muc3R5bGVDYW52YXMgIT09IGZhbHNlKSB7XG4gICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IGAke3N0eWxlV2lkdGh9cHhgO1xuICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7c3R5bGVIZWlnaHR9cHhgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG5ld1NpemVzID0gdGhpcy5fZ2V0U2l6ZVByb3BzKCk7XG4gICAgbGV0IGNoYW5nZWQgPSAhZGVlcEVxdWFsKG9sZFNpemVzLCBuZXdTaXplcyk7XG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3NpemVDaGFuZ2VkKCk7XG4gICAgfVxuICAgIHJldHVybiBjaGFuZ2VkO1xuICB9XG5cbiAgX3NpemVDaGFuZ2VkICgpIHtcbiAgICAvLyBTZW5kIHJlc2l6ZSBldmVudCB0byBza2V0Y2hcbiAgICBpZiAodGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLnJlc2l6ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5za2V0Y2gucmVzaXplKHRoaXMucHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIGFuaW1hdGUgKCkge1xuICAgIGlmICghdGhpcy5wcm9wcy5wbGF5aW5nKSByZXR1cm47XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgICAgY29uc29sZS5lcnJvcignW2NhbnZhcy1za2V0Y2hdIFdBUk46IEFuaW1hdGlvbiBpbiBOb2RlLmpzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3JhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0ZUhhbmRsZXIpO1xuXG4gICAgbGV0IG5vdyA9IHJpZ2h0Tm93KCk7XG5cbiAgICBjb25zdCBmcHMgPSB0aGlzLnByb3BzLmZwcztcbiAgICBjb25zdCBmcmFtZUludGVydmFsTVMgPSAxMDAwIC8gZnBzO1xuICAgIGxldCBkZWx0YVRpbWVNUyA9IG5vdyAtIHRoaXMuX2xhc3RUaW1lO1xuXG4gICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLnByb3BzLmR1cmF0aW9uO1xuICAgIGNvbnN0IGhhc0R1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShkdXJhdGlvbik7XG5cbiAgICBsZXQgaXNOZXdGcmFtZSA9IHRydWU7XG4gICAgY29uc3QgcGxheWJhY2tSYXRlID0gdGhpcy5zZXR0aW5ncy5wbGF5YmFja1JhdGU7XG4gICAgaWYgKHBsYXliYWNrUmF0ZSA9PT0gJ2ZpeGVkJykge1xuICAgICAgZGVsdGFUaW1lTVMgPSBmcmFtZUludGVydmFsTVM7XG4gICAgfSBlbHNlIGlmIChwbGF5YmFja1JhdGUgPT09ICd0aHJvdHRsZScpIHtcbiAgICAgIGlmIChkZWx0YVRpbWVNUyA+IGZyYW1lSW50ZXJ2YWxNUykge1xuICAgICAgICBub3cgPSBub3cgLSAoZGVsdGFUaW1lTVMgJSBmcmFtZUludGVydmFsTVMpO1xuICAgICAgICB0aGlzLl9sYXN0VGltZSA9IG5vdztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzTmV3RnJhbWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGFzdFRpbWUgPSBub3c7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFUaW1lID0gZGVsdGFUaW1lTVMgLyAxMDAwO1xuICAgIGxldCBuZXdUaW1lID0gdGhpcy5wcm9wcy50aW1lICsgZGVsdGFUaW1lICogdGhpcy5wcm9wcy50aW1lU2NhbGU7XG5cbiAgICAvLyBIYW5kbGUgcmV2ZXJzZSB0aW1lIHNjYWxlXG4gICAgaWYgKG5ld1RpbWUgPCAwICYmIGhhc0R1cmF0aW9uKSB7XG4gICAgICBuZXdUaW1lID0gZHVyYXRpb24gKyBuZXdUaW1lO1xuICAgIH1cblxuICAgIC8vIFJlLXN0YXJ0IGFuaW1hdGlvblxuICAgIGxldCBpc0ZpbmlzaGVkID0gZmFsc2U7XG4gICAgbGV0IGlzTG9vcFN0YXJ0ID0gZmFsc2U7XG5cbiAgICBjb25zdCBsb29waW5nID0gdGhpcy5zZXR0aW5ncy5sb29wICE9PSBmYWxzZTtcblxuICAgIGlmIChoYXNEdXJhdGlvbiAmJiBuZXdUaW1lID49IGR1cmF0aW9uKSB7XG4gICAgICAvLyBSZS1zdGFydCBhbmltYXRpb25cbiAgICAgIGlmIChsb29waW5nKSB7XG4gICAgICAgIGlzTmV3RnJhbWUgPSB0cnVlO1xuICAgICAgICBuZXdUaW1lID0gbmV3VGltZSAlIGR1cmF0aW9uO1xuICAgICAgICBpc0xvb3BTdGFydCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc05ld0ZyYW1lID0gZmFsc2U7XG4gICAgICAgIG5ld1RpbWUgPSBkdXJhdGlvbjtcbiAgICAgICAgaXNGaW5pc2hlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NpZ25hbEVuZCgpO1xuICAgIH1cblxuICAgIGlmIChpc05ld0ZyYW1lKSB7XG4gICAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IGRlbHRhVGltZTtcbiAgICAgIHRoaXMucHJvcHMudGltZSA9IG5ld1RpbWU7XG4gICAgICB0aGlzLnByb3BzLnBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKG5ld1RpbWUsIGR1cmF0aW9uKTtcbiAgICAgIGNvbnN0IGxhc3RGcmFtZSA9IHRoaXMucHJvcHMuZnJhbWU7XG4gICAgICB0aGlzLnByb3BzLmZyYW1lID0gdGhpcy5fY29tcHV0ZUN1cnJlbnRGcmFtZSgpO1xuICAgICAgaWYgKGlzTG9vcFN0YXJ0KSB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgaWYgKGxhc3RGcmFtZSAhPT0gdGhpcy5wcm9wcy5mcmFtZSkgdGhpcy50aWNrKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgIH1cblxuICAgIGlmIChpc0ZpbmlzaGVkKSB7XG4gICAgICB0aGlzLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgZGlzcGF0Y2ggKGNiKSB7XG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHBhc3MgZnVuY3Rpb24gaW50byBkaXNwYXRjaCgpJyk7XG4gICAgY2IodGhpcy5wcm9wcyk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdW50ICgpIHtcbiAgICB0aGlzLl9hcHBlbmRDYW52YXNJZk5lZWRlZCgpO1xuICB9XG5cbiAgdW5tb3VudCAoKSB7XG4gICAgaWYgKGlzQnJvd3NlcigpKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fcmVzaXplSGFuZGxlcik7XG4gICAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0cy5kZXRhY2goKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMuY2FudmFzLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgIHRoaXMucHJvcHMuY2FudmFzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5wcm9wcy5jYW52YXMpO1xuICAgIH1cbiAgfVxuXG4gIF9hcHBlbmRDYW52YXNJZk5lZWRlZCAoKSB7XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnNldHRpbmdzLnBhcmVudCAhPT0gZmFsc2UgJiYgKHRoaXMucHJvcHMuY2FudmFzICYmICF0aGlzLnByb3BzLmNhbnZhcy5wYXJlbnRFbGVtZW50KSkge1xuICAgICAgY29uc3QgZGVmYXVsdFBhcmVudCA9IHRoaXMuc2V0dGluZ3MucGFyZW50IHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICBkZWZhdWx0UGFyZW50LmFwcGVuZENoaWxkKHRoaXMucHJvcHMuY2FudmFzKTtcbiAgICB9XG4gIH1cblxuICBfc2V0dXBHTEtleSAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuY29udGV4dCkge1xuICAgICAgaWYgKGlzV2ViR0xDb250ZXh0KHRoaXMucHJvcHMuY29udGV4dCkpIHtcbiAgICAgICAgdGhpcy5fcHJvcHMuZ2wgPSB0aGlzLnByb3BzLmNvbnRleHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5fcHJvcHMuZ2w7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0VGltZVByb3BzIChzZXR0aW5ncyA9IHt9KSB7XG4gICAgLy8gR2V0IHRpbWluZyBkYXRhXG4gICAgbGV0IGR1cmF0aW9uID0gc2V0dGluZ3MuZHVyYXRpb247XG4gICAgbGV0IHRvdGFsRnJhbWVzID0gc2V0dGluZ3MudG90YWxGcmFtZXM7XG4gICAgY29uc3QgdGltZVNjYWxlID0gZGVmaW5lZChzZXR0aW5ncy50aW1lU2NhbGUsIDEpO1xuICAgIGNvbnN0IGZwcyA9IGRlZmluZWQoc2V0dGluZ3MuZnBzLCAyNCk7XG4gICAgY29uc3QgaGFzRHVyYXRpb24gPSB0eXBlb2YgZHVyYXRpb24gPT09ICdudW1iZXInICYmIGlzRmluaXRlKGR1cmF0aW9uKTtcbiAgICBjb25zdCBoYXNUb3RhbEZyYW1lcyA9IHR5cGVvZiB0b3RhbEZyYW1lcyA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodG90YWxGcmFtZXMpO1xuXG4gICAgY29uc3QgdG90YWxGcmFtZXNGcm9tRHVyYXRpb24gPSBoYXNEdXJhdGlvbiA/IE1hdGguZmxvb3IoZnBzICogZHVyYXRpb24pIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGR1cmF0aW9uRnJvbVRvdGFsRnJhbWVzID0gaGFzVG90YWxGcmFtZXMgPyAodG90YWxGcmFtZXMgLyBmcHMpIDogdW5kZWZpbmVkO1xuICAgIGlmIChoYXNEdXJhdGlvbiAmJiBoYXNUb3RhbEZyYW1lcyAmJiB0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiAhPT0gdG90YWxGcmFtZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IGVpdGhlciBkdXJhdGlvbiBvciB0b3RhbEZyYW1lcywgYnV0IG5vdCBib3RoLiBPciwgdGhleSBtdXN0IG1hdGNoIGV4YWN0bHkuJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzZXR0aW5ncy5kaW1lbnNpb25zID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygc2V0dGluZ3MudW5pdHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFlvdSd2ZSBzcGVjaWZpZWQgYSB7IHVuaXRzIH0gc2V0dGluZyBidXQgbm8geyBkaW1lbnNpb24gfSwgc28gdGhlIHVuaXRzIHdpbGwgYmUgaWdub3JlZC5gKTtcbiAgICB9XG5cbiAgICB0b3RhbEZyYW1lcyA9IGRlZmluZWQodG90YWxGcmFtZXMsIHRvdGFsRnJhbWVzRnJvbUR1cmF0aW9uLCBJbmZpbml0eSk7XG4gICAgZHVyYXRpb24gPSBkZWZpbmVkKGR1cmF0aW9uLCBkdXJhdGlvbkZyb21Ub3RhbEZyYW1lcywgSW5maW5pdHkpO1xuXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gc2V0dGluZ3MudGltZTtcbiAgICBjb25zdCBzdGFydEZyYW1lID0gc2V0dGluZ3MuZnJhbWU7XG4gICAgY29uc3QgaGFzU3RhcnRUaW1lID0gdHlwZW9mIHN0YXJ0VGltZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc3RhcnRUaW1lKTtcbiAgICBjb25zdCBoYXNTdGFydEZyYW1lID0gdHlwZW9mIHN0YXJ0RnJhbWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHN0YXJ0RnJhbWUpO1xuXG4gICAgLy8gc3RhcnQgYXQgemVybyB1bmxlc3MgdXNlciBzcGVjaWZpZXMgZnJhbWUgb3IgdGltZSAoYnV0IG5vdCBib3RoIG1pc21hdGNoZWQpXG4gICAgbGV0IHRpbWUgPSAwO1xuICAgIGxldCBmcmFtZSA9IDA7XG4gICAgbGV0IHBsYXloZWFkID0gMDtcbiAgICBpZiAoaGFzU3RhcnRUaW1lICYmIGhhc1N0YXJ0RnJhbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IGVpdGhlciBzdGFydCBmcmFtZSBvciB0aW1lLCBidXQgbm90IGJvdGguJyk7XG4gICAgfSBlbHNlIGlmIChoYXNTdGFydFRpbWUpIHtcbiAgICAgIC8vIFVzZXIgc3BlY2lmaWVzIHRpbWUsIHdlIGluZmVyIGZyYW1lcyBmcm9tIEZQU1xuICAgICAgdGltZSA9IHN0YXJ0VGltZTtcbiAgICAgIHBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKHRpbWUsIGR1cmF0aW9uKTtcbiAgICAgIGZyYW1lID0gdGhpcy5fY29tcHV0ZUZyYW1lKFxuICAgICAgICBwbGF5aGVhZCwgdGltZSxcbiAgICAgICAgdG90YWxGcmFtZXMsIGZwc1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGhhc1N0YXJ0RnJhbWUpIHtcbiAgICAgIC8vIFVzZXIgc3BlY2lmaWVzIGZyYW1lIG51bWJlciwgd2UgaW5mZXIgdGltZSBmcm9tIEZQU1xuICAgICAgZnJhbWUgPSBzdGFydEZyYW1lO1xuICAgICAgdGltZSA9IGZyYW1lIC8gZnBzO1xuICAgICAgcGxheWhlYWQgPSB0aGlzLl9jb21wdXRlUGxheWhlYWQodGltZSwgZHVyYXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwbGF5aGVhZCxcbiAgICAgIHRpbWUsXG4gICAgICBmcmFtZSxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgdG90YWxGcmFtZXMsXG4gICAgICBmcHMsXG4gICAgICB0aW1lU2NhbGVcbiAgICB9O1xuICB9XG5cbiAgc2V0dXAgKHNldHRpbmdzID0ge30pIHtcbiAgICBpZiAodGhpcy5za2V0Y2gpIHRocm93IG5ldyBFcnJvcignTXVsdGlwbGUgc2V0dXAoKSBjYWxscyBub3QgeWV0IHN1cHBvcnRlZC4nKTtcblxuICAgIHRoaXMuX3NldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc2V0dGluZ3MsIHRoaXMuX3NldHRpbmdzKTtcblxuICAgIGNoZWNrU2V0dGluZ3ModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgLy8gR2V0IGluaXRpYWwgY2FudmFzICYgY29udGV4dFxuICAgIGNvbnN0IHsgY29udGV4dCwgY2FudmFzIH0gPSBjcmVhdGVDYW52YXModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgY29uc3QgdGltZVByb3BzID0gdGhpcy5nZXRUaW1lUHJvcHModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgLy8gSW5pdGlhbCByZW5kZXIgc3RhdGUgZmVhdHVyZXNcbiAgICB0aGlzLl9wcm9wcyA9IHtcbiAgICAgIC4uLnRpbWVQcm9wcyxcbiAgICAgIGNhbnZhcyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBkZWx0YVRpbWU6IDAsXG4gICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgIGV4cG9ydGluZzogZmFsc2UsXG4gICAgICBwbGF5aW5nOiBmYWxzZSxcbiAgICAgIHJlY29yZGluZzogZmFsc2UsXG4gICAgICBzZXR0aW5nczogdGhpcy5zZXR0aW5ncyxcbiAgICAgIGRhdGE6IHRoaXMuc2V0dGluZ3MuZGF0YSxcblxuICAgICAgLy8gRXhwb3J0IHNvbWUgc3BlY2lmaWMgYWN0aW9ucyB0byB0aGUgc2tldGNoXG4gICAgICByZW5kZXI6ICgpID0+IHRoaXMucmVuZGVyKCksXG4gICAgICB0b2dnbGVQbGF5OiAoKSA9PiB0aGlzLnRvZ2dsZVBsYXkoKSxcbiAgICAgIGRpc3BhdGNoOiAoY2IpID0+IHRoaXMuZGlzcGF0Y2goY2IpLFxuICAgICAgdGljazogKCkgPT4gdGhpcy50aWNrKCksXG4gICAgICByZXNpemU6ICgpID0+IHRoaXMucmVzaXplKCksXG4gICAgICB1cGRhdGU6IChvcHQpID0+IHRoaXMudXBkYXRlKG9wdCksXG4gICAgICBleHBvcnRGcmFtZTogb3B0ID0+IHRoaXMuZXhwb3J0RnJhbWUob3B0KSxcbiAgICAgIHJlY29yZDogKCkgPT4gdGhpcy5yZWNvcmQoKSxcbiAgICAgIHBsYXk6ICgpID0+IHRoaXMucGxheSgpLFxuICAgICAgcGF1c2U6ICgpID0+IHRoaXMucGF1c2UoKSxcbiAgICAgIHN0b3A6ICgpID0+IHRoaXMuc3RvcCgpXG4gICAgfTtcblxuICAgIC8vIEZvciBXZWJHTCBza2V0Y2hlcywgYSBnbCB2YXJpYWJsZSByZWFkcyBhIGJpdCBiZXR0ZXJcbiAgICB0aGlzLl9zZXR1cEdMS2V5KCk7XG5cbiAgICAvLyBUcmlnZ2VyIGluaXRpYWwgcmVzaXplIG5vdyBzbyB0aGF0IGNhbnZhcyBpcyBhbHJlYWR5IHNpemVkXG4gICAgLy8gYnkgdGhlIHRpbWUgd2UgbG9hZCB0aGUgc2tldGNoXG4gICAgdGhpcy5yZXNpemUoKTtcbiAgfVxuXG4gIGxvYWRBbmRSdW4gKGNhbnZhc1NrZXRjaCwgbmV3U2V0dGluZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkKGNhbnZhc1NrZXRjaCwgbmV3U2V0dGluZ3MpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5ydW4oKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0pO1xuICB9XG5cbiAgdW5sb2FkICgpIHtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2gudW5sb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLnVubG9hZChwcm9wcykpO1xuICAgIH1cbiAgICB0aGlzLl9za2V0Y2ggPSBudWxsO1xuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgdGhpcy51bmxvYWQoKTtcbiAgICB0aGlzLnVubW91bnQoKTtcbiAgfVxuXG4gIGxvYWQgKGNyZWF0ZVNrZXRjaCwgbmV3U2V0dGluZ3MpIHtcbiAgICAvLyBVc2VyIGRpZG4ndCBzcGVjaWZ5IGEgZnVuY3Rpb25cbiAgICBpZiAodHlwZW9mIGNyZWF0ZVNrZXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnVuY3Rpb24gbXVzdCB0YWtlIGluIGEgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IHBhcmFtZXRlci4gRXhhbXBsZTpcXG4gIGNhbnZhc1NrZXRjaGVyKCgpID0+IHsgLi4uIH0sIHNldHRpbmdzKScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNrZXRjaCkge1xuICAgICAgdGhpcy51bmxvYWQoKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld1NldHRpbmdzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy51cGRhdGUobmV3U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSB0cmlja3kgY2FzZTsgd2Ugc2V0IHVwIHRoZSBhdXRvLXNjYWxpbmcgaGVyZVxuICAgIC8vIGluIGNhc2UgdGhlIHVzZXIgZGVjaWRlcyB0byByZW5kZXIgYW55dGhpbmcgdG8gdGhlIGNvbnRleHQgKmJlZm9yZSogdGhlXG4gICAgLy8gcmVuZGVyKCkgZnVuY3Rpb24uLi4gSG93ZXZlciwgdXNlcnMgc2hvdWxkIGluc3RlYWQgdXNlIGJlZ2luKCkgZnVuY3Rpb24gZm9yIHRoYXQuXG4gICAgdGhpcy5fcHJlUmVuZGVyKCk7XG5cbiAgICBsZXQgcHJlbG9hZCA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgLy8gQmVjYXVzZSBvZiBQNS5qcydzIHVudXN1YWwgc3RydWN0dXJlLCB3ZSBoYXZlIHRvIGRvIGEgYml0IG9mXG4gICAgLy8gbGlicmFyeS1zcGVjaWZpYyBjaGFuZ2VzIHRvIHN1cHBvcnQgaXQgcHJvcGVybHkuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MucDUpIHtcbiAgICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbY2FudmFzLXNrZXRjaF0gRVJST1I6IFVzaW5nIHA1LmpzIGluIE5vZGUuanMgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgfVxuICAgICAgcHJlbG9hZCA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICBsZXQgUDVDb25zdHJ1Y3RvciA9IHRoaXMuc2V0dGluZ3MucDU7XG4gICAgICAgIGxldCBwcmVsb2FkO1xuICAgICAgICBpZiAoUDVDb25zdHJ1Y3Rvci5wNSkge1xuICAgICAgICAgIHByZWxvYWQgPSBQNUNvbnN0cnVjdG9yLnByZWxvYWQ7XG4gICAgICAgICAgUDVDb25zdHJ1Y3RvciA9IFA1Q29uc3RydWN0b3IucDU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgc2tldGNoIHNldHVwOyBkaXNhYmxlIGxvb3AsIHNldCBzaXppbmcsIGV0Yy5cbiAgICAgICAgY29uc3QgcDVTa2V0Y2ggPSBwNSA9PiB7XG4gICAgICAgICAgLy8gSG9vayBpbiBwcmVsb2FkIGlmIG5lY2Vzc2FyeVxuICAgICAgICAgIGlmIChwcmVsb2FkKSBwNS5wcmVsb2FkID0gKCkgPT4gcHJlbG9hZChwNSk7XG4gICAgICAgICAgcDUuc2V0dXAgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgICAgICAgICBjb25zdCBpc0dMID0gdGhpcy5zZXR0aW5ncy5jb250ZXh0ID09PSAnd2ViZ2wnO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyZXIgPSBpc0dMID8gcDUuV0VCR0wgOiBwNS5QMkQ7XG4gICAgICAgICAgICBwNS5ub0xvb3AoKTtcbiAgICAgICAgICAgIHA1LnBpeGVsRGVuc2l0eShwcm9wcy5waXhlbFJhdGlvKTtcbiAgICAgICAgICAgIHA1LmNyZWF0ZUNhbnZhcyhwcm9wcy52aWV3cG9ydFdpZHRoLCBwcm9wcy52aWV3cG9ydEhlaWdodCwgcmVuZGVyZXIpO1xuICAgICAgICAgICAgaWYgKGlzR0wgJiYgdGhpcy5zZXR0aW5ncy5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgIHA1LnNldEF0dHJpYnV0ZXModGhpcy5zZXR0aW5ncy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51cGRhdGUoeyBwNSwgY2FudmFzOiBwNS5jYW52YXMsIGNvbnRleHQ6IHA1Ll9yZW5kZXJlci5kcmF3aW5nQ29udGV4dCB9KTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFN1cHBvcnQgZ2xvYmFsIGFuZCBpbnN0YW5jZSBQNS5qcyBtb2Rlc1xuICAgICAgICBpZiAodHlwZW9mIFA1Q29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBuZXcgUDVDb25zdHJ1Y3RvcihwNVNrZXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuY3JlYXRlQ2FudmFzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ7IHA1IH0gc2V0dGluZyBpcyBwYXNzZWQgYnV0IGNhbid0IGZpbmQgcDUuanMgaW4gZ2xvYmFsICh3aW5kb3cpIHNjb3BlLiBNYXliZSB5b3UgZGlkIG5vdCBjcmVhdGUgaXQgZ2xvYmFsbHk/XFxubmV3IHA1KCk7IC8vIDwtLSBhdHRhY2hlcyB0byBnbG9iYWwgc2NvcGVcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHA1U2tldGNoKHdpbmRvdyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcmVsb2FkLnRoZW4oKCkgPT4ge1xuICAgICAgLy8gTG9hZCB0aGUgdXNlcidzIHNrZXRjaFxuICAgICAgbGV0IGxvYWRlciA9IGNyZWF0ZVNrZXRjaCh0aGlzLnByb3BzKTtcbiAgICAgIGlmICghaXNQcm9taXNlKGxvYWRlcikpIHtcbiAgICAgICAgbG9hZGVyID0gUHJvbWlzZS5yZXNvbHZlKGxvYWRlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbG9hZGVyO1xuICAgIH0pLnRoZW4oc2tldGNoID0+IHtcbiAgICAgIGlmICghc2tldGNoKSBza2V0Y2ggPSB7fTtcbiAgICAgIHRoaXMuX3NrZXRjaCA9IHNrZXRjaDtcblxuICAgICAgLy8gT25jZSB0aGUgc2tldGNoIGlzIGxvYWRlZCB3ZSBjYW4gYWRkIHRoZSBldmVudHNcbiAgICAgIGlmIChpc0Jyb3dzZXIoKSkge1xuICAgICAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0cy5hdHRhY2goKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3Jlc2l6ZUhhbmRsZXIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wb3N0UmVuZGVyKCk7XG5cbiAgICAgIC8vIFRoZSBpbml0aWFsIHJlc2l6ZSgpIGluIHRoZSBjb25zdHJ1Y3RvciB3aWxsIG5vdCBoYXZlXG4gICAgICAvLyB0cmlnZ2VyZWQgYSByZXNpemUoKSBldmVudCBvbiB0aGUgc2tldGNoLCBzaW5jZSBpdCB3YXMgYmVmb3JlXG4gICAgICAvLyB0aGUgc2tldGNoIHdhcyBsb2FkZWQuIFNvIHdlIHNlbmQgdGhlIHNpZ25hbCBoZXJlLCBhbGxvd2luZ1xuICAgICAgLy8gdXNlcnMgdG8gcmVhY3QgdG8gdGhlIGluaXRpYWwgc2l6ZSBiZWZvcmUgZmlyc3QgcmVuZGVyLlxuICAgICAgdGhpcy5fc2l6ZUNoYW5nZWQoKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBzdGFydCBza2V0Y2gsIHRoZSBhc3luYyBsb2FkaW5nIGZ1bmN0aW9uIHJlamVjdGVkIHdpdGggYW4gZXJyb3I6XFxuICAgIEVycm9yOiAnICsgZXJyLm1lc3NhZ2UpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNrZXRjaE1hbmFnZXI7XG4iLCJpbXBvcnQgeyBnZXRDbGllbnRBUEkgfSBmcm9tICcuLi91dGlsJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKG9wdCA9IHt9KSB7XG4gIGNvbnN0IGhhbmRsZXIgPSBldiA9PiB7XG4gICAgaWYgKCFvcHQuZW5hYmxlZCgpKSByZXR1cm47XG5cbiAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgICBpZiAoZXYua2V5Q29kZSA9PT0gODMgJiYgIWV2LmFsdEtleSAmJiAoZXYubWV0YUtleSB8fCBldi5jdHJsS2V5KSkge1xuICAgICAgLy8gQ21kICsgU1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG9wdC5zYXZlKGV2KTtcbiAgICB9IGVsc2UgaWYgKGV2LmtleUNvZGUgPT09IDMyKSB7XG4gICAgICAvLyBTcGFjZVxuICAgICAgLy8gVE9ETzogd2hhdCB0byBkbyB3aXRoIHRoaXM/IGtlZXAgaXQsIG9yIHJlbW92ZSBpdD9cbiAgICAgIG9wdC50b2dnbGVQbGF5KGV2KTtcbiAgICB9IGVsc2UgaWYgKGNsaWVudCAmJiAhZXYuYWx0S2V5ICYmIGV2LmtleUNvZGUgPT09IDc1ICYmIChldi5tZXRhS2V5IHx8IGV2LmN0cmxLZXkpKSB7XG4gICAgICAvLyBDbWQgKyBLLCBvbmx5IHdoZW4gY2FudmFzLXNrZXRjaC1jbGkgaXMgdXNlZFxuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG9wdC5jb21taXQoZXYpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhdHRhY2ggPSAoKSA9PiB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVyKTtcbiAgfTtcblxuICBjb25zdCBkZXRhY2ggPSAoKSA9PiB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVyKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGF0dGFjaCxcbiAgICBkZXRhY2hcbiAgfTtcbn1cbiIsImltcG9ydCBTa2V0Y2hNYW5hZ2VyIGZyb20gJy4vY29yZS9Ta2V0Y2hNYW5hZ2VyJztcbmltcG9ydCBQYXBlclNpemVzIGZyb20gJy4vcGFwZXItc2l6ZXMnO1xuaW1wb3J0IHsgZ2V0Q2xpZW50QVBJLCBkZWZpbmVkIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgQ0FDSEUgPSAnaG90LWlkLWNhY2hlJztcbmNvbnN0IHJ1bnRpbWVDb2xsaXNpb25zID0gW107XG5cbmZ1bmN0aW9uIGlzSG90UmVsb2FkICgpIHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gIHJldHVybiBjbGllbnQgJiYgY2xpZW50LmhvdDtcbn1cblxuZnVuY3Rpb24gY2FjaGVHZXQgKGlkKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICBpZiAoIWNsaWVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY2xpZW50W0NBQ0hFXSA9IGNsaWVudFtDQUNIRV0gfHwge307XG4gIHJldHVybiBjbGllbnRbQ0FDSEVdW2lkXTtcbn1cblxuZnVuY3Rpb24gY2FjaGVQdXQgKGlkLCBkYXRhKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICBpZiAoIWNsaWVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY2xpZW50W0NBQ0hFXSA9IGNsaWVudFtDQUNIRV0gfHwge307XG4gIGNsaWVudFtDQUNIRV1baWRdID0gZGF0YTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZVByb3AgKG9sZE1hbmFnZXIsIG5ld1NldHRpbmdzKSB7XG4gIC8vIFN0YXRpYyBza2V0Y2hlcyBpZ25vcmUgdGhlIHRpbWUgcGVyc2lzdGVuY3lcbiAgcmV0dXJuIG5ld1NldHRpbmdzLmFuaW1hdGUgPyB7IHRpbWU6IG9sZE1hbmFnZXIucHJvcHMudGltZSB9IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjYW52YXNTa2V0Y2ggKHNrZXRjaCwgc2V0dGluZ3MgPSB7fSkge1xuICBpZiAoc2V0dGluZ3MucDUpIHtcbiAgICBpZiAoc2V0dGluZ3MuY2FudmFzIHx8IChzZXR0aW5ncy5jb250ZXh0ICYmIHR5cGVvZiBzZXR0aW5ncy5jb250ZXh0ICE9PSAnc3RyaW5nJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW4geyBwNSB9IG1vZGUsIHlvdSBjYW4ndCBwYXNzIHlvdXIgb3duIGNhbnZhcyBvciBjb250ZXh0LCB1bmxlc3MgdGhlIGNvbnRleHQgaXMgYSBcIndlYmdsXCIgb3IgXCIyZFwiIHN0cmluZ2ApO1xuICAgIH1cblxuICAgIC8vIERvIG5vdCBjcmVhdGUgYSBjYW52YXMgb24gc3RhcnR1cCwgc2luY2UgUDUuanMgZG9lcyB0aGF0IGZvciB1c1xuICAgIGNvbnN0IGNvbnRleHQgPSB0eXBlb2Ygc2V0dGluZ3MuY29udGV4dCA9PT0gJ3N0cmluZycgPyBzZXR0aW5ncy5jb250ZXh0IDogZmFsc2U7XG4gICAgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBzZXR0aW5ncywgeyBjYW52YXM6IGZhbHNlLCBjb250ZXh0IH0pO1xuICB9XG5cbiAgY29uc3QgaXNIb3QgPSBpc0hvdFJlbG9hZCgpO1xuICBsZXQgaG90SUQ7XG4gIGlmIChpc0hvdCkge1xuICAgIC8vIFVzZSBhIG1hZ2ljIG5hbWUgYnkgZGVmYXVsdCwgZm9yY2UgdXNlciB0byBkZWZpbmUgZWFjaCBza2V0Y2ggaWYgdGhleVxuICAgIC8vIHJlcXVpcmUgbW9yZSB0aGFuIG9uZSBpbiBhbiBhcHBsaWNhdGlvbi4gT3BlbiB0byBvdGhlciBpZGVhcyBvbiBob3cgdG8gdGFja2xlXG4gICAgLy8gdGhpcyBhcyB3ZWxsLi4uXG4gICAgaG90SUQgPSBkZWZpbmVkKHNldHRpbmdzLmlkLCAnJF9fREVGQVVMVF9DQU5WQVNfU0tFVENIX0lEX18kJyk7XG4gIH1cbiAgbGV0IGlzSW5qZWN0aW5nID0gaXNIb3QgJiYgdHlwZW9mIGhvdElEID09PSAnc3RyaW5nJztcblxuICBpZiAoaXNJbmplY3RpbmcgJiYgcnVudGltZUNvbGxpc2lvbnMuaW5jbHVkZXMoaG90SUQpKSB7XG4gICAgY29uc29sZS53YXJuKGBXYXJuaW5nOiBZb3UgaGF2ZSBtdWx0aXBsZSBjYWxscyB0byBjYW52YXNTa2V0Y2goKSBpbiAtLWhvdCBtb2RlLiBZb3UgbXVzdCBwYXNzIHVuaXF1ZSB7IGlkIH0gc3RyaW5ncyBpbiBzZXR0aW5ncyB0byBlbmFibGUgaG90IHJlbG9hZCBhY3Jvc3MgbXVsdGlwbGUgc2tldGNoZXMuIGAsIGhvdElEKTtcbiAgICBpc0luamVjdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgbGV0IHByZWxvYWQgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICBpZiAoaXNJbmplY3RpbmcpIHtcbiAgICAvLyBNYXJrIHRoaXMgYXMgYWxyZWFkeSBzcG90dGVkIGluIHRoaXMgcnVudGltZSBpbnN0YW5jZVxuICAgIHJ1bnRpbWVDb2xsaXNpb25zLnB1c2goaG90SUQpO1xuXG4gICAgY29uc3QgcHJldmlvdXNEYXRhID0gY2FjaGVHZXQoaG90SUQpO1xuICAgIGlmIChwcmV2aW91c0RhdGEpIHtcbiAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgIC8vIEdyYWIgbmV3IHByb3BzIGZyb20gb2xkIHNrZXRjaCBpbnN0YW5jZVxuICAgICAgICBjb25zdCBuZXdQcm9wcyA9IGdldFRpbWVQcm9wKHByZXZpb3VzRGF0YS5tYW5hZ2VyLCBzZXR0aW5ncyk7XG4gICAgICAgIC8vIERlc3Ryb3kgdGhlIG9sZCBpbnN0YW5jZVxuICAgICAgICBwcmV2aW91c0RhdGEubWFuYWdlci5kZXN0cm95KCk7XG4gICAgICAgIC8vIFBhc3MgYWxvbmcgbmV3IHByb3BzXG4gICAgICAgIHJldHVybiBuZXdQcm9wcztcbiAgICAgIH07XG5cbiAgICAgIC8vIE1vdmUgYWxvbmcgdGhlIG5leHQgZGF0YS4uLlxuICAgICAgcHJlbG9hZCA9IHByZXZpb3VzRGF0YS5sb2FkLnRoZW4obmV4dCkuY2F0Y2gobmV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZWxvYWQudGhlbihuZXdQcm9wcyA9PiB7XG4gICAgY29uc3QgbWFuYWdlciA9IG5ldyBTa2V0Y2hNYW5hZ2VyKCk7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAoc2tldGNoKSB7XG4gICAgICAvLyBNZXJnZSB3aXRoIGluY29taW5nIGRhdGFcbiAgICAgIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc2V0dGluZ3MsIG5ld1Byb3BzKTtcblxuICAgICAgLy8gQXBwbHkgc2V0dGluZ3MgYW5kIGNyZWF0ZSBhIGNhbnZhc1xuICAgICAgbWFuYWdlci5zZXR1cChzZXR0aW5ncyk7XG5cbiAgICAgIC8vIE1vdW50IHRvIERPTVxuICAgICAgbWFuYWdlci5tb3VudCgpO1xuXG4gICAgICAvLyBsb2FkIHRoZSBza2V0Y2ggZmlyc3RcbiAgICAgIHJlc3VsdCA9IG1hbmFnZXIubG9hZEFuZFJ1bihza2V0Y2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBQcm9taXNlLnJlc29sdmUobWFuYWdlcik7XG4gICAgfVxuICAgIGlmIChpc0luamVjdGluZykge1xuICAgICAgY2FjaGVQdXQoaG90SUQsIHsgbG9hZDogcmVzdWx0LCBtYW5hZ2VyIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcbn1cblxuLy8gVE9ETzogRmlndXJlIG91dCBhIG5pY2Ugd2F5IHRvIGV4cG9ydCB0aGluZ3MuXG5jYW52YXNTa2V0Y2guY2FudmFzU2tldGNoID0gY2FudmFzU2tldGNoO1xuY2FudmFzU2tldGNoLlBhcGVyU2l6ZXMgPSBQYXBlclNpemVzO1xuXG5leHBvcnQgZGVmYXVsdCBjYW52YXNTa2V0Y2g7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lZCgpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBhcmd1bWVudHNbaV07XG5cdFx0fVxuXHR9XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBoc2wycmdiXG5mdW5jdGlvbiBoc2wycmdiIChoc2wpIHtcbiAgdmFyIGggPSBoc2xbMF0sXG4gICAgcyA9IGhzbFsxXSxcbiAgICBsID0gaHNsWzJdLFxuICAgIHQxLCB0MiwgdDMsIHJnYiwgdmFsXG5cbiAgaWYgKHMgPT09IDApIHtcbiAgICB2YWwgPSBsXG4gICAgcmV0dXJuIFt2YWwsIHZhbCwgdmFsXVxuICB9XG5cbiAgaWYgKGwgPCAwLjUpIHtcbiAgICB0MiA9IGwgKiAoMSArIHMpXG4gIH0gZWxzZSB7XG4gICAgdDIgPSBsICsgcyAtIGwgKiBzXG4gIH1cbiAgdDEgPSAyICogbCAtIHQyXG5cbiAgcmdiID0gWzAsIDAsIDBdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgdDMgPSBoICsgMSAvIDMgKiAtKGkgLSAxKVxuICAgIGlmICh0MyA8IDApIHtcbiAgICAgIHQzKytcbiAgICB9XG4gICAgaWYgKHQzID4gMSkge1xuICAgICAgdDMtLVxuICAgIH1cblxuICAgIGlmICg2ICogdDMgPCAxKSB7XG4gICAgICB2YWwgPSB0MSArICh0MiAtIHQxKSAqIDYgKiB0M1xuICAgIH0gZWxzZSBpZiAoMiAqIHQzIDwgMSkge1xuICAgICAgdmFsID0gdDJcbiAgICB9IGVsc2UgaWYgKDMgKiB0MyA8IDIpIHtcbiAgICAgIHZhbCA9IHQxICsgKHQyIC0gdDEpICogKDIgLyAzIC0gdDMpICogNlxuICAgIH0gZWxzZSB7XG4gICAgICB2YWwgPSB0MVxuICAgIH1cblxuICAgIHJnYltpXSA9IHZhbFxuICB9XG5cbiAgcmV0dXJuIHJnYlxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZ2IyaHNsXG5mdW5jdGlvbiByZ2IyaHNsIChyZ2IpIHtcbiAgdmFyIHIgPSByZ2JbMF0sXG4gICAgZyA9IHJnYlsxXSxcbiAgICBiID0gcmdiWzJdLFxuICAgIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpLFxuICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgIGRlbHRhID0gbWF4IC0gbWluLFxuICAgIGgsIHMsIGxcblxuICBpZiAobWF4ID09PSBtaW4pIHtcbiAgICBoID0gMFxuICB9IGVsc2UgaWYgKHIgPT09IG1heCkge1xuICAgIGggPSAoZyAtIGIpIC8gZGVsdGFcbiAgfSBlbHNlIGlmIChnID09PSBtYXgpIHtcbiAgICBoID0gMiArIChiIC0gcikgLyBkZWx0YVxuICB9IGVsc2UgaWYgKGIgPT09IG1heCkge1xuICAgIGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhXG4gIH1cblxuICBoID0gTWF0aC5taW4oaCAqIDYwLCAzNjApXG5cbiAgaWYgKGggPCAwKSB7XG4gICAgaCArPSAzNjBcbiAgfVxuXG4gIGwgPSAobWluICsgbWF4KSAvIDJcblxuICBpZiAobWF4ID09PSBtaW4pIHtcbiAgICBzID0gMFxuICB9IGVsc2UgaWYgKGwgPD0gMC41KSB7XG4gICAgcyA9IGRlbHRhIC8gKG1heCArIG1pbilcbiAgfSBlbHNlIHtcbiAgICBzID0gZGVsdGEgLyAoMiAtIG1heCAtIG1pbilcbiAgfVxuXG4gIHJldHVybiBbaCAvIDM2MCwgcywgbF1cbn1cbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciB3aWR0aCA9IDI1NjsvLyBlYWNoIFJDNCBvdXRwdXQgaXMgMCA8PSB4IDwgMjU2XHJcbnZhciBjaHVua3MgPSA2Oy8vIGF0IGxlYXN0IHNpeCBSQzQgb3V0cHV0cyBmb3IgZWFjaCBkb3VibGVcclxudmFyIGRpZ2l0cyA9IDUyOy8vIHRoZXJlIGFyZSA1MiBzaWduaWZpY2FudCBkaWdpdHMgaW4gYSBkb3VibGVcclxudmFyIHBvb2wgPSBbXTsvLyBwb29sOiBlbnRyb3B5IHBvb2wgc3RhcnRzIGVtcHR5XHJcbnZhciBHTE9CQUwgPSB0eXBlb2YgZ2xvYmFsID09PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbDtcclxuXHJcbi8vXHJcbi8vIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWxhdGVkIHRvIElFRUUgNzU0IGxpbWl0cy5cclxuLy9cclxudmFyIHN0YXJ0ZGVub20gPSBNYXRoLnBvdyh3aWR0aCwgY2h1bmtzKSxcclxuICAgIHNpZ25pZmljYW5jZSA9IE1hdGgucG93KDIsIGRpZ2l0cyksXHJcbiAgICBvdmVyZmxvdyA9IHNpZ25pZmljYW5jZSAqIDIsXHJcbiAgICBtYXNrID0gd2lkdGggLSAxO1xyXG5cclxuXHJcbnZhciBvbGRSYW5kb20gPSBNYXRoLnJhbmRvbTtcclxuXHJcbi8vXHJcbi8vIHNlZWRyYW5kb20oKVxyXG4vLyBUaGlzIGlzIHRoZSBzZWVkcmFuZG9tIGZ1bmN0aW9uIGRlc2NyaWJlZCBhYm92ZS5cclxuLy9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihzZWVkLCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nbG9iYWwgPT09IHRydWUpIHtcclxuICAgIG9wdGlvbnMuZ2xvYmFsID0gZmFsc2U7XHJcbiAgICBNYXRoLnJhbmRvbSA9IG1vZHVsZS5leHBvcnRzKHNlZWQsIG9wdGlvbnMpO1xyXG4gICAgb3B0aW9ucy5nbG9iYWwgPSB0cnVlO1xyXG4gICAgcmV0dXJuIE1hdGgucmFuZG9tO1xyXG4gIH1cclxuICB2YXIgdXNlX2VudHJvcHkgPSAob3B0aW9ucyAmJiBvcHRpb25zLmVudHJvcHkpIHx8IGZhbHNlO1xyXG4gIHZhciBrZXkgPSBbXTtcclxuXHJcbiAgLy8gRmxhdHRlbiB0aGUgc2VlZCBzdHJpbmcgb3IgYnVpbGQgb25lIGZyb20gbG9jYWwgZW50cm9weSBpZiBuZWVkZWQuXHJcbiAgdmFyIHNob3J0c2VlZCA9IG1peGtleShmbGF0dGVuKFxyXG4gICAgdXNlX2VudHJvcHkgPyBbc2VlZCwgdG9zdHJpbmcocG9vbCldIDpcclxuICAgIDAgaW4gYXJndW1lbnRzID8gc2VlZCA6IGF1dG9zZWVkKCksIDMpLCBrZXkpO1xyXG5cclxuICAvLyBVc2UgdGhlIHNlZWQgdG8gaW5pdGlhbGl6ZSBhbiBBUkM0IGdlbmVyYXRvci5cclxuICB2YXIgYXJjNCA9IG5ldyBBUkM0KGtleSk7XHJcblxyXG4gIC8vIE1peCB0aGUgcmFuZG9tbmVzcyBpbnRvIGFjY3VtdWxhdGVkIGVudHJvcHkuXHJcbiAgbWl4a2V5KHRvc3RyaW5nKGFyYzQuUyksIHBvb2wpO1xyXG5cclxuICAvLyBPdmVycmlkZSBNYXRoLnJhbmRvbVxyXG5cclxuICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSByYW5kb20gZG91YmxlIGluIFswLCAxKSB0aGF0IGNvbnRhaW5zXHJcbiAgLy8gcmFuZG9tbmVzcyBpbiBldmVyeSBiaXQgb2YgdGhlIG1hbnRpc3NhIG9mIHRoZSBJRUVFIDc1NCB2YWx1ZS5cclxuXHJcbiAgcmV0dXJuIGZ1bmN0aW9uKCkgeyAgICAgICAgIC8vIENsb3N1cmUgdG8gcmV0dXJuIGEgcmFuZG9tIGRvdWJsZTpcclxuICAgIHZhciBuID0gYXJjNC5nKGNodW5rcyksICAgICAgICAgICAgIC8vIFN0YXJ0IHdpdGggYSBudW1lcmF0b3IgbiA8IDIgXiA0OFxyXG4gICAgICAgIGQgPSBzdGFydGRlbm9tLCAgICAgICAgICAgICAgICAgLy8gICBhbmQgZGVub21pbmF0b3IgZCA9IDIgXiA0OC5cclxuICAgICAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgYW5kIG5vICdleHRyYSBsYXN0IGJ5dGUnLlxyXG4gICAgd2hpbGUgKG4gPCBzaWduaWZpY2FuY2UpIHsgICAgICAgICAgLy8gRmlsbCB1cCBhbGwgc2lnbmlmaWNhbnQgZGlnaXRzIGJ5XHJcbiAgICAgIG4gPSAobiArIHgpICogd2lkdGg7ICAgICAgICAgICAgICAvLyAgIHNoaWZ0aW5nIG51bWVyYXRvciBhbmRcclxuICAgICAgZCAqPSB3aWR0aDsgICAgICAgICAgICAgICAgICAgICAgIC8vICAgZGVub21pbmF0b3IgYW5kIGdlbmVyYXRpbmcgYVxyXG4gICAgICB4ID0gYXJjNC5nKDEpOyAgICAgICAgICAgICAgICAgICAgLy8gICBuZXcgbGVhc3Qtc2lnbmlmaWNhbnQtYnl0ZS5cclxuICAgIH1cclxuICAgIHdoaWxlIChuID49IG92ZXJmbG93KSB7ICAgICAgICAgICAgIC8vIFRvIGF2b2lkIHJvdW5kaW5nIHVwLCBiZWZvcmUgYWRkaW5nXHJcbiAgICAgIG4gLz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGxhc3QgYnl0ZSwgc2hpZnQgZXZlcnl0aGluZ1xyXG4gICAgICBkIC89IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICByaWdodCB1c2luZyBpbnRlZ2VyIE1hdGggdW50aWxcclxuICAgICAgeCA+Pj49IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgd2UgaGF2ZSBleGFjdGx5IHRoZSBkZXNpcmVkIGJpdHMuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gKG4gKyB4KSAvIGQ7ICAgICAgICAgICAgICAgICAvLyBGb3JtIHRoZSBudW1iZXIgd2l0aGluIFswLCAxKS5cclxuICB9O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMucmVzZXRHbG9iYWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgTWF0aC5yYW5kb20gPSBvbGRSYW5kb207XHJcbn07XHJcblxyXG4vL1xyXG4vLyBBUkM0XHJcbi8vXHJcbi8vIEFuIEFSQzQgaW1wbGVtZW50YXRpb24uICBUaGUgY29uc3RydWN0b3IgdGFrZXMgYSBrZXkgaW4gdGhlIGZvcm0gb2ZcclxuLy8gYW4gYXJyYXkgb2YgYXQgbW9zdCAod2lkdGgpIGludGVnZXJzIHRoYXQgc2hvdWxkIGJlIDAgPD0geCA8ICh3aWR0aCkuXHJcbi8vXHJcbi8vIFRoZSBnKGNvdW50KSBtZXRob2QgcmV0dXJucyBhIHBzZXVkb3JhbmRvbSBpbnRlZ2VyIHRoYXQgY29uY2F0ZW5hdGVzXHJcbi8vIHRoZSBuZXh0IChjb3VudCkgb3V0cHV0cyBmcm9tIEFSQzQuICBJdHMgcmV0dXJuIHZhbHVlIGlzIGEgbnVtYmVyIHhcclxuLy8gdGhhdCBpcyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgKHdpZHRoIF4gY291bnQpLlxyXG4vL1xyXG4vKiogQGNvbnN0cnVjdG9yICovXHJcbmZ1bmN0aW9uIEFSQzQoa2V5KSB7XHJcbiAgdmFyIHQsIGtleWxlbiA9IGtleS5sZW5ndGgsXHJcbiAgICAgIG1lID0gdGhpcywgaSA9IDAsIGogPSBtZS5pID0gbWUuaiA9IDAsIHMgPSBtZS5TID0gW107XHJcblxyXG4gIC8vIFRoZSBlbXB0eSBrZXkgW10gaXMgdHJlYXRlZCBhcyBbMF0uXHJcbiAgaWYgKCFrZXlsZW4pIHsga2V5ID0gW2tleWxlbisrXTsgfVxyXG5cclxuICAvLyBTZXQgdXAgUyB1c2luZyB0aGUgc3RhbmRhcmQga2V5IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxyXG4gIHdoaWxlIChpIDwgd2lkdGgpIHtcclxuICAgIHNbaV0gPSBpKys7XHJcbiAgfVxyXG4gIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7XHJcbiAgICBzW2ldID0gc1tqID0gbWFzayAmIChqICsga2V5W2kgJSBrZXlsZW5dICsgKHQgPSBzW2ldKSldO1xyXG4gICAgc1tqXSA9IHQ7XHJcbiAgfVxyXG5cclxuICAvLyBUaGUgXCJnXCIgbWV0aG9kIHJldHVybnMgdGhlIG5leHQgKGNvdW50KSBvdXRwdXRzIGFzIG9uZSBudW1iZXIuXHJcbiAgKG1lLmcgPSBmdW5jdGlvbihjb3VudCkge1xyXG4gICAgLy8gVXNpbmcgaW5zdGFuY2UgbWVtYmVycyBpbnN0ZWFkIG9mIGNsb3N1cmUgc3RhdGUgbmVhcmx5IGRvdWJsZXMgc3BlZWQuXHJcbiAgICB2YXIgdCwgciA9IDAsXHJcbiAgICAgICAgaSA9IG1lLmksIGogPSBtZS5qLCBzID0gbWUuUztcclxuICAgIHdoaWxlIChjb3VudC0tKSB7XHJcbiAgICAgIHQgPSBzW2kgPSBtYXNrICYgKGkgKyAxKV07XHJcbiAgICAgIHIgPSByICogd2lkdGggKyBzW21hc2sgJiAoKHNbaV0gPSBzW2ogPSBtYXNrICYgKGogKyB0KV0pICsgKHNbal0gPSB0KSldO1xyXG4gICAgfVxyXG4gICAgbWUuaSA9IGk7IG1lLmogPSBqO1xyXG4gICAgcmV0dXJuIHI7XHJcbiAgICAvLyBGb3Igcm9idXN0IHVucHJlZGljdGFiaWxpdHkgZGlzY2FyZCBhbiBpbml0aWFsIGJhdGNoIG9mIHZhbHVlcy5cclxuICAgIC8vIFNlZSBodHRwOi8vd3d3LnJzYS5jb20vcnNhbGFicy9ub2RlLmFzcD9pZD0yMDA5XHJcbiAgfSkod2lkdGgpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBmbGF0dGVuKClcclxuLy8gQ29udmVydHMgYW4gb2JqZWN0IHRyZWUgdG8gbmVzdGVkIGFycmF5cyBvZiBzdHJpbmdzLlxyXG4vL1xyXG5mdW5jdGlvbiBmbGF0dGVuKG9iaiwgZGVwdGgpIHtcclxuICB2YXIgcmVzdWx0ID0gW10sIHR5cCA9ICh0eXBlb2Ygb2JqKVswXSwgcHJvcDtcclxuICBpZiAoZGVwdGggJiYgdHlwID09ICdvJykge1xyXG4gICAgZm9yIChwcm9wIGluIG9iaikge1xyXG4gICAgICB0cnkgeyByZXN1bHQucHVzaChmbGF0dGVuKG9ialtwcm9wXSwgZGVwdGggLSAxKSk7IH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiAocmVzdWx0Lmxlbmd0aCA/IHJlc3VsdCA6IHR5cCA9PSAncycgPyBvYmogOiBvYmogKyAnXFwwJyk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIG1peGtleSgpXHJcbi8vIE1peGVzIGEgc3RyaW5nIHNlZWQgaW50byBhIGtleSB0aGF0IGlzIGFuIGFycmF5IG9mIGludGVnZXJzLCBhbmRcclxuLy8gcmV0dXJucyBhIHNob3J0ZW5lZCBzdHJpbmcgc2VlZCB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIHJlc3VsdCBrZXkuXHJcbi8vXHJcbmZ1bmN0aW9uIG1peGtleShzZWVkLCBrZXkpIHtcclxuICB2YXIgc3RyaW5nc2VlZCA9IHNlZWQgKyAnJywgc21lYXIsIGogPSAwO1xyXG4gIHdoaWxlIChqIDwgc3RyaW5nc2VlZC5sZW5ndGgpIHtcclxuICAgIGtleVttYXNrICYgal0gPVxyXG4gICAgICBtYXNrICYgKChzbWVhciBePSBrZXlbbWFzayAmIGpdICogMTkpICsgc3RyaW5nc2VlZC5jaGFyQ29kZUF0KGorKykpO1xyXG4gIH1cclxuICByZXR1cm4gdG9zdHJpbmcoa2V5KTtcclxufVxyXG5cclxuLy9cclxuLy8gYXV0b3NlZWQoKVxyXG4vLyBSZXR1cm5zIGFuIG9iamVjdCBmb3IgYXV0b3NlZWRpbmcsIHVzaW5nIHdpbmRvdy5jcnlwdG8gaWYgYXZhaWxhYmxlLlxyXG4vL1xyXG4vKiogQHBhcmFtIHtVaW50OEFycmF5PX0gc2VlZCAqL1xyXG5mdW5jdGlvbiBhdXRvc2VlZChzZWVkKSB7XHJcbiAgdHJ5IHtcclxuICAgIEdMT0JBTC5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHNlZWQgPSBuZXcgVWludDhBcnJheSh3aWR0aCkpO1xyXG4gICAgcmV0dXJuIHRvc3RyaW5nKHNlZWQpO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBbK25ldyBEYXRlLCBHTE9CQUwsIEdMT0JBTC5uYXZpZ2F0b3IgJiYgR0xPQkFMLm5hdmlnYXRvci5wbHVnaW5zLFxyXG4gICAgICAgICAgICBHTE9CQUwuc2NyZWVuLCB0b3N0cmluZyhwb29sKV07XHJcbiAgfVxyXG59XHJcblxyXG4vL1xyXG4vLyB0b3N0cmluZygpXHJcbi8vIENvbnZlcnRzIGFuIGFycmF5IG9mIGNoYXJjb2RlcyB0byBhIHN0cmluZ1xyXG4vL1xyXG5mdW5jdGlvbiB0b3N0cmluZyhhKSB7XHJcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoMCwgYSk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIFdoZW4gc2VlZHJhbmRvbS5qcyBpcyBsb2FkZWQsIHdlIGltbWVkaWF0ZWx5IG1peCBhIGZldyBiaXRzXHJcbi8vIGZyb20gdGhlIGJ1aWx0LWluIFJORyBpbnRvIHRoZSBlbnRyb3B5IHBvb2wuICBCZWNhdXNlIHdlIGRvXHJcbi8vIG5vdCB3YW50IHRvIGludGVmZXJlIHdpdGggZGV0ZXJtaW5zdGljIFBSTkcgc3RhdGUgbGF0ZXIsXHJcbi8vIHNlZWRyYW5kb20gd2lsbCBub3QgY2FsbCBNYXRoLnJhbmRvbSBvbiBpdHMgb3duIGFnYWluIGFmdGVyXHJcbi8vIGluaXRpYWxpemF0aW9uLlxyXG4vL1xyXG5taXhrZXkoTWF0aC5yYW5kb20oKSwgcG9vbCk7XHJcbiIsIi8qXG4gKiBBIGZhc3QgamF2YXNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiBzaW1wbGV4IG5vaXNlIGJ5IEpvbmFzIFdhZ25lclxuXG5CYXNlZCBvbiBhIHNwZWVkLWltcHJvdmVkIHNpbXBsZXggbm9pc2UgYWxnb3JpdGhtIGZvciAyRCwgM0QgYW5kIDREIGluIEphdmEuXG5XaGljaCBpcyBiYXNlZCBvbiBleGFtcGxlIGNvZGUgYnkgU3RlZmFuIEd1c3RhdnNvbiAoc3RlZ3VAaXRuLmxpdS5zZSkuXG5XaXRoIE9wdGltaXNhdGlvbnMgYnkgUGV0ZXIgRWFzdG1hbiAocGVhc3RtYW5AZHJpenpsZS5zdGFuZm9yZC5lZHUpLlxuQmV0dGVyIHJhbmsgb3JkZXJpbmcgbWV0aG9kIGJ5IFN0ZWZhbiBHdXN0YXZzb24gaW4gMjAxMi5cblxuXG4gQ29weXJpZ2h0IChjKSAyMDE4IEpvbmFzIFdhZ25lclxuXG4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gU09GVFdBUkUuXG4gKi9cbihmdW5jdGlvbigpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciBGMiA9IDAuNSAqIChNYXRoLnNxcnQoMy4wKSAtIDEuMCk7XG4gIHZhciBHMiA9ICgzLjAgLSBNYXRoLnNxcnQoMy4wKSkgLyA2LjA7XG4gIHZhciBGMyA9IDEuMCAvIDMuMDtcbiAgdmFyIEczID0gMS4wIC8gNi4wO1xuICB2YXIgRjQgPSAoTWF0aC5zcXJ0KDUuMCkgLSAxLjApIC8gNC4wO1xuICB2YXIgRzQgPSAoNS4wIC0gTWF0aC5zcXJ0KDUuMCkpIC8gMjAuMDtcblxuICBmdW5jdGlvbiBTaW1wbGV4Tm9pc2UocmFuZG9tT3JTZWVkKSB7XG4gICAgdmFyIHJhbmRvbTtcbiAgICBpZiAodHlwZW9mIHJhbmRvbU9yU2VlZCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByYW5kb20gPSByYW5kb21PclNlZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmRvbU9yU2VlZCkge1xuICAgICAgcmFuZG9tID0gYWxlYShyYW5kb21PclNlZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5kb20gPSBNYXRoLnJhbmRvbTtcbiAgICB9XG4gICAgdGhpcy5wID0gYnVpbGRQZXJtdXRhdGlvblRhYmxlKHJhbmRvbSk7XG4gICAgdGhpcy5wZXJtID0gbmV3IFVpbnQ4QXJyYXkoNTEyKTtcbiAgICB0aGlzLnBlcm1Nb2QxMiA9IG5ldyBVaW50OEFycmF5KDUxMik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MTI7IGkrKykge1xuICAgICAgdGhpcy5wZXJtW2ldID0gdGhpcy5wW2kgJiAyNTVdO1xuICAgICAgdGhpcy5wZXJtTW9kMTJbaV0gPSB0aGlzLnBlcm1baV0gJSAxMjtcbiAgICB9XG5cbiAgfVxuICBTaW1wbGV4Tm9pc2UucHJvdG90eXBlID0ge1xuICAgIGdyYWQzOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAxLCAwLFxuICAgICAgLTEsIDEsIDAsXG4gICAgICAxLCAtMSwgMCxcblxuICAgICAgLTEsIC0xLCAwLFxuICAgICAgMSwgMCwgMSxcbiAgICAgIC0xLCAwLCAxLFxuXG4gICAgICAxLCAwLCAtMSxcbiAgICAgIC0xLCAwLCAtMSxcbiAgICAgIDAsIDEsIDEsXG5cbiAgICAgIDAsIC0xLCAxLFxuICAgICAgMCwgMSwgLTEsXG4gICAgICAwLCAtMSwgLTFdKSxcbiAgICBncmFkNDogbmV3IEZsb2F0MzJBcnJheShbMCwgMSwgMSwgMSwgMCwgMSwgMSwgLTEsIDAsIDEsIC0xLCAxLCAwLCAxLCAtMSwgLTEsXG4gICAgICAwLCAtMSwgMSwgMSwgMCwgLTEsIDEsIC0xLCAwLCAtMSwgLTEsIDEsIDAsIC0xLCAtMSwgLTEsXG4gICAgICAxLCAwLCAxLCAxLCAxLCAwLCAxLCAtMSwgMSwgMCwgLTEsIDEsIDEsIDAsIC0xLCAtMSxcbiAgICAgIC0xLCAwLCAxLCAxLCAtMSwgMCwgMSwgLTEsIC0xLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSxcbiAgICAgIDEsIDEsIDAsIDEsIDEsIDEsIDAsIC0xLCAxLCAtMSwgMCwgMSwgMSwgLTEsIDAsIC0xLFxuICAgICAgLTEsIDEsIDAsIDEsIC0xLCAxLCAwLCAtMSwgLTEsIC0xLCAwLCAxLCAtMSwgLTEsIDAsIC0xLFxuICAgICAgMSwgMSwgMSwgMCwgMSwgMSwgLTEsIDAsIDEsIC0xLCAxLCAwLCAxLCAtMSwgLTEsIDAsXG4gICAgICAtMSwgMSwgMSwgMCwgLTEsIDEsIC0xLCAwLCAtMSwgLTEsIDEsIDAsIC0xLCAtMSwgLTEsIDBdKSxcbiAgICBub2lzZTJEOiBmdW5jdGlvbih4aW4sIHlpbikge1xuICAgICAgdmFyIHBlcm1Nb2QxMiA9IHRoaXMucGVybU1vZDEyO1xuICAgICAgdmFyIHBlcm0gPSB0aGlzLnBlcm07XG4gICAgICB2YXIgZ3JhZDMgPSB0aGlzLmdyYWQzO1xuICAgICAgdmFyIG4wID0gMDsgLy8gTm9pc2UgY29udHJpYnV0aW9ucyBmcm9tIHRoZSB0aHJlZSBjb3JuZXJzXG4gICAgICB2YXIgbjEgPSAwO1xuICAgICAgdmFyIG4yID0gMDtcbiAgICAgIC8vIFNrZXcgdGhlIGlucHV0IHNwYWNlIHRvIGRldGVybWluZSB3aGljaCBzaW1wbGV4IGNlbGwgd2UncmUgaW5cbiAgICAgIHZhciBzID0gKHhpbiArIHlpbikgKiBGMjsgLy8gSGFpcnkgZmFjdG9yIGZvciAyRFxuICAgICAgdmFyIGkgPSBNYXRoLmZsb29yKHhpbiArIHMpO1xuICAgICAgdmFyIGogPSBNYXRoLmZsb29yKHlpbiArIHMpO1xuICAgICAgdmFyIHQgPSAoaSArIGopICogRzI7XG4gICAgICB2YXIgWDAgPSBpIC0gdDsgLy8gVW5za2V3IHRoZSBjZWxsIG9yaWdpbiBiYWNrIHRvICh4LHkpIHNwYWNlXG4gICAgICB2YXIgWTAgPSBqIC0gdDtcbiAgICAgIHZhciB4MCA9IHhpbiAtIFgwOyAvLyBUaGUgeCx5IGRpc3RhbmNlcyBmcm9tIHRoZSBjZWxsIG9yaWdpblxuICAgICAgdmFyIHkwID0geWluIC0gWTA7XG4gICAgICAvLyBGb3IgdGhlIDJEIGNhc2UsIHRoZSBzaW1wbGV4IHNoYXBlIGlzIGFuIGVxdWlsYXRlcmFsIHRyaWFuZ2xlLlxuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggd2UgYXJlIGluLlxuICAgICAgdmFyIGkxLCBqMTsgLy8gT2Zmc2V0cyBmb3Igc2Vjb25kIChtaWRkbGUpIGNvcm5lciBvZiBzaW1wbGV4IGluIChpLGopIGNvb3Jkc1xuICAgICAgaWYgKHgwID4geTApIHtcbiAgICAgICAgaTEgPSAxO1xuICAgICAgICBqMSA9IDA7XG4gICAgICB9IC8vIGxvd2VyIHRyaWFuZ2xlLCBYWSBvcmRlcjogKDAsMCktPigxLDApLT4oMSwxKVxuICAgICAgZWxzZSB7XG4gICAgICAgIGkxID0gMDtcbiAgICAgICAgajEgPSAxO1xuICAgICAgfSAvLyB1cHBlciB0cmlhbmdsZSwgWVggb3JkZXI6ICgwLDApLT4oMCwxKS0+KDEsMSlcbiAgICAgIC8vIEEgc3RlcCBvZiAoMSwwKSBpbiAoaSxqKSBtZWFucyBhIHN0ZXAgb2YgKDEtYywtYykgaW4gKHgseSksIGFuZFxuICAgICAgLy8gYSBzdGVwIG9mICgwLDEpIGluIChpLGopIG1lYW5zIGEgc3RlcCBvZiAoLWMsMS1jKSBpbiAoeCx5KSwgd2hlcmVcbiAgICAgIC8vIGMgPSAoMy1zcXJ0KDMpKS82XG4gICAgICB2YXIgeDEgPSB4MCAtIGkxICsgRzI7IC8vIE9mZnNldHMgZm9yIG1pZGRsZSBjb3JuZXIgaW4gKHgseSkgdW5za2V3ZWQgY29vcmRzXG4gICAgICB2YXIgeTEgPSB5MCAtIGoxICsgRzI7XG4gICAgICB2YXIgeDIgPSB4MCAtIDEuMCArIDIuMCAqIEcyOyAvLyBPZmZzZXRzIGZvciBsYXN0IGNvcm5lciBpbiAoeCx5KSB1bnNrZXdlZCBjb29yZHNcbiAgICAgIHZhciB5MiA9IHkwIC0gMS4wICsgMi4wICogRzI7XG4gICAgICAvLyBXb3JrIG91dCB0aGUgaGFzaGVkIGdyYWRpZW50IGluZGljZXMgb2YgdGhlIHRocmVlIHNpbXBsZXggY29ybmVyc1xuICAgICAgdmFyIGlpID0gaSAmIDI1NTtcbiAgICAgIHZhciBqaiA9IGogJiAyNTU7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSB0aHJlZSBjb3JuZXJzXG4gICAgICB2YXIgdDAgPSAwLjUgLSB4MCAqIHgwIC0geTAgKiB5MDtcbiAgICAgIGlmICh0MCA+PSAwKSB7XG4gICAgICAgIHZhciBnaTAgPSBwZXJtTW9kMTJbaWkgKyBwZXJtW2pqXV0gKiAzO1xuICAgICAgICB0MCAqPSB0MDtcbiAgICAgICAgbjAgPSB0MCAqIHQwICogKGdyYWQzW2dpMF0gKiB4MCArIGdyYWQzW2dpMCArIDFdICogeTApOyAvLyAoeCx5KSBvZiBncmFkMyB1c2VkIGZvciAyRCBncmFkaWVudFxuICAgICAgfVxuICAgICAgdmFyIHQxID0gMC41IC0geDEgKiB4MSAtIHkxICogeTE7XG4gICAgICBpZiAodDEgPj0gMCkge1xuICAgICAgICB2YXIgZ2kxID0gcGVybU1vZDEyW2lpICsgaTEgKyBwZXJtW2pqICsgajFdXSAqIDM7XG4gICAgICAgIHQxICo9IHQxO1xuICAgICAgICBuMSA9IHQxICogdDEgKiAoZ3JhZDNbZ2kxXSAqIHgxICsgZ3JhZDNbZ2kxICsgMV0gKiB5MSk7XG4gICAgICB9XG4gICAgICB2YXIgdDIgPSAwLjUgLSB4MiAqIHgyIC0geTIgKiB5MjtcbiAgICAgIGlmICh0MiA+PSAwKSB7XG4gICAgICAgIHZhciBnaTIgPSBwZXJtTW9kMTJbaWkgKyAxICsgcGVybVtqaiArIDFdXSAqIDM7XG4gICAgICAgIHQyICo9IHQyO1xuICAgICAgICBuMiA9IHQyICogdDIgKiAoZ3JhZDNbZ2kyXSAqIHgyICsgZ3JhZDNbZ2kyICsgMV0gKiB5Mik7XG4gICAgICB9XG4gICAgICAvLyBBZGQgY29udHJpYnV0aW9ucyBmcm9tIGVhY2ggY29ybmVyIHRvIGdldCB0aGUgZmluYWwgbm9pc2UgdmFsdWUuXG4gICAgICAvLyBUaGUgcmVzdWx0IGlzIHNjYWxlZCB0byByZXR1cm4gdmFsdWVzIGluIHRoZSBpbnRlcnZhbCBbLTEsMV0uXG4gICAgICByZXR1cm4gNzAuMCAqIChuMCArIG4xICsgbjIpO1xuICAgIH0sXG4gICAgLy8gM0Qgc2ltcGxleCBub2lzZVxuICAgIG5vaXNlM0Q6IGZ1bmN0aW9uKHhpbiwgeWluLCB6aW4pIHtcbiAgICAgIHZhciBwZXJtTW9kMTIgPSB0aGlzLnBlcm1Nb2QxMjtcbiAgICAgIHZhciBwZXJtID0gdGhpcy5wZXJtO1xuICAgICAgdmFyIGdyYWQzID0gdGhpcy5ncmFkMztcbiAgICAgIHZhciBuMCwgbjEsIG4yLCBuMzsgLy8gTm9pc2UgY29udHJpYnV0aW9ucyBmcm9tIHRoZSBmb3VyIGNvcm5lcnNcbiAgICAgIC8vIFNrZXcgdGhlIGlucHV0IHNwYWNlIHRvIGRldGVybWluZSB3aGljaCBzaW1wbGV4IGNlbGwgd2UncmUgaW5cbiAgICAgIHZhciBzID0gKHhpbiArIHlpbiArIHppbikgKiBGMzsgLy8gVmVyeSBuaWNlIGFuZCBzaW1wbGUgc2tldyBmYWN0b3IgZm9yIDNEXG4gICAgICB2YXIgaSA9IE1hdGguZmxvb3IoeGluICsgcyk7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3IoeWluICsgcyk7XG4gICAgICB2YXIgayA9IE1hdGguZmxvb3IoemluICsgcyk7XG4gICAgICB2YXIgdCA9IChpICsgaiArIGspICogRzM7XG4gICAgICB2YXIgWDAgPSBpIC0gdDsgLy8gVW5za2V3IHRoZSBjZWxsIG9yaWdpbiBiYWNrIHRvICh4LHkseikgc3BhY2VcbiAgICAgIHZhciBZMCA9IGogLSB0O1xuICAgICAgdmFyIFowID0gayAtIHQ7XG4gICAgICB2YXIgeDAgPSB4aW4gLSBYMDsgLy8gVGhlIHgseSx6IGRpc3RhbmNlcyBmcm9tIHRoZSBjZWxsIG9yaWdpblxuICAgICAgdmFyIHkwID0geWluIC0gWTA7XG4gICAgICB2YXIgejAgPSB6aW4gLSBaMDtcbiAgICAgIC8vIEZvciB0aGUgM0QgY2FzZSwgdGhlIHNpbXBsZXggc2hhcGUgaXMgYSBzbGlnaHRseSBpcnJlZ3VsYXIgdGV0cmFoZWRyb24uXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggc2ltcGxleCB3ZSBhcmUgaW4uXG4gICAgICB2YXIgaTEsIGoxLCBrMTsgLy8gT2Zmc2V0cyBmb3Igc2Vjb25kIGNvcm5lciBvZiBzaW1wbGV4IGluIChpLGosaykgY29vcmRzXG4gICAgICB2YXIgaTIsIGoyLCBrMjsgLy8gT2Zmc2V0cyBmb3IgdGhpcmQgY29ybmVyIG9mIHNpbXBsZXggaW4gKGksaixrKSBjb29yZHNcbiAgICAgIGlmICh4MCA+PSB5MCkge1xuICAgICAgICBpZiAoeTAgPj0gejApIHtcbiAgICAgICAgICBpMSA9IDE7XG4gICAgICAgICAgajEgPSAwO1xuICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICBpMiA9IDE7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMDtcbiAgICAgICAgfSAvLyBYIFkgWiBvcmRlclxuICAgICAgICBlbHNlIGlmICh4MCA+PSB6MCkge1xuICAgICAgICAgIGkxID0gMTtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAwO1xuICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICBqMiA9IDA7XG4gICAgICAgICAgazIgPSAxO1xuICAgICAgICB9IC8vIFggWiBZIG9yZGVyXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGkxID0gMDtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAxO1xuICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICBqMiA9IDA7XG4gICAgICAgICAgazIgPSAxO1xuICAgICAgICB9IC8vIFogWCBZIG9yZGVyXG4gICAgICB9XG4gICAgICBlbHNlIHsgLy8geDA8eTBcbiAgICAgICAgaWYgKHkwIDwgejApIHtcbiAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgajEgPSAwO1xuICAgICAgICAgIGsxID0gMTtcbiAgICAgICAgICBpMiA9IDA7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMTtcbiAgICAgICAgfSAvLyBaIFkgWCBvcmRlclxuICAgICAgICBlbHNlIGlmICh4MCA8IHowKSB7XG4gICAgICAgICAgaTEgPSAwO1xuICAgICAgICAgIGoxID0gMTtcbiAgICAgICAgICBrMSA9IDA7XG4gICAgICAgICAgaTIgPSAwO1xuICAgICAgICAgIGoyID0gMTtcbiAgICAgICAgICBrMiA9IDE7XG4gICAgICAgIH0gLy8gWSBaIFggb3JkZXJcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaTEgPSAwO1xuICAgICAgICAgIGoxID0gMTtcbiAgICAgICAgICBrMSA9IDA7XG4gICAgICAgICAgaTIgPSAxO1xuICAgICAgICAgIGoyID0gMTtcbiAgICAgICAgICBrMiA9IDA7XG4gICAgICAgIH0gLy8gWSBYIFogb3JkZXJcbiAgICAgIH1cbiAgICAgIC8vIEEgc3RlcCBvZiAoMSwwLDApIGluIChpLGosaykgbWVhbnMgYSBzdGVwIG9mICgxLWMsLWMsLWMpIGluICh4LHkseiksXG4gICAgICAvLyBhIHN0ZXAgb2YgKDAsMSwwKSBpbiAoaSxqLGspIG1lYW5zIGEgc3RlcCBvZiAoLWMsMS1jLC1jKSBpbiAoeCx5LHopLCBhbmRcbiAgICAgIC8vIGEgc3RlcCBvZiAoMCwwLDEpIGluIChpLGosaykgbWVhbnMgYSBzdGVwIG9mICgtYywtYywxLWMpIGluICh4LHkseiksIHdoZXJlXG4gICAgICAvLyBjID0gMS82LlxuICAgICAgdmFyIHgxID0geDAgLSBpMSArIEczOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgY29ybmVyIGluICh4LHkseikgY29vcmRzXG4gICAgICB2YXIgeTEgPSB5MCAtIGoxICsgRzM7XG4gICAgICB2YXIgejEgPSB6MCAtIGsxICsgRzM7XG4gICAgICB2YXIgeDIgPSB4MCAtIGkyICsgMi4wICogRzM7IC8vIE9mZnNldHMgZm9yIHRoaXJkIGNvcm5lciBpbiAoeCx5LHopIGNvb3Jkc1xuICAgICAgdmFyIHkyID0geTAgLSBqMiArIDIuMCAqIEczO1xuICAgICAgdmFyIHoyID0gejAgLSBrMiArIDIuMCAqIEczO1xuICAgICAgdmFyIHgzID0geDAgLSAxLjAgKyAzLjAgKiBHMzsgLy8gT2Zmc2V0cyBmb3IgbGFzdCBjb3JuZXIgaW4gKHgseSx6KSBjb29yZHNcbiAgICAgIHZhciB5MyA9IHkwIC0gMS4wICsgMy4wICogRzM7XG4gICAgICB2YXIgejMgPSB6MCAtIDEuMCArIDMuMCAqIEczO1xuICAgICAgLy8gV29yayBvdXQgdGhlIGhhc2hlZCBncmFkaWVudCBpbmRpY2VzIG9mIHRoZSBmb3VyIHNpbXBsZXggY29ybmVyc1xuICAgICAgdmFyIGlpID0gaSAmIDI1NTtcbiAgICAgIHZhciBqaiA9IGogJiAyNTU7XG4gICAgICB2YXIga2sgPSBrICYgMjU1O1xuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjb250cmlidXRpb24gZnJvbSB0aGUgZm91ciBjb3JuZXJzXG4gICAgICB2YXIgdDAgPSAwLjYgLSB4MCAqIHgwIC0geTAgKiB5MCAtIHowICogejA7XG4gICAgICBpZiAodDAgPCAwKSBuMCA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kwID0gcGVybU1vZDEyW2lpICsgcGVybVtqaiArIHBlcm1ba2tdXV0gKiAzO1xuICAgICAgICB0MCAqPSB0MDtcbiAgICAgICAgbjAgPSB0MCAqIHQwICogKGdyYWQzW2dpMF0gKiB4MCArIGdyYWQzW2dpMCArIDFdICogeTAgKyBncmFkM1tnaTAgKyAyXSAqIHowKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MSA9IDAuNiAtIHgxICogeDEgLSB5MSAqIHkxIC0gejEgKiB6MTtcbiAgICAgIGlmICh0MSA8IDApIG4xID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTEgPSBwZXJtTW9kMTJbaWkgKyBpMSArIHBlcm1bamogKyBqMSArIHBlcm1ba2sgKyBrMV1dXSAqIDM7XG4gICAgICAgIHQxICo9IHQxO1xuICAgICAgICBuMSA9IHQxICogdDEgKiAoZ3JhZDNbZ2kxXSAqIHgxICsgZ3JhZDNbZ2kxICsgMV0gKiB5MSArIGdyYWQzW2dpMSArIDJdICogejEpO1xuICAgICAgfVxuICAgICAgdmFyIHQyID0gMC42IC0geDIgKiB4MiAtIHkyICogeTIgLSB6MiAqIHoyO1xuICAgICAgaWYgKHQyIDwgMCkgbjIgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMiA9IHBlcm1Nb2QxMltpaSArIGkyICsgcGVybVtqaiArIGoyICsgcGVybVtrayArIGsyXV1dICogMztcbiAgICAgICAgdDIgKj0gdDI7XG4gICAgICAgIG4yID0gdDIgKiB0MiAqIChncmFkM1tnaTJdICogeDIgKyBncmFkM1tnaTIgKyAxXSAqIHkyICsgZ3JhZDNbZ2kyICsgMl0gKiB6Mik7XG4gICAgICB9XG4gICAgICB2YXIgdDMgPSAwLjYgLSB4MyAqIHgzIC0geTMgKiB5MyAtIHozICogejM7XG4gICAgICBpZiAodDMgPCAwKSBuMyA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kzID0gcGVybU1vZDEyW2lpICsgMSArIHBlcm1bamogKyAxICsgcGVybVtrayArIDFdXV0gKiAzO1xuICAgICAgICB0MyAqPSB0MztcbiAgICAgICAgbjMgPSB0MyAqIHQzICogKGdyYWQzW2dpM10gKiB4MyArIGdyYWQzW2dpMyArIDFdICogeTMgKyBncmFkM1tnaTMgKyAyXSAqIHozKTtcbiAgICAgIH1cbiAgICAgIC8vIEFkZCBjb250cmlidXRpb25zIGZyb20gZWFjaCBjb3JuZXIgdG8gZ2V0IHRoZSBmaW5hbCBub2lzZSB2YWx1ZS5cbiAgICAgIC8vIFRoZSByZXN1bHQgaXMgc2NhbGVkIHRvIHN0YXkganVzdCBpbnNpZGUgWy0xLDFdXG4gICAgICByZXR1cm4gMzIuMCAqIChuMCArIG4xICsgbjIgKyBuMyk7XG4gICAgfSxcbiAgICAvLyA0RCBzaW1wbGV4IG5vaXNlLCBiZXR0ZXIgc2ltcGxleCByYW5rIG9yZGVyaW5nIG1ldGhvZCAyMDEyLTAzLTA5XG4gICAgbm9pc2U0RDogZnVuY3Rpb24oeCwgeSwgeiwgdykge1xuICAgICAgdmFyIHBlcm0gPSB0aGlzLnBlcm07XG4gICAgICB2YXIgZ3JhZDQgPSB0aGlzLmdyYWQ0O1xuXG4gICAgICB2YXIgbjAsIG4xLCBuMiwgbjMsIG40OyAvLyBOb2lzZSBjb250cmlidXRpb25zIGZyb20gdGhlIGZpdmUgY29ybmVyc1xuICAgICAgLy8gU2tldyB0aGUgKHgseSx6LHcpIHNwYWNlIHRvIGRldGVybWluZSB3aGljaCBjZWxsIG9mIDI0IHNpbXBsaWNlcyB3ZSdyZSBpblxuICAgICAgdmFyIHMgPSAoeCArIHkgKyB6ICsgdykgKiBGNDsgLy8gRmFjdG9yIGZvciA0RCBza2V3aW5nXG4gICAgICB2YXIgaSA9IE1hdGguZmxvb3IoeCArIHMpO1xuICAgICAgdmFyIGogPSBNYXRoLmZsb29yKHkgKyBzKTtcbiAgICAgIHZhciBrID0gTWF0aC5mbG9vcih6ICsgcyk7XG4gICAgICB2YXIgbCA9IE1hdGguZmxvb3IodyArIHMpO1xuICAgICAgdmFyIHQgPSAoaSArIGogKyBrICsgbCkgKiBHNDsgLy8gRmFjdG9yIGZvciA0RCB1bnNrZXdpbmdcbiAgICAgIHZhciBYMCA9IGkgLSB0OyAvLyBVbnNrZXcgdGhlIGNlbGwgb3JpZ2luIGJhY2sgdG8gKHgseSx6LHcpIHNwYWNlXG4gICAgICB2YXIgWTAgPSBqIC0gdDtcbiAgICAgIHZhciBaMCA9IGsgLSB0O1xuICAgICAgdmFyIFcwID0gbCAtIHQ7XG4gICAgICB2YXIgeDAgPSB4IC0gWDA7IC8vIFRoZSB4LHkseix3IGRpc3RhbmNlcyBmcm9tIHRoZSBjZWxsIG9yaWdpblxuICAgICAgdmFyIHkwID0geSAtIFkwO1xuICAgICAgdmFyIHowID0geiAtIFowO1xuICAgICAgdmFyIHcwID0gdyAtIFcwO1xuICAgICAgLy8gRm9yIHRoZSA0RCBjYXNlLCB0aGUgc2ltcGxleCBpcyBhIDREIHNoYXBlIEkgd29uJ3QgZXZlbiB0cnkgdG8gZGVzY3JpYmUuXG4gICAgICAvLyBUbyBmaW5kIG91dCB3aGljaCBvZiB0aGUgMjQgcG9zc2libGUgc2ltcGxpY2VzIHdlJ3JlIGluLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBkZXRlcm1pbmUgdGhlIG1hZ25pdHVkZSBvcmRlcmluZyBvZiB4MCwgeTAsIHowIGFuZCB3MC5cbiAgICAgIC8vIFNpeCBwYWlyLXdpc2UgY29tcGFyaXNvbnMgYXJlIHBlcmZvcm1lZCBiZXR3ZWVuIGVhY2ggcG9zc2libGUgcGFpclxuICAgICAgLy8gb2YgdGhlIGZvdXIgY29vcmRpbmF0ZXMsIGFuZCB0aGUgcmVzdWx0cyBhcmUgdXNlZCB0byByYW5rIHRoZSBudW1iZXJzLlxuICAgICAgdmFyIHJhbmt4ID0gMDtcbiAgICAgIHZhciByYW5reSA9IDA7XG4gICAgICB2YXIgcmFua3ogPSAwO1xuICAgICAgdmFyIHJhbmt3ID0gMDtcbiAgICAgIGlmICh4MCA+IHkwKSByYW5reCsrO1xuICAgICAgZWxzZSByYW5reSsrO1xuICAgICAgaWYgKHgwID4gejApIHJhbmt4Kys7XG4gICAgICBlbHNlIHJhbmt6Kys7XG4gICAgICBpZiAoeDAgPiB3MCkgcmFua3grKztcbiAgICAgIGVsc2UgcmFua3crKztcbiAgICAgIGlmICh5MCA+IHowKSByYW5reSsrO1xuICAgICAgZWxzZSByYW5reisrO1xuICAgICAgaWYgKHkwID4gdzApIHJhbmt5Kys7XG4gICAgICBlbHNlIHJhbmt3Kys7XG4gICAgICBpZiAoejAgPiB3MCkgcmFua3orKztcbiAgICAgIGVsc2UgcmFua3crKztcbiAgICAgIHZhciBpMSwgajEsIGsxLCBsMTsgLy8gVGhlIGludGVnZXIgb2Zmc2V0cyBmb3IgdGhlIHNlY29uZCBzaW1wbGV4IGNvcm5lclxuICAgICAgdmFyIGkyLCBqMiwgazIsIGwyOyAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgdGhpcmQgc2ltcGxleCBjb3JuZXJcbiAgICAgIHZhciBpMywgajMsIGszLCBsMzsgLy8gVGhlIGludGVnZXIgb2Zmc2V0cyBmb3IgdGhlIGZvdXJ0aCBzaW1wbGV4IGNvcm5lclxuICAgICAgLy8gc2ltcGxleFtjXSBpcyBhIDQtdmVjdG9yIHdpdGggdGhlIG51bWJlcnMgMCwgMSwgMiBhbmQgMyBpbiBzb21lIG9yZGVyLlxuICAgICAgLy8gTWFueSB2YWx1ZXMgb2YgYyB3aWxsIG5ldmVyIG9jY3VyLCBzaW5jZSBlLmcuIHg+eT56PncgbWFrZXMgeDx6LCB5PHcgYW5kIHg8d1xuICAgICAgLy8gaW1wb3NzaWJsZS4gT25seSB0aGUgMjQgaW5kaWNlcyB3aGljaCBoYXZlIG5vbi16ZXJvIGVudHJpZXMgbWFrZSBhbnkgc2Vuc2UuXG4gICAgICAvLyBXZSB1c2UgYSB0aHJlc2hvbGRpbmcgdG8gc2V0IHRoZSBjb29yZGluYXRlcyBpbiB0dXJuIGZyb20gdGhlIGxhcmdlc3QgbWFnbml0dWRlLlxuICAgICAgLy8gUmFuayAzIGRlbm90ZXMgdGhlIGxhcmdlc3QgY29vcmRpbmF0ZS5cbiAgICAgIGkxID0gcmFua3ggPj0gMyA/IDEgOiAwO1xuICAgICAgajEgPSByYW5reSA+PSAzID8gMSA6IDA7XG4gICAgICBrMSA9IHJhbmt6ID49IDMgPyAxIDogMDtcbiAgICAgIGwxID0gcmFua3cgPj0gMyA/IDEgOiAwO1xuICAgICAgLy8gUmFuayAyIGRlbm90ZXMgdGhlIHNlY29uZCBsYXJnZXN0IGNvb3JkaW5hdGUuXG4gICAgICBpMiA9IHJhbmt4ID49IDIgPyAxIDogMDtcbiAgICAgIGoyID0gcmFua3kgPj0gMiA/IDEgOiAwO1xuICAgICAgazIgPSByYW5reiA+PSAyID8gMSA6IDA7XG4gICAgICBsMiA9IHJhbmt3ID49IDIgPyAxIDogMDtcbiAgICAgIC8vIFJhbmsgMSBkZW5vdGVzIHRoZSBzZWNvbmQgc21hbGxlc3QgY29vcmRpbmF0ZS5cbiAgICAgIGkzID0gcmFua3ggPj0gMSA/IDEgOiAwO1xuICAgICAgajMgPSByYW5reSA+PSAxID8gMSA6IDA7XG4gICAgICBrMyA9IHJhbmt6ID49IDEgPyAxIDogMDtcbiAgICAgIGwzID0gcmFua3cgPj0gMSA/IDEgOiAwO1xuICAgICAgLy8gVGhlIGZpZnRoIGNvcm5lciBoYXMgYWxsIGNvb3JkaW5hdGUgb2Zmc2V0cyA9IDEsIHNvIG5vIG5lZWQgdG8gY29tcHV0ZSB0aGF0LlxuICAgICAgdmFyIHgxID0geDAgLSBpMSArIEc0OyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5MSA9IHkwIC0gajEgKyBHNDtcbiAgICAgIHZhciB6MSA9IHowIC0gazEgKyBHNDtcbiAgICAgIHZhciB3MSA9IHcwIC0gbDEgKyBHNDtcbiAgICAgIHZhciB4MiA9IHgwIC0gaTIgKyAyLjAgKiBHNDsgLy8gT2Zmc2V0cyBmb3IgdGhpcmQgY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5MiA9IHkwIC0gajIgKyAyLjAgKiBHNDtcbiAgICAgIHZhciB6MiA9IHowIC0gazIgKyAyLjAgKiBHNDtcbiAgICAgIHZhciB3MiA9IHcwIC0gbDIgKyAyLjAgKiBHNDtcbiAgICAgIHZhciB4MyA9IHgwIC0gaTMgKyAzLjAgKiBHNDsgLy8gT2Zmc2V0cyBmb3IgZm91cnRoIGNvcm5lciBpbiAoeCx5LHosdykgY29vcmRzXG4gICAgICB2YXIgeTMgPSB5MCAtIGozICsgMy4wICogRzQ7XG4gICAgICB2YXIgejMgPSB6MCAtIGszICsgMy4wICogRzQ7XG4gICAgICB2YXIgdzMgPSB3MCAtIGwzICsgMy4wICogRzQ7XG4gICAgICB2YXIgeDQgPSB4MCAtIDEuMCArIDQuMCAqIEc0OyAvLyBPZmZzZXRzIGZvciBsYXN0IGNvcm5lciBpbiAoeCx5LHosdykgY29vcmRzXG4gICAgICB2YXIgeTQgPSB5MCAtIDEuMCArIDQuMCAqIEc0O1xuICAgICAgdmFyIHo0ID0gejAgLSAxLjAgKyA0LjAgKiBHNDtcbiAgICAgIHZhciB3NCA9IHcwIC0gMS4wICsgNC4wICogRzQ7XG4gICAgICAvLyBXb3JrIG91dCB0aGUgaGFzaGVkIGdyYWRpZW50IGluZGljZXMgb2YgdGhlIGZpdmUgc2ltcGxleCBjb3JuZXJzXG4gICAgICB2YXIgaWkgPSBpICYgMjU1O1xuICAgICAgdmFyIGpqID0gaiAmIDI1NTtcbiAgICAgIHZhciBrayA9IGsgJiAyNTU7XG4gICAgICB2YXIgbGwgPSBsICYgMjU1O1xuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjb250cmlidXRpb24gZnJvbSB0aGUgZml2ZSBjb3JuZXJzXG4gICAgICB2YXIgdDAgPSAwLjYgLSB4MCAqIHgwIC0geTAgKiB5MCAtIHowICogejAgLSB3MCAqIHcwO1xuICAgICAgaWYgKHQwIDwgMCkgbjAgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMCA9IChwZXJtW2lpICsgcGVybVtqaiArIHBlcm1ba2sgKyBwZXJtW2xsXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQwICo9IHQwO1xuICAgICAgICBuMCA9IHQwICogdDAgKiAoZ3JhZDRbZ2kwXSAqIHgwICsgZ3JhZDRbZ2kwICsgMV0gKiB5MCArIGdyYWQ0W2dpMCArIDJdICogejAgKyBncmFkNFtnaTAgKyAzXSAqIHcwKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MSA9IDAuNiAtIHgxICogeDEgLSB5MSAqIHkxIC0gejEgKiB6MSAtIHcxICogdzE7XG4gICAgICBpZiAodDEgPCAwKSBuMSA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kxID0gKHBlcm1baWkgKyBpMSArIHBlcm1bamogKyBqMSArIHBlcm1ba2sgKyBrMSArIHBlcm1bbGwgKyBsMV1dXV0gJSAzMikgKiA0O1xuICAgICAgICB0MSAqPSB0MTtcbiAgICAgICAgbjEgPSB0MSAqIHQxICogKGdyYWQ0W2dpMV0gKiB4MSArIGdyYWQ0W2dpMSArIDFdICogeTEgKyBncmFkNFtnaTEgKyAyXSAqIHoxICsgZ3JhZDRbZ2kxICsgM10gKiB3MSk7XG4gICAgICB9XG4gICAgICB2YXIgdDIgPSAwLjYgLSB4MiAqIHgyIC0geTIgKiB5MiAtIHoyICogejIgLSB3MiAqIHcyO1xuICAgICAgaWYgKHQyIDwgMCkgbjIgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMiA9IChwZXJtW2lpICsgaTIgKyBwZXJtW2pqICsgajIgKyBwZXJtW2trICsgazIgKyBwZXJtW2xsICsgbDJdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDIgKj0gdDI7XG4gICAgICAgIG4yID0gdDIgKiB0MiAqIChncmFkNFtnaTJdICogeDIgKyBncmFkNFtnaTIgKyAxXSAqIHkyICsgZ3JhZDRbZ2kyICsgMl0gKiB6MiArIGdyYWQ0W2dpMiArIDNdICogdzIpO1xuICAgICAgfVxuICAgICAgdmFyIHQzID0gMC42IC0geDMgKiB4MyAtIHkzICogeTMgLSB6MyAqIHozIC0gdzMgKiB3MztcbiAgICAgIGlmICh0MyA8IDApIG4zID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTMgPSAocGVybVtpaSArIGkzICsgcGVybVtqaiArIGozICsgcGVybVtrayArIGszICsgcGVybVtsbCArIGwzXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQzICo9IHQzO1xuICAgICAgICBuMyA9IHQzICogdDMgKiAoZ3JhZDRbZ2kzXSAqIHgzICsgZ3JhZDRbZ2kzICsgMV0gKiB5MyArIGdyYWQ0W2dpMyArIDJdICogejMgKyBncmFkNFtnaTMgKyAzXSAqIHczKTtcbiAgICAgIH1cbiAgICAgIHZhciB0NCA9IDAuNiAtIHg0ICogeDQgLSB5NCAqIHk0IC0gejQgKiB6NCAtIHc0ICogdzQ7XG4gICAgICBpZiAodDQgPCAwKSBuNCA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2k0ID0gKHBlcm1baWkgKyAxICsgcGVybVtqaiArIDEgKyBwZXJtW2trICsgMSArIHBlcm1bbGwgKyAxXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQ0ICo9IHQ0O1xuICAgICAgICBuNCA9IHQ0ICogdDQgKiAoZ3JhZDRbZ2k0XSAqIHg0ICsgZ3JhZDRbZ2k0ICsgMV0gKiB5NCArIGdyYWQ0W2dpNCArIDJdICogejQgKyBncmFkNFtnaTQgKyAzXSAqIHc0KTtcbiAgICAgIH1cbiAgICAgIC8vIFN1bSB1cCBhbmQgc2NhbGUgdGhlIHJlc3VsdCB0byBjb3ZlciB0aGUgcmFuZ2UgWy0xLDFdXG4gICAgICByZXR1cm4gMjcuMCAqIChuMCArIG4xICsgbjIgKyBuMyArIG40KTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gYnVpbGRQZXJtdXRhdGlvblRhYmxlKHJhbmRvbSkge1xuICAgIHZhciBpO1xuICAgIHZhciBwID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICAgIHBbaV0gPSBpO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspIHtcbiAgICAgIHZhciByID0gaSArIH5+KHJhbmRvbSgpICogKDI1NiAtIGkpKTtcbiAgICAgIHZhciBhdXggPSBwW2ldO1xuICAgICAgcFtpXSA9IHBbcl07XG4gICAgICBwW3JdID0gYXV4O1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfVxuICBTaW1wbGV4Tm9pc2UuX2J1aWxkUGVybXV0YXRpb25UYWJsZSA9IGJ1aWxkUGVybXV0YXRpb25UYWJsZTtcblxuICBmdW5jdGlvbiBhbGVhKCkge1xuICAgIC8vIEpvaGFubmVzIEJhYWfDuGUgPGJhYWdvZUBiYWFnb2UuY29tPiwgMjAxMFxuICAgIHZhciBzMCA9IDA7XG4gICAgdmFyIHMxID0gMDtcbiAgICB2YXIgczIgPSAwO1xuICAgIHZhciBjID0gMTtcblxuICAgIHZhciBtYXNoID0gbWFzaGVyKCk7XG4gICAgczAgPSBtYXNoKCcgJyk7XG4gICAgczEgPSBtYXNoKCcgJyk7XG4gICAgczIgPSBtYXNoKCcgJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgczAgLT0gbWFzaChhcmd1bWVudHNbaV0pO1xuICAgICAgaWYgKHMwIDwgMCkge1xuICAgICAgICBzMCArPSAxO1xuICAgICAgfVxuICAgICAgczEgLT0gbWFzaChhcmd1bWVudHNbaV0pO1xuICAgICAgaWYgKHMxIDwgMCkge1xuICAgICAgICBzMSArPSAxO1xuICAgICAgfVxuICAgICAgczIgLT0gbWFzaChhcmd1bWVudHNbaV0pO1xuICAgICAgaWYgKHMyIDwgMCkge1xuICAgICAgICBzMiArPSAxO1xuICAgICAgfVxuICAgIH1cbiAgICBtYXNoID0gbnVsbDtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdCA9IDIwOTE2MzkgKiBzMCArIGMgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxuICAgICAgczAgPSBzMTtcbiAgICAgIHMxID0gczI7XG4gICAgICByZXR1cm4gczIgPSB0IC0gKGMgPSB0IHwgMCk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXNoZXIoKSB7XG4gICAgdmFyIG4gPSAweGVmYzgyNDlkO1xuICAgIHJldHVybiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICBkYXRhID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG4gKz0gZGF0YS5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB2YXIgaCA9IDAuMDI1MTk2MDMyODI0MTY5MzggKiBuO1xuICAgICAgICBuID0gaCA+Pj4gMDtcbiAgICAgICAgaCAtPSBuO1xuICAgICAgICBoICo9IG47XG4gICAgICAgIG4gPSBoID4+PiAwO1xuICAgICAgICBoIC09IG47XG4gICAgICAgIG4gKz0gaCAqIDB4MTAwMDAwMDAwOyAvLyAyXjMyXG4gICAgICB9XG4gICAgICByZXR1cm4gKG4gPj4+IDApICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcbiAgICB9O1xuICB9XG5cbiAgLy8gYW1kXG4gIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSBkZWZpbmUoZnVuY3Rpb24oKSB7cmV0dXJuIFNpbXBsZXhOb2lzZTt9KTtcbiAgLy8gY29tbW9uIGpzXG4gIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIGV4cG9ydHMuU2ltcGxleE5vaXNlID0gU2ltcGxleE5vaXNlO1xuICAvLyBicm93c2VyXG4gIGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB3aW5kb3cuU2ltcGxleE5vaXNlID0gU2ltcGxleE5vaXNlO1xuICAvLyBub2RlanNcbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBTaW1wbGV4Tm9pc2U7XG4gIH1cblxufSkoKTtcbiIsIi8qISBUd2Vha3BhbmUgMy4xLjAgKGMpIDIwMTYgY29jb3BvbiwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLiAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5Ud2Vha3BhbmUgPSB7fSkpO1xufSkodGhpcywgKGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKipcbiAgICAgKiBBIHNpbXBsZSBzZW1hbnRpYyB2ZXJzaW9uaW5nIHBlcnNlci5cbiAgICAgKi9cbiAgICBjbGFzcyBTZW12ZXIge1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3RydWN0b3IodGV4dCkge1xuICAgICAgICAgICAgY29uc3QgW2NvcmUsIHByZXJlbGVhc2VdID0gdGV4dC5zcGxpdCgnLScpO1xuICAgICAgICAgICAgY29uc3QgY29yZUNvbXBzID0gY29yZS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgdGhpcy5tYWpvciA9IHBhcnNlSW50KGNvcmVDb21wc1swXSwgMTApO1xuICAgICAgICAgICAgdGhpcy5taW5vciA9IHBhcnNlSW50KGNvcmVDb21wc1sxXSwgMTApO1xuICAgICAgICAgICAgdGhpcy5wYXRjaCA9IHBhcnNlSW50KGNvcmVDb21wc1syXSwgMTApO1xuICAgICAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gcHJlcmVsZWFzZSAhPT0gbnVsbCAmJiBwcmVyZWxlYXNlICE9PSB2b2lkIDAgPyBwcmVyZWxlYXNlIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcmUgPSBbdGhpcy5tYWpvciwgdGhpcy5taW5vciwgdGhpcy5wYXRjaF0uam9pbignLicpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJlcmVsZWFzZSAhPT0gbnVsbCA/IFtjb3JlLCB0aGlzLnByZXJlbGVhc2VdLmpvaW4oJy0nKSA6IGNvcmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8gPSBjb250cm9sbGVyO1xuICAgICAgICB9XG4gICAgICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmlldy5lbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5nZXQoJ2Rpc2FibGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGRpc2FibGVkKGRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5zZXQoJ2Rpc2FibGVkJywgZGlzYWJsZWQpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBoaWRkZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52aWV3UHJvcHMuZ2V0KCdoaWRkZW4nKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgaGlkZGVuKGhpZGRlbikge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52aWV3UHJvcHMuc2V0KCdoaWRkZW4nLCBoaWRkZW4pO1xuICAgICAgICB9XG4gICAgICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5zZXQoJ2Rpc3Bvc2VkJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUcEV2ZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGFzcyBUcENoYW5nZUV2ZW50IGV4dGVuZHMgVHBFdmVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgdmFsdWUsIHByZXNldEtleSwgbGFzdCkge1xuICAgICAgICAgICAgc3VwZXIodGFyZ2V0KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucHJlc2V0S2V5ID0gcHJlc2V0S2V5O1xuICAgICAgICAgICAgdGhpcy5sYXN0ID0gbGFzdCAhPT0gbnVsbCAmJiBsYXN0ICE9PSB2b2lkIDAgPyBsYXN0IDogdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGFzcyBUcFVwZGF0ZUV2ZW50IGV4dGVuZHMgVHBFdmVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgdmFsdWUsIHByZXNldEtleSkge1xuICAgICAgICAgICAgc3VwZXIodGFyZ2V0KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucHJlc2V0S2V5ID0gcHJlc2V0S2V5O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsYXNzIFRwRm9sZEV2ZW50IGV4dGVuZHMgVHBFdmVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHN1cGVyKHRhcmdldCk7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkID0gZXhwYW5kZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xhc3MgVHBUYWJTZWxlY3RFdmVudCBleHRlbmRzIFRwRXZlbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0YXJnZXQsIGluZGV4KSB7XG4gICAgICAgICAgICBzdXBlcih0YXJnZXQpO1xuICAgICAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9yY2VDYXN0KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZXBFcXVhbHNBcnJheShhMSwgYTIpIHtcbiAgICAgICAgaWYgKGExLmxlbmd0aCAhPT0gYTIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhMS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGExW2ldICE9PSBhMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBDUkVBVEVfTUVTU0FHRV9NQVAgPSB7XG4gICAgICAgIGFscmVhZHlkaXNwb3NlZDogKCkgPT4gJ1ZpZXcgaGFzIGJlZW4gYWxyZWFkeSBkaXNwb3NlZCcsXG4gICAgICAgIGludmFsaWRwYXJhbXM6IChjb250ZXh0KSA9PiBgSW52YWxpZCBwYXJhbWV0ZXJzIGZvciAnJHtjb250ZXh0Lm5hbWV9J2AsXG4gICAgICAgIG5vbWF0Y2hpbmdjb250cm9sbGVyOiAoY29udGV4dCkgPT4gYE5vIG1hdGNoaW5nIGNvbnRyb2xsZXIgZm9yICcke2NvbnRleHQua2V5fSdgLFxuICAgICAgICBub21hdGNoaW5ndmlldzogKGNvbnRleHQpID0+IGBObyBtYXRjaGluZyB2aWV3IGZvciAnJHtKU09OLnN0cmluZ2lmeShjb250ZXh0LnBhcmFtcyl9J2AsXG4gICAgICAgIG5vdGJpbmRhYmxlOiAoKSA9PiBgVmFsdWUgaXMgbm90IGJpbmRhYmxlYCxcbiAgICAgICAgcHJvcGVydHlub3Rmb3VuZDogKGNvbnRleHQpID0+IGBQcm9wZXJ0eSAnJHtjb250ZXh0Lm5hbWV9JyBub3QgZm91bmRgLFxuICAgICAgICBzaG91bGRuZXZlcmhhcHBlbjogKCkgPT4gJ1RoaXMgZXJyb3Igc2hvdWxkIG5ldmVyIGhhcHBlbicsXG4gICAgfTtcbiAgICBjbGFzcyBUcEVycm9yIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIChfYSA9IENSRUFURV9NRVNTQUdFX01BUFtjb25maWcudHlwZV0oZm9yY2VDYXN0KGNvbmZpZy5jb250ZXh0KSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdVbmV4cGVjdGVkIGVycm9yJztcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKS5zdGFjaztcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IGNvbmZpZy50eXBlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBhbHJlYWR5RGlzcG9zZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRwRXJyb3IoeyB0eXBlOiAnYWxyZWFkeWRpc3Bvc2VkJyB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgbm90QmluZGFibGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRwRXJyb3Ioe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdub3RiaW5kYWJsZScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgcHJvcGVydHlOb3RGb3VuZChuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRwRXJyb3Ioe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdwcm9wZXJ0eW5vdGZvdW5kJyxcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBzaG91bGROZXZlckhhcHBlbigpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVHBFcnJvcih7IHR5cGU6ICdzaG91bGRuZXZlcmhhcHBlbicgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBCaW5kaW5nVGFyZ2V0IHtcbiAgICAgICAgY29uc3RydWN0b3Iob2JqLCBrZXksIG9wdF9pZCkge1xuICAgICAgICAgICAgdGhpcy5vYmpfID0gb2JqO1xuICAgICAgICAgICAgdGhpcy5rZXlfID0ga2V5O1xuICAgICAgICAgICAgdGhpcy5wcmVzZXRLZXlfID0gb3B0X2lkICE9PSBudWxsICYmIG9wdF9pZCAhPT0gdm9pZCAwID8gb3B0X2lkIDoga2V5O1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpc0JpbmRhYmxlKG9iaikge1xuICAgICAgICAgICAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGdldCBrZXkoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5rZXlfO1xuICAgICAgICB9XG4gICAgICAgIGdldCBwcmVzZXRLZXkoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVzZXRLZXlfO1xuICAgICAgICB9XG4gICAgICAgIHJlYWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vYmpfW3RoaXMua2V5X107XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGUodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMub2JqX1t0aGlzLmtleV9dID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGVQcm9wZXJ0eShuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVPYmogPSB0aGlzLnJlYWQoKTtcbiAgICAgICAgICAgIGlmICghQmluZGluZ1RhcmdldC5pc0JpbmRhYmxlKHZhbHVlT2JqKSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iubm90QmluZGFibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKG5hbWUgaW4gdmFsdWVPYmopKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5wcm9wZXJ0eU5vdEZvdW5kKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWVPYmpbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEJ1dHRvbkFwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgZ2V0IGxhYmVsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCdsYWJlbCcpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBsYWJlbChsYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ2xhYmVsJywgbGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIGdldCB0aXRsZSgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5nZXQoJ3RpdGxlJykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgICAgICB9XG4gICAgICAgIHNldCB0aXRsZSh0aXRsZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIucHJvcHMuc2V0KCd0aXRsZScsIHRpdGxlKTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgZW1pdHRlciA9IHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLmVtaXR0ZXI7XG4gICAgICAgICAgICBlbWl0dGVyLm9uKGV2ZW50TmFtZSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGJoKG5ldyBUcEV2ZW50KHRoaXMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBFbWl0dGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyc18gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVyc19bZXZlbnROYW1lXTtcbiAgICAgICAgICAgIGlmICghb2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnNfW2V2ZW50TmFtZV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9ic2VydmVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBoYW5kbGVyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBvZmYoZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVyc19bZXZlbnROYW1lXTtcbiAgICAgICAgICAgIGlmIChvYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9ic2VydmVyc19bZXZlbnROYW1lXSA9IG9ic2VydmVycy5maWx0ZXIoKG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYnNlcnZlci5oYW5kbGVyICE9PSBoYW5kbGVyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgZW1pdChldmVudE5hbWUsIGV2ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVyc19bZXZlbnROYW1lXTtcbiAgICAgICAgICAgIGlmICghb2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2JzZXJ2ZXJzLmZvckVhY2goKG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuaGFuZGxlcihldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IFBSRUZJWCA9ICd0cCc7XG4gICAgZnVuY3Rpb24gQ2xhc3NOYW1lKHZpZXdOYW1lKSB7XG4gICAgICAgIGNvbnN0IGZuID0gKG9wdF9lbGVtZW50TmFtZSwgb3B0X21vZGlmaWVyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIFBSRUZJWCxcbiAgICAgICAgICAgICAgICAnLScsXG4gICAgICAgICAgICAgICAgdmlld05hbWUsXG4gICAgICAgICAgICAgICAgJ3YnLFxuICAgICAgICAgICAgICAgIG9wdF9lbGVtZW50TmFtZSA/IGBfJHtvcHRfZWxlbWVudE5hbWV9YCA6ICcnLFxuICAgICAgICAgICAgICAgIG9wdF9tb2RpZmllciA/IGAtJHtvcHRfbW9kaWZpZXJ9YCA6ICcnLFxuICAgICAgICAgICAgXS5qb2luKCcnKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZuO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXBvc2UoaDEsIGgyKSB7XG4gICAgICAgIHJldHVybiAoaW5wdXQpID0+IGgyKGgxKGlucHV0KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGV4dHJhY3RWYWx1ZShldikge1xuICAgICAgICByZXR1cm4gZXYucmF3VmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJpbmRWYWx1ZSh2YWx1ZSwgYXBwbHlWYWx1ZSkge1xuICAgICAgICB2YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCBjb21wb3NlKGV4dHJhY3RWYWx1ZSwgYXBwbHlWYWx1ZSkpO1xuICAgICAgICBhcHBseVZhbHVlKHZhbHVlLnJhd1ZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmluZFZhbHVlTWFwKHZhbHVlTWFwLCBrZXksIGFwcGx5VmFsdWUpIHtcbiAgICAgICAgYmluZFZhbHVlKHZhbHVlTWFwLnZhbHVlKGtleSksIGFwcGx5VmFsdWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFwcGx5Q2xhc3MoZWxlbSwgY2xhc3NOYW1lLCBhY3RpdmUpIHtcbiAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB2YWx1ZVRvQ2xhc3NOYW1lKGVsZW0sIGNsYXNzTmFtZSkge1xuICAgICAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBhcHBseUNsYXNzKGVsZW0sIGNsYXNzTmFtZSwgdmFsdWUpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBiaW5kVmFsdWVUb1RleHRDb250ZW50KHZhbHVlLCBlbGVtKSB7XG4gICAgICAgIGJpbmRWYWx1ZSh2YWx1ZSwgKHRleHQpID0+IHtcbiAgICAgICAgICAgIGVsZW0udGV4dENvbnRlbnQgPSB0ZXh0ICE9PSBudWxsICYmIHRleHQgIT09IHZvaWQgMCA/IHRleHQgOiAnJztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJHEgPSBDbGFzc05hbWUoJ2J0bicpO1xuICAgIGNsYXNzIEJ1dHRvblZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJHEoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgICAgIGJ1dHRvbkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkcSgnYicpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50ID0gYnV0dG9uRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRpdGxlRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRxKCd0JykpO1xuICAgICAgICAgICAgYmluZFZhbHVlVG9UZXh0Q29udGVudChjb25maWcucHJvcHMudmFsdWUoJ3RpdGxlJyksIHRpdGxlRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQuYXBwZW5kQ2hpbGQodGl0bGVFbGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEJ1dHRvbkNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMub25DbGlja18gPSB0aGlzLm9uQ2xpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IEJ1dHRvblZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQ2xpY2tfKTtcbiAgICAgICAgfVxuICAgICAgICBvbkNsaWNrXygpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjbGljaycsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEJvdW5kVmFsdWUge1xuICAgICAgICBjb25zdHJ1Y3Rvcihpbml0aWFsVmFsdWUsIGNvbmZpZykge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdGhpcy5jb25zdHJhaW50XyA9IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5jb25zdHJhaW50O1xuICAgICAgICAgICAgdGhpcy5lcXVhbHNfID0gKF9hID0gY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLmVxdWFscykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKCh2MSwgdjIpID0+IHYxID09PSB2Mik7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5yYXdWYWx1ZV8gPSBpbml0aWFsVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGNvbnN0cmFpbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJhaW50XztcbiAgICAgICAgfVxuICAgICAgICBnZXQgcmF3VmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYXdWYWx1ZV87XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHJhd1ZhbHVlKHJhd1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFJhd1ZhbHVlKHJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UmF3VmFsdWUocmF3VmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbmVkVmFsdWUgPSB0aGlzLmNvbnN0cmFpbnRfXG4gICAgICAgICAgICAgICAgPyB0aGlzLmNvbnN0cmFpbnRfLmNvbnN0cmFpbihyYXdWYWx1ZSlcbiAgICAgICAgICAgICAgICA6IHJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlZCA9ICF0aGlzLmVxdWFsc18odGhpcy5yYXdWYWx1ZV8sIGNvbnN0cmFpbmVkVmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFjaGFuZ2VkICYmICFvcHRzLmZvcmNlRW1pdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdiZWZvcmVjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJhd1ZhbHVlXyA9IGNvbnN0cmFpbmVkVmFsdWU7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdHMsXG4gICAgICAgICAgICAgICAgcmF3VmFsdWU6IGNvbnN0cmFpbmVkVmFsdWUsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBQcmltaXRpdmVWYWx1ZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVfID0gaW5pdGlhbFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGdldCByYXdWYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlXztcbiAgICAgICAgfVxuICAgICAgICBzZXQgcmF3VmFsdWUodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UmF3VmFsdWUodmFsdWUsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRSYXdWYWx1ZSh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVfID09PSB2YWx1ZSAmJiAhb3B0cy5mb3JjZUVtaXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnYmVmb3JlY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZV8gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgb3B0aW9uczogb3B0cyxcbiAgICAgICAgICAgICAgICByYXdWYWx1ZTogdGhpcy52YWx1ZV8sXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVWYWx1ZShpbml0aWFsVmFsdWUsIGNvbmZpZykge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50ID0gY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLmNvbnN0cmFpbnQ7XG4gICAgICAgIGNvbnN0IGVxdWFscyA9IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5lcXVhbHM7XG4gICAgICAgIGlmICghY29uc3RyYWludCAmJiAhZXF1YWxzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByaW1pdGl2ZVZhbHVlKGluaXRpYWxWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBCb3VuZFZhbHVlKGluaXRpYWxWYWx1ZSwgY29uZmlnKTtcbiAgICB9XG5cbiAgICBjbGFzcyBWYWx1ZU1hcCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHZhbHVlTWFwKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy52YWxNYXBfID0gdmFsdWVNYXA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnZhbE1hcF8pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2ID0gdGhpcy52YWxNYXBfW2tleV07XG4gICAgICAgICAgICAgICAgdi5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGNyZWF0ZUNvcmUoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBrZXlzLnJlZHVjZSgobywga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obywge1xuICAgICAgICAgICAgICAgICAgICBba2V5XTogY3JlYXRlVmFsdWUoaW5pdGlhbFZhbHVlW2tleV0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBmcm9tT2JqZWN0KGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgY29yZSA9IHRoaXMuY3JlYXRlQ29yZShpbml0aWFsVmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBWYWx1ZU1hcChjb3JlKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWxNYXBfW2tleV0ucmF3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsTWFwX1trZXldLnJhd1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWxNYXBfW2tleV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU9iamVjdCh2YWx1ZSwga2V5VG9QYXJzZXJNYXApIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGtleVRvUGFyc2VyTWFwKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ga2V5cy5yZWR1Y2UoKHRtcCwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAodG1wID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFyc2VyID0ga2V5VG9QYXJzZXJNYXBba2V5XTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlcih2YWx1ZVtrZXldKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuc3VjY2VlZGVkXG4gICAgICAgICAgICAgICAgPyBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRtcCksIHsgW2tleV06IHJlc3VsdC52YWx1ZSB9KSA6IHVuZGVmaW5lZDtcbiAgICAgICAgfSwge30pO1xuICAgICAgICByZXR1cm4gZm9yY2VDYXN0KHJlc3VsdCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlQXJyYXkodmFsdWUsIHBhcnNlSXRlbSkge1xuICAgICAgICByZXR1cm4gdmFsdWUucmVkdWNlKCh0bXAsIGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmICh0bXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUl0ZW0oaXRlbSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5zdWNjZWVkZWQgfHwgcmVzdWx0LnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFsuLi50bXAsIHJlc3VsdC52YWx1ZV07XG4gICAgICAgIH0sIFtdKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIocGFyc2UpIHtcbiAgICAgICAgcmV0dXJuIChvcHRpb25hbCkgPT4gKHYpID0+IHtcbiAgICAgICAgICAgIGlmICghb3B0aW9uYWwgJiYgdiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VlZGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbmFsICYmIHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2NlZWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2Uodik7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VlZGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VlZGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVycyhvcHRpb25hbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3VzdG9tOiAocGFyc2UpID0+IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIocGFyc2UpKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIGJvb2xlYW46IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+IHR5cGVvZiB2ID09PSAnYm9vbGVhbicgPyB2IDogdW5kZWZpbmVkKShvcHRpb25hbCksXG4gICAgICAgICAgICBudW1iZXI6IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJyA/IHYgOiB1bmRlZmluZWQpKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIHN0cmluZzogY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcigodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnID8gdiA6IHVuZGVmaW5lZCkob3B0aW9uYWwpLFxuICAgICAgICAgICAgZnVuY3Rpb246IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+XG4gICAgICAgICAgICB0eXBlb2YgdiA9PT0gJ2Z1bmN0aW9uJyA/IHYgOiB1bmRlZmluZWQpKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIGNvbnN0YW50OiAodmFsdWUpID0+IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+ICh2ID09PSB2YWx1ZSA/IHZhbHVlIDogdW5kZWZpbmVkKSkob3B0aW9uYWwpLFxuICAgICAgICAgICAgcmF3OiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiB2KShvcHRpb25hbCksXG4gICAgICAgICAgICBvYmplY3Q6IChrZXlUb1BhcnNlck1hcCkgPT4gY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcigodikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QodikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlT2JqZWN0KHYsIGtleVRvUGFyc2VyTWFwKTtcbiAgICAgICAgICAgIH0pKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIGFycmF5OiAoaXRlbVBhcnNlcikgPT4gY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcigodikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJheSh2LCBpdGVtUGFyc2VyKTtcbiAgICAgICAgICAgIH0pKG9wdGlvbmFsKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgUGFyYW1zUGFyc2VycyA9IHtcbiAgICAgICAgb3B0aW9uYWw6IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXJzKHRydWUpLFxuICAgICAgICByZXF1aXJlZDogY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcnMoZmFsc2UpLFxuICAgIH07XG4gICAgZnVuY3Rpb24gcGFyc2VQYXJhbXModmFsdWUsIGtleVRvUGFyc2VyTWFwKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFBhcmFtc1BhcnNlcnMucmVxdWlyZWQub2JqZWN0KGtleVRvUGFyc2VyTWFwKSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQuc3VjY2VlZGVkID8gcmVzdWx0LnZhbHVlIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpc3Bvc2VFbGVtZW50KGVsZW0pIHtcbiAgICAgICAgaWYgKGVsZW0gJiYgZWxlbS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0QWxsQmxhZGVQb3NpdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiBbJ3ZlcnlmaXJzdCcsICdmaXJzdCcsICdsYXN0JywgJ3ZlcnlsYXN0J107XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJHAgPSBDbGFzc05hbWUoJycpO1xuICAgIGNvbnN0IFBPU19UT19DTEFTU19OQU1FX01BUCA9IHtcbiAgICAgICAgdmVyeWZpcnN0OiAndmZzdCcsXG4gICAgICAgIGZpcnN0OiAnZnN0JyxcbiAgICAgICAgbGFzdDogJ2xzdCcsXG4gICAgICAgIHZlcnlsYXN0OiAndmxzdCcsXG4gICAgfTtcbiAgICBjbGFzcyBCbGFkZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50XyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmJsYWRlID0gY29uZmlnLmJsYWRlO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gY29uZmlnLnZpZXc7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy52aWV3LmVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmJsYWRlLnZhbHVlKCdwb3NpdGlvbnMnKS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZ2V0QWxsQmxhZGVQb3NpdGlvbnMoKS5mb3JFYWNoKChwb3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSRwKHVuZGVmaW5lZCwgUE9TX1RPX0NMQVNTX05BTUVfTUFQW3Bvc10pKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmJsYWRlLmdldCgncG9zaXRpb25zJykuZm9yRWFjaCgocG9zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkcCh1bmRlZmluZWQsIFBPU19UT19DTEFTU19OQU1FX01BUFtwb3NdKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzLmhhbmRsZURpc3Bvc2UoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRpc3Bvc2VFbGVtZW50KGVsZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHBhcmVudCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudF87XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBTVkdfTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuICAgIGZ1bmN0aW9uIGZvcmNlUmVmbG93KGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc2FibGVUcmFuc2l0aW9uVGVtcG9yYXJpbHkoZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgdCA9IGVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbjtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRyYW5zaXRpb24gPSB0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdXBwb3J0c1RvdWNoKGRvYykge1xuICAgICAgICByZXR1cm4gZG9jLm9udG91Y2hzdGFydCAhPT0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRHbG9iYWxPYmplY3QoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0V2luZG93RG9jdW1lbnQoKSB7XG4gICAgICAgIGNvbnN0IGdsb2JhbE9iaiA9IGZvcmNlQ2FzdChnZXRHbG9iYWxPYmplY3QoKSk7XG4gICAgICAgIHJldHVybiBnbG9iYWxPYmouZG9jdW1lbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENhbnZhc0NvbnRleHQoY2FudmFzRWxlbWVudCkge1xuICAgICAgICBjb25zdCB3aW4gPSBjYW52YXNFbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgICAgIGlmICghd2luKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0Jyb3dzZXIgPSAnZG9jdW1lbnQnIGluIHdpbjtcbiAgICAgICAgcmV0dXJuIGlzQnJvd3NlciA/IGNhbnZhc0VsZW1lbnQuZ2V0Q29udGV4dCgnMmQnKSA6IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IElDT05fSURfVE9fSU5ORVJfSFRNTF9NQVAgPSB7XG4gICAgICAgIGNoZWNrOiAnPHBhdGggZD1cIk0yIDhsNCA0bDggLThcIi8+JyxcbiAgICAgICAgZHJvcGRvd246ICc8cGF0aCBkPVwiTTUgN2g2bC0zIDMgelwiLz4nLFxuICAgICAgICBwMmRwYWQ6ICc8cGF0aCBkPVwiTTggNHY4XCIvPjxwYXRoIGQ9XCJNNCA4aDhcIi8+PGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIxLjJcIi8+JyxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVN2Z0ljb25FbGVtZW50KGRvY3VtZW50LCBpY29uSWQpIHtcbiAgICAgICAgY29uc3QgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdzdmcnKTtcbiAgICAgICAgZWxlbS5pbm5lckhUTUwgPSBJQ09OX0lEX1RPX0lOTkVSX0hUTUxfTUFQW2ljb25JZF07XG4gICAgICAgIHJldHVybiBlbGVtO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNlcnRFbGVtZW50QXQocGFyZW50RWxlbWVudCwgZWxlbWVudCwgaW5kZXgpIHtcbiAgICAgICAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoZWxlbWVudCwgcGFyZW50RWxlbWVudC5jaGlsZHJlbltpbmRleF0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUNoaWxkRWxlbWVudHMoZWxlbWVudCkge1xuICAgICAgICB3aGlsZSAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuY2hpbGRyZW5bMF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUNoaWxkTm9kZXMoZWxlbWVudCkge1xuICAgICAgICB3aGlsZSAoZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudC5jaGlsZE5vZGVzWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kTmV4dFRhcmdldChldikge1xuICAgICAgICBpZiAoZXYucmVsYXRlZFRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcmNlQ2FzdChldi5yZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJ2V4cGxpY2l0T3JpZ2luYWxUYXJnZXQnIGluIGV2KSB7XG4gICAgICAgICAgICByZXR1cm4gZXYuZXhwbGljaXRPcmlnaW5hbFRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkbyA9IENsYXNzTmFtZSgnbGJsJyk7XG4gICAgZnVuY3Rpb24gY3JlYXRlTGFiZWxOb2RlKGRvYywgbGFiZWwpIHtcbiAgICAgICAgY29uc3QgZnJhZyA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgIGNvbnN0IGxpbmVOb2RlcyA9IGxhYmVsLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkb2MuY3JlYXRlVGV4dE5vZGUobGluZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBsaW5lTm9kZXMuZm9yRWFjaCgobGluZU5vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChkb2MuY3JlYXRlRWxlbWVudCgnYnInKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGxpbmVOb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmcmFnO1xuICAgIH1cbiAgICBjbGFzcyBMYWJlbFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJG8oKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgbGFiZWxFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbGFiZWxFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJG8oJ2wnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAoY29uZmlnLnByb3BzLCAnbGFiZWwnLCAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJG8odW5kZWZpbmVkLCAnbm9sJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lJG8odW5kZWZpbmVkLCAnbm9sJykpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVDaGlsZE5vZGVzKGxhYmVsRWxlbSk7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsRWxlbS5hcHBlbmRDaGlsZChjcmVhdGVMYWJlbE5vZGUoZG9jLCB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGxhYmVsRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmxhYmVsRWxlbWVudCA9IGxhYmVsRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHZhbHVlRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRvKCd2JykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHZhbHVlRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlRWxlbWVudCA9IHZhbHVlRWxlbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIExhYmVsQ29udHJvbGxlciBleHRlbmRzIEJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3UHJvcHMgPSBjb25maWcudmFsdWVDb250cm9sbGVyLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHN1cGVyKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKSwgeyB2aWV3OiBuZXcgTGFiZWxWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnByb3BzLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KSwgdmlld1Byb3BzOiB2aWV3UHJvcHMgfSkpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmFsdWVDb250cm9sbGVyID0gY29uZmlnLnZhbHVlQ29udHJvbGxlcjtcbiAgICAgICAgICAgIHRoaXMudmlldy52YWx1ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy52YWx1ZUNvbnRyb2xsZXIudmlldy5lbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IEJ1dHRvbkJsYWRlUGx1Z2luID0ge1xuICAgICAgICBpZDogJ2J1dHRvbicsXG4gICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgIGFjY2VwdChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IHAucmVxdWlyZWQuc3RyaW5nLFxuICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ2J1dHRvbicpLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBwLm9wdGlvbmFsLnN0cmluZyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IHsgcGFyYW1zOiByZXN1bHQgfSA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXIoYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBMYWJlbENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGJsYWRlOiBhcmdzLmJsYWRlLFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGFyZ3MucGFyYW1zLmxhYmVsLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZhbHVlQ29udHJvbGxlcjogbmV3IEJ1dHRvbkNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYXJncy5wYXJhbXMudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFwaShhcmdzKSB7XG4gICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiBMYWJlbENvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIudmFsdWVDb250cm9sbGVyIGluc3RhbmNlb2YgQnV0dG9uQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgQnV0dG9uQXBpKGFyZ3MuY29udHJvbGxlcik7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsYXNzIFZhbHVlQmxhZGVDb250cm9sbGVyIGV4dGVuZHMgQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihjb25maWcpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUJsYWRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFZhbHVlTWFwKHtcbiAgICAgICAgICAgIHBvc2l0aW9uczogY3JlYXRlVmFsdWUoW10sIHtcbiAgICAgICAgICAgICAgICBlcXVhbHM6IGRlZXBFcXVhbHNBcnJheSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGFzcyBGb2xkYWJsZSBleHRlbmRzIFZhbHVlTWFwIHtcbiAgICAgICAgY29uc3RydWN0b3IodmFsdWVNYXApIHtcbiAgICAgICAgICAgIHN1cGVyKHZhbHVlTWFwKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgY3JlYXRlKGV4cGFuZGVkKSB7XG4gICAgICAgICAgICBjb25zdCBjb3JlT2JqID0ge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgZXhwYW5kZWRIZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgc2hvdWxkRml4SGVpZ2h0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0ZW1wb3JhcnlFeHBhbmRlZDogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBjb3JlID0gVmFsdWVNYXAuY3JlYXRlQ29yZShjb3JlT2JqKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRm9sZGFibGUoY29yZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHN0eWxlRXhwYW5kZWQoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5nZXQoJ3RlbXBvcmFyeUV4cGFuZGVkJykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMuZ2V0KCdleHBhbmRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBzdHlsZUhlaWdodCgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zdHlsZUV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGV4SGVpZ2h0ID0gdGhpcy5nZXQoJ2V4cGFuZGVkSGVpZ2h0Jyk7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXQoJ3Nob3VsZEZpeEhlaWdodCcpICYmICFpc0VtcHR5KGV4SGVpZ2h0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHtleEhlaWdodH1weGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJ2F1dG8nO1xuICAgICAgICB9XG4gICAgICAgIGJpbmRFeHBhbmRlZENsYXNzKGVsZW0sIGV4cGFuZGVkQ2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBvbkV4cGFuZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9IHRoaXMuc3R5bGVFeHBhbmRlZDtcbiAgICAgICAgICAgICAgICBpZiAoZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKGV4cGFuZGVkQ2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LnJlbW92ZShleHBhbmRlZENsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLCAnZXhwYW5kZWQnLCBvbkV4cGFuZCk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAodGhpcywgJ3RlbXBvcmFyeUV4cGFuZGVkJywgb25FeHBhbmQpO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFuVXBUcmFuc2l0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5zZXQoJ3Nob3VsZEZpeEhlaWdodCcsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuc2V0KCdleHBhbmRlZEhlaWdodCcsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5zZXQoJ2NvbXBsZXRlZCcsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFeHBhbmRlZEZvbGRlckhlaWdodChmb2xkZXIsIGNvbnRhaW5lckVsZW1lbnQpIHtcbiAgICAgICAgbGV0IGhlaWdodCA9IDA7XG4gICAgICAgIGRpc2FibGVUcmFuc2l0aW9uVGVtcG9yYXJpbHkoY29udGFpbmVyRWxlbWVudCwgKCkgPT4ge1xuICAgICAgICAgICAgZm9sZGVyLnNldCgnZXhwYW5kZWRIZWlnaHQnLCBudWxsKTtcbiAgICAgICAgICAgIGZvbGRlci5zZXQoJ3RlbXBvcmFyeUV4cGFuZGVkJywgdHJ1ZSk7XG4gICAgICAgICAgICBmb3JjZVJlZmxvdyhjb250YWluZXJFbGVtZW50KTtcbiAgICAgICAgICAgIGhlaWdodCA9IGNvbnRhaW5lckVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgZm9sZGVyLnNldCgndGVtcG9yYXJ5RXhwYW5kZWQnLCBudWxsKTtcbiAgICAgICAgICAgIGZvcmNlUmVmbG93KGNvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGhlaWdodDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXBwbHlIZWlnaHQoZm9sZGFibGUsIGVsZW0pIHtcbiAgICAgICAgZWxlbS5zdHlsZS5oZWlnaHQgPSBmb2xkYWJsZS5zdHlsZUhlaWdodDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmluZEZvbGRhYmxlKGZvbGRhYmxlLCBlbGVtKSB7XG4gICAgICAgIGZvbGRhYmxlLnZhbHVlKCdleHBhbmRlZCcpLmVtaXR0ZXIub24oJ2JlZm9yZWNoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgIGZvbGRhYmxlLnNldCgnY29tcGxldGVkJywgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkoZm9sZGFibGUuZ2V0KCdleHBhbmRlZEhlaWdodCcpKSkge1xuICAgICAgICAgICAgICAgIGZvbGRhYmxlLnNldCgnZXhwYW5kZWRIZWlnaHQnLCBjb21wdXRlRXhwYW5kZWRGb2xkZXJIZWlnaHQoZm9sZGFibGUsIGVsZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvbGRhYmxlLnNldCgnc2hvdWxkRml4SGVpZ2h0JywgdHJ1ZSk7XG4gICAgICAgICAgICBmb3JjZVJlZmxvdyhlbGVtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZvbGRhYmxlLmVtaXR0ZXIub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgIGFwcGx5SGVpZ2h0KGZvbGRhYmxlLCBlbGVtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwcGx5SGVpZ2h0KGZvbGRhYmxlLCBlbGVtKTtcbiAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgKGV2KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXYucHJvcGVydHlOYW1lICE9PSAnaGVpZ2h0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvbGRhYmxlLmNsZWFuVXBUcmFuc2l0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIFJhY2tMaWtlQXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyLCByYWNrQXBpKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8gPSByYWNrQXBpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkQnV0dG9uQXNCbGFkZShhcGksIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gYXBpLmFkZEJsYWRlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKSwgeyB2aWV3OiAnYnV0dG9uJyB9KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZEZvbGRlckFzQmxhZGUoYXBpLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIGFwaS5hZGRCbGFkZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyksIHsgdmlldzogJ2ZvbGRlcicgfSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRTZXBhcmF0b3JBc0JsYWRlKGFwaSwgb3B0X3BhcmFtcykge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBvcHRfcGFyYW1zICE9PSBudWxsICYmIG9wdF9wYXJhbXMgIT09IHZvaWQgMCA/IG9wdF9wYXJhbXMgOiB7fTtcbiAgICAgICAgcmV0dXJuIGFwaS5hZGRCbGFkZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyksIHsgdmlldzogJ3NlcGFyYXRvcicgfSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRUYWJBc0JsYWRlKGFwaSwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBhcGkuYWRkQmxhZGUoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMpLCB7IHZpZXc6ICd0YWInIH0pKTtcbiAgICB9XG5cbiAgICBjbGFzcyBOZXN0ZWRPcmRlcmVkU2V0IHtcbiAgICAgICAgY29uc3RydWN0b3IoZXh0cmFjdCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNfID0gW107XG4gICAgICAgICAgICB0aGlzLmNhY2hlXyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHRoaXMub25TdWJMaXN0QWRkXyA9IHRoaXMub25TdWJMaXN0QWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblN1Ykxpc3RSZW1vdmVfID0gdGhpcy5vblN1Ykxpc3RSZW1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmV4dHJhY3RfID0gZXh0cmFjdDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaXRlbXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtc187XG4gICAgICAgIH1cbiAgICAgICAgYWxsSXRlbXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNhY2hlXyk7XG4gICAgICAgIH1cbiAgICAgICAgZmluZChjYWxsYmFjaykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuYWxsSXRlbXMoKSkge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpbmNsdWRlcyhpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZV8uaGFzKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGFkZChpdGVtLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmluY2x1ZGVzKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBvcHRfaW5kZXggIT09IHVuZGVmaW5lZCA/IG9wdF9pbmRleCA6IHRoaXMuaXRlbXNfLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNfLnNwbGljZShpbmRleCwgMCwgaXRlbSk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlXy5hZGQoaXRlbSk7XG4gICAgICAgICAgICBjb25zdCBzdWJMaXN0ID0gdGhpcy5leHRyYWN0XyhpdGVtKTtcbiAgICAgICAgICAgIGlmIChzdWJMaXN0KSB7XG4gICAgICAgICAgICAgICAgc3ViTGlzdC5lbWl0dGVyLm9uKCdhZGQnLCB0aGlzLm9uU3ViTGlzdEFkZF8pO1xuICAgICAgICAgICAgICAgIHN1Ykxpc3QuZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblN1Ykxpc3RSZW1vdmVfKTtcbiAgICAgICAgICAgICAgICBzdWJMaXN0LmFsbEl0ZW1zKCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlXy5hZGQoaXRlbSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnYWRkJywge1xuICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICAgIHJvb3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKGl0ZW0pIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtc18uaW5kZXhPZihpdGVtKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLml0ZW1zXy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5jYWNoZV8uZGVsZXRlKGl0ZW0pO1xuICAgICAgICAgICAgY29uc3Qgc3ViTGlzdCA9IHRoaXMuZXh0cmFjdF8oaXRlbSk7XG4gICAgICAgICAgICBpZiAoc3ViTGlzdCkge1xuICAgICAgICAgICAgICAgIHN1Ykxpc3QuZW1pdHRlci5vZmYoJ2FkZCcsIHRoaXMub25TdWJMaXN0QWRkXyk7XG4gICAgICAgICAgICAgICAgc3ViTGlzdC5lbWl0dGVyLm9mZigncmVtb3ZlJywgdGhpcy5vblN1Ykxpc3RSZW1vdmVfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdyZW1vdmUnLCB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgcm9vdDogdGhpcyxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblN1Ykxpc3RBZGRfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlXy5hZGQoZXYuaXRlbSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnYWRkJywge1xuICAgICAgICAgICAgICAgIGluZGV4OiBldi5pbmRleCxcbiAgICAgICAgICAgICAgICBpdGVtOiBldi5pdGVtLFxuICAgICAgICAgICAgICAgIHJvb3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBldi50YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblN1Ykxpc3RSZW1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlXy5kZWxldGUoZXYuaXRlbSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgncmVtb3ZlJywge1xuICAgICAgICAgICAgICAgIGluZGV4OiBldi5pbmRleCxcbiAgICAgICAgICAgICAgICBpdGVtOiBldi5pdGVtLFxuICAgICAgICAgICAgICAgIHJvb3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBldi50YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIElucHV0QmluZGluZ0FwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlcikge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLm9uQmluZGluZ0NoYW5nZV8gPSB0aGlzLm9uQmluZGluZ0NoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8gPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5iaW5kaW5nLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25CaW5kaW5nQ2hhbmdlXyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxhYmVsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCdsYWJlbCcpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBsYWJlbChsYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ2xhYmVsJywgbGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICByZWZyZXNoKCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5iaW5kaW5nLnJlYWQoKTtcbiAgICAgICAgfVxuICAgICAgICBvbkJpbmRpbmdDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGV2LnNlbmRlci50YXJnZXQucmVhZCgpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcENoYW5nZUV2ZW50KHRoaXMsIGZvcmNlQ2FzdCh2YWx1ZSksIHRoaXMuY29udHJvbGxlcl8uYmluZGluZy50YXJnZXQucHJlc2V0S2V5LCBldi5vcHRpb25zLmxhc3QpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBJbnB1dEJpbmRpbmdDb250cm9sbGVyIGV4dGVuZHMgTGFiZWxDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKGRvYywgY29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuYmluZGluZyA9IGNvbmZpZy5iaW5kaW5nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgTW9uaXRvckJpbmRpbmdBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5vbkJpbmRpbmdVcGRhdGVfID0gdGhpcy5vbkJpbmRpbmdVcGRhdGVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uYmluZGluZy5lbWl0dGVyLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmluZGluZ1VwZGF0ZV8pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnbGFiZWwnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdsYWJlbCcsIGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uYmluZGluZy5yZWFkKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25CaW5kaW5nVXBkYXRlXyhldikge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBldi5zZW5kZXIudGFyZ2V0LnJlYWQoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgndXBkYXRlJywge1xuICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBVcGRhdGVFdmVudCh0aGlzLCBmb3JjZUNhc3QodmFsdWUpLCB0aGlzLmNvbnRyb2xsZXJfLmJpbmRpbmcudGFyZ2V0LnByZXNldEtleSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIE1vbml0b3JCaW5kaW5nQ29udHJvbGxlciBleHRlbmRzIExhYmVsQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihkb2MsIGNvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLmJpbmRpbmcgPSBjb25maWcuYmluZGluZztcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzLmJpbmREaXNhYmxlZCh0aGlzLmJpbmRpbmcudGlja2VyKTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzLmhhbmRsZURpc3Bvc2UoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZGluZy5kaXNwb3NlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmRTdWJCbGFkZUFwaVNldChhcGkpIHtcbiAgICAgICAgaWYgKGFwaSBpbnN0YW5jZW9mIFJhY2tBcGkpIHtcbiAgICAgICAgICAgIHJldHVybiBhcGlbJ2FwaVNldF8nXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXBpIGluc3RhbmNlb2YgUmFja0xpa2VBcGkpIHtcbiAgICAgICAgICAgIHJldHVybiBhcGlbJ3JhY2tBcGlfJ11bJ2FwaVNldF8nXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QXBpQnlDb250cm9sbGVyKGFwaVNldCwgY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCBhcGkgPSBhcGlTZXQuZmluZCgoYXBpKSA9PiBhcGkuY29udHJvbGxlcl8gPT09IGNvbnRyb2xsZXIpO1xuICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcGk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUJpbmRpbmdUYXJnZXQob2JqLCBrZXksIG9wdF9pZCkge1xuICAgICAgICBpZiAoIUJpbmRpbmdUYXJnZXQuaXNCaW5kYWJsZShvYmopKSB7XG4gICAgICAgICAgICB0aHJvdyBUcEVycm9yLm5vdEJpbmRhYmxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBCaW5kaW5nVGFyZ2V0KG9iaiwga2V5LCBvcHRfaWQpO1xuICAgIH1cbiAgICBjbGFzcyBSYWNrQXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyLCBwb29sKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHRoaXMub25SYWNrQWRkXyA9IHRoaXMub25SYWNrQWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblJhY2tSZW1vdmVfID0gdGhpcy5vblJhY2tSZW1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUmFja0lucHV0Q2hhbmdlXyA9IHRoaXMub25SYWNrSW5wdXRDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUmFja01vbml0b3JVcGRhdGVfID0gdGhpcy5vblJhY2tNb25pdG9yVXBkYXRlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmFwaVNldF8gPSBuZXcgTmVzdGVkT3JkZXJlZFNldChmaW5kU3ViQmxhZGVBcGlTZXQpO1xuICAgICAgICAgICAgdGhpcy5wb29sXyA9IHBvb2w7XG4gICAgICAgICAgICBjb25zdCByYWNrID0gdGhpcy5jb250cm9sbGVyXy5yYWNrO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdhZGQnLCB0aGlzLm9uUmFja0FkZF8pO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdyZW1vdmUnLCB0aGlzLm9uUmFja1JlbW92ZV8pO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdpbnB1dGNoYW5nZScsIHRoaXMub25SYWNrSW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgICAgIHJhY2suZW1pdHRlci5vbignbW9uaXRvcnVwZGF0ZScsIHRoaXMub25SYWNrTW9uaXRvclVwZGF0ZV8pO1xuICAgICAgICAgICAgcmFjay5jaGlsZHJlbi5mb3JFYWNoKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VXBBcGlfKGJjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjaGlsZHJlbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnJhY2suY2hpbGRyZW4ubWFwKChiYykgPT4gZ2V0QXBpQnlDb250cm9sbGVyKHRoaXMuYXBpU2V0XywgYmMpKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRJbnB1dChvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gb3B0X3BhcmFtcyAhPT0gbnVsbCAmJiBvcHRfcGFyYW1zICE9PSB2b2lkIDAgPyBvcHRfcGFyYW1zIDoge307XG4gICAgICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmNvbnRyb2xsZXJfLnZpZXcuZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgYmMgPSB0aGlzLnBvb2xfLmNyZWF0ZUlucHV0KGRvYywgY3JlYXRlQmluZGluZ1RhcmdldChvYmplY3QsIGtleSwgcGFyYW1zLnByZXNldEtleSksIHBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCBhcGkgPSBuZXcgSW5wdXRCaW5kaW5nQXBpKGJjKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChhcGksIHBhcmFtcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkTW9uaXRvcihvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gb3B0X3BhcmFtcyAhPT0gbnVsbCAmJiBvcHRfcGFyYW1zICE9PSB2b2lkIDAgPyBvcHRfcGFyYW1zIDoge307XG4gICAgICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmNvbnRyb2xsZXJfLnZpZXcuZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgYmMgPSB0aGlzLnBvb2xfLmNyZWF0ZU1vbml0b3IoZG9jLCBjcmVhdGVCaW5kaW5nVGFyZ2V0KG9iamVjdCwga2V5KSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IG5ldyBNb25pdG9yQmluZGluZ0FwaShiYyk7XG4gICAgICAgICAgICByZXR1cm4gZm9yY2VDYXN0KHRoaXMuYWRkKGFwaSwgcGFyYW1zLmluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkRm9sZGVyKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIGFkZEZvbGRlckFzQmxhZGUodGhpcywgcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRCdXR0b24ocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gYWRkQnV0dG9uQXNCbGFkZSh0aGlzLCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFNlcGFyYXRvcihvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gYWRkU2VwYXJhdG9yQXNCbGFkZSh0aGlzLCBvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRUYWIocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gYWRkVGFiQXNCbGFkZSh0aGlzLCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZChhcGksIG9wdF9pbmRleCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yYWNrLmFkZChhcGkuY29udHJvbGxlcl8sIG9wdF9pbmRleCk7XG4gICAgICAgICAgICBjb25zdCBnYXBpID0gdGhpcy5hcGlTZXRfLmZpbmQoKGEpID0+IGEuY29udHJvbGxlcl8gPT09IGFwaS5jb250cm9sbGVyXyk7XG4gICAgICAgICAgICBpZiAoZ2FwaSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBpU2V0Xy5yZW1vdmUoZ2FwaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFwaVNldF8uYWRkKGFwaSk7XG4gICAgICAgICAgICByZXR1cm4gYXBpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShhcGkpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucmFjay5yZW1vdmUoYXBpLmNvbnRyb2xsZXJfKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRCbGFkZShwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuY29udHJvbGxlcl8udmlldy5lbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucG9vbF8uY3JlYXRlQmxhZGUoZG9jLCBwYXJhbXMpO1xuICAgICAgICAgICAgY29uc3QgYXBpID0gdGhpcy5wb29sXy5jcmVhdGVCbGFkZUFwaShiYyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoYXBpLCBwYXJhbXMuaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBzZXRVcEFwaV8oYmMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IHRoaXMuYXBpU2V0Xy5maW5kKChhcGkpID0+IGFwaS5jb250cm9sbGVyXyA9PT0gYmMpO1xuICAgICAgICAgICAgaWYgKCFhcGkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwaVNldF8uYWRkKHRoaXMucG9vbF8uY3JlYXRlQmxhZGVBcGkoYmMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblJhY2tBZGRfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLnNldFVwQXBpXyhldi5ibGFkZUNvbnRyb2xsZXIpO1xuICAgICAgICB9XG4gICAgICAgIG9uUmFja1JlbW92ZV8oZXYpIHtcbiAgICAgICAgICAgIGlmIChldi5pc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcGkgPSBnZXRBcGlCeUNvbnRyb2xsZXIodGhpcy5hcGlTZXRfLCBldi5ibGFkZUNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBpU2V0Xy5yZW1vdmUoYXBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblJhY2tJbnB1dENoYW5nZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gZXYuYmxhZGVDb250cm9sbGVyO1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgSW5wdXRCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwaSA9IGdldEFwaUJ5Q29udHJvbGxlcih0aGlzLmFwaVNldF8sIGJjKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiaW5kaW5nID0gYmMuYmluZGluZztcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcENoYW5nZUV2ZW50KGFwaSwgZm9yY2VDYXN0KGJpbmRpbmcudGFyZ2V0LnJlYWQoKSksIGJpbmRpbmcudGFyZ2V0LnByZXNldEtleSwgZXYub3B0aW9ucy5sYXN0KSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJjIGluc3RhbmNlb2YgVmFsdWVCbGFkZUNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcGkgPSBnZXRBcGlCeUNvbnRyb2xsZXIodGhpcy5hcGlTZXRfLCBiYyk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBDaGFuZ2VFdmVudChhcGksIGJjLnZhbHVlLnJhd1ZhbHVlLCB1bmRlZmluZWQsIGV2Lm9wdGlvbnMubGFzdCksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25SYWNrTW9uaXRvclVwZGF0ZV8oZXYpIHtcbiAgICAgICAgICAgIGlmICghKGV2LmJsYWRlQ29udHJvbGxlciBpbnN0YW5jZW9mIE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhcGkgPSBnZXRBcGlCeUNvbnRyb2xsZXIodGhpcy5hcGlTZXRfLCBldi5ibGFkZUNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgY29uc3QgYmluZGluZyA9IGV2LmJsYWRlQ29udHJvbGxlci5iaW5kaW5nO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCd1cGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcFVwZGF0ZUV2ZW50KGFwaSwgZm9yY2VDYXN0KGJpbmRpbmcudGFyZ2V0LnJlYWQoKSksIGJpbmRpbmcudGFyZ2V0LnByZXNldEtleSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEZvbGRlckFwaSBleHRlbmRzIFJhY2tMaWtlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlciwgcG9vbCkge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlciwgbmV3IFJhY2tBcGkoY29udHJvbGxlci5yYWNrQ29udHJvbGxlciwgcG9vbCkpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLmZvbGRhYmxlXG4gICAgICAgICAgICAgICAgLnZhbHVlKCdleHBhbmRlZCcpXG4gICAgICAgICAgICAgICAgLmVtaXR0ZXIub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnZm9sZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcEZvbGRFdmVudCh0aGlzLCBldi5zZW5kZXIucmF3VmFsdWUpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfLm9uKCdjaGFuZ2UnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IGV2LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfLm9uKCd1cGRhdGUnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ3VwZGF0ZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IGV2LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGV4cGFuZGVkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8uZm9sZGFibGUuZ2V0KCdleHBhbmRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBleHBhbmRlZChleHBhbmRlZCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5mb2xkYWJsZS5zZXQoJ2V4cGFuZGVkJywgZXhwYW5kZWQpO1xuICAgICAgICB9XG4gICAgICAgIGdldCB0aXRsZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgndGl0bGUnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgdGl0bGUodGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCd0aXRsZScsIHRpdGxlKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY2hpbGRyZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5jaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgICBhZGRJbnB1dChvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkSW5wdXQob2JqZWN0LCBrZXksIG9wdF9wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZE1vbml0b3Iob2JqZWN0LCBrZXksIG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZE1vbml0b3Iob2JqZWN0LCBrZXksIG9wdF9wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZEZvbGRlcihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZEZvbGRlcihwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZEJ1dHRvbihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZEJ1dHRvbihwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFNlcGFyYXRvcihvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRTZXBhcmF0b3Iob3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkVGFiKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkVGFiKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKGFwaSwgb3B0X2luZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGQoYXBpLCBvcHRfaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShhcGkpIHtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8ucmVtb3ZlKGFwaSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkQmxhZGUocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRCbGFkZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFJhY2tMaWtlQ29udHJvbGxlciBleHRlbmRzIEJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgICAgIGJsYWRlOiBjb25maWcuYmxhZGUsXG4gICAgICAgICAgICAgICAgdmlldzogY29uZmlnLnZpZXcsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcucmFja0NvbnRyb2xsZXIudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJhY2tDb250cm9sbGVyID0gY29uZmlnLnJhY2tDb250cm9sbGVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUGxhaW5WaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IENsYXNzTmFtZShjb25maWcudmlld05hbWUpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmRJbnB1dEJpbmRpbmdDb250cm9sbGVyKGJjcywgYikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJjcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBiY3NbaV07XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBJbnB1dEJpbmRpbmdDb250cm9sbGVyICYmIGJjLmJpbmRpbmcgPT09IGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIoYmNzLCBiKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmNzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGJjc1tpXTtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIE1vbml0b3JCaW5kaW5nQ29udHJvbGxlciAmJiBiYy5iaW5kaW5nID09PSBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJjO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kVmFsdWVCbGFkZUNvbnRyb2xsZXIoYmNzLCB2KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmNzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGJjc1tpXTtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIFZhbHVlQmxhZGVDb250cm9sbGVyICYmIGJjLnZhbHVlID09PSB2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJjO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kU3ViUmFjayhiYykge1xuICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBSYWNrQ29udHJvbGxlcikge1xuICAgICAgICAgICAgcmV0dXJuIGJjLnJhY2s7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgUmFja0xpa2VDb250cm9sbGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gYmMucmFja0NvbnRyb2xsZXIucmFjaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZFN1YkJsYWRlQ29udHJvbGxlclNldChiYykge1xuICAgICAgICBjb25zdCByYWNrID0gZmluZFN1YlJhY2soYmMpO1xuICAgICAgICByZXR1cm4gcmFjayA/IHJhY2tbJ2JjU2V0XyddIDogbnVsbDtcbiAgICB9XG4gICAgY2xhc3MgQmxhZGVSYWNrIHtcbiAgICAgICAgY29uc3RydWN0b3IoYmxhZGUpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHRoaXMub25CbGFkZVBvc2l0aW9uc0NoYW5nZV8gPSB0aGlzLm9uQmxhZGVQb3NpdGlvbnNDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uU2V0QWRkXyA9IHRoaXMub25TZXRBZGRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uU2V0UmVtb3ZlXyA9IHRoaXMub25TZXRSZW1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hpbGREaXNwb3NlXyA9IHRoaXMub25DaGlsZERpc3Bvc2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hpbGRQb3NpdGlvbnNDaGFuZ2VfID0gdGhpcy5vbkNoaWxkUG9zaXRpb25zQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkNoaWxkSW5wdXRDaGFuZ2VfID0gdGhpcy5vbkNoaWxkSW5wdXRDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hpbGRNb25pdG9yVXBkYXRlXyA9IHRoaXMub25DaGlsZE1vbml0b3JVcGRhdGVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hpbGRWYWx1ZUNoYW5nZV8gPSB0aGlzLm9uQ2hpbGRWYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZFZpZXdQcm9wc0NoYW5nZV8gPSB0aGlzLm9uQ2hpbGRWaWV3UHJvcHNDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uRGVzY2VuZGFudExheW91dF8gPSB0aGlzLm9uRGVzY2VuZGFudExheW91dF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25EZXNjZW5kYW50SW5wdXRDaGFuZ2VfID0gdGhpcy5vbkRlc2NlbmRhbnRJbnB1dENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25EZXNjZW5kYW50TW9uaXRvclVwZGF0ZV8gPVxuICAgICAgICAgICAgICAgIHRoaXMub25EZXNjZW5kYW50TW9uaXRvclVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmJsYWRlXyA9IGJsYWRlICE9PSBudWxsICYmIGJsYWRlICE9PSB2b2lkIDAgPyBibGFkZSA6IG51bGw7XG4gICAgICAgICAgICAoX2EgPSB0aGlzLmJsYWRlXykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKCdwb3NpdGlvbnMnKS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQmxhZGVQb3NpdGlvbnNDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuYmNTZXRfID0gbmV3IE5lc3RlZE9yZGVyZWRTZXQoZmluZFN1YkJsYWRlQ29udHJvbGxlclNldCk7XG4gICAgICAgICAgICB0aGlzLmJjU2V0Xy5lbWl0dGVyLm9uKCdhZGQnLCB0aGlzLm9uU2V0QWRkXyk7XG4gICAgICAgICAgICB0aGlzLmJjU2V0Xy5lbWl0dGVyLm9uKCdyZW1vdmUnLCB0aGlzLm9uU2V0UmVtb3ZlXyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGNoaWxkcmVuKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmNTZXRfLml0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIGFkZChiYywgb3B0X2luZGV4KSB7XG4gICAgICAgICAgICBpZiAoYmMucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgYmMucGFyZW50LnJlbW92ZShiYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiY1sncGFyZW50XyddID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMuYmNTZXRfLmFkZChiYywgb3B0X2luZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmUoYmMpIHtcbiAgICAgICAgICAgIGJjWydwYXJlbnRfJ10gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5iY1NldF8ucmVtb3ZlKGJjKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5kKGNvbnRyb2xsZXJDbGFzcykge1xuICAgICAgICAgICAgcmV0dXJuIGZvcmNlQ2FzdCh0aGlzLmJjU2V0Xy5hbGxJdGVtcygpLmZpbHRlcigoYmMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmMgaW5zdGFuY2VvZiBjb250cm9sbGVyQ2xhc3M7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgb25TZXRBZGRfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uc18oKTtcbiAgICAgICAgICAgIGNvbnN0IGlzUm9vdCA9IGV2LnRhcmdldCA9PT0gZXYucm9vdDtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdhZGQnLCB7XG4gICAgICAgICAgICAgICAgYmxhZGVDb250cm9sbGVyOiBldi5pdGVtLFxuICAgICAgICAgICAgICAgIGluZGV4OiBldi5pbmRleCxcbiAgICAgICAgICAgICAgICBpc1Jvb3Q6IGlzUm9vdCxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghaXNSb290KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmMgPSBldi5pdGVtO1xuICAgICAgICAgICAgYmMudmlld1Byb3BzLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGlsZFZpZXdQcm9wc0NoYW5nZV8pO1xuICAgICAgICAgICAgYmMuYmxhZGVcbiAgICAgICAgICAgICAgICAudmFsdWUoJ3Bvc2l0aW9ucycpXG4gICAgICAgICAgICAgICAgLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGlsZFBvc2l0aW9uc0NoYW5nZV8pO1xuICAgICAgICAgICAgYmMudmlld1Byb3BzLmhhbmRsZURpc3Bvc2UodGhpcy5vbkNoaWxkRGlzcG9zZV8pO1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgSW5wdXRCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGJjLmJpbmRpbmcuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoaWxkSW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJjIGluc3RhbmNlb2YgTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYmMuYmluZGluZy5lbWl0dGVyLm9uKCd1cGRhdGUnLCB0aGlzLm9uQ2hpbGRNb25pdG9yVXBkYXRlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiYyBpbnN0YW5jZW9mIFZhbHVlQmxhZGVDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYmMudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoaWxkVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhY2sgPSBmaW5kU3ViUmFjayhiYyk7XG4gICAgICAgICAgICAgICAgaWYgKHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1pdHRlciA9IHJhY2suZW1pdHRlcjtcbiAgICAgICAgICAgICAgICAgICAgZW1pdHRlci5vbignbGF5b3V0JywgdGhpcy5vbkRlc2NlbmRhbnRMYXlvdXRfKTtcbiAgICAgICAgICAgICAgICAgICAgZW1pdHRlci5vbignaW5wdXRjaGFuZ2UnLCB0aGlzLm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXyk7XG4gICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIub24oJ21vbml0b3J1cGRhdGUnLCB0aGlzLm9uRGVzY2VuZGFudE1vbml0b3JVcGRhdGVfKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25TZXRSZW1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uc18oKTtcbiAgICAgICAgICAgIGNvbnN0IGlzUm9vdCA9IGV2LnRhcmdldCA9PT0gZXYucm9vdDtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdyZW1vdmUnLCB7XG4gICAgICAgICAgICAgICAgYmxhZGVDb250cm9sbGVyOiBldi5pdGVtLFxuICAgICAgICAgICAgICAgIGlzUm9vdDogaXNSb290LFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFpc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiYyA9IGV2Lml0ZW07XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBJbnB1dEJpbmRpbmdDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYmMuYmluZGluZy5lbWl0dGVyLm9mZignY2hhbmdlJywgdGhpcy5vbkNoaWxkSW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJjIGluc3RhbmNlb2YgTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYmMuYmluZGluZy5lbWl0dGVyLm9mZigndXBkYXRlJywgdGhpcy5vbkNoaWxkTW9uaXRvclVwZGF0ZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmMgaW5zdGFuY2VvZiBWYWx1ZUJsYWRlQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGJjLnZhbHVlLmVtaXR0ZXIub2ZmKCdjaGFuZ2UnLCB0aGlzLm9uQ2hpbGRWYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFjayA9IGZpbmRTdWJSYWNrKGJjKTtcbiAgICAgICAgICAgICAgICBpZiAocmFjaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbWl0dGVyID0gcmFjay5lbWl0dGVyO1xuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLm9mZignbGF5b3V0JywgdGhpcy5vbkRlc2NlbmRhbnRMYXlvdXRfKTtcbiAgICAgICAgICAgICAgICAgICAgZW1pdHRlci5vZmYoJ2lucHV0Y2hhbmdlJywgdGhpcy5vbkRlc2NlbmRhbnRJbnB1dENoYW5nZV8pO1xuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLm9mZignbW9uaXRvcnVwZGF0ZScsIHRoaXMub25EZXNjZW5kYW50TW9uaXRvclVwZGF0ZV8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVQb3NpdGlvbnNfKCkge1xuICAgICAgICAgICAgY29uc3QgdmlzaWJsZUl0ZW1zID0gdGhpcy5iY1NldF8uaXRlbXMuZmlsdGVyKChiYykgPT4gIWJjLnZpZXdQcm9wcy5nZXQoJ2hpZGRlbicpKTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0VmlzaWJsZUl0ZW0gPSB2aXNpYmxlSXRlbXNbMF07XG4gICAgICAgICAgICBjb25zdCBsYXN0VmlzaWJsZUl0ZW0gPSB2aXNpYmxlSXRlbXNbdmlzaWJsZUl0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgdGhpcy5iY1NldF8uaXRlbXMuZm9yRWFjaCgoYmMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcyA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChiYyA9PT0gZmlyc3RWaXNpYmxlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBwcy5wdXNoKCdmaXJzdCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYmxhZGVfIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJsYWRlXy5nZXQoJ3Bvc2l0aW9ucycpLmluY2x1ZGVzKCd2ZXJ5Zmlyc3QnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHMucHVzaCgndmVyeWZpcnN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGJjID09PSBsYXN0VmlzaWJsZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcHMucHVzaCgnbGFzdCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYmxhZGVfIHx8IHRoaXMuYmxhZGVfLmdldCgncG9zaXRpb25zJykuaW5jbHVkZXMoJ3ZlcnlsYXN0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBzLnB1c2goJ3ZlcnlsYXN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYmMuYmxhZGUuc2V0KCdwb3NpdGlvbnMnLCBwcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoaWxkUG9zaXRpb25zQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zXygpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2xheW91dCcsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoaWxkVmlld1Byb3BzQ2hhbmdlXyhfZXYpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zXygpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2xheW91dCcsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoaWxkRGlzcG9zZV8oKSB7XG4gICAgICAgICAgICBjb25zdCBkaXNwb3NlZFVjcyA9IHRoaXMuYmNTZXRfLml0ZW1zLmZpbHRlcigoYmMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmMudmlld1Byb3BzLmdldCgnZGlzcG9zZWQnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGlzcG9zZWRVY3MuZm9yRWFjaCgoYmMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJjU2V0Xy5yZW1vdmUoYmMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGlsZElucHV0Q2hhbmdlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBmaW5kSW5wdXRCaW5kaW5nQ29udHJvbGxlcih0aGlzLmZpbmQoSW5wdXRCaW5kaW5nQ29udHJvbGxlciksIGV2LnNlbmRlcik7XG4gICAgICAgICAgICBpZiAoIWJjKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2lucHV0Y2hhbmdlJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogYmMsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogZXYub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoaWxkTW9uaXRvclVwZGF0ZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gZmluZE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcih0aGlzLmZpbmQoTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKSwgZXYuc2VuZGVyKTtcbiAgICAgICAgICAgIGlmICghYmMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbW9uaXRvcnVwZGF0ZScsIHtcbiAgICAgICAgICAgICAgICBibGFkZUNvbnRyb2xsZXI6IGJjLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hpbGRWYWx1ZUNoYW5nZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gZmluZFZhbHVlQmxhZGVDb250cm9sbGVyKHRoaXMuZmluZChWYWx1ZUJsYWRlQ29udHJvbGxlciksIGV2LnNlbmRlcik7XG4gICAgICAgICAgICBpZiAoIWJjKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2lucHV0Y2hhbmdlJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogYmMsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogZXYub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkRlc2NlbmRhbnRMYXlvdXRfKF8pIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zXygpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2xheW91dCcsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkRlc2NlbmRhbnRJbnB1dENoYW5nZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdpbnB1dGNoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBibGFkZUNvbnRyb2xsZXI6IGV2LmJsYWRlQ29udHJvbGxlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBldi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRGVzY2VuZGFudE1vbml0b3JVcGRhdGVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbW9uaXRvcnVwZGF0ZScsIHtcbiAgICAgICAgICAgICAgICBibGFkZUNvbnRyb2xsZXI6IGV2LmJsYWRlQ29udHJvbGxlcixcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkJsYWRlUG9zaXRpb25zQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUmFja0NvbnRyb2xsZXIgZXh0ZW5kcyBCbGFkZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgc3VwZXIoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb25maWcpLCB7IHZpZXc6IG5ldyBQbGFpblZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdOYW1lOiAnYnJrJyxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pIH0pKTtcbiAgICAgICAgICAgIHRoaXMub25SYWNrQWRkXyA9IHRoaXMub25SYWNrQWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblJhY2tSZW1vdmVfID0gdGhpcy5vblJhY2tSZW1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCByYWNrID0gbmV3IEJsYWRlUmFjayhjb25maWcucm9vdCA/IHVuZGVmaW5lZCA6IGNvbmZpZy5ibGFkZSk7XG4gICAgICAgICAgICByYWNrLmVtaXR0ZXIub24oJ2FkZCcsIHRoaXMub25SYWNrQWRkXyk7XG4gICAgICAgICAgICByYWNrLmVtaXR0ZXIub24oJ3JlbW92ZScsIHRoaXMub25SYWNrUmVtb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnJhY2sgPSByYWNrO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMuaGFuZGxlRGlzcG9zZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMucmFjay5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucmFjay5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgICAgICAgICAgYmMudmlld1Byb3BzLnNldCgnZGlzcG9zZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblJhY2tBZGRfKGV2KSB7XG4gICAgICAgICAgICBpZiAoIWV2LmlzUm9vdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluc2VydEVsZW1lbnRBdCh0aGlzLnZpZXcuZWxlbWVudCwgZXYuYmxhZGVDb250cm9sbGVyLnZpZXcuZWxlbWVudCwgZXYuaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIG9uUmFja1JlbW92ZV8oZXYpIHtcbiAgICAgICAgICAgIGlmICghZXYuaXNSb290KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVtb3ZlRWxlbWVudChldi5ibGFkZUNvbnRyb2xsZXIudmlldy5lbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGJsYWRlQ29udGFpbmVyQ2xhc3NOYW1lID0gQ2xhc3NOYW1lKCdjbnQnKTtcblxuICAgIGNsYXNzIEZvbGRlclZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdGhpcy5jbGFzc05hbWVfID0gQ2xhc3NOYW1lKChfYSA9IGNvbmZpZy52aWV3TmFtZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ2ZsZCcpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVfKCksIGJsYWRlQ29udGFpbmVyQ2xhc3NOYW1lKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGVfID0gY29uZmlnLmZvbGRhYmxlO1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZV8uYmluZEV4cGFuZGVkQ2xhc3ModGhpcy5lbGVtZW50LCB0aGlzLmNsYXNzTmFtZV8odW5kZWZpbmVkLCAnZXhwYW5kZWQnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAodGhpcy5mb2xkYWJsZV8sICdjb21wbGV0ZWQnLCB2YWx1ZVRvQ2xhc3NOYW1lKHRoaXMuZWxlbWVudCwgdGhpcy5jbGFzc05hbWVfKHVuZGVmaW5lZCwgJ2NwbCcpKSk7XG4gICAgICAgICAgICBjb25zdCBidXR0b25FbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgICAgYnV0dG9uRWxlbS5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lXygnYicpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcChjb25maWcucHJvcHMsICd0aXRsZScsICh0aXRsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KHRpdGxlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZV8odW5kZWZpbmVkLCAnbm90JykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5jbGFzc05hbWVfKHVuZGVmaW5lZCwgJ25vdCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50ID0gYnV0dG9uRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRpdGxlRWxlbS5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lXygndCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZVRvVGV4dENvbnRlbnQoY29uZmlnLnByb3BzLnZhbHVlKCd0aXRsZScpLCB0aXRsZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50LmFwcGVuZENoaWxkKHRpdGxlRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnRpdGxlRWxlbWVudCA9IHRpdGxlRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbWFya0VsZW0uY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZV8oJ20nKSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQuYXBwZW5kQ2hpbGQobWFya0VsZW0pO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyRWxlbSA9IGNvbmZpZy5jb250YWluZXJFbGVtZW50O1xuICAgICAgICAgICAgY29udGFpbmVyRWxlbS5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lXygnYycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChjb250YWluZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudCA9IGNvbnRhaW5lckVsZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBGb2xkZXJDb250cm9sbGVyIGV4dGVuZHMgUmFja0xpa2VDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IGZvbGRhYmxlID0gRm9sZGFibGUuY3JlYXRlKChfYSA9IGNvbmZpZy5leHBhbmRlZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCByYyA9IG5ldyBSYWNrQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogY29uZmlnLmJsYWRlLFxuICAgICAgICAgICAgICAgIHJvb3Q6IGNvbmZpZy5yb290LFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3VwZXIoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb25maWcpLCB7IHJhY2tDb250cm9sbGVyOiByYywgdmlldzogbmV3IEZvbGRlclZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsZW1lbnQ6IHJjLnZpZXcuZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgZm9sZGFibGU6IGZvbGRhYmxlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnByb3BzLFxuICAgICAgICAgICAgICAgICAgICB2aWV3TmFtZTogY29uZmlnLnJvb3QgPyAncm90JyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pIH0pKTtcbiAgICAgICAgICAgIHRoaXMub25UaXRsZUNsaWNrXyA9IHRoaXMub25UaXRsZUNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGUgPSBmb2xkYWJsZTtcbiAgICAgICAgICAgIGJpbmRGb2xkYWJsZSh0aGlzLmZvbGRhYmxlLCB0aGlzLnZpZXcuY29udGFpbmVyRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnJhY2tDb250cm9sbGVyLnJhY2suZW1pdHRlci5vbignYWRkJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9sZGFibGUuY2xlYW5VcFRyYW5zaXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yYWNrQ29udHJvbGxlci5yYWNrLmVtaXR0ZXIub24oJ3JlbW92ZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvbGRhYmxlLmNsZWFuVXBUcmFuc2l0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5idXR0b25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vblRpdGxlQ2xpY2tfKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZG9jdW1lbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aWV3LmVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICAgICAgfVxuICAgICAgICBvblRpdGxlQ2xpY2tfKCkge1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZS5zZXQoJ2V4cGFuZGVkJywgIXRoaXMuZm9sZGFibGUuZ2V0KCdleHBhbmRlZCcpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IEZvbGRlckJsYWRlUGx1Z2luID0ge1xuICAgICAgICBpZDogJ2ZvbGRlcicsXG4gICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgIGFjY2VwdChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IHAucmVxdWlyZWQuc3RyaW5nLFxuICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ2ZvbGRlcicpLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBwLm9wdGlvbmFsLmJvb2xlYW4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyB7IHBhcmFtczogcmVzdWx0IH0gOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyKGFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRm9sZGVyQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGFyZ3MucGFyYW1zLmV4cGFuZGVkLFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGFyZ3MucGFyYW1zLnRpdGxlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlciBpbnN0YW5jZW9mIEZvbGRlckNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZvbGRlckFwaShhcmdzLmNvbnRyb2xsZXIsIGFyZ3MucG9vbCk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsYXNzIExhYmVsZWRWYWx1ZUNvbnRyb2xsZXIgZXh0ZW5kcyBWYWx1ZUJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3UHJvcHMgPSBjb25maWcudmFsdWVDb250cm9sbGVyLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHN1cGVyKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKSwgeyB2YWx1ZTogY29uZmlnLnZhbHVlQ29udHJvbGxlci52YWx1ZSwgdmlldzogbmV3IExhYmVsVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiB2aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSksIHZpZXdQcm9wczogdmlld1Byb3BzIH0pKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ29udHJvbGxlciA9IGNvbmZpZy52YWx1ZUNvbnRyb2xsZXI7XG4gICAgICAgICAgICB0aGlzLnZpZXcudmFsdWVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudmFsdWVDb250cm9sbGVyLnZpZXcuZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBTZXBhcmF0b3JBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJG4gPSBDbGFzc05hbWUoJ3NwcicpO1xuICAgIGNsYXNzIFNlcGFyYXRvclZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJG4oKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgaHJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2hyJyk7XG4gICAgICAgICAgICBockVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbigncicpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChockVsZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU2VwYXJhdG9yQ29udHJvbGxlciBleHRlbmRzIEJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZyksIHsgdmlldzogbmV3IFNlcGFyYXRvclZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KSB9KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBTZXBhcmF0b3JCbGFkZVBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdzZXBhcmF0b3InLFxuICAgICAgICB0eXBlOiAnYmxhZGUnLFxuICAgICAgICBhY2NlcHQocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ3NlcGFyYXRvcicpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8geyBwYXJhbXM6IHJlc3VsdCB9IDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcihhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlcGFyYXRvckNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGJsYWRlOiBhcmdzLmJsYWRlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlciBpbnN0YW5jZW9mIFNlcGFyYXRvckNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlcGFyYXRvckFwaShhcmdzLmNvbnRyb2xsZXIpO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjbGFzc05hbWUkbSA9IENsYXNzTmFtZSgnJyk7XG4gICAgZnVuY3Rpb24gdmFsdWVUb01vZGlmaWVyKGVsZW0sIG1vZGlmaWVyKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVRvQ2xhc3NOYW1lKGVsZW0sIGNsYXNzTmFtZSRtKHVuZGVmaW5lZCwgbW9kaWZpZXIpKTtcbiAgICB9XG4gICAgY2xhc3MgVmlld1Byb3BzIGV4dGVuZHMgVmFsdWVNYXAge1xuICAgICAgICBjb25zdHJ1Y3Rvcih2YWx1ZU1hcCkge1xuICAgICAgICAgICAgc3VwZXIodmFsdWVNYXApO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBjcmVhdGUob3B0X2luaXRpYWxWYWx1ZSkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IG9wdF9pbml0aWFsVmFsdWUgIT09IG51bGwgJiYgb3B0X2luaXRpYWxWYWx1ZSAhPT0gdm9pZCAwID8gb3B0X2luaXRpYWxWYWx1ZSA6IHt9O1xuICAgICAgICAgICAgY29uc3QgY29yZU9iaiA9IHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogKF9hID0gaW5pdGlhbFZhbHVlLmRpc2FibGVkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkaXNwb3NlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiAoX2IgPSBpbml0aWFsVmFsdWUuaGlkZGVuKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBjb3JlID0gVmFsdWVNYXAuY3JlYXRlQ29yZShjb3JlT2JqKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmlld1Byb3BzKGNvcmUpO1xuICAgICAgICB9XG4gICAgICAgIGJpbmRDbGFzc01vZGlmaWVycyhlbGVtKSB7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAodGhpcywgJ2Rpc2FibGVkJywgdmFsdWVUb01vZGlmaWVyKGVsZW0sICdkaXNhYmxlZCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLCAnaGlkZGVuJywgdmFsdWVUb01vZGlmaWVyKGVsZW0sICdoaWRkZW4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgYmluZERpc2FibGVkKHRhcmdldCkge1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMsICdkaXNhYmxlZCcsIChkaXNhYmxlZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRhcmdldC5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYmluZFRhYkluZGV4KGVsZW0pIHtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLCAnZGlzYWJsZWQnLCAoZGlzYWJsZWQpID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtLnRhYkluZGV4ID0gZGlzYWJsZWQgPyAtMSA6IDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVEaXNwb3NlKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlKCdkaXNwb3NlZCcpLmVtaXR0ZXIub24oJ2NoYW5nZScsIChkaXNwb3NlZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkaXNwb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGwgPSBDbGFzc05hbWUoJ3RiaScpO1xuICAgIGNsYXNzIFRhYkl0ZW1WaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRsKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcChjb25maWcucHJvcHMsICdzZWxlY3RlZCcsIChzZWxlY3RlZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbCh1bmRlZmluZWQsICdzZWwnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUkbCh1bmRlZmluZWQsICdzZWwnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBidXR0b25FbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgICAgYnV0dG9uRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRsKCdiJykpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQgPSBidXR0b25FbGVtO1xuICAgICAgICAgICAgY29uc3QgdGl0bGVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGl0bGVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGwoJ3QnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVUb1RleHRDb250ZW50KGNvbmZpZy5wcm9wcy52YWx1ZSgndGl0bGUnKSwgdGl0bGVFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudC5hcHBlbmRDaGlsZCh0aXRsZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy50aXRsZUVsZW1lbnQgPSB0aXRsZUVsZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUYWJJdGVtQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5vbkNsaWNrXyA9IHRoaXMub25DbGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgVGFiSXRlbVZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5wcm9wcyxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5idXR0b25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrXyk7XG4gICAgICAgIH1cbiAgICAgICAgb25DbGlja18oKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2xpY2snLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUYWJQYWdlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uSXRlbUNsaWNrXyA9IHRoaXMub25JdGVtQ2xpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmljXyA9IG5ldyBUYWJJdGVtQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLml0ZW1Qcm9wcyxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IFZpZXdQcm9wcy5jcmVhdGUoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5pY18uZW1pdHRlci5vbignY2xpY2snLCB0aGlzLm9uSXRlbUNsaWNrXyk7XG4gICAgICAgICAgICB0aGlzLmNjXyA9IG5ldyBSYWNrQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogY3JlYXRlQmxhZGUoKSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IFZpZXdQcm9wcy5jcmVhdGUoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLnByb3BzLCAnc2VsZWN0ZWQnLCAoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1Db250cm9sbGVyLnByb3BzLnNldCgnc2VsZWN0ZWQnLCBzZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZW50Q29udHJvbGxlci52aWV3UHJvcHMuc2V0KCdoaWRkZW4nLCAhc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGl0ZW1Db250cm9sbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWNfO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjb250ZW50Q29udHJvbGxlcigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNjXztcbiAgICAgICAgfVxuICAgICAgICBvbkl0ZW1DbGlja18oKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLnNldCgnc2VsZWN0ZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRhYlBhZ2VBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyLCBjb250ZW50UmFja0FwaSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfID0gY29udGVudFJhY2tBcGk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRpdGxlKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuY29udHJvbGxlcl8uaXRlbUNvbnRyb2xsZXIucHJvcHMuZ2V0KCd0aXRsZScpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgfVxuICAgICAgICBzZXQgdGl0bGUodGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uaXRlbUNvbnRyb2xsZXIucHJvcHMuc2V0KCd0aXRsZScsIHRpdGxlKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ3NlbGVjdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHNlbGVjdGVkKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgnc2VsZWN0ZWQnLCBzZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGNoaWxkcmVuKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uY2hpbGRyZW47XG4gICAgICAgIH1cbiAgICAgICAgYWRkQnV0dG9uKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkQnV0dG9uKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkRm9sZGVyKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkRm9sZGVyKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkU2VwYXJhdG9yKG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZFNlcGFyYXRvcihvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRUYWIocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRUYWIocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGQoYXBpLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8uYWRkKGFwaSwgb3B0X2luZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmUoYXBpKSB7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfLnJlbW92ZShhcGkpO1xuICAgICAgICB9XG4gICAgICAgIGFkZElucHV0KG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRJbnB1dChvYmplY3QsIGtleSwgb3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkTW9uaXRvcihvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkTW9uaXRvcihvYmplY3QsIGtleSwgb3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkQmxhZGUocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRCbGFkZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgVGFiQXBpIGV4dGVuZHMgUmFja0xpa2VBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyLCBwb29sKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyLCBuZXcgUmFja0FwaShjb250cm9sbGVyLnJhY2tDb250cm9sbGVyLCBwb29sKSk7XG4gICAgICAgICAgICB0aGlzLm9uUGFnZUFkZF8gPSB0aGlzLm9uUGFnZUFkZF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlUmVtb3ZlXyA9IHRoaXMub25QYWdlUmVtb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblNlbGVjdF8gPSB0aGlzLm9uU2VsZWN0Xy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLnBhZ2VBcGlNYXBfID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXy5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBldixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXy5vbigndXBkYXRlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCd1cGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBldixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy50YWIuc2VsZWN0ZWRJbmRleC5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uU2VsZWN0Xyk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnBhZ2VTZXQuZW1pdHRlci5vbignYWRkJywgdGhpcy5vblBhZ2VBZGRfKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucGFnZVNldC5lbWl0dGVyLm9uKCdyZW1vdmUnLCB0aGlzLm9uUGFnZVJlbW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wYWdlU2V0Lml0ZW1zLmZvckVhY2goKHBjKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRVcFBhZ2VBcGlfKHBjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBwYWdlcygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnBhZ2VTZXQuaXRlbXMubWFwKChwYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwaSA9IHRoaXMucGFnZUFwaU1hcF8uZ2V0KHBjKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhcGk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBhZGRQYWdlKHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5jb250cm9sbGVyXy52aWV3LmVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICAgICAgICAgIGNvbnN0IHBjID0gbmV3IFRhYlBhZ2VDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGl0ZW1Qcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhcmFtcy50aXRsZSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5hZGQocGMsIHBhcmFtcy5pbmRleCk7XG4gICAgICAgICAgICBjb25zdCBhcGkgPSB0aGlzLnBhZ2VBcGlNYXBfLmdldChwYyk7XG4gICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcGk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlUGFnZShpbmRleCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yZW1vdmUoaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBzZXRVcFBhZ2VBcGlfKHBjKSB7XG4gICAgICAgICAgICBjb25zdCByYWNrQXBpID0gdGhpcy5yYWNrQXBpX1snYXBpU2V0XyddLmZpbmQoKGFwaSkgPT4gYXBpLmNvbnRyb2xsZXJfID09PSBwYy5jb250ZW50Q29udHJvbGxlcik7XG4gICAgICAgICAgICBpZiAoIXJhY2tBcGkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhcGkgPSBuZXcgVGFiUGFnZUFwaShwYywgcmFja0FwaSk7XG4gICAgICAgICAgICB0aGlzLnBhZ2VBcGlNYXBfLnNldChwYywgYXBpKTtcbiAgICAgICAgfVxuICAgICAgICBvblBhZ2VBZGRfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLnNldFVwUGFnZUFwaV8oZXYuaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgb25QYWdlUmVtb3ZlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYXBpID0gdGhpcy5wYWdlQXBpTWFwXy5nZXQoZXYuaXRlbSk7XG4gICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFnZUFwaU1hcF8uZGVsZXRlKGV2Lml0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIG9uU2VsZWN0Xyhldikge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdzZWxlY3QnLCB7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcFRhYlNlbGVjdEV2ZW50KHRoaXMsIGV2LnJhd1ZhbHVlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgSU5ERVhfTk9UX1NFTEVDVEVEID0gLTE7XG4gICAgY2xhc3MgVGFiIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLm9uSXRlbVNlbGVjdGVkQ2hhbmdlXyA9IHRoaXMub25JdGVtU2VsZWN0ZWRDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtcHR5ID0gY3JlYXRlVmFsdWUodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBjcmVhdGVWYWx1ZShJTkRFWF9OT1RfU0VMRUNURUQpO1xuICAgICAgICAgICAgdGhpcy5pdGVtc18gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBhZGQoaXRlbSwgb3B0X2luZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IG9wdF9pbmRleCAhPT0gbnVsbCAmJiBvcHRfaW5kZXggIT09IHZvaWQgMCA/IG9wdF9pbmRleCA6IHRoaXMuaXRlbXNfLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNfLnNwbGljZShpbmRleCwgMCwgaXRlbSk7XG4gICAgICAgICAgICBpdGVtLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25JdGVtU2VsZWN0ZWRDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMua2VlcFNlbGVjdGlvbl8oKTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmUoaXRlbSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLml0ZW1zXy5pbmRleE9mKGl0ZW0pO1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXRlbXNfLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICBpdGVtLmVtaXR0ZXIub2ZmKCdjaGFuZ2UnLCB0aGlzLm9uSXRlbVNlbGVjdGVkQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmtlZXBTZWxlY3Rpb25fKCk7XG4gICAgICAgIH1cbiAgICAgICAga2VlcFNlbGVjdGlvbl8oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtc18ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4LnJhd1ZhbHVlID0gSU5ERVhfTk9UX1NFTEVDVEVEO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1wdHkucmF3VmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0U2VsSW5kZXggPSB0aGlzLml0ZW1zXy5maW5kSW5kZXgoKHMpID0+IHMucmF3VmFsdWUpO1xuICAgICAgICAgICAgaWYgKGZpcnN0U2VsSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc18uZm9yRWFjaCgocywgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzLnJhd1ZhbHVlID0gaSA9PT0gMDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXgucmF3VmFsdWUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc18uZm9yRWFjaCgocywgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzLnJhd1ZhbHVlID0gaSA9PT0gZmlyc3RTZWxJbmRleDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXgucmF3VmFsdWUgPSBmaXJzdFNlbEluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbXB0eS5yYXdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIG9uSXRlbVNlbGVjdGVkQ2hhbmdlXyhldikge1xuICAgICAgICAgICAgaWYgKGV2LnJhd1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLml0ZW1zXy5maW5kSW5kZXgoKHMpID0+IHMgPT09IGV2LnNlbmRlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc18uZm9yRWFjaCgocywgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzLnJhd1ZhbHVlID0gaSA9PT0gaW5kZXg7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4LnJhd1ZhbHVlID0gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmtlZXBTZWxlY3Rpb25fKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkayA9IENsYXNzTmFtZSgndGFiJyk7XG4gICAgY2xhc3MgVGFiVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaygpLCBibGFkZUNvbnRhaW5lckNsYXNzTmFtZSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBiaW5kVmFsdWUoY29uZmlnLmVtcHR5LCB2YWx1ZVRvQ2xhc3NOYW1lKHRoaXMuZWxlbWVudCwgY2xhc3NOYW1lJGsodW5kZWZpbmVkLCAnbm9wJykpKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGl0ZW1zRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRrKCdpJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGl0ZW1zRWxlbSk7XG4gICAgICAgICAgICB0aGlzLml0ZW1zRWxlbWVudCA9IGl0ZW1zRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzRWxlbSA9IGNvbmZpZy5jb250ZW50c0VsZW1lbnQ7XG4gICAgICAgICAgICBjb250ZW50c0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaygnYycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChjb250ZW50c0VsZW0pO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50c0VsZW1lbnQgPSBjb250ZW50c0VsZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUYWJDb250cm9sbGVyIGV4dGVuZHMgUmFja0xpa2VDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNyID0gbmV3IFJhY2tDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGJsYWRlOiBjb25maWcuYmxhZGUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCB0YWIgPSBuZXcgVGFiKCk7XG4gICAgICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGNvbmZpZy5ibGFkZSxcbiAgICAgICAgICAgICAgICByYWNrQ29udHJvbGxlcjogY3IsXG4gICAgICAgICAgICAgICAgdmlldzogbmV3IFRhYlZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzRWxlbWVudDogY3Iudmlldy5lbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBlbXB0eTogdGFiLmVtcHR5LFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlQWRkXyA9IHRoaXMub25QYWdlQWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBhZ2VSZW1vdmVfID0gdGhpcy5vblBhZ2VSZW1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTZXRfID0gbmV3IE5lc3RlZE9yZGVyZWRTZXQoKCkgPT4gbnVsbCk7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTZXRfLmVtaXR0ZXIub24oJ2FkZCcsIHRoaXMub25QYWdlQWRkXyk7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTZXRfLmVtaXR0ZXIub24oJ3JlbW92ZScsIHRoaXMub25QYWdlUmVtb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnRhYiA9IHRhYjtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcGFnZVNldCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZ2VTZXRfO1xuICAgICAgICB9XG4gICAgICAgIGFkZChwYywgb3B0X2luZGV4KSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTZXRfLmFkZChwYywgb3B0X2luZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmUoaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZVNldF8ucmVtb3ZlKHRoaXMucGFnZVNldF8uaXRlbXNbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgICBvblBhZ2VBZGRfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBwYyA9IGV2Lml0ZW07XG4gICAgICAgICAgICBpbnNlcnRFbGVtZW50QXQodGhpcy52aWV3Lml0ZW1zRWxlbWVudCwgcGMuaXRlbUNvbnRyb2xsZXIudmlldy5lbGVtZW50LCBldi5pbmRleCk7XG4gICAgICAgICAgICB0aGlzLnJhY2tDb250cm9sbGVyLnJhY2suYWRkKHBjLmNvbnRlbnRDb250cm9sbGVyLCBldi5pbmRleCk7XG4gICAgICAgICAgICB0aGlzLnRhYi5hZGQocGMucHJvcHMudmFsdWUoJ3NlbGVjdGVkJykpO1xuICAgICAgICB9XG4gICAgICAgIG9uUGFnZVJlbW92ZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHBjID0gZXYuaXRlbTtcbiAgICAgICAgICAgIHJlbW92ZUVsZW1lbnQocGMuaXRlbUNvbnRyb2xsZXIudmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucmFja0NvbnRyb2xsZXIucmFjay5yZW1vdmUocGMuY29udGVudENvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy50YWIucmVtb3ZlKHBjLnByb3BzLnZhbHVlKCdzZWxlY3RlZCcpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IFRhYkJsYWRlUGx1Z2luID0ge1xuICAgICAgICBpZDogJ3RhYicsXG4gICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgIGFjY2VwdChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgcGFnZXM6IHAucmVxdWlyZWQuYXJyYXkocC5yZXF1aXJlZC5vYmplY3QoeyB0aXRsZTogcC5yZXF1aXJlZC5zdHJpbmcgfSkpLFxuICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ3RhYicpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQucGFnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBwYXJhbXM6IHJlc3VsdCB9O1xuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyKGFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgVGFiQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXJncy5wYXJhbXMucGFnZXMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBjID0gbmV3IFRhYlBhZ2VDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbVByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjLmFkZChwYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICB9LFxuICAgICAgICBhcGkoYXJncykge1xuICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyIGluc3RhbmNlb2YgVGFiQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgVGFiQXBpKGFyZ3MuY29udHJvbGxlciwgYXJncy5wb29sKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlQmxhZGVDb250cm9sbGVyKHBsdWdpbiwgYXJncykge1xuICAgICAgICBjb25zdCBhYyA9IHBsdWdpbi5hY2NlcHQoYXJncy5wYXJhbXMpO1xuICAgICAgICBpZiAoIWFjKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXNhYmxlZCA9IFBhcmFtc1BhcnNlcnMub3B0aW9uYWwuYm9vbGVhbihhcmdzLnBhcmFtc1snZGlzYWJsZWQnXSkudmFsdWU7XG4gICAgICAgIGNvbnN0IGhpZGRlbiA9IFBhcmFtc1BhcnNlcnMub3B0aW9uYWwuYm9vbGVhbihhcmdzLnBhcmFtc1snaGlkZGVuJ10pLnZhbHVlO1xuICAgICAgICByZXR1cm4gcGx1Z2luLmNvbnRyb2xsZXIoe1xuICAgICAgICAgICAgYmxhZGU6IGNyZWF0ZUJsYWRlKCksXG4gICAgICAgICAgICBkb2N1bWVudDogYXJncy5kb2N1bWVudCxcbiAgICAgICAgICAgIHBhcmFtczogZm9yY2VDYXN0KE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYWMucGFyYW1zKSwgeyBkaXNhYmxlZDogZGlzYWJsZWQsIGhpZGRlbjogaGlkZGVuIH0pKSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogVmlld1Byb3BzLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgICAgICAgIGhpZGRlbjogaGlkZGVuLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIE1hbnVhbFRpY2tlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBkaXNwb3NlKCkgeyB9XG4gICAgICAgIHRpY2soKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCd0aWNrJywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgSW50ZXJ2YWxUaWNrZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGludGVydmFsKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkXyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50aW1lcklkXyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLm9uVGlja18gPSB0aGlzLm9uVGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZG9jXyA9IGRvYztcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmludGVydmFsXyA9IGludGVydmFsO1xuICAgICAgICAgICAgdGhpcy5zZXRUaW1lcl8oKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZF87XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGRpc2FibGVkKGluYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkXyA9IGluYWN0aXZlO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWRfKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclRpbWVyXygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUaW1lcl8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkaXNwb3NlKCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhclRpbWVyXygpO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFyVGltZXJfKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZXJJZF8gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB3aW4gPSB0aGlzLmRvY18uZGVmYXVsdFZpZXc7XG4gICAgICAgICAgICBpZiAod2luKSB7XG4gICAgICAgICAgICAgICAgd2luLmNsZWFySW50ZXJ2YWwodGhpcy50aW1lcklkXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRpbWVySWRfID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lcl8oKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGltZXJfKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnRlcnZhbF8gPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHdpbiA9IHRoaXMuZG9jXy5kZWZhdWx0VmlldztcbiAgICAgICAgICAgIGlmICh3aW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVySWRfID0gd2luLnNldEludGVydmFsKHRoaXMub25UaWNrXywgdGhpcy5pbnRlcnZhbF8pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uVGlja18oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZF8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndGljaycsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIENvbXBvc2l0ZUNvbnN0cmFpbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25zdHJhaW50cykge1xuICAgICAgICAgICAgdGhpcy5jb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cmFpbih2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RyYWludHMucmVkdWNlKChyZXN1bHQsIGMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYy5jb25zdHJhaW4ocmVzdWx0KTtcbiAgICAgICAgICAgIH0sIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kQ29uc3RyYWludChjLCBjb25zdHJhaW50Q2xhc3MpIHtcbiAgICAgICAgaWYgKGMgaW5zdGFuY2VvZiBjb25zdHJhaW50Q2xhc3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjIGluc3RhbmNlb2YgQ29tcG9zaXRlQ29uc3RyYWludCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYy5jb25zdHJhaW50cy5yZWR1Y2UoKHRtcFJlc3VsdCwgc2MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodG1wUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0bXBSZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzYyBpbnN0YW5jZW9mIGNvbnN0cmFpbnRDbGFzcyA/IHNjIDogbnVsbDtcbiAgICAgICAgICAgIH0sIG51bGwpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY2xhc3MgTGlzdENvbnN0cmFpbnQge1xuICAgICAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cmFpbih2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgICAgIGlmIChvcHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBvcHRzLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnZhbHVlID09PSB2YWx1ZTtcbiAgICAgICAgICAgIH0pLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlZCA/IHZhbHVlIDogb3B0c1swXS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFJhbmdlQ29uc3RyYWludCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IGNvbmZpZy5tYXg7XG4gICAgICAgICAgICB0aGlzLm1pblZhbHVlID0gY29uZmlnLm1pbjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJhaW4odmFsdWUpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghaXNFbXB0eSh0aGlzLm1pblZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IE1hdGgubWF4KHJlc3VsdCwgdGhpcy5taW5WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkodGhpcy5tYXhWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBNYXRoLm1pbihyZXN1bHQsIHRoaXMubWF4VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFN0ZXBDb25zdHJhaW50IHtcbiAgICAgICAgY29uc3RydWN0b3Ioc3RlcCwgb3JpZ2luID0gMCkge1xuICAgICAgICAgICAgdGhpcy5zdGVwID0gc3RlcDtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luID0gb3JpZ2luO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cmFpbih2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgbyA9IHRoaXMub3JpZ2luICUgdGhpcy5zdGVwO1xuICAgICAgICAgICAgY29uc3QgciA9IE1hdGgucm91bmQoKHZhbHVlIC0gbykgLyB0aGlzLnN0ZXApO1xuICAgICAgICAgICAgcmV0dXJuIG8gKyByICogdGhpcy5zdGVwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGogPSBDbGFzc05hbWUoJ2xzdCcpO1xuICAgIGNsYXNzIExpc3RWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnByb3BzXyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRqKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7XG4gICAgICAgICAgICBzZWxlY3RFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGooJ3MnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAodGhpcy5wcm9wc18sICdvcHRpb25zJywgKG9wdHMpID0+IHtcbiAgICAgICAgICAgICAgICByZW1vdmVDaGlsZEVsZW1lbnRzKHNlbGVjdEVsZW0pO1xuICAgICAgICAgICAgICAgIG9wdHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbS5kYXRhc2V0LmluZGV4ID0gU3RyaW5nKGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbS50ZXh0Q29udGVudCA9IGl0ZW0udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbS52YWx1ZSA9IFN0cmluZyhpdGVtLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbS5hcHBlbmRDaGlsZChvcHRpb25FbGVtKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoc2VsZWN0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc2VsZWN0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVsZW1lbnQgPSBzZWxlY3RFbGVtO1xuICAgICAgICAgICAgY29uc3QgbWFya0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtYXJrRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRqKCdtJykpO1xuICAgICAgICAgICAgbWFya0VsZW0uYXBwZW5kQ2hpbGQoY3JlYXRlU3ZnSWNvbkVsZW1lbnQoZG9jLCAnZHJvcGRvd24nKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobWFya0VsZW0pO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZV8gPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RFbGVtZW50LnZhbHVlID0gU3RyaW5nKHRoaXMudmFsdWVfLnJhd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgTGlzdENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblNlbGVjdENoYW5nZV8gPSB0aGlzLm9uU2VsZWN0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgTGlzdFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LnNlbGVjdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vblNlbGVjdENoYW5nZV8pO1xuICAgICAgICB9XG4gICAgICAgIG9uU2VsZWN0Q2hhbmdlXyhlKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RFbGVtID0gZm9yY2VDYXN0KGUuY3VycmVudFRhcmdldCk7XG4gICAgICAgICAgICBjb25zdCBvcHRFbGVtID0gc2VsZWN0RWxlbS5zZWxlY3RlZE9wdGlvbnMuaXRlbSgwKTtcbiAgICAgICAgICAgIGlmICghb3B0RWxlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IE51bWJlcihvcHRFbGVtLmRhdGFzZXQuaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IHRoaXMucHJvcHMuZ2V0KCdvcHRpb25zJylbaXRlbUluZGV4XS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRpID0gQ2xhc3NOYW1lKCdwb3AnKTtcbiAgICBjbGFzcyBQb3B1cFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGkoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgYmluZFZhbHVlKGNvbmZpZy5zaG93cywgdmFsdWVUb0NsYXNzTmFtZSh0aGlzLmVsZW1lbnQsIGNsYXNzTmFtZSRpKHVuZGVmaW5lZCwgJ3YnKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUG9wdXBDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd3MgPSBjcmVhdGVWYWx1ZShmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgUG9wdXBWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHNob3dzOiB0aGlzLnNob3dzLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRoID0gQ2xhc3NOYW1lKCd0eHQnKTtcbiAgICBjbGFzcyBUZXh0VmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlXyA9IHRoaXMub25DaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaCgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnByb3BzXyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMucHJvcHNfLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGFuZ2VfKTtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgaW5wdXRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGgoJ2knKSk7XG4gICAgICAgICAgICBpbnB1dEVsZW0udHlwZSA9ICd0ZXh0JztcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGlucHV0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50ID0gaW5wdXRFbGVtO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVfID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHRoaXMucHJvcHNfLmdldCgnZm9ybWF0dGVyJyk7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC52YWx1ZSA9IGZvcm1hdHRlcih0aGlzLnZhbHVlXy5yYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUZXh0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2VfID0gdGhpcy5vbklucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wYXJzZXJfID0gY29uZmlnLnBhcnNlcjtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFRleHRWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcucHJvcHMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uSW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgfVxuICAgICAgICBvbklucHV0Q2hhbmdlXyhlKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW0gPSBmb3JjZUNhc3QoZS5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXRFbGVtLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnBhcnNlcl8odmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KHBhcnNlZFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUgPSBwYXJzZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmlldy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBib29sVG9TdHJpbmcodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJvb2xGcm9tVW5rbm93bih2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISF2YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gQm9vbGVhbkZvcm1hdHRlcih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYm9vbFRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG5cbiAgICBjbGFzcyBOdW1iZXJMaXRlcmFsTm9kZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHRleHQpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgZXZhbHVhdGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMudGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IEJJTkFSWV9PUEVSQVRJT05fTUFQID0ge1xuICAgICAgICAnKionOiAodjEsIHYyKSA9PiBNYXRoLnBvdyh2MSwgdjIpLFxuICAgICAgICAnKic6ICh2MSwgdjIpID0+IHYxICogdjIsXG4gICAgICAgICcvJzogKHYxLCB2MikgPT4gdjEgLyB2MixcbiAgICAgICAgJyUnOiAodjEsIHYyKSA9PiB2MSAlIHYyLFxuICAgICAgICAnKyc6ICh2MSwgdjIpID0+IHYxICsgdjIsXG4gICAgICAgICctJzogKHYxLCB2MikgPT4gdjEgLSB2MixcbiAgICAgICAgJzw8JzogKHYxLCB2MikgPT4gdjEgPDwgdjIsXG4gICAgICAgICc+Pic6ICh2MSwgdjIpID0+IHYxID4+IHYyLFxuICAgICAgICAnPj4+JzogKHYxLCB2MikgPT4gdjEgPj4+IHYyLFxuICAgICAgICAnJic6ICh2MSwgdjIpID0+IHYxICYgdjIsXG4gICAgICAgICdeJzogKHYxLCB2MikgPT4gdjEgXiB2MixcbiAgICAgICAgJ3wnOiAodjEsIHYyKSA9PiB2MSB8IHYyLFxuICAgIH07XG4gICAgY2xhc3MgQmluYXJ5T3BlcmF0aW9uTm9kZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICAgICAgfVxuICAgICAgICBldmFsdWF0ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wID0gQklOQVJZX09QRVJBVElPTl9NQVBbdGhpcy5vcGVyYXRvcl07XG4gICAgICAgICAgICBpZiAoIW9wKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIGJpbmFyeSBvcGVyYXRvcjogJyR7dGhpcy5vcGVyYXRvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcCh0aGlzLmxlZnQuZXZhbHVhdGUoKSwgdGhpcy5yaWdodC5ldmFsdWF0ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgJ2IoJyxcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdG9yLFxuICAgICAgICAgICAgICAgIHRoaXMucmlnaHQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAnKScsXG4gICAgICAgICAgICBdLmpvaW4oJyAnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBVTkFSWV9PUEVSQVRJT05fTUFQID0ge1xuICAgICAgICAnKyc6ICh2KSA9PiB2LFxuICAgICAgICAnLSc6ICh2KSA9PiAtdixcbiAgICAgICAgJ34nOiAodikgPT4gfnYsXG4gICAgfTtcbiAgICBjbGFzcyBVbmFyeU9wZXJhdGlvbk5vZGUge1xuICAgICAgICBjb25zdHJ1Y3RvcihvcGVyYXRvciwgZXhwcikge1xuICAgICAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcjtcbiAgICAgICAgfVxuICAgICAgICBldmFsdWF0ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wID0gVU5BUllfT1BFUkFUSU9OX01BUFt0aGlzLm9wZXJhdG9yXTtcbiAgICAgICAgICAgIGlmICghb3ApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgdW5hcnkgb3BlcmF0b3I6ICcke3RoaXMub3BlcmF0b3J9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3AodGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIFsndSgnLCB0aGlzLm9wZXJhdG9yLCB0aGlzLmV4cHJlc3Npb24udG9TdHJpbmcoKSwgJyknXS5qb2luKCcgJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21iaW5lUmVhZGVyKHBhcnNlcnMpIHtcbiAgICAgICAgcmV0dXJuICh0ZXh0LCBjdXJzb3IpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyc2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlcnNbaV0odGV4dCwgY3Vyc29yKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZFdoaXRlc3BhY2UodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgbSA9IHRleHQuc3Vic3RyKGN1cnNvcikubWF0Y2goL15cXHMrLyk7XG4gICAgICAgIHJldHVybiAoX2EgPSAobSAmJiBtWzBdKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWROb25aZXJvRGlnaXQodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGNoID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgcmV0dXJuIGNoLm1hdGNoKC9eWzEtOV0kLykgPyBjaCA6ICcnO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkRGVjaW1hbERpZ2l0cyh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtID0gdGV4dC5zdWJzdHIoY3Vyc29yKS5tYXRjaCgvXlswLTldKy8pO1xuICAgICAgICByZXR1cm4gKF9hID0gKG0gJiYgbVswXSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkU2lnbmVkSW50ZWdlcih0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgZHMgPSByZWFkRGVjaW1hbERpZ2l0cyh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAoZHMgIT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gZHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2lnbiA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGN1cnNvciArPSAxO1xuICAgICAgICBpZiAoc2lnbiAhPT0gJy0nICYmIHNpZ24gIT09ICcrJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNkcyA9IHJlYWREZWNpbWFsRGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChzZHMgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNpZ24gKyBzZHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRFeHBvbmVudFBhcnQodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGUgPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBjdXJzb3IgKz0gMTtcbiAgICAgICAgaWYgKGUudG9Mb3dlckNhc2UoKSAhPT0gJ2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2kgPSByZWFkU2lnbmVkSW50ZWdlcih0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAoc2kgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGUgKyBzaTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZERlY2ltYWxJbnRlZ2VyTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgY2ggPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBpZiAoY2ggPT09ICcwJykge1xuICAgICAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG56ZCA9IHJlYWROb25aZXJvRGlnaXQodGV4dCwgY3Vyc29yKTtcbiAgICAgICAgY3Vyc29yICs9IG56ZC5sZW5ndGg7XG4gICAgICAgIGlmIChuemQgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG56ZCArIHJlYWREZWNpbWFsRGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWREZWNpbWFsTGl0ZXJhbDEodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGRpbCA9IHJlYWREZWNpbWFsSW50ZWdlckxpdGVyYWwodGV4dCwgY3Vyc29yKTtcbiAgICAgICAgY3Vyc29yICs9IGRpbC5sZW5ndGg7XG4gICAgICAgIGlmIChkaWwgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG90ID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgY3Vyc29yICs9IGRvdC5sZW5ndGg7XG4gICAgICAgIGlmIChkb3QgIT09ICcuJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRkcyA9IHJlYWREZWNpbWFsRGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGN1cnNvciArPSBkZHMubGVuZ3RoO1xuICAgICAgICByZXR1cm4gZGlsICsgZG90ICsgZGRzICsgcmVhZEV4cG9uZW50UGFydCh0ZXh0LCBjdXJzb3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkRGVjaW1hbExpdGVyYWwyKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBkb3QgPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBjdXJzb3IgKz0gZG90Lmxlbmd0aDtcbiAgICAgICAgaWYgKGRvdCAhPT0gJy4nKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGRzID0gcmVhZERlY2ltYWxEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICAgICAgY3Vyc29yICs9IGRkcy5sZW5ndGg7XG4gICAgICAgIGlmIChkZHMgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRvdCArIGRkcyArIHJlYWRFeHBvbmVudFBhcnQodGV4dCwgY3Vyc29yKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZERlY2ltYWxMaXRlcmFsMyh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgZGlsID0gcmVhZERlY2ltYWxJbnRlZ2VyTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gZGlsLmxlbmd0aDtcbiAgICAgICAgaWYgKGRpbCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlsICsgcmVhZEV4cG9uZW50UGFydCh0ZXh0LCBjdXJzb3IpO1xuICAgIH1cbiAgICBjb25zdCByZWFkRGVjaW1hbExpdGVyYWwgPSBjb21iaW5lUmVhZGVyKFtcbiAgICAgICAgcmVhZERlY2ltYWxMaXRlcmFsMSxcbiAgICAgICAgcmVhZERlY2ltYWxMaXRlcmFsMixcbiAgICAgICAgcmVhZERlY2ltYWxMaXRlcmFsMyxcbiAgICBdKTtcbiAgICBmdW5jdGlvbiBwYXJzZUJpbmFyeURpZ2l0cyh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtID0gdGV4dC5zdWJzdHIoY3Vyc29yKS5tYXRjaCgvXlswMV0rLyk7XG4gICAgICAgIHJldHVybiAoX2EgPSAobSAmJiBtWzBdKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRCaW5hcnlJbnRlZ2VyTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAyKTtcbiAgICAgICAgY3Vyc29yICs9IHByZWZpeC5sZW5ndGg7XG4gICAgICAgIGlmIChwcmVmaXgudG9Mb3dlckNhc2UoKSAhPT0gJzBiJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJkcyA9IHBhcnNlQmluYXJ5RGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChiZHMgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZWZpeCArIGJkcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZE9jdGFsRGlnaXRzKHRleHQsIGN1cnNvcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0LnN1YnN0cihjdXJzb3IpLm1hdGNoKC9eWzAtN10rLyk7XG4gICAgICAgIHJldHVybiAoX2EgPSAobSAmJiBtWzBdKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRPY3RhbEludGVnZXJMaXRlcmFsKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBwcmVmaXggPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDIpO1xuICAgICAgICBjdXJzb3IgKz0gcHJlZml4Lmxlbmd0aDtcbiAgICAgICAgaWYgKHByZWZpeC50b0xvd2VyQ2FzZSgpICE9PSAnMG8nKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2RzID0gcmVhZE9jdGFsRGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChvZHMgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZWZpeCArIG9kcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZEhleERpZ2l0cyh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtID0gdGV4dC5zdWJzdHIoY3Vyc29yKS5tYXRjaCgvXlswLTlhLWZdKy9pKTtcbiAgICAgICAgcmV0dXJuIChfYSA9IChtICYmIG1bMF0pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZEhleEludGVnZXJMaXRlcmFsKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBwcmVmaXggPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDIpO1xuICAgICAgICBjdXJzb3IgKz0gcHJlZml4Lmxlbmd0aDtcbiAgICAgICAgaWYgKHByZWZpeC50b0xvd2VyQ2FzZSgpICE9PSAnMHgnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGRzID0gcmVhZEhleERpZ2l0cyh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAoaGRzID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmVmaXggKyBoZHM7XG4gICAgfVxuICAgIGNvbnN0IHJlYWROb25EZWNpbWFsSW50ZWdlckxpdGVyYWwgPSBjb21iaW5lUmVhZGVyKFtcbiAgICAgICAgcmVhZEJpbmFyeUludGVnZXJMaXRlcmFsLFxuICAgICAgICByZWFkT2N0YWxJbnRlZ2VyTGl0ZXJhbCxcbiAgICAgICAgcmVhZEhleEludGVnZXJMaXRlcmFsLFxuICAgIF0pO1xuICAgIGNvbnN0IHJlYWROdW1lcmljTGl0ZXJhbCA9IGNvbWJpbmVSZWFkZXIoW1xuICAgICAgICByZWFkTm9uRGVjaW1hbEludGVnZXJMaXRlcmFsLFxuICAgICAgICByZWFkRGVjaW1hbExpdGVyYWwsXG4gICAgXSk7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUxpdGVyYWwodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IHJlYWROdW1lcmljTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gbnVtLmxlbmd0aDtcbiAgICAgICAgaWYgKG51bSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBldmFsdWFibGU6IG5ldyBOdW1iZXJMaXRlcmFsTm9kZShudW0pLFxuICAgICAgICAgICAgY3Vyc29yOiBjdXJzb3IsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlUGFyZW50aGVzaXplZEV4cHJlc3Npb24odGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IG9wID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgY3Vyc29yICs9IG9wLmxlbmd0aDtcbiAgICAgICAgaWYgKG9wICE9PSAnKCcpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4cHIgPSBwYXJzZUV4cHJlc3Npb24odGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKCFleHByKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjdXJzb3IgPSBleHByLmN1cnNvcjtcbiAgICAgICAgY3Vyc29yICs9IHJlYWRXaGl0ZXNwYWNlKHRleHQsIGN1cnNvcikubGVuZ3RoO1xuICAgICAgICBjb25zdCBjbCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGN1cnNvciArPSBjbC5sZW5ndGg7XG4gICAgICAgIGlmIChjbCAhPT0gJyknKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZhbHVhYmxlOiBleHByLmV2YWx1YWJsZSxcbiAgICAgICAgICAgIGN1cnNvcjogY3Vyc29yLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKHRleHQsIGN1cnNvcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKF9hID0gcGFyc2VMaXRlcmFsKHRleHQsIGN1cnNvcikpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHBhcnNlUGFyZW50aGVzaXplZEV4cHJlc3Npb24odGV4dCwgY3Vyc29yKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlVW5hcnlFeHByZXNzaW9uKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBleHByID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAoZXhwcikge1xuICAgICAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3AgPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBjdXJzb3IgKz0gb3AubGVuZ3RoO1xuICAgICAgICBpZiAob3AgIT09ICcrJyAmJiBvcCAhPT0gJy0nICYmIG9wICE9PSAnficpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG51bSA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmICghbnVtKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjdXJzb3IgPSBudW0uY3Vyc29yO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3Vyc29yOiBjdXJzb3IsXG4gICAgICAgICAgICBldmFsdWFibGU6IG5ldyBVbmFyeU9wZXJhdGlvbk5vZGUob3AsIG51bS5ldmFsdWFibGUpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkQmluYXJ5T3BlcmF0b3Iob3BzLCB0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY3Vyc29yICs9IHJlYWRXaGl0ZXNwYWNlKHRleHQsIGN1cnNvcikubGVuZ3RoO1xuICAgICAgICBjb25zdCBvcCA9IG9wcy5maWx0ZXIoKG9wKSA9PiB0ZXh0LnN0YXJ0c1dpdGgob3AsIGN1cnNvcikpWzBdO1xuICAgICAgICBpZiAoIW9wKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjdXJzb3IgKz0gb3AubGVuZ3RoO1xuICAgICAgICBjdXJzb3IgKz0gcmVhZFdoaXRlc3BhY2UodGV4dCwgY3Vyc29yKS5sZW5ndGg7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXJzb3I6IGN1cnNvcixcbiAgICAgICAgICAgIG9wZXJhdG9yOiBvcCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQmluYXJ5T3BlcmF0aW9uRXhwcmVzc2lvblBhcnNlcihleHByUGFyc2VyLCBvcHMpIHtcbiAgICAgICAgcmV0dXJuICh0ZXh0LCBjdXJzb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0RXhwciA9IGV4cHJQYXJzZXIodGV4dCwgY3Vyc29yKTtcbiAgICAgICAgICAgIGlmICghZmlyc3RFeHByKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJzb3IgPSBmaXJzdEV4cHIuY3Vyc29yO1xuICAgICAgICAgICAgbGV0IGV4cHIgPSBmaXJzdEV4cHIuZXZhbHVhYmxlO1xuICAgICAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wID0gcmVhZEJpbmFyeU9wZXJhdG9yKG9wcywgdGV4dCwgY3Vyc29yKTtcbiAgICAgICAgICAgICAgICBpZiAoIW9wKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJzb3IgPSBvcC5jdXJzb3I7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEV4cHIgPSBleHByUGFyc2VyKHRleHQsIGN1cnNvcik7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0RXhwcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3Vyc29yID0gbmV4dEV4cHIuY3Vyc29yO1xuICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgQmluYXJ5T3BlcmF0aW9uTm9kZShvcC5vcGVyYXRvciwgZXhwciwgbmV4dEV4cHIuZXZhbHVhYmxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBleHByXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogY3Vyc29yLFxuICAgICAgICAgICAgICAgICAgICBldmFsdWFibGU6IGV4cHIsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VCaW5hcnlPcGVyYXRpb25FeHByZXNzaW9uID0gW1xuICAgICAgICBbJyoqJ10sXG4gICAgICAgIFsnKicsICcvJywgJyUnXSxcbiAgICAgICAgWycrJywgJy0nXSxcbiAgICAgICAgWyc8PCcsICc+Pj4nLCAnPj4nXSxcbiAgICAgICAgWycmJ10sXG4gICAgICAgIFsnXiddLFxuICAgICAgICBbJ3wnXSxcbiAgICBdLnJlZHVjZSgocGFyc2VyLCBvcHMpID0+IHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUJpbmFyeU9wZXJhdGlvbkV4cHJlc3Npb25QYXJzZXIocGFyc2VyLCBvcHMpO1xuICAgIH0sIHBhcnNlVW5hcnlFeHByZXNzaW9uKTtcbiAgICBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24odGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGN1cnNvciArPSByZWFkV2hpdGVzcGFjZSh0ZXh0LCBjdXJzb3IpLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHBhcnNlQmluYXJ5T3BlcmF0aW9uRXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUVjbWFOdW1iZXJFeHByZXNzaW9uKHRleHQpIHtcbiAgICAgICAgY29uc3QgZXhwciA9IHBhcnNlRXhwcmVzc2lvbih0ZXh0LCAwKTtcbiAgICAgICAgaWYgKCFleHByKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJzb3IgPSBleHByLmN1cnNvciArIHJlYWRXaGl0ZXNwYWNlKHRleHQsIGV4cHIuY3Vyc29yKS5sZW5ndGg7XG4gICAgICAgIGlmIChjdXJzb3IgIT09IHRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwci5ldmFsdWFibGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VOdW1iZXIodGV4dCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHIgPSBwYXJzZUVjbWFOdW1iZXJFeHByZXNzaW9uKHRleHQpO1xuICAgICAgICByZXR1cm4gKF9hID0gciA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmV2YWx1YXRlKCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG51bWJlckZyb21Vbmtub3duKHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHB2ID0gcGFyc2VOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KHB2KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbnVtYmVyVG9TdHJpbmcodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZU51bWJlckZvcm1hdHRlcihkaWdpdHMpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoTWF0aC5tYXgoTWF0aC5taW4oZGlnaXRzLCAyMCksIDApKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBpbm5lckZvcm1hdHRlciA9IGNyZWF0ZU51bWJlckZvcm1hdHRlcigwKTtcbiAgICBmdW5jdGlvbiBmb3JtYXRQZXJjZW50YWdlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpbm5lckZvcm1hdHRlcih2YWx1ZSkgKyAnJSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RyaW5nRnJvbVVua25vd24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZvcm1hdFN0cmluZyh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmlsbEJ1ZmZlcihidWZmZXIsIGJ1ZmZlclNpemUpIHtcbiAgICAgICAgd2hpbGUgKGJ1ZmZlci5sZW5ndGggPCBidWZmZXJTaXplKSB7XG4gICAgICAgICAgICBidWZmZXIucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVCdWZmZXIoYnVmZmVyU2l6ZSkge1xuICAgICAgICBjb25zdCBidWZmZXIgPSBbXTtcbiAgICAgICAgZmlsbEJ1ZmZlcihidWZmZXIsIGJ1ZmZlclNpemUpO1xuICAgICAgICByZXR1cm4gY3JlYXRlVmFsdWUoYnVmZmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlVHJpbW1lZEJ1ZmZlcihidWZmZXIpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBidWZmZXIuaW5kZXhPZih1bmRlZmluZWQpO1xuICAgICAgICByZXR1cm4gZm9yY2VDYXN0KGluZGV4IDwgMCA/IGJ1ZmZlciA6IGJ1ZmZlci5zbGljZSgwLCBpbmRleCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVQdXNoZWRCdWZmZXIoYnVmZmVyLCBuZXdWYWx1ZSkge1xuICAgICAgICBjb25zdCBuZXdCdWZmZXIgPSBbLi4uY3JlYXRlVHJpbW1lZEJ1ZmZlcihidWZmZXIpLCBuZXdWYWx1ZV07XG4gICAgICAgIGlmIChuZXdCdWZmZXIubGVuZ3RoID4gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV3QnVmZmVyLnNwbGljZSgwLCBuZXdCdWZmZXIubGVuZ3RoIC0gYnVmZmVyLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmaWxsQnVmZmVyKG5ld0J1ZmZlciwgYnVmZmVyLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0J1ZmZlcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25uZWN0VmFsdWVzKHsgcHJpbWFyeSwgc2Vjb25kYXJ5LCBmb3J3YXJkLCBiYWNrd2FyZCwgfSkge1xuICAgICAgICBsZXQgY2hhbmdpbmcgPSBmYWxzZTtcbiAgICAgICAgZnVuY3Rpb24gcHJldmVudEZlZWRiYWNrKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2hhbmdpbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGFuZ2luZyA9IHRydWU7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgY2hhbmdpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBwcmltYXJ5LmVtaXR0ZXIub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgcHJldmVudEZlZWRiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzZWNvbmRhcnkuc2V0UmF3VmFsdWUoZm9yd2FyZChwcmltYXJ5LCBzZWNvbmRhcnkpLCBldi5vcHRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgc2Vjb25kYXJ5LmVtaXR0ZXIub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgcHJldmVudEZlZWRiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBwcmltYXJ5LnNldFJhd1ZhbHVlKGJhY2t3YXJkKHByaW1hcnksIHNlY29uZGFyeSksIGV2Lm9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcmV2ZW50RmVlZGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlY29uZGFyeS5zZXRSYXdWYWx1ZShmb3J3YXJkKHByaW1hcnksIHNlY29uZGFyeSksIGV2Lm9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBwcmV2ZW50RmVlZGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgc2Vjb25kYXJ5LnNldFJhd1ZhbHVlKGZvcndhcmQocHJpbWFyeSwgc2Vjb25kYXJ5KSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwLCBrZXlzKSB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBiYXNlU3RlcCAqIChrZXlzLmFsdEtleSA/IDAuMSA6IDEpICogKGtleXMuc2hpZnRLZXkgPyAxMCA6IDEpO1xuICAgICAgICBpZiAoa2V5cy51cEtleSkge1xuICAgICAgICAgICAgcmV0dXJuICtzdGVwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGtleXMuZG93bktleSkge1xuICAgICAgICAgICAgcmV0dXJuIC1zdGVwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgIGRvd25LZXk6IGV2LmtleSA9PT0gJ0Fycm93RG93bicsXG4gICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB1cEtleTogZXYua2V5ID09PSAnQXJyb3dVcCcsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEhvcml6b250YWxTdGVwS2V5cyhldikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWx0S2V5OiBldi5hbHRLZXksXG4gICAgICAgICAgICBkb3duS2V5OiBldi5rZXkgPT09ICdBcnJvd0xlZnQnLFxuICAgICAgICAgICAgc2hpZnRLZXk6IGV2LnNoaWZ0S2V5LFxuICAgICAgICAgICAgdXBLZXk6IGV2LmtleSA9PT0gJ0Fycm93UmlnaHQnLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1ZlcnRpY2FsQXJyb3dLZXkoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgPT09ICdBcnJvd1VwJyB8fCBrZXkgPT09ICdBcnJvd0Rvd24nO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0Fycm93S2V5KGtleSkge1xuICAgICAgICByZXR1cm4gaXNWZXJ0aWNhbEFycm93S2V5KGtleSkgfHwga2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBrZXkgPT09ICdBcnJvd1JpZ2h0JztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0JDEoZXYsIGVsZW0pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3Qgd2luID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICAgICAgICBjb25zdCByZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IGV2LnBhZ2VYIC0gKCgoX2EgPSAod2luICYmIHdpbi5zY3JvbGxYKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMCkgKyByZWN0LmxlZnQpLFxuICAgICAgICAgICAgeTogZXYucGFnZVkgLSAoKChfYiA9ICh3aW4gJiYgd2luLnNjcm9sbFkpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAwKSArIHJlY3QudG9wKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2xhc3MgUG9pbnRlckhhbmRsZXIge1xuICAgICAgICBjb25zdHJ1Y3RvcihlbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RUb3VjaF8gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5vbkRvY3VtZW50TW91c2VNb3ZlXyA9IHRoaXMub25Eb2N1bWVudE1vdXNlTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Eb2N1bWVudE1vdXNlVXBfID0gdGhpcy5vbkRvY3VtZW50TW91c2VVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Nb3VzZURvd25fID0gdGhpcy5vbk1vdXNlRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaEVuZF8gPSB0aGlzLm9uVG91Y2hFbmRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hNb3ZlXyA9IHRoaXMub25Ub3VjaE1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hTdGFydF8gPSB0aGlzLm9uVG91Y2hTdGFydF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbV8gPSBlbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0Xywge1xuICAgICAgICAgICAgICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmVfLCB7XG4gICAgICAgICAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25Ub3VjaEVuZF8pO1xuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duXyk7XG4gICAgICAgIH1cbiAgICAgICAgY29tcHV0ZVBvc2l0aW9uXyhvZmZzZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmVsZW1fLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBib3VuZHM6IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwb2ludDogb2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogb2Zmc2V0LngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBvZmZzZXQueSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIG9uTW91c2VEb3duXyhldikge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIChfYSA9IGV2LmN1cnJlbnRUYXJnZXQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1cygpO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5lbGVtXy5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Eb2N1bWVudE1vdXNlTW92ZV8pO1xuICAgICAgICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uRG9jdW1lbnRNb3VzZVVwXyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnZG93bicsIHtcbiAgICAgICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmNvbXB1dGVQb3NpdGlvbl8oY29tcHV0ZU9mZnNldCQxKGV2LCB0aGlzLmVsZW1fKSksXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRG9jdW1lbnRNb3VzZU1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbW92ZScsIHtcbiAgICAgICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmNvbXB1dGVQb3NpdGlvbl8oY29tcHV0ZU9mZnNldCQxKGV2LCB0aGlzLmVsZW1fKSksXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRG9jdW1lbnRNb3VzZVVwXyhldikge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5lbGVtXy5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Eb2N1bWVudE1vdXNlTW92ZV8pO1xuICAgICAgICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uRG9jdW1lbnRNb3VzZVVwXyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndXAnLCB7XG4gICAgICAgICAgICAgICAgYWx0S2V5OiBldi5hbHRLZXksXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5jb21wdXRlUG9zaXRpb25fKGNvbXB1dGVPZmZzZXQkMShldiwgdGhpcy5lbGVtXykpLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblRvdWNoU3RhcnRfKGV2KSB7XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgdG91Y2ggPSBldi50YXJnZXRUb3VjaGVzLml0ZW0oMCk7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdkb3duJywge1xuICAgICAgICAgICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuY29tcHV0ZVBvc2l0aW9uXyh0b3VjaFxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB0b3VjaC5jbGllbnRZIC0gcmVjdC50b3AsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubGFzdFRvdWNoXyA9IHRvdWNoO1xuICAgICAgICB9XG4gICAgICAgIG9uVG91Y2hNb3ZlXyhldikge1xuICAgICAgICAgICAgY29uc3QgdG91Y2ggPSBldi50YXJnZXRUb3VjaGVzLml0ZW0oMCk7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdtb3ZlJywge1xuICAgICAgICAgICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuY29tcHV0ZVBvc2l0aW9uXyh0b3VjaFxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB0b3VjaC5jbGllbnRZIC0gcmVjdC50b3AsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubGFzdFRvdWNoXyA9IHRvdWNoO1xuICAgICAgICB9XG4gICAgICAgIG9uVG91Y2hFbmRfKGV2KSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCB0b3VjaCA9IChfYSA9IGV2LnRhcmdldFRvdWNoZXMuaXRlbSgwKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5sYXN0VG91Y2hfO1xuICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZWxlbV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndXAnLCB7XG4gICAgICAgICAgICAgICAgYWx0S2V5OiBldi5hbHRLZXksXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5jb21wdXRlUG9zaXRpb25fKHRvdWNoXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogdG91Y2guY2xpZW50WCAtIHJlY3QubGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHRvdWNoLmNsaWVudFkgLSByZWN0LnRvcCxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFwUmFuZ2UodmFsdWUsIHN0YXJ0MSwgZW5kMSwgc3RhcnQyLCBlbmQyKSB7XG4gICAgICAgIGNvbnN0IHAgPSAodmFsdWUgLSBzdGFydDEpIC8gKGVuZDEgLSBzdGFydDEpO1xuICAgICAgICByZXR1cm4gc3RhcnQyICsgcCAqIChlbmQyIC0gc3RhcnQyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RGVjaW1hbERpZ2l0cyh2YWx1ZSkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gU3RyaW5nKHZhbHVlLnRvRml4ZWQoMTApKTtcbiAgICAgICAgY29uc3QgZnJhYyA9IHRleHQuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgcmV0dXJuIGZyYWMucmVwbGFjZSgvMCskLywgJycpLmxlbmd0aDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29uc3RyYWluUmFuZ2UodmFsdWUsIG1pbiwgbWF4KSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWx1ZSwgbWluKSwgbWF4KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbG9vcFJhbmdlKHZhbHVlLCBtYXgpIHtcbiAgICAgICAgcmV0dXJuICgodmFsdWUgJSBtYXgpICsgbWF4KSAlIG1heDtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkZyA9IENsYXNzTmFtZSgndHh0Jyk7XG4gICAgY2xhc3MgTnVtYmVyVGV4dFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZV8gPSB0aGlzLm9uQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18gPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnByb3BzXy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygpLCBjbGFzc05hbWUkZyh1bmRlZmluZWQsICdudW0nKSk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLmFycmF5UG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZyh1bmRlZmluZWQsIGNvbmZpZy5hcnJheVBvc2l0aW9uKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICBpbnB1dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnaScpKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS50eXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChpbnB1dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW07XG4gICAgICAgICAgICB0aGlzLm9uRHJhZ2dpbmdDaGFuZ2VfID0gdGhpcy5vbkRyYWdnaW5nQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2luZ18gPSBjb25maWcuZHJhZ2dpbmc7XG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nXy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uRHJhZ2dpbmdDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRnKCkpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnaScpKTtcbiAgICAgICAgICAgIGNvbnN0IGtub2JFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAga25vYkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnaycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChrbm9iRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50ID0ga25vYkVsZW07XG4gICAgICAgICAgICBjb25zdCBndWlkZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3N2ZycpO1xuICAgICAgICAgICAgZ3VpZGVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcoJ2cnKSk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50LmFwcGVuZENoaWxkKGd1aWRlRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBib2R5RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAncGF0aCcpO1xuICAgICAgICAgICAgYm9keUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnZ2InKSk7XG4gICAgICAgICAgICBndWlkZUVsZW0uYXBwZW5kQ2hpbGQoYm9keUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5ndWlkZUJvZHlFbGVtXyA9IGJvZHlFbGVtO1xuICAgICAgICAgICAgY29uc3QgaGVhZEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3BhdGgnKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcoJ2doJykpO1xuICAgICAgICAgICAgZ3VpZGVFbGVtLmFwcGVuZENoaWxkKGhlYWRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZ3VpZGVIZWFkRWxlbV8gPSBoZWFkRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRvb2x0aXBFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdG9vbHRpcEVsZW0uY2xhc3NMaXN0LmFkZChDbGFzc05hbWUoJ3R0JykoKSk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50LmFwcGVuZENoaWxkKHRvb2x0aXBFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEVsZW1fID0gdG9vbHRpcEVsZW07XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIG9uRHJhZ2dpbmdDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBpZiAoZXYucmF3VmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUkZyh1bmRlZmluZWQsICdkcmcnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcodW5kZWZpbmVkLCAnZHJnJykpO1xuICAgICAgICAgICAgY29uc3QgeCA9IGV2LnJhd1ZhbHVlIC8gdGhpcy5wcm9wc18uZ2V0KCdkcmFnZ2luZ1NjYWxlJyk7XG4gICAgICAgICAgICBjb25zdCBhb3ggPSB4ICsgKHggPiAwID8gLTEgOiB4IDwgMCA/ICsxIDogMCk7XG4gICAgICAgICAgICBjb25zdCBhZHggPSBjb25zdHJhaW5SYW5nZSgtYW94LCAtNCwgKzQpO1xuICAgICAgICAgICAgdGhpcy5ndWlkZUhlYWRFbGVtXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZCcsIFtgTSAke2FveCArIGFkeH0sMCBMJHthb3h9LDQgTCR7YW94ICsgYWR4fSw4YCwgYE0gJHt4fSwtMSBMJHt4fSw5YF0uam9pbignICcpKTtcbiAgICAgICAgICAgIHRoaXMuZ3VpZGVCb2R5RWxlbV8uc2V0QXR0cmlidXRlTlMobnVsbCwgJ2QnLCBgTSAwLDQgTCR7eH0sNGApO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gdGhpcy5wcm9wc18uZ2V0KCdmb3JtYXR0ZXInKTtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEVsZW1fLnRleHRDb250ZW50ID0gZm9ybWF0dGVyKHRoaXMudmFsdWUucmF3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50b29sdGlwRWxlbV8uc3R5bGUubGVmdCA9IGAke3h9cHhgO1xuICAgICAgICB9XG4gICAgICAgIHJlZnJlc2goKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSB0aGlzLnByb3BzXy5nZXQoJ2Zvcm1hdHRlcicpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUgPSBmb3JtYXR0ZXIodGhpcy52YWx1ZS5yYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBOdW1iZXJUZXh0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB0aGlzLm9yaWdpblJhd1ZhbHVlXyA9IDA7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2VfID0gdGhpcy5vbklucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbklucHV0S2V5RG93bl8gPSB0aGlzLm9uSW5wdXRLZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbklucHV0S2V5VXBfID0gdGhpcy5vbklucHV0S2V5VXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25fID0gdGhpcy5vblBvaW50ZXJEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlXyA9IHRoaXMub25Qb2ludGVyTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyVXBfID0gdGhpcy5vblBvaW50ZXJVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuYmFzZVN0ZXBfID0gY29uZmlnLmJhc2VTdGVwO1xuICAgICAgICAgICAgdGhpcy5wYXJzZXJfID0gY29uZmlnLnBhcnNlcjtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnNsaWRlclByb3BzXyA9IChfYSA9IGNvbmZpZy5zbGlkZXJQcm9wcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbDtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nXyA9IGNyZWF0ZVZhbHVlKG51bGwpO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IE51bWJlclRleHRWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGFycmF5UG9zaXRpb246IGNvbmZpZy5hcnJheVBvc2l0aW9uLFxuICAgICAgICAgICAgICAgIGRyYWdnaW5nOiB0aGlzLmRyYWdnaW5nXyxcbiAgICAgICAgICAgICAgICBwcm9wczogdGhpcy5wcm9wcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMub25JbnB1dENoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbklucHV0S2V5RG93bl8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25JbnB1dEtleVVwXyk7XG4gICAgICAgICAgICBjb25zdCBwaCA9IG5ldyBQb2ludGVySGFuZGxlcih0aGlzLnZpZXcua25vYkVsZW1lbnQpO1xuICAgICAgICAgICAgcGguZW1pdHRlci5vbignZG93bicsIHRoaXMub25Qb2ludGVyRG93bl8pO1xuICAgICAgICAgICAgcGguZW1pdHRlci5vbignbW92ZScsIHRoaXMub25Qb2ludGVyTW92ZV8pO1xuICAgICAgICAgICAgcGguZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RyYWluVmFsdWVfKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgY29uc3QgbWluID0gKF9hID0gdGhpcy5zbGlkZXJQcm9wc18pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXQoJ21pblZhbHVlJyk7XG4gICAgICAgICAgICBjb25zdCBtYXggPSAoX2IgPSB0aGlzLnNsaWRlclByb3BzXykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmdldCgnbWF4VmFsdWUnKTtcbiAgICAgICAgICAgIGxldCB2ID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAobWluICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2ID0gTWF0aC5tYXgodiwgbWluKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHYgPSBNYXRoLm1pbih2LCBtYXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICAgICAgb25JbnB1dENoYW5nZV8oZSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZm9yY2VDYXN0KGUuY3VycmVudFRhcmdldCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGlucHV0RWxlbS52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gdGhpcy5wYXJzZXJfKHZhbHVlKTtcbiAgICAgICAgICAgIGlmICghaXNFbXB0eShwYXJzZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gdGhpcy5jb25zdHJhaW5WYWx1ZV8ocGFyc2VkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52aWV3LnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBvbklucHV0S2V5RG93bl8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KHRoaXMuYmFzZVN0ZXBfLCBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy5jb25zdHJhaW5WYWx1ZV8odGhpcy52YWx1ZS5yYXdWYWx1ZSArIHN0ZXApLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uSW5wdXRLZXlVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KHRoaXMuYmFzZVN0ZXBfLCBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bl8oKSB7XG4gICAgICAgICAgICB0aGlzLm9yaWdpblJhd1ZhbHVlXyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nXy5yYXdWYWx1ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgY29tcHV0ZURyYWdnaW5nVmFsdWVfKGRhdGEpIHtcbiAgICAgICAgICAgIGlmICghZGF0YS5wb2ludCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZHggPSBkYXRhLnBvaW50LnggLSBkYXRhLmJvdW5kcy53aWR0aCAvIDI7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJhaW5WYWx1ZV8odGhpcy5vcmlnaW5SYXdWYWx1ZV8gKyBkeCAqIHRoaXMucHJvcHMuZ2V0KCdkcmFnZ2luZ1NjYWxlJykpO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlck1vdmVfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy5jb21wdXRlRHJhZ2dpbmdWYWx1ZV8oZXYuZGF0YSk7XG4gICAgICAgICAgICBpZiAodiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodiwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmdfLnJhd1ZhbHVlID0gdGhpcy52YWx1ZS5yYXdWYWx1ZSAtIHRoaXMub3JpZ2luUmF3VmFsdWVfO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlclVwXyhldikge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuY29tcHV0ZURyYWdnaW5nVmFsdWVfKGV2LmRhdGEpO1xuICAgICAgICAgICAgaWYgKHYgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHYsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2luZ18ucmF3VmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGYgPSBDbGFzc05hbWUoJ3NsZCcpO1xuICAgIGNsYXNzIFNsaWRlclZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZV8gPSB0aGlzLm9uQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18gPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnByb3BzXy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZigpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCB0cmFja0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0cmFja0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZigndCcpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZFRhYkluZGV4KHRyYWNrRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodHJhY2tFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudHJhY2tFbGVtZW50ID0gdHJhY2tFbGVtO1xuICAgICAgICAgICAgY29uc3Qga25vYkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBrbm9iRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRmKCdrJykpO1xuICAgICAgICAgICAgdGhpcy50cmFja0VsZW1lbnQuYXBwZW5kQ2hpbGQoa25vYkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5rbm9iRWxlbWVudCA9IGtub2JFbGVtO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgcCA9IGNvbnN0cmFpblJhbmdlKG1hcFJhbmdlKHRoaXMudmFsdWUucmF3VmFsdWUsIHRoaXMucHJvcHNfLmdldCgnbWluVmFsdWUnKSwgdGhpcy5wcm9wc18uZ2V0KCdtYXhWYWx1ZScpLCAwLCAxMDApLCAwLCAxMDApO1xuICAgICAgICAgICAgdGhpcy5rbm9iRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3B9JWA7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBTbGlkZXJDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25LZXlEb3duXyA9IHRoaXMub25LZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbktleVVwXyA9IHRoaXMub25LZXlVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyRG93bk9yTW92ZV8gPSB0aGlzLm9uUG9pbnRlckRvd25Pck1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlclVwXyA9IHRoaXMub25Qb2ludGVyVXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmJhc2VTdGVwXyA9IGNvbmZpZy5iYXNlU3RlcDtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFNsaWRlclZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfID0gbmV3IFBvaW50ZXJIYW5kbGVyKHRoaXMudmlldy50cmFja0VsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25Pck1vdmVfKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJEb3duT3JNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcudHJhY2tFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uS2V5RG93bl8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LnRyYWNrRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25LZXlVcF8pO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZVBvaW50ZXJFdmVudF8oZCwgb3B0cykge1xuICAgICAgICAgICAgaWYgKCFkLnBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShtYXBSYW5nZShjb25zdHJhaW5SYW5nZShkLnBvaW50LngsIDAsIGQuYm91bmRzLndpZHRoKSwgMCwgZC5ib3VuZHMud2lkdGgsIHRoaXMucHJvcHMuZ2V0KCdtaW5WYWx1ZScpLCB0aGlzLnByb3BzLmdldCgnbWF4VmFsdWUnKSksIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlckRvd25Pck1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJVcF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbktleURvd25fKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZvcktleSh0aGlzLmJhc2VTdGVwXywgZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZSArIHN0ZXAsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KHRoaXMuYmFzZVN0ZXBfLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRlID0gQ2xhc3NOYW1lKCdzbGR0eHQnKTtcbiAgICBjbGFzcyBTbGlkZXJUZXh0VmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZSgpKTtcbiAgICAgICAgICAgIGNvbnN0IHNsaWRlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBzbGlkZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGUoJ3MnKSk7XG4gICAgICAgICAgICB0aGlzLnNsaWRlclZpZXdfID0gY29uZmlnLnNsaWRlclZpZXc7XG4gICAgICAgICAgICBzbGlkZXJFbGVtLmFwcGVuZENoaWxkKHRoaXMuc2xpZGVyVmlld18uZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc2xpZGVyRWxlbSk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRleHRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGUoJ3QnKSk7XG4gICAgICAgICAgICB0aGlzLnRleHRWaWV3XyA9IGNvbmZpZy50ZXh0VmlldztcbiAgICAgICAgICAgIHRleHRFbGVtLmFwcGVuZENoaWxkKHRoaXMudGV4dFZpZXdfLmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRleHRFbGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFNsaWRlclRleHRDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnNsaWRlckNfID0gbmV3IFNsaWRlckNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgYmFzZVN0ZXA6IGNvbmZpZy5iYXNlU3RlcCxcbiAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnNsaWRlclByb3BzLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjb25maWcudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy50ZXh0Q18gPSBuZXcgTnVtYmVyVGV4dENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgYmFzZVN0ZXA6IGNvbmZpZy5iYXNlU3RlcCxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IGNvbmZpZy5wYXJzZXIsXG4gICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy50ZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgc2xpZGVyUHJvcHM6IGNvbmZpZy5zbGlkZXJQcm9wcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogY29uZmlnLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFNsaWRlclRleHRWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHNsaWRlclZpZXc6IHRoaXMuc2xpZGVyQ18udmlldyxcbiAgICAgICAgICAgICAgICB0ZXh0VmlldzogdGhpcy50ZXh0Q18udmlldyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBzbGlkZXJDb250cm9sbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVyQ187XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRleHRDb250cm9sbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dENfO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd3JpdGVQcmltaXRpdmUodGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgICB0YXJnZXQud3JpdGUodmFsdWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTGlzdE9wdGlvbnModmFsdWUpIHtcbiAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHAucmVxdWlyZWQuYXJyYXkocC5yZXF1aXJlZC5vYmplY3Qoe1xuICAgICAgICAgICAgICAgIHRleHQ6IHAucmVxdWlyZWQuc3RyaW5nLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBwLnJlcXVpcmVkLnJhdyxcbiAgICAgICAgICAgIH0pKSh2YWx1ZSkudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBwLnJlcXVpcmVkLnJhdyh2YWx1ZSlcbiAgICAgICAgICAgICAgICAudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VQaWNrZXJMYXlvdXQodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSAnaW5saW5lJyB8fCB2YWx1ZSA9PT0gJ3BvcHVwJykge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXModmFsdWUpIHtcbiAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgIHJldHVybiBwLnJlcXVpcmVkLm9iamVjdCh7XG4gICAgICAgICAgICBtYXg6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgbWluOiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgIHN0ZXA6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICB9KSh2YWx1ZSkudmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxpc3RPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKHRleHQpID0+IHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goeyB0ZXh0OiB0ZXh0LCB2YWx1ZTogb3B0aW9uc1t0ZXh0XSB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlTGlzdENvbnN0cmFpbnQob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gIWlzRW1wdHkob3B0aW9ucylcbiAgICAgICAgICAgID8gbmV3IExpc3RDb25zdHJhaW50KG5vcm1hbGl6ZUxpc3RPcHRpb25zKGZvcmNlQ2FzdChvcHRpb25zKSkpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRMaXN0SXRlbXMoY29uc3RyYWludCkge1xuICAgICAgICBjb25zdCBjID0gY29uc3RyYWludFxuICAgICAgICAgICAgPyBmaW5kQ29uc3RyYWludChjb25zdHJhaW50LCBMaXN0Q29uc3RyYWludClcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgaWYgKCFjKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYy5vcHRpb25zO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kU3RlcChjb25zdHJhaW50KSB7XG4gICAgICAgIGNvbnN0IGMgPSBjb25zdHJhaW50ID8gZmluZENvbnN0cmFpbnQoY29uc3RyYWludCwgU3RlcENvbnN0cmFpbnQpIDogbnVsbDtcbiAgICAgICAgaWYgKCFjKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYy5zdGVwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdWl0YWJsZURlY2ltYWxEaWdpdHMoY29uc3RyYWludCwgcmF3VmFsdWUpIHtcbiAgICAgICAgY29uc3Qgc2MgPSBjb25zdHJhaW50ICYmIGZpbmRDb25zdHJhaW50KGNvbnN0cmFpbnQsIFN0ZXBDb25zdHJhaW50KTtcbiAgICAgICAgaWYgKHNjKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RGVjaW1hbERpZ2l0cyhzYy5zdGVwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTWF0aC5tYXgoZ2V0RGVjaW1hbERpZ2l0cyhyYXdWYWx1ZSksIDIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRCYXNlU3RlcChjb25zdHJhaW50KSB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBmaW5kU3RlcChjb25zdHJhaW50KTtcbiAgICAgICAgcmV0dXJuIHN0ZXAgIT09IG51bGwgJiYgc3RlcCAhPT0gdm9pZCAwID8gc3RlcCA6IDE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1aXRhYmxlRHJhZ2dpbmdTY2FsZShjb25zdHJhaW50LCByYXdWYWx1ZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHNjID0gY29uc3RyYWludCAmJiBmaW5kQ29uc3RyYWludChjb25zdHJhaW50LCBTdGVwQ29uc3RyYWludCk7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBNYXRoLmFicygoX2EgPSBzYyA9PT0gbnVsbCB8fCBzYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2Muc3RlcCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcmF3VmFsdWUpO1xuICAgICAgICByZXR1cm4gYmFzZSA9PT0gMCA/IDAuMSA6IE1hdGgucG93KDEwLCBNYXRoLmZsb29yKE1hdGgubG9nMTAoYmFzZSkpIC0gMSk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGQgPSBDbGFzc05hbWUoJ2NrYicpO1xuICAgIGNsYXNzIENoZWNrYm94VmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VfID0gdGhpcy5vblZhbHVlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGQoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgbGFiZWxFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XG4gICAgICAgICAgICBsYWJlbEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZCgnbCcpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChsYWJlbEVsZW0pO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICBpbnB1dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZCgnaScpKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS50eXBlID0gJ2NoZWNrYm94JztcbiAgICAgICAgICAgIGxhYmVsRWxlbS5hcHBlbmRDaGlsZChpbnB1dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW07XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZCh0aGlzLmlucHV0RWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHdyYXBwZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGQoJ3cnKSk7XG4gICAgICAgICAgICBsYWJlbEVsZW0uYXBwZW5kQ2hpbGQod3JhcHBlckVsZW0pO1xuICAgICAgICAgICAgY29uc3QgbWFya0VsZW0gPSBjcmVhdGVTdmdJY29uRWxlbWVudChkb2MsICdjaGVjaycpO1xuICAgICAgICAgICAgd3JhcHBlckVsZW0uYXBwZW5kQ2hpbGQobWFya0VsZW0pO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5jaGVja2VkID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQ2hlY2tib3hDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25JbnB1dENoYW5nZV8gPSB0aGlzLm9uSW5wdXRDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IENoZWNrYm94Vmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMub25JbnB1dENoYW5nZV8pO1xuICAgICAgICB9XG4gICAgICAgIG9uSW5wdXRDaGFuZ2VfKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbSA9IGZvcmNlQ2FzdChlLmN1cnJlbnRUYXJnZXQpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IGlucHV0RWxlbS5jaGVja2VkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ29uc3RyYWludCQ2KHBhcmFtcykge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IFtdO1xuICAgICAgICBjb25zdCBsYyA9IGNyZWF0ZUxpc3RDb25zdHJhaW50KHBhcmFtcy5vcHRpb25zKTtcbiAgICAgICAgaWYgKGxjKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKGxjKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbXBvc2l0ZUNvbnN0cmFpbnQoY29uc3RyYWludHMpO1xuICAgIH1cbiAgICBjb25zdCBCb29sZWFuSW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtYm9vbCcsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZUxpc3RPcHRpb25zKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gYm9vbEZyb21Vbmtub3duLFxuICAgICAgICAgICAgY29uc3RyYWludDogKGFyZ3MpID0+IGNyZWF0ZUNvbnN0cmFpbnQkNihhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICB3cml0ZXI6IChfYXJncykgPT4gd3JpdGVQcmltaXRpdmUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBhcmdzLmRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgYyA9IGFyZ3MuY29uc3RyYWludDtcbiAgICAgICAgICAgIGlmIChjICYmIGZpbmRDb25zdHJhaW50KGMsIExpc3RDb25zdHJhaW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGlzdENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IChfYSA9IGZpbmRMaXN0SXRlbXMoYykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGVja2JveENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgY2xhc3NOYW1lJGMgPSBDbGFzc05hbWUoJ2NvbCcpO1xuICAgIGNsYXNzIENvbG9yVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYygpKTtcbiAgICAgICAgICAgIGNvbmZpZy5mb2xkYWJsZS5iaW5kRXhwYW5kZWRDbGFzcyh0aGlzLmVsZW1lbnQsIGNsYXNzTmFtZSRjKHVuZGVmaW5lZCwgJ2V4cGFuZGVkJykpO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKGNvbmZpZy5mb2xkYWJsZSwgJ2NvbXBsZXRlZCcsIHZhbHVlVG9DbGFzc05hbWUodGhpcy5lbGVtZW50LCBjbGFzc05hbWUkYyh1bmRlZmluZWQsICdjcGwnKSkpO1xuICAgICAgICAgICAgY29uc3QgaGVhZEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBoZWFkRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRjKCdoJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGhlYWRFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHN3YXRjaEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBzd2F0Y2hFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGMoJ3MnKSk7XG4gICAgICAgICAgICBoZWFkRWxlbS5hcHBlbmRDaGlsZChzd2F0Y2hFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuc3dhdGNoRWxlbWVudCA9IHN3YXRjaEVsZW07XG4gICAgICAgICAgICBjb25zdCB0ZXh0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRleHRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGMoJ3QnKSk7XG4gICAgICAgICAgICBoZWFkRWxlbS5hcHBlbmRDaGlsZCh0ZXh0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLnRleHRFbGVtZW50ID0gdGV4dEVsZW07XG4gICAgICAgICAgICBpZiAoY29uZmlnLnBpY2tlckxheW91dCA9PT0gJ2lubGluZScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaWNrZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIHBpY2tlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYygncCcpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQocGlja2VyRWxlbSk7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJFbGVtZW50ID0gcGlja2VyRWxlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZ2JUb0hzbEludChyLCBnLCBiKSB7XG4gICAgICAgIGNvbnN0IHJwID0gY29uc3RyYWluUmFuZ2UociAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGdwID0gY29uc3RyYWluUmFuZ2UoZyAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGJwID0gY29uc3RyYWluUmFuZ2UoYiAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGNtYXggPSBNYXRoLm1heChycCwgZ3AsIGJwKTtcbiAgICAgICAgY29uc3QgY21pbiA9IE1hdGgubWluKHJwLCBncCwgYnApO1xuICAgICAgICBjb25zdCBjID0gY21heCAtIGNtaW47XG4gICAgICAgIGxldCBoID0gMDtcbiAgICAgICAgbGV0IHMgPSAwO1xuICAgICAgICBjb25zdCBsID0gKGNtaW4gKyBjbWF4KSAvIDI7XG4gICAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgICAgICBzID0gYyAvICgxIC0gTWF0aC5hYnMoY21heCArIGNtaW4gLSAxKSk7XG4gICAgICAgICAgICBpZiAocnAgPT09IGNtYXgpIHtcbiAgICAgICAgICAgICAgICBoID0gKGdwIC0gYnApIC8gYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGdwID09PSBjbWF4KSB7XG4gICAgICAgICAgICAgICAgaCA9IDIgKyAoYnAgLSBycCkgLyBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaCA9IDQgKyAocnAgLSBncCkgLyBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaCA9IGggLyA2ICsgKGggPCAwID8gMSA6IDApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbaCAqIDM2MCwgcyAqIDEwMCwgbCAqIDEwMF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhzbFRvUmdiSW50KGgsIHMsIGwpIHtcbiAgICAgICAgY29uc3QgaHAgPSAoKGggJSAzNjApICsgMzYwKSAlIDM2MDtcbiAgICAgICAgY29uc3Qgc3AgPSBjb25zdHJhaW5SYW5nZShzIC8gMTAwLCAwLCAxKTtcbiAgICAgICAgY29uc3QgbHAgPSBjb25zdHJhaW5SYW5nZShsIC8gMTAwLCAwLCAxKTtcbiAgICAgICAgY29uc3QgYyA9ICgxIC0gTWF0aC5hYnMoMiAqIGxwIC0gMSkpICogc3A7XG4gICAgICAgIGNvbnN0IHggPSBjICogKDEgLSBNYXRoLmFicygoKGhwIC8gNjApICUgMikgLSAxKSk7XG4gICAgICAgIGNvbnN0IG0gPSBscCAtIGMgLyAyO1xuICAgICAgICBsZXQgcnAsIGdwLCBicDtcbiAgICAgICAgaWYgKGhwID49IDAgJiYgaHAgPCA2MCkge1xuICAgICAgICAgICAgW3JwLCBncCwgYnBdID0gW2MsIHgsIDBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhwID49IDYwICYmIGhwIDwgMTIwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbeCwgYywgMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMTIwICYmIGhwIDwgMTgwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbMCwgYywgeF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMTgwICYmIGhwIDwgMjQwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbMCwgeCwgY107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMjQwICYmIGhwIDwgMzAwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbeCwgMCwgY107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbYywgMCwgeF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsocnAgKyBtKSAqIDI1NSwgKGdwICsgbSkgKiAyNTUsIChicCArIG0pICogMjU1XTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmdiVG9Ic3ZJbnQociwgZywgYikge1xuICAgICAgICBjb25zdCBycCA9IGNvbnN0cmFpblJhbmdlKHIgLyAyNTUsIDAsIDEpO1xuICAgICAgICBjb25zdCBncCA9IGNvbnN0cmFpblJhbmdlKGcgLyAyNTUsIDAsIDEpO1xuICAgICAgICBjb25zdCBicCA9IGNvbnN0cmFpblJhbmdlKGIgLyAyNTUsIDAsIDEpO1xuICAgICAgICBjb25zdCBjbWF4ID0gTWF0aC5tYXgocnAsIGdwLCBicCk7XG4gICAgICAgIGNvbnN0IGNtaW4gPSBNYXRoLm1pbihycCwgZ3AsIGJwKTtcbiAgICAgICAgY29uc3QgZCA9IGNtYXggLSBjbWluO1xuICAgICAgICBsZXQgaDtcbiAgICAgICAgaWYgKGQgPT09IDApIHtcbiAgICAgICAgICAgIGggPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNtYXggPT09IHJwKSB7XG4gICAgICAgICAgICBoID0gNjAgKiAoKCgoKGdwIC0gYnApIC8gZCkgJSA2KSArIDYpICUgNik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY21heCA9PT0gZ3ApIHtcbiAgICAgICAgICAgIGggPSA2MCAqICgoYnAgLSBycCkgLyBkICsgMik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoID0gNjAgKiAoKHJwIC0gZ3ApIC8gZCArIDQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHMgPSBjbWF4ID09PSAwID8gMCA6IGQgLyBjbWF4O1xuICAgICAgICBjb25zdCB2ID0gY21heDtcbiAgICAgICAgcmV0dXJuIFtoLCBzICogMTAwLCB2ICogMTAwXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHN2VG9SZ2JJbnQoaCwgcywgdikge1xuICAgICAgICBjb25zdCBocCA9IGxvb3BSYW5nZShoLCAzNjApO1xuICAgICAgICBjb25zdCBzcCA9IGNvbnN0cmFpblJhbmdlKHMgLyAxMDAsIDAsIDEpO1xuICAgICAgICBjb25zdCB2cCA9IGNvbnN0cmFpblJhbmdlKHYgLyAxMDAsIDAsIDEpO1xuICAgICAgICBjb25zdCBjID0gdnAgKiBzcDtcbiAgICAgICAgY29uc3QgeCA9IGMgKiAoMSAtIE1hdGguYWJzKCgoaHAgLyA2MCkgJSAyKSAtIDEpKTtcbiAgICAgICAgY29uc3QgbSA9IHZwIC0gYztcbiAgICAgICAgbGV0IHJwLCBncCwgYnA7XG4gICAgICAgIGlmIChocCA+PSAwICYmIGhwIDwgNjApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFtjLCB4LCAwXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChocCA+PSA2MCAmJiBocCA8IDEyMCkge1xuICAgICAgICAgICAgW3JwLCBncCwgYnBdID0gW3gsIGMsIDBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhwID49IDEyMCAmJiBocCA8IDE4MCkge1xuICAgICAgICAgICAgW3JwLCBncCwgYnBdID0gWzAsIGMsIHhdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhwID49IDE4MCAmJiBocCA8IDI0MCkge1xuICAgICAgICAgICAgW3JwLCBncCwgYnBdID0gWzAsIHgsIGNdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhwID49IDI0MCAmJiBocCA8IDMwMCkge1xuICAgICAgICAgICAgW3JwLCBncCwgYnBdID0gW3gsIDAsIGNdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgW3JwLCBncCwgYnBdID0gW2MsIDAsIHhdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbKHJwICsgbSkgKiAyNTUsIChncCArIG0pICogMjU1LCAoYnAgKyBtKSAqIDI1NV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhzbFRvSHN2SW50KGgsIHMsIGwpIHtcbiAgICAgICAgY29uc3Qgc2QgPSBsICsgKHMgKiAoMTAwIC0gTWF0aC5hYnMoMiAqIGwgLSAxMDApKSkgLyAoMiAqIDEwMCk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBoLFxuICAgICAgICAgICAgc2QgIT09IDAgPyAocyAqICgxMDAgLSBNYXRoLmFicygyICogbCAtIDEwMCkpKSAvIHNkIDogMCxcbiAgICAgICAgICAgIGwgKyAocyAqICgxMDAgLSBNYXRoLmFicygyICogbCAtIDEwMCkpKSAvICgyICogMTAwKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHN2VG9Ic2xJbnQoaCwgcywgdikge1xuICAgICAgICBjb25zdCBzZCA9IDEwMCAtIE1hdGguYWJzKCh2ICogKDIwMCAtIHMpKSAvIDEwMCAtIDEwMCk7XG4gICAgICAgIHJldHVybiBbaCwgc2QgIT09IDAgPyAocyAqIHYpIC8gc2QgOiAwLCAodiAqICgyMDAgLSBzKSkgLyAoMiAqIDEwMCldO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVBbHBoYUNvbXBvbmVudChjb21wcykge1xuICAgICAgICByZXR1cm4gW2NvbXBzWzBdLCBjb21wc1sxXSwgY29tcHNbMl1dO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhcHBlbmRBbHBoYUNvbXBvbmVudChjb21wcywgYWxwaGEpIHtcbiAgICAgICAgcmV0dXJuIFtjb21wc1swXSwgY29tcHNbMV0sIGNvbXBzWzJdLCBhbHBoYV07XG4gICAgfVxuICAgIGNvbnN0IE1PREVfQ09OVkVSVEVSX01BUCA9IHtcbiAgICAgICAgaHNsOiB7XG4gICAgICAgICAgICBoc2w6IChoLCBzLCBsKSA9PiBbaCwgcywgbF0sXG4gICAgICAgICAgICBoc3Y6IGhzbFRvSHN2SW50LFxuICAgICAgICAgICAgcmdiOiBoc2xUb1JnYkludCxcbiAgICAgICAgfSxcbiAgICAgICAgaHN2OiB7XG4gICAgICAgICAgICBoc2w6IGhzdlRvSHNsSW50LFxuICAgICAgICAgICAgaHN2OiAoaCwgcywgdikgPT4gW2gsIHMsIHZdLFxuICAgICAgICAgICAgcmdiOiBoc3ZUb1JnYkludCxcbiAgICAgICAgfSxcbiAgICAgICAgcmdiOiB7XG4gICAgICAgICAgICBoc2w6IHJnYlRvSHNsSW50LFxuICAgICAgICAgICAgaHN2OiByZ2JUb0hzdkludCxcbiAgICAgICAgICAgIHJnYjogKHIsIGcsIGIpID0+IFtyLCBnLCBiXSxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldENvbG9yTWF4Q29tcG9uZW50cyhtb2RlLCB0eXBlKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0eXBlID09PSAnZmxvYXQnID8gMSA6IG1vZGUgPT09ICdyZ2InID8gMjU1IDogMzYwLFxuICAgICAgICAgICAgdHlwZSA9PT0gJ2Zsb2F0JyA/IDEgOiBtb2RlID09PSAncmdiJyA/IDI1NSA6IDEwMCxcbiAgICAgICAgICAgIHR5cGUgPT09ICdmbG9hdCcgPyAxIDogbW9kZSA9PT0gJ3JnYicgPyAyNTUgOiAxMDAsXG4gICAgICAgIF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbnN0cmFpbkNvbG9yQ29tcG9uZW50cyhjb21wb25lbnRzLCBtb2RlLCB0eXBlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgbXMgPSBnZXRDb2xvck1heENvbXBvbmVudHMobW9kZSwgdHlwZSk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBtb2RlID09PSAncmdiJ1xuICAgICAgICAgICAgICAgID8gY29uc3RyYWluUmFuZ2UoY29tcG9uZW50c1swXSwgMCwgbXNbMF0pXG4gICAgICAgICAgICAgICAgOiBsb29wUmFuZ2UoY29tcG9uZW50c1swXSwgbXNbMF0pLFxuICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcG9uZW50c1sxXSwgMCwgbXNbMV0pLFxuICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcG9uZW50c1syXSwgMCwgbXNbMl0pLFxuICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoKF9hID0gY29tcG9uZW50c1szXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMSwgMCwgMSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbnZlcnRDb2xvclR5cGUoY29tcHMsIG1vZGUsIGZyb20sIHRvKSB7XG4gICAgICAgIGNvbnN0IGZtcyA9IGdldENvbG9yTWF4Q29tcG9uZW50cyhtb2RlLCBmcm9tKTtcbiAgICAgICAgY29uc3QgdG1zID0gZ2V0Q29sb3JNYXhDb21wb25lbnRzKG1vZGUsIHRvKTtcbiAgICAgICAgcmV0dXJuIGNvbXBzLm1hcCgoYywgaW5kZXgpID0+IChjIC8gZm1zW2luZGV4XSkgKiB0bXNbaW5kZXhdKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29udmVydENvbG9yKGNvbXBvbmVudHMsIGZyb20sIHRvKSB7XG4gICAgICAgIGNvbnN0IGludENvbXBzID0gY29udmVydENvbG9yVHlwZShjb21wb25lbnRzLCBmcm9tLm1vZGUsIGZyb20udHlwZSwgJ2ludCcpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBNT0RFX0NPTlZFUlRFUl9NQVBbZnJvbS5tb2RlXVt0by5tb2RlXSguLi5pbnRDb21wcyk7XG4gICAgICAgIHJldHVybiBjb252ZXJ0Q29sb3JUeXBlKHJlc3VsdCwgdG8ubW9kZSwgJ2ludCcsIHRvLnR5cGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUmdiQ29sb3JDb21wb25lbnQob2JqLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IGlzRW1wdHkob2JqKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXkgaW4gb2JqICYmIHR5cGVvZiBvYmpba2V5XSA9PT0gJ251bWJlcic7XG4gICAgfVxuICAgIGNsYXNzIENvbG9yIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29tcHMsIG1vZGUsIHR5cGUgPSAnaW50Jykge1xuICAgICAgICAgICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgICAgICB0aGlzLmNvbXBzXyA9IGNvbnN0cmFpbkNvbG9yQ29tcG9uZW50cyhjb21wcywgbW9kZSwgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGJsYWNrKHR5cGUgPSAnaW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbMCwgMCwgMF0sICdyZ2InLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChvYmosIHR5cGUgPSAnaW50Jykge1xuICAgICAgICAgICAgY29uc3QgY29tcHMgPSAnYScgaW4gb2JqID8gW29iai5yLCBvYmouZywgb2JqLmIsIG9iai5hXSA6IFtvYmouciwgb2JqLmcsIG9iai5iXTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoY29tcHMsICdyZ2InLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgdG9SZ2JhT2JqZWN0KGNvbG9yLCB0eXBlID0gJ2ludCcpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xvci50b1JnYmFPYmplY3QodHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGlzUmdiQ29sb3JPYmplY3Qob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gKGlzUmdiQ29sb3JDb21wb25lbnQob2JqLCAncicpICYmXG4gICAgICAgICAgICAgICAgaXNSZ2JDb2xvckNvbXBvbmVudChvYmosICdnJykgJiZcbiAgICAgICAgICAgICAgICBpc1JnYkNvbG9yQ29tcG9uZW50KG9iaiwgJ2InKSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGlzUmdiYUNvbG9yT2JqZWN0KG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNSZ2JDb2xvck9iamVjdChvYmopICYmIGlzUmdiQ29sb3JDb21wb25lbnQob2JqLCAnYScpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpc0NvbG9yT2JqZWN0KG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNSZ2JDb2xvck9iamVjdChvYmopO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBlcXVhbHModjEsIHYyKSB7XG4gICAgICAgICAgICBpZiAodjEubW9kZSAhPT0gdjIubW9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBzMSA9IHYxLmNvbXBzXztcbiAgICAgICAgICAgIGNvbnN0IGNvbXBzMiA9IHYyLmNvbXBzXztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcHMxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBzMVtpXSAhPT0gY29tcHMyW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBnZXRDb21wb25lbnRzKG9wdF9tb2RlLCB0eXBlID0gJ2ludCcpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHBlbmRBbHBoYUNvbXBvbmVudChjb252ZXJ0Q29sb3IocmVtb3ZlQWxwaGFDb21wb25lbnQodGhpcy5jb21wc18pLCB7IG1vZGU6IHRoaXMubW9kZSwgdHlwZTogdGhpcy50eXBlIH0sIHsgbW9kZTogb3B0X21vZGUgIT09IG51bGwgJiYgb3B0X21vZGUgIT09IHZvaWQgMCA/IG9wdF9tb2RlIDogdGhpcy5tb2RlLCB0eXBlIH0pLCB0aGlzLmNvbXBzX1szXSk7XG4gICAgICAgIH1cbiAgICAgICAgdG9SZ2JhT2JqZWN0KHR5cGUgPSAnaW50Jykge1xuICAgICAgICAgICAgY29uc3QgcmdiQ29tcHMgPSB0aGlzLmdldENvbXBvbmVudHMoJ3JnYicsIHR5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByOiByZ2JDb21wc1swXSxcbiAgICAgICAgICAgICAgICBnOiByZ2JDb21wc1sxXSxcbiAgICAgICAgICAgICAgICBiOiByZ2JDb21wc1syXSxcbiAgICAgICAgICAgICAgICBhOiByZ2JDb21wc1szXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkYiA9IENsYXNzTmFtZSgnY29scCcpO1xuICAgIGNsYXNzIENvbG9yUGlja2VyVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmFscGhhVmlld3NfID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRiKCkpO1xuICAgICAgICAgICAgY29uc3QgaHN2RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGhzdkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignaHN2JykpO1xuICAgICAgICAgICAgY29uc3Qgc3ZFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgc3ZFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGIoJ3N2JykpO1xuICAgICAgICAgICAgdGhpcy5zdlBhbGV0dGVWaWV3XyA9IGNvbmZpZy5zdlBhbGV0dGVWaWV3O1xuICAgICAgICAgICAgc3ZFbGVtLmFwcGVuZENoaWxkKHRoaXMuc3ZQYWxldHRlVmlld18uZWxlbWVudCk7XG4gICAgICAgICAgICBoc3ZFbGVtLmFwcGVuZENoaWxkKHN2RWxlbSk7XG4gICAgICAgICAgICBjb25zdCBoRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGhFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGIoJ2gnKSk7XG4gICAgICAgICAgICB0aGlzLmhQYWxldHRlVmlld18gPSBjb25maWcuaFBhbGV0dGVWaWV3O1xuICAgICAgICAgICAgaEVsZW0uYXBwZW5kQ2hpbGQodGhpcy5oUGFsZXR0ZVZpZXdfLmVsZW1lbnQpO1xuICAgICAgICAgICAgaHN2RWxlbS5hcHBlbmRDaGlsZChoRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaHN2RWxlbSk7XG4gICAgICAgICAgICBjb25zdCByZ2JFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgcmdiRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRiKCdyZ2InKSk7XG4gICAgICAgICAgICB0aGlzLnRleHRWaWV3XyA9IGNvbmZpZy50ZXh0VmlldztcbiAgICAgICAgICAgIHJnYkVsZW0uYXBwZW5kQ2hpbGQodGhpcy50ZXh0Vmlld18uZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQocmdiRWxlbSk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLmFscGhhVmlld3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFscGhhVmlld3NfID0ge1xuICAgICAgICAgICAgICAgICAgICBwYWxldHRlOiBjb25maWcuYWxwaGFWaWV3cy5wYWxldHRlLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjb25maWcuYWxwaGFWaWV3cy50ZXh0LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgYUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgYUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignYScpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgYXBFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGIoJ2FwJykpO1xuICAgICAgICAgICAgICAgIGFwRWxlbS5hcHBlbmRDaGlsZCh0aGlzLmFscGhhVmlld3NfLnBhbGV0dGUuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYUVsZW0uYXBwZW5kQ2hpbGQoYXBFbGVtKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhdEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgYXRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGIoJ2F0JykpO1xuICAgICAgICAgICAgICAgIGF0RWxlbS5hcHBlbmRDaGlsZCh0aGlzLmFscGhhVmlld3NfLnRleHQuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYUVsZW0uYXBwZW5kQ2hpbGQoYXRFbGVtKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYUVsZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldCBhbGxGb2N1c2FibGVFbGVtZW50cygpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1zID0gW1xuICAgICAgICAgICAgICAgIHRoaXMuc3ZQYWxldHRlVmlld18uZWxlbWVudCxcbiAgICAgICAgICAgICAgICB0aGlzLmhQYWxldHRlVmlld18uZWxlbWVudCxcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRWaWV3Xy5tb2RlU2VsZWN0RWxlbWVudCxcbiAgICAgICAgICAgICAgICAuLi50aGlzLnRleHRWaWV3Xy50ZXh0Vmlld3MubWFwKCh2KSA9PiB2LmlucHV0RWxlbWVudCksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxwaGFWaWV3c18pIHtcbiAgICAgICAgICAgICAgICBlbGVtcy5wdXNoKHRoaXMuYWxwaGFWaWV3c18ucGFsZXR0ZS5lbGVtZW50LCB0aGlzLmFscGhhVmlld3NfLnRleHQuaW5wdXRFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlbGVtcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlQ29sb3JUeXBlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gJ2ludCcgPyAnaW50JyA6IHZhbHVlID09PSAnZmxvYXQnID8gJ2Zsb2F0JyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VDb2xvcklucHV0UGFyYW1zKHBhcmFtcykge1xuICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgYWxwaGE6IHAub3B0aW9uYWwuYm9vbGVhbixcbiAgICAgICAgICAgIGNvbG9yOiBwLm9wdGlvbmFsLm9iamVjdCh7XG4gICAgICAgICAgICAgICAgYWxwaGE6IHAub3B0aW9uYWwuYm9vbGVhbixcbiAgICAgICAgICAgICAgICB0eXBlOiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZUNvbG9yVHlwZSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGV4cGFuZGVkOiBwLm9wdGlvbmFsLmJvb2xlYW4sXG4gICAgICAgICAgICBwaWNrZXI6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlUGlja2VyTGF5b3V0KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEJhc2VTdGVwRm9yQ29sb3IoZm9yQWxwaGEpIHtcbiAgICAgICAgcmV0dXJuIGZvckFscGhhID8gMC4xIDogMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZXh0cmFjdENvbG9yVHlwZShwYXJhbXMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gcGFyYW1zLmNvbG9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudHlwZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcXVhbHNTdHJpbmdDb2xvckZvcm1hdChmMSwgZjIpIHtcbiAgICAgICAgcmV0dXJuIChmMS5hbHBoYSA9PT0gZjIuYWxwaGEgJiZcbiAgICAgICAgICAgIGYxLm1vZGUgPT09IGYyLm1vZGUgJiZcbiAgICAgICAgICAgIGYxLm5vdGF0aW9uID09PSBmMi5ub3RhdGlvbiAmJlxuICAgICAgICAgICAgZjEudHlwZSA9PT0gZjIudHlwZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKHRleHQsIG1heFZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKC9eKC4rKSUkLyk7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKHBhcnNlRmxvYXQodGV4dCksIG1heFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTWF0aC5taW4ocGFyc2VGbG9hdChtWzFdKSAqIDAuMDEgKiBtYXhWYWx1ZSwgbWF4VmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBBTkdMRV9UT19ERUdfTUFQID0ge1xuICAgICAgICBkZWc6IChhbmdsZSkgPT4gYW5nbGUsXG4gICAgICAgIGdyYWQ6IChhbmdsZSkgPT4gKGFuZ2xlICogMzYwKSAvIDQwMCxcbiAgICAgICAgcmFkOiAoYW5nbGUpID0+IChhbmdsZSAqIDM2MCkgLyAoMiAqIE1hdGguUEkpLFxuICAgICAgICB0dXJuOiAoYW5nbGUpID0+IGFuZ2xlICogMzYwLFxuICAgIH07XG4gICAgZnVuY3Rpb24gcGFyc2VDc3NOdW1iZXJPckFuZ2xlKHRleHQpIHtcbiAgICAgICAgY29uc3QgbSA9IHRleHQubWF0Y2goL14oWzAtOS5dKz8pKGRlZ3xncmFkfHJhZHx0dXJuKSQvKTtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbmdsZSA9IHBhcnNlRmxvYXQobVsxXSk7XG4gICAgICAgIGNvbnN0IHVuaXQgPSBtWzJdO1xuICAgICAgICByZXR1cm4gQU5HTEVfVE9fREVHX01BUFt1bml0XShhbmdsZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25hbFJnYkNvbG9yQ29tcG9uZW50cyh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKC9ecmdiXFwoXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccypcXCkkLyk7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHMgPSBbXG4gICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzFdLCAyNTUpLFxuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsyXSwgMjU1KSxcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bM10sIDI1NSksXG4gICAgICAgIF07XG4gICAgICAgIGlmIChpc05hTihjb21wc1swXSkgfHwgaXNOYU4oY29tcHNbMV0pIHx8IGlzTmFOKGNvbXBzWzJdKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGdW5jdGlvbmFsUmdiQ29sb3JQYXJzZXIodHlwZSkge1xuICAgICAgICByZXR1cm4gKHRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBzID0gcGFyc2VGdW5jdGlvbmFsUmdiQ29sb3JDb21wb25lbnRzKHRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBzID8gbmV3IENvbG9yKGNvbXBzLCAncmdiJywgdHlwZSkgOiBudWxsO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uYWxSZ2JhQ29sb3JDb21wb25lbnRzKHRleHQpIHtcbiAgICAgICAgY29uc3QgbSA9IHRleHQubWF0Y2goL15yZ2JhXFwoXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKlxcKSQvKTtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wcyA9IFtcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bMV0sIDI1NSksXG4gICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzJdLCAyNTUpLFxuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVszXSwgMjU1KSxcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bNF0sIDEpLFxuICAgICAgICBdO1xuICAgICAgICBpZiAoaXNOYU4oY29tcHNbMF0pIHx8XG4gICAgICAgICAgICBpc05hTihjb21wc1sxXSkgfHxcbiAgICAgICAgICAgIGlzTmFOKGNvbXBzWzJdKSB8fFxuICAgICAgICAgICAgaXNOYU4oY29tcHNbM10pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uYWxSZ2JhQ29sb3JQYXJzZXIodHlwZSkge1xuICAgICAgICByZXR1cm4gKHRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBzID0gcGFyc2VGdW5jdGlvbmFsUmdiYUNvbG9yQ29tcG9uZW50cyh0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBjb21wcyA/IG5ldyBDb2xvcihjb21wcywgJ3JnYicsIHR5cGUpIDogbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VIc2xDb2xvckNvbXBvbmVudHModGV4dCkge1xuICAgICAgICBjb25zdCBtID0gdGV4dC5tYXRjaCgvXmhzbFxcKFxccyooWzAtOUEtRmEtZi5dKyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccypcXCkkLyk7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHMgPSBbXG4gICAgICAgICAgICBwYXJzZUNzc051bWJlck9yQW5nbGUobVsxXSksXG4gICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzJdLCAxMDApLFxuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVszXSwgMTAwKSxcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKGlzTmFOKGNvbXBzWzBdKSB8fCBpc05hTihjb21wc1sxXSkgfHwgaXNOYU4oY29tcHNbMl0pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUhzbENvbG9yUGFyc2VyKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuICh0ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wcyA9IHBhcnNlSHNsQ29sb3JDb21wb25lbnRzKHRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBzID8gbmV3IENvbG9yKGNvbXBzLCAnaHNsJywgdHlwZSkgOiBudWxsO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUhzbGFDb2xvckNvbXBvbmVudHModGV4dCkge1xuICAgICAgICBjb25zdCBtID0gdGV4dC5tYXRjaCgvXmhzbGFcXChcXHMqKFswLTlBLUZhLWYuXSsoPzpkZWd8Z3JhZHxyYWR8dHVybik/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccypcXCkkLyk7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHMgPSBbXG4gICAgICAgICAgICBwYXJzZUNzc051bWJlck9yQW5nbGUobVsxXSksXG4gICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzJdLCAxMDApLFxuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVszXSwgMTAwKSxcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bNF0sIDEpLFxuICAgICAgICBdO1xuICAgICAgICBpZiAoaXNOYU4oY29tcHNbMF0pIHx8XG4gICAgICAgICAgICBpc05hTihjb21wc1sxXSkgfHxcbiAgICAgICAgICAgIGlzTmFOKGNvbXBzWzJdKSB8fFxuICAgICAgICAgICAgaXNOYU4oY29tcHNbM10pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUhzbGFDb2xvclBhcnNlcih0eXBlKSB7XG4gICAgICAgIHJldHVybiAodGV4dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcHMgPSBwYXJzZUhzbGFDb2xvckNvbXBvbmVudHModGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gY29tcHMgPyBuZXcgQ29sb3IoY29tcHMsICdoc2wnLCB0eXBlKSA6IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlSGV4UmdiQ29sb3JDb21wb25lbnRzKHRleHQpIHtcbiAgICAgICAgY29uc3QgbVJnYiA9IHRleHQubWF0Y2goL14jKFswLTlBLUZhLWZdKShbMC05QS1GYS1mXSkoWzAtOUEtRmEtZl0pJC8pO1xuICAgICAgICBpZiAobVJnYikge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBwYXJzZUludChtUmdiWzFdICsgbVJnYlsxXSwgMTYpLFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbMl0gKyBtUmdiWzJdLCAxNiksXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQobVJnYlszXSArIG1SZ2JbM10sIDE2KSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbVJyZ2diYiA9IHRleHQubWF0Y2goL14oPzojfDB4KShbMC05QS1GYS1mXXsyfSkoWzAtOUEtRmEtZl17Mn0pKFswLTlBLUZhLWZdezJ9KSQvKTtcbiAgICAgICAgaWYgKG1ScmdnYmIpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQobVJyZ2diYlsxXSwgMTYpLFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KG1ScmdnYmJbMl0sIDE2KSxcbiAgICAgICAgICAgICAgICBwYXJzZUludChtUnJnZ2JiWzNdLCAxNiksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUhleFJnYkNvbG9yKHRleHQpIHtcbiAgICAgICAgY29uc3QgY29tcHMgPSBwYXJzZUhleFJnYkNvbG9yQ29tcG9uZW50cyh0ZXh0KTtcbiAgICAgICAgcmV0dXJuIGNvbXBzID8gbmV3IENvbG9yKGNvbXBzLCAncmdiJywgJ2ludCcpIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VIZXhSZ2JhQ29sb3JDb21wb25lbnRzKHRleHQpIHtcbiAgICAgICAgY29uc3QgbVJnYiA9IHRleHQubWF0Y2goL14jPyhbMC05QS1GYS1mXSkoWzAtOUEtRmEtZl0pKFswLTlBLUZhLWZdKShbMC05QS1GYS1mXSkkLyk7XG4gICAgICAgIGlmIChtUmdiKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbMV0gKyBtUmdiWzFdLCAxNiksXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQobVJnYlsyXSArIG1SZ2JbMl0sIDE2KSxcbiAgICAgICAgICAgICAgICBwYXJzZUludChtUmdiWzNdICsgbVJnYlszXSwgMTYpLFxuICAgICAgICAgICAgICAgIG1hcFJhbmdlKHBhcnNlSW50KG1SZ2JbNF0gKyBtUmdiWzRdLCAxNiksIDAsIDI1NSwgMCwgMSksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ScmdnYmIgPSB0ZXh0Lm1hdGNoKC9eKD86I3wweCk/KFswLTlBLUZhLWZdezJ9KShbMC05QS1GYS1mXXsyfSkoWzAtOUEtRmEtZl17Mn0pKFswLTlBLUZhLWZdezJ9KSQvKTtcbiAgICAgICAgaWYgKG1ScmdnYmIpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQobVJyZ2diYlsxXSwgMTYpLFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KG1ScmdnYmJbMl0sIDE2KSxcbiAgICAgICAgICAgICAgICBwYXJzZUludChtUnJnZ2JiWzNdLCAxNiksXG4gICAgICAgICAgICAgICAgbWFwUmFuZ2UocGFyc2VJbnQobVJyZ2diYls0XSwgMTYpLCAwLCAyNTUsIDAsIDEpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VIZXhSZ2JhQ29sb3IodGV4dCkge1xuICAgICAgICBjb25zdCBjb21wcyA9IHBhcnNlSGV4UmdiYUNvbG9yQ29tcG9uZW50cyh0ZXh0KTtcbiAgICAgICAgcmV0dXJuIGNvbXBzID8gbmV3IENvbG9yKGNvbXBzLCAncmdiJywgJ2ludCcpIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VPYmplY3RSZ2JDb2xvckNvbXBvbmVudHModGV4dCkge1xuICAgICAgICBjb25zdCBtID0gdGV4dC5tYXRjaCgvXlxce1xccypyXFxzKjpcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccypnXFxzKjpcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccypiXFxzKjpcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqXFx9JC8pO1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBzID0gW1xuICAgICAgICAgICAgcGFyc2VGbG9hdChtWzFdKSxcbiAgICAgICAgICAgIHBhcnNlRmxvYXQobVsyXSksXG4gICAgICAgICAgICBwYXJzZUZsb2F0KG1bM10pLFxuICAgICAgICBdO1xuICAgICAgICBpZiAoaXNOYU4oY29tcHNbMF0pIHx8IGlzTmFOKGNvbXBzWzFdKSB8fCBpc05hTihjb21wc1syXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0UmdiQ29sb3JQYXJzZXIodHlwZSkge1xuICAgICAgICByZXR1cm4gKHRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBzID0gcGFyc2VPYmplY3RSZ2JDb2xvckNvbXBvbmVudHModGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gY29tcHMgPyBuZXcgQ29sb3IoY29tcHMsICdyZ2InLCB0eXBlKSA6IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0UmdiYUNvbG9yQ29tcG9uZW50cyh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKC9eXFx7XFxzKnJcXHMqOlxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKmdcXHMqOlxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKmJcXHMqOlxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKmFcXHMqOlxccyooWzAtOUEtRmEtZi5dKyU/KVxccypcXH0kLyk7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHMgPSBbXG4gICAgICAgICAgICBwYXJzZUZsb2F0KG1bMV0pLFxuICAgICAgICAgICAgcGFyc2VGbG9hdChtWzJdKSxcbiAgICAgICAgICAgIHBhcnNlRmxvYXQobVszXSksXG4gICAgICAgICAgICBwYXJzZUZsb2F0KG1bNF0pLFxuICAgICAgICBdO1xuICAgICAgICBpZiAoaXNOYU4oY29tcHNbMF0pIHx8XG4gICAgICAgICAgICBpc05hTihjb21wc1sxXSkgfHxcbiAgICAgICAgICAgIGlzTmFOKGNvbXBzWzJdKSB8fFxuICAgICAgICAgICAgaXNOYU4oY29tcHNbM10pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFJnYmFDb2xvclBhcnNlcih0eXBlKSB7XG4gICAgICAgIHJldHVybiAodGV4dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcHMgPSBwYXJzZU9iamVjdFJnYmFDb2xvckNvbXBvbmVudHModGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gY29tcHMgPyBuZXcgQ29sb3IoY29tcHMsICdyZ2InLCB0eXBlKSA6IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IFBBUlNFUl9BTkRfUkVTVUxUID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBwYXJzZXI6IHBhcnNlSGV4UmdiQ29sb3JDb21wb25lbnRzLFxuICAgICAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgICAgICAgYWxwaGE6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdyZ2InLFxuICAgICAgICAgICAgICAgIG5vdGF0aW9uOiAnaGV4JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBhcnNlcjogcGFyc2VIZXhSZ2JhQ29sb3JDb21wb25lbnRzLFxuICAgICAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgICAgICAgYWxwaGE6IHRydWUsXG4gICAgICAgICAgICAgICAgbW9kZTogJ3JnYicsXG4gICAgICAgICAgICAgICAgbm90YXRpb246ICdoZXgnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcGFyc2VyOiBwYXJzZUZ1bmN0aW9uYWxSZ2JDb2xvckNvbXBvbmVudHMsXG4gICAgICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgICAgICBhbHBoYTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbW9kZTogJ3JnYicsXG4gICAgICAgICAgICAgICAgbm90YXRpb246ICdmdW5jJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBhcnNlcjogcGFyc2VGdW5jdGlvbmFsUmdiYUNvbG9yQ29tcG9uZW50cyxcbiAgICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgICAgIGFscGhhOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdyZ2InLFxuICAgICAgICAgICAgICAgIG5vdGF0aW9uOiAnZnVuYycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwYXJzZXI6IHBhcnNlSHNsQ29sb3JDb21wb25lbnRzLFxuICAgICAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgICAgICAgYWxwaGE6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdoc2wnLFxuICAgICAgICAgICAgICAgIG5vdGF0aW9uOiAnZnVuYycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwYXJzZXI6IHBhcnNlSHNsYUNvbG9yQ29tcG9uZW50cyxcbiAgICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgICAgIGFscGhhOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdoc2wnLFxuICAgICAgICAgICAgICAgIG5vdGF0aW9uOiAnZnVuYycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwYXJzZXI6IHBhcnNlT2JqZWN0UmdiQ29sb3JDb21wb25lbnRzLFxuICAgICAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgICAgICAgYWxwaGE6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdyZ2InLFxuICAgICAgICAgICAgICAgIG5vdGF0aW9uOiAnb2JqZWN0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBhcnNlcjogcGFyc2VPYmplY3RSZ2JhQ29sb3JDb21wb25lbnRzLFxuICAgICAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgICAgICAgYWxwaGE6IHRydWUsXG4gICAgICAgICAgICAgICAgbW9kZTogJ3JnYicsXG4gICAgICAgICAgICAgICAgbm90YXRpb246ICdvYmplY3QnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICBdO1xuICAgIGZ1bmN0aW9uIGRldGVjdFN0cmluZ0NvbG9yKHRleHQpIHtcbiAgICAgICAgcmV0dXJuIFBBUlNFUl9BTkRfUkVTVUxULnJlZHVjZSgocHJldiwgeyBwYXJzZXIsIHJlc3VsdDogZGV0ZWN0aW9uIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VyKHRleHQpID8gZGV0ZWN0aW9uIDogbnVsbDtcbiAgICAgICAgfSwgbnVsbCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRldGVjdFN0cmluZ0NvbG9yRm9ybWF0KHRleHQsIHR5cGUgPSAnaW50Jykge1xuICAgICAgICBjb25zdCByID0gZGV0ZWN0U3RyaW5nQ29sb3IodGV4dCk7XG4gICAgICAgIGlmICghcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHIubm90YXRpb24gPT09ICdoZXgnICYmIHR5cGUgIT09ICdmbG9hdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHIpLCB7IHR5cGU6ICdpbnQnIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyLm5vdGF0aW9uID09PSAnZnVuYycpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHIpLCB7IHR5cGU6IHR5cGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IFRZUEVfVE9fUEFSU0VSUyA9IHtcbiAgICAgICAgaW50OiBbXG4gICAgICAgICAgICBwYXJzZUhleFJnYkNvbG9yLFxuICAgICAgICAgICAgcGFyc2VIZXhSZ2JhQ29sb3IsXG4gICAgICAgICAgICBjcmVhdGVGdW5jdGlvbmFsUmdiQ29sb3JQYXJzZXIoJ2ludCcpLFxuICAgICAgICAgICAgY3JlYXRlRnVuY3Rpb25hbFJnYmFDb2xvclBhcnNlcignaW50JyksXG4gICAgICAgICAgICBjcmVhdGVIc2xDb2xvclBhcnNlcignaW50JyksXG4gICAgICAgICAgICBjcmVhdGVIc2xhQ29sb3JQYXJzZXIoJ2ludCcpLFxuICAgICAgICAgICAgY3JlYXRlT2JqZWN0UmdiQ29sb3JQYXJzZXIoJ2ludCcpLFxuICAgICAgICAgICAgY3JlYXRlT2JqZWN0UmdiYUNvbG9yUGFyc2VyKCdpbnQnKSxcbiAgICAgICAgXSxcbiAgICAgICAgZmxvYXQ6IFtcbiAgICAgICAgICAgIGNyZWF0ZUZ1bmN0aW9uYWxSZ2JDb2xvclBhcnNlcignZmxvYXQnKSxcbiAgICAgICAgICAgIGNyZWF0ZUZ1bmN0aW9uYWxSZ2JhQ29sb3JQYXJzZXIoJ2Zsb2F0JyksXG4gICAgICAgICAgICBjcmVhdGVIc2xDb2xvclBhcnNlcignZmxvYXQnKSxcbiAgICAgICAgICAgIGNyZWF0ZUhzbGFDb2xvclBhcnNlcignZmxvYXQnKSxcbiAgICAgICAgICAgIGNyZWF0ZU9iamVjdFJnYkNvbG9yUGFyc2VyKCdmbG9hdCcpLFxuICAgICAgICAgICAgY3JlYXRlT2JqZWN0UmdiYUNvbG9yUGFyc2VyKCdmbG9hdCcpLFxuICAgICAgICBdLFxuICAgIH07XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29sb3JTdHJpbmdCaW5kaW5nUmVhZGVyKHR5cGUpIHtcbiAgICAgICAgY29uc3QgcGFyc2VycyA9IFRZUEVfVE9fUEFSU0VSU1t0eXBlXTtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3IuYmxhY2sodHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZXJzLnJlZHVjZSgocHJldiwgcGFyc2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXIodmFsdWUpO1xuICAgICAgICAgICAgfSwgbnVsbCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICE9PSBudWxsICYmIHJlc3VsdCAhPT0gdm9pZCAwID8gcmVzdWx0IDogQ29sb3IuYmxhY2sodHlwZSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbG9yU3RyaW5nUGFyc2VyKHR5cGUpIHtcbiAgICAgICAgY29uc3QgcGFyc2VycyA9IFRZUEVfVE9fUEFSU0VSU1t0eXBlXTtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlcnMucmVkdWNlKChwcmV2LCBwYXJzZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlcih2YWx1ZSk7XG4gICAgICAgICAgICB9LCBudWxsKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gemVyb2ZpbGwoY29tcCkge1xuICAgICAgICBjb25zdCBoZXggPSBjb25zdHJhaW5SYW5nZShNYXRoLmZsb29yKGNvbXApLCAwLCAyNTUpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgcmV0dXJuIGhleC5sZW5ndGggPT09IDEgPyBgMCR7aGV4fWAgOiBoZXg7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9IZXhSZ2JTdHJpbmcodmFsdWUsIHByZWZpeCA9ICcjJykge1xuICAgICAgICBjb25zdCBoZXhlcyA9IHJlbW92ZUFscGhhQ29tcG9uZW50KHZhbHVlLmdldENvbXBvbmVudHMoJ3JnYicpKVxuICAgICAgICAgICAgLm1hcCh6ZXJvZmlsbClcbiAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeH0ke2hleGVzfWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9IZXhSZ2JhU3RyaW5nKHZhbHVlLCBwcmVmaXggPSAnIycpIHtcbiAgICAgICAgY29uc3QgcmdiYUNvbXBzID0gdmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJyk7XG4gICAgICAgIGNvbnN0IGhleGVzID0gW3JnYmFDb21wc1swXSwgcmdiYUNvbXBzWzFdLCByZ2JhQ29tcHNbMl0sIHJnYmFDb21wc1szXSAqIDI1NV1cbiAgICAgICAgICAgIC5tYXAoemVyb2ZpbGwpXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgICAgIHJldHVybiBgJHtwcmVmaXh9JHtoZXhlc31gO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvclRvRnVuY3Rpb25hbFJnYlN0cmluZyh2YWx1ZSwgb3B0X3R5cGUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gY3JlYXRlTnVtYmVyRm9ybWF0dGVyKG9wdF90eXBlID09PSAnZmxvYXQnID8gMiA6IDApO1xuICAgICAgICBjb25zdCBjb21wcyA9IHJlbW92ZUFscGhhQ29tcG9uZW50KHZhbHVlLmdldENvbXBvbmVudHMoJ3JnYicsIG9wdF90eXBlKSkubWFwKChjb21wKSA9PiBmb3JtYXR0ZXIoY29tcCkpO1xuICAgICAgICByZXR1cm4gYHJnYigke2NvbXBzLmpvaW4oJywgJyl9KWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uYWxSZ2JDb2xvckZvcm1hdHRlcih0eXBlKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb2xvclRvRnVuY3Rpb25hbFJnYlN0cmluZyh2YWx1ZSwgdHlwZSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9GdW5jdGlvbmFsUmdiYVN0cmluZyh2YWx1ZSwgb3B0X3R5cGUpIHtcbiAgICAgICAgY29uc3QgYUZvcm1hdHRlciA9IGNyZWF0ZU51bWJlckZvcm1hdHRlcigyKTtcbiAgICAgICAgY29uc3QgcmdiRm9ybWF0dGVyID0gY3JlYXRlTnVtYmVyRm9ybWF0dGVyKG9wdF90eXBlID09PSAnZmxvYXQnID8gMiA6IDApO1xuICAgICAgICBjb25zdCBjb21wcyA9IHZhbHVlLmdldENvbXBvbmVudHMoJ3JnYicsIG9wdF90eXBlKS5tYXAoKGNvbXAsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBpbmRleCA9PT0gMyA/IGFGb3JtYXR0ZXIgOiByZ2JGb3JtYXR0ZXI7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVyKGNvbXApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGByZ2JhKCR7Y29tcHMuam9pbignLCAnKX0pYDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25hbFJnYmFDb2xvckZvcm1hdHRlcih0eXBlKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmcodmFsdWUsIHR5cGUpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvclRvRnVuY3Rpb25hbEhzbFN0cmluZyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXJzID0gW1xuICAgICAgICAgICAgY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDApLFxuICAgICAgICAgICAgZm9ybWF0UGVyY2VudGFnZSxcbiAgICAgICAgICAgIGZvcm1hdFBlcmNlbnRhZ2UsXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGNvbXBzID0gcmVtb3ZlQWxwaGFDb21wb25lbnQodmFsdWUuZ2V0Q29tcG9uZW50cygnaHNsJykpLm1hcCgoY29tcCwgaW5kZXgpID0+IGZvcm1hdHRlcnNbaW5kZXhdKGNvbXApKTtcbiAgICAgICAgcmV0dXJuIGBoc2woJHtjb21wcy5qb2luKCcsICcpfSlgO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvclRvRnVuY3Rpb25hbEhzbGFTdHJpbmcodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVycyA9IFtcbiAgICAgICAgICAgIGNyZWF0ZU51bWJlckZvcm1hdHRlcigwKSxcbiAgICAgICAgICAgIGZvcm1hdFBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBmb3JtYXRQZXJjZW50YWdlLFxuICAgICAgICAgICAgY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDIpLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBjb21wcyA9IHZhbHVlXG4gICAgICAgICAgICAuZ2V0Q29tcG9uZW50cygnaHNsJylcbiAgICAgICAgICAgIC5tYXAoKGNvbXAsIGluZGV4KSA9PiBmb3JtYXR0ZXJzW2luZGV4XShjb21wKSk7XG4gICAgICAgIHJldHVybiBgaHNsYSgke2NvbXBzLmpvaW4oJywgJyl9KWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9PYmplY3RSZ2JTdHJpbmcodmFsdWUsIHR5cGUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gY3JlYXRlTnVtYmVyRm9ybWF0dGVyKHR5cGUgPT09ICdmbG9hdCcgPyAyIDogMCk7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gWydyJywgJ2cnLCAnYiddO1xuICAgICAgICBjb25zdCBjb21wcyA9IHJlbW92ZUFscGhhQ29tcG9uZW50KHZhbHVlLmdldENvbXBvbmVudHMoJ3JnYicsIHR5cGUpKS5tYXAoKGNvbXAsIGluZGV4KSA9PiBgJHtuYW1lc1tpbmRleF19OiAke2Zvcm1hdHRlcihjb21wKX1gKTtcbiAgICAgICAgcmV0dXJuIGB7JHtjb21wcy5qb2luKCcsICcpfX1gO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVPYmplY3RSZ2JDb2xvckZvcm1hdHRlcih0eXBlKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUpID0+IGNvbG9yVG9PYmplY3RSZ2JTdHJpbmcodmFsdWUsIHR5cGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvclRvT2JqZWN0UmdiYVN0cmluZyh2YWx1ZSwgdHlwZSkge1xuICAgICAgICBjb25zdCBhRm9ybWF0dGVyID0gY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDIpO1xuICAgICAgICBjb25zdCByZ2JGb3JtYXR0ZXIgPSBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIodHlwZSA9PT0gJ2Zsb2F0JyA/IDIgOiAwKTtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBbJ3InLCAnZycsICdiJywgJ2EnXTtcbiAgICAgICAgY29uc3QgY29tcHMgPSB2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InLCB0eXBlKS5tYXAoKGNvbXAsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBpbmRleCA9PT0gMyA/IGFGb3JtYXR0ZXIgOiByZ2JGb3JtYXR0ZXI7XG4gICAgICAgICAgICByZXR1cm4gYCR7bmFtZXNbaW5kZXhdfTogJHtmb3JtYXR0ZXIoY29tcCl9YDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBgeyR7Y29tcHMuam9pbignLCAnKX19YDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0UmdiYUNvbG9yRm9ybWF0dGVyKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSkgPT4gY29sb3JUb09iamVjdFJnYmFTdHJpbmcodmFsdWUsIHR5cGUpO1xuICAgIH1cbiAgICBjb25zdCBGT1JNQVRfQU5EX1NUUklOR0lGSUVSUyA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgYWxwaGE6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdyZ2InLFxuICAgICAgICAgICAgICAgIG5vdGF0aW9uOiAnaGV4JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW50JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHJpbmdpZmllcjogY29sb3JUb0hleFJnYlN0cmluZyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgYWxwaGE6IHRydWUsXG4gICAgICAgICAgICAgICAgbW9kZTogJ3JnYicsXG4gICAgICAgICAgICAgICAgbm90YXRpb246ICdoZXgnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdpbnQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0cmluZ2lmaWVyOiBjb2xvclRvSGV4UmdiYVN0cmluZyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgYWxwaGE6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdoc2wnLFxuICAgICAgICAgICAgICAgIG5vdGF0aW9uOiAnZnVuYycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2ludCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RyaW5naWZpZXI6IGNvbG9yVG9GdW5jdGlvbmFsSHNsU3RyaW5nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICBhbHBoYTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtb2RlOiAnaHNsJyxcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogJ2Z1bmMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdpbnQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0cmluZ2lmaWVyOiBjb2xvclRvRnVuY3Rpb25hbEhzbGFTdHJpbmcsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLlsnaW50JywgJ2Zsb2F0J10ucmVkdWNlKChwcmV2LCB0eXBlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6ICdyZ2InLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm90YXRpb246ICdmdW5jJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ2lmaWVyOiBjcmVhdGVGdW5jdGlvbmFsUmdiQ29sb3JGb3JtYXR0ZXIodHlwZSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGE6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiAncmdiJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGF0aW9uOiAnZnVuYycsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdHJpbmdpZmllcjogY3JlYXRlRnVuY3Rpb25hbFJnYmFDb2xvckZvcm1hdHRlcih0eXBlKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbHBoYTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiAncmdiJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGF0aW9uOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ2lmaWVyOiBjcmVhdGVPYmplY3RSZ2JDb2xvckZvcm1hdHRlcih0eXBlKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbHBoYTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6ICdyZ2InLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm90YXRpb246ICdvYmplY3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5naWZpZXI6IGNyZWF0ZU9iamVjdFJnYmFDb2xvckZvcm1hdHRlcih0eXBlKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSwgW10pLFxuICAgIF07XG4gICAgZnVuY3Rpb24gZmluZENvbG9yU3RyaW5naWZpZXIoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiBGT1JNQVRfQU5EX1NUUklOR0lGSUVSUy5yZWR1Y2UoKHByZXYsIGZhcykgPT4ge1xuICAgICAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlcXVhbHNTdHJpbmdDb2xvckZvcm1hdChmYXMuZm9ybWF0LCBmb3JtYXQpXG4gICAgICAgICAgICAgICAgPyBmYXMuc3RyaW5naWZpZXJcbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sIG51bGwpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRhID0gQ2xhc3NOYW1lKCdhcGwnKTtcbiAgICBjbGFzcyBBUGFsZXR0ZVZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlXyA9IHRoaXMub25WYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGEoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRUYWJJbmRleCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgYmFyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGJhckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYSgnYicpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChiYXJFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbG9yRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRhKCdjJykpO1xuICAgICAgICAgICAgYmFyRWxlbS5hcHBlbmRDaGlsZChjb2xvckVsZW0pO1xuICAgICAgICAgICAgdGhpcy5jb2xvckVsZW1fID0gY29sb3JFbGVtO1xuICAgICAgICAgICAgY29uc3QgbWFya2VyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYSgnbScpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtYXJrZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8gPSBtYXJrZXJFbGVtO1xuICAgICAgICAgICAgY29uc3QgcHJldmlld0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBwcmV2aWV3RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRhKCdwJykpO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5hcHBlbmRDaGlsZChwcmV2aWV3RWxlbSk7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdFbGVtXyA9IHByZXZpZXdFbGVtO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgcmdiYUNvbXBzID0gYy5nZXRDb21wb25lbnRzKCdyZ2InKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRDb2xvciA9IG5ldyBDb2xvcihbcmdiYUNvbXBzWzBdLCByZ2JhQ29tcHNbMV0sIHJnYmFDb21wc1syXSwgMF0sICdyZ2InKTtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0Q29sb3IgPSBuZXcgQ29sb3IoW3JnYmFDb21wc1swXSwgcmdiYUNvbXBzWzFdLCByZ2JhQ29tcHNbMl0sIDI1NV0sICdyZ2InKTtcbiAgICAgICAgICAgIGNvbnN0IGdyYWRpZW50Q29tcHMgPSBbXG4gICAgICAgICAgICAgICAgJ3RvIHJpZ2h0JyxcbiAgICAgICAgICAgICAgICBjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmcobGVmdENvbG9yKSxcbiAgICAgICAgICAgICAgICBjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmcocmlnaHRDb2xvciksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgdGhpcy5jb2xvckVsZW1fLnN0eWxlLmJhY2tncm91bmQgPSBgbGluZWFyLWdyYWRpZW50KCR7Z3JhZGllbnRDb21wcy5qb2luKCcsJyl9KWA7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdFbGVtXy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmcoYyk7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gbWFwUmFuZ2UocmdiYUNvbXBzWzNdLCAwLCAxLCAwLCAxMDApO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5sZWZ0ID0gYCR7bGVmdH0lYDtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQVBhbGV0dGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25LZXlEb3duXyA9IHRoaXMub25LZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbktleVVwXyA9IHRoaXMub25LZXlVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyRG93bl8gPSB0aGlzLm9uUG9pbnRlckRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlck1vdmVfID0gdGhpcy5vblBvaW50ZXJNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJVcF8gPSB0aGlzLm9uUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBBUGFsZXR0ZVZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfID0gbmV3IFBvaW50ZXJIYW5kbGVyKHRoaXMudmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vblBvaW50ZXJEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignbW92ZScsIHRoaXMub25Qb2ludGVyTW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ3VwJywgdGhpcy5vblBvaW50ZXJVcF8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25LZXlVcF8pO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZVBvaW50ZXJFdmVudF8oZCwgb3B0cykge1xuICAgICAgICAgICAgaWYgKCFkLnBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWxwaGEgPSBkLnBvaW50LnggLyBkLmJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgW2gsIHMsIHZdID0gYy5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IENvbG9yKFtoLCBzLCB2LCBhbHBoYV0sICdoc3YnKSwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bl8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlck1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJVcF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbktleURvd25fKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZvcktleShnZXRCYXNlU3RlcEZvckNvbG9yKHRydWUpLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBbaCwgcywgdiwgYV0gPSBjLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgQ29sb3IoW2gsIHMsIHYsIGEgKyBzdGVwXSwgJ2hzdicpLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5VXBfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZvcktleShnZXRCYXNlU3RlcEZvckNvbG9yKHRydWUpLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSQ5ID0gQ2xhc3NOYW1lKCdjb2x0eHQnKTtcbiAgICBmdW5jdGlvbiBjcmVhdGVNb2RlU2VsZWN0RWxlbWVudChkb2MpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXG4gICAgICAgICAgICB7IHRleHQ6ICdSR0InLCB2YWx1ZTogJ3JnYicgfSxcbiAgICAgICAgICAgIHsgdGV4dDogJ0hTTCcsIHZhbHVlOiAnaHNsJyB9LFxuICAgICAgICAgICAgeyB0ZXh0OiAnSFNWJywgdmFsdWU6ICdoc3YnIH0sXG4gICAgICAgIF07XG4gICAgICAgIHNlbGVjdEVsZW0uYXBwZW5kQ2hpbGQoaXRlbXMucmVkdWNlKChmcmFnLCBpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcHRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuICAgICAgICAgICAgb3B0RWxlbS50ZXh0Q29udGVudCA9IGl0ZW0udGV4dDtcbiAgICAgICAgICAgIG9wdEVsZW0udmFsdWUgPSBpdGVtLnZhbHVlO1xuICAgICAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChvcHRFbGVtKTtcbiAgICAgICAgICAgIHJldHVybiBmcmFnO1xuICAgICAgICB9LCBkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKSk7XG4gICAgICAgIHJldHVybiBzZWxlY3RFbGVtO1xuICAgIH1cbiAgICBjbGFzcyBDb2xvclRleHRWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ5KCkpO1xuICAgICAgICAgICAgY29uc3QgbW9kZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtb2RlRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ5KCdtJykpO1xuICAgICAgICAgICAgdGhpcy5tb2RlRWxlbV8gPSBjcmVhdGVNb2RlU2VsZWN0RWxlbWVudChkb2MpO1xuICAgICAgICAgICAgdGhpcy5tb2RlRWxlbV8uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOSgnbXMnKSk7XG4gICAgICAgICAgICBtb2RlRWxlbS5hcHBlbmRDaGlsZCh0aGlzLm1vZGVTZWxlY3RFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVNYXJrZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbW9kZU1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOSgnbW0nKSk7XG4gICAgICAgICAgICBtb2RlTWFya2VyRWxlbS5hcHBlbmRDaGlsZChjcmVhdGVTdmdJY29uRWxlbWVudChkb2MsICdkcm9wZG93bicpKTtcbiAgICAgICAgICAgIG1vZGVFbGVtLmFwcGVuZENoaWxkKG1vZGVNYXJrZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtb2RlRWxlbSk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0c0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXh0c0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOSgndycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0c0VsZW0pO1xuICAgICAgICAgICAgdGhpcy50ZXh0c0VsZW1fID0gdGV4dHNFbGVtO1xuICAgICAgICAgICAgdGhpcy50ZXh0Vmlld3NfID0gY29uZmlnLnRleHRWaWV3cztcbiAgICAgICAgICAgIHRoaXMuYXBwbHlUZXh0Vmlld3NfKCk7XG4gICAgICAgICAgICBiaW5kVmFsdWUoY29uZmlnLmNvbG9yTW9kZSwgKG1vZGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVFbGVtXy52YWx1ZSA9IG1vZGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbW9kZVNlbGVjdEVsZW1lbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlRWxlbV87XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRleHRWaWV3cygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHRWaWV3c187XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHRleHRWaWV3cyh0ZXh0Vmlld3MpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdzXyA9IHRleHRWaWV3cztcbiAgICAgICAgICAgIHRoaXMuYXBwbHlUZXh0Vmlld3NfKCk7XG4gICAgICAgIH1cbiAgICAgICAgYXBwbHlUZXh0Vmlld3NfKCkge1xuICAgICAgICAgICAgcmVtb3ZlQ2hpbGRFbGVtZW50cyh0aGlzLnRleHRzRWxlbV8pO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICB0aGlzLnRleHRWaWV3c18uZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGNvbXBFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDkoJ2MnKSk7XG4gICAgICAgICAgICAgICAgY29tcEVsZW0uYXBwZW5kQ2hpbGQodi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRzRWxlbV8uYXBwZW5kQ2hpbGQoY29tcEVsZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGb3JtYXR0ZXIkMih0eXBlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIodHlwZSA9PT0gJ2Zsb2F0JyA/IDIgOiAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29uc3RyYWludCQ1KG1vZGUsIHR5cGUsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1heCA9IGdldENvbG9yTWF4Q29tcG9uZW50cyhtb2RlLCB0eXBlKVtpbmRleF07XG4gICAgICAgIHJldHVybiBuZXcgUmFuZ2VDb25zdHJhaW50KHtcbiAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgIG1heDogbWF4LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcihkb2MsIGNvbmZpZywgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgIGFycmF5UG9zaXRpb246IGluZGV4ID09PSAwID8gJ2ZzdCcgOiBpbmRleCA9PT0gMyAtIDEgPyAnbHN0JyA6ICdtaWQnLFxuICAgICAgICAgICAgYmFzZVN0ZXA6IGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpLFxuICAgICAgICAgICAgcGFyc2VyOiBjb25maWcucGFyc2VyLFxuICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgIGRyYWdnaW5nU2NhbGU6IGNvbmZpZy5jb2xvclR5cGUgPT09ICdmbG9hdCcgPyAwLjAxIDogMSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZUZvcm1hdHRlciQyKGNvbmZpZy5jb2xvclR5cGUpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB2YWx1ZTogY3JlYXRlVmFsdWUoMCwge1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGNyZWF0ZUNvbnN0cmFpbnQkNShjb25maWcuY29sb3JNb2RlLCBjb25maWcuY29sb3JUeXBlLCBpbmRleCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsYXNzIENvbG9yVGV4dENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbk1vZGVTZWxlY3RDaGFuZ2VfID0gdGhpcy5vbk1vZGVTZWxlY3RDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmNvbG9yVHlwZV8gPSBjb25maWcuY29sb3JUeXBlO1xuICAgICAgICAgICAgdGhpcy5wYXJzZXJfID0gY29uZmlnLnBhcnNlcjtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLmNvbG9yTW9kZSA9IGNyZWF0ZVZhbHVlKHRoaXMudmFsdWUucmF3VmFsdWUubW9kZSk7XG4gICAgICAgICAgICB0aGlzLmNjc18gPSB0aGlzLmNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXJzXyhkb2MpO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IENvbG9yVGV4dFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgY29sb3JNb2RlOiB0aGlzLmNvbG9yTW9kZSxcbiAgICAgICAgICAgICAgICB0ZXh0Vmlld3M6IFt0aGlzLmNjc19bMF0udmlldywgdGhpcy5jY3NfWzFdLnZpZXcsIHRoaXMuY2NzX1syXS52aWV3XSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3Lm1vZGVTZWxlY3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMub25Nb2RlU2VsZWN0Q2hhbmdlXyk7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcnNfKGRvYykge1xuICAgICAgICAgICAgY29uc3QgY2MgPSB7XG4gICAgICAgICAgICAgICAgY29sb3JNb2RlOiB0aGlzLmNvbG9yTW9kZS5yYXdWYWx1ZSxcbiAgICAgICAgICAgICAgICBjb2xvclR5cGU6IHRoaXMuY29sb3JUeXBlXyxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IHRoaXMucGFyc2VyXyxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNjcyA9IFtcbiAgICAgICAgICAgICAgICBjcmVhdGVDb21wb25lbnRDb250cm9sbGVyKGRvYywgY2MsIDApLFxuICAgICAgICAgICAgICAgIGNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXIoZG9jLCBjYywgMSksXG4gICAgICAgICAgICAgICAgY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcihkb2MsIGNjLCAyKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBjY3MuZm9yRWFjaCgoY3MsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29ubmVjdFZhbHVlcyh7XG4gICAgICAgICAgICAgICAgICAgIHByaW1hcnk6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeTogY3MudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZvcndhcmQ6IChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKHRoaXMuY29sb3JNb2RlLnJhd1ZhbHVlLCB0aGlzLmNvbG9yVHlwZV8pW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYmFja3dhcmQ6IChwLCBzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwaWNrZWRNb2RlID0gdGhpcy5jb2xvck1vZGUucmF3VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wcyA9IHAucmF3VmFsdWUuZ2V0Q29tcG9uZW50cyhwaWNrZWRNb2RlLCB0aGlzLmNvbG9yVHlwZV8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcHNbaW5kZXhdID0gcy5yYXdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoYXBwZW5kQWxwaGFDb21wb25lbnQocmVtb3ZlQWxwaGFDb21wb25lbnQoY29tcHMpLCBjb21wc1szXSksIHBpY2tlZE1vZGUsIHRoaXMuY29sb3JUeXBlXyk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBjY3M7XG4gICAgICAgIH1cbiAgICAgICAgb25Nb2RlU2VsZWN0Q2hhbmdlXyhldikge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0RWxlbSA9IGV2LmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgICAgICB0aGlzLmNvbG9yTW9kZS5yYXdWYWx1ZSA9IHNlbGVjdEVsZW0udmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNjc18gPSB0aGlzLmNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXJzXyh0aGlzLnZpZXcuZWxlbWVudC5vd25lckRvY3VtZW50KTtcbiAgICAgICAgICAgIHRoaXMudmlldy50ZXh0Vmlld3MgPSBbXG4gICAgICAgICAgICAgICAgdGhpcy5jY3NfWzBdLnZpZXcsXG4gICAgICAgICAgICAgICAgdGhpcy5jY3NfWzFdLnZpZXcsXG4gICAgICAgICAgICAgICAgdGhpcy5jY3NfWzJdLnZpZXcsXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJDggPSBDbGFzc05hbWUoJ2hwbCcpO1xuICAgIGNsYXNzIEhQYWxldHRlVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VfID0gdGhpcy5vblZhbHVlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOCgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZFRhYkluZGV4KHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBjb2xvckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBjb2xvckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOCgnYycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChjb2xvckVsZW0pO1xuICAgICAgICAgICAgY29uc3QgbWFya2VyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOCgnbScpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtYXJrZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8gPSBtYXJrZXJFbGVtO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgW2hdID0gYy5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3JUb0Z1bmN0aW9uYWxSZ2JTdHJpbmcobmV3IENvbG9yKFtoLCAxMDAsIDEwMF0sICdoc3YnKSk7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gbWFwUmFuZ2UoaCwgMCwgMzYwLCAwLCAxMDApO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5sZWZ0ID0gYCR7bGVmdH0lYDtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgSFBhbGV0dGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25LZXlEb3duXyA9IHRoaXMub25LZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbktleVVwXyA9IHRoaXMub25LZXlVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyRG93bl8gPSB0aGlzLm9uUG9pbnRlckRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlck1vdmVfID0gdGhpcy5vblBvaW50ZXJNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJVcF8gPSB0aGlzLm9uUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBIUGFsZXR0ZVZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfID0gbmV3IFBvaW50ZXJIYW5kbGVyKHRoaXMudmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vblBvaW50ZXJEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignbW92ZScsIHRoaXMub25Qb2ludGVyTW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ3VwJywgdGhpcy5vblBvaW50ZXJVcF8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25LZXlVcF8pO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZVBvaW50ZXJFdmVudF8oZCwgb3B0cykge1xuICAgICAgICAgICAgaWYgKCFkLnBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaHVlID0gbWFwUmFuZ2UoY29uc3RyYWluUmFuZ2UoZC5wb2ludC54LCAwLCBkLmJvdW5kcy53aWR0aCksIDAsIGQuYm91bmRzLndpZHRoLCAwLCAzNTkpO1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBbLCBzLCB2LCBhXSA9IGMuZ2V0Q29tcG9uZW50cygnaHN2Jyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG5ldyBDb2xvcihbaHVlLCBzLCB2LCBhXSwgJ2hzdicpLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlclVwXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5RG93bl8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBbaCwgcywgdiwgYV0gPSBjLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgQ29sb3IoW2ggKyBzdGVwLCBzLCB2LCBhXSwgJ2hzdicpLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5VXBfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZvcktleShnZXRCYXNlU3RlcEZvckNvbG9yKGZhbHNlKSwgZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkNyA9IENsYXNzTmFtZSgnc3ZwJyk7XG4gICAgY29uc3QgQ0FOVkFTX1JFU09MID0gNjQ7XG4gICAgY2xhc3MgU3ZQYWxldHRlVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VfID0gdGhpcy5vblZhbHVlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNygpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZFRhYkluZGV4KHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBjYW52YXNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgICAgY2FudmFzRWxlbS5oZWlnaHQgPSBDQU5WQVNfUkVTT0w7XG4gICAgICAgICAgICBjYW52YXNFbGVtLndpZHRoID0gQ0FOVkFTX1JFU09MO1xuICAgICAgICAgICAgY2FudmFzRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ3KCdjJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNhbnZhc0VsZW0pO1xuICAgICAgICAgICAgdGhpcy5jYW52YXNFbGVtZW50ID0gY2FudmFzRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtYXJrZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDcoJ20nKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobWFya2VyRWxlbSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fID0gbWFya2VyRWxlbTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSBnZXRDYW52YXNDb250ZXh0KHRoaXMuY2FudmFzRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIWN0eCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgaHN2Q29tcHMgPSBjLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmNhbnZhc0VsZW1lbnQud2lkdGg7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmNhbnZhc0VsZW1lbnQuaGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgaW1nRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gaW1nRGF0YS5kYXRhO1xuICAgICAgICAgICAgZm9yIChsZXQgaXkgPSAwOyBpeSA8IGhlaWdodDsgaXkrKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl4ID0gMDsgaXggPCB3aWR0aDsgaXgrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gbWFwUmFuZ2UoaXgsIDAsIHdpZHRoLCAwLCAxMDApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gbWFwUmFuZ2UoaXksIDAsIGhlaWdodCwgMTAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmdiQ29tcHMgPSBoc3ZUb1JnYkludChoc3ZDb21wc1swXSwgcywgdik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGkgPSAoaXkgKiB3aWR0aCArIGl4KSAqIDQ7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSByZ2JDb21wc1swXTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpICsgMV0gPSByZ2JDb21wc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpICsgMl0gPSByZ2JDb21wc1syXTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpICsgM10gPSAyNTU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWdEYXRhLCAwLCAwKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBtYXBSYW5nZShoc3ZDb21wc1sxXSwgMCwgMTAwLCAwLCAxMDApO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5sZWZ0ID0gYCR7bGVmdH0lYDtcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IG1hcFJhbmdlKGhzdkNvbXBzWzJdLCAwLCAxMDAsIDEwMCwgMCk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLnRvcCA9IGAke3RvcH0lYDtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU3ZQYWxldHRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uS2V5RG93bl8gPSB0aGlzLm9uS2V5RG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25LZXlVcF8gPSB0aGlzLm9uS2V5VXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25fID0gdGhpcy5vblBvaW50ZXJEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlXyA9IHRoaXMub25Qb2ludGVyTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyVXBfID0gdGhpcy5vblBvaW50ZXJVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgU3ZQYWxldHRlVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8gPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vbktleVVwXyk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUG9pbnRlckV2ZW50XyhkLCBvcHRzKSB7XG4gICAgICAgICAgICBpZiAoIWQucG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzYXR1cmF0aW9uID0gbWFwUmFuZ2UoZC5wb2ludC54LCAwLCBkLmJvdW5kcy53aWR0aCwgMCwgMTAwKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbWFwUmFuZ2UoZC5wb2ludC55LCAwLCBkLmJvdW5kcy5oZWlnaHQsIDEwMCwgMCk7XG4gICAgICAgICAgICBjb25zdCBbaCwgLCAsIGFdID0gdGhpcy52YWx1ZS5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IENvbG9yKFtoLCBzYXR1cmF0aW9uLCB2YWx1ZSwgYV0sICdoc3YnKSwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bl8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlck1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJVcF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbktleURvd25fKGV2KSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJvd0tleShldi5rZXkpKSB7XG4gICAgICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtoLCBzLCB2LCBhXSA9IHRoaXMudmFsdWUucmF3VmFsdWUuZ2V0Q29tcG9uZW50cygnaHN2Jyk7XG4gICAgICAgICAgICBjb25zdCBiYXNlU3RlcCA9IGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgZHMgPSBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGNvbnN0IGR2ID0gZ2V0U3RlcEZvcktleShiYXNlU3RlcCwgZ2V0VmVydGljYWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKGRzID09PSAwICYmIGR2ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgQ29sb3IoW2gsIHMgKyBkcywgdiArIGR2LCBhXSwgJ2hzdicpLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5VXBfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlU3RlcCA9IGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgZHMgPSBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGNvbnN0IGR2ID0gZ2V0U3RlcEZvcktleShiYXNlU3RlcCwgZ2V0VmVydGljYWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKGRzID09PSAwICYmIGR2ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIENvbG9yUGlja2VyQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5oUGFsZXR0ZUNfID0gbmV3IEhQYWxldHRlQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnN2UGFsZXR0ZUNfID0gbmV3IFN2UGFsZXR0ZUNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hbHBoYUljc18gPSBjb25maWcuc3VwcG9ydHNBbHBoYVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBwYWxldHRlOiBuZXcgQVBhbGV0dGVDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogbmV3IE51bWJlclRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VTdGVwOiAwLjEsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogMC4wMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZU51bWJlckZvcm1hdHRlcigyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNyZWF0ZVZhbHVlKDAsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50OiBuZXcgUmFuZ2VDb25zdHJhaW50KHsgbWluOiAwLCBtYXg6IDEgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5hbHBoYUljc18pIHtcbiAgICAgICAgICAgICAgICBjb25uZWN0VmFsdWVzKHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5OiB0aGlzLmFscGhhSWNzXy50ZXh0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmb3J3YXJkOiAocCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAucmF3VmFsdWUuZ2V0Q29tcG9uZW50cygpWzNdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBiYWNrd2FyZDogKHAsIHMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBzID0gcC5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wc1szXSA9IHMucmF3VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGNvbXBzLCBwLnJhd1ZhbHVlLm1vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50ZXh0Q18gPSBuZXcgQ29sb3JUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBjb2xvclR5cGU6IGNvbmZpZy5jb2xvclR5cGUsXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQ29sb3JQaWNrZXJWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGFscGhhVmlld3M6IHRoaXMuYWxwaGFJY3NfXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZTogdGhpcy5hbHBoYUljc18ucGFsZXR0ZS52aWV3LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy5hbHBoYUljc18udGV4dC52aWV3LFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgICBoUGFsZXR0ZVZpZXc6IHRoaXMuaFBhbGV0dGVDXy52aWV3LFxuICAgICAgICAgICAgICAgIHN1cHBvcnRzQWxwaGE6IGNvbmZpZy5zdXBwb3J0c0FscGhhLFxuICAgICAgICAgICAgICAgIHN2UGFsZXR0ZVZpZXc6IHRoaXMuc3ZQYWxldHRlQ18udmlldyxcbiAgICAgICAgICAgICAgICB0ZXh0VmlldzogdGhpcy50ZXh0Q18udmlldyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCB0ZXh0Q29udHJvbGxlcigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHRDXztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSQ2ID0gQ2xhc3NOYW1lKCdjb2xzdycpO1xuICAgIGNsYXNzIENvbG9yU3dhdGNoVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VfID0gdGhpcy5vblZhbHVlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ2KCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHN3YXRjaEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBzd2F0Y2hFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDYoJ3N3JykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHN3YXRjaEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5zd2F0Y2hFbGVtXyA9IHN3YXRjaEVsZW07XG4gICAgICAgICAgICBjb25zdCBidXR0b25FbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgICAgYnV0dG9uRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ2KCdiJykpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQgPSBidXR0b25FbGVtO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuc3dhdGNoRWxlbV8uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3JUb0hleFJnYmFTdHJpbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBDb2xvclN3YXRjaENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBDb2xvclN3YXRjaFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQ29sb3JDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25CdXR0b25CbHVyXyA9IHRoaXMub25CdXR0b25CbHVyXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkJ1dHRvbkNsaWNrXyA9IHRoaXMub25CdXR0b25DbGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb3B1cENoaWxkQmx1cl8gPSB0aGlzLm9uUG9wdXBDaGlsZEJsdXJfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9wdXBDaGlsZEtleWRvd25fID0gdGhpcy5vblBvcHVwQ2hpbGRLZXlkb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGVfID0gRm9sZGFibGUuY3JlYXRlKGNvbmZpZy5leHBhbmRlZCk7XG4gICAgICAgICAgICB0aGlzLnN3YXRjaENfID0gbmV3IENvbG9yU3dhdGNoQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBidXR0b25FbGVtID0gdGhpcy5zd2F0Y2hDXy52aWV3LmJ1dHRvbkVsZW1lbnQ7XG4gICAgICAgICAgICBidXR0b25FbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLm9uQnV0dG9uQmx1cl8pO1xuICAgICAgICAgICAgYnV0dG9uRWxlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25CdXR0b25DbGlja18pO1xuICAgICAgICAgICAgdGhpcy50ZXh0Q18gPSBuZXcgVGV4dENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgcGFyc2VyOiBjb25maWcucGFyc2VyLFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjb25maWcuZm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBDb2xvclZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgZm9sZGFibGU6IHRoaXMuZm9sZGFibGVfLFxuICAgICAgICAgICAgICAgIHBpY2tlckxheW91dDogY29uZmlnLnBpY2tlckxheW91dCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LnN3YXRjaEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zd2F0Y2hDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy52aWV3LnRleHRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudGV4dENfLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnBvcENfID1cbiAgICAgICAgICAgICAgICBjb25maWcucGlja2VyTGF5b3V0ID09PSAncG9wdXAnXG4gICAgICAgICAgICAgICAgICAgID8gbmV3IFBvcHVwQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHBpY2tlckMgPSBuZXcgQ29sb3JQaWNrZXJDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGNvbG9yVHlwZTogY29uZmlnLmNvbG9yVHlwZSxcbiAgICAgICAgICAgICAgICBzdXBwb3J0c0FscGhhOiBjb25maWcuc3VwcG9ydHNBbHBoYSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwaWNrZXJDLnZpZXcuYWxsRm9jdXNhYmxlRWxlbWVudHMuZm9yRWFjaCgoZWxlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMub25Qb3B1cENoaWxkQmx1cl8pO1xuICAgICAgICAgICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25Qb3B1cENoaWxkS2V5ZG93bl8pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnBpY2tlckNfID0gcGlja2VyQztcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5wb3BDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9wQ18udmlldy5lbGVtZW50LmFwcGVuZENoaWxkKHBpY2tlckMudmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25uZWN0VmFsdWVzKHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeTogdGhpcy5mb2xkYWJsZV8udmFsdWUoJ2V4cGFuZGVkJyksXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeTogdGhpcy5wb3BDXy5zaG93cyxcbiAgICAgICAgICAgICAgICAgICAgZm9yd2FyZDogKHApID0+IHAucmF3VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkOiAoXywgcykgPT4gcy5yYXdWYWx1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmlldy5waWNrZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3LnBpY2tlckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5waWNrZXJDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGJpbmRGb2xkYWJsZSh0aGlzLmZvbGRhYmxlXywgdGhpcy52aWV3LnBpY2tlckVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldCB0ZXh0Q29udHJvbGxlcigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHRDXztcbiAgICAgICAgfVxuICAgICAgICBvbkJ1dHRvbkJsdXJfKGUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wb3BDXykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLnZpZXcuZWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG5leHRUYXJnZXQgPSBmb3JjZUNhc3QoZS5yZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgICAgIGlmICghbmV4dFRhcmdldCB8fCAhZWxlbS5jb250YWlucyhuZXh0VGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wQ18uc2hvd3MucmF3VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvbkJ1dHRvbkNsaWNrXygpIHtcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGVfLnNldCgnZXhwYW5kZWQnLCAhdGhpcy5mb2xkYWJsZV8uZ2V0KCdleHBhbmRlZCcpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvbGRhYmxlXy5nZXQoJ2V4cGFuZGVkJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlckNfLnZpZXcuYWxsRm9jdXNhYmxlRWxlbWVudHNbMF0uZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblBvcHVwQ2hpbGRCbHVyXyhldikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMucG9wQ18udmlldy5lbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgbmV4dFRhcmdldCA9IGZpbmROZXh0VGFyZ2V0KGV2KTtcbiAgICAgICAgICAgIGlmIChuZXh0VGFyZ2V0ICYmIGVsZW0uY29udGFpbnMobmV4dFRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dFRhcmdldCAmJlxuICAgICAgICAgICAgICAgIG5leHRUYXJnZXQgPT09IHRoaXMuc3dhdGNoQ18udmlldy5idXR0b25FbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgIXN1cHBvcnRzVG91Y2goZWxlbS5vd25lckRvY3VtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucG9wQ18uc2hvd3MucmF3VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBvblBvcHVwQ2hpbGRLZXlkb3duXyhldikge1xuICAgICAgICAgICAgaWYgKHRoaXMucG9wQ18pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXYua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcENfLnNob3dzLnJhd1ZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52aWV3LnBpY2tlckVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXYua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN3YXRjaENfLnZpZXcuYnV0dG9uRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbG9yRnJvbU9iamVjdCh2YWx1ZSwgb3B0X3R5cGUpIHtcbiAgICAgICAgaWYgKENvbG9yLmlzQ29sb3JPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gQ29sb3IuZnJvbU9iamVjdCh2YWx1ZSwgb3B0X3R5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBDb2xvci5ibGFjayhvcHRfdHlwZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9SZ2JOdW1iZXIodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHJlbW92ZUFscGhhQ29tcG9uZW50KHZhbHVlLmdldENvbXBvbmVudHMoJ3JnYicpKS5yZWR1Y2UoKHJlc3VsdCwgY29tcCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQgPDwgOCkgfCAoTWF0aC5mbG9vcihjb21wKSAmIDB4ZmYpO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb1JnYmFOdW1iZXIodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InKS5yZWR1Y2UoKHJlc3VsdCwgY29tcCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhleCA9IE1hdGguZmxvb3IoaW5kZXggPT09IDMgPyBjb21wICogMjU1IDogY29tcCkgJiAweGZmO1xuICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQgPDwgOCkgfCBoZXg7XG4gICAgICAgIH0sIDApID4+PiAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbnVtYmVyVG9SZ2JDb2xvcihudW0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbKG51bSA+PiAxNikgJiAweGZmLCAobnVtID4+IDgpICYgMHhmZiwgbnVtICYgMHhmZl0sICdyZ2InKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbnVtYmVyVG9SZ2JhQ29sb3IobnVtKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IoW1xuICAgICAgICAgICAgKG51bSA+PiAyNCkgJiAweGZmLFxuICAgICAgICAgICAgKG51bSA+PiAxNikgJiAweGZmLFxuICAgICAgICAgICAgKG51bSA+PiA4KSAmIDB4ZmYsXG4gICAgICAgICAgICBtYXBSYW5nZShudW0gJiAweGZmLCAwLCAyNTUsIDAsIDEpLFxuICAgICAgICBdLCAncmdiJyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yRnJvbVJnYk51bWJlcih2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIENvbG9yLmJsYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bWJlclRvUmdiQ29sb3IodmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvckZyb21SZ2JhTnVtYmVyKHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gQ29sb3IuYmxhY2soKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtYmVyVG9SZ2JhQ29sb3IodmFsdWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbG9yU3RyaW5nV3JpdGVyKGZvcm1hdCkge1xuICAgICAgICBjb25zdCBzdHJpbmdpZnkgPSBmaW5kQ29sb3JTdHJpbmdpZmllcihmb3JtYXQpO1xuICAgICAgICByZXR1cm4gc3RyaW5naWZ5XG4gICAgICAgICAgICA/ICh0YXJnZXQsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgd3JpdGVQcmltaXRpdmUodGFyZ2V0LCBzdHJpbmdpZnkodmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29sb3JOdW1iZXJXcml0ZXIoc3VwcG9ydHNBbHBoYSkge1xuICAgICAgICBjb25zdCBjb2xvclRvTnVtYmVyID0gc3VwcG9ydHNBbHBoYSA/IGNvbG9yVG9SZ2JhTnVtYmVyIDogY29sb3JUb1JnYk51bWJlcjtcbiAgICAgICAgcmV0dXJuICh0YXJnZXQsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB3cml0ZVByaW1pdGl2ZSh0YXJnZXQsIGNvbG9yVG9OdW1iZXIodmFsdWUpKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd3JpdGVSZ2JhQ29sb3JPYmplY3QodGFyZ2V0LCB2YWx1ZSwgb3B0X3R5cGUpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gdmFsdWUudG9SZ2JhT2JqZWN0KG9wdF90eXBlKTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3InLCBvYmoucik7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCdnJywgb2JqLmcpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgnYicsIG9iai5iKTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ2EnLCBvYmouYSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdyaXRlUmdiQ29sb3JPYmplY3QodGFyZ2V0LCB2YWx1ZSwgb3B0X3R5cGUpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gdmFsdWUudG9SZ2JhT2JqZWN0KG9wdF90eXBlKTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3InLCBvYmoucik7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCdnJywgb2JqLmcpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgnYicsIG9iai5iKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29sb3JPYmplY3RXcml0ZXIoc3VwcG9ydHNBbHBoYSwgb3B0X3R5cGUpIHtcbiAgICAgICAgcmV0dXJuICh0YXJnZXQsIGluVmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmIChzdXBwb3J0c0FscGhhKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVSZ2JhQ29sb3JPYmplY3QodGFyZ2V0LCBpblZhbHVlLCBvcHRfdHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB3cml0ZVJnYkNvbG9yT2JqZWN0KHRhcmdldCwgaW5WYWx1ZSwgb3B0X3R5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNob3VsZFN1cHBvcnRBbHBoYSQxKGlucHV0UGFyYW1zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKChpbnB1dFBhcmFtcyA9PT0gbnVsbCB8fCBpbnB1dFBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRQYXJhbXMuYWxwaGEpIHx8ICgoX2EgPSBpbnB1dFBhcmFtcyA9PT0gbnVsbCB8fCBpbnB1dFBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRQYXJhbXMuY29sb3IpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hbHBoYSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRm9ybWF0dGVyJDEoc3VwcG9ydHNBbHBoYSkge1xuICAgICAgICByZXR1cm4gc3VwcG9ydHNBbHBoYVxuICAgICAgICAgICAgPyAodikgPT4gY29sb3JUb0hleFJnYmFTdHJpbmcodiwgJzB4JylcbiAgICAgICAgICAgIDogKHYpID0+IGNvbG9yVG9IZXhSZ2JTdHJpbmcodiwgJzB4Jyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzRm9yQ29sb3IocGFyYW1zKSB7XG4gICAgICAgIGlmICgnY29sb3InIGluIHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCd2aWV3JyBpbiBwYXJhbXMgJiYgcGFyYW1zLnZpZXcgPT09ICdjb2xvcicpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgTnVtYmVyQ29sb3JJbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1jb2xvci1udW1iZXInLFxuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0ZvckNvbG9yKHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQ29sb3JJbnB1dFBhcmFtcyhwYXJhbXMpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNob3VsZFN1cHBvcnRBbHBoYSQxKGFyZ3MucGFyYW1zKVxuICAgICAgICAgICAgICAgICAgICA/IGNvbG9yRnJvbVJnYmFOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgOiBjb2xvckZyb21SZ2JOdW1iZXI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXF1YWxzOiBDb2xvci5lcXVhbHMsXG4gICAgICAgICAgICB3cml0ZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbG9yTnVtYmVyV3JpdGVyKHNob3VsZFN1cHBvcnRBbHBoYSQxKGFyZ3MucGFyYW1zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3VwcG9ydHNBbHBoYSA9IHNob3VsZFN1cHBvcnRBbHBoYSQxKGFyZ3MucGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gJ2V4cGFuZGVkJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLmV4cGFuZGVkIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgcGlja2VyID0gJ3BpY2tlcicgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5waWNrZXIgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgY29sb3JUeXBlOiAnaW50JyxcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogZXhwYW5kZWQgIT09IG51bGwgJiYgZXhwYW5kZWQgIT09IHZvaWQgMCA/IGV4cGFuZGVkIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVGb3JtYXR0ZXIkMShzdXBwb3J0c0FscGhhKSxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IGNyZWF0ZUNvbG9yU3RyaW5nUGFyc2VyKCdpbnQnKSxcbiAgICAgICAgICAgICAgICBwaWNrZXJMYXlvdXQ6IHBpY2tlciAhPT0gbnVsbCAmJiBwaWNrZXIgIT09IHZvaWQgMCA/IHBpY2tlciA6ICdwb3B1cCcsXG4gICAgICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogc3VwcG9ydHNBbHBoYSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHNob3VsZFN1cHBvcnRBbHBoYShpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIENvbG9yLmlzUmdiYUNvbG9yT2JqZWN0KGluaXRpYWxWYWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbG9yT2JqZWN0UmVhZGVyKG9wdF90eXBlKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb2xvckZyb21PYmplY3QodmFsdWUsIG9wdF90eXBlKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29sb3JPYmplY3RGb3JtYXR0ZXIoc3VwcG9ydHNBbHBoYSwgdHlwZSkge1xuICAgICAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3VwcG9ydHNBbHBoYSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2xvclRvT2JqZWN0UmdiYVN0cmluZyh2YWx1ZSwgdHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29sb3JUb09iamVjdFJnYlN0cmluZyh2YWx1ZSwgdHlwZSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IE9iamVjdENvbG9ySW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtY29sb3Itb2JqZWN0JyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFDb2xvci5pc0NvbG9yT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VDb2xvcklucHV0UGFyYW1zKHBhcmFtcyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKGFyZ3MpID0+IGNyZWF0ZUNvbG9yT2JqZWN0UmVhZGVyKGV4dHJhY3RDb2xvclR5cGUoYXJncy5wYXJhbXMpKSxcbiAgICAgICAgICAgIGVxdWFsczogQ29sb3IuZXF1YWxzLFxuICAgICAgICAgICAgd3JpdGVyOiAoYXJncykgPT4gY3JlYXRlQ29sb3JPYmplY3RXcml0ZXIoc2hvdWxkU3VwcG9ydEFscGhhKGFyZ3MuaW5pdGlhbFZhbHVlKSwgZXh0cmFjdENvbG9yVHlwZShhcmdzLnBhcmFtcykpLFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3Qgc3VwcG9ydHNBbHBoYSA9IENvbG9yLmlzUmdiYUNvbG9yT2JqZWN0KGFyZ3MuaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gJ2V4cGFuZGVkJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLmV4cGFuZGVkIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgcGlja2VyID0gJ3BpY2tlcicgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5waWNrZXIgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gKF9hID0gZXh0cmFjdENvbG9yVHlwZShhcmdzLnBhcmFtcykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdpbnQnO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvckNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGNvbG9yVHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogZXhwYW5kZWQgIT09IG51bGwgJiYgZXhwYW5kZWQgIT09IHZvaWQgMCA/IGV4cGFuZGVkIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVDb2xvck9iamVjdEZvcm1hdHRlcihzdXBwb3J0c0FscGhhLCB0eXBlKSxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IGNyZWF0ZUNvbG9yU3RyaW5nUGFyc2VyKHR5cGUpLFxuICAgICAgICAgICAgICAgIHBpY2tlckxheW91dDogcGlja2VyICE9PSBudWxsICYmIHBpY2tlciAhPT0gdm9pZCAwID8gcGlja2VyIDogJ3BvcHVwJyxcbiAgICAgICAgICAgICAgICBzdXBwb3J0c0FscGhhOiBzdXBwb3J0c0FscGhhLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgU3RyaW5nQ29sb3JJbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1jb2xvci1zdHJpbmcnLFxuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCd2aWV3JyBpbiBwYXJhbXMgJiYgcGFyYW1zLnZpZXcgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gZGV0ZWN0U3RyaW5nQ29sb3JGb3JtYXQodmFsdWUsIGV4dHJhY3RDb2xvclR5cGUocGFyYW1zKSk7XG4gICAgICAgICAgICBpZiAoIWZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3RyaW5naWZpZXIgPSBmaW5kQ29sb3JTdHJpbmdpZmllcihmb3JtYXQpO1xuICAgICAgICAgICAgaWYgKCFzdHJpbmdpZmllcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VDb2xvcklucHV0UGFyYW1zKHBhcmFtcyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKGFyZ3MpID0+IHsgdmFyIF9hOyByZXR1cm4gY3JlYXRlQ29sb3JTdHJpbmdCaW5kaW5nUmVhZGVyKChfYSA9IGV4dHJhY3RDb2xvclR5cGUoYXJncy5wYXJhbXMpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnaW50Jyk7IH0sXG4gICAgICAgICAgICBlcXVhbHM6IENvbG9yLmVxdWFscyxcbiAgICAgICAgICAgIHdyaXRlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBkZXRlY3RTdHJpbmdDb2xvckZvcm1hdChhcmdzLmluaXRpYWxWYWx1ZSwgZXh0cmFjdENvbG9yVHlwZShhcmdzLnBhcmFtcykpO1xuICAgICAgICAgICAgICAgIGlmICghZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgd3JpdGVyID0gY3JlYXRlQ29sb3JTdHJpbmdXcml0ZXIoZm9ybWF0KTtcbiAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLm5vdEJpbmRhYmxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gZGV0ZWN0U3RyaW5nQ29sb3JGb3JtYXQoYXJncy5pbml0aWFsVmFsdWUsIGV4dHJhY3RDb2xvclR5cGUoYXJncy5wYXJhbXMpKTtcbiAgICAgICAgICAgIGlmICghZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3RyaW5naWZpZXIgPSBmaW5kQ29sb3JTdHJpbmdpZmllcihmb3JtYXQpO1xuICAgICAgICAgICAgaWYgKCFzdHJpbmdpZmllcikge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gJ2V4cGFuZGVkJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLmV4cGFuZGVkIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgcGlja2VyID0gJ3BpY2tlcicgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5waWNrZXIgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgY29sb3JUeXBlOiBmb3JtYXQudHlwZSxcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogZXhwYW5kZWQgIT09IG51bGwgJiYgZXhwYW5kZWQgIT09IHZvaWQgMCA/IGV4cGFuZGVkIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBzdHJpbmdpZmllcixcbiAgICAgICAgICAgICAgICBwYXJzZXI6IGNyZWF0ZUNvbG9yU3RyaW5nUGFyc2VyKGZvcm1hdC50eXBlKSxcbiAgICAgICAgICAgICAgICBwaWNrZXJMYXlvdXQ6IHBpY2tlciAhPT0gbnVsbCAmJiBwaWNrZXIgIT09IHZvaWQgMCA/IHBpY2tlciA6ICdwb3B1cCcsXG4gICAgICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogZm9ybWF0LmFscGhhLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgUG9pbnROZENvbnN0cmFpbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50cyA9IGNvbmZpZy5jb21wb25lbnRzO1xuICAgICAgICAgICAgdGhpcy5hc21fID0gY29uZmlnLmFzc2VtYmx5O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cmFpbih2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgY29tcHMgPSB0aGlzLmFzbV9cbiAgICAgICAgICAgICAgICAudG9Db21wb25lbnRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIC5tYXAoKGNvbXAsIGluZGV4KSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLmNvbXBvbmVudHNbaW5kZXhdKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29uc3RyYWluKGNvbXApKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBjb21wOyB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFzbV8uZnJvbUNvbXBvbmVudHMoY29tcHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJDUgPSBDbGFzc05hbWUoJ3BuZHR4dCcpO1xuICAgIGNsYXNzIFBvaW50TmRUZXh0VmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnRleHRWaWV3cyA9IGNvbmZpZy50ZXh0Vmlld3M7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNSgpKTtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBheGlzRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBheGlzRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ1KCdhJykpO1xuICAgICAgICAgICAgICAgIGF4aXNFbGVtLmFwcGVuZENoaWxkKHYuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGF4aXNFbGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQXhpc0NvbnRyb2xsZXIoZG9jLCBjb25maWcsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBuZXcgTnVtYmVyVGV4dENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICBhcnJheVBvc2l0aW9uOiBpbmRleCA9PT0gMCA/ICdmc3QnIDogaW5kZXggPT09IGNvbmZpZy5heGVzLmxlbmd0aCAtIDEgPyAnbHN0JyA6ICdtaWQnLFxuICAgICAgICAgICAgYmFzZVN0ZXA6IGNvbmZpZy5heGVzW2luZGV4XS5iYXNlU3RlcCxcbiAgICAgICAgICAgIHBhcnNlcjogY29uZmlnLnBhcnNlcixcbiAgICAgICAgICAgIHByb3BzOiBjb25maWcuYXhlc1tpbmRleF0udGV4dFByb3BzLFxuICAgICAgICAgICAgdmFsdWU6IGNyZWF0ZVZhbHVlKDAsIHtcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50OiBjb25maWcuYXhlc1tpbmRleF0uY29uc3RyYWludCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xhc3MgUG9pbnROZFRleHRDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLmFjc18gPSBjb25maWcuYXhlcy5tYXAoKF8sIGluZGV4KSA9PiBjcmVhdGVBeGlzQ29udHJvbGxlcihkb2MsIGNvbmZpZywgaW5kZXgpKTtcbiAgICAgICAgICAgIHRoaXMuYWNzXy5mb3JFYWNoKChjLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbm5lY3RWYWx1ZXMoe1xuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5OiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnk6IGMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZvcndhcmQ6IChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmFzc2VtYmx5LnRvQ29tcG9uZW50cyhwLnJhd1ZhbHVlKVtpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkOiAocCwgcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcHMgPSBjb25maWcuYXNzZW1ibHkudG9Db21wb25lbnRzKHAucmF3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcHNbaW5kZXhdID0gcy5yYXdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcuYXNzZW1ibHkuZnJvbUNvbXBvbmVudHMoY29tcHMpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgUG9pbnROZFRleHRWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHRleHRWaWV3czogdGhpcy5hY3NfLm1hcCgoYWMpID0+IGFjLnZpZXcpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVTdGVwQ29uc3RyYWludChwYXJhbXMsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICBpZiAoJ3N0ZXAnIGluIHBhcmFtcyAmJiAhaXNFbXB0eShwYXJhbXMuc3RlcCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3RlcENvbnN0cmFpbnQocGFyYW1zLnN0ZXAsIGluaXRpYWxWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVJhbmdlQ29uc3RyYWludChwYXJhbXMpIHtcbiAgICAgICAgaWYgKCgnbWF4JyBpbiBwYXJhbXMgJiYgIWlzRW1wdHkocGFyYW1zLm1heCkpIHx8XG4gICAgICAgICAgICAoJ21pbicgaW4gcGFyYW1zICYmICFpc0VtcHR5KHBhcmFtcy5taW4pKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZUNvbnN0cmFpbnQoe1xuICAgICAgICAgICAgICAgIG1heDogcGFyYW1zLm1heCxcbiAgICAgICAgICAgICAgICBtaW46IHBhcmFtcy5taW4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29uc3RyYWludCQ0KHBhcmFtcyxcbiAgICBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludHMgPSBbXTtcbiAgICAgICAgY29uc3Qgc2MgPSBjcmVhdGVTdGVwQ29uc3RyYWludChwYXJhbXMsIGluaXRpYWxWYWx1ZSk7XG4gICAgICAgIGlmIChzYykge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChzYyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmMgPSBjcmVhdGVSYW5nZUNvbnN0cmFpbnQocGFyYW1zKTtcbiAgICAgICAgaWYgKHJjKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHJjKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYyA9IGNyZWF0ZUxpc3RDb25zdHJhaW50KHBhcmFtcy5vcHRpb25zKTtcbiAgICAgICAgaWYgKGxjKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKGxjKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbXBvc2l0ZUNvbnN0cmFpbnQoY29uc3RyYWludHMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kUmFuZ2UoY29uc3RyYWludCkge1xuICAgICAgICBjb25zdCBjID0gY29uc3RyYWludCA/IGZpbmRDb25zdHJhaW50KGNvbnN0cmFpbnQsIFJhbmdlQ29uc3RyYWludCkgOiBudWxsO1xuICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgIHJldHVybiBbdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbYy5taW5WYWx1ZSwgYy5tYXhWYWx1ZV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVzdGltYXRlU3VpdGFibGVSYW5nZShjb25zdHJhaW50KSB7XG4gICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSBmaW5kUmFuZ2UoY29uc3RyYWludCk7XG4gICAgICAgIHJldHVybiBbbWluICE9PSBudWxsICYmIG1pbiAhPT0gdm9pZCAwID8gbWluIDogMCwgbWF4ICE9PSBudWxsICYmIG1heCAhPT0gdm9pZCAwID8gbWF4IDogMTAwXTtcbiAgICB9XG4gICAgY29uc3QgTnVtYmVySW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtbnVtYmVyJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBwLm9wdGlvbmFsLmZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgIG1heDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICAgICAgbWluOiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZUxpc3RPcHRpb25zKSxcbiAgICAgICAgICAgICAgICBzdGVwOiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gbnVtYmVyRnJvbVVua25vd24sXG4gICAgICAgICAgICBjb25zdHJhaW50OiAoYXJncykgPT4gY3JlYXRlQ29uc3RyYWludCQ0KGFyZ3MucGFyYW1zLCBhcmdzLmluaXRpYWxWYWx1ZSksXG4gICAgICAgICAgICB3cml0ZXI6IChfYXJncykgPT4gd3JpdGVQcmltaXRpdmUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgYyA9IGFyZ3MuY29uc3RyYWludDtcbiAgICAgICAgICAgIGlmIChjICYmIGZpbmRDb25zdHJhaW50KGMsIExpc3RDb25zdHJhaW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGlzdENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiAoX2EgPSBmaW5kTGlzdEl0ZW1zKGMpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IChfYiA9ICgnZm9ybWF0JyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLmZvcm1hdCA6IHVuZGVmaW5lZCkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGNyZWF0ZU51bWJlckZvcm1hdHRlcihnZXRTdWl0YWJsZURlY2ltYWxEaWdpdHMoYywgdmFsdWUucmF3VmFsdWUpKTtcbiAgICAgICAgICAgIGlmIChjICYmIGZpbmRDb25zdHJhaW50KGMsIFJhbmdlQ29uc3RyYWludCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gZXN0aW1hdGVTdWl0YWJsZVJhbmdlKGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2xpZGVyVGV4dENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBiYXNlU3RlcDogZ2V0QmFzZVN0ZXAoYyksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlcjogcGFyc2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlclByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFZhbHVlOiBtYXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5WYWx1ZTogbWluLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dFByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdnaW5nU2NhbGU6IGdldFN1aXRhYmxlRHJhZ2dpbmdTY2FsZShjLCB2YWx1ZS5yYXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgTnVtYmVyVGV4dENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGJhc2VTdGVwOiBnZXRCYXNlU3RlcChjKSxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGMsIHZhbHVlLnJhd1ZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgUG9pbnQyZCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHggPSAwLCB5ID0gMCkge1xuICAgICAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0Q29tcG9uZW50cygpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy54LCB0aGlzLnldO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpc09iamVjdChvYmopIHtcbiAgICAgICAgICAgIGlmIChpc0VtcHR5KG9iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB4ID0gb2JqLng7XG4gICAgICAgICAgICBjb25zdCB5ID0gb2JqLnk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHggIT09ICdudW1iZXInIHx8IHR5cGVvZiB5ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBlcXVhbHModjEsIHYyKSB7XG4gICAgICAgICAgICByZXR1cm4gdjEueCA9PT0gdjIueCAmJiB2MS55ID09PSB2Mi55O1xuICAgICAgICB9XG4gICAgICAgIHRvT2JqZWN0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB4OiB0aGlzLngsXG4gICAgICAgICAgICAgICAgeTogdGhpcy55LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBQb2ludDJkQXNzZW1ibHkgPSB7XG4gICAgICAgIHRvQ29tcG9uZW50czogKHApID0+IHAuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBmcm9tQ29tcG9uZW50czogKGNvbXBzKSA9PiBuZXcgUG9pbnQyZCguLi5jb21wcyksXG4gICAgfTtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSQ0ID0gQ2xhc3NOYW1lKCdwMmQnKTtcbiAgICBjbGFzcyBQb2ludDJkVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNCgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBiaW5kVmFsdWUoY29uZmlnLmV4cGFuZGVkLCB2YWx1ZVRvQ2xhc3NOYW1lKHRoaXMuZWxlbWVudCwgY2xhc3NOYW1lJDQodW5kZWZpbmVkLCAnZXhwYW5kZWQnKSkpO1xuICAgICAgICAgICAgY29uc3QgaGVhZEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBoZWFkRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ0KCdoJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGhlYWRFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDQoJ2InKSk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmFwcGVuZENoaWxkKGNyZWF0ZVN2Z0ljb25FbGVtZW50KGRvYywgJ3AyZHBhZCcpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgaGVhZEVsZW0uYXBwZW5kQ2hpbGQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQgPSBidXR0b25FbGVtO1xuICAgICAgICAgICAgY29uc3QgdGV4dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXh0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ0KCd0JykpO1xuICAgICAgICAgICAgaGVhZEVsZW0uYXBwZW5kQ2hpbGQodGV4dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy50ZXh0RWxlbWVudCA9IHRleHRFbGVtO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5waWNrZXJMYXlvdXQgPT09ICdpbmxpbmUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGlja2VyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBwaWNrZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDQoJ3AnKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHBpY2tlckVsZW0pO1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyRWxlbWVudCA9IHBpY2tlckVsZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlckVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJDMgPSBDbGFzc05hbWUoJ3AyZHAnKTtcbiAgICBjbGFzcyBQb2ludDJkUGlja2VyVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uRm9sZGFibGVDaGFuZ2VfID0gdGhpcy5vbkZvbGRhYmxlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlXyA9IHRoaXMub25WYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuaW52ZXJ0c1lfID0gY29uZmlnLmludmVydHNZO1xuICAgICAgICAgICAgdGhpcy5tYXhWYWx1ZV8gPSBjb25maWcubWF4VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygpKTtcbiAgICAgICAgICAgIGlmIChjb25maWcubGF5b3V0ID09PSAncG9wdXAnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDModW5kZWZpbmVkLCAncCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhZEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBwYWRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDMoJ3AnKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRUYWJJbmRleChwYWRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChwYWRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMucGFkRWxlbWVudCA9IHBhZEVsZW07XG4gICAgICAgICAgICBjb25zdCBzdmdFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdzdmcnKTtcbiAgICAgICAgICAgIHN2Z0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygnZycpKTtcbiAgICAgICAgICAgIHRoaXMucGFkRWxlbWVudC5hcHBlbmRDaGlsZChzdmdFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuc3ZnRWxlbV8gPSBzdmdFbGVtO1xuICAgICAgICAgICAgY29uc3QgeEF4aXNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdsaW5lJyk7XG4gICAgICAgICAgICB4QXhpc0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygnYXgnKSk7XG4gICAgICAgICAgICB4QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3gxJywgJzAnKTtcbiAgICAgICAgICAgIHhBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneTEnLCAnNTAlJyk7XG4gICAgICAgICAgICB4QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3gyJywgJzEwMCUnKTtcbiAgICAgICAgICAgIHhBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneTInLCAnNTAlJyk7XG4gICAgICAgICAgICB0aGlzLnN2Z0VsZW1fLmFwcGVuZENoaWxkKHhBeGlzRWxlbSk7XG4gICAgICAgICAgICBjb25zdCB5QXhpc0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ2xpbmUnKTtcbiAgICAgICAgICAgIHlBeGlzRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQzKCdheCcpKTtcbiAgICAgICAgICAgIHlBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneDEnLCAnNTAlJyk7XG4gICAgICAgICAgICB5QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3kxJywgJzAnKTtcbiAgICAgICAgICAgIHlBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneDInLCAnNTAlJyk7XG4gICAgICAgICAgICB5QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3kyJywgJzEwMCUnKTtcbiAgICAgICAgICAgIHRoaXMuc3ZnRWxlbV8uYXBwZW5kQ2hpbGQoeUF4aXNFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdsaW5lJyk7XG4gICAgICAgICAgICBsaW5lRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQzKCdsJykpO1xuICAgICAgICAgICAgbGluZUVsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3gxJywgJzUwJScpO1xuICAgICAgICAgICAgbGluZUVsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3kxJywgJzUwJScpO1xuICAgICAgICAgICAgdGhpcy5zdmdFbGVtXy5hcHBlbmRDaGlsZChsaW5lRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmxpbmVFbGVtXyA9IGxpbmVFbGVtO1xuICAgICAgICAgICAgY29uc3QgbWFya2VyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygnbScpKTtcbiAgICAgICAgICAgIHRoaXMucGFkRWxlbWVudC5hcHBlbmRDaGlsZChtYXJrZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8gPSBtYXJrZXJFbGVtO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBhbGxGb2N1c2FibGVFbGVtZW50cygpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5wYWRFbGVtZW50XTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgW3gsIHldID0gdGhpcy52YWx1ZS5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKCk7XG4gICAgICAgICAgICBjb25zdCBtYXggPSB0aGlzLm1heFZhbHVlXztcbiAgICAgICAgICAgIGNvbnN0IHB4ID0gbWFwUmFuZ2UoeCwgLW1heCwgK21heCwgMCwgMTAwKTtcbiAgICAgICAgICAgIGNvbnN0IHB5ID0gbWFwUmFuZ2UoeSwgLW1heCwgK21heCwgMCwgMTAwKTtcbiAgICAgICAgICAgIGNvbnN0IGlweSA9IHRoaXMuaW52ZXJ0c1lfID8gMTAwIC0gcHkgOiBweTtcbiAgICAgICAgICAgIHRoaXMubGluZUVsZW1fLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4MicsIGAke3B4fSVgKTtcbiAgICAgICAgICAgIHRoaXMubGluZUVsZW1fLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5MicsIGAke2lweX0lYCk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLmxlZnQgPSBgJHtweH0lYDtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8uc3R5bGUudG9wID0gYCR7aXB5fSVgO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25Gb2xkYWJsZUNoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXQoZXYsIGJhc2VTdGVwcywgaW52ZXJ0c1kpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGdldFN0ZXBGb3JLZXkoYmFzZVN0ZXBzWzBdLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKSxcbiAgICAgICAgICAgIGdldFN0ZXBGb3JLZXkoYmFzZVN0ZXBzWzFdLCBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSkgKiAoaW52ZXJ0c1kgPyAxIDogLTEpLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBjbGFzcyBQb2ludDJkUGlja2VyQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uUGFkS2V5RG93bl8gPSB0aGlzLm9uUGFkS2V5RG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25QYWRLZXlVcF8gPSB0aGlzLm9uUGFkS2V5VXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25fID0gdGhpcy5vblBvaW50ZXJEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlXyA9IHRoaXMub25Qb2ludGVyTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyVXBfID0gdGhpcy5vblBvaW50ZXJVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLmJhc2VTdGVwc18gPSBjb25maWcuYmFzZVN0ZXBzO1xuICAgICAgICAgICAgdGhpcy5tYXhWYWx1ZV8gPSBjb25maWcubWF4VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmludmVydHNZXyA9IGNvbmZpZy5pbnZlcnRzWTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBQb2ludDJkUGlja2VyVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBpbnZlcnRzWTogdGhpcy5pbnZlcnRzWV8sXG4gICAgICAgICAgICAgICAgbGF5b3V0OiBjb25maWcubGF5b3V0LFxuICAgICAgICAgICAgICAgIG1heFZhbHVlOiB0aGlzLm1heFZhbHVlXyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8gPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3LnBhZEVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcucGFkRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vblBhZEtleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5wYWRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vblBhZEtleVVwXyk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUG9pbnRlckV2ZW50XyhkLCBvcHRzKSB7XG4gICAgICAgICAgICBpZiAoIWQucG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtYXggPSB0aGlzLm1heFZhbHVlXztcbiAgICAgICAgICAgIGNvbnN0IHB4ID0gbWFwUmFuZ2UoZC5wb2ludC54LCAwLCBkLmJvdW5kcy53aWR0aCwgLW1heCwgK21heCk7XG4gICAgICAgICAgICBjb25zdCBweSA9IG1hcFJhbmdlKHRoaXMuaW52ZXJ0c1lfID8gZC5ib3VuZHMuaGVpZ2h0IC0gZC5wb2ludC55IDogZC5wb2ludC55LCAwLCBkLmJvdW5kcy5oZWlnaHQsIC1tYXgsICttYXgpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgUG9pbnQyZChweCwgcHkpLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlclVwXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUGFkS2V5RG93bl8oZXYpIHtcbiAgICAgICAgICAgIGlmIChpc0Fycm93S2V5KGV2LmtleSkpIHtcbiAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgW2R4LCBkeV0gPSBjb21wdXRlT2Zmc2V0KGV2LCB0aGlzLmJhc2VTdGVwc18sIHRoaXMuaW52ZXJ0c1lfKTtcbiAgICAgICAgICAgIGlmIChkeCA9PT0gMCAmJiBkeSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IFBvaW50MmQodGhpcy52YWx1ZS5yYXdWYWx1ZS54ICsgZHgsIHRoaXMudmFsdWUucmF3VmFsdWUueSArIGR5KSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBhZEtleVVwXyhldikge1xuICAgICAgICAgICAgY29uc3QgW2R4LCBkeV0gPSBjb21wdXRlT2Zmc2V0KGV2LCB0aGlzLmJhc2VTdGVwc18sIHRoaXMuaW52ZXJ0c1lfKTtcbiAgICAgICAgICAgIGlmIChkeCA9PT0gMCAmJiBkeSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBQb2ludDJkQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdGhpcy5vblBvcHVwQ2hpbGRCbHVyXyA9IHRoaXMub25Qb3B1cENoaWxkQmx1cl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb3B1cENoaWxkS2V5ZG93bl8gPSB0aGlzLm9uUG9wdXBDaGlsZEtleWRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUGFkQnV0dG9uQmx1cl8gPSB0aGlzLm9uUGFkQnV0dG9uQmx1cl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25QYWRCdXR0b25DbGlja18gPSB0aGlzLm9uUGFkQnV0dG9uQ2xpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZV8gPSBGb2xkYWJsZS5jcmVhdGUoY29uZmlnLmV4cGFuZGVkKTtcbiAgICAgICAgICAgIHRoaXMucG9wQ18gPVxuICAgICAgICAgICAgICAgIGNvbmZpZy5waWNrZXJMYXlvdXQgPT09ICdwb3B1cCdcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgUG9wdXBDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgcGFkQyA9IG5ldyBQb2ludDJkUGlja2VyQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBiYXNlU3RlcHM6IFtjb25maWcuYXhlc1swXS5iYXNlU3RlcCwgY29uZmlnLmF4ZXNbMV0uYmFzZVN0ZXBdLFxuICAgICAgICAgICAgICAgIGludmVydHNZOiBjb25maWcuaW52ZXJ0c1ksXG4gICAgICAgICAgICAgICAgbGF5b3V0OiBjb25maWcucGlja2VyTGF5b3V0LFxuICAgICAgICAgICAgICAgIG1heFZhbHVlOiBjb25maWcubWF4VmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGFkQy52aWV3LmFsbEZvY3VzYWJsZUVsZW1lbnRzLmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLm9uUG9wdXBDaGlsZEJsdXJfKTtcbiAgICAgICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uUG9wdXBDaGlsZEtleWRvd25fKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5waWNrZXJDXyA9IHBhZEM7XG4gICAgICAgICAgICB0aGlzLnRleHRDXyA9IG5ldyBQb2ludE5kVGV4dENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgYXNzZW1ibHk6IFBvaW50MmRBc3NlbWJseSxcbiAgICAgICAgICAgICAgICBheGVzOiBjb25maWcuYXhlcyxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IGNvbmZpZy5wYXJzZXIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFBvaW50MmRWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiB0aGlzLmZvbGRhYmxlXy52YWx1ZSgnZXhwYW5kZWQnKSxcbiAgICAgICAgICAgICAgICBwaWNrZXJMYXlvdXQ6IGNvbmZpZy5waWNrZXJMYXlvdXQsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LnRleHRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudGV4dENfLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAoX2EgPSB0aGlzLnZpZXcuYnV0dG9uRWxlbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLm9uUGFkQnV0dG9uQmx1cl8pO1xuICAgICAgICAgICAgKF9iID0gdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25QYWRCdXR0b25DbGlja18pO1xuICAgICAgICAgICAgaWYgKHRoaXMucG9wQ18pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnBvcENfLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BDXy52aWV3LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5waWNrZXJDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGNvbm5lY3RWYWx1ZXMoe1xuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5OiB0aGlzLmZvbGRhYmxlXy52YWx1ZSgnZXhwYW5kZWQnKSxcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5OiB0aGlzLnBvcENfLnNob3dzLFxuICAgICAgICAgICAgICAgICAgICBmb3J3YXJkOiAocCkgPT4gcC5yYXdWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgYmFja3dhcmQ6IChfLCBzKSA9PiBzLnJhd1ZhbHVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52aWV3LnBpY2tlckVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXcucGlja2VyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnBpY2tlckNfLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYmluZEZvbGRhYmxlKHRoaXMuZm9sZGFibGVfLCB0aGlzLnZpZXcucGlja2VyRWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25QYWRCdXR0b25CbHVyXyhlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucG9wQ18pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy52aWV3LmVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBuZXh0VGFyZ2V0ID0gZm9yY2VDYXN0KGUucmVsYXRlZFRhcmdldCk7XG4gICAgICAgICAgICBpZiAoIW5leHRUYXJnZXQgfHwgIWVsZW0uY29udGFpbnMobmV4dFRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcENfLnNob3dzLnJhd1ZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25QYWRCdXR0b25DbGlja18oKSB7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlXy5zZXQoJ2V4cGFuZGVkJywgIXRoaXMuZm9sZGFibGVfLmdldCgnZXhwYW5kZWQnKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5mb2xkYWJsZV8uZ2V0KCdleHBhbmRlZCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJDXy52aWV3LmFsbEZvY3VzYWJsZUVsZW1lbnRzWzBdLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25Qb3B1cENoaWxkQmx1cl8oZXYpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wb3BDXykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLnBvcENfLnZpZXcuZWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG5leHRUYXJnZXQgPSBmaW5kTmV4dFRhcmdldChldik7XG4gICAgICAgICAgICBpZiAobmV4dFRhcmdldCAmJiBlbGVtLmNvbnRhaW5zKG5leHRUYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5leHRUYXJnZXQgJiZcbiAgICAgICAgICAgICAgICBuZXh0VGFyZ2V0ID09PSB0aGlzLnZpZXcuYnV0dG9uRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgICFzdXBwb3J0c1RvdWNoKGVsZW0ub3duZXJEb2N1bWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvcENfLnNob3dzLnJhd1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb3B1cENoaWxkS2V5ZG93bl8oZXYpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BDXy5zaG93cy5yYXdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmlldy5waWNrZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb2ludDJkRnJvbVVua25vd24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFBvaW50MmQuaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICA/IG5ldyBQb2ludDJkKHZhbHVlLngsIHZhbHVlLnkpXG4gICAgICAgICAgICA6IG5ldyBQb2ludDJkKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdyaXRlUG9pbnQyZCh0YXJnZXQsIHZhbHVlKSB7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd4JywgdmFsdWUueCk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd5JywgdmFsdWUueSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludChwYXJhbXMsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICBpZiAoIXBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IFtdO1xuICAgICAgICBjb25zdCBjcyA9IGNyZWF0ZVN0ZXBDb25zdHJhaW50KHBhcmFtcywgaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgaWYgKGNzKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKGNzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBycyA9IGNyZWF0ZVJhbmdlQ29uc3RyYWludChwYXJhbXMpO1xuICAgICAgICBpZiAocnMpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gocnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQ29uc3RyYWludChjb25zdHJhaW50cyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnN0cmFpbnQkMyhwYXJhbXMsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50TmRDb25zdHJhaW50KHtcbiAgICAgICAgICAgIGFzc2VtYmx5OiBQb2ludDJkQXNzZW1ibHksXG4gICAgICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCgneCcgaW4gcGFyYW1zID8gcGFyYW1zLnggOiB1bmRlZmluZWQsIGluaXRpYWxWYWx1ZS54KSxcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KCd5JyBpbiBwYXJhbXMgPyBwYXJhbXMueSA6IHVuZGVmaW5lZCwgaW5pdGlhbFZhbHVlLnkpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1aXRhYmxlTWF4RGltZW5zaW9uVmFsdWUoY29uc3RyYWludCwgcmF3VmFsdWUpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3QgcmMgPSBjb25zdHJhaW50ICYmIGZpbmRDb25zdHJhaW50KGNvbnN0cmFpbnQsIFJhbmdlQ29uc3RyYWludCk7XG4gICAgICAgIGlmIChyYykge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKChfYSA9IHJjLm1pblZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwKSwgTWF0aC5hYnMoKF9iID0gcmMubWF4VmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDApKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGVwID0gZ2V0QmFzZVN0ZXAoY29uc3RyYWludCk7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChNYXRoLmFicyhzdGVwKSAqIDEwLCBNYXRoLmFicyhyYXdWYWx1ZSkgKiAxMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1aXRhYmxlTWF4VmFsdWUoaW5pdGlhbFZhbHVlLCBjb25zdHJhaW50KSB7XG4gICAgICAgIGNvbnN0IHhjID0gY29uc3RyYWludCBpbnN0YW5jZW9mIFBvaW50TmRDb25zdHJhaW50XG4gICAgICAgICAgICA/IGNvbnN0cmFpbnQuY29tcG9uZW50c1swXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHljID0gY29uc3RyYWludCBpbnN0YW5jZW9mIFBvaW50TmRDb25zdHJhaW50XG4gICAgICAgICAgICA/IGNvbnN0cmFpbnQuY29tcG9uZW50c1sxXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHhyID0gZ2V0U3VpdGFibGVNYXhEaW1lbnNpb25WYWx1ZSh4YywgaW5pdGlhbFZhbHVlLngpO1xuICAgICAgICBjb25zdCB5ciA9IGdldFN1aXRhYmxlTWF4RGltZW5zaW9uVmFsdWUoeWMsIGluaXRpYWxWYWx1ZS55KTtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KHhyLCB5cik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUF4aXMkMihpbml0aWFsVmFsdWUsIGNvbnN0cmFpbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJhc2VTdGVwOiBnZXRCYXNlU3RlcChjb25zdHJhaW50KSxcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGNvbnN0cmFpbnQsXG4gICAgICAgICAgICB0ZXh0UHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgIGRyYWdnaW5nU2NhbGU6IGdldFN1aXRhYmxlRHJhZ2dpbmdTY2FsZShjb25zdHJhaW50LCBpbml0aWFsVmFsdWUpLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlTnVtYmVyRm9ybWF0dGVyKGdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyhjb25zdHJhaW50LCBpbml0aWFsVmFsdWUpKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzaG91bGRJbnZlcnRZKHBhcmFtcykge1xuICAgICAgICBpZiAoISgneScgaW4gcGFyYW1zKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHlQYXJhbXMgPSBwYXJhbXMueTtcbiAgICAgICAgaWYgKCF5UGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdpbnZlcnRlZCcgaW4geVBhcmFtcyA/ICEheVBhcmFtcy5pbnZlcnRlZCA6IGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBQb2ludDJkSW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtcG9pbnQyZCcsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICghUG9pbnQyZC5pc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IHAub3B0aW9uYWwuYm9vbGVhbixcbiAgICAgICAgICAgICAgICBwaWNrZXI6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlUGlja2VyTGF5b3V0KSxcbiAgICAgICAgICAgICAgICB4OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgICAgICB5OiBwLm9wdGlvbmFsLm9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGludmVydGVkOiBwLm9wdGlvbmFsLmJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgIG1heDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIG1pbjogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIHN0ZXA6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBwb2ludDJkRnJvbVVua25vd24sXG4gICAgICAgICAgICBjb25zdHJhaW50OiAoYXJncykgPT4gY3JlYXRlQ29uc3RyYWludCQzKGFyZ3MucGFyYW1zLCBhcmdzLmluaXRpYWxWYWx1ZSksXG4gICAgICAgICAgICBlcXVhbHM6IFBvaW50MmQuZXF1YWxzLFxuICAgICAgICAgICAgd3JpdGVyOiAoX2FyZ3MpID0+IHdyaXRlUG9pbnQyZCxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGFyZ3MuZG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3MudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjID0gYXJncy5jb25zdHJhaW50O1xuICAgICAgICAgICAgaWYgKCEoYyBpbnN0YW5jZW9mIFBvaW50TmRDb25zdHJhaW50KSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gJ2V4cGFuZGVkJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLmV4cGFuZGVkIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgcGlja2VyID0gJ3BpY2tlcicgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5waWNrZXIgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvaW50MmRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGF4ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQXhpcyQyKHZhbHVlLnJhd1ZhbHVlLngsIGMuY29tcG9uZW50c1swXSksXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUF4aXMkMih2YWx1ZS5yYXdWYWx1ZS55LCBjLmNvbXBvbmVudHNbMV0pLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGV4cGFuZGVkICE9PSBudWxsICYmIGV4cGFuZGVkICE9PSB2b2lkIDAgPyBleHBhbmRlZCA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGludmVydHNZOiBzaG91bGRJbnZlcnRZKGFyZ3MucGFyYW1zKSxcbiAgICAgICAgICAgICAgICBtYXhWYWx1ZTogZ2V0U3VpdGFibGVNYXhWYWx1ZSh2YWx1ZS5yYXdWYWx1ZSwgYyksXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICBwaWNrZXJMYXlvdXQ6IHBpY2tlciAhPT0gbnVsbCAmJiBwaWNrZXIgIT09IHZvaWQgMCA/IHBpY2tlciA6ICdwb3B1cCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgUG9pbnQzZCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHggPSAwLCB5ID0gMCwgeiA9IDApIHtcbiAgICAgICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICAgICAgdGhpcy56ID0gejtcbiAgICAgICAgfVxuICAgICAgICBnZXRDb21wb25lbnRzKCkge1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLngsIHRoaXMueSwgdGhpcy56XTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgaXNPYmplY3Qob2JqKSB7XG4gICAgICAgICAgICBpZiAoaXNFbXB0eShvYmopKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeCA9IG9iai54O1xuICAgICAgICAgICAgY29uc3QgeSA9IG9iai55O1xuICAgICAgICAgICAgY29uc3QgeiA9IG9iai56O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB4ICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB5ICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB6ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBlcXVhbHModjEsIHYyKSB7XG4gICAgICAgICAgICByZXR1cm4gdjEueCA9PT0gdjIueCAmJiB2MS55ID09PSB2Mi55ICYmIHYxLnogPT09IHYyLno7XG4gICAgICAgIH1cbiAgICAgICAgdG9PYmplY3QoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHg6IHRoaXMueCxcbiAgICAgICAgICAgICAgICB5OiB0aGlzLnksXG4gICAgICAgICAgICAgICAgejogdGhpcy56LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBQb2ludDNkQXNzZW1ibHkgPSB7XG4gICAgICAgIHRvQ29tcG9uZW50czogKHApID0+IHAuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBmcm9tQ29tcG9uZW50czogKGNvbXBzKSA9PiBuZXcgUG9pbnQzZCguLi5jb21wcyksXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHBvaW50M2RGcm9tVW5rbm93bih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gUG9pbnQzZC5pc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICAgID8gbmV3IFBvaW50M2QodmFsdWUueCwgdmFsdWUueSwgdmFsdWUueilcbiAgICAgICAgICAgIDogbmV3IFBvaW50M2QoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd3JpdGVQb2ludDNkKHRhcmdldCwgdmFsdWUpIHtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3gnLCB2YWx1ZS54KTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3knLCB2YWx1ZS55KTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3onLCB2YWx1ZS56KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50JDIocGFyYW1zLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludE5kQ29uc3RyYWludCh7XG4gICAgICAgICAgICBhc3NlbWJseTogUG9pbnQzZEFzc2VtYmx5LFxuICAgICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQoJ3gnIGluIHBhcmFtcyA/IHBhcmFtcy54IDogdW5kZWZpbmVkLCBpbml0aWFsVmFsdWUueCksXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCgneScgaW4gcGFyYW1zID8gcGFyYW1zLnkgOiB1bmRlZmluZWQsIGluaXRpYWxWYWx1ZS55KSxcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KCd6JyBpbiBwYXJhbXMgPyBwYXJhbXMueiA6IHVuZGVmaW5lZCwgaW5pdGlhbFZhbHVlLnopLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUF4aXMkMShpbml0aWFsVmFsdWUsIGNvbnN0cmFpbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJhc2VTdGVwOiBnZXRCYXNlU3RlcChjb25zdHJhaW50KSxcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGNvbnN0cmFpbnQsXG4gICAgICAgICAgICB0ZXh0UHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgIGRyYWdnaW5nU2NhbGU6IGdldFN1aXRhYmxlRHJhZ2dpbmdTY2FsZShjb25zdHJhaW50LCBpbml0aWFsVmFsdWUpLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlTnVtYmVyRm9ybWF0dGVyKGdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyhjb25zdHJhaW50LCBpbml0aWFsVmFsdWUpKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBQb2ludDNkSW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtcG9pbnQzZCcsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICghUG9pbnQzZC5pc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgeDogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICAgICAgeTogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICAgICAgejogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IHBvaW50M2RGcm9tVW5rbm93bixcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IChhcmdzKSA9PiBjcmVhdGVDb25zdHJhaW50JDIoYXJncy5wYXJhbXMsIGFyZ3MuaW5pdGlhbFZhbHVlKSxcbiAgICAgICAgICAgIGVxdWFsczogUG9pbnQzZC5lcXVhbHMsXG4gICAgICAgICAgICB3cml0ZXI6IChfYXJncykgPT4gd3JpdGVQb2ludDNkLFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgYyA9IGFyZ3MuY29uc3RyYWludDtcbiAgICAgICAgICAgIGlmICghKGMgaW5zdGFuY2VvZiBQb2ludE5kQ29uc3RyYWludCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvaW50TmRUZXh0Q29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYXNzZW1ibHk6IFBvaW50M2RBc3NlbWJseSxcbiAgICAgICAgICAgICAgICBheGVzOiBbXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUF4aXMkMSh2YWx1ZS5yYXdWYWx1ZS54LCBjLmNvbXBvbmVudHNbMF0pLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVBeGlzJDEodmFsdWUucmF3VmFsdWUueSwgYy5jb21wb25lbnRzWzFdKSxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQXhpcyQxKHZhbHVlLnJhd1ZhbHVlLnosIGMuY29tcG9uZW50c1syXSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsYXNzIFBvaW50NGQge1xuICAgICAgICBjb25zdHJ1Y3Rvcih4ID0gMCwgeSA9IDAsIHogPSAwLCB3ID0gMCkge1xuICAgICAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgICAgICB0aGlzLnogPSB6O1xuICAgICAgICAgICAgdGhpcy53ID0gdztcbiAgICAgICAgfVxuICAgICAgICBnZXRDb21wb25lbnRzKCkge1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLngsIHRoaXMueSwgdGhpcy56LCB0aGlzLnddO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpc09iamVjdChvYmopIHtcbiAgICAgICAgICAgIGlmIChpc0VtcHR5KG9iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB4ID0gb2JqLng7XG4gICAgICAgICAgICBjb25zdCB5ID0gb2JqLnk7XG4gICAgICAgICAgICBjb25zdCB6ID0gb2JqLno7XG4gICAgICAgICAgICBjb25zdCB3ID0gb2JqLnc7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHggIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHkgIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHogIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHcgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGVxdWFscyh2MSwgdjIpIHtcbiAgICAgICAgICAgIHJldHVybiB2MS54ID09PSB2Mi54ICYmIHYxLnkgPT09IHYyLnkgJiYgdjEueiA9PT0gdjIueiAmJiB2MS53ID09PSB2Mi53O1xuICAgICAgICB9XG4gICAgICAgIHRvT2JqZWN0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB4OiB0aGlzLngsXG4gICAgICAgICAgICAgICAgeTogdGhpcy55LFxuICAgICAgICAgICAgICAgIHo6IHRoaXMueixcbiAgICAgICAgICAgICAgICB3OiB0aGlzLncsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IFBvaW50NGRBc3NlbWJseSA9IHtcbiAgICAgICAgdG9Db21wb25lbnRzOiAocCkgPT4gcC5nZXRDb21wb25lbnRzKCksXG4gICAgICAgIGZyb21Db21wb25lbnRzOiAoY29tcHMpID0+IG5ldyBQb2ludDRkKC4uLmNvbXBzKSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcG9pbnQ0ZEZyb21Vbmtub3duKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBQb2ludDRkLmlzT2JqZWN0KHZhbHVlKVxuICAgICAgICAgICAgPyBuZXcgUG9pbnQ0ZCh2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KVxuICAgICAgICAgICAgOiBuZXcgUG9pbnQ0ZCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3cml0ZVBvaW50NGQodGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgneCcsIHZhbHVlLngpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgneScsIHZhbHVlLnkpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgneicsIHZhbHVlLnopO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgndycsIHZhbHVlLncpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnN0cmFpbnQkMShwYXJhbXMsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50TmRDb25zdHJhaW50KHtcbiAgICAgICAgICAgIGFzc2VtYmx5OiBQb2ludDRkQXNzZW1ibHksXG4gICAgICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCgneCcgaW4gcGFyYW1zID8gcGFyYW1zLnggOiB1bmRlZmluZWQsIGluaXRpYWxWYWx1ZS54KSxcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KCd5JyBpbiBwYXJhbXMgPyBwYXJhbXMueSA6IHVuZGVmaW5lZCwgaW5pdGlhbFZhbHVlLnkpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQoJ3onIGluIHBhcmFtcyA/IHBhcmFtcy56IDogdW5kZWZpbmVkLCBpbml0aWFsVmFsdWUueiksXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCgndycgaW4gcGFyYW1zID8gcGFyYW1zLncgOiB1bmRlZmluZWQsIGluaXRpYWxWYWx1ZS53KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVBeGlzKGluaXRpYWxWYWx1ZSwgY29uc3RyYWludCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYmFzZVN0ZXA6IGdldEJhc2VTdGVwKGNvbnN0cmFpbnQpLFxuICAgICAgICAgICAgY29uc3RyYWludDogY29uc3RyYWludCxcbiAgICAgICAgICAgIHRleHRQcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGNvbnN0cmFpbnQsIGluaXRpYWxWYWx1ZSksXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoZ2V0U3VpdGFibGVEZWNpbWFsRGlnaXRzKGNvbnN0cmFpbnQsIGluaXRpYWxWYWx1ZSkpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IFBvaW50NGRJbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1wb2ludDRkJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFQb2ludDRkLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICB4OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgICAgICB5OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgICAgICB6OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgICAgICB3OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gcG9pbnQ0ZEZyb21Vbmtub3duLFxuICAgICAgICAgICAgY29uc3RyYWludDogKGFyZ3MpID0+IGNyZWF0ZUNvbnN0cmFpbnQkMShhcmdzLnBhcmFtcywgYXJncy5pbml0aWFsVmFsdWUpLFxuICAgICAgICAgICAgZXF1YWxzOiBQb2ludDRkLmVxdWFscyxcbiAgICAgICAgICAgIHdyaXRlcjogKF9hcmdzKSA9PiB3cml0ZVBvaW50NGQsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3MudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjID0gYXJncy5jb25zdHJhaW50O1xuICAgICAgICAgICAgaWYgKCEoYyBpbnN0YW5jZW9mIFBvaW50TmRDb25zdHJhaW50KSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnROZFRleHRDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBhc3NlbWJseTogUG9pbnQ0ZEFzc2VtYmx5LFxuICAgICAgICAgICAgICAgIGF4ZXM6IHZhbHVlLnJhd1ZhbHVlXG4gICAgICAgICAgICAgICAgICAgIC5nZXRDb21wb25lbnRzKClcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29tcCwgaW5kZXgpID0+IGNyZWF0ZUF4aXMoY29tcCwgYy5jb21wb25lbnRzW2luZGV4XSkpLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogcGFyc2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ29uc3RyYWludChwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludHMgPSBbXTtcbiAgICAgICAgY29uc3QgbGMgPSBjcmVhdGVMaXN0Q29uc3RyYWludChwYXJhbXMub3B0aW9ucyk7XG4gICAgICAgIGlmIChsYykge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChsYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDb21wb3NpdGVDb25zdHJhaW50KGNvbnN0cmFpbnRzKTtcbiAgICB9XG4gICAgY29uc3QgU3RyaW5nSW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtc3RyaW5nJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgb3B0aW9uczogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VMaXN0T3B0aW9ucyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IHN0cmluZ0Zyb21Vbmtub3duLFxuICAgICAgICAgICAgY29uc3RyYWludDogKGFyZ3MpID0+IGNyZWF0ZUNvbnN0cmFpbnQoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgd3JpdGVyOiAoX2FyZ3MpID0+IHdyaXRlUHJpbWl0aXZlLFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gYXJncy5kb2N1bWVudDtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJncy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBhcmdzLmNvbnN0cmFpbnQ7XG4gICAgICAgICAgICBpZiAoYyAmJiBmaW5kQ29uc3RyYWludChjLCBMaXN0Q29uc3RyYWludCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpc3RDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiAoX2EgPSBmaW5kTGlzdEl0ZW1zKGMpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgcGFyc2VyOiAodikgPT4gdixcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogZm9ybWF0U3RyaW5nLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IENvbnN0YW50cyA9IHtcbiAgICAgICAgbW9uaXRvcjoge1xuICAgICAgICAgICAgZGVmYXVsdEludGVydmFsOiAyMDAsXG4gICAgICAgICAgICBkZWZhdWx0TGluZUNvdW50OiAzLFxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjbGFzc05hbWUkMiA9IENsYXNzTmFtZSgnbWxsJyk7XG4gICAgY2xhc3MgTXVsdGlMb2dWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZVVwZGF0ZV8gPSB0aGlzLm9uVmFsdWVVcGRhdGVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlcl8gPSBjb25maWcuZm9ybWF0dGVyO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDIoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgdGV4dGFyZWFFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgICAgICAgICB0ZXh0YXJlYUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMignaScpKTtcbiAgICAgICAgICAgIHRleHRhcmVhRWxlbS5zdHlsZS5oZWlnaHQgPSBgY2FsYyh2YXIoLS1ibGQtdXMpICogJHtjb25maWcubGluZUNvdW50fSlgO1xuICAgICAgICAgICAgdGV4dGFyZWFFbGVtLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKHRleHRhcmVhRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGV4dGFyZWFFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudGV4dGFyZWFFbGVtXyA9IHRleHRhcmVhRWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVVcGRhdGVfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMudGV4dGFyZWFFbGVtXztcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFNjcm9sbCA9IGVsZW0uc2Nyb2xsVG9wID09PSBlbGVtLnNjcm9sbEhlaWdodCAtIGVsZW0uY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKHRoaXMuZm9ybWF0dGVyXyh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZWxlbS50ZXh0Q29udGVudCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgICAgICAgIGVsZW0uc2Nyb2xsVG9wID0gZWxlbS5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25WYWx1ZVVwZGF0ZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIE11bHRpTG9nQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IE11bHRpTG9nVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNvbmZpZy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgbGluZUNvdW50OiBjb25maWcubGluZUNvdW50LFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSQxID0gQ2xhc3NOYW1lKCdzZ2wnKTtcbiAgICBjbGFzcyBTaW5nbGVMb2dWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZVVwZGF0ZV8gPSB0aGlzLm9uVmFsdWVVcGRhdGVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlcl8gPSBjb25maWcuZm9ybWF0dGVyO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDEoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICBpbnB1dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMSgnaScpKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS5yZWFkT25seSA9IHRydWU7XG4gICAgICAgICAgICBpbnB1dEVsZW0udHlwZSA9ICd0ZXh0JztcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGlucHV0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50ID0gaW5wdXRFbGVtO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZVVwZGF0ZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgbGFzdFZhbHVlID0gdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlID1cbiAgICAgICAgICAgICAgICBsYXN0VmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMuZm9ybWF0dGVyXyhsYXN0VmFsdWUpIDogJyc7XG4gICAgICAgIH1cbiAgICAgICAgb25WYWx1ZVVwZGF0ZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFNpbmdsZUxvZ0NvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBTaW5nbGVMb2dWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY29uZmlnLmZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBCb29sZWFuTW9uaXRvclBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdtb25pdG9yLWJvb2wnLFxuICAgICAgICB0eXBlOiAnbW9uaXRvcicsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBib29sRnJvbVVua25vd24sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoYXJncy52YWx1ZS5yYXdWYWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNpbmdsZUxvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IEJvb2xlYW5Gb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUxvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogQm9vbGVhbkZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IChfYSA9IGFyZ3MucGFyYW1zLmxpbmVDb3VudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogQ29uc3RhbnRzLm1vbml0b3IuZGVmYXVsdExpbmVDb3VudCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IENsYXNzTmFtZSgnZ3JsJyk7XG4gICAgY2xhc3MgR3JhcGhMb2dWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25DdXJzb3JDaGFuZ2VfID0gdGhpcy5vbkN1cnNvckNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZVVwZGF0ZV8gPSB0aGlzLm9uVmFsdWVVcGRhdGVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZXJfID0gY29uZmlnLmZvcm1hdHRlcjtcbiAgICAgICAgICAgIHRoaXMucHJvcHNfID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JfID0gY29uZmlnLmN1cnNvcjtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ3Vyc29yQ2hhbmdlXyk7XG4gICAgICAgICAgICBjb25zdCBzdmdFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdzdmcnKTtcbiAgICAgICAgICAgIHN2Z0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ2cnKSk7XG4gICAgICAgICAgICBzdmdFbGVtLnN0eWxlLmhlaWdodCA9IGBjYWxjKHZhcigtLWJsZC11cykgKiAke2NvbmZpZy5saW5lQ291bnR9KWA7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc3ZnRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnN2Z0VsZW1fID0gc3ZnRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdwb2x5bGluZScpO1xuICAgICAgICAgICAgdGhpcy5zdmdFbGVtXy5hcHBlbmRDaGlsZChsaW5lRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmxpbmVFbGVtXyA9IGxpbmVFbGVtO1xuICAgICAgICAgICAgY29uc3QgdG9vbHRpcEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0b29sdGlwRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgndCcpLCBDbGFzc05hbWUoJ3R0JykoKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodG9vbHRpcEVsZW0pO1xuICAgICAgICAgICAgdGhpcy50b29sdGlwRWxlbV8gPSB0b29sdGlwRWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVVcGRhdGVfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZ3JhcGhFbGVtZW50KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ZnRWxlbV87XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuc3ZnRWxlbV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBjb25zdCBtYXhJbmRleCA9IHRoaXMudmFsdWUucmF3VmFsdWUubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IHRoaXMucHJvcHNfLmdldCgnbWluVmFsdWUnKTtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IHRoaXMucHJvcHNfLmdldCgnbWF4VmFsdWUnKTtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50cyA9IFtdO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZS5mb3JFYWNoKCh2LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB4ID0gbWFwUmFuZ2UoaW5kZXgsIDAsIG1heEluZGV4LCAwLCBib3VuZHMud2lkdGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBtYXBSYW5nZSh2LCBtaW4sIG1heCwgYm91bmRzLmhlaWdodCwgMCk7XG4gICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goW3gsIHldLmpvaW4oJywnKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubGluZUVsZW1fLnNldEF0dHJpYnV0ZU5TKG51bGwsICdwb2ludHMnLCBwb2ludHMuam9pbignICcpKTtcbiAgICAgICAgICAgIGNvbnN0IHRvb2x0aXBFbGVtID0gdGhpcy50b29sdGlwRWxlbV87XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWUucmF3VmFsdWVbdGhpcy5jdXJzb3JfLnJhd1ZhbHVlXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdG9vbHRpcEVsZW0uY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUoJ3QnLCAnYScpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0eCA9IG1hcFJhbmdlKHRoaXMuY3Vyc29yXy5yYXdWYWx1ZSwgMCwgbWF4SW5kZXgsIDAsIGJvdW5kcy53aWR0aCk7XG4gICAgICAgICAgICBjb25zdCB0eSA9IG1hcFJhbmdlKHZhbHVlLCBtaW4sIG1heCwgYm91bmRzLmhlaWdodCwgMCk7XG4gICAgICAgICAgICB0b29sdGlwRWxlbS5zdHlsZS5sZWZ0ID0gYCR7dHh9cHhgO1xuICAgICAgICAgICAgdG9vbHRpcEVsZW0uc3R5bGUudG9wID0gYCR7dHl9cHhgO1xuICAgICAgICAgICAgdG9vbHRpcEVsZW0udGV4dENvbnRlbnQgPSBgJHt0aGlzLmZvcm1hdHRlcl8odmFsdWUpfWA7XG4gICAgICAgICAgICBpZiAoIXRvb2x0aXBFbGVtLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUoJ3QnLCAnYScpKSkge1xuICAgICAgICAgICAgICAgIHRvb2x0aXBFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCd0JywgJ2EnKSwgY2xhc3NOYW1lKCd0JywgJ2luJykpO1xuICAgICAgICAgICAgICAgIGZvcmNlUmVmbG93KHRvb2x0aXBFbGVtKTtcbiAgICAgICAgICAgICAgICB0b29sdGlwRWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSgndCcsICdpbicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlVXBkYXRlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIG9uQ3Vyc29yQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgR3JhcGhMb2dDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25HcmFwaE1vdXNlTW92ZV8gPSB0aGlzLm9uR3JhcGhNb3VzZU1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uR3JhcGhNb3VzZUxlYXZlXyA9IHRoaXMub25HcmFwaE1vdXNlTGVhdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uR3JhcGhQb2ludGVyRG93bl8gPSB0aGlzLm9uR3JhcGhQb2ludGVyRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25HcmFwaFBvaW50ZXJNb3ZlXyA9IHRoaXMub25HcmFwaFBvaW50ZXJNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkdyYXBoUG9pbnRlclVwXyA9IHRoaXMub25HcmFwaFBvaW50ZXJVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHNfID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXyA9IGNyZWF0ZVZhbHVlKC0xKTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBHcmFwaExvZ1ZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiB0aGlzLmN1cnNvcl8sXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjb25maWcuZm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIGxpbmVDb3VudDogY29uZmlnLmxpbmVDb3VudCxcbiAgICAgICAgICAgICAgICBwcm9wczogdGhpcy5wcm9wc18sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFzdXBwb3J0c1RvdWNoKGRvYykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uR3JhcGhNb3VzZU1vdmVfKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5vbkdyYXBoTW91c2VMZWF2ZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGggPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHBoLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uR3JhcGhQb2ludGVyRG93bl8pO1xuICAgICAgICAgICAgICAgIHBoLmVtaXR0ZXIub24oJ21vdmUnLCB0aGlzLm9uR3JhcGhQb2ludGVyTW92ZV8pO1xuICAgICAgICAgICAgICAgIHBoLmVtaXR0ZXIub24oJ3VwJywgdGhpcy5vbkdyYXBoUG9pbnRlclVwXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25HcmFwaE1vdXNlTGVhdmVfKCkge1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JfLnJhd1ZhbHVlID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgb25HcmFwaE1vdXNlTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMudmlldy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JfLnJhd1ZhbHVlID0gTWF0aC5mbG9vcihtYXBSYW5nZShldi5vZmZzZXRYLCAwLCBib3VuZHMud2lkdGgsIDAsIHRoaXMudmFsdWUucmF3VmFsdWUubGVuZ3RoKSk7XG4gICAgICAgIH1cbiAgICAgICAgb25HcmFwaFBvaW50ZXJEb3duXyhldikge1xuICAgICAgICAgICAgdGhpcy5vbkdyYXBoUG9pbnRlck1vdmVfKGV2KTtcbiAgICAgICAgfVxuICAgICAgICBvbkdyYXBoUG9pbnRlck1vdmVfKGV2KSB7XG4gICAgICAgICAgICBpZiAoIWV2LmRhdGEucG9pbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnNvcl8ucmF3VmFsdWUgPSAtMTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmN1cnNvcl8ucmF3VmFsdWUgPSBNYXRoLmZsb29yKG1hcFJhbmdlKGV2LmRhdGEucG9pbnQueCwgMCwgZXYuZGF0YS5ib3VuZHMud2lkdGgsIDAsIHRoaXMudmFsdWUucmF3VmFsdWUubGVuZ3RoKSk7XG4gICAgICAgIH1cbiAgICAgICAgb25HcmFwaFBvaW50ZXJVcF8oKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvcl8ucmF3VmFsdWUgPSAtMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZvcm1hdHRlcihwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuICdmb3JtYXQnIGluIHBhcmFtcyAmJiAhaXNFbXB0eShwYXJhbXMuZm9ybWF0KVxuICAgICAgICAgICAgPyBwYXJhbXMuZm9ybWF0XG4gICAgICAgICAgICA6IGNyZWF0ZU51bWJlckZvcm1hdHRlcigyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlVGV4dE1vbml0b3IoYXJncykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChhcmdzLnZhbHVlLnJhd1ZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTaW5nbGVMb2dDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZUZvcm1hdHRlcihhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgTXVsdGlMb2dDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlRm9ybWF0dGVyKGFyZ3MucGFyYW1zKSxcbiAgICAgICAgICAgIGxpbmVDb3VudDogKF9hID0gYXJncy5wYXJhbXMubGluZUNvdW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBDb25zdGFudHMubW9uaXRvci5kZWZhdWx0TGluZUNvdW50LFxuICAgICAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWUsXG4gICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlR3JhcGhNb25pdG9yKGFyZ3MpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIHJldHVybiBuZXcgR3JhcGhMb2dDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlRm9ybWF0dGVyKGFyZ3MucGFyYW1zKSxcbiAgICAgICAgICAgIGxpbmVDb3VudDogKF9hID0gYXJncy5wYXJhbXMubGluZUNvdW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBDb25zdGFudHMubW9uaXRvci5kZWZhdWx0TGluZUNvdW50LFxuICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgIG1heFZhbHVlOiAoX2IgPSAoJ21heCcgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5tYXggOiBudWxsKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMTAwLFxuICAgICAgICAgICAgICAgIG1pblZhbHVlOiAoX2MgPSAoJ21pbicgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5taW4gOiBudWxsKSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogMCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWUsXG4gICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkU2hvd0dyYXBoKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gJ3ZpZXcnIGluIHBhcmFtcyAmJiBwYXJhbXMudmlldyA9PT0gJ2dyYXBoJztcbiAgICB9XG4gICAgY29uc3QgTnVtYmVyTW9uaXRvclBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdtb25pdG9yLW51bWJlcicsXG4gICAgICAgIHR5cGU6ICdtb25pdG9yJyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBwLm9wdGlvbmFsLmZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgIGxpbmVDb3VudDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICAgICAgbWF4OiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICBtaW46IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgIHZpZXc6IHAub3B0aW9uYWwuc3RyaW5nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIGRlZmF1bHRCdWZmZXJTaXplOiAocGFyYW1zKSA9PiAoc2hvdWxkU2hvd0dyYXBoKHBhcmFtcykgPyA2NCA6IDEpLFxuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IG51bWJlckZyb21Vbmtub3duLFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgaWYgKHNob3VsZFNob3dHcmFwaChhcmdzLnBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlR3JhcGhNb25pdG9yKGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVRleHRNb25pdG9yKGFyZ3MpO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBTdHJpbmdNb25pdG9yUGx1Z2luID0ge1xuICAgICAgICBpZDogJ21vbml0b3Itc3RyaW5nJyxcbiAgICAgICAgdHlwZTogJ21vbml0b3InLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgIG11bHRpbGluZTogcC5vcHRpb25hbC5ib29sZWFuLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBzdHJpbmdGcm9tVW5rbm93bixcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJncy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IG11bHRpbGluZSA9IHZhbHVlLnJhd1ZhbHVlLmxlbmd0aCA+IDEgfHxcbiAgICAgICAgICAgICAgICAoJ211bHRpbGluZScgaW4gYXJncy5wYXJhbXMgJiYgYXJncy5wYXJhbXMubXVsdGlsaW5lKTtcbiAgICAgICAgICAgIGlmIChtdWx0aWxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE11bHRpTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogZm9ybWF0U3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IChfYSA9IGFyZ3MucGFyYW1zLmxpbmVDb3VudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogQ29uc3RhbnRzLm1vbml0b3IuZGVmYXVsdExpbmVDb3VudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBTaW5nbGVMb2dDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdFN0cmluZyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjbGFzcyBJbnB1dEJpbmRpbmcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnJlYWRlciA9IGNvbmZpZy5yZWFkZXI7XG4gICAgICAgICAgICB0aGlzLndyaXRlciA9IGNvbmZpZy53cml0ZXI7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnRhcmdldCA9IGNvbmZpZy50YXJnZXQ7XG4gICAgICAgICAgICB0aGlzLnJlYWQoKTtcbiAgICAgICAgfVxuICAgICAgICByZWFkKCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0VmFsdWUgPSB0aGlzLnRhcmdldC5yZWFkKCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUgPSB0aGlzLnJlYWRlcih0YXJnZXRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGVfKHJhd1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlcih0aGlzLnRhcmdldCwgcmF3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlXyhldi5yYXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV2Lm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgcmF3VmFsdWU6IGV2LnJhd1ZhbHVlLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5wdXRCaW5kaW5nQ29udHJvbGxlcihwbHVnaW4sIGFyZ3MpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGx1Z2luLmFjY2VwdChhcmdzLnRhcmdldC5yZWFkKCksIGFyZ3MucGFyYW1zKTtcbiAgICAgICAgaWYgKGlzRW1wdHkocmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgIGNvbnN0IHZhbHVlQXJncyA9IHtcbiAgICAgICAgICAgIHRhcmdldDogYXJncy50YXJnZXQsXG4gICAgICAgICAgICBpbml0aWFsVmFsdWU6IHJlc3VsdC5pbml0aWFsVmFsdWUsXG4gICAgICAgICAgICBwYXJhbXM6IHJlc3VsdC5wYXJhbXMsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHBsdWdpbi5iaW5kaW5nLnJlYWRlcih2YWx1ZUFyZ3MpO1xuICAgICAgICBjb25zdCBjb25zdHJhaW50ID0gcGx1Z2luLmJpbmRpbmcuY29uc3RyYWludFxuICAgICAgICAgICAgPyBwbHVnaW4uYmluZGluZy5jb25zdHJhaW50KHZhbHVlQXJncylcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNyZWF0ZVZhbHVlKHJlYWRlcihyZXN1bHQuaW5pdGlhbFZhbHVlKSwge1xuICAgICAgICAgICAgY29uc3RyYWludDogY29uc3RyYWludCxcbiAgICAgICAgICAgIGVxdWFsczogcGx1Z2luLmJpbmRpbmcuZXF1YWxzLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYmluZGluZyA9IG5ldyBJbnB1dEJpbmRpbmcoe1xuICAgICAgICAgICAgcmVhZGVyOiByZWFkZXIsXG4gICAgICAgICAgICB0YXJnZXQ6IGFyZ3MudGFyZ2V0LFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgd3JpdGVyOiBwbHVnaW4uYmluZGluZy53cml0ZXIodmFsdWVBcmdzKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRpc2FibGVkID0gcC5vcHRpb25hbC5ib29sZWFuKGFyZ3MucGFyYW1zLmRpc2FibGVkKS52YWx1ZTtcbiAgICAgICAgY29uc3QgaGlkZGVuID0gcC5vcHRpb25hbC5ib29sZWFuKGFyZ3MucGFyYW1zLmhpZGRlbikudmFsdWU7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBwbHVnaW4uY29udHJvbGxlcih7XG4gICAgICAgICAgICBjb25zdHJhaW50OiBjb25zdHJhaW50LFxuICAgICAgICAgICAgZG9jdW1lbnQ6IGFyZ3MuZG9jdW1lbnQsXG4gICAgICAgICAgICBpbml0aWFsVmFsdWU6IHJlc3VsdC5pbml0aWFsVmFsdWUsXG4gICAgICAgICAgICBwYXJhbXM6IHJlc3VsdC5wYXJhbXMsXG4gICAgICAgICAgICB2YWx1ZTogYmluZGluZy52YWx1ZSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogVmlld1Byb3BzLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgICAgICAgIGhpZGRlbjogaGlkZGVuLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHAub3B0aW9uYWwuc3RyaW5nKGFyZ3MucGFyYW1zLmxhYmVsKS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnB1dEJpbmRpbmdDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIGJpbmRpbmc6IGJpbmRpbmcsXG4gICAgICAgICAgICBibGFkZTogY3JlYXRlQmxhZGUoKSxcbiAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwgIT09IG51bGwgJiYgbGFiZWwgIT09IHZvaWQgMCA/IGxhYmVsIDogYXJncy50YXJnZXQua2V5LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB2YWx1ZUNvbnRyb2xsZXI6IGNvbnRyb2xsZXIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIE1vbml0b3JCaW5kaW5nIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uVGlja18gPSB0aGlzLm9uVGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucmVhZGVyXyA9IGNvbmZpZy5yZWFkZXI7XG4gICAgICAgICAgICB0aGlzLnRhcmdldCA9IGNvbmZpZy50YXJnZXQ7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudGlja2VyID0gY29uZmlnLnRpY2tlcjtcbiAgICAgICAgICAgIHRoaXMudGlja2VyLmVtaXR0ZXIub24oJ3RpY2snLCB0aGlzLm9uVGlja18pO1xuICAgICAgICAgICAgdGhpcy5yZWFkKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcG9zZSgpIHtcbiAgICAgICAgICAgIHRoaXMudGlja2VyLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZWFkKCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0VmFsdWUgPSB0aGlzLnRhcmdldC5yZWFkKCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMucmVhZGVyXyh0YXJnZXRWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gY3JlYXRlUHVzaGVkQnVmZmVyKGJ1ZmZlciwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3VwZGF0ZScsIHtcbiAgICAgICAgICAgICAgICByYXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25UaWNrXyhfKSB7XG4gICAgICAgICAgICB0aGlzLnJlYWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVRpY2tlcihkb2N1bWVudCwgaW50ZXJ2YWwpIHtcbiAgICAgICAgcmV0dXJuIGludGVydmFsID09PSAwXG4gICAgICAgICAgICA/IG5ldyBNYW51YWxUaWNrZXIoKVxuICAgICAgICAgICAgOiBuZXcgSW50ZXJ2YWxUaWNrZXIoZG9jdW1lbnQsIGludGVydmFsICE9PSBudWxsICYmIGludGVydmFsICE9PSB2b2lkIDAgPyBpbnRlcnZhbCA6IENvbnN0YW50cy5tb25pdG9yLmRlZmF1bHRJbnRlcnZhbCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZU1vbml0b3JCaW5kaW5nQ29udHJvbGxlcihwbHVnaW4sIGFyZ3MpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGNvbnN0IFAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwbHVnaW4uYWNjZXB0KGFyZ3MudGFyZ2V0LnJlYWQoKSwgYXJncy5wYXJhbXMpO1xuICAgICAgICBpZiAoaXNFbXB0eShyZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiaW5kaW5nQXJncyA9IHtcbiAgICAgICAgICAgIHRhcmdldDogYXJncy50YXJnZXQsXG4gICAgICAgICAgICBpbml0aWFsVmFsdWU6IHJlc3VsdC5pbml0aWFsVmFsdWUsXG4gICAgICAgICAgICBwYXJhbXM6IHJlc3VsdC5wYXJhbXMsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHBsdWdpbi5iaW5kaW5nLnJlYWRlcihiaW5kaW5nQXJncyk7XG4gICAgICAgIGNvbnN0IGJ1ZmZlclNpemUgPSAoX2IgPSAoX2EgPSBQLm9wdGlvbmFsLm51bWJlcihhcmdzLnBhcmFtcy5idWZmZXJTaXplKS52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKHBsdWdpbi5iaW5kaW5nLmRlZmF1bHRCdWZmZXJTaXplICYmXG4gICAgICAgICAgICBwbHVnaW4uYmluZGluZy5kZWZhdWx0QnVmZmVyU2l6ZShyZXN1bHQucGFyYW1zKSkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDE7XG4gICAgICAgIGNvbnN0IGludGVydmFsID0gUC5vcHRpb25hbC5udW1iZXIoYXJncy5wYXJhbXMuaW50ZXJ2YWwpLnZhbHVlO1xuICAgICAgICBjb25zdCBiaW5kaW5nID0gbmV3IE1vbml0b3JCaW5kaW5nKHtcbiAgICAgICAgICAgIHJlYWRlcjogcmVhZGVyLFxuICAgICAgICAgICAgdGFyZ2V0OiBhcmdzLnRhcmdldCxcbiAgICAgICAgICAgIHRpY2tlcjogY3JlYXRlVGlja2VyKGFyZ3MuZG9jdW1lbnQsIGludGVydmFsKSxcbiAgICAgICAgICAgIHZhbHVlOiBpbml0aWFsaXplQnVmZmVyKGJ1ZmZlclNpemUpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGlzYWJsZWQgPSBQLm9wdGlvbmFsLmJvb2xlYW4oYXJncy5wYXJhbXMuZGlzYWJsZWQpLnZhbHVlO1xuICAgICAgICBjb25zdCBoaWRkZW4gPSBQLm9wdGlvbmFsLmJvb2xlYW4oYXJncy5wYXJhbXMuaGlkZGVuKS52YWx1ZTtcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IHBsdWdpbi5jb250cm9sbGVyKHtcbiAgICAgICAgICAgIGRvY3VtZW50OiBhcmdzLmRvY3VtZW50LFxuICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQucGFyYW1zLFxuICAgICAgICAgICAgdmFsdWU6IGJpbmRpbmcudmFsdWUsXG4gICAgICAgICAgICB2aWV3UHJvcHM6IFZpZXdQcm9wcy5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICBoaWRkZW46IGhpZGRlbixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbGFiZWwgPSAoX2MgPSBQLm9wdGlvbmFsLnN0cmluZyhhcmdzLnBhcmFtcy5sYWJlbCkudmFsdWUpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGFyZ3MudGFyZ2V0LmtleTtcbiAgICAgICAgcmV0dXJuIG5ldyBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgYmluZGluZzogYmluZGluZyxcbiAgICAgICAgICAgIGJsYWRlOiBjcmVhdGVCbGFkZSgpLFxuICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdmFsdWVDb250cm9sbGVyOiBjb250cm9sbGVyLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGFzcyBQbHVnaW5Qb29sIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNNYXBfID0ge1xuICAgICAgICAgICAgICAgIGJsYWRlczogW10sXG4gICAgICAgICAgICAgICAgaW5wdXRzOiBbXSxcbiAgICAgICAgICAgICAgICBtb25pdG9yczogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGdldEFsbCgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5wbHVnaW5zTWFwXy5ibGFkZXMsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5wbHVnaW5zTWFwXy5pbnB1dHMsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5wbHVnaW5zTWFwXy5tb25pdG9ycyxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmVnaXN0ZXIocikge1xuICAgICAgICAgICAgaWYgKHIudHlwZSA9PT0gJ2JsYWRlJykge1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc01hcF8uYmxhZGVzLnVuc2hpZnQocik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyLnR5cGUgPT09ICdpbnB1dCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnNNYXBfLmlucHV0cy51bnNoaWZ0KHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoci50eXBlID09PSAnbW9uaXRvcicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnNNYXBfLm1vbml0b3JzLnVuc2hpZnQocik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlSW5wdXQoZG9jdW1lbnQsIHRhcmdldCwgcGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBpbml0aWFsVmFsdWUgPSB0YXJnZXQucmVhZCgpO1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkoaW5pdGlhbFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUcEVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB0YXJnZXQua2V5LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbm9tYXRjaGluZ2NvbnRyb2xsZXInLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmMgPSB0aGlzLnBsdWdpbnNNYXBfLmlucHV0cy5yZWR1Y2UoKHJlc3VsdCwgcGx1Z2luKSA9PiByZXN1bHQgIT09IG51bGwgJiYgcmVzdWx0ICE9PSB2b2lkIDAgPyByZXN1bHQgOiBjcmVhdGVJbnB1dEJpbmRpbmdDb250cm9sbGVyKHBsdWdpbiwge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50OiBkb2N1bWVudCxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgIH0pLCBudWxsKTtcbiAgICAgICAgICAgIGlmIChiYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBUcEVycm9yKHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogdGFyZ2V0LmtleSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHR5cGU6ICdub21hdGNoaW5nY29udHJvbGxlcicsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVNb25pdG9yKGRvY3VtZW50LCB0YXJnZXQsIHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgYmMgPSB0aGlzLnBsdWdpbnNNYXBfLm1vbml0b3JzLnJlZHVjZSgocmVzdWx0LCBwbHVnaW4pID0+IHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHZvaWQgMCA/IHJlc3VsdCA6IGNyZWF0ZU1vbml0b3JCaW5kaW5nQ29udHJvbGxlcihwbHVnaW4sIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudDogZG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICB9KSwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoYmMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHBFcnJvcih7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IHRhcmdldC5rZXksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnbm9tYXRjaGluZ2NvbnRyb2xsZXInLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlQmxhZGUoZG9jdW1lbnQsIHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgYmMgPSB0aGlzLnBsdWdpbnNNYXBfLmJsYWRlcy5yZWR1Y2UoKHJlc3VsdCwgcGx1Z2luKSA9PiByZXN1bHQgIT09IG51bGwgJiYgcmVzdWx0ICE9PSB2b2lkIDAgPyByZXN1bHQgOiBjcmVhdGVCbGFkZUNvbnRyb2xsZXIocGx1Z2luLCB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQ6IGRvY3VtZW50LFxuICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICAgICAgfSksIG51bGwpO1xuICAgICAgICAgICAgaWYgKCFiYykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUcEVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ25vbWF0Y2hpbmd2aWV3JyxcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmM7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlQmxhZGVBcGkoYmMpIHtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIElucHV0QmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IElucHV0QmluZGluZ0FwaShiYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1vbml0b3JCaW5kaW5nQXBpKGJjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIFJhY2tDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSYWNrQXBpKGJjLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IHRoaXMucGx1Z2luc01hcF8uYmxhZGVzLnJlZHVjZSgocmVzdWx0LCBwbHVnaW4pID0+IHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHZvaWQgMCA/IHJlc3VsdCA6IHBsdWdpbi5hcGkoe1xuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IGJjLFxuICAgICAgICAgICAgICAgIHBvb2w6IHRoaXMsXG4gICAgICAgICAgICB9KSwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcGk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0UGx1Z2luUG9vbCgpIHtcbiAgICAgICAgY29uc3QgcG9vbCA9IG5ldyBQbHVnaW5Qb29sKCk7XG4gICAgICAgIFtcbiAgICAgICAgICAgIFBvaW50MmRJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIFBvaW50M2RJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIFBvaW50NGRJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIFN0cmluZ0lucHV0UGx1Z2luLFxuICAgICAgICAgICAgTnVtYmVySW5wdXRQbHVnaW4sXG4gICAgICAgICAgICBTdHJpbmdDb2xvcklucHV0UGx1Z2luLFxuICAgICAgICAgICAgT2JqZWN0Q29sb3JJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIE51bWJlckNvbG9ySW5wdXRQbHVnaW4sXG4gICAgICAgICAgICBCb29sZWFuSW5wdXRQbHVnaW4sXG4gICAgICAgICAgICBCb29sZWFuTW9uaXRvclBsdWdpbixcbiAgICAgICAgICAgIFN0cmluZ01vbml0b3JQbHVnaW4sXG4gICAgICAgICAgICBOdW1iZXJNb25pdG9yUGx1Z2luLFxuICAgICAgICAgICAgQnV0dG9uQmxhZGVQbHVnaW4sXG4gICAgICAgICAgICBGb2xkZXJCbGFkZVBsdWdpbixcbiAgICAgICAgICAgIFNlcGFyYXRvckJsYWRlUGx1Z2luLFxuICAgICAgICAgICAgVGFiQmxhZGVQbHVnaW4sXG4gICAgICAgIF0uZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgcG9vbC5yZWdpc3RlcihwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwb29sO1xuICAgIH1cblxuICAgIGNsYXNzIExpc3RBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcENoYW5nZUV2ZW50KHRoaXMsIGV2LnJhd1ZhbHVlKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnbGFiZWwnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdsYWJlbCcsIGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5nZXQoJ29wdGlvbnMnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgb3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5zZXQoJ29wdGlvbnMnLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUucmF3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5yYXdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFNsaWRlckFwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlcikge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwQ2hhbmdlRXZlbnQodGhpcywgZXYucmF3VmFsdWUpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxhYmVsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCdsYWJlbCcpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBsYWJlbChsYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ2xhYmVsJywgbGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBtYXhWYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5zbGlkZXJDb250cm9sbGVyLnByb3BzLmdldCgnbWF4VmFsdWUnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbWF4VmFsdWUobWF4VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnNsaWRlckNvbnRyb2xsZXIucHJvcHMuc2V0KCdtYXhWYWx1ZScsIG1heFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbWluVmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIuc2xpZGVyQ29udHJvbGxlci5wcm9wcy5nZXQoJ21pblZhbHVlJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IG1pblZhbHVlKG1pblZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5zbGlkZXJDb250cm9sbGVyLnByb3BzLnNldCgnbWluVmFsdWUnLCBtaW5WYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUucmF3VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUZXh0QXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8gPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBDaGFuZ2VFdmVudCh0aGlzLCBldi5yYXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbGFiZWwoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ2xhYmVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGxhYmVsKGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgnbGFiZWwnLCBsYWJlbCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGZvcm1hdHRlcigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5nZXQoJ2Zvcm1hdHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBmb3JtYXR0ZXIoZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5zZXQoJ2Zvcm1hdHRlcicsIGZvcm1hdHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUucmF3VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBMaXN0QmxhZGVQbHVnaW4gPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6ICdsaXN0JyxcbiAgICAgICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgICAgICBhY2NlcHQocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHAucmVxdWlyZWQuY3VzdG9tKHBhcnNlTGlzdE9wdGlvbnMpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcC5yZXF1aXJlZC5yYXcsXG4gICAgICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ2xpc3QnKSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHAub3B0aW9uYWwuc3RyaW5nLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyB7IHBhcmFtczogcmVzdWx0IH0gOiBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRyb2xsZXIoYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGljID0gbmV3IExpc3RDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogbm9ybWFsaXplTGlzdE9wdGlvbnMoYXJncy5wYXJhbXMub3B0aW9ucyksXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY3JlYXRlVmFsdWUoYXJncy5wYXJhbXMudmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGFiZWxlZFZhbHVlQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGJsYWRlOiBhcmdzLmJsYWRlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogYXJncy5wYXJhbXMubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUNvbnRyb2xsZXI6IGljLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFwaShhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyIGluc3RhbmNlb2YgTGFiZWxlZFZhbHVlQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlci52YWx1ZUNvbnRyb2xsZXIgaW5zdGFuY2VvZiBMaXN0Q29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGlzdEFwaShhcmdzLmNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9KSgpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV4cG9ydFByZXNldEpzb24odGFyZ2V0cykge1xuICAgICAgICByZXR1cm4gdGFyZ2V0cy5yZWR1Y2UoKHJlc3VsdCwgdGFyZ2V0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihyZXN1bHQsIHtcbiAgICAgICAgICAgICAgICBbdGFyZ2V0LnByZXNldEtleV06IHRhcmdldC5yZWFkKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwge30pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW1wb3J0UHJlc2V0SnNvbih0YXJnZXRzLCBwcmVzZXQpIHtcbiAgICAgICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJlc2V0W3RhcmdldC5wcmVzZXRLZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQud3JpdGUodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGFzcyBSb290QXBpIGV4dGVuZHMgRm9sZGVyQXBpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIsIHBvb2wpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIsIHBvb2wpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmlldy5lbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbXBvcnRzIGEgcHJlc2V0IG9mIGFsbCBpbnB1dHMuXG4gICAgICAgICAqIEBwYXJhbSBwcmVzZXQgVGhlIHByZXNldCBvYmplY3QgdG8gaW1wb3J0LlxuICAgICAgICAgKi9cbiAgICAgICAgaW1wb3J0UHJlc2V0KHByZXNldCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMuY29udHJvbGxlcl8ucmFja0NvbnRyb2xsZXIucmFja1xuICAgICAgICAgICAgICAgIC5maW5kKElucHV0QmluZGluZ0NvbnRyb2xsZXIpXG4gICAgICAgICAgICAgICAgLm1hcCgoaWJjKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGliYy5iaW5kaW5nLnRhcmdldDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW1wb3J0UHJlc2V0SnNvbih0YXJnZXRzLCBwcmVzZXQpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEV4cG9ydHMgYSBwcmVzZXQgb2YgYWxsIGlucHV0cy5cbiAgICAgICAgICogQHJldHVybiBBbiBleHBvcnRlZCBwcmVzZXQgb2JqZWN0LlxuICAgICAgICAgKi9cbiAgICAgICAgZXhwb3J0UHJlc2V0KCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMuY29udHJvbGxlcl8ucmFja0NvbnRyb2xsZXIucmFja1xuICAgICAgICAgICAgICAgIC5maW5kKElucHV0QmluZGluZ0NvbnRyb2xsZXIpXG4gICAgICAgICAgICAgICAgLm1hcCgoaWJjKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGliYy5iaW5kaW5nLnRhcmdldDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydFByZXNldEpzb24odGFyZ2V0cyk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlZnJlc2hlcyBhbGwgYmluZGluZ3Mgb2YgdGhlIHBhbmUuXG4gICAgICAgICAqL1xuICAgICAgICByZWZyZXNoKCkge1xuICAgICAgICAgICAgLy8gRm9yY2UtcmVhZCBhbGwgaW5wdXQgYmluZGluZ3NcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucmFja0NvbnRyb2xsZXIucmFja1xuICAgICAgICAgICAgICAgIC5maW5kKElucHV0QmluZGluZ0NvbnRyb2xsZXIpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGliYykgPT4ge1xuICAgICAgICAgICAgICAgIGliYy5iaW5kaW5nLnJlYWQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gRm9yY2UtcmVhZCBhbGwgbW9uaXRvciBiaW5kaW5nc1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yYWNrQ29udHJvbGxlci5yYWNrXG4gICAgICAgICAgICAgICAgLmZpbmQoTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChtYmMpID0+IHtcbiAgICAgICAgICAgICAgICBtYmMuYmluZGluZy5yZWFkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFJvb3RDb250cm9sbGVyIGV4dGVuZHMgRm9sZGVyQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogY29uZmlnLmV4cGFuZGVkLFxuICAgICAgICAgICAgICAgIGJsYWRlOiBjb25maWcuYmxhZGUsXG4gICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5wcm9wcyxcbiAgICAgICAgICAgICAgICByb290OiB0cnVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgU2xpZGVyQmxhZGVQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnc2xpZGVyJyxcbiAgICAgICAgdHlwZTogJ2JsYWRlJyxcbiAgICAgICAgYWNjZXB0KHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBtYXg6IHAucmVxdWlyZWQubnVtYmVyLFxuICAgICAgICAgICAgICAgIG1pbjogcC5yZXF1aXJlZC5udW1iZXIsXG4gICAgICAgICAgICAgICAgdmlldzogcC5yZXF1aXJlZC5jb25zdGFudCgnc2xpZGVyJyksXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBwLm9wdGlvbmFsLmZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBwLm9wdGlvbmFsLnN0cmluZyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyB7IHBhcmFtczogcmVzdWx0IH0gOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBjb25zdCB2ID0gKF9hID0gYXJncy5wYXJhbXMudmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG4gICAgICAgICAgICBjb25zdCB2YyA9IG5ldyBTbGlkZXJUZXh0Q29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmFzZVN0ZXA6IDEsXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICBzbGlkZXJQcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIG1heFZhbHVlOiBhcmdzLnBhcmFtcy5tYXgsXG4gICAgICAgICAgICAgICAgICAgIG1pblZhbHVlOiBhcmdzLnBhcmFtcy5taW4sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGV4dFByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKHVuZGVmaW5lZCwgdiksXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogKF9iID0gYXJncy5wYXJhbXMuZm9ybWF0KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBudW1iZXJUb1N0cmluZyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogY3JlYXRlVmFsdWUodiksXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBMYWJlbGVkVmFsdWVDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogYXJncy5ibGFkZSxcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBhcmdzLnBhcmFtcy5sYWJlbCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB2YWx1ZUNvbnRyb2xsZXI6IHZjLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFwaShhcmdzKSB7XG4gICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiBMYWJlbGVkVmFsdWVDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyLnZhbHVlQ29udHJvbGxlciBpbnN0YW5jZW9mIFNsaWRlclRleHRDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBTbGlkZXJBcGkoYXJncy5jb250cm9sbGVyKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgVGV4dEJsYWRlUGx1Z2luID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiAndGV4dCcsXG4gICAgICAgICAgICB0eXBlOiAnYmxhZGUnLFxuICAgICAgICAgICAgYWNjZXB0KHBhcmFtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZTogcC5yZXF1aXJlZC5mdW5jdGlvbixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHAucmVxdWlyZWQucmF3LFxuICAgICAgICAgICAgICAgICAgICB2aWV3OiBwLnJlcXVpcmVkLmNvbnN0YW50KCd0ZXh0JyksXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogcC5vcHRpb25hbC5mdW5jdGlvbixcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHAub3B0aW9uYWwuc3RyaW5nLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyB7IHBhcmFtczogcmVzdWx0IH0gOiBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRyb2xsZXIoYXJncykge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBjb25zdCBpYyA9IG5ldyBUZXh0Q29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlcjogYXJncy5wYXJhbXMucGFyc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogKF9hID0gYXJncy5wYXJhbXMuZm9ybWF0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoKHYpID0+IFN0cmluZyh2KSksXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY3JlYXRlVmFsdWUoYXJncy5wYXJhbXMudmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGFiZWxlZFZhbHVlQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGJsYWRlOiBhcmdzLmJsYWRlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogYXJncy5wYXJhbXMubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUNvbnRyb2xsZXI6IGljLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFwaShhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyIGluc3RhbmNlb2YgTGFiZWxlZFZhbHVlQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlci52YWx1ZUNvbnRyb2xsZXIgaW5zdGFuY2VvZiBUZXh0Q29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dEFwaShhcmdzLmNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9KSgpO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFdyYXBwZXJFbGVtZW50KGRvYykge1xuICAgICAgICBjb25zdCBlbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lKCdkZncnKSgpKTtcbiAgICAgICAgaWYgKGRvYy5ib2R5KSB7XG4gICAgICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChlbGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWxlbTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW1iZWRTdHlsZShkb2MsIGlkLCBjc3MpIHtcbiAgICAgICAgaWYgKGRvYy5xdWVyeVNlbGVjdG9yKGBzdHlsZVtkYXRhLXRwLXN0eWxlPSR7aWR9XWApKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3R5bGVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgIHN0eWxlRWxlbS5kYXRhc2V0LnRwU3R5bGUgPSBpZDtcbiAgICAgICAgc3R5bGVFbGVtLnRleHRDb250ZW50ID0gY3NzO1xuICAgICAgICBkb2MuaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsZW0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcm9vdCBwYW5lIG9mIFR3ZWFrcGFuZS5cbiAgICAgKi9cbiAgICBjbGFzcyBQYW5lIGV4dGVuZHMgUm9vdEFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKG9wdF9jb25maWcpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBvcHRfY29uZmlnICE9PSBudWxsICYmIG9wdF9jb25maWcgIT09IHZvaWQgMCA/IG9wdF9jb25maWcgOiB7fTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IChfYSA9IGNvbmZpZy5kb2N1bWVudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZ2V0V2luZG93RG9jdW1lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IHBvb2wgPSBjcmVhdGVEZWZhdWx0UGx1Z2luUG9vbCgpO1xuICAgICAgICAgICAgY29uc3Qgcm9vdENvbnRyb2xsZXIgPSBuZXcgUm9vdENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGNvbmZpZy5leHBhbmRlZCxcbiAgICAgICAgICAgICAgICBibGFkZTogY3JlYXRlQmxhZGUoKSxcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBjb25maWcudGl0bGUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBWaWV3UHJvcHMuY3JlYXRlKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN1cGVyKHJvb3RDb250cm9sbGVyLCBwb29sKTtcbiAgICAgICAgICAgIHRoaXMucG9vbF8gPSBwb29sO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXJFbGVtXyA9IChfYiA9IGNvbmZpZy5jb250YWluZXIpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGNyZWF0ZURlZmF1bHRXcmFwcGVyRWxlbWVudChkb2MpO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXJFbGVtXy5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5kb2NfID0gZG9jO1xuICAgICAgICAgICAgdGhpcy51c2VzRGVmYXVsdFdyYXBwZXJfID0gIWNvbmZpZy5jb250YWluZXI7XG4gICAgICAgICAgICB0aGlzLnNldFVwRGVmYXVsdFBsdWdpbnNfKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGRvY3VtZW50KCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRvY18pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLmFscmVhZHlEaXNwb3NlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jXztcbiAgICAgICAgfVxuICAgICAgICBkaXNwb3NlKCkge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyRWxlbSA9IHRoaXMuY29udGFpbmVyRWxlbV87XG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5lckVsZW0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLmFscmVhZHlEaXNwb3NlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudXNlc0RlZmF1bHRXcmFwcGVyXykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudEVsZW0gPSBjb250YWluZXJFbGVtLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudEVsZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbS5yZW1vdmVDaGlsZChjb250YWluZXJFbGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lckVsZW1fID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZG9jXyA9IG51bGw7XG4gICAgICAgICAgICBzdXBlci5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVnaXN0ZXJQbHVnaW4oYnVuZGxlKSB7XG4gICAgICAgICAgICBjb25zdCBwbHVnaW5zID0gJ3BsdWdpbicgaW4gYnVuZGxlXG4gICAgICAgICAgICAgICAgPyBbYnVuZGxlLnBsdWdpbl1cbiAgICAgICAgICAgICAgICA6ICdwbHVnaW5zJyBpbiBidW5kbGVcbiAgICAgICAgICAgICAgICAgICAgPyBidW5kbGUucGx1Z2luc1xuICAgICAgICAgICAgICAgICAgICA6IFtdO1xuICAgICAgICAgICAgcGx1Z2lucy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb29sXy5yZWdpc3RlcihwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtYmVkUGx1Z2luU3R5bGVfKHApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZW1iZWRQbHVnaW5TdHlsZV8ocGx1Z2luKSB7XG4gICAgICAgICAgICBpZiAocGx1Z2luLmNzcykge1xuICAgICAgICAgICAgICAgIGVtYmVkU3R5bGUodGhpcy5kb2N1bWVudCwgYHBsdWdpbi0ke3BsdWdpbi5pZH1gLCBwbHVnaW4uY3NzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRVcERlZmF1bHRQbHVnaW5zXygpIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgc3RyaW5nIGxpdGVyYWwgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBkZWZhdWx0IENTUyBieSBSb2xsdXAgYXQgdGhlIGNvbXBpbGF0aW9uIHRpbWVcbiAgICAgICAgICAgIGVtYmVkU3R5bGUodGhpcy5kb2N1bWVudCwgJ2RlZmF1bHQnLCAnLnRwLXRiaXZfYiwudHAtY29sdHh0dl9tcywudHAtY2tidl9pLC50cC1yb3R2X2IsLnRwLWZsZHZfYiwudHAtbWxsdl9pLC50cC1zZ2x2X2ksLnRwLWdybHZfZywudHAtdHh0dl9pLC50cC1wMmRwdl9wLC50cC1jb2xzd3Zfc3csLnRwLXAyZHZfYiwudHAtYnRudl9iLC50cC1sc3R2X3N7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjA7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0O21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOjB9LnRwLXAyZHZfYiwudHAtYnRudl9iLC50cC1sc3R2X3N7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtjb2xvcjp2YXIoLS1idG4tZmcpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6Ym9sZDtoZWlnaHQ6dmFyKC0tYmxkLXVzKTtsaW5lLWhlaWdodDp2YXIoLS1ibGQtdXMpO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0udHAtcDJkdl9iOmhvdmVyLC50cC1idG52X2I6aG92ZXIsLnRwLWxzdHZfczpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1oKX0udHAtcDJkdl9iOmZvY3VzLC50cC1idG52X2I6Zm9jdXMsLnRwLWxzdHZfczpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1mKX0udHAtcDJkdl9iOmFjdGl2ZSwudHAtYnRudl9iOmFjdGl2ZSwudHAtbHN0dl9zOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1hKX0udHAtcDJkdl9iOmRpc2FibGVkLC50cC1idG52X2I6ZGlzYWJsZWQsLnRwLWxzdHZfczpkaXNhYmxlZHtvcGFjaXR5Oi41fS50cC10eHR2X2ksLnRwLXAyZHB2X3AsLnRwLWNvbHN3dl9zd3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnKTtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLWluLWZnKTtmb250LWZhbWlseTppbmhlcml0O2hlaWdodDp2YXIoLS1ibGQtdXMpO2xpbmUtaGVpZ2h0OnZhcigtLWJsZC11cyk7bWluLXdpZHRoOjA7d2lkdGg6MTAwJX0udHAtdHh0dl9pOmhvdmVyLC50cC1wMmRwdl9wOmhvdmVyLC50cC1jb2xzd3Zfc3c6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1oKX0udHAtdHh0dl9pOmZvY3VzLC50cC1wMmRwdl9wOmZvY3VzLC50cC1jb2xzd3Zfc3c6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1mKX0udHAtdHh0dl9pOmFjdGl2ZSwudHAtcDJkcHZfcDphY3RpdmUsLnRwLWNvbHN3dl9zdzphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1hKX0udHAtdHh0dl9pOmRpc2FibGVkLC50cC1wMmRwdl9wOmRpc2FibGVkLC50cC1jb2xzd3Zfc3c6ZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtbWxsdl9pLC50cC1zZ2x2X2ksLnRwLWdybHZfZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vLWJnKTtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vLWZnKTtoZWlnaHQ6dmFyKC0tYmxkLXVzKTtzY3JvbGxiYXItY29sb3I6Y3VycmVudENvbG9yIHRyYW5zcGFyZW50O3Njcm9sbGJhci13aWR0aDp0aGluO3dpZHRoOjEwMCV9LnRwLW1sbHZfaTo6LXdlYmtpdC1zY3JvbGxiYXIsLnRwLXNnbHZfaTo6LXdlYmtpdC1zY3JvbGxiYXIsLnRwLWdybHZfZzo6LXdlYmtpdC1zY3JvbGxiYXJ7aGVpZ2h0OjhweDt3aWR0aDo4cHh9LnRwLW1sbHZfaTo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyLC50cC1zZ2x2X2k6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciwudHAtZ3Jsdl9nOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXJ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0udHAtbWxsdl9pOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiwudHAtc2dsdl9pOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiwudHAtZ3Jsdl9nOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3I7Ym9yZGVyOnRyYW5zcGFyZW50IHNvbGlkIDJweDtib3JkZXItcmFkaXVzOjRweH0udHAtcm90dnstLWZvbnQtZmFtaWx5OiB2YXIoLS10cC1mb250LWZhbWlseSwgUm9ib3RvIE1vbm8sIFNvdXJjZSBDb2RlIFBybywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZSk7LS1icy1icjogdmFyKC0tdHAtYmFzZS1ib3JkZXItcmFkaXVzLCA2cHgpOy0tY250LWgtcDogdmFyKC0tdHAtY29udGFpbmVyLWhvcml6b250YWwtcGFkZGluZywgNHB4KTstLWNudC12LXA6IHZhcigtLXRwLWNvbnRhaW5lci12ZXJ0aWNhbC1wYWRkaW5nLCA0cHgpOy0tZWxtLWJyOiB2YXIoLS10cC1lbGVtZW50LWJvcmRlci1yYWRpdXMsIDJweCk7LS1ibGQtczogdmFyKC0tdHAtYmxhZGUtc3BhY2luZywgNHB4KTstLWJsZC11czogdmFyKC0tdHAtYmxhZGUtdW5pdC1zaXplLCAyMHB4KTstLWJzLWJnOiB2YXIoLS10cC1iYXNlLWJhY2tncm91bmQtY29sb3IsICMyODI5MmUpOy0tYnMtc2g6IHZhcigtLXRwLWJhc2Utc2hhZG93LWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMikpOy0tYnRuLWJnOiB2YXIoLS10cC1idXR0b24tYmFja2dyb3VuZC1jb2xvciwgI2FkYWZiOCk7LS1idG4tYmctYTogdmFyKC0tdHAtYnV0dG9uLWJhY2tncm91bmQtY29sb3ItYWN0aXZlLCAjZDZkN2RiKTstLWJ0bi1iZy1mOiB2YXIoLS10cC1idXR0b24tYmFja2dyb3VuZC1jb2xvci1mb2N1cywgI2M4Y2FkMCk7LS1idG4tYmctaDogdmFyKC0tdHAtYnV0dG9uLWJhY2tncm91bmQtY29sb3ItaG92ZXIsICNiYmJjYzQpOy0tYnRuLWZnOiB2YXIoLS10cC1idXR0b24tZm9yZWdyb3VuZC1jb2xvciwgIzI4MjkyZSk7LS1jbnQtYmc6IHZhcigtLXRwLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMSkpOy0tY250LWJnLWE6IHZhcigtLXRwLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yLWFjdGl2ZSwgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjI1KSk7LS1jbnQtYmctZjogdmFyKC0tdHAtY29udGFpbmVyLWJhY2tncm91bmQtY29sb3ItZm9jdXMsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4yKSk7LS1jbnQtYmctaDogdmFyKC0tdHAtY29udGFpbmVyLWJhY2tncm91bmQtY29sb3ItaG92ZXIsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4xNSkpOy0tY250LWZnOiB2YXIoLS10cC1jb250YWluZXItZm9yZWdyb3VuZC1jb2xvciwgI2JiYmNjNCk7LS1pbi1iZzogdmFyKC0tdHAtaW5wdXQtYmFja2dyb3VuZC1jb2xvciwgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjEpKTstLWluLWJnLWE6IHZhcigtLXRwLWlucHV0LWJhY2tncm91bmQtY29sb3ItYWN0aXZlLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMjUpKTstLWluLWJnLWY6IHZhcigtLXRwLWlucHV0LWJhY2tncm91bmQtY29sb3ItZm9jdXMsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4yKSk7LS1pbi1iZy1oOiB2YXIoLS10cC1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yLWhvdmVyLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMTUpKTstLWluLWZnOiB2YXIoLS10cC1pbnB1dC1mb3JlZ3JvdW5kLWNvbG9yLCAjYmJiY2M0KTstLWxibC1mZzogdmFyKC0tdHAtbGFiZWwtZm9yZWdyb3VuZC1jb2xvciwgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjcpKTstLW1vLWJnOiB2YXIoLS10cC1tb25pdG9yLWJhY2tncm91bmQtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4yKSk7LS1tby1mZzogdmFyKC0tdHAtbW9uaXRvci1mb3JlZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuNykpOy0tZ3J2LWZnOiB2YXIoLS10cC1ncm9vdmUtZm9yZWdyb3VuZC1jb2xvciwgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjEpKX0udHAtcm90dl9jPi50cC1jbnR2LnRwLXYtbHN0LC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWNudHYudHAtdi1sc3QsLnRwLWZsZHZfYz4udHAtY250di50cC12LWxzdHttYXJnaW4tYm90dG9tOmNhbGMoLTEqdmFyKC0tY250LXYtcCkpfS50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1sc3QgLnRwLWZsZHZfYywudHAtdGFidl9jIC50cC1icmt2Pi50cC1mbGR2LnRwLXYtbHN0IC50cC1mbGR2X2MsLnRwLWZsZHZfYz4udHAtZmxkdi50cC12LWxzdCAudHAtZmxkdl9je2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0udHAtcm90dl9jPi50cC1mbGR2LnRwLXYtbHN0IC50cC1mbGR2X2IsLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtZmxkdi50cC12LWxzdCAudHAtZmxkdl9iLC50cC1mbGR2X2M+LnRwLWZsZHYudHAtdi1sc3QgLnRwLWZsZHZfYntib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LnRwLXJvdHZfYz4qOm5vdCgudHAtdi1mc3QpLC50cC10YWJ2X2MgLnRwLWJya3Y+Kjpub3QoLnRwLXYtZnN0KSwudHAtZmxkdl9jPio6bm90KC50cC12LWZzdCl7bWFyZ2luLXRvcDp2YXIoLS1ibGQtcyl9LnRwLXJvdHZfYz4udHAtc3Bydjpub3QoLnRwLXYtZnN0KSwudHAtdGFidl9jIC50cC1icmt2Pi50cC1zcHJ2Om5vdCgudHAtdi1mc3QpLC50cC1mbGR2X2M+LnRwLXNwcnY6bm90KC50cC12LWZzdCksLnRwLXJvdHZfYz4udHAtY250djpub3QoLnRwLXYtZnN0KSwudHAtdGFidl9jIC50cC1icmt2Pi50cC1jbnR2Om5vdCgudHAtdi1mc3QpLC50cC1mbGR2X2M+LnRwLWNudHY6bm90KC50cC12LWZzdCl7bWFyZ2luLXRvcDp2YXIoLS1jbnQtdi1wKX0udHAtcm90dl9jPi50cC1zcHJ2Kyo6bm90KC50cC12LWhpZGRlbiksLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtc3BydisqOm5vdCgudHAtdi1oaWRkZW4pLC50cC1mbGR2X2M+LnRwLXNwcnYrKjpub3QoLnRwLXYtaGlkZGVuKSwudHAtcm90dl9jPi50cC1jbnR2Kyo6bm90KC50cC12LWhpZGRlbiksLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtY250disqOm5vdCgudHAtdi1oaWRkZW4pLC50cC1mbGR2X2M+LnRwLWNudHYrKjpub3QoLnRwLXYtaGlkZGVuKXttYXJnaW4tdG9wOnZhcigtLWNudC12LXApfS50cC1yb3R2X2M+LnRwLXNwcnY6bm90KC50cC12LWhpZGRlbikrLnRwLXNwcnYsLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtc3Bydjpub3QoLnRwLXYtaGlkZGVuKSsudHAtc3BydiwudHAtZmxkdl9jPi50cC1zcHJ2Om5vdCgudHAtdi1oaWRkZW4pKy50cC1zcHJ2LC50cC1yb3R2X2M+LnRwLWNudHY6bm90KC50cC12LWhpZGRlbikrLnRwLWNudHYsLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtY250djpub3QoLnRwLXYtaGlkZGVuKSsudHAtY250diwudHAtZmxkdl9jPi50cC1jbnR2Om5vdCgudHAtdi1oaWRkZW4pKy50cC1jbnR2e21hcmdpbi10b3A6MH0udHAtdGFidl9jIC50cC1icmt2Pi50cC1jbnR2LC50cC1mbGR2X2M+LnRwLWNudHZ7bWFyZ2luLWxlZnQ6NHB4fS50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWZsZHY+LnRwLWZsZHZfYiwudHAtZmxkdl9jPi50cC1mbGR2Pi50cC1mbGR2X2J7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1lbG0tYnIpO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtdGFidl9jIC50cC1icmt2Pi50cC1mbGR2LnRwLWZsZHYtZXhwYW5kZWQ+LnRwLWZsZHZfYiwudHAtZmxkdl9jPi50cC1mbGR2LnRwLWZsZHYtZXhwYW5kZWQ+LnRwLWZsZHZfYntib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LnRwLXRhYnZfYyAudHAtYnJrdiAudHAtZmxkdj4udHAtZmxkdl9jLC50cC1mbGR2X2MgLnRwLWZsZHY+LnRwLWZsZHZfY3tib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWVsbS1icil9LnRwLXRhYnZfYyAudHAtYnJrdj4udHAtdGFidj4udHAtdGFidl9pLC50cC1mbGR2X2M+LnRwLXRhYnY+LnRwLXRhYnZfaXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWVsbS1icil9LnRwLXRhYnZfYyAudHAtYnJrdiAudHAtdGFidj4udHAtdGFidl9jLC50cC1mbGR2X2MgLnRwLXRhYnY+LnRwLXRhYnZfY3tib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWVsbS1icil9LnRwLXJvdHZfYiwudHAtZmxkdl9ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnKTtjb2xvcjp2YXIoLS1jbnQtZmcpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSArIDRweCk7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1sZWZ0OnZhcigtLWNudC1oLXApO3BhZGRpbmctcmlnaHQ6Y2FsYyg0cHggKyB2YXIoLS1ibGQtdXMpICsgdmFyKC0tY250LWgtcCkpO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVmdDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxMDAlO3RyYW5zaXRpb246Ym9yZGVyLXJhZGl1cyAuMnMgZWFzZS1pbi1vdXQgLjJzfS50cC1yb3R2X2I6aG92ZXIsLnRwLWZsZHZfYjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1oKX0udHAtcm90dl9iOmZvY3VzLC50cC1mbGR2X2I6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmctZil9LnRwLXJvdHZfYjphY3RpdmUsLnRwLWZsZHZfYjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmctYSl9LnRwLXJvdHZfYjpkaXNhYmxlZCwudHAtZmxkdl9iOmRpc2FibGVke29wYWNpdHk6LjV9LnRwLXJvdHZfbSwudHAtZmxkdl9te2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHZhcigtLWNudC1mZyksIHZhcigtLWNudC1mZykgMnB4LCB0cmFuc3BhcmVudCAycHgsIHRyYW5zcGFyZW50IDRweCwgdmFyKC0tY250LWZnKSA0cHgpO2JvcmRlci1yYWRpdXM6MnB4O2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDo2cHg7cmlnaHQ6Y2FsYyh2YXIoLS1jbnQtaC1wKSArICh2YXIoLS1ibGQtdXMpICsgNHB4IC0gNnB4KS8yIC0gMnB4KTttYXJnaW46YXV0bztvcGFjaXR5Oi41O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDt3aWR0aDo2cHh9LnRwLXJvdHYudHAtcm90di1leHBhbmRlZCAudHAtcm90dl9tLC50cC1mbGR2LnRwLWZsZHYtZXhwYW5kZWQ+LnRwLWZsZHZfYj4udHAtZmxkdl9te3RyYW5zZm9ybTpub25lfS50cC1yb3R2X2MsLnRwLWZsZHZfY3tib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjA7b3BhY2l0eTowO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjpoZWlnaHQgLjJzIGVhc2UtaW4tb3V0LG9wYWNpdHkgLjJzIGxpbmVhcixwYWRkaW5nIC4ycyBlYXNlLWluLW91dH0udHAtcm90di50cC1yb3R2LWNwbDpub3QoLnRwLXJvdHYtZXhwYW5kZWQpIC50cC1yb3R2X2MsLnRwLWZsZHYudHAtZmxkdi1jcGw6bm90KC50cC1mbGR2LWV4cGFuZGVkKT4udHAtZmxkdl9je2Rpc3BsYXk6bm9uZX0udHAtcm90di50cC1yb3R2LWV4cGFuZGVkIC50cC1yb3R2X2MsLnRwLWZsZHYudHAtZmxkdi1leHBhbmRlZD4udHAtZmxkdl9je29wYWNpdHk6MTtwYWRkaW5nLWJvdHRvbTp2YXIoLS1jbnQtdi1wKTtwYWRkaW5nLXRvcDp2YXIoLS1jbnQtdi1wKTt0cmFuc2Zvcm06bm9uZTtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zaXRpb246aGVpZ2h0IC4ycyBlYXNlLWluLW91dCxvcGFjaXR5IC4ycyBsaW5lYXIgLjJzLHBhZGRpbmcgLjJzIGVhc2UtaW4tb3V0fS50cC1sc3R2LC50cC1jb2x0eHR2X217cG9zaXRpb246cmVsYXRpdmV9LnRwLWxzdHZfc3twYWRkaW5nOjAgMjBweCAwIDRweDt3aWR0aDoxMDAlfS50cC1sc3R2X20sLnRwLWNvbHR4dHZfbW17Ym90dG9tOjA7bWFyZ2luOmF1dG87cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoycHg7dG9wOjB9LnRwLWxzdHZfbSBzdmcsLnRwLWNvbHR4dHZfbW0gc3Zne2JvdHRvbTowO2hlaWdodDoxNnB4O21hcmdpbjphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MTZweH0udHAtbHN0dl9tIHN2ZyBwYXRoLC50cC1jb2x0eHR2X21tIHN2ZyBwYXRoe2ZpbGw6Y3VycmVudENvbG9yfS50cC1wbmR0eHR2LC50cC1jb2x0eHR2X3d7ZGlzcGxheTpmbGV4fS50cC1wbmR0eHR2X2EsLnRwLWNvbHR4dHZfY3t3aWR0aDoxMDAlfS50cC1wbmR0eHR2X2ErLnRwLXBuZHR4dHZfYSwudHAtY29sdHh0dl9jKy50cC1wbmR0eHR2X2EsLnRwLXBuZHR4dHZfYSsudHAtY29sdHh0dl9jLC50cC1jb2x0eHR2X2MrLnRwLWNvbHR4dHZfY3ttYXJnaW4tbGVmdDoycHh9LnRwLWJ0bnZfYnt3aWR0aDoxMDAlfS50cC1idG52X3R7dGV4dC1hbGlnbjpjZW50ZXJ9LnRwLWNrYnZfbHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1ja2J2X2l7bGVmdDowO29wYWNpdHk6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH0udHAtY2tidl93e2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmJsb2NrO2hlaWdodDp2YXIoLS1ibGQtdXMpO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOnZhcigtLWJsZC11cyl9LnRwLWNrYnZfdyBzdmd7Ym90dG9tOjA7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTZweDtsZWZ0OjA7bWFyZ2luOmF1dG87b3BhY2l0eTowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MTZweH0udHAtY2tidl93IHN2ZyBwYXRoe2ZpbGw6bm9uZTtzdHJva2U6dmFyKC0taW4tZmcpO3N0cm9rZS13aWR0aDoyfS50cC1ja2J2X2k6aG92ZXIrLnRwLWNrYnZfd3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWgpfS50cC1ja2J2X2k6Zm9jdXMrLnRwLWNrYnZfd3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWYpfS50cC1ja2J2X2k6YWN0aXZlKy50cC1ja2J2X3d7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1hKX0udHAtY2tidl9pOmNoZWNrZWQrLnRwLWNrYnZfdyBzdmd7b3BhY2l0eToxfS50cC1ja2J2LnRwLXYtZGlzYWJsZWQgLnRwLWNrYnZfd3tvcGFjaXR5Oi41fS50cC1jb2x2e3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1jb2x2X2h7ZGlzcGxheTpmbGV4fS50cC1jb2x2X3N7ZmxleC1ncm93OjA7ZmxleC1zaHJpbms6MDt3aWR0aDp2YXIoLS1ibGQtdXMpfS50cC1jb2x2X3R7ZmxleDoxO21hcmdpbi1sZWZ0OjRweH0udHAtY29sdl9we2hlaWdodDowO21hcmdpbi10b3A6MDtvcGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zaXRpb246aGVpZ2h0IC4ycyBlYXNlLWluLW91dCxvcGFjaXR5IC4ycyBsaW5lYXIsbWFyZ2luIC4ycyBlYXNlLWluLW91dH0udHAtY29sdi50cC1jb2x2LWNwbCAudHAtY29sdl9we292ZXJmbG93OnZpc2libGV9LnRwLWNvbHYudHAtY29sdi1leHBhbmRlZCAudHAtY29sdl9we21hcmdpbi10b3A6dmFyKC0tYmxkLXMpO29wYWNpdHk6MX0udHAtY29sdiAudHAtcG9wdntsZWZ0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3RvcDp2YXIoLS1ibGQtdXMpfS50cC1jb2xwdl9oLC50cC1jb2xwdl9hcHttYXJnaW4tbGVmdDo2cHg7bWFyZ2luLXJpZ2h0OjZweH0udHAtY29scHZfaHttYXJnaW4tdG9wOnZhcigtLWJsZC1zKX0udHAtY29scHZfcmdie2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOnZhcigtLWJsZC1zKTt3aWR0aDoxMDAlfS50cC1jb2xwdl9he2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOnZhcigtLWNudC12LXApO3BhZGRpbmctdG9wOmNhbGModmFyKC0tY250LXYtcCkgKyAycHgpO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1jb2xwdl9hOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWdydi1mZyk7Y29udGVudDpcIlwiO2hlaWdodDoycHg7bGVmdDpjYWxjKC0xKnZhcigtLWNudC1oLXApKTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDpjYWxjKC0xKnZhcigtLWNudC1oLXApKTt0b3A6MH0udHAtY29scHZfYXB7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4OjN9LnRwLWNvbHB2X2F0e2ZsZXg6MTttYXJnaW4tbGVmdDo0cHh9LnRwLXN2cHZ7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9LnRwLXN2cHZfY3tjdXJzb3I6Y3Jvc3NoYWlyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSo0KTt3aWR0aDoxMDAlfS50cC1zdnB2X217Ym9yZGVyLXJhZGl1czoxMDAlO2JvcmRlcjpyZ2JhKDI1NSwyNTUsMjU1LC43NSkgc29saWQgMnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmaWx0ZXI6ZHJvcC1zaGFkb3coMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuMykpO2hlaWdodDoxMnB4O21hcmdpbi1sZWZ0Oi02cHg7bWFyZ2luLXRvcDotNnB4O3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTJweH0udHAtc3Zwdjpmb2N1cyAudHAtc3Zwdl9te2JvcmRlci1jb2xvcjojZmZmfS50cC1ocGx2e2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1ibGQtdXMpO291dGxpbmU6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtaHBsdl9je2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRUFBQUFBQkNBWUFBQUJ1YmFnWEFBQUFRMGxFUVZRb1UyUDh6OER3bjBHQ2dRRURpMk9LL1JCZ1lIakJnSXBmb3ZGaDhqOFlCSWd6RkdReHVxRWdQaGFET1Q1Z09oUGtkQ3hPWmVCZytJREZaWmlHQWdDYVNTTVl0Y1JITGdBQUFBQkpSVTVFcmtKZ2dnPT0pO2JhY2tncm91bmQtcG9zaXRpb246bGVmdCB0b3A7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7Ym9yZGVyLXJhZGl1czoycHg7ZGlzcGxheTpibG9jaztoZWlnaHQ6NHB4O2xlZnQ6MDttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDoxMDAlfS50cC1ocGx2X217Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JvcmRlcjpyZ2JhKDI1NSwyNTUsMjU1LC43NSkgc29saWQgMnB4O2JveC1zaGFkb3c6MCAwIDJweCByZ2JhKDAsMCwwLC4xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEycHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTZweDttYXJnaW4tdG9wOi02cHg7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEycHh9LnRwLWhwbHY6Zm9jdXMgLnRwLWhwbHZfbXtib3JkZXItY29sb3I6I2ZmZn0udHAtYXBsdntjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6dmFyKC0tYmxkLXVzKTtvdXRsaW5lOm5vbmU7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0udHAtYXBsdl9ie2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byB0b3AgcmlnaHQsICNkZGQgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDc1JSwgI2RkZCA3NSUpLGxpbmVhci1ncmFkaWVudCh0byB0b3AgcmlnaHQsICNkZGQgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDc1JSwgI2RkZCA3NSUpO2JhY2tncm91bmQtc2l6ZTo0cHggNHB4O2JhY2tncm91bmQtcG9zaXRpb246MCAwLDJweCAycHg7Ym9yZGVyLXJhZGl1czoycHg7ZGlzcGxheTpibG9jaztoZWlnaHQ6NHB4O2xlZnQ6MDttYXJnaW4tdG9wOi0ycHg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7d2lkdGg6MTAwJX0udHAtYXBsdl9je2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS50cC1hcGx2X217YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSksbGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSk7YmFja2dyb3VuZC1zaXplOjEycHggMTJweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMCw2cHggNnB4O2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtib3gtc2hhZG93OjAgMCAycHggcmdiYSgwLDAsMCwuMSk7aGVpZ2h0OjEycHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTZweDttYXJnaW4tdG9wOi02cHg7b3ZlcmZsb3c6aGlkZGVuO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDoxMnB4fS50cC1hcGx2X3B7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JvcmRlcjpyZ2JhKDI1NSwyNTUsMjU1LC43NSkgc29saWQgMnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtYXBsdjpmb2N1cyAudHAtYXBsdl9we2JvcmRlci1jb2xvcjojZmZmfS50cC1jb2xzd3Z7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSksbGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSk7YmFja2dyb3VuZC1zaXplOjEwcHggMTBweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMCw1cHggNXB4O2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtvdmVyZmxvdzpoaWRkZW59LnRwLWNvbHN3di50cC12LWRpc2FibGVke29wYWNpdHk6LjV9LnRwLWNvbHN3dl9zd3tib3JkZXItcmFkaXVzOjB9LnRwLWNvbHN3dl9iey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci13aWR0aDowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWJsZC11cyk7bGVmdDowO21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6dmFyKC0tYmxkLXVzKX0udHAtY29sc3d2X2I6Zm9jdXM6OmFmdGVye2JvcmRlcjpyZ2JhKDI1NSwyNTUsMjU1LC43NSkgc29saWQgMnB4O2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtib3R0b206MDtjb250ZW50OlwiXCI7ZGlzcGxheTpibG9jaztsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtY29sdHh0dntkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJX0udHAtY29sdHh0dl9te21hcmdpbi1yaWdodDo0cHh9LnRwLWNvbHR4dHZfbXN7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2NvbG9yOnZhcigtLWxibC1mZyk7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWJsZC11cyk7bGluZS1oZWlnaHQ6dmFyKC0tYmxkLXVzKTtwYWRkaW5nOjAgMThweCAwIDRweH0udHAtY29sdHh0dl9tczpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWgpfS50cC1jb2x0eHR2X21zOmZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctZil9LnRwLWNvbHR4dHZfbXM6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctYSl9LnRwLWNvbHR4dHZfbW17Y29sb3I6dmFyKC0tbGJsLWZnKX0udHAtY29sdHh0dl93e2ZsZXg6MX0udHAtZGZ3dntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6OHB4O3JpZ2h0OjhweDt3aWR0aDoyNTZweH0udHAtZmxkdi50cC1mbGR2LW5vdCAudHAtZmxkdl9ie2Rpc3BsYXk6bm9uZX0udHAtZmxkdl90e3BhZGRpbmctbGVmdDo0cHh9LnRwLWZsZHZfY3tib3JkZXItbGVmdDp2YXIoLS1jbnQtYmcpIHNvbGlkIDRweH0udHAtZmxkdl9iOmhvdmVyKy50cC1mbGR2X2N7Ym9yZGVyLWxlZnQtY29sb3I6dmFyKC0tY250LWJnLWgpfS50cC1mbGR2X2I6Zm9jdXMrLnRwLWZsZHZfY3tib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1jbnQtYmctZil9LnRwLWZsZHZfYjphY3RpdmUrLnRwLWZsZHZfY3tib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1jbnQtYmctYSl9LnRwLWdybHZ7cG9zaXRpb246cmVsYXRpdmV9LnRwLWdybHZfZ3tkaXNwbGF5OmJsb2NrO2hlaWdodDpjYWxjKHZhcigtLWJsZC11cykqMyl9LnRwLWdybHZfZyBwb2x5bGluZXtmaWxsOm5vbmU7c3Ryb2tlOnZhcigtLW1vLWZnKTtzdHJva2UtbGluZWpvaW46cm91bmR9LnRwLWdybHZfdHttYXJnaW4tdG9wOi00cHg7dHJhbnNpdGlvbjpsZWZ0IC4wNXMsdG9wIC4wNXM7dmlzaWJpbGl0eTpoaWRkZW59LnRwLWdybHZfdC50cC1ncmx2X3QtYXt2aXNpYmlsaXR5OnZpc2libGV9LnRwLWdybHZfdC50cC1ncmx2X3QtaW57dHJhbnNpdGlvbjpub25lfS50cC1ncmx2LnRwLXYtZGlzYWJsZWQgLnRwLWdybHZfZ3tvcGFjaXR5Oi41fS50cC1ncmx2IC50cC10dHZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tby1mZyl9LnRwLWdybHYgLnRwLXR0djo6YmVmb3Jle2JvcmRlci10b3AtY29sb3I6dmFyKC0tbW8tZmcpfS50cC1sYmx2e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7bGluZS1oZWlnaHQ6MS4zO3BhZGRpbmctbGVmdDp2YXIoLS1jbnQtaC1wKTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNudC1oLXApfS50cC1sYmx2LnRwLWxibHYtbm9se2Rpc3BsYXk6YmxvY2t9LnRwLWxibHZfbHtjb2xvcjp2YXIoLS1sYmwtZmcpO2ZsZXg6MTstd2Via2l0LWh5cGhlbnM6YXV0bzstbXMtaHlwaGVuczphdXRvO2h5cGhlbnM6YXV0bztvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1sZWZ0OjRweDtwYWRkaW5nLXJpZ2h0OjE2cHh9LnRwLWxibHYudHAtdi1kaXNhYmxlZCAudHAtbGJsdl9se29wYWNpdHk6LjV9LnRwLWxibHYudHAtbGJsdi1ub2wgLnRwLWxibHZfbHtkaXNwbGF5Om5vbmV9LnRwLWxibHZfdnthbGlnbi1zZWxmOmZsZXgtc3RhcnQ7ZmxleC1ncm93OjA7ZmxleC1zaHJpbms6MDt3aWR0aDoxNjBweH0udHAtbGJsdi50cC1sYmx2LW5vbCAudHAtbGJsdl92e3dpZHRoOjEwMCV9LnRwLWxzdHZfc3twYWRkaW5nOjAgMjBweCAwIDRweDt3aWR0aDoxMDAlfS50cC1sc3R2X217Y29sb3I6dmFyKC0tYnRuLWZnKX0udHAtc2dsdl9pe3BhZGRpbmc6MCA0cHh9LnRwLXNnbHYudHAtdi1kaXNhYmxlZCAudHAtc2dsdl9pe29wYWNpdHk6LjV9LnRwLW1sbHZfaXtkaXNwbGF5OmJsb2NrO2hlaWdodDpjYWxjKHZhcigtLWJsZC11cykqMyk7bGluZS1oZWlnaHQ6dmFyKC0tYmxkLXVzKTtwYWRkaW5nOjAgNHB4O3Jlc2l6ZTpub25lO3doaXRlLXNwYWNlOnByZX0udHAtbWxsdi50cC12LWRpc2FibGVkIC50cC1tbGx2X2l7b3BhY2l0eTouNX0udHAtcDJkdntwb3NpdGlvbjpyZWxhdGl2ZX0udHAtcDJkdl9oe2Rpc3BsYXk6ZmxleH0udHAtcDJkdl9ie2hlaWdodDp2YXIoLS1ibGQtdXMpO21hcmdpbi1yaWdodDo0cHg7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6dmFyKC0tYmxkLXVzKX0udHAtcDJkdl9iIHN2Z3tkaXNwbGF5OmJsb2NrO2hlaWdodDoxNnB4O2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi04cHg7bWFyZ2luLXRvcDotOHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7d2lkdGg6MTZweH0udHAtcDJkdl9iIHN2ZyBwYXRoe3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlLXdpZHRoOjJ9LnRwLXAyZHZfYiBzdmcgY2lyY2xle2ZpbGw6Y3VycmVudENvbG9yfS50cC1wMmR2X3R7ZmxleDoxfS50cC1wMmR2X3B7aGVpZ2h0OjA7bWFyZ2luLXRvcDowO29wYWNpdHk6MDtvdmVyZmxvdzpoaWRkZW47dHJhbnNpdGlvbjpoZWlnaHQgLjJzIGVhc2UtaW4tb3V0LG9wYWNpdHkgLjJzIGxpbmVhcixtYXJnaW4gLjJzIGVhc2UtaW4tb3V0fS50cC1wMmR2LnRwLXAyZHYtZXhwYW5kZWQgLnRwLXAyZHZfcHttYXJnaW4tdG9wOnZhcigtLWJsZC1zKTtvcGFjaXR5OjF9LnRwLXAyZHYgLnRwLXBvcHZ7bGVmdDpjYWxjKC0xKnZhcigtLWNudC1oLXApKTtyaWdodDpjYWxjKC0xKnZhcigtLWNudC1oLXApKTt0b3A6dmFyKC0tYmxkLXVzKX0udHAtcDJkcHZ7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tYmxkLXVzKSArIDRweCl9LnRwLXAyZHB2X3B7Y3Vyc29yOmNyb3NzaGFpcjtoZWlnaHQ6MDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1ib3R0b206MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtcDJkcHZfZ3tkaXNwbGF5OmJsb2NrO2hlaWdodDoxMDAlO2xlZnQ6MDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEwMCV9LnRwLXAyZHB2X2F4e29wYWNpdHk6LjE7c3Ryb2tlOnZhcigtLWluLWZnKTtzdHJva2UtZGFzaGFycmF5OjF9LnRwLXAyZHB2X2x7b3BhY2l0eTouNTtzdHJva2U6dmFyKC0taW4tZmcpO3N0cm9rZS1kYXNoYXJyYXk6MX0udHAtcDJkcHZfbXtib3JkZXI6dmFyKC0taW4tZmcpIHNvbGlkIDFweDtib3JkZXItcmFkaXVzOjUwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjRweDttYXJnaW4tbGVmdDotMnB4O21hcmdpbi10b3A6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo0cHh9LnRwLXAyZHB2X3A6Zm9jdXMgLnRwLXAyZHB2X217YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1mZyk7Ym9yZGVyLXdpZHRoOjB9LnRwLXBvcHZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1iZyk7Ym9yZGVyLXJhZGl1czo2cHg7Ym94LXNoYWRvdzowIDJweCA0cHggdmFyKC0tYnMtc2gpO2Rpc3BsYXk6bm9uZTttYXgtd2lkdGg6MTY4cHg7cGFkZGluZzp2YXIoLS1jbnQtdi1wKSB2YXIoLS1jbnQtaC1wKTtwb3NpdGlvbjphYnNvbHV0ZTt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwMDB9LnRwLXBvcHYudHAtcG9wdi12e2Rpc3BsYXk6YmxvY2s7dmlzaWJpbGl0eTp2aXNpYmxlfS50cC1zcHJ2X3J7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1ncnYtZmcpO2JvcmRlci13aWR0aDowO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjJweDttYXJnaW46MDt3aWR0aDoxMDAlfS50cC1zbGR2LnRwLXYtZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtc2xkdl90e2JveC1zaXppbmc6Ym9yZGVyLWJveDtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6dmFyKC0tYmxkLXVzKTttYXJnaW46MCA2cHg7b3V0bGluZTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1zbGR2X3Q6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnKTtib3JkZXItcmFkaXVzOjFweDtib3R0b206MDtjb250ZW50OlwiXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MnB4O2xlZnQ6MDttYXJnaW46YXV0bztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS50cC1zbGR2X2t7aGVpZ2h0OjEwMCU7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS50cC1zbGR2X2s6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWZnKTtib3JkZXItcmFkaXVzOjFweDtib3R0b206MDtjb250ZW50OlwiXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MnB4O2xlZnQ6MDttYXJnaW4tYm90dG9tOmF1dG87bWFyZ2luLXRvcDphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9LnRwLXNsZHZfazo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtib3R0b206MDtjb250ZW50OlwiXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTJweDttYXJnaW4tYm90dG9tOmF1dG87bWFyZ2luLXRvcDphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi02cHg7dG9wOjA7d2lkdGg6MTJweH0udHAtc2xkdl90OmhvdmVyIC50cC1zbGR2X2s6OmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnRuLWJnLWgpfS50cC1zbGR2X3Q6Zm9jdXMgLnRwLXNsZHZfazo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmctZil9LnRwLXNsZHZfdDphY3RpdmUgLnRwLXNsZHZfazo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmctYSl9LnRwLXNsZHR4dHZ7ZGlzcGxheTpmbGV4fS50cC1zbGR0eHR2X3N7ZmxleDoyfS50cC1zbGR0eHR2X3R7ZmxleDoxO21hcmdpbi1sZWZ0OjRweH0udHAtdGFidi50cC12LWRpc2FibGVke29wYWNpdHk6LjV9LnRwLXRhYnZfaXthbGlnbi1pdGVtczpmbGV4LWVuZDtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVufS50cC10YWJ2LnRwLXRhYnYtbm9wIC50cC10YWJ2X2l7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSArIDRweCk7cG9zaXRpb246cmVsYXRpdmV9LnRwLXRhYnYudHAtdGFidi1ub3AgLnRwLXRhYnZfaTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnKTtib3R0b206MDtjb250ZW50OlwiXCI7aGVpZ2h0OjJweDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MH0udHAtdGFidl9je2JvcmRlci1sZWZ0OnZhcigtLWNudC1iZykgc29saWQgNHB4O3BhZGRpbmctYm90dG9tOnZhcigtLWNudC12LXApO3BhZGRpbmctdG9wOnZhcigtLWNudC12LXApfS50cC10Yml2e2ZsZXg6MTttaW4td2lkdGg6MDtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtdGJpdisudHAtdGJpdnttYXJnaW4tbGVmdDoycHh9LnRwLXRiaXYrLnRwLXRiaXY6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZyk7Ym90dG9tOjA7Y29udGVudDpcIlwiO2hlaWdodDoycHg7bGVmdDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjJweH0udHAtdGJpdl9ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnKTtkaXNwbGF5OmJsb2NrO3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLWNudC1oLXApICsgNHB4KTtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tY250LWgtcCkgKyA0cHgpO3dpZHRoOjEwMCV9LnRwLXRiaXZfYjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1oKX0udHAtdGJpdl9iOmZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnLWYpfS50cC10Yml2X2I6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnLWEpfS50cC10Yml2X2I6ZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtdGJpdl90e2NvbG9yOnZhcigtLWNudC1mZyk7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSArIDRweCk7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtvcGFjaXR5Oi41O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS50cC10Yml2LnRwLXRiaXYtc2VsIC50cC10Yml2X3R7b3BhY2l0eToxfS50cC10eHR2e3Bvc2l0aW9uOnJlbGF0aXZlfS50cC10eHR2X2l7cGFkZGluZzowIDRweH0udHAtdHh0di50cC10eHR2LWZzdCAudHAtdHh0dl9pe2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0udHAtdHh0di50cC10eHR2LW1pZCAudHAtdHh0dl9pe2JvcmRlci1yYWRpdXM6MH0udHAtdHh0di50cC10eHR2LWxzdCAudHAtdHh0dl9pe2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjB9LnRwLXR4dHYudHAtdHh0di1udW0gLnRwLXR4dHZfaXt0ZXh0LWFsaWduOnJpZ2h0fS50cC10eHR2LnRwLXR4dHYtZHJnIC50cC10eHR2X2l7b3BhY2l0eTouM30udHAtdHh0dl9re2N1cnNvcjpwb2ludGVyO2hlaWdodDoxMDAlO2xlZnQ6LTNweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMnB4fS50cC10eHR2X2s6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWZnKTtib3JkZXItcmFkaXVzOjFweDtib3R0b206MDtjb250ZW50OlwiXCI7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSAtIDRweCk7bGVmdDo1MCU7bWFyZ2luLWJvdHRvbTphdXRvO21hcmdpbi1sZWZ0Oi0xcHg7bWFyZ2luLXRvcDphdXRvO29wYWNpdHk6LjE7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7dHJhbnNpdGlvbjpib3JkZXItcmFkaXVzIC4xcyxoZWlnaHQgLjFzLHRyYW5zZm9ybSAuMXMsd2lkdGggLjFzO3dpZHRoOjJweH0udHAtdHh0dl9rOmhvdmVyOjpiZWZvcmUsLnRwLXR4dHYudHAtdHh0di1kcmcgLnRwLXR4dHZfazo6YmVmb3Jle29wYWNpdHk6MX0udHAtdHh0di50cC10eHR2LWRyZyAudHAtdHh0dl9rOjpiZWZvcmV7Ym9yZGVyLXJhZGl1czo1MCU7aGVpZ2h0OjRweDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMXB4KTt3aWR0aDo0cHh9LnRwLXR4dHZfZ3tib3R0b206MDtkaXNwbGF5OmJsb2NrO2hlaWdodDo4cHg7bGVmdDo1MCU7bWFyZ2luOmF1dG87b3ZlcmZsb3c6dmlzaWJsZTtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3Zpc2liaWxpdHk6aGlkZGVuO3dpZHRoOjEwMCV9LnRwLXR4dHYudHAtdHh0di1kcmcgLnRwLXR4dHZfZ3t2aXNpYmlsaXR5OnZpc2libGV9LnRwLXR4dHZfZ2J7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS1pbi1mZyk7c3Ryb2tlLWRhc2hhcnJheToxfS50cC10eHR2X2doe2ZpbGw6bm9uZTtzdHJva2U6dmFyKC0taW4tZmcpfS50cC10eHR2IC50cC10dHZ7bWFyZ2luLWxlZnQ6NnB4O3Zpc2liaWxpdHk6aGlkZGVufS50cC10eHR2LnRwLXR4dHYtZHJnIC50cC10dHZ7dmlzaWJpbGl0eTp2aXNpYmxlfS50cC10dHZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1mZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2NvbG9yOnZhcigtLWJzLWJnKTtwYWRkaW5nOjJweCA0cHg7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC0xMDAlKX0udHAtdHR2OjpiZWZvcmV7Ym9yZGVyLWNvbG9yOnZhcigtLWluLWZnKSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29udGVudDpcIlwiO2ZvbnQtc2l6ZTouOWVtO2hlaWdodDo0cHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTAwJTt3aWR0aDo0cHh9LnRwLXJvdHZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1icy1icik7Ym94LXNoYWRvdzowIDJweCA0cHggdmFyKC0tYnMtc2gpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmxlZnR9LnRwLXJvdHZfYntib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpO3BhZGRpbmctbGVmdDpjYWxjKDRweCArIHZhcigtLWJsZC11cykgKyB2YXIoLS1jbnQtaC1wKSk7dGV4dC1hbGlnbjpjZW50ZXJ9LnRwLXJvdHYudHAtcm90di1leHBhbmRlZCAudHAtcm90dl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2J7ZGlzcGxheTpub25lfS50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1sc3Q+LnRwLWZsZHZfYywudHAtcm90dl9jPi50cC10YWJ2LnRwLXYtbHN0Pi50cC10YWJ2X2N7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpfS50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1sc3Q6bm90KC50cC1mbGR2LWV4cGFuZGVkKT4udHAtZmxkdl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tYnMtYnIpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWJzLWJyKX0udHAtcm90dl9jIC50cC1mbGR2LnRwLXYtdmxzdDpub3QoLnRwLWZsZHYtZXhwYW5kZWQpPi50cC1mbGR2X2J7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1mc3R7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNudC12LXApKX0udHAtcm90di50cC1yb3R2LW5vdCAudHAtcm90dl9jPi50cC1mbGR2LnRwLXYtZnN0Pi50cC1mbGR2X2J7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2M+LnRwLXRhYnYudHAtdi1mc3R7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNudC12LXApKX0udHAtcm90di50cC1yb3R2LW5vdCAudHAtcm90dl9jPi50cC10YWJ2LnRwLXYtZnN0Pi50cC10YWJ2X2l7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpfS50cC1yb3R2LnRwLXYtZGlzYWJsZWQsLnRwLXJvdHYgLnRwLXYtZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZX0udHAtcm90di50cC12LWhpZGRlbiwudHAtcm90diAudHAtdi1oaWRkZW57ZGlzcGxheTpub25lfScpO1xuICAgICAgICAgICAgdGhpcy5wb29sXy5nZXRBbGwoKS5mb3JFYWNoKChwbHVnaW4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtYmVkUGx1Z2luU3R5bGVfKHBsdWdpbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJQbHVnaW4oe1xuICAgICAgICAgICAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgU2xpZGVyQmxhZGVQbHVnaW4sXG4gICAgICAgICAgICAgICAgICAgIExpc3RCbGFkZVBsdWdpbixcbiAgICAgICAgICAgICAgICAgICAgVGFiQmxhZGVQbHVnaW4sXG4gICAgICAgICAgICAgICAgICAgIFRleHRCbGFkZVBsdWdpbixcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBWRVJTSU9OID0gbmV3IFNlbXZlcignMy4xLjAnKTtcblxuICAgIGV4cG9ydHMuQmxhZGVBcGkgPSBCbGFkZUFwaTtcbiAgICBleHBvcnRzLkJ1dHRvbkFwaSA9IEJ1dHRvbkFwaTtcbiAgICBleHBvcnRzLkZvbGRlckFwaSA9IEZvbGRlckFwaTtcbiAgICBleHBvcnRzLklucHV0QmluZGluZ0FwaSA9IElucHV0QmluZGluZ0FwaTtcbiAgICBleHBvcnRzLkxpc3RBcGkgPSBMaXN0QXBpO1xuICAgIGV4cG9ydHMuTW9uaXRvckJpbmRpbmdBcGkgPSBNb25pdG9yQmluZGluZ0FwaTtcbiAgICBleHBvcnRzLlBhbmUgPSBQYW5lO1xuICAgIGV4cG9ydHMuU2VwYXJhdG9yQXBpID0gU2VwYXJhdG9yQXBpO1xuICAgIGV4cG9ydHMuU2xpZGVyQXBpID0gU2xpZGVyQXBpO1xuICAgIGV4cG9ydHMuVGFiQXBpID0gVGFiQXBpO1xuICAgIGV4cG9ydHMuVGFiUGFnZUFwaSA9IFRhYlBhZ2VBcGk7XG4gICAgZXhwb3J0cy5UZXh0QXBpID0gVGV4dEFwaTtcbiAgICBleHBvcnRzLlRwQ2hhbmdlRXZlbnQgPSBUcENoYW5nZUV2ZW50O1xuICAgIGV4cG9ydHMuVkVSU0lPTiA9IFZFUlNJT047XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG59KSk7XG4iLCJpbXBvcnQgY2FudmFzU2tldGNoIGZyb20gJ2NhbnZhcy1za2V0Y2gnO1xuaW1wb3J0IHJhbmRvbSBmcm9tICdjYW52YXMtc2tldGNoLXV0aWwvcmFuZG9tJ1xuaW1wb3J0IGNvbG9yIGZyb20gJ2NhbnZhcy1za2V0Y2gtdXRpbC9jb2xvcidcbmNvbnN0IFR3ZWFrUGFuZSA9IHJlcXVpcmUoXCJ0d2Vha3BhbmVcIilcblxuY29uc3Qgc2V0dGluZ3MgPSB7XG4gIGRpbWVuc2lvbnM6IFsxMDgwLCAxMDgwXVxufTtcblxuY29uc3QgcGFyYW1zID0ge1xuICBjZWxsOiAyMCxcbiAgcm93czogMTAsXG4gIHNjYWxlTWluOiAxLFxuICBzY2FsZU1heDogMzAsXG4gIGZyZXE6IDAuMDAxLFxuICBhbXA6IC4yLFxuICBhbmltYXRlOiB0cnVlLFxuICBmcmFtZTogMCxcbiAgc3R5bGU6ICdjaGFycycsXG4gIGZnOiB7cjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMjU1fSxcbiAgYmc6IHtyOiAwLCBnOiAwLCBiOiAwLCBhOiAxfSxcbiAgZm9udDogJ0ZyZWVTZXJpZicsXG4gIHByZXNldDogJydcbn1cblxubGV0IHRleHQgPSAnTSdcbmxldCBmb250U2l6ZSA9IDEwMDBcbmxldCBmb250RmFtaWx5ID0gcGFyYW1zLmZvbnRcbi8vIGZvbnRGYW1pbHkgPSAnTm90byBTZXJpZiBEaXNwbGF5J1xubGV0IG1hbmFnZXJcblxuY29uc3QgdHlwZUNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXG5jb25zdCB0eXBlQ29udGV4dCA9IHR5cGVDYW52YXMuZ2V0Q29udGV4dCgnMmQnKVxuXG5cbmNvbnN0IHNrZXRjaCA9ICh7IGNvbnRleHQsIHdpZHRoLCBoZWlnaHQgfSkgPT4ge1xuICBcblxuICByZXR1cm4gKHsgY29udGV4dCwgd2lkdGgsIGhlaWdodCB9KSA9PiB7XG4gICAgY29uc3QgY2VsbCA9IHBhcmFtcy5jZWxsXG4gIGNvbnN0IGNvbHMgPSBNYXRoLmZsb29yKHdpZHRoIC8gY2VsbClcbiAgY29uc3Qgcm93cyA9IE1hdGguZmxvb3IoaGVpZ2h0IC8gY2VsbClcbiAgY29uc3QgbnVtX2NlbGxzID0gY29scyAqIHJvd3NcblxuICB0eXBlQ2FudmFzLndpZHRoID0gY29sc1xuICB0eXBlQ2FudmFzLmhlaWdodCA9IHJvd3NcbiAgICB0eXBlQ29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgIHR5cGVDb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNvbHMsIHJvd3MpO1xuXG4gICAgZm9udFNpemUgPSBjb2xzXG5cbiAgICBjb25zdCBmZyA9IGByZ2JhKCR7cGFyYW1zLmZnLnJ9LCR7cGFyYW1zLmZnLmd9LCR7cGFyYW1zLmZnLmJ9LCR7cGFyYW1zLmZnLmF9KWBcbiAgICB0eXBlQ29udGV4dC5maWxsU3R5bGUgPSBmZ1xuXG4gICAgdHlwZUNvbnRleHQuZm9udCA9IGAke2ZvbnRTaXplfXB4ICR7cGFyYW1zLmZvbnR9YFxuICAgIHR5cGVDb250ZXh0LnRleHRCYXNlbGluZSA9ICd0b3AnXG5cbiAgICBjb25zdCBtZXRyaWNzID0gdHlwZUNvbnRleHQubWVhc3VyZVRleHQodGV4dClcbiAgICBjb25zdCBteCA9IG1ldHJpY3MuYWN0dWFsQm91bmRpbmdCb3hMZWZ0ICogLTFcbiAgICBjb25zdCBteSA9IG1ldHJpY3MuYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQgKiAtMVxuICAgIGNvbnN0IG13ID0gbWV0cmljcy5hY3R1YWxCb3VuZGluZ0JveExlZnQgKyBtZXRyaWNzLmFjdHVhbEJvdW5kaW5nQm94UmlnaHRcbiAgICBjb25zdCBtaCA9IG1ldHJpY3MuYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQgKyBtZXRyaWNzLmFjdHVhbEJvdW5kaW5nQm94RGVzY2VudFxuXG4gICAgY29uc3QgdHggPSAoY29scyAtIG13KSAqIC41IC0gbXhcbiAgICBjb25zdCB0eSA9IChyb3dzIC0gbWgpICogLjUgLSBteVxuXG4gICAgLy8gY29uc29sZS5sb2cobWV0cmljcylcblxuICAgIHR5cGVDb250ZXh0LnNhdmUoKVxuICAgIHR5cGVDb250ZXh0LnRyYW5zbGF0ZSh0eCwgdHkpXG4gICAgdHlwZUNvbnRleHQuYmVnaW5QYXRoKClcbiAgICB0eXBlQ29udGV4dC5yZWN0KG14LCBteSwgbXcsIG1oKVxuICAgIHR5cGVDb250ZXh0LnN0cm9rZSgpXG4gICAgdHlwZUNvbnRleHQuZmlsbFRleHQodGV4dCwgMCwgMClcbiAgICB0eXBlQ29udGV4dC5yZXN0b3JlKClcblxuICAgIGNvbnN0IHR5cGVEYXRhID0gdHlwZUNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNvbHMsIHJvd3MpLmRhdGFcblxuICAgIC8vIGNvbnRleHQuZHJhd0ltYWdlKHR5cGVDYW52YXMsIDAsIDApXG5cbiAgICBjb25zdCBiZyA9IGByZ2IoJHtwYXJhbXMuYmcucn0sJHtwYXJhbXMuYmcuZ30sJHtwYXJhbXMuYmcuYn0pYFxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gYmc7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KVxuXG4gICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJ1xuICAgIGNvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcidcbiAgICBjb25zdCBwX2ZnID0gY29sb3IucGFyc2UoZmcpXG4gICAgLy8gY29uc3QgY19mZyA9IGNvbG9yLm9mZnNldEhTTChwX2ZnLCAwLCAyNTUsICBwX2ZnLmhzbFsyXSA8IDUwID8gNTAgLSBwX2ZnLmhzbFsyXSA6IDApXG4gICAgLy8gY29uc29sZS5sb2cocF9mZy5oc2wsIGNfZmcuaHNsKVxuXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bV9jZWxsczsgaSsrKSB7XG4gICAgICBjb25zdCBjb2wgPSBpICUgY29sc1xuICAgICAgY29uc3Qgcm93ID0gTWF0aC5mbG9vcihpIC8gY29scylcblxuICAgICAgY29uc3QgeCA9IGNvbCAqIGNlbGxcbiAgICAgIGNvbnN0IHkgPSByb3cgKiBjZWxsXG5cbiAgICAgIGNvbnN0IHIgPSB0eXBlRGF0YVtpICogNCArIDBdXG4gICAgICBjb25zdCBnID0gdHlwZURhdGFbaSAqIDQgKyAxXVxuICAgICAgY29uc3QgYiA9IHR5cGVEYXRhW2kgKiA0ICsgMl1cbiAgICAgIGNvbnN0IGEgPSB0eXBlRGF0YVtpICogNCArIDNdXG5cbiAgICAgIGNvbnRleHQuc2F2ZSgpXG4gICAgICBjb250ZXh0LnRyYW5zbGF0ZSh4LCB5KVxuXG5cbiAgICAgIGlmIChwYXJhbXMuc3R5bGUgPT0gJ2NoYXJzJyl7XG4gICAgICAgIGNvbnN0IGdseXBoID0gZ2V0R2x5cGgocilcbiAgICAgICAgY29udGV4dC5mb250ID0gYCR7Y2VsbCogMS41fXB4ICR7cGFyYW1zLmZvbnR9YFxuICAgICAgICBpZiAoTWF0aC5yYW5kb20oKSA8IDAuMSkgY29udGV4dC5mb250ID0gYCR7Y2VsbCogNH1weCAke3BhcmFtcy5mb250fWBcbiAgICAgICAgLy8gY29uc29sZS5sb2coY19mZylcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBwX2ZnLmhleFxuICAgICAgICBjb250ZXh0LmZpbGxUZXh0KGdseXBoLCAwLCAwKVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAocGFyYW1zLnN0eWxlID09ICdkb3RzJyl7XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gIGByZ2IoJHtyfSwgJHtnfSwgJHtifSlgXG4gICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGNlbGwgKiAuNSwgIGNlbGwgKiAuNSlcbiAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKVxuICAgICAgICBjb250ZXh0LmFyYygwLCAwLCBjZWxsICogMC41LCAwLCBNYXRoLlBJICogMilcbiAgICAgICAgY29udGV4dC5maWxsKClcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICBgcmdiKCR7cn0sICR7Z30sICR7Yn0pYFxuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNlbGwsIGNlbGwpXG4gICAgICB9XG4gICAgICBcblxuICAgICAgXG4gICAgICBcbiAgICAgIGNvbnRleHQucmVzdG9yZSgpXG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgZ2V0R2x5cGggPSAodikgPT4ge1xuICBpZiAodiA8IDUwKSByZXR1cm4gJydcbiAgaWYgKHYgPCAxMDApIHJldHVybiAnLidcbiAgaWYgKHYgPCAxNTApIHJldHVybiAnLSdcbiAgaWYgKHYgPCAyMDApIHJldHVybiAnKydcblxuICBjb25zdCBnbHlwaHMgPSBgXz0gLyR7dGV4dH1gLnNwbGl0KCcnKVxuXG4gIHJldHVybiByYW5kb20ucGljayhnbHlwaHMpXG59XG5cbmNvbnN0IG9uS2V5VXAgPSAoZSkgPT4ge1xuICAvLyBjb25zb2xlLmxvZyhlKVxuICB0ZXh0ID0gZS5rZXkudG9VcHBlckNhc2UoKVxuICBtYW5hZ2VyLnJlbmRlcigpXG59XG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIG9uS2V5VXApXG5cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHN0YXJ0ID0gYXN5bmMgKCkgPT4ge1xuICBtYW5hZ2VyID0gYXdhaXQgY2FudmFzU2tldGNoKHNrZXRjaCwgc2V0dGluZ3MpO1xufVxuXG5jb25zdCBjcmVhdGVQYW5lID0gKCkgPT4ge1xuICBjb25zdCBwYW5lID0gbmV3IFR3ZWFrUGFuZS5QYW5lKClcbiAgbGV0IGZvbGRlclxuXG4gIGZvbGRlciA9IHBhbmUuYWRkRm9sZGVyKHt0aXRsZTogXCJHZW5lcmFsXCJ9KS5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgbWFuYWdlci5yZW5kZXIoKVxuICB9KVxuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnYmcnKVxuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnZmcnKVxuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnZm9udCcpXG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsIFwic3R5bGVcIiwge29wdGlvbnM6IHtkb3RzOiAnZG90cycsIHBpeGVsczogJ3BpeGVscycsIGNoYXJzOiAnY2hhcnMnfX0pLm9uKCdjaGFuZ2UnLCAoZXYpID0+IHtcbiAgICBtYW5hZ2VyLnJlbmRlcigpXG4gIH0pXG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsIFwiY2VsbFwiLCB7bWluOiAyLCBtYXg6IDUwLCBzdGVwOiAxfSlcblxuICAvLyBmb2xkZXIgPSBwYW5lLmFkZEZvbGRlcih7dGl0bGU6IFwiTm9pc2VcIn0pXG4gIC8vIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsIFwiZnJlcVwiLCB7bWluOiAtLjAxLCBtYXg6IDAuMDF9KVxuICAvLyBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCBcImFtcFwiLCB7bWluOiAwLCBtYXg6IDF9KVxuICAvLyBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnYW5pbWF0ZScpXG4gIC8vIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsIFwiZnJhbWVcIiwge21pbjogMCwgbWF4OiA5OTl9KVxuXG4gIC8vIGZvbGRlciA9IHBhbmUuYWRkRm9sZGVyKHt0aXRsZTogJ0ltcG9ydC9FeHBvcnQnfSlcbiAgLy8gY29uc3QgYnRuID0gZm9sZGVyLmFkZEJ1dHRvbih7dGl0bGU6ICdFeHBvcnQnfSlcblxuICAvLyBidG4ub24oJ2NsaWNrJywgKCkgPT4ge1xuICAvLyAgIGNvbnN0IHByZXNldCA9IHBhbmUuZXhwb3J0UHJlc2V0KCk7XG4gIC8vICAgY29uc29sZS5sb2cocHJlc2V0KVxuICAvLyB9KVxuXG4gIC8vIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdwcmVzZXQnKVxuXG59XG5cbmNyZWF0ZVBhbmUoKVxuXG5zdGFydCgpIiwiXG5nbG9iYWwuQ0FOVkFTX1NLRVRDSF9ERUZBVUxUX1NUT1JBR0VfS0VZID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4iXSwibWFwcGluZ3MiOiJDQUFBLFNBQUFBLEVBQUFDLEVBQUFDLEVBQUFDLEdBQUEsU0FBQUMsRUFBQUMsRUFBQUMsR0FBQSxJQUFBSixFQUFBRyxHQUFBLEtBQUFKLEVBQUFJLEdBQUEsS0FBQUUsRUFBQSxtQkFBQUMsaUJBQUEsSUFBQUYsR0FBQUMsRUFBQSxPQUFBQSxFQUFBRixHQUFBLE1BQUFJLEVBQUEsT0FB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QUMsYUFBQSxVQUNBQyxLQUFBLFVBQ0FDLFdBQUEsVUFDQUMsTUFBQSxVQUNBQyxNQUFBLFVBQ0FDLE9BQUEsVUFDQUMsTUFBQSxVQUNBQyxlQUFBLFVBQ0FDLEtBQUEsVUFDQUMsV0FBQSxVQUNBQyxNQUFBLFVBQ0FDLFVBQUEsVUFDQUMsVUFBQSxVQUNBQyxXQUFBLFVBQ0FDLFVBQUEsVUFDQUMsTUFBQSxVQUNBQyxlQUFBLFVBQ0FDLFNBQUEsVUFDQUMsUUFBQSxVQUNBQyxLQUFBLFVBQ0FDLFNBQUEsVUFDQUMsU0FBQSxVQUNBQyxjQUFBLFVBQ0FDLFNBQUEsVUFDQUMsVUFBQSxVQUNBQyxTQUFBLFVBQ0FDLFVBQUEsVUFDQUMsWUFBQSxVQUNBQyxlQUFBLFVBQ0FDLFdBQUEsVUFDQUMsV0FBQSxVQUNBQyxRQUFBLFVBQ0FDLFdBQUEsVUFDQUMsYUFBQSxVQUNBQyxjQUFBLFVBQ0FDLGNBQUEsVUFDQUMsY0FBQSxVQUNBQyxjQUFBLFVBQ0FDLFdBQUEsVUFDQUMsU0FBQSxVQUNBQyxZQUFBLFVBQ0FDLFFBQUEsVUFDQUMsUUFBQSxVQUNBQyxXQUFBLFVBQ0FDLFVBQUEsVUFDQUMsWUFBQSxVQUNBQyxZQUFBLFVBQ0FDLFFBQUEsVUFDQUMsVUFBQSxVQUNBQyxXQUFBLFVBQ0FDLEtBQUEsVUFDQUMsVUFBQSxVQUNBQyxLQUFBLFVBQ0FDLE1BQUEsVUFDQUMsWUFBQSxVQUNBQyxLQUFBLFVBQ0FDLFNBQUEsVUFDQUMsUUFBQSxVQUNBQyxVQUFBLFVBQ0FDLE9BQUEsVUFDQUMsTUFBQSxVQUNBQyxNQUFBLFVBQ0FDLFNBQUEsVUFDQUMsY0FBQSxVQUNBQyxVQUFBLFVBQ0FDLGFBQUEsVUFDQUMsVUFBQSxVQUNBQyxXQUFBLFVBQ0FDLFVBQUEsVUFDQUMscUJBQUEsVUFDQUMsVUFBQSxVQUNBQyxXQUFBLFVBQ0FDLFVBQUEsVUFDQUMsVUFBQSxVQUNBQyxZQUFBLFVBQ0FDLGNBQUEsVUFDQUMsYUFBQSxVQUNBQyxlQUFBLFVBQ0FDLGVBQUEsVUFDQUMsZUFBQSxVQUNBQyxZQUFBLFVBQ0FDLEtBQUEsVUFDQUMsVUFBQSxVQUNBQyxNQUFBLFVBQ0FDLFFBQUEsVUFDQUMsT0FBQSxVQUNBQyxpQkFBQSxVQUNBQyxXQUFBLFVBQ0FDLGFBQUEsVUFDQUMsYUFBQSxVQUNBQyxlQUFBLFVBQ0FDLGdCQUFBLFVBQ0FDLGtCQUFBLFVBQ0FDLGdCQUFBLFVBQ0FDLGdCQUFBLFVBQ0FDLGFBQUEsVUFDQUMsVUFBQSxVQUNBQyxVQUFBLFVBQ0FDLFNBQUEsVUFDQUMsWUFBQSxVQUNBQyxLQUFBLFVBQ0FDLFFBQUEsVUFDQUMsTUFBQSxVQUNBQyxVQUFBLFVBQ0FDLE9BQUEsVUFDQUMsVUFBQSxVQUNBQyxPQUFBLFVBQ0FDLGNBQUEsVUFDQUMsVUFBQSxVQUNBQyxjQUFBLFVBQ0FDLGNBQUEsVUFDQUMsV0FBQSxVQUNBQyxVQUFBLFVBQ0FDLEtBQUEsVUFDQUMsS0FBQSxVQUNBQyxLQUFBLFVBQ0FDLFdBQUEsVUFDQUMsT0FBQSxVQUNBQyxjQUFBLFVBQ0FDLElBQUEsVUFDQUMsVUFBQSxVQUNBQyxVQUFBLFVBQ0FDLFlBQUEsVUFDQUMsT0FBQSxVQUNBQyxXQUFBLFVBQ0FDLFNBQUEsVUFDQUMsU0FBQSxVQUNBQyxPQUFBLFVBQ0FDLE9BQUEsVUFDQUMsUUFBQSxVQUNBQyxVQUFBLFVBQ0FDLFVBQUEsVUFDQUMsVUFBQSxVQUNBQyxLQUFBLFVBQ0FDLFlBQUEsVUFDQUMsVUFBQSxVQUNBQyxJQUFBLFVBQ0FDLEtBQUEsVUFDQUMsUUFBQSxVQUNBQyxPQUFBLFVBQ0FDLFVBQUEsVUFDQUMsT0FBQSxVQUNBQyxNQUFBLFVBQ0FDLE1BQUEsVUFDQUMsV0FBQSxVQUNBQyxPQUFBLFVBQ0FDLFlBQUEsVSx5QkNuSkEsSUFBQXZMLEVBQUFYLEVBQUEsMEJBQ0FhLEVBQUFiLEVBQUEsU0FDQWMsRUFBQWQsRUFBQSxpQkFDQWUsRUFBQWYsRUFBQSxpQkFDQW1NLEVBQUFuTSxFQUFBLFVBRUEsU0FBQW9NLEVBQUFDLEdBQ0Esb0JBQUFBLEVBQ0EsVUFBQUMsVUFBQSx5REFXQSxJQUFBN0osRUFBQVIsRUFBQXNLLEVBQ0EsSUFUQUYsSUFBQUcsaUJBRUE3TCxFQUNBMEwsRUFBQTFMLEVBQUEwTCxHQUNBLGdCQUFBQSxJQUNBQSxFQUFBLGFBSUEsZUFBQUksS0FBQUosR0FDQTVKLEVBQUEzQixFQUFBdUwsR0FDQUUsRUFBQXhMLEVBQUEwQixHQUNBUixFQUFBcEIsRUFBQWdDLFdBQUFKLE9BQ0EsQ0FDQSxJQUFBaUssRUFBQSxpQ0FBQUMsS0FBQU4sR0FDQSxJQUFBSyxFQUFBLFlBQ0EsSUFBQUUsRUFBQUYsRUFBQSxHQUFBRyxRQUFBLFNBQ0FDLEVBQUFKLEVBQUEsR0FBQUcsUUFBQSxpQkFBQUUsTUFBQSxXQUFBQyxLQUFBLFNBQUF0TixFQUFBRyxHQUVBLE9BQUFBLEdBQUEsRUFBQTZCLEtBQUF1TCxNQUFBQyxXQUFBeE4sSUFBQSxJQUlBLGlCQURBQSxFQUFBd04sV0FBQXhOLEtBQ0FrRCxTQUFBbEQsT0FBQSxHQUNBQSxFQUVBLFNBRUEsSUFBQW9OLEVBQUEsSUFBQWxLLFNBQUFrSyxFQUFBLE1BQ0FBLEVBQUEsTUFFQSxRQUFBRixHQUNBM0ssRUFBQXBCLEVBQUFnQyxXQUFBaUssR0FDQXJLLEVBQUFxSyxHQUNBLFFBQUFGLElBQ0FuSyxFQUFBNUIsRUFBQWlDLFdBQUFnSyxHQUNBQSxFQUFBLEdBQUFYLEVBQUFXLEVBQUEsVUFDQTdLLEVBQUE2SyxHQUVBUCxFQUFBeEwsRUFBQTBCLEVBQ0EsQ0FFQSxPQUFBQSxHQUFBOEosR0FBQXRLLEVBRUEsQ0FDQXNLLE1BQ0E1SixNQUFBRixFQUFBLEdBQ0FwQixJQUFBb0IsRUFBQTBLLE1BQUEsS0FDQTFLLE9BQ0EySyxJQUFBbkwsRUFBQWtMLE1BQUEsS0FDQWxMLFFBUkEsSUFZQSxDQStCQSxTQUFBb0wsRUFBQTdOLEVBQUE4TixFQUFBN0wsRUFBQXZCLEdBSUEsT0FIQVYsRUFBQWtDLEtBQUFDLElBQUEsRUFBQUQsS0FBQUUsSUFBQSxJQUFBRixLQUFBdUwsTUFBQXpOLEtBQ0E4TixFQUFBNUwsS0FBQUMsSUFBQSxFQUFBRCxLQUFBRSxJQUFBLElBQUFGLEtBQUF1TCxNQUFBSyxLQUNBN0wsRUFBQUMsS0FBQUMsSUFBQSxFQUFBRCxLQUFBRSxJQUFBLElBQUFGLEtBQUF1TCxNQUFBeEwsS0FDQSxJQUFBdkIsR0FBQTBDLFNBQUExQyxTQUFBLElBQUFBLEVBSUEsU0FBQVYsRUFBQThOLEVBQUE3TCxFQURBdkIsRUFBQXdCLEtBQUFDLElBQUEsRUFBQUQsS0FBQUUsSUFBQSxFQUFBMUIsS0FDQXFOLEtBQUEsVUFIQSxRQUFBL04sRUFBQThOLEVBQUE3TCxHQUFBOEwsS0FBQSxTQUtBLENBRUEsU0FBQUMsRUFBQTFMLEVBQUFDLEVBQUFDLEVBQUE5QixHQUtBLE9BSkE0QixFQUFBcUssRUFBQXJLLEVBQUEsT0FDQUEsRUFBQUosS0FBQUMsSUFBQSxFQUFBRCxLQUFBRSxJQUFBLElBQUFGLEtBQUF1TCxNQUFBbkwsS0FDQUMsRUFBQUwsS0FBQUMsSUFBQSxFQUFBRCxLQUFBRSxJQUFBLElBQUFGLEtBQUF1TCxNQUFBbEwsS0FDQUMsRUFBQU4sS0FBQUMsSUFBQSxFQUFBRCxLQUFBRSxJQUFBLElBQUFGLEtBQUF1TCxNQUFBakwsS0FDQSxJQUFBOUIsR0FBQTBDLFNBQUExQyxTQUFBLElBQUFBLEVBSUEsU0FBQTRCLEVBQUFDLEVBQUFDLEVBREE5QixFQUFBd0IsS0FBQUMsSUFBQSxFQUFBRCxLQUFBRSxJQUFBLEVBQUExQixLQUNBcU4sS0FBQSxVQUhBLFFBQUF6TCxFQUFBQyxFQUFBQyxHQUFBdUwsS0FBQSxTQUtBLENBcERBOU0sRUFBQUgsUUFBQVUsTUFDQSxTQUFBRyxHQUNBLG9CQUFBQSxFQUNBLE9BQUFpTCxFQUFBakwsR0FFQSxJQUdBa0wsRUFKQSxHQUFBb0IsTUFBQUMsUUFBQXZNLE1BQUFYLFFBQUEsRUFFQSxPQUFBNEwsRUFEQWlCLEVBQUFsTSxFQUFBLEdBQUFBLEVBQUEsR0FBQUEsRUFBQSxHQUFBQSxFQUFBLEtBRUEsR0FBQUEsR0FBQSxpQkFBQUEsSUFFQUEsRUFBQW9MLElBQUFGLEVBQUFsTCxFQUFBb0wsSUFDQXBMLEVBQUFzQixLQUFBNEosRUFBQWdCLEVBQUFsTSxFQUFBc0IsS0FBQSxHQUFBdEIsRUFBQXNCLEtBQUEsR0FBQXRCLEVBQUFzQixLQUFBLEdBQUF0QixFQUFBc0IsS0FBQSxJQUNBdEIsRUFBQWMsS0FBQW9LLEVBQUFtQixFQUFBck0sRUFBQWMsS0FBQSxHQUFBZCxFQUFBYyxLQUFBLEdBQUFkLEVBQUFjLEtBQUEsR0FBQWQsRUFBQWMsS0FBQSxJQUNBZCxFQUFBRSxJQUFBZ0wsRUFBQWdCLEVBQUFsTSxFQUFBRSxJQUFBLEdBQUFGLEVBQUFFLElBQUEsR0FBQUYsRUFBQUUsSUFBQSxJQUNBRixFQUFBaU0sTUFBQWYsRUFBQW1CLEVBQUFyTSxFQUFBaU0sSUFBQSxHQUFBak0sRUFBQWlNLElBQUEsR0FBQWpNLEVBQUFpTSxJQUFBLEtBQ0FmLEdBQUEsT0FBQUQsRUFBQUMsR0FFQSxXQUNBLEVBRUE1TCxFQUFBSCxRQUFBVyxNQUNBLFNBQUFFLEdBQ0EsSUFBQUMsRUFBQVgsRUFBQUgsUUFBQVUsTUFBQUcsR0FDQSxHQUFBQyxFQUFBLENBQ0EsSUFBQXFCLEVBQUFyQixFQUFBcUIsS0FDQSxPQUFBNEssRUFBQTVLLEVBQUEsR0FBQUEsRUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsR0FDQSxDQUNBLFdBQ0EsQyw0R0MvRkFoQyxFQUFBSCxRQUNBLFNBQUErTCxHQUNBLG9CQUFBQSxFQUNBLFVBQUFDLFVBQUEsNERBS0EsR0FGQUQsSUFBQUcsZUFFQSxlQUFBQyxLQUFBSixHQUNBLFlBR0EsSUFBQUUsRUFBQUYsRUFBQVEsUUFBQSxTQUNBbEssRUFBQSxFQUVBLElBQUE0SixFQUFBL0wsU0FDQW1DLEVBQUFnTCxTQUFBcEIsRUFBQVksTUFBQSxhQUNBWixJQUFBWSxNQUFBLE1BR0EsSUFBQVosRUFBQS9MLFNBQ0FtQyxFQUFBZ0wsU0FBQXBCLEVBQUFZLE1BQUEsS0FBQVMsT0FBQSxXQUNBckIsSUFBQVksTUFBQSxNQUdBLElBQUFaLEVBQUEvTCxTQUNBK0wsSUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsR0FBQUEsRUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsSUFHQSxJQUFBc0IsRUFBQUYsU0FBQXBCLEVBQUEsSUFLQSxPQUpBc0IsR0FBQSxHQUNBQSxHQUFBLE1BQ0EsSUFBQUEsRUFFQWxMLEVBQ0EsQyx5QkNuQ0EsSUFBQW1MLEVBQUE5TixFQUFBLGlCQUNBK04sRUFBQS9OLEVBQUEsaUJBQ0FtTSxFQUFBbk0sRUFBQSxVQUVBUyxFQUFBSCxRQUFBdUMsV0FDQSxTQUFBSixHQUNBLElBQUF1TCxFQUFBRCxFQUFBLENBQUF0TCxFQUFBLE9BQUFBLEVBQUEsT0FBQUEsRUFBQSxTQUNBLE9BQ0FmLEtBQUFDLElBQUEsRUFBQUQsS0FBQUUsSUFBQSxJQUFBRixLQUFBdUwsTUFBQSxJQUFBZSxFQUFBLE1BQ0F0TSxLQUFBQyxJQUFBLEVBQUFELEtBQUFFLElBQUEsSUFBQUYsS0FBQXVMLE1BQUEsSUFBQWUsRUFBQSxNQUNBdE0sS0FBQUMsSUFBQSxFQUFBRCxLQUFBRSxJQUFBLElBQUFGLEtBQUF1TCxNQUFBLElBQUFlLEVBQUEsTUFDQXZMLEVBQUEsR0FFQSxFQUVBaEMsRUFBQUgsUUFBQXdDLFdBQ0EsU0FBQWIsR0FDQSxJQUFBZ00sRUFBQTlCLEVBQUFsSyxFQUFBLFVBQ0FpTSxFQUFBSixFQUFBLENBQUFHLEVBQUEsSUFBQWhNLEVBQUEsT0FBQUEsRUFBQSxTQUNBLE9BQ0FQLEtBQUFDLElBQUEsRUFBQUQsS0FBQUUsSUFBQSxJQUFBRixLQUFBdUwsTUFBQSxJQUFBaUIsRUFBQSxNQUNBeE0sS0FBQUMsSUFBQSxFQUFBRCxLQUFBRSxJQUFBLElBQUFGLEtBQUF1TCxNQUFBLElBQUFpQixFQUFBLE1BQ0F4TSxLQUFBQyxJQUFBLEVBQUFELEtBQUFFLElBQUEsSUFBQUYsS0FBQXVMLE1BQUEsSUFBQWlCLEVBQUEsTUFDQWpNLEVBQUEsR0FFQSxDLHlFQ2ZBLElBSUFrTSxFQUFBLFFBRUEsU0FBQUMsRUFBQWxPLEdBQ0EsT0FBQXdCLEtBQUEyTSxLQUFBbk8sRUFBQSxnQkFDQSxDQUVBTyxFQUFBSCxRQUNBLFNBQUFlLEdBQ0EsSUFBQWlOLEVBQUFqTixFQUFBLE9BQ0FrTixFQUFBbE4sRUFBQSxPQUNBbU4sRUFBQW5OLEVBQUEsT0FDQTdCLEVBQUE4TyxHQUFBLE9BQUFBLEVBQUFILEVBQUFDLEVBQUFFLEdBQ0FoQixFQUFBaUIsR0FBQSxPQUFBQSxFQUFBSixFQUFBQyxFQUFBRyxHQUNBOU0sRUFBQStNLEdBQUEsT0FBQUEsRUFBQUwsRUFBQUMsRUFBQUksR0FDQSxNQWxCQSxNQWtCQWhQLEVBakJBLE1BaUJBOE4sRUFoQkEsTUFnQkE3TCxDQUNBLEMseUJDN0JBaEIsRUFBQUgsUUFDQSxTQUFBbUMsR0FDQSxJQUFBQSxJQUFBZ0wsTUFBQUMsUUFBQWpMLEdBQ0EsVUFBQTZKLFVBQUEsb0RBR0EsSUFBQTlNLEVBQUFrQyxLQUFBQyxJQUFBLEVBQUFELEtBQUFFLElBQUEsSUFBQUYsS0FBQXVMLE1BQUF4SyxFQUFBLFNBQ0E2SyxFQUFBNUwsS0FBQUMsSUFBQSxFQUFBRCxLQUFBRSxJQUFBLElBQUFGLEtBQUF1TCxNQUFBeEssRUFBQSxTQUNBaEIsRUFBQUMsS0FBQUMsSUFBQSxFQUFBRCxLQUFBRSxJQUFBLElBQUFGLEtBQUF1TCxNQUFBeEssRUFBQSxTQUVBRSxFQUFBRixFQUFBLFFBQ0EsSUFBQUUsR0FBQUMsU0FBQUQsS0FDQUEsRUFBQSxHQUVBLElBQUF6QyxFQUFBd0IsS0FBQUMsSUFBQSxFQUFBRCxLQUFBRSxJQUFBLElBQUFGLEtBQUF1TCxNQUFBLElBQUF0SyxLQUNBOEwsRUFBQSxNQUFBdk8sRUFBQSxRQUFBQSxHQUFBd08sU0FBQSxJQUFBdkIsTUFBQSxHQUVBLFlBREExTCxFQUFBNkwsR0FBQSxFQUFBOU4sR0FBQSxVQUFBa1AsU0FBQSxJQUFBdkIsTUFBQSxHQUFBc0IsRUFFQSxDLHlCQ2xCQWhPLEVBQUFILFFBQ0EsU0FBQXFPLEVBQUFDLEVBQUFDLEdBQ0Esb0JBQUFELEdBQUEsaUJBQUFDLEVBQ0EsVUFBQXZDLFVBQUEscURBR0EsR0FBQXNDLEVBQUFDLEVBQUEsQ0FDQSxJQUFBbFAsRUFBQWlQLEVBQ0FBLEVBQUFDLEVBQ0FBLEVBQUFsUCxDQUNBLENBQ0EsSUFBQW1QLEVBQUFELEVBQUFELEVBQ0EsT0FBQUUsRUFDQSxPQUFBRCxFQUVBLE9BQUFGLEVBQUFHLEVBQUFwTixLQUFBcU4sT0FBQUosRUFBQUMsR0FBQUUsRUFDQSxDLHlCQ2hCQSxJQUFBRSxFQUFBaFAsRUFBQSxlQUNBaVAsRUFBQWpQLEVBQUEsaUJBQ0FrUCxFQUFBbFAsRUFBQSxXQXFVQVMsRUFBQUgsUUFuVUEsU0FBQTZPLEVBQUFDLEdBQ0FBLEVBQUFGLEVBQUFFLEVBQUEsTUFDQSxJQUNBQyxFQUNBQyxFQUNBQyxFQUhBQyxFQUFBOU4sS0FBQStOLE9BSUFDLEVBQUEsS0FDQUMsR0FBQSxFQUlBLE9BRkFDLEVBQUFSLEdBRUEsQ0FDQVQsUUFDQVEsYUFBQSxTQUFBQyxHQUNBLE9BQUFELEVBQUFDLEVBQ0EsRUFDQVEsVUFDQUMsUUFpREEsV0FDQSxPQUFBUixDQUNBLEVBbERBUyxjQW9EQSxXQUVBLE9BREFDLE9BQUFyTyxLQUFBcU4sTUFBQSxJQUFBck4sS0FBQStOLFVBRUEsRUF0REFPLGFBeUNBLFdBQ0EsSUFBQS9QLEVBQUEsRUFDQSxTQUFBQSxLQUFBME8sSUFDQSxPQUFBMU8sQ0FDQSxFQTVDQWdRLGFBMkRBLFdBQ0FWLEVBQUFXLEdBQ0EsRUE1REFDLFFBOERBLFNBQUFDLEVBQUFDLEVBQUFDLEdBQ0EsSUFBQTFOLFNBQUF3TixHQUFBLFVBQUE5RCxVQUFBLDBDQUdBLE9BRkErRCxFQUFBbkIsRUFBQW1CLEVBQUEsSUFDQUMsRUFBQXBCLEVBQUFvQixFQUFBLElBQ0FmLEVBQUFnQixRQUFBSCxFQUFBQyxFQUFBLEVBQ0EsRUFsRUFFLFFBb0VBLFNBQUFILEVBQUFJLEVBQUFILEVBQUFDLEdBQ0EsSUFBQTFOLFNBQUF3TixHQUFBLFVBQUE5RCxVQUFBLDBDQUNBLElBQUExSixTQUFBNE4sR0FBQSxVQUFBbEUsVUFBQSwwQ0FHQSxPQUZBK0QsRUFBQW5CLEVBQUFtQixFQUFBLElBQ0FDLEVBQUFwQixFQUFBb0IsRUFBQSxJQUNBZixFQUFBZ0IsUUFBQUgsRUFBQUMsRUFBQUcsRUFBQUgsRUFDQSxFQXpFQUksUUEyRUEsU0FBQUwsRUFBQUksRUFBQUUsRUFBQUwsRUFBQUMsR0FDQSxJQUFBMU4sU0FBQXdOLEdBQUEsVUFBQTlELFVBQUEsMENBQ0EsSUFBQTFKLFNBQUE0TixHQUFBLFVBQUFsRSxVQUFBLDBDQUNBLElBQUExSixTQUFBOE4sR0FBQSxVQUFBcEUsVUFBQSwwQ0FHQSxPQUZBK0QsRUFBQW5CLEVBQUFtQixFQUFBLElBQ0FDLEVBQUFwQixFQUFBb0IsRUFBQSxJQUNBZixFQUFBa0IsUUFDQUwsRUFBQUMsRUFDQUcsRUFBQUgsRUFDQUssRUFBQUwsRUFFQSxFQXJGQU0sUUF1RkEsU0FBQVAsRUFBQUksRUFBQUUsRUFBQUUsRUFBQVAsRUFBQUMsR0FDQSxJQUFBMU4sU0FBQXdOLEdBQUEsVUFBQTlELFVBQUEsMENBQ0EsSUFBQTFKLFNBQUE0TixHQUFBLFVBQUFsRSxVQUFBLDBDQUNBLElBQUExSixTQUFBOE4sR0FBQSxVQUFBcEUsVUFBQSwwQ0FDQSxJQUFBMUosU0FBQWdPLEdBQUEsVUFBQXRFLFVBQUEsMENBR0EsT0FGQStELEVBQUFuQixFQUFBbUIsRUFBQSxJQUNBQyxFQUFBcEIsRUFBQW9CLEVBQUEsSUFDQWYsRUFBQW9CLFFBQ0FQLEVBQUFDLEVBQ0FHLEVBQUFILEVBQ0FLLEVBQUFMLEVBQ0FPLEVBQUFQLEVBRUEsRUFuR0FRLEtBcUdBLFdBQ0EsT0FBQUMsSUFBQSxJQUNBLEVBdEdBQSxVQUNBQyxPQTJHQSxTQUFBclIsR0FFQSxvQkFEQUEsRUFBQXdQLEVBQUF4UCxFQUFBLEtBQ0EsVUFBQTRNLFVBQUEsNkJBQ0EsT0FBQXFDLElBQUFqUCxDQUNBLEVBOUdBc1IsUUFDQUMsYUFDQUMsS0F3SUEsU0FBQUMsR0FDQSxXQUFBQSxFQUFBM1EsWUFBQSxFQUNBMlEsRUFBQUYsRUFBQSxFQUFBRSxFQUFBM1EsUUFDQSxFQTFJQTRRLFFBNElBLFNBQUFDLEdBQ0EsSUFBQTVELE1BQUFDLFFBQUEyRCxHQUNBLFVBQUEvRSxVQUFBLDhCQUFBK0UsR0FHQSxJQUFBQyxFQUNBQyxFQUNBQyxFQUFBSCxFQUFBN1EsT0FDQWlSLEVBQUFKLEVBQUFsRSxRQUNBLEtBQUFxRSxHQUNBRixFQUFBNVAsS0FBQXFOLE1BQUFKLElBQUE2QyxLQUNBRCxFQUFBRSxFQUFBRCxHQUNBQyxFQUFBRCxHQUFBQyxFQUFBSCxHQUNBRyxFQUFBSCxHQUFBQyxFQUVBLE9BQUFFLENBQ0EsRUEzSkFDLFdBQ0FDLGFBcUtBLFNBQUFDLEVBQUFDLEdBQ0FELEVBQUExQyxFQUFBMEMsRUFBQSxHQUVBRixFQUFBLEVBREFHLEtBQUEsSUFFQSxJQUFBclMsRUFBQW9TLEVBQUFsUSxLQUFBb1EsS0FBQW5ELEtBR0EsT0FGQWtELEVBQUEsSUFBQXJTLEVBQ0FxUyxFQUFBLElBQUFyUyxFQUNBcVMsQ0FDQSxFQTVLQUUsU0E4S0EsU0FBQUgsRUFBQUMsR0FDQUQsRUFBQTFDLEVBQUEwQyxFQUFBLEdBQ0FDLEtBQUEsR0FDQSxJQUFBNVIsRUFBQTBPLElBQUFqTixLQUFBc1EsR0FBQSxFQUNBQyxFQUFBLEVBQUF0RCxJQUFBLEVBQ0F1RCxFQUFBalMsRUFDQWtTLEVBQUF6USxLQUFBMFEsS0FBQUgsR0FJQSxPQUhBSixFQUFBLEdBQUFELEVBQUFsUSxLQUFBMlEsSUFBQUYsR0FBQXpRLEtBQUE0USxJQUFBSixHQUNBTCxFQUFBLEdBQUFELEVBQUFsUSxLQUFBMlEsSUFBQUYsR0FBQXpRLEtBQUEyUSxJQUFBSCxHQUNBTCxFQUFBLEdBQUFELEVBQUFsUSxLQUFBNFEsSUFBQUgsR0FDQU4sQ0FDQSxFQXhMQVUsYUEwTEEsU0FBQVgsRUFBQUMsR0FDQUQsRUFBQTFDLEVBQUEwQyxFQUFBLEdBQ0FDLEtBQUEsR0FDQSxJQUFBNVIsRUFBQTBPLElBQUFqTixLQUFBc1EsR0FBQSxFQUNBQyxFQUFBLEVBQUF0RCxJQUFBLEVBQ0E2RCxFQUFBN0QsSUFFQXVELEVBQUFqUyxFQUNBa1MsRUFBQXpRLEtBQUEwUSxLQUFBSCxHQUNBelMsRUFBQW9TLEVBQUFsUSxLQUFBK1EsS0FBQUQsR0FJQSxPQUhBWCxFQUFBLEdBQUFyUyxFQUFBa0MsS0FBQTJRLElBQUFGLEdBQUF6USxLQUFBNFEsSUFBQUosR0FDQUwsRUFBQSxHQUFBclMsRUFBQWtDLEtBQUEyUSxJQUFBRixHQUFBelEsS0FBQTJRLElBQUFILEdBQ0FMLEVBQUEsR0FBQXJTLEVBQUFrQyxLQUFBNFEsSUFBQUgsR0FDQU4sQ0FDQSxFQXZNQWEsV0F5TUEsU0FBQWIsR0FDQUEsS0FBQSxHQUNBLElBQUFjLEVBQUFoRSxJQUNBaUUsRUFBQWpFLElBQ0FrRSxFQUFBbEUsSUFFQW1FLEVBQUFwUixLQUFBb1EsS0FBQSxFQUFBYSxHQUNBSSxFQUFBclIsS0FBQW9RLEtBQUFhLEdBRUFLLEVBQUEsRUFBQXRSLEtBQUFzUSxHQUFBWSxFQUNBSyxFQUFBLEVBQUF2UixLQUFBc1EsR0FBQWEsRUFFQXpDLEVBQUExTyxLQUFBMlEsSUFBQVcsR0FBQUYsRUFDQXRDLEVBQUE5TyxLQUFBNFEsSUFBQVUsR0FBQUYsRUFDQXBDLEVBQUFoUCxLQUFBMlEsSUFBQVksR0FBQUYsRUFDQW5DLEVBQUFsUCxLQUFBNFEsSUFBQVcsR0FBQUYsRUFLQSxPQUpBbEIsRUFBQSxHQUFBekIsRUFDQXlCLEVBQUEsR0FBQXJCLEVBQ0FxQixFQUFBLEdBQUFuQixFQUNBbUIsRUFBQSxHQUFBakIsRUFDQWlCLENBQ0EsRUE3TkFxQixXQUNBQyxZQThOQSxTQUFBQyxHQUVBLFlBREFBLEtBQUEsSUFDQTVTLE9BQUEsS0FDQTRTLEVBQUFDLEVBQUFELElBQUF6RSxLQUNBLEVBak9BMEUsbUJBQ0FDLFNBZ1FBLFNBQUFDLEVBQUFDLEdBS0EsR0FKQUQsRUFBQXJFLEVBQUFxRSxFQUFBLEdBQ0FDLEVBQUF0RSxFQUFBc0UsRUFBQSxHQUdBN0QsRUFBQSxDQUNBQSxHQUFBLEVBQ0EsSUFBQXZPLEVBQUFzTyxFQUVBLE9BREFBLEVBQUEsS0FDQTZELEVBQUFDLEVBQUFwUyxDQUNBLENBQ0EsSUFBQXFTLEVBQUEsRUFDQUMsRUFBQSxFQUNBM1IsRUFBQSxFQUNBLEdBQ0EwUixFQUFBLEVBQUE5RSxJQUFBLEVBQ0ErRSxFQUFBLEVBQUEvRSxJQUFBLEVBQ0E1TSxFQUFBMFIsSUFBQUMsVUFDQTNSLEdBQUEsT0FBQUEsR0FDQSxJQUFBNFIsRUFBQWpTLEtBQUFvUSxNQUFBLEVBQUFwUSxLQUFBa1MsSUFBQTdSLE1BR0EsT0FGQTJOLEVBQUFnRSxFQUFBQyxFQUNBaEUsR0FBQSxFQUNBNEQsRUFBQUMsR0FBQUMsRUFBQUUsRUFFQSxHQXJSQSxTQUFBL0QsRUFBQWlFLEVBQUFDLEdBQ0EsaUJBQUFELEdBQUEsaUJBQUFBLEVBRUF2RSxFQUFBTixFQURBSyxFQUFBd0UsRUFDQUMsSUFFQXpFLE9BQUEwRSxFQUNBekUsRUFBQUUsR0FFQUQsRUFBQVcsSUFDQVIsRUFBQSxLQUNBQyxHQUFBLENBQ0EsQ0FFQSxTQUFBaEIsSUFDQSxPQUFBVyxHQUNBLENBaUJBLFNBQUFZLElBQ0EsV0FBQWpCLEVBQUFLLEVBQ0EsQ0FxREEsU0FBQXdCLElBQ0EsT0FBQW5DLElBQUEsRUFDQSxDQVFBLFNBQUFxQyxFQUFBcFAsRUFBQUQsR0FNQSxRQUxBb1MsSUFBQXBTLElBQ0FBLEVBQUFDLEVBQ0FBLEVBQUEsR0FHQSxpQkFBQUEsR0FBQSxpQkFBQUQsRUFDQSxVQUFBMkssVUFBQSx3Q0FHQSxPQUFBcUMsS0FBQWhOLEVBQUFDLElBQ0EsQ0FFQSxTQUFBcVAsRUFBQXJQLEVBQUFELEdBTUEsUUFMQW9TLElBQUFwUyxJQUNBQSxFQUFBQyxFQUNBQSxFQUFBLEdBR0EsaUJBQUFBLEdBQUEsaUJBQUFELEVBQ0EsVUFBQTJLLFVBQUEsd0NBR0EsT0FBQTVLLEtBQUFxTixNQUFBaUMsRUFBQXBQLEVBQUFELEdBQ0EsQ0F5QkEsU0FBQStQLEVBQUFFLEVBQUFDLEdBQ0FELEVBQUExQyxFQUFBMEMsRUFBQSxHQUNBQyxLQUFBLEdBQ0EsSUFBQU0sRUFBQSxFQUFBeEQsSUFBQWpOLEtBQUFzUSxHQUdBLE9BRkFILEVBQUEsR0FBQUQsRUFBQWxRLEtBQUE0USxJQUFBSCxHQUNBTixFQUFBLEdBQUFELEVBQUFsUSxLQUFBMlEsSUFBQUYsR0FDQU4sQ0FDQSxDQXNFQSxTQUFBd0IsRUFBQUQsR0FFQSxZQURBQSxLQUFBLElBQ0E1UyxRQUFBLEVBQ0EwUyxFQUFBRSxFQUFBcEcsS0FBQSxTQUFBakwsR0FDQSxPQUFBQSxFQUFBaVMsTUFDQSxJQUNBLENBRUEsU0FBQWQsRUFBQWUsR0FFQSxRQURBQSxLQUFBLElBQ0F6VCxPQUFBLFNBQ0EsSUFDQVgsRUFEQXFVLEVBQUEsRUFHQSxJQUFBclUsRUFBQSxFQUFBQSxFQUFBb1UsRUFBQXpULE9BQUFYLElBQ0FxVSxHQUFBRCxFQUFBcFUsR0FHQSxHQUFBcVUsR0FBQSxZQUFBL1QsTUFBQSwyQkFFQSxJQUFBc1AsRUFBQWQsSUFBQXVGLEVBQ0EsSUFBQXJVLEVBQUEsRUFBQUEsRUFBQW9VLEVBQUF6VCxPQUFBWCxJQUFBLENBQ0EsR0FBQTRQLEVBQUF3RSxFQUFBcFUsR0FDQSxPQUFBQSxFQUVBNFAsR0FBQXdFLEVBQUFwVSxFQUNBLENBQ0EsUUFDQSxDQTJCQSxDQUVBc1AsRSxrUEMvVEEsSUFBSWdGLEVBQXdCQyxPQUFPRCxzQkFDL0JFLEVBQWlCRCxPQUFPRSxVQUFVRCxlQUNsQ0UsRUFBbUJILE9BQU9FLFVBQVVFLHFCQUV4QyxTQUFTQyxFQUFTQyxHQUNqQixHQUFJQSxRQUNILE1BQU0sSUFBSXBJLFVBQVUseURBR3JCLE9BQU84SCxPQUFPTSxFLENBK0NmLElBQUFDLEVBNUNBLFdBQ0MsSUFDQyxJQUFLUCxPQUFPUSxPQUNYLE9BQU8sRUFNUixJQUFJQyxFQUFRLElBQUk5RSxPQUFPLE9BRXZCLEdBREE4RSxFQUFNLEdBQUssS0FDa0MsTUFBekNULE9BQU9VLG9CQUFvQkQsR0FBTyxHQUNyQyxPQUFPLEVBS1IsSUFEQSxJQUFJRSxFQUFRLEdBQ0hsVixFQUFJLEVBQUdBLEVBQUksR0FBSUEsSUFDdkJrVixFQUFNLElBQU1oRixPQUFPaUYsYUFBYW5WLElBQU1BLEVBS3ZDLEdBQXdCLGVBSFh1VSxPQUFPVSxvQkFBb0JDLEdBQU8vSCxLQUFJLFNBQVV0TixHQUM1RCxPQUFPcVYsRUFBTXJWLEUsSUFFSDZOLEtBQUssSUFDZixPQUFPLEVBSVIsSUFBSTBILEVBQVEsR0FJWixNQUhBLHVCQUF1QmxJLE1BQU0sSUFBSW1JLFNBQVEsU0FBVUMsR0FDbERGLEVBQU1FLEdBQVVBLEMsSUFHZix5QkFERWYsT0FBT2dCLEtBQUtoQixPQUFPUSxPQUFPLEdBQUlLLElBQVExSCxLQUFLLEcsQ0FNOUMsTUFBTzhILEdBRVIsT0FBTyxDLEVBSVFDLEdBQW9CbEIsT0FBT1EsT0FBUyxTQUFVVyxFQUFRQyxHQUt0RSxJQUpBLElBQUk1RyxFQUVBNkcsRUFEQTVHLEVBQUs0RixFQUFTYyxHQUdUeFQsRUFBSSxFQUFHQSxFQUFJMlQsVUFBVWxWLE9BQVF1QixJQUFLLENBRzFDLElBQUssSUFBSTRULEtBRlQvRyxFQUFPd0YsT0FBT3NCLFVBQVUzVCxJQUduQnNTLEVBQWU5VCxLQUFLcU8sRUFBTStHLEtBQzdCOUcsRUFBRzhHLEdBQU8vRyxFQUFLK0csSUFJakIsR0FBSXhCLEVBQXVCLENBQzFCc0IsRUFBVXRCLEVBQXNCdkYsR0FDaEMsSUFBSyxJQUFJL08sRUFBSSxFQUFHQSxFQUFJNFYsRUFBUWpWLE9BQVFYLElBQy9CMFUsRUFBaUJoVSxLQUFLcU8sRUFBTTZHLEVBQVE1VixNQUN2Q2dQLEVBQUc0RyxFQUFRNVYsSUFBTStPLEVBQUs2RyxFQUFRNVYsSSxFQU1sQyxPQUFPZ1AsQyxpSkN4RlIsSUFBQStHLEVBQ0VDLEVBQU9DLGFBQ1BELEVBQU9DLFlBQVlDLElBQU0sV0FDdkIsT0FBT0QsWUFBWUMsSyxFQUNqQkMsS0FBS0QsS0FBTyxXQUNkLE9BQVEsSUFBSUMsSSxFQ0xoQkMsRUFFQSxTQUFtQkMsR0FDakIsUUFBU0EsSUFBdUIsaUJBQVJBLEdBQW1DLG1CQUFSQSxJQUEyQyxtQkFBYkEsRUFBSUMsSSxFQ0h2RixJQUFBQyxFQUVBLFNBQWlCMUIsR0FDZixTQUFTQSxHQUFzQixpQkFBUkEsS0FFQSxpQkFBWDJCLFFBQThDLGlCQUFoQkEsT0FBT0MsS0FDMUM1QixhQUFlMkIsT0FBT0MsS0FDRSxpQkFBakI1QixFQUFJNkIsVUFDYSxpQkFBakI3QixFQUFJOEIsUyxFQ0piLFNBQVNDLElBQ2QsTUFBeUIsb0JBQVhKLFFBQTBCQSxPQUFPLG9CLENBRzFDLFNBQVNuSCxJQUNkLEksZ0JBQVNyUCxFQUFJLEVBQUdBLEVBQUk2VixVQUFVbFYsT0FBUVgsSUFDcEMsR0FBb0IsTUFBaEI2VyxFQUFVN1csR0FDWixPQUFPNlcsRUFBVTdXLEUsQ0FNaEIsU0FBUzhXLElBQ2QsTUFBMkIsb0JBQWJDLFEsS0NKWkMsRSxtQkNWSixTQUFTQyxFQUFNWixHQUNiLElBQUlkLEVBQU8sR0FDWCxJQUFLLElBQUlPLEtBQU9PLEVBQUtkLEVBQUsyQixLQUFLcEIsR0FDL0IsT0FBT1AsQyxFQVBDM1UsRUFBQUgsUUFBd0MsbUJBQWhCOFQsT0FBT2dCLEtBQ3JDaEIsT0FBT2dCLEtBQU8wQixHQUVsQkEsS0FBZUEsQyx1QkNIZixJQUFJRSxFQUVJLHNCQUZxQixXQUMzQixPQUFPNUMsT0FBT0UsVUFBVTVGLFNBQVNuTyxLQUFLbVYsVUFDdkMsQ0FGNEIsR0FPN0IsU0FBU3VCLEVBQVVDLEdBQ2pCLE1BQWlELHNCQUExQzlDLE9BQU9FLFVBQVU1RixTQUFTbk8sS0FBSzJXLEUsQ0FJeEMsU0FBU0MsRUFBWUQsR0FDbkIsT0FBT0EsR0FDWSxpQkFBVkEsR0FDaUIsaUJBQWpCQSxFQUFPMVcsUUFDZDRULE9BQU9FLFVBQVVELGVBQWU5VCxLQUFLMlcsRUFBUSxZQUM1QzlDLE9BQU9FLFVBQVVFLHFCQUFxQmpVLEtBQUsyVyxFQUFRLFlBQ3BELEMsRUFkSjVXLEVBQVVHLEVBQUFILFFBQWlCMFcsRUFBeUJDLEVBQVlFLEdBRWhFRixVQUFvQkEsRUFLcEIzVyxFQUFBNlcsWUFBc0JBLENBUXJCLEksaUJDbkJELElBQUlDLEVBQVMzSixNQUFNNkcsVUFBVW5ILE1BSXpCa0ssRUFBWTVXLEVBQUFILFFBQWlCLFNBQVVnWCxFQUFRQyxFQUFVQyxHQUczRCxPQUZLQSxJQUFNQSxFQUFPLElBRWRGLElBQVdDLElBR0pELGFBQWtCdEIsTUFBUXVCLGFBQW9CdkIsS0FDaERzQixFQUFPRyxZQUFjRixFQUFTRSxXQUkzQkgsSUFBV0MsR0FBNkIsaUJBQVZELEdBQXlDLGlCQUFaQyxFQUM5REMsRUFBS0UsT0FBU0osSUFBV0MsRUFBV0QsR0FBVUMsRUEwQnpELFNBQWtCclgsRUFBR3VCLEVBQUcrVixHQUN0QixJQUFJM1gsRUFBRzhWLEVBQ1AsR0FBSWdDLEVBQWtCelgsSUFBTXlYLEVBQWtCbFcsR0FDNUMsT0FBTyxFQUVULEdBQUl2QixFQUFFb1UsWUFBYzdTLEVBQUU2UyxVQUFXLE9BQU8sRUFHeEMsR0FBSXNELEVBQVkxWCxHQUNkLFFBQUswWCxFQUFZblcsS0FHakJ2QixFQUFJa1gsRUFBTzdXLEtBQUtMLEdBQ2hCdUIsRUFBSTJWLEVBQU83VyxLQUFLa0IsR0FDVDRWLEVBQVVuWCxFQUFHdUIsRUFBRytWLElBRXpCLEdBQUlLLEVBQVMzWCxHQUFJLENBQ2YsSUFBSzJYLEVBQVNwVyxHQUNaLE9BQU8sRUFFVCxHQUFJdkIsRUFBRU0sU0FBV2lCLEVBQUVqQixPQUFRLE9BQU8sRUFDbEMsSUFBS1gsRUFBSSxFQUFHQSxFQUFJSyxFQUFFTSxPQUFRWCxJQUN4QixHQUFJSyxFQUFFTCxLQUFPNEIsRUFBRTVCLEdBQUksT0FBTyxFQUU1QixPQUFPLEMsQ0FFVCxJQUNFLElBQUlpWSxFQUFLMUMsRUFBV2xWLEdBQ2hCNlgsRUFBSzNDLEVBQVczVCxFLENBQ3BCLE1BQU9oQyxHQUNQLE9BQU8sQyxDQUlULEdBQUlxWSxFQUFHdFgsUUFBVXVYLEVBQUd2WCxPQUNsQixPQUFPLEVBS1QsSUFIQXNYLEVBQUdFLE9BQ0hELEVBQUdDLE9BRUVuWSxFQUFJaVksRUFBR3RYLE9BQVMsRUFBR1gsR0FBSyxFQUFHQSxJQUM5QixHQUFJaVksRUFBR2pZLElBQU1rWSxFQUFHbFksR0FDZCxPQUFPLEVBSVgsSUFBS0EsRUFBSWlZLEVBQUd0WCxPQUFTLEVBQUdYLEdBQUssRUFBR0EsSUFFOUIsSUFBS3dYLEVBQVVuWCxFQURmeVYsRUFBTW1DLEVBQUdqWSxJQUNjNEIsRUFBRWtVLEdBQU02QixHQUFPLE9BQU8sRUFFL0MsY0FBY3RYLFVBQWF1QixDLENBbkVsQndXLENBQVNYLEVBQVFDLEVBQVVDLEcsRUFJdEMsU0FBU0csRUFBa0JoSixHQUN6QixPQUFPQSxPLENBR1QsU0FBU2tKLEVBQVV6SCxHQUNqQixTQUFLQSxHQUFrQixpQkFBTkEsR0FBc0MsaUJBQWJBLEVBQUU1UCxVQUN0QixtQkFBWDRQLEVBQUU4SCxNQUEwQyxtQkFBWjlILEVBQUVqRCxTQUd6Q2lELEVBQUU1UCxPQUFTLEdBQXFCLGlCQUFUNFAsRUFBRSxJLHlCQ3hCL0IsU0FBVStILEdBR1IsSUFDUUMsRUFDQUMsRUFDQUMsRUFISkMsR0FDSUgsRUFBUSxtRUFDUkMsRUFBVyx1SUFDWEMsRUFBZSxjQUdaLFNBQVVFLEVBQU1DLEVBQU1DLEVBQUtDLEdBY2hDLEdBWHlCLElBQXJCakQsVUFBVWxWLFFBQWlDLFdBQWpCb1ksRUFBT0osSUFBdUIsS0FBSy9MLEtBQUsrTCxLQUNwRUMsRUFBT0QsRUFDUEEsT0FBT3pFLElBR1R5RSxFQUFPQSxHQUFRLElBQUl4QyxnQkFFRUEsT0FDbkJ3QyxFQUFPLElBQUl4QyxLQUFLd0MsSUFHZEssTUFBTUwsR0FDUixNQUFNbE0sVUFBVSxnQkFNbEIsSUFBSXdNLEdBSEpMLEVBQU8xSSxPQUFPd0ksRUFBV1EsTUFBTU4sSUFBU0EsR0FBUUYsRUFBV1EsTUFBZSxVQUdyRDVMLE1BQU0sRUFBRyxHQUNaLFNBQWQyTCxHQUFzQyxTQUFkQSxJQUMxQkwsRUFBT0EsRUFBS3RMLE1BQU0sR0FDbEJ1TCxHQUFNLEVBQ1ksU0FBZEksSUFDRkgsR0FBTSxJQUlWLElBQUlLLEVBQUlOLEVBQU0sU0FBVyxNQUNyQk8sRUFBSVQsRUFBS1EsRUFBSSxVQUNiRSxFQUFJVixFQUFLUSxFQUFJLFNBQ2JHLEVBQUlYLEVBQUtRLEVBQUksV0FDYnhJLEVBQUlnSSxFQUFLUSxFQUFJLGNBQ2JJLEVBQUlaLEVBQUtRLEVBQUksV0FDYkssRUFBSWIsRUFBS1EsRUFBSSxhQUNialgsRUFBSXlXLEVBQUtRLEVBQUksYUFDYk0sRUFBSWQsRUFBS1EsRUFBSSxrQkFDYnBaLEVBQUk4WSxFQUFNLEVBQUlGLEVBQUtlLG9CQUNuQkMsRUFBSUMsRUFBUWpCLEdBQ1prQixFQUFJQyxFQUFhbkIsR0FDakJvQixFQUFRLENBQ1ZYLEVBQU1BLEVBQ05ZLEdBQU1DLEVBQUliLEdBQ1ZjLElBQU14QixFQUFXeUIsS0FBS0MsU0FBU2YsR0FDL0JnQixLQUFNM0IsRUFBV3lCLEtBQUtDLFNBQVNmLEVBQUksR0FDbkNDLEVBQU1BLEVBQUksRUFDVmdCLEdBQU1MLEVBQUlYLEVBQUksR0FDZGlCLElBQU03QixFQUFXeUIsS0FBS0ssV0FBV2xCLEdBQ2pDbUIsS0FBTS9CLEVBQVd5QixLQUFLSyxXQUFXbEIsRUFBSSxJQUNyQ29CLEdBQU14SyxPQUFPUyxHQUFHckQsTUFBTSxHQUN0QnFOLEtBQU1oSyxFQUNOMU8sRUFBTXNYLEVBQUksSUFBTSxHQUNoQnFCLEdBQU1YLEVBQUlWLEVBQUksSUFBTSxJQUNwQkEsRUFBTUEsRUFDTnNCLEdBQU1aLEVBQUlWLEdBQ1ZDLEVBQU1BLEVBQ05zQixHQUFNYixFQUFJVCxHQUNWdFgsRUFBTUEsRUFDTjZZLEdBQU1kLEVBQUkvWCxHQUNWQyxFQUFNOFgsRUFBSVIsRUFBRyxHQUNiQSxFQUFNUSxFQUFJcFksS0FBS3VMLE1BQU1xTSxFQUFJLEtBQ3pCM1osRUFBTXlaLEVBQUksR0FBS2IsRUFBV3lCLEtBQUthLFVBQVUsR0FBS3RDLEVBQVd5QixLQUFLYSxVQUFVLEdBQ3hFQyxHQUFNMUIsRUFBSSxHQUFLYixFQUFXeUIsS0FBS2EsVUFBVSxHQUFLdEMsRUFBV3lCLEtBQUthLFVBQVUsR0FDeEVFLEVBQU0zQixFQUFJLEdBQUtiLEVBQVd5QixLQUFLYSxVQUFVLEdBQUt0QyxFQUFXeUIsS0FBS2EsVUFBVSxHQUN4RUcsR0FBTTVCLEVBQUksR0FBS2IsRUFBV3lCLEtBQUthLFVBQVUsR0FBS3RDLEVBQVd5QixLQUFLYSxVQUFVLEdBQ3hFSSxFQUFNdEMsRUFBTSxNQUFRRCxFQUFNLE9BQVMzSSxPQUFPeUksR0FBTTlMLE1BQU0yTCxJQUFhLENBQUMsS0FBSzZDLE1BQU1yTyxRQUFReUwsRUFBYyxJQUNyRzFZLEdBQU9BLEVBQUksRUFBSSxJQUFNLEtBQU9rYSxFQUFtQyxJQUEvQnBZLEtBQUtxTixNQUFNck4sS0FBS3laLElBQUl2YixHQUFLLElBQVk4QixLQUFLeVosSUFBSXZiLEdBQUssR0FBSSxHQUN2RndiLEVBQU0sQ0FBQyxLQUFNLEtBQU0sS0FBTSxNQUFNbkMsRUFBSSxHQUFLLEVBQUksR0FBS0EsRUFBSSxJQUFNQSxFQUFJLElBQU0sSUFBTUEsRUFBSSxJQUMvRU8sRUFBTUEsRUFDTkUsRUFBTUEsR0FHUixPQUFPakIsRUFBSzVMLFFBQVF1TCxHQUFPLFNBQVUxTCxHQUNuQyxPQUFJQSxLQUFTa04sRUFDSkEsRUFBTWxOLEdBRVJBLEVBQU1TLE1BQU0sRUFBR1QsRUFBTWxNLE9BQVMsRSxNQW9DL0MsU0FBU3NaLEVBQUlwRixFQUFLbEQsR0FHaEIsSUFGQWtELEVBQU0zRSxPQUFPMkUsR0FDYmxELEVBQU1BLEdBQU8sRUFDTmtELEVBQUlsVSxPQUFTZ1IsR0FDbEJrRCxFQUFNLElBQU1BLEVBRWQsT0FBT0EsQyxDQVdULFNBQVMrRSxFQUFRakIsR0FFZixJQUFJNkMsRUFBaUIsSUFBSXJGLEtBQUt3QyxFQUFLOEMsY0FBZTlDLEVBQUsrQyxXQUFZL0MsRUFBS2dELFdBR3hFSCxFQUFlSSxRQUFRSixFQUFlRyxXQUFjSCxFQUFlSyxTQUFXLEdBQUssRUFBSyxHQUd4RixJQUFJQyxFQUFnQixJQUFJM0YsS0FBS3FGLEVBQWVDLGNBQWUsRUFBRyxHQUc5REssRUFBY0YsUUFBUUUsRUFBY0gsV0FBY0csRUFBY0QsU0FBVyxHQUFLLEVBQUssR0FHckYsSUFBSUUsRUFBS1AsRUFBZTlCLG9CQUFzQm9DLEVBQWNwQyxvQkFLNUQsT0FKQThCLEVBQWVRLFNBQVNSLEVBQWVTLFdBQWFGLEdBSTdDLEVBQUlsYSxLQUFLcU4sT0FEQXNNLEVBQWlCTSxHQUFhLE8sQ0FXaEQsU0FBU2hDLEVBQWFuQixHQUNwQixJQUFJdUQsRUFBTXZELEVBQUtrRCxTQUlmLE9BSFcsSUFBUkssSUFDREEsRUFBTSxHQUVEQSxDLENBUVQsU0FBU25ELEVBQU9sRSxHQUNkLE9BQVksT0FBUkEsRUFDSyxZQUdHWCxJQUFSVyxFQUNLLFlBR1UsaUJBQVJBLFNBQ0tBLEVBR1pqSCxNQUFNQyxRQUFRZ0gsR0FDVCxRQUdGLEdBQUdoRyxTQUFTbk8sS0FBS21VLEdBQ3JCdkgsTUFBTSxHQUFJLEdBQUdYLGEsQ0E1R2hCK0wsRUFBV1EsTUFBUSxDQUNqQmlELFFBQXlCLDJCQUN6QkMsVUFBeUIsU0FDekJDLFdBQXlCLGNBQ3pCQyxTQUF5QixlQUN6QkMsU0FBeUIscUJBQ3pCQyxVQUF5QixVQUN6QkMsV0FBeUIsYUFDekJDLFNBQXlCLGVBQ3pCQyxRQUF5QixhQUN6QkMsUUFBeUIsV0FDekJDLFlBQXlCLHlCQUN6QkMsZUFBeUIsK0JBQ3pCQyxvQkFBeUIsK0JBSTNCckUsRUFBV3lCLEtBQU8sQ0FDaEJDLFNBQVUsQ0FDUixNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUMxQyxTQUFVLFNBQVUsVUFBVyxZQUFhLFdBQVksU0FBVSxZQUVwRUksV0FBWSxDQUNWLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUM3RSxVQUFXLFdBQVksUUFBUyxRQUFTLE1BQU8sT0FBUSxPQUFRLFNBQVUsWUFBYSxVQUFXLFdBQVksWUFFaEhRLFVBQVcsQ0FDVCxJQUFLLElBQUssS0FBTSxLQUFNLElBQUssSUFBSyxLQUFNLE9BMkZ4Q3BhLEVBQUFILFFBQWlCaVksQ0FJcEIsQ0F0TkQsRSxJSkRJc0UsRUFBTSxHQU9WQyxFQW9CQSxTQUFnQnpRLEVBQUt3QixHQUNuQixHQUFtQixpQkFBUnhCLEVBQ1QsTUFBTSxJQUFJQyxVQUFVLHFCQUl0QixHQUFZLElBQVJ1QixFQUFXLE9BQU94QixFQUN0QixHQUFZLElBQVJ3QixFQUFXLE9BQU94QixFQUFNQSxFQUU1QixJQUFJMUssRUFBTTBLLEVBQUk3TCxPQUFTcU4sRUFDdkIsR0FBSWdKLElBQVV4SyxRQUF3QixJQUFWd0ssRUFDMUJBLEVBQVF4SyxFQUNSd1EsRUFBTSxRQUNELEdBQUlBLEVBQUlyYyxRQUFVbUIsRUFDdkIsT0FBT2tiLEVBQUlFLE9BQU8sRUFBR3BiLEdBR3ZCLEtBQU9BLEVBQU1rYixFQUFJcmMsUUFBVXFOLEVBQU0sR0FDckIsRUFBTkEsSUFDRmdQLEdBQU94USxHQUdUd0IsSUFBUSxFQUNSeEIsR0FBT0EsRUFLVCxPQURBd1EsR0FEQUEsR0FBT3hRLEdBQ0cwUSxPQUFPLEVBQUdwYixFLEVLeER0QixJQ0xJcWIsRUFERUMsRUFBQSxXQUFPLEVBRVRDLEVBQWMsQ0FBRUMsVUFBVyxHQUFJQyxPQUFRLEdBQUlDLE9BQVEsSUFRakRDLEVBQXFCLENBQ3pCLFlBQ0EsYUFDQSxjQUdGLFNBQVNDLEVBQVFDLEVBQVNoRyxHQUN4QixZLFVBRCtCLElBQ3hCLElBQUlpRyxTQUFKLFNBQWFDLEVBQVNDLEdBQzNCbkcsRUFBTzdDLEVBQU8sR0FBSXVJLEVBQWExRixHQUMvQixJQUFNb0csRUFBV0MsRUFBZ0J6SixPQUFPUSxPQUFPLEdBQUk0QyxFQUFNLENBQ3ZEMkYsVUFBVyxHQUNYVyxXQUFPL0osS0FFSGdLLEVBQU9QLEVBQVUsY0FBZ0IsWUFDakNRLEVBQVN2SCxJQUNmLE9BQUl1SCxHQUFVQSxFQUFPQyxRQUFrQyxtQkFBakJELEVBQU9ELEdBQ3BDQyxFQUFPRCxHQUFNcEosRUFBTyxHQUFJNkMsRUFBTSxDLFNBQUVvRyxLQUNwQ3pILE1BREksU0FDQytILEdBQUEsT0FBTVIsRUFBUVEsRUFBQSxJQUVmUixFQUFRLEMsU0FBRUUsRUFBVUksUUFBUSxHLElBOENsQyxTQUFTRyxFQUFhQyxFQUFTNUcsR0FDcEMsWSxVQUQyQyxJQXJCN0MsU0FBZ0M0RyxHQUM5QixPQUFPLElBQUlYLFNBQUosU0FBYUMsR0FDbEIsSUFBTVcsRUFBYUQsRUFBUUUsUUFBUSxLQUNuQyxJQUFvQixJQUFoQkQsRUFBSixDQVdBLElBUEEsSUFBTUUsRUFBU0gsRUFBUWpSLE1BQU1rUixFQUFhLEdBQ3BDRyxFQUFhbkksT0FBT29JLEtBQUtGLEdBQ3pCM1IsRUFBT3dSLEVBQVFqUixNQUFNLEVBQUdrUixHQUN4QkssRUFBWSxlQUFlL1IsS0FBS0MsR0FDaEMrUixHQUFRRCxFQUFZQSxFQUFVLEdBQUssVUFBTzNLLEVBQzFDNkssRUFBSyxJQUFJQyxZQUFZTCxFQUFXaGUsUUFDaENzZSxFQUFLLElBQUlDLFdBQVdILEdBQ2pCL2UsRUFBSSxFQUFHQSxFQUFJMmUsRUFBV2hlLE9BQVFYLElBQ3JDaWYsRUFBR2pmLEdBQUsyZSxFQUFXUSxXQUFXbmYsR0FFaEM2ZCxFQUFRLElBQUlySCxPQUFPNEksS0FBSyxDQUFFTCxHQUFNLENBQUVoUyxLQUFNK1IsSSxNQWJ0Q2pCLEVBQVEsSUFBSXJILE9BQU80SSxLLElBa0JoQkMsQ0FBc0JkLEdBQzFCakksTUFESSxTQUNDZ0osR0FBQSxPQUFRQyxFQUFTRCxFQUFNM0gsRUFBQSxHLENBRzFCLFNBQVM0SCxFQUFVRCxFQUFNM0gsR0FDOUIsWSxVQURxQyxJQUM5QixJQUFJaUcsU0FBSixTQUFZQyxHQUVqQixJQUFNRSxHQUROcEcsRUFBTzdDLEVBQU8sR0FBSXVJLEVBQWExRixJQUNUb0csU0FFaEJJLEVBQVN2SCxJQUNmLEdBQUl1SCxHQUFxQyxtQkFBcEJBLEVBQU9vQixVQUEyQnBCLEVBQU9DLE9BRTVELE9BQU9ELEVBQU9vQixTQUFTRCxFQUFNeEssRUFBTyxHQUFJNkMsRUFBTSxDLFNBQUVvRyxLQUM3Q3pILE1BREksU0FDQytILEdBQUEsT0FBTVIsRUFBUVEsRUFBQSxJQUdqQmxCLEtBQ0hBLEVBQU9wRyxTQUFTeUksY0FBYyxNQUN6QnBlLE1BQU1xZSxXQUFhLFNBQ3hCdEMsRUFBS3pILE9BQVMsVUFFaEJ5SCxFQUFLdUMsU0FBVzNCLEVBQ2hCWixFQUFLd0MsS0FBT25KLE9BQU9vSixJQUFJQyxnQkFBZ0JQLEdBQ3ZDdkksU0FBUytJLEtBQUtDLFlBQVk1QyxHQUMxQkEsRUFBSzZDLFFBQUwsV0FDRTdDLEVBQUs2QyxRQUFVNUMsRUFDZjZDLFlBQUEsV0FDRXpKLE9BQU9vSixJQUFJTSxnQkFBZ0JaLEdBQ3ZCbkMsRUFBS2dELGVBQWVoRCxFQUFLZ0QsY0FBY0MsWUFBWWpELEdBQ3ZEQSxFQUFLa0QsZ0JBQWdCLFFBQ3JCeEMsRUFBUSxDLFNBQUVFLEVBQVVJLFFBQVEsRyxLQUdoQ2hCLEVBQUttRCxPLElBc0JKLFNBQVN0QyxFQUFpQi9KLEdBSS9CLFEsVUFKcUMsSUFJYixtQkFIeEJBLEVBQU1hLEVBQU8sR0FBSWIsSUFHRnNNLEtBQ2IsT0FBT3RNLEVBQUlzTSxLQUFLdE0sR0FDWCxHQUFJQSxFQUFJc00sS0FDYixPQUFPdE0sRUFBSXNNLEtBR2IsSUFLTUMsRUQ1STBCaFUsRUFBS3dCLEVBQUt5UyxFQ3VJdEN4QyxFQUFRLEtBQ1JYLEVBQVksSUFDYSxpQkFBbEJySixFQUFJcUosWUFBd0JBLEVBQVlySixFQUFJcUosV0FFOUIsaUJBQWRySixFQUFJZ0ssU0FHWHVDLEVBRDZCLGlCQUFwQnZNLEVBQUl1TSxZQUNDdk0sRUFBSXVNLFlBRUozZSxLQUFLQyxJQUFJLElBQU9tUyxFQUFJZ0ssT0RoSk56UixFQ2tKZDBELE9BQU8rRCxFQUFJZ0ssT0RsSlFqUSxFQ2tKQWtDLE9BQU9zUSxHQUFhN2YsT0RsSmY4ZixFQ2tKdUIsSURqSmpFalUsRUFBTUEsRUFBSXFDLFdDaUpSb1AsT0QvSWlCLElBQVJqUSxFQUNGeEIsR0FJUGlVLEVBRFMsSUFBUEEsRUFDRyxJQUNJQSxFQUNKQSxFQUFHNVIsV0FFSCxJQUdBb08sRUFBT3dELEVBQUl6UyxFQUFNeEIsRUFBSTdMLFFBQVU2TCxJQ3NJdEMsSUFBTWtVLEVBQVczZCxTQUFTa1IsRUFBSTBNLGNBQWdCNWQsU0FBU2tSLEVBQUkyTSxRQUFVM00sRUFBSTBNLFlBQWMsRUFBdEUsR0FBNkUxTSxFQUFJLE1BQVUsR0FDNUcsT0FBYSxNQUFUZ0ssRUFDSyxDQUFFeUMsRUFBVXpDLEdBQVE0QyxPQUFPQyxTQUFTcFQsS0FBSyxLQUFPNFAsRUFHaEQsQ0FBRXJKLEVBQUlzSixPQUFRdEosRUFBSThNLE1BREQ5TSxFQUFJK00sVUFDc0JOLEVBQVV6TSxFQUFJZ04sS0FBTWhOLEVBQUl1SixRQUFTcUQsT0FBT0MsU0FBU3BULEtBQUssS0FBTzRQLEMsQ0NwS25ILElBQU00RCxFQUFjLENBQ2xCQyxVQUFXLGFBQ1hDLFNBQVUsVUFDVkMsVUFBVyxVQUNYQyxLQUFNLFFBQ05DLEdBQUksS0FDSkMsV0FBWSxZQUNaQyxRQUFTLE9BQ1RDLGFBQWMsVUFJVkMsRUFBVSxDQUNkLGFBQWMsUUFBUyxnQkFBaUIsY0FDeEMsYUFBYyxjQUFlLFFBQVMsYUFDdEMsbUJBQW9CLGdCQUFpQixlQUNyQyxlQUFnQixjQUFlLFNBQVUsVUFBVyxhQUNwRCxTQUFVLE9BQVEsT0FBUSxTQUFVLFNBQVUsVUFBVyxVQUN6RCxPQUFRLFdBQVksY0FBZSxNQUFPLGVBQWdCLFlBQzFELFFBQVMsT0FBUSxRQUFTLFlBQWEsVUFBVyxLQUFNLEtBQ3hELG9CQUFxQixPQUFRLFNBQVUsV0FBWSxtQkFLeENDLEVBQUEsU0FBaUJDLEdBQ2Z0TixPQUFPZ0IsS0FBS3NNLEdBQ3BCeE0sU0FBTCxTQUFhUyxHQUNQQSxLQUFPb0wsRUFFVFksUUFBUUMsS0FBUixvREFBaUVqTSxFQUFBLG9CQURsRG9MLEVBQVlwTCxHQUM2RCxNQUM5RTZMLEVBQVFLLFNBQVNsTSxJQUMzQmdNLFFBQVFDLEtBQVIsb0RBQWlFak0sRUFBQSxJLEtDakN2RSxJQXdGQW1NLEVBdEZhLENBR1gsQ0FBRSxXQUFZLE1BQU8sT0FDckIsQ0FBRSxlQUFnQixJQUFLLEtBQ3ZCLENBQUUsU0FBVSxJQUFLLEtBQ2pCLENBQUUsZUFBZ0IsSUFBSyxLQUN2QixDQUFFLGdCQUFpQixLQUFNLE1BR3pCLENBQUUsS0FBTSxHQUFJLElBQ1osQ0FBRSxLQUFNLEdBQUksS0FDWixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsTUFBTyxJQUFLLEtBQ2QsQ0FBRSxNQUFPLElBQUssS0FDZCxDQUFFLE1BQU8sSUFBSyxLQUdkLENBQUUsS0FBTSxJQUFLLE1BQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLEdBQUksS0FDWixDQUFFLEtBQU0sR0FBSSxJQUNaLENBQUUsS0FBTSxHQUFJLElBQ1osQ0FBRSxNQUFPLEdBQUksSUFDYixDQUFFLE1BQU8sS0FBTSxNQUNmLENBQUUsTUFBTyxLQUFNLE1BQ2YsQ0FBRSxLQUFNLElBQU0sTUFDZCxDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsTUFBTyxJQUFLLE1BQ2QsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLE1BQU8sSUFBSyxLQUNkLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLEdBQUksS0FDWixDQUFFLEtBQU0sR0FBSSxJQUNaLENBQUUsS0FBTSxHQUFJLElBQ1osQ0FBRSxNQUFPLEdBQUksSUFDYixDQUFFLE1BQU8sR0FBSSxJQUNiLENBQUUsTUFBTyxHQUFJLElBQ2IsQ0FBRSxLQUFNLElBQUssTUFDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sR0FBSSxLQUNaLENBQUUsS0FBTSxHQUFJLElBQ1osQ0FBRSxLQUFNLEdBQUksSUFDWixDQUFFLE1BQU8sR0FBSSxJQUNiLENBQUUsTUFBTyxHQUFJLElBQ2IsQ0FBRSxNQUFPLEdBQUksSUFJYixDQUFFLGNBQWUsSUFBSyxJQUFL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