@datagrok/eda 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/package.js CHANGED
@@ -1,2 +1,2 @@
1
- var eda;(()=>{"use strict";var t={m:{},d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},u:t=>t+".js"};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var e;t.g.importScripts&&(e=t.g.location+"");var n=t.g.document;if(!e&&n&&(n.currentScript&&(e=n.currentScript.src),!e)){var r=n.getElementsByTagName("script");if(r.length)for(var a=r.length-1;a>-1&&!e;)e=r[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),t.p=e})(),t.b=document.baseURI||self.location.href;var e={};t.r(e),t.d(e,{PCA:()=>Pe,PLS:()=>Le,_package:()=>ke,applyLinearKernelSVM:()=>Re,applyPolynomialKernelSVM:()=>Me,applyRBFkernelSVM:()=>Te,applySigmoidKernelSVM:()=>$e,demoMultivariateAnalysis:()=>Ee,info:()=>De,init:()=>Fe,testDataLinearNonSeparable:()=>xe,testDataLinearSeparable:()=>Ie,trainLinearKernelSVM:()=>Ve,trainPolynomialKernelSVM:()=>Be,trainRBFkernelSVM:()=>Ne,trainSigmoidKernelSVM:()=>Oe});const n=grok,r=ui,a=DG;var o;function i(t){return e=this,n=void 0,a=function*(){yield new Promise((e=>setTimeout(e,t)))},new((r=void 0)||(r=Promise))((function(t,o){function i(t){try{l(a.next(t))}catch(t){o(t)}}function s(t){try{l(a.throw(t))}catch(t){o(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r((function(t){t(n)}))).then(i,s)}l((a=a.apply(e,n||[])).next())}));var e,n,r,a}!function(t){t.notNull=function(t,e){if(null==t)throw new Error(`${null==e?"Value":e} not defined`)}}(o||(o={}));var s=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};class l{constructor(t,e,n=!1,a){var o;this.name="",this.description="",this._isAutomatic=!1,this._autoStartFirstStep=!1,this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._isStepProcessed=!1,this._root=r.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._steps=[],this._mainHeader=r.panel([],"tutorials-main-header"),this._header=r.h2(""),this._headerDiv=r.divH([],"tutorials-root-header"),this._stopStartBtn=r.button(r.iconFA("pause"),(()=>this._changeStopState()),"Play / pause"),this._restartBtn=r.button(r.iconFA("redo"),(()=>this._restartScript()),"Restart"),this._nextStepBtn=r.button(r.iconFA("play"),(()=>{this._isStepProcessed||this._nextStep()}),"Next step"),this._activity=r.panel([],"tutorials-root-description"),this._progressDiv=r.divV([],"tutorials-root-progress"),this._progress=r.element("progress"),this._progressSteps=r.divText(""),this._closeBtn=r.button(r.iconFA("chevron-left"),(()=>this._closeDock()),"Back to demo"),this.name=t,this.description=e,this._isAutomatic=n,this._autoStartFirstStep=null!==(o=null==a?void 0:a.autoStartFirstStep)&&void 0!==o&&o,this._progress.max=0,this._progress.value=1,l.currentObject=this}get steps(){return this._steps}get stepNumber(){return this._steps.length}_addHeader(){this._createHeaderDiv(),this._createProgressDiv(),this._mainHeader.append(this._headerDiv,this._progressDiv)}_createHeaderDiv(){this._header.innerText=this.name,this._headerDiv.append(this._closeBtn),this._headerDiv.append(this._header),this._nextStepBtn.firstChild.className="grok-icon fas fa-play",this._headerDiv.append(this._isAutomatic?this._stopStartBtn:this._nextStepBtn)}_createProgressDiv(){this._progress.max=this.stepNumber,this._progressDiv.append(this._progress),this._progressSteps=r.divText(`Step: ${this._progress.value} of ${this.stepNumber}`),this._progressDiv.append(this._progressSteps)}_addDescription(){var t;this._activity.append(r.div(this.description,"tutorials-root-description"));for(let e=0;e<this.stepNumber;e++){let n=r.iconFA("clock");this._isAutomatic||0===e&&(n=r.iconFA("play",(()=>this._nextStep()),"Next step"),n.className="grok-icon fas fa-play");const a=r.div(this._steps[e].name,"grok-tutorial-entry-instruction"),o=r.div(null===(t=this._steps[e].options)||void 0===t?void 0:t.description,"grok-tutorial-step-description hidden"),i=r.divH([n,a],"grok-tutorial-entry");this._activity.append(i,o)}}_initRoot(){var t,e,r;n.shell.windows.showContextPanel=!0,n.shell.windows.showHelp=!1;const o=Array.from(n.shell.dockManager.rootNode.children)[0];this._node=n.shell.dockManager.dock(this._root,a.DOCK_TYPE.FILL,o,""),(null===(e=null===(t=o.parent.container.containerElement.firstElementChild)||void 0===t?void 0:t.lastElementChild)||void 0===e?void 0:e.classList.contains("tab-handle-list-container"))&&(null===(r=o.parent.container.containerElement.firstElementChild)||void 0===r||r.lastElementChild.remove()),this._node.container.containerElement.classList.add("tutorials-demo-script-container"),this._addHeader(),this._root.append(this._mainHeader),this._addDescription(),this._root.append(this._activity)}_nextStep(){var t,e;return s(this,void 0,void 0,(function*(){this._isStepProcessed=!0,this._isAutomatic||(this._nextStepBtn.classList.add("disabled"),this._nextStepBtn.firstChild.classList.add("fa-disabled"));const n=this._activity.getElementsByClassName("grok-tutorial-entry")[this._currentStep],a=this._activity.getElementsByClassName("grok-icon")[this._currentStep],o=this._activity.getElementsByClassName("grok-tutorial-step-description")[this._currentStep];a.className="grok-icon far fa-spinner-third fa-spin",o.classList.remove("hidden"),o.classList.add("visible");const s=n,l=(null===(t=this._steps[this._currentStep].options)||void 0===t?void 0:t.delay)?null===(e=this._steps[this._currentStep].options)||void 0===e?void 0:e.delay:2e3;yield this._steps[this._currentStep].func(),this._scrollTo(this._root,s.offsetTop-this._mainHeader.offsetHeight),yield this._countdown(n,a,l),yield i(l);const c=r.iconFA("check");if(a.replaceWith(c),c.className="grok-icon far fa-check",this._progress.value++,this._progressSteps.innerText=`Step: ${this._progress.value} of ${this.stepNumber}`,this._currentStep++,this._isStepProcessed=!1,this._currentStep!==this.stepNumber){if(!this._isAutomatic){const t=this._activity.getElementsByClassName("grok-icon")[this._currentStep],e=r.iconFA("play",(()=>this._nextStep()),"Next step");e.className="grok-icon fas fa-play",t.replaceWith(e),this._nextStepBtn.classList.remove("disabled"),this._nextStepBtn.firstChild.classList.remove("fa-disabled")}}else this._isAutomatic?this._stopStartBtn.replaceWith(this._restartBtn):this._nextStepBtn.replaceWith(this._restartBtn)}))}_startScript(){return s(this,void 0,void 0,(function*(){for(let t=this._currentStep;t<this.stepNumber&&!this._isStopped&&!this._isCancelled;t++)yield this._nextStep()}))}_scrollTo(t,e){t.focus(),t.scrollTop=e}_countdown(t,e,n){return s(this,void 0,void 0,(function*(){const a=r.div([],"demo-script-countdown");e.classList.add("hidden");let o=n/1e3;const i=this._createSVGIndicator(o);a.append(i),t.prepend(a);const s=setInterval((()=>{o--,0===o&&(clearInterval(s),a.remove(),e.classList.remove("hidden"),e.classList.add("visible"))}),1e3)}))}_createSVGIndicator(t){const e=document.createElementNS("http://www.w3.org/2000/svg","svg"),n=document.createElementNS("http://www.w3.org/2000/svg","circle");return n.setAttributeNS(null,"cx","7"),n.setAttributeNS(null,"cy","7"),n.setAttributeNS(null,"r","6"),n.setAttributeNS(null,"style",`animation: countdown ${t}s linear infinite forwards`),e.append(n),e}_changeStopState(){const t=this._stopStartBtn.getElementsByClassName("grok-icon");t[0].className="grok-icon fas fa-play",this._isStopped=!this._isStopped,this._isStopped||(t[0].className="grok-icon fal fa-pause",this._isStepProcessed||this._startScript())}_restartScript(){n.shell.dockManager.close(this._node),n.shell.closeAll(),this._clearRoot(),this._setInitParams(),this.start()}_clearRoot(){this._root=r.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._mainHeader=r.panel([],"tutorials-main-header"),this._header=r.h2(""),this._headerDiv=r.divH([],"tutorials-root-header"),this._activity=r.panel([],"tutorials-root-description"),this._progressDiv=r.divV([],"tutorials-root-progress"),this._progress=r.element("progress"),this._progressSteps=r.divText(""),this._progress.max=0,this._progress.value=1}_setInitParams(){this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._stopStartBtn.getElementsByClassName("grok-icon")[0].className="grok-icon fal fa-pause",this._nextStepBtn.classList.remove("disabled")}_closeDock(){n.shell.dockManager.close(this._node),this.cancelScript()}cancelScript(){this._isCancelled=!0,l.currentObject=null}step(t,e,n){return this._steps[this.steps.length]={name:t,func:e,options:n},this}start(){return s(this,void 0,void 0,(function*(){this._initRoot(),n.shell.newView(this.name),this._isAutomatic?this._startScript():this._autoStartFirstStep&&(yield this._nextStep())}))}}l.currentObject=null,Int32Array,Float32Array,DG.Column.fromInt32Array,DG.Column.fromFloat32Array;const c="num",u="floatColumn",m="intColumn",d="floatColumns",h="newFloatColumns",p="intColumns",f="newIntColumns",y="newFloatColumn",v="newIntColumn",w="column",g="_callResult",_="numOfRows",b="numOfColumns",S="ref",C="value",A="tableFromColumns",k="objects",D="int",F="double",P={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array};function L(t,e){let n,r=[],a=0;for(const o in t){const i=t[o],s=i.type;if(o!==g){switch(s){case c:case D:case F:i.data=e[a],a++;break;case m:case u:let r,o=e[a];r=o.type===D&&s===m||o.type===F&&s===u?o.getRawData():new P[s](o.getRawData()),i.data={array:r,numOfRows:r.length},a++;break;case v:case y:let l=0;n=i[_][S],l=t[n].type===c?t[n].data:t[n].data[i[_][C]],i.data={numOfRows:l},a++;break;case p:case d:let w=[];for(let t of e[a].toList())t.type===D&&s===m||t.type===F&&s===u?w.push(t.getRawData()):w.push(new P[s](t.getRawData()));i.data={arrays:w,numOfRows:w[0].length,numOfColumns:w.length},a++;break;case f:case h:let g=0,A=0;n=i[_][S],g=t[n].type===c?t[n].data:t[n].data[i[_][C]],n=i[b][S],A=t[n].type===c?t[n].data:t[n].data[i[b][C]],i.data={numOfRows:g,numOfColumns:A},a++;break;default:return}r.push(i)}}return r}function E(t,e){t.arguments._callResult=e.callResult,function(t,e){const n={newFloatColumns:DG.Column.fromFloat32Array,newIntColumns:DG.Column.fromInt32Array,newFloatColumn:DG.Column.fromFloat32Array,newIntColumn:DG.Column.fromInt32Array};let r=0;for(const a in t){const o=t[a];switch(o.type){case c:case D:case F:case m:case u:case d:case p:break;case y:case v:let t;null==o.name?t=(0).toString():s=o.name,o.column=n[o.type](t,e[r].array);break;case f:case h:let a=[],i=e[r].arrays.length,s=[];if(null==o.names)for(let t=1;t<=i;t++)s.push(t.toString());else s=o.names;for(let t=0;t<i;t++)a.push(n[o.type](s[t],e[r].arrays[t]));o.columns=a}r++}}(t.arguments,e.args);let n=function(t){let e=t.output;const n={newFloatColumns:"columns",newIntColumns:"columns",newFloatColumn:"column",newIntColumn:"column"};switch(e.type){case c:case D:case F:return t.arguments[e.source];case w:return t.arguments[e.source].column;case A:return DG.DataFrame.fromColumns(t.arguments[e.source].columns);case k:let r=[];for(let a of e.source){let e=t.arguments[a];r.push(e[n[e.type]])}return r}}(t);return function(t){for(const e in t){const n=t[e];switch(n.type){case c:case D:case F:case m:case u:case p:case d:break;case v:case y:n.column=null;break;case f:case h:n.columns=null}}}(t.arguments),n}const I=1,x=1,V=1,R=0,N=100,T=1e8,B="components must be positive.",M="components must not be greater than feautures count.",O="min must be less than max.",$="features must be positive.",H="samples must be positive.",W="violators percentage must be from the range from 0 to 100.",j="dataframe is too big.";function G(t,e){if(e<I)throw new Error(B);if(e>t.length)throw new Error(M);if(t.length*t.byIndex(0).length>T)throw new Error(j)}var z=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};function K(e,n,r,a){return z(this,void 0,void 0,(function*(){let e;G(n,a);let o=async function(e,n,r,a){return new Promise(((e,o)=>{const i=new Worker(new URL(t.p+t.u(93),t.b));i.postMessage(L(EDA.partialLeastSquareRegression.arguments,[n,r,a])),i.onmessage=function(t){i.terminate(),e(E(EDA.partialLeastSquareRegression,t.data))}}))}(0,n,r,a);return yield o.then((t=>{e=t}),(t=>{throw new Error(`Error: ${t}`)})),e}))}function U(t,e,n){n.name=e.name+"(predicted)";let r=a.DataFrame.fromColumns([t,e,n]);return r.name="Reference vs. Predicted",a.Viewer.scatterPlot(r,{title:r.name,x:e.name,y:n.name,showRegressionLine:!0,markerType:"circle",labels:t.name})}function q(t,e){e.name="regression coefficient";let n=[];for(const e of t)n.push(e.name);let r=a.Column.fromStrings("feature",n),o=a.DataFrame.fromColumns([r,e]);return o.name="Regression Coefficients",a.Viewer.barChart(o,{title:o.name,split:"feature",value:"regression coefficient",valueAggrType:"avg"})}function Y(t,e,n){let r=[t];for(let t=0;t<e.length;t++)e[t].name=`x.score.t${t+1}`,r.push(e[t]);for(let t=0;t<n.length;t++)n[t].name=`y.score.u${t+1}`,r.push(n[t]);let o=a.DataFrame.fromColumns(r);o.name="Scores";const i=e.length>1?1:0;return a.Viewer.scatterPlot(o,{title:o.name,x:e[0].name,y:e[i].name,markerType:"circle",labels:t.name})}var J=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};const Q=0,X=1,Z="Feature #",tt="Label";function et(){return a.DataFrame.fromColumns([a.Column.fromStrings("model",["alfaromeo","audi","bmw","chevrolet","dodge1","dodge2","honda1","honda2","isuzu","jaguar","mazda","mercedes","mercury","mitsubishi","nissan1","nissan2","peugot","plymouth","porsche","saab","subaru","toyota1","toyota2","toyota3","toyota4","volkswagen1","volkswagen2","volvo1","volvo2","volvo3"]),a.Column.fromInt32Array("diesel",new Int32Array([0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,1])),a.Column.fromInt32Array("turbo",new Int32Array([0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1])),a.Column.fromInt32Array("two.doors",new Int32Array([1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0])),a.Column.fromInt32Array("hatchback",new Int32Array([1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0])),a.Column.fromFloat32Array("wheel.base",new Float32Array([94.5,105.80000305175781,101.19999694824219,94.5,93.69999694824219,93.69999694824219,93.69999694824219,96.5,94.30000305175781,113,93.0999984741211,115.5999984741211,102.69999694824219,93.69999694824219,94.5,94.5,93.69999694824219,114.19999694824219,89.5,99.0999984741211,97.19999694824219,95.69999694824219,95.69999694824219,98.4000015258789,102.4000015258789,97.30000305175781,100.4000015258789,104.30000305175781,109.0999984741211,109.0999984741211])),a.Column.fromFloat32Array("length",new Float32Array([171.1999969482422,192.6999969482422,176.8000030517578,158.8000030517578,157.3000030517578,157.3000030517578,150,175.39999389648438,170.6999969482422,199.60000610351562,166.8000030517578,202.60000610351562,178.39999389648438,157.3000030517578,170.1999969482422,165.3000030517578,157.3000030517578,198.89999389648438,168.89999389648438,186.60000610351562,172,158.6999969482422,166.3000030517578,176.1999969482422,175.60000610351562,171.6999969482422,180.1999969482422,188.8000030517578,188.8000030517578,188.8000030517578])),a.Column.fromFloat32Array("width",new Float32Array([65.5,71.4000015258789,64.80000305175781,63.599998474121094,63.79999923706055,63.79999923706055,64,65.19999694824219,61.79999923706055,69.5999984741211,64.19999694824219,71.69999694824219,68,64.4000015258789,63.79999923706055,63.79999923706055,63.79999923706055,68.4000015258789,65,66.5,65.4000015258789,63.599998474121094,64.4000015258789,65.5999984741211,66.5,65.5,66.9000015258789,67.19999694824219,68.80000305175781,68.9000015258789])),a.Column.fromFloat32Array("height",new Float32Array([52.400001525878906,55.70000076293945,54.29999923706055,52,50.79999923706055,50.599998474121094,52.599998474121094,54.099998474121094,53.5,52.79999923706055,54.099998474121094,56.29999923706055,54.79999923706055,50.79999923706055,53.5,54.5,50.599998474121094,58.70000076293945,51.599998474121094,56.099998474121094,52.5,54.5,53,52,54.900001525878906,55.70000076293945,55.099998474121094,56.20000076293945,55.5,55.5])),a.Column.fromInt32Array("curb.weight",new Int32Array([2823,2844,2395,1909,2128,1967,1956,2304,2337,4066,1950,3770,2910,1918,2024,1951,1967,3430,2800,2695,2190,1985,2275,2551,2480,2261,2661,2912,3049,3217])),a.Column.fromInt32Array("eng.size",new Int32Array([152,136,108,90,98,90,92,110,111,258,91,183,140,92,97,97,90,152,194,121,108,92,110,146,110,97,136,141,141,145])),a.Column.fromInt32Array("horsepower",new Int32Array([154,110,101,70,102,68,76,86,78,176,68,123,175,68,69,69,68,95,207,110,82,62,56,116,73,52,110,114,160,106])),a.Column.fromInt32Array("peak.rpm",new Int32Array([5e3,5500,5800,5400,5500,5500,6e3,5800,4800,4750,5e3,4350,5e3,5500,5200,5200,5500,4150,5900,5250,4400,4800,4500,4800,4500,4800,5500,5400,5300,4800])),a.Column.fromInt32Array("symbol",new Int32Array([1,1,2,0,1,1,1,0,0,0,1,-1,1,2,1,1,1,0,3,2,0,1,0,2,-1,2,0,-2,-1,-1])),a.Column.fromInt32Array("city.mpg",new Int32Array([19,19,23,38,24,31,30,27,24,15,31,22,19,37,31,31,31,25,17,21,28,35,34,24,30,37,19,23,19,26])),a.Column.fromInt32Array("highway.mpg",new Int32Array([26,25,29,43,30,38,34,33,29,19,38,25,24,41,37,37,38,25,25,28,33,39,36,30,33,46,24,28,25,27])),a.Column.fromInt32Array("price",new Int32Array([16500,17710,16430,6575,7957,6229,7129,8845,6785,35550,7395,31600,16503,5389,7349,7299,6229,13860,37028,12170,7775,5348,7898,9989,10698,7775,13295,12940,19045,22470]))])}function nt(e,n,r,o,i,s,l,c){return J(this,void 0,void 0,(function*(){!function(t,e,n,r,a){if(n>=r)throw new Error(O);if(e<V)throw new Error($);if(t<x)throw new Error(H);if(a<R||a>N)throw new Error(W)}(o,i,s,l,c);const u=a.Column.fromList("double","kernelParams",n);let m,d=async function(e,n,r,a,o,i,s){return new Promise(((l,c)=>{const u=new Worker(new URL(t.p+t.u(584),t.b));u.postMessage(L(EDA.generateDataset.arguments,[e,n,r,a,o,i,s])),u.onmessage=function(t){u.terminate(),l(E(EDA.generateDataset,t.data))}}))}(e,u,o,i,s,l,c);yield d.then((t=>{m=t}),(t=>{throw new Error(`Error: ${t}`)})),m[X].name=tt;for(const t of m[Q])t.name=Z+t.name;const h=a.DataFrame.fromColumns(m[Q]);return h.name=r,h.columns.add(m[X]),h}))}var rt=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};const at=0,ot=1,it=2,st=3,lt=4,ct=0,ut=1,mt=2,dt=3,ht=4,pt=5,ft=6,yt=7,vt=0,wt=1,gt=2,_t=3,bt=0,St=0,Ct=1,At=0,kt=1,Dt=0,Ft=0,Pt=0,Lt=0,Et="gamma must be strictly positive.",It="sigma must be strictly positive.",xt="c must be strictly positive.",Vt="d must be strictly positive.",Rt="incorrect kernel.",Nt="Labels",Tt="predicted",Bt="correctness",Mt="Confusion matrix",Ot="mean",$t="std dev",Ht="alpha",Wt="weight",jt="gamma",Gt="kernel",zt="kernel params",Kt="kernel param 1",Ut="kernel param 2",qt="features count",Yt="train samples count",Jt="Train error,%",Qt=["linear","polynomial","RBF","sigmoid"],Xt="positive (P)",Zt="negative (N)",te="predicted positive (PP)",ee="predicted negative (PN)",ne="Sensitivity",re="Specificity",ae="Balanced accuracy",oe="Positive predicitve value",ie="Negative predicitve value",se="Model report",le="Predicted labels",ce="Train labels",ue="Prediction correctness",me="prediction",de=4,he=3,pe=2,fe=0,ye=1,ve=2,we=0,ge=1;function _e(e,n,r){return rt(this,void 0,void 0,(function*(){let o=n.columns,i=o.byName(r);return o.remove(r),yield function(e,n,r){return rt(this,void 0,void 0,(function*(){!function(t){if(t.gamma<=Dt)throw new Error(Et);switch(t.kernel){case at:return;case it:if(t.sigma<=Ft)throw new Error(It);return;case ot:if(t.cParam<=Pt)throw new Error(xt);if(t.dParam<=Lt)throw new Error(Vt);return;case st:return;default:throw new Error(Rt)}}(e);const o=[we,we];switch(e.kernel){case at:break;case it:o[bt]=e.sigma;break;case ot:o[St]=e.cParam,o[Ct]=e.dParam;break;case st:o[At]=e.kappa,o[kt]=e.theta;break;default:throw new Error(Rt)}let i,s=a.Column.fromList("double",zt,o),l=n.toList(),c=l[0].length+ge,u=l.length+ge,m=lt,d=async function(e,n,r,a,o,i,s,l){return new Promise(((c,u)=>{const m=new Worker(new URL(t.p+t.u(111),t.b));m.postMessage(L(EDA.trainAndAnalyzeLSSVM.arguments,[e,n,r,a,o,i,s,l])),m.onmessage=function(t){m.terminate(),c(E(EDA.trainAndAnalyzeLSSVM,t.data))}}))}(e.gamma,e.kernel,s,c,u,m,n,r);yield d.then((t=>{i=t}),(t=>{throw new Error(`Error: ${t}`)})),i[ut].name=Ot,i[mt].name=$t,i[dt].name=Ht,i[ht].name=Wt,i[pt].name=Tt,i[ft].name=Bt,i[yt].name=Mt;let h={trainGamma:e.gamma,kernelType:e.kernel,kernelParams:s,trainLabels:r,normalizedTrainData:a.DataFrame.fromColumns(i[ct]),means:i[ut],stdDevs:i[mt],modelParams:i[dt],modelWeights:i[ht],predictedLabels:i[pt],correctness:i[ft],confusionMatrix:i[yt],trainError:void 0,featuresCount:l.length,trainSamplesCount:l[0].length};return function(t){let e=t.confusionMatrix.getRawData(),n=e[vt],r=e[_t],a=e[gt],o=e[wt],i=n+o,s=a+r,l=n/i,c=r/s,u=n/(n+a),m=r/(r+o),d=(n+r)/(i+s),h=(l+c)/2;t.sensitivity=l,t.specificity=c,t.balancedAccuracy=h,t.positivePredicitveValue=u,t.negativePredicitveValue=m,t.trainError=100*(1-d)}(h),h}))}(e,o,i)}))}function be(t,e){t.name=se,t.columns.add(e.trainLabels),t.columns.add(e.predictedLabels),t.columns.add(e.correctness);let r=n.shell.addTableView(t);r.addViewer(a.Viewer.form(function(t){let e=t.kernelParams.getRawData();return a.DataFrame.fromColumns([a.Column.fromList("double",jt,[t.trainGamma]),a.Column.fromStrings(Gt,[Qt[t.kernelType]]),a.Column.fromList("double",Kt,[e[0]]),a.Column.fromList("double",Ut,[e[1]]),a.Column.fromList("double",qt,[t.featuresCount]),a.Column.fromList("double",Yt,[t.trainSamplesCount]),a.Column.fromList("double",Jt,[t.trainError]),a.Column.fromList("double",ae,[t.balancedAccuracy]),a.Column.fromList("double",ne,[t.sensitivity]),a.Column.fromList("double",re,[t.specificity]),a.Column.fromList("double",oe,[t.positivePredicitveValue]),a.Column.fromList("double",ie,[t.negativePredicitveValue])])}(e))),r.addViewer(a.Viewer.scatterPlot(t,{title:le,color:e.predictedLabels.name})),r.addViewer(a.Viewer.scatterPlot(t,{title:ce,color:e.trainLabels.name})),r.addViewer(a.Viewer.grid(function(t){let e=t.confusionMatrix.getRawData();return a.DataFrame.fromColumns([a.Column.fromStrings("",[Xt,Zt]),a.Column.fromList("int",te,[e[vt],e[gt]]),a.Column.fromList("int",ee,[e[wt],e[_t]])])}(e))),r.addViewer(a.Viewer.scatterPlot(t,{title:ue,color:e.correctness.name}))}function Se(t){let e=t.normalizedTrainData.columns,n=t.trainSamplesCount,r=t.featuresCount,a=new Uint8Array(de*(he+pe+n+r+r+n+ge+r+ge+r*n)),o=a.buffer,i=0,s=new Int32Array(o,i,he);s[fe]=t.kernelType,s[ye]=n,s[ve]=r,i+=he*de;let l=new Float32Array(o,i,pe);l.set(t.kernelParams.getRawData()),i+=pe*de,l=new Float32Array(o,i,n),l.set(t.trainLabels.getRawData()),i+=n*de,l=new Float32Array(o,i,r),l.set(t.means.getRawData()),i+=r*de,l=new Float32Array(o,i,r),l.set(t.stdDevs.getRawData()),i+=r*de,l=new Float32Array(o,i,n+ge),l.set(t.modelParams.getRawData()),i+=(n+ge)*de,l=new Float32Array(o,i,r+ge),l.set(t.modelWeights.getRawData()),i+=(r+ge)*de;for(const t of e)l=new Float32Array(o,i,r),l.set(t.getRawData()),i+=r*de;return a}function Ce(e,n){return rt(this,void 0,void 0,(function*(){let r=function(t){let e=t.buffer,n=0,r=new Int32Array(e,n,he);n+=he*de;let o=r[ye],i=r[ve];const s=a.Column.fromFloat32Array(zt,new Float32Array(e,n,pe));n+=pe*de;const l=a.Column.fromFloat32Array(Nt,new Float32Array(e,n,o));n+=o*de;const c=a.Column.fromFloat32Array(Ot,new Float32Array(e,n,i));n+=i*de;const u=a.Column.fromFloat32Array($t,new Float32Array(e,n,i));n+=i*de;const m=a.Column.fromFloat32Array(Ht,new Float32Array(e,n,o+ge));n+=(o+ge)*de;const d=a.Column.fromFloat32Array(Wt,new Float32Array(e,n,i+ge));n+=(i+ge)*de;let h=[];for(let t=0;t<o;t++)h.push(a.Column.fromFloat32Array(t.toString(),new Float32Array(e,n,i))),n+=i*de;const p=a.DataFrame.fromColumns(h);return{kernelType:r[fe],kernelParams:s,trainLabels:l,means:c,stdDevs:u,modelParams:m,modelWeights:d,normalizedTrainData:p}}(new Uint8Array(n)),o=yield function(e,n){return rt(this,void 0,void 0,(function*(){let r,a=async function(e,n,r,a,o,i,s,l,c){return new Promise(((u,m)=>{const d=new Worker(new URL(t.p+t.u(604),t.b));d.postMessage(L(EDA.predictByLSSVM.arguments,[e,n,r,a,o,i,s,l,c])),d.onmessage=function(t){d.terminate(),u(E(EDA.predictByLSSVM,t.data))}}))}(e.kernelType,e.kernelParams,e.normalizedTrainData.columns,e.trainLabels,e.means,e.stdDevs,e.modelParams,e.modelWeights,n);return yield a.then((t=>{r=t}),(t=>{throw new Error(`Error: ${t}`)})),r}))}(r,e.columns);return o.name=me,a.DataFrame.fromColumns([o])}))}var Ae=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};const ke=new a.Package;function De(){n.shell.info(ke.webRoot)}function Fe(){return Ae(this,void 0,void 0,(function*(){yield async function(){await initEDA()}()}))}function Pe(e,n,r,a,o){return Ae(this,void 0,void 0,(function*(){return function(t){for(const e of t.columns.toList())e.name="PCA"+e.name;return t}(yield function(e,n,r,a,o){return z(this,void 0,void 0,(function*(){G(n,r);let e,i=async function(e,n,r,a,o){return new Promise(((e,i)=>{const s=new Worker(new URL(t.p+t.u(155),t.b));s.postMessage(L(EDA.principalComponentAnalysis.arguments,[n,r,a,o])),s.onmessage=function(t){s.terminate(),e(E(EDA.principalComponentAnalysis,t.data))}}))}(0,n,r,a?1:0,o?1:0);return yield i.then((t=>{e=t}),(t=>{throw new Error(`Error: ${t}`)})),e}))}(0,n,r,a,o))}))}function Le(t,e,r,o,i){return Ae(this,void 0,void 0,(function*(){const s=yield K(0,r,o,i);!function(t,e,r,o,i){let s=n.shell.getTableView(t.name);s.addViewer(U(e,o,i[0])),s.addViewer(q(r,i[1])),s.addViewer(function(t,e){let n=[],r=[];for(let e of t)r.push(e.name);n.push(a.Column.fromStrings("labels",r));for(let t=0;t<e.length;t++)e[t].name=`x.loading.p${t+1}`,n.push(e[t]);let o=a.DataFrame.fromColumns(n);return o.name="Loadings",a.Viewer.scatterPlot(o,{title:o.name,x:e[0].name,y:e[e.length-1].name,markerType:"circle",labels:"labels"})}(r,i[4])),s.addViewer(Y(e,i[2],i[3]))}(t,e,r,o,s)}))}function Ee(){return Ae(this,void 0,void 0,(function*(){const t=new l("Partial least squares regression","Analysis of multidimensional data."),e=et(),a=e.columns.byName("model"),o=e.columns.byName("price"),i=e.columns.remove("price").remove("model"),s=yield K(0,i,o,3),c=et();let u,m;c.name="Cars",yield t.step("Data",(()=>Ae(this,void 0,void 0,(function*(){n.shell.addTableView(c),u=n.shell.getTableView(c.name)}))),{description:"Each car has many features - patterns extraction is complicated.",delay:0}).step("Model",(()=>Ae(this,void 0,void 0,(function*(){m=r.dialog({title:"Multivariate Analysis (PLS)"}).add(r.tableInput("Table",c)).add(r.columnsInput("Features",e,i.toList,{available:void 0,checked:i.names()})).add(r.columnInput("Names",e,a,void 0)).add(r.columnInput("Predict",e,o,void 0)).add(r.intInput("Components",3,void 0)).onOK((()=>{n.shell.info("Multivariate analysis has been already performed.")})).show({x:400,y:140})}))),{description:"Predict car price by its other features.",delay:0}).step("Regression coeffcicients",(()=>Ae(this,void 0,void 0,(function*(){m.close(),u.addViewer(q(i,s[1]))}))),{description:'The feature "diesel" affects the price the most.',delay:0}).step("Scores",(()=>Ae(this,void 0,void 0,(function*(){u.addViewer(Y(a,s[2],s[3]))}))),{description:"Similarities & dissimilarities: alfaromeo and mercedes are different.",delay:0}).step("Prediction",(()=>Ae(this,void 0,void 0,(function*(){u.addViewer(U(a,o,s[0]))}))),{description:"Closer to the line means better price prediction.",delay:0}).start()}))}function Ie(t,e,n,r,a,o){return Ae(this,void 0,void 0,(function*(){return yield nt(at,[0,0],t,e,n,r,a,o)}))}function xe(t,e,n,r,a,o,i){return Ae(this,void 0,void 0,(function*(){return yield nt(it,[e,0],t,n,r,a,o,i)}))}function Ve(t,e,n,r){return Ae(this,void 0,void 0,(function*(){const a=yield _e({gamma:n,kernel:at},t,e);return r&&be(t,a),Se(a)}))}function Re(t,e){return Ae(this,void 0,void 0,(function*(){return yield Ce(t,e)}))}function Ne(t,e,n,r,a){return Ae(this,void 0,void 0,(function*(){const o=yield _e({gamma:n,kernel:it,sigma:r},t,e);return a&&be(t,o),Se(o)}))}function Te(t,e){return Ae(this,void 0,void 0,(function*(){return yield Ce(t,e)}))}function Be(t,e,n,r,a,o){return Ae(this,void 0,void 0,(function*(){const i=yield _e({gamma:n,kernel:ot,cParam:r,dParam:a},t,e);return o&&be(t,i),Se(i)}))}function Me(t,e){return Ae(this,void 0,void 0,(function*(){return yield Ce(t,e)}))}function Oe(t,e,n,r,a,o){return Ae(this,void 0,void 0,(function*(){const i=yield _e({gamma:n,kernel:st,kappa:r,theta:a},t,e);return o&&be(t,i),Se(i)}))}function $e(t,e){return Ae(this,void 0,void 0,(function*(){return yield Ce(t,e)}))}eda=e})();
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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Iiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9nZXQgamF2YXNjcmlwdCBjaHVuayBmaWxlbmFtZSIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGgiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9qc29ucCBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL2VkYS9leHRlcm5hbCB2YXIgXCJncm9rXCIiLCJ3ZWJwYWNrOi8vZWRhL2V4dGVybmFsIHZhciBcInVpXCIiLCJ3ZWJwYWNrOi8vZWRhL2V4dGVybmFsIHZhciBcIkRHXCIiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdHV0b3JpYWxzL3NyYy9kZW1vLXNjcmlwdC5qcyIsIndlYnBhY2s6Ly9lZGEvLi93YXNtL2NhbGxXYXNtLmpzIiwid2VicGFjazovL2VkYS8uL3dhc20vY2FsbFdhc21Gb3JXZWJXb3JrZXIuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3V0aWxzLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9FREF0b29scy50cyIsIndlYnBhY2s6Ly9lZGEvLi93YXNtL0VEQUFQSS5qcyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvRURBdWkudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL2RhdGFHZW5lcmF0b3JzLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9zdm0udHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3BhY2thZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJlcXVpcmUgc2NvcGVcbnZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCIvLyBUaGlzIGZ1bmN0aW9uIGFsbG93IHRvIHJlZmVyZW5jZSBhc3luYyBjaHVua3Ncbl9fd2VicGFja19yZXF1aXJlX18udSA9IChjaHVua0lkKSA9PiB7XG5cdC8vIHJldHVybiB1cmwgZm9yIGZpbGVuYW1lcyBiYXNlZCBvbiB0ZW1wbGF0ZVxuXHRyZXR1cm4gXCJcIiArIGNodW5rSWQgKyBcIi5qc1wiO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICFzY3JpcHRVcmwpIHNjcmlwdFVybCA9IHNjcmlwdHNbaS0tXS5zcmM7XG5cdFx0fVxuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmIgPSBkb2N1bWVudC5iYXNlVVJJIHx8IHNlbGYubG9jYXRpb24uaHJlZjtcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBhbmQgbG9hZGluZyBjaHVua3Ncbi8vIHVuZGVmaW5lZCA9IGNodW5rIG5vdCBsb2FkZWQsIG51bGwgPSBjaHVuayBwcmVsb2FkZWQvcHJlZmV0Y2hlZFxuLy8gW3Jlc29sdmUsIHJlamVjdCwgUHJvbWlzZV0gPSBjaHVuayBsb2FkaW5nLCAwID0gY2h1bmsgbG9hZGVkXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHQzNTk6IDBcbn07XG5cbi8vIG5vIGNodW5rIG9uIGRlbWFuZCBsb2FkaW5nXG5cbi8vIG5vIHByZWZldGNoaW5nXG5cbi8vIG5vIHByZWxvYWRlZFxuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0XG5cbi8vIG5vIG9uIGNodW5rcyBsb2FkZWRcblxuLy8gbm8ganNvbnAgZnVuY3Rpb24iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gZ3JvazsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gdWk7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IERHOyIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuZXhwb3J0IGNvbnN0IHRlc3RzID0ge307XG5jb25zdCBhdXRvVGVzdHNDYXROYW1lID0gJ0F1dG8gVGVzdHMnO1xuY29uc3Qgd2FzUmVnaXN0ZXJlZCA9IHt9O1xuZXhwb3J0IGxldCBjdXJyZW50Q2F0ZWdvcnk7XG5leHBvcnQgdmFyIGFzc3VyZTtcbihmdW5jdGlvbiAoYXNzdXJlKSB7XG4gICAgZnVuY3Rpb24gbm90TnVsbCh2YWx1ZSwgbmFtZSkge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lID09IG51bGwgPyAnVmFsdWUnIDogbmFtZX0gbm90IGRlZmluZWRgKTtcbiAgICB9XG4gICAgYXNzdXJlLm5vdE51bGwgPSBub3ROdWxsO1xufSkoYXNzdXJlIHx8IChhc3N1cmUgPSB7fSkpO1xuZXhwb3J0IGNsYXNzIFRlc3RDb250ZXh0IHtcbiAgICBjb25zdHJ1Y3RvcihjYXRjaFVuaGFuZGxlZCwgcmVwb3J0KSB7XG4gICAgICAgIHRoaXMuY2F0Y2hVbmhhbmRsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlcG9ydCA9IGZhbHNlO1xuICAgICAgICBpZiAoY2F0Y2hVbmhhbmRsZWQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRoaXMuY2F0Y2hVbmhhbmRsZWQgPSBjYXRjaFVuaGFuZGxlZDtcbiAgICAgICAgaWYgKHJlcG9ydCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhpcy5yZXBvcnQgPSByZXBvcnQ7XG4gICAgfVxuICAgIDtcbn1cbmV4cG9ydCBjbGFzcyBUZXN0IHtcbiAgICBjb25zdHJ1Y3RvcihjYXRlZ29yeSwgbmFtZSwgdGVzdCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDogKG9wdGlvbnMgPSB7fSk7XG4gICAgICAgIChfYSA9IG9wdGlvbnMudGltZW91dCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKG9wdGlvbnMudGltZW91dCA9IDMwMDAwKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy50ZXN0ID0gKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0geWllbGQgdGVzdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RFdmVudChldmVudCwgaGFuZGxlciwgdHJpZ2dlciwgbXMgPSAwKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHN1YjtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXIoYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgICAgICAgICAgICByZWplY3QoJ3RpbWVvdXQnKTtcbiAgICAgICAgICAgIH0sIG1zKTtcbiAgICAgICAgICAgIHRyaWdnZXIoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdGVzdChuYW1lLCB0ZXN0LCBvcHRpb25zKSB7XG4gICAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgICAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gICAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPT0gdW5kZWZpbmVkKVxuICAgICAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID0gW107XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cy5wdXNoKG5ldyBUZXN0KGN1cnJlbnRDYXRlZ29yeSwgbmFtZSwgdGVzdCwgb3B0aW9ucykpO1xufVxuLyogVGVzdHMgdHdvIG9iamVjdHMgZm9yIGVxdWFsaXR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3QoYWN0dWFsLCBleHBlY3RlZCA9IHRydWUsIGVycm9yKSB7XG4gICAgaWYgKGVycm9yKVxuICAgICAgICBlcnJvciA9IGAke2Vycm9yfSwgYDtcbiAgICBlbHNlXG4gICAgICAgIGVycm9yID0gJyc7XG4gICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvcn1FeHBlY3RlZCBcIiR7ZXhwZWN0ZWR9XCIsIGdvdCBcIiR7YWN0dWFsfVwiYCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0RmxvYXQoYWN0dWFsLCBleHBlY3RlZCwgdG9sZXJhbmNlID0gMC4wMDEsIGVycm9yKSB7XG4gICAgaWYgKChhY3R1YWwgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSB8fFxuICAgICAgICAoYWN0dWFsID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkgfHxcbiAgICAgICAgKGFjdHVhbCA9PT0gTnVtYmVyLk5hTiAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLk5hTikgfHwgKGlzTmFOKGFjdHVhbCkgJiYgaXNOYU4oZXhwZWN0ZWQpKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGFyZUVxdWFsID0gTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgdG9sZXJhbmNlO1xuICAgIGV4cGVjdChhcmVFcXVhbCwgdHJ1ZSwgYCR7ZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyd9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYCk7XG4gICAgaWYgKCFhcmVFcXVhbClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfSAodG9sZXJhbmNlID0gJHt0b2xlcmFuY2V9KWApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdFRhYmxlKGFjdHVhbCwgZXhwZWN0ZWQsIGVycm9yKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRSb3dDb3VudCA9IGV4cGVjdGVkLnJvd0NvdW50O1xuICAgIGNvbnN0IGFjdHVhbFJvd0NvdW50ID0gYWN0dWFsLnJvd0NvdW50O1xuICAgIGV4cGVjdChhY3R1YWxSb3dDb3VudCwgZXhwZWN0ZWRSb3dDb3VudCwgYCR7ZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyd9LCByb3cgY291bnRgKTtcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBleHBlY3RlZC5jb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IGFjdHVhbENvbHVtbiA9IGFjdHVhbC5jb2x1bW5zLmJ5TmFtZShjb2x1bW4ubmFtZSk7XG4gICAgICAgIGlmIChhY3R1YWxDb2x1bW4gPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7Y29sdW1uLm5hbWV9IG5vdCBmb3VuZGApO1xuICAgICAgICBpZiAoYWN0dWFsQ29sdW1uLnR5cGUgIT0gY29sdW1uLnR5cGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2NvbHVtbi5uYW1lfSB0eXBlIGV4cGVjdGVkICR7Y29sdW1uLnR5cGV9IGdvdCAke2FjdHVhbENvbHVtbi50eXBlfWApO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cGVjdGVkUm93Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb2x1bW4uZ2V0KGkpO1xuICAgICAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxDb2x1bW4uZ2V0KGkpO1xuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09IERHLlRZUEUuRkxPQVQpXG4gICAgICAgICAgICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIHZhbHVlLCAwLjAwMDEsIGVycm9yKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbHVtbi50eXBlID09IERHLlRZUEUuREFURV9USU1FKVxuICAgICAgICAgICAgICAgIGV4cGVjdChhY3R1YWxWYWx1ZS5pc1NhbWUodmFsdWUpLCB0cnVlLCBlcnJvcik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZXhwZWN0KGFjdHVhbFZhbHVlLCB2YWx1ZSwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdE9iamVjdChhY3R1YWwsIGV4cGVjdGVkKSB7XG4gICAgZm9yIChjb25zdCBbZXhwZWN0ZWRLZXksIGV4cGVjdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkKSkge1xuICAgICAgICBpZiAoIWFjdHVhbC5oYXNPd25Qcm9wZXJ0eShleHBlY3RlZEtleSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHByb3BlcnR5IFwiJHtleHBlY3RlZEtleX1cIiBub3QgZm91bmRgKTtcbiAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxbZXhwZWN0ZWRLZXldO1xuICAgICAgICBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICAgICAgICBleHBlY3RBcnJheShhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICAgICAgICBleHBlY3RPYmplY3QoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgICAgICBlbHNlIGlmIChOdW1iZXIuaXNGaW5pdGUoYWN0dWFsVmFsdWUpICYmIE51bWJlci5pc0Zpbml0ZShleHBlY3RlZFZhbHVlKSlcbiAgICAgICAgICAgIGV4cGVjdEZsb2F0KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgIT0gZXhwZWN0ZWRWYWx1ZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgKCR7ZXhwZWN0ZWRWYWx1ZX0pIGZvciBrZXkgJyR7ZXhwZWN0ZWRLZXl9JywgZ290ICgke2FjdHVhbFZhbHVlfSlgKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0QXJyYXkoYWN0dWFsLCBleHBlY3RlZCkge1xuICAgIGNvbnN0IGFjdHVhbExlbmd0aCA9IGFjdHVhbC5sZW5ndGg7XG4gICAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSBleHBlY3RlZC5sZW5ndGg7XG4gICAgaWYgKGFjdHVhbExlbmd0aCAhPSBleHBlY3RlZExlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5cyBhcmUgb2YgZGlmZmVyZW50IGxlbmd0aDogYWN0dWFsIGFycmF5IGxlbmd0aCBpcyAke2FjdHVhbExlbmd0aH0gYCArXG4gICAgICAgICAgICBgYW5kIGV4cGVjdGVkIGFycmF5IGxlbmd0aCBpcyAke2V4cGVjdGVkTGVuZ3RofWApO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgICAgIGVsc2UgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgICAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsW2ldICE9IGV4cGVjdGVkW2ldKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkW2ldfSBhdCBwb3NpdGlvbiAke2l9LCBnb3QgJHthY3R1YWxbaV19YCk7XG4gICAgfVxufVxuLyogRGVmaW5lcyBhIHRlc3Qgc3VpdGUuICovXG5leHBvcnQgZnVuY3Rpb24gY2F0ZWdvcnkoY2F0ZWdvcnksIHRlc3RzKSB7XG4gICAgY3VycmVudENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGVzdHMoKTtcbn1cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZShiZWZvcmUpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmJlZm9yZSA9IGJlZm9yZTtcbn1cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXIoYWZ0ZXIpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmFmdGVyID0gYWZ0ZXI7XG59XG5mdW5jdGlvbiBhZGROYW1lc3BhY2UocywgZikge1xuICAgIHJldHVybiBzLnJlcGxhY2UobmV3IFJlZ0V4cChmLm5hbWUsICdnaScpLCBmLm5xTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5pdEF1dG9UZXN0cyhwYWNrYWdlSWQsIG1vZHVsZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICh3YXNSZWdpc3RlcmVkW3BhY2thZ2VJZF0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG1vZHVsZVRlc3RzID0gbW9kdWxlID8gbW9kdWxlLnRlc3RzIDogdGVzdHM7XG4gICAgICAgIGlmIChtb2R1bGVUZXN0c1thdXRvVGVzdHNDYXROYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3YXNSZWdpc3RlcmVkW3BhY2thZ2VJZF0gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vZHVsZUF1dG9UZXN0cyA9IFtdO1xuICAgICAgICBjb25zdCBwYWNrRnVuY3Rpb25zID0geWllbGQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5maWx0ZXIoYHBhY2thZ2UuaWQgPSBcIiR7cGFja2FnZUlkfVwiYCkubGlzdCgpO1xuICAgICAgICBjb25zdCByZWcgPSBuZXcgUmVnRXhwKC8uKlxcL1xcL1xccypza2lwWzpcXHNdKiguKikkLyk7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBwYWNrRnVuY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0cyA9IGYub3B0aW9uc1sndGVzdCddO1xuICAgICAgICAgICAgaWYgKCEodGVzdHMgJiYgQXJyYXkuaXNBcnJheSh0ZXN0cykgJiYgdGVzdHMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lwUmVhc29ucyA9IHRlc3RzW2ldLm1hdGNoKHJlZyk7XG4gICAgICAgICAgICAgICAgbGV0IHNraXBSZWFzb247XG4gICAgICAgICAgICAgICAgaWYgKHNraXBSZWFzb25zICYmIChza2lwUmVhc29ucyA9PT0gbnVsbCB8fCBza2lwUmVhc29ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2tpcFJlYXNvbnMubGVuZ3RoKSA+IDEpXG4gICAgICAgICAgICAgICAgICAgIHNraXBSZWFzb24gPSBza2lwUmVhc29uc1sxXTtcbiAgICAgICAgICAgICAgICBtb2R1bGVBdXRvVGVzdHMucHVzaChuZXcgVGVzdChhdXRvVGVzdHNDYXROYW1lLCB0ZXN0cy5sZW5ndGggPT09IDEgPyBmLm5hbWUgOiBgJHtmLm5hbWV9ICR7aSArIDF9YCwgKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBncm9rLmZ1bmN0aW9ucy5ldmFsKGFkZE5hbWVzcGFjZSh0ZXN0c1tpXSwgZikpO1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYEZhaWxlZDogJHt0ZXN0c1tpXX1gO1xuICAgICAgICAgICAgICAgIH0pLCB7IHNraXBSZWFzb246IHNraXBSZWFzb24gfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSA9IHRydWU7XG4gICAgICAgIGlmICghbW9kdWxlQXV0b1Rlc3RzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbW9kdWxlVGVzdHNbYXV0b1Rlc3RzQ2F0TmFtZV0gPSB7IHRlc3RzOiBtb2R1bGVBdXRvVGVzdHMgfTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBydW5UZXN0cyhvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIHZhciBfZTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBwYWNrYWdlXyA9IChfYiA9IChfYSA9IGdyb2suZnVuY3Rpb25zLmdldEN1cnJlbnRDYWxsKCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mdW5jKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucGFja2FnZTtcbiAgICAgICAgeWllbGQgaW5pdEF1dG9UZXN0cyhwYWNrYWdlXy5pZCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgY29uc29sZS5sb2coYFJ1bm5pbmcgdGVzdHNgKTtcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDogKG9wdGlvbnMgPSB7fSk7XG4gICAgICAgIChfYyA9IChfZSA9IG9wdGlvbnMpLnRlc3RDb250ZXh0KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAoX2UudGVzdENvbnRleHQgPSBuZXcgVGVzdENvbnRleHQoKSk7XG4gICAgICAgIGdyb2suc2hlbGwubGFzdEVycm9yID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRlc3RzKSkge1xuICAgICAgICAgICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2F0ZWdvcnkpICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICgha2V5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2F0ZWdvcnkudG9Mb3dlckNhc2UoKSkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFN0YXJ0ZWQgJHtrZXl9IGNhdGVnb3J5YCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iZWZvcmUpXG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHZhbHVlLmJlZm9yZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5iZWZvcmVTdGF0dXMgPSB4LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0ID0gKF9kID0gdmFsdWUudGVzdHMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IFtdO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgcmVzLnB1c2goeWllbGQgZXhlY1Rlc3QodFtpXSwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnRlc3QpKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSAoeWllbGQgUHJvbWlzZS5hbGwocmVzKSkuZmlsdGVyKChkKSA9PiBkLnJlc3VsdCAhPSAnc2tpcHBlZCcpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYWZ0ZXIpXG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHZhbHVlLmFmdGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmFmdGVyU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlLmFmdGVyU3RhdHVzKVxuICAgICAgICAgICAgICAgIGRhdGEucHVzaCh7IGNhdGVnb3J5OiBrZXksIG5hbWU6ICdpbml0JywgcmVzdWx0OiB2YWx1ZS5hZnRlclN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5iZWZvcmVTdGF0dXMpXG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKHsgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2luaXQnLCByZXN1bHQ6IHZhbHVlLmJlZm9yZVN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCguLi5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy50ZXN0Q29udGV4dC5jYXRjaFVuaGFuZGxlZCkge1xuICAgICAgICAgICAgeWllbGQgZGVsYXkoMTAwMCk7XG4gICAgICAgICAgICBpZiAoZ3Jvay5zaGVsbC5sYXN0RXJyb3IubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnVW5oYW5kbGVkIGV4Y2VwdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZXhjZXB0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogZ3Jvay5zaGVsbC5sYXN0RXJyb3IsIHN1Y2Nlc3M6IGZhbHNlLCBtczogMCwgc2tpcHBlZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy50ZXN0Q29udGV4dC5yZXBvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBERy5Mb2dnZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NmdWwgPSByZXN1bHRzLmZpbHRlcigocikgPT4gci5zdWNjZXNzKS5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBza2lwcGVkID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+IHIuc2tpcHBlZCkubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgZmFpbGVkID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+ICFyLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSAnUGFja2FnZSBAcGFja2FnZSB0ZXN0ZWQ6IEBzdWNjZXNzZnVsIHN1Y2Nlc3NmdWwsIEBza2lwcGVkIHNraXBwZWQsIEBmYWlsZWQgZmFpbGVkIHRlc3RzJztcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzZnVsOiBzdWNjZXNzZnVsLFxuICAgICAgICAgICAgICAgIHNraXBwZWQ6IHNraXBwZWQsXG4gICAgICAgICAgICAgICAgZmFpbGVkOiBmYWlsZWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIHBhY2thZ2U6IHBhY2thZ2VfXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yIChjb25zdCByIG9mIGZhaWxlZClcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHBhcmFtcywgeyBbYCR7ci5jYXRlZ29yeX0gfCAke3IubmFtZX1gXTogci5yZXN1bHQgfSk7XG4gICAgICAgICAgICBsb2dnZXIubG9nKGRlc2NyaXB0aW9uLCBwYXJhbXMsICdwYWNrYWdlLXRlc3RlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZXhlY1Rlc3QodCwgcHJlZGljYXRlKSB7XG4gICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHI7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHByZWRpY2F0ZSAhPSB1bmRlZmluZWQgJiYgKCF0Lm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHByZWRpY2F0ZS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICAgIGNvbnN0IHNraXAgPSAoKF9hID0gdC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2tpcFJlYXNvbikgfHwgZmlsdGVyO1xuICAgICAgICBjb25zdCBza2lwUmVhc29uID0gZmlsdGVyID8gJ3NraXBwZWQnIDogKF9iID0gdC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2tpcFJlYXNvbjtcbiAgICAgICAgaWYgKCFza2lwKVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFN0YXJ0ZWQgJHt0LmNhdGVnb3J5fSAke3QubmFtZX1gKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNraXApXG4gICAgICAgICAgICAgICAgciA9IHsgc3VjY2VzczogdHJ1ZSwgcmVzdWx0OiBza2lwUmVhc29uLCBtczogMCwgc2tpcHBlZDogdHJ1ZSB9O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHIgPSB7IHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogKF9jID0geWllbGQgdC50ZXN0KCkpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6ICdPSycsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICByID0geyBzdWNjZXNzOiBmYWxzZSwgcmVzdWx0OiB4LnRvU3RyaW5nKCksIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0b3AgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHIubXMgPSBzdG9wIC0gc3RhcnQ7XG4gICAgICAgIGlmICghc2tpcClcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGaW5pc2hlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfSBmb3IgJHtyLm1zfSBtc2ApO1xuICAgICAgICByLmNhdGVnb3J5ID0gdC5jYXRlZ29yeTtcbiAgICAgICAgci5uYW1lID0gdC5uYW1lO1xuICAgICAgICByZXR1cm4gcjtcbiAgICB9KTtcbn1cbi8qIFdhaXRzIFttc10gbWlsbGlzZWNvbmRzICovXG5leHBvcnQgZnVuY3Rpb24gZGVsYXkobXMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGF3YWl0Q2hlY2soY2hlY2tIYW5kbGVyLCBlcnJvciA9ICdUaW1lb3V0IGV4Y2VlZGVkJywgd2FpdCA9IDUwMCwgaW50ZXJ2YWwgPSA1MCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IpKTtcbiAgICAgICAgICAgIH0sIHdhaXQpO1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tIYW5kbGVyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2dQcmVzZW50KGRpYWxvZ1RpdGxlKSB7XG4gICAgY29uc3QgZGlhbG9ncyA9IERHLkRpYWxvZy5nZXRPcGVuRGlhbG9ncygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlhbG9ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZGlhbG9nc1tpXS50aXRsZSA9PSBkaWFsb2dUaXRsZSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gdGVzdFZpZXdlcih2LCBkZiwgZGV0ZWN0U2VtYW50aWNUeXBlcyA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKGRldGVjdFNlbWFudGljVHlwZXMpXG4gICAgICAgICAgICB5aWVsZCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG4gICAgICAgIGNvbnN0IHR2ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoZGYpO1xuICAgICAgICBjb25zdCB2aWV3ZXJOYW1lID0gYFtuYW1lPXZpZXdlci0ke3YucmVwbGFjZSgvXFxzKy9nLCAnLScpfSBpXWA7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gYCR7dmlld2VyTmFtZX0gY2FudmFzLCR7dmlld2VyTmFtZX0gc3ZnLCR7dmlld2VyTmFtZX0gaW1nLFxuICAgICR7dmlld2VyTmFtZX0gaW5wdXQsJHt2aWV3ZXJOYW1lfSBoMSwke3ZpZXdlck5hbWV9IGFgO1xuICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCB2aWV3ZXIgPSB0di5hZGRWaWV3ZXIodik7XG4gICAgICAgICAgICB5aWVsZCBhd2FpdENoZWNrKCgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpICE9PSBudWxsLCAnY2Fubm90IGxvYWQgdmlld2VyJywgMzAwMCk7XG4gICAgICAgICAgICByZXMucHVzaChBcnJheS5mcm9tKHR2LnZpZXdlcnMpLmxlbmd0aCk7XG4gICAgICAgICAgICBBcnJheS5mcm9tKGRmLnJvdygwKS5jZWxscykuZm9yRWFjaCgoYykgPT4gYy52YWx1ZSA9IG51bGwpO1xuICAgICAgICAgICAgZGYucm93cy5zZWxlY3QoKHJvdykgPT4gcm93LmlkeCA+IDEgJiYgcm93LmlkeCA8IDcpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDc7IGkgPCAxMjsgaSsrKVxuICAgICAgICAgICAgICAgIGRmLmZpbHRlci5zZXQoaSwgZmFsc2UpO1xuICAgICAgICAgICAgZGYuY3VycmVudFJvd0lkeCA9IDE7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHZpZXdlci5nZXRPcHRpb25zKHRydWUpLmxvb2s7XG4gICAgICAgICAgICBjb25zdCBuZXdQcm9wcyA9IHt9O1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZpbHRlcigoaykgPT4gdHlwZW9mIHByb3BzW2tdID09PSAnYm9vbGVhbicpLmZvckVhY2goKGspID0+IG5ld1Byb3BzW2tdID0gIXByb3BzW2tdKTtcbiAgICAgICAgICAgIHZpZXdlci5zZXRPcHRpb25zKG5ld1Byb3BzKTtcbiAgICAgICAgICAgIHlpZWxkIGRlbGF5KDI1MCk7XG4gICAgICAgICAgICBjb25zdCBsYXlvdXQgPSB0di5zYXZlTGF5b3V0KCk7XG4gICAgICAgICAgICBjb25zdCBvbGRQcm9wcyA9IHZpZXdlci5nZXRPcHRpb25zKCkubG9vaztcbiAgICAgICAgICAgIHR2LnJlc2V0TGF5b3V0KCk7XG4gICAgICAgICAgICByZXMucHVzaChBcnJheS5mcm9tKHR2LnZpZXdlcnMpLmxlbmd0aCk7XG4gICAgICAgICAgICB0di5sb2FkTGF5b3V0KGxheW91dCk7XG4gICAgICAgICAgICB5aWVsZCBhd2FpdENoZWNrKCgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpICE9PSBudWxsLCAnY2Fubm90IGxvYWQgdmlld2VyIGZyb20gbGF5b3V0JywgMzAwMCk7XG4gICAgICAgICAgICB5aWVsZCBkZWxheSgyNTApO1xuICAgICAgICAgICAgcmVzLnB1c2goQXJyYXkuZnJvbSh0di52aWV3ZXJzKS5sZW5ndGgpO1xuICAgICAgICAgICAgdmlld2VyID0gQXJyYXkuZnJvbSh0di52aWV3ZXJzKS5maW5kKCh2KSA9PiB2LnR5cGUgIT09ICdHcmlkJyk7XG4gICAgICAgICAgICBleHBlY3RBcnJheShyZXMsIFsyLCAxLCAyXSk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkodmlld2VyLmdldE9wdGlvbnMoKS5sb29rKSwgSlNPTi5zdHJpbmdpZnkob2xkUHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHR2LmNsb3NlKCk7XG4gICAgICAgICAgICBncm9rLnNoZWxsLmNsb3NlVGFibGUoZGYpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkR1Z6ZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJblJsYzNRdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN08wRkJRVUVzVDBGQlR5eExRVUZMTEVsQlFVa3NUVUZCVFN4dFFrRkJiVUlzUTBGQlF6dEJRVU14UXl4UFFVRlBMRXRCUVVzc1JVRkJSU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRPMEZCUzNSRExFMUJRVTBzUTBGQlF5eE5RVUZOTEV0QlFVc3NSMEZMWkN4RlFVRkZMRU5CUVVNN1FVRkZVQ3hOUVVGTkxHZENRVUZuUWl4SFFVRkhMRmxCUVZrc1EwRkJRenRCUVVOMFF5eE5RVUZOTEdGQlFXRXNSMEZCTmtJc1JVRkJSU3hEUVVGRE8wRkJRMjVFTEUxQlFVMHNRMEZCUXl4SlFVRkpMR1ZCUVhWQ0xFTkJRVU03UVVGRmJrTXNUVUZCVFN4TFFVRlhMRTFCUVUwc1EwRkxkRUk3UVVGTVJDeFhRVUZwUWl4TlFVRk5PMGxCUTNKQ0xGTkJRV2RDTEU5QlFVOHNRMEZCUXl4TFFVRlZMRVZCUVVVc1NVRkJZVHRSUVVNdlF5eEpRVUZKTEV0QlFVc3NTVUZCU1N4SlFVRkpPMWxCUTJZc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITEVsQlFVa3NTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4alFVRmpMRU5CUVVNc1EwRkJRenRKUVVOd1JTeERRVUZETzBsQlNHVXNZMEZCVHl4VlFVZDBRaXhEUVVGQk8wRkJRMGdzUTBGQlF5eEZRVXhuUWl4TlFVRk5MRXRCUVU0c1RVRkJUU3hSUVV0MFFqdEJRVkZFTEUxQlFVMHNUMEZCVHl4WFFVRlhPMGxCU1hSQ0xGbEJRVmtzWTBGQmQwSXNSVUZCUlN4TlFVRm5RanRSUVVoMFJDeHRRa0ZCWXl4SFFVRkhMRWxCUVVrc1EwRkJRenRSUVVOMFFpeFhRVUZOTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUjJJc1NVRkJTU3hqUVVGakxFdEJRVXNzVTBGQlV6dFpRVUZGTEVsQlFVa3NRMEZCUXl4alFVRmpMRWRCUVVjc1kwRkJZeXhEUVVGRE8xRkJRM1pGTEVsQlFVa3NUVUZCVFN4TFFVRkxMRk5CUVZNN1dVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXp0SlFVTnFSQ3hEUVVGRE8wbEJRVUVzUTBGQlF6dERRVU5JTzBGQlJVUXNUVUZCVFN4UFFVRlBMRWxCUVVrN1NVRk5aaXhaUVVGWkxGRkJRV2RDTEVWQlFVVXNTVUZCV1N4RlFVRkZMRWxCUVhkQ0xFVkJRVVVzVDBGQmNVSTdPMUZCUTNwR0xFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NVVUZCVVN4RFFVRkRPMUZCUTNwQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTJwQ0xFOUJRVThzWVVGQlVDeFBRVUZQTEdOQlFWQXNUMEZCVHl4SlFVRlFMRTlCUVU4c1IwRkJTeXhGUVVGRkxFVkJRVU03VVVGRFppeE5RVUZCTEU5QlFVOHNRMEZCUXl4UFFVRlBMRzlEUVVGbUxFOUJRVThzUTBGQlF5eFBRVUZQTEVkQlFVc3NTMEZCU3l4RlFVRkRPMUZCUXpGQ0xFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NUMEZCVHl4RFFVRkRPMUZCUTNaQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NSMEZCZFVJc1JVRkJSVHRaUVVOdVF5eFBRVUZQTEVsQlFVa3NUMEZCVHl4RFFVRkRMRU5CUVU4c1QwRkJUeXhGUVVGRkxFMUJRVTBzUlVGQlJTeEZRVUZGTzJkQ1FVTXpReXhKUVVGSkxFMUJRVTBzUjBGQlJ5eEZRVUZGTEVOQlFVTTdaMEpCUTJoQ0xFbEJRVWs3YjBKQlEwWXNUVUZCVFN4SFFVRkhMRTFCUVUwc1NVRkJTU3hGUVVGRkxFTkJRVU03YVVKQlEzWkNPMmRDUVVGRExFOUJRVThzUTBGQlRTeEZRVUZGTzI5Q1FVTm1MRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHBRa0ZEV0R0blFrRkRSQ3hQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEYkVJc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlF6dFJRVU5NTEVOQlFVTXNRMEZCUVN4RFFVRkRPMGxCUTBvc1EwRkJRenREUVVOR08wRkJSVVFzVFVGQlRTeFZRVUZuUWl4VFFVRlRMRU5CUVVrc1MwRkJiMElzUlVGRGNrUXNUMEZCTUVJc1JVRkJSU3hQUVVGdFFpeEZRVUZGTEV0QlFXRXNRMEZCUXpzN1VVRkRMMFFzU1VGQlNTeEhRVUZwUWl4RFFVRkRPMUZCUTNSQ0xFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1RVRkJUU3hGUVVGRkxFVkJRVVU3V1VGRGNrTXNSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUlR0blFrRkROMElzU1VGQlNUdHZRa0ZEUml4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03YVVKQlEyWTdaMEpCUVVNc1QwRkJUeXhEUVVGRExFVkJRVVU3YjBKQlExWXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8ybENRVU5ZTzJkQ1FVTkVMRWRCUVVjc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dG5Ra0ZEYkVJc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFsQlEyaENMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRMGdzVlVGQlZTeERRVUZETEVkQlFVY3NSVUZCUlR0blFrRkRaQ3hIUVVGSExFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdaMEpCUTJ4Q0xIZEVRVUYzUkR0blFrRkRlRVFzVFVGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMWxCUTNCQ0xFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXp0WlFVTlFMRTlCUVU4c1JVRkJSU3hEUVVGRE8xRkJRMW9zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEVEN4RFFVRkRPME5CUVVFN1FVRkZSQ3hOUVVGTkxGVkJRVlVzU1VGQlNTeERRVUZETEVsQlFWa3NSVUZCUlN4SlFVRjNRaXhGUVVGRkxFOUJRWEZDTzBsQlEyaEdMRWxCUVVrc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eEpRVUZKTEZOQlFWTTdVVUZEY2tNc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTTVRaXhKUVVGSkxFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1UwRkJVenRSUVVNelF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU53UXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zUzBGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhsUVVGbExFVkJRVVVzU1VGQlNTeEZRVUZGTEVsQlFVa3NSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM0pHTEVOQlFVTTdRVUZGUkN4blJrRkJaMFk3UVVGRGFFWXNUVUZCVFN4VlFVRlZMRTFCUVUwc1EwRkJReXhOUVVGWExFVkJRVVVzVjBGQlowSXNTVUZCU1N4RlFVRkZMRXRCUVdNN1NVRkRkRVVzU1VGQlNTeExRVUZMTzFGQlExQXNTMEZCU3l4SFFVRkhMRWRCUVVjc1MwRkJTeXhKUVVGSkxFTkJRVU03TzFGQlEyeENMRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRGFFSXNTVUZCU1N4TlFVRk5MRXRCUVVzc1VVRkJVVHRSUVVOeVFpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRWRCUVVjc1MwRkJTeXhoUVVGaExGRkJRVkVzVjBGQlZ5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTNaRkxFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNWMEZCVnl4RFFVRkRMRTFCUVdNc1JVRkJSU3hSUVVGblFpeEZRVUZGTEZOQlFWTXNSMEZCUnl4TFFVRkxMRVZCUVVVc1MwRkJZenRKUVVNM1JpeEpRVUZKTEVOQlFVTXNUVUZCVFN4TFFVRkxMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNTVUZCU1N4UlFVRlJMRXRCUVVzc1RVRkJUU3hEUVVGRExHbENRVUZwUWl4RFFVRkRPMUZCUXpsRkxFTkJRVU1zVFVGQlRTeExRVUZMTEUxQlFVMHNRMEZCUXl4cFFrRkJhVUlzU1VGQlNTeFJRVUZSTEV0QlFVc3NUVUZCVFN4RFFVRkRMR2xDUVVGcFFpeERRVUZETzFGQlF6bEZMRU5CUVVNc1RVRkJUU3hMUVVGTExFMUJRVTBzUTBGQlF5eEhRVUZITEVsQlFVa3NVVUZCVVN4TFFVRkxMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdVVUZETVVZc1QwRkJUenRKUVVOVUxFMUJRVTBzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGSExGRkJRVkVzUTBGQlF5eEhRVUZITEZOQlFWTXNRMEZCUXp0SlFVTjZSQ3hOUVVGTkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVsQlFVa3NSVUZCUlN4SFFVRkhMRXRCUVVzc1lVRkJUQ3hMUVVGTExHTkJRVXdzUzBGQlN5eEhRVUZKTEVWQlFVVXNhVUpCUVdsQ0xGTkJRVk1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEY0VVc1NVRkJTU3hEUVVGRExGRkJRVkU3VVVGRFdDeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRmxCUVZrc1VVRkJVU3hUUVVGVExFMUJRVTBzYVVKQlFXbENMRk5CUVZNc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRGRFWXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hYUVVGWExFTkJRVU1zVFVGQmFVSXNSVUZCUlN4UlFVRnRRaXhGUVVGRkxFdEJRV003U1VGRGFFWXNUVUZCVFN4blFrRkJaMElzUjBGQlJ5eFJRVUZSTEVOQlFVTXNVVUZCVVN4RFFVRkRPMGxCUXpORExFMUJRVTBzWTBGQll5eEhRVUZITEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNN1NVRkRka01zVFVGQlRTeERRVUZETEdOQlFXTXNSVUZCUlN4blFrRkJaMElzUlVGQlJTeEhRVUZITEV0QlFVc3NZVUZCVEN4TFFVRkxMR05CUVV3c1MwRkJTeXhIUVVGSkxFVkJRVVVzWVVGQllTeERRVUZETEVOQlFVTTdTVUZGZEVVc1MwRkJTeXhOUVVGTkxFMUJRVTBzU1VGQlNTeFJRVUZSTEVOQlFVTXNUMEZCVHl4RlFVRkZPMUZCUTNKRExFMUJRVTBzV1VGQldTeEhRVUZITEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTjRSQ3hKUVVGSkxGbEJRVmtzU1VGQlNTeEpRVUZKTzFsQlEzUkNMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zVlVGQlZTeE5RVUZOTEVOQlFVTXNTVUZCU1N4WlFVRlpMRU5CUVVNc1EwRkJRenRSUVVOeVJDeEpRVUZKTEZsQlFWa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1RVRkJUU3hEUVVGRExFbEJRVWs3V1VGRGJFTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXhWUVVGVkxFMUJRVTBzUTBGQlF5eEpRVUZKTEd0Q1FVRnJRaXhOUVVGTkxFTkJRVU1zU1VGQlNTeFJRVUZSTEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRMnBITEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eG5Ra0ZCWjBJc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU42UXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpWQ0xFMUJRVTBzVjBGQlZ5eEhRVUZITEZsQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGVFTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3p0blFrRkRPVUlzVjBGQlZ5eERRVUZETEZkQlFWY3NSVUZCUlN4TFFVRkxMRVZCUVVVc1RVRkJUU3hGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzJsQ1FVTTFReXhKUVVGSkxFMUJRVTBzUTBGQlF5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVE8yZENRVU4yUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4SlFVRkpMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03TzJkQ1FVVXZReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEV0QlFVc3NSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRUUVVOeVF6dExRVU5HTzBGQlEwZ3NRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3haUVVGWkxFTkJRVU1zVFVGQk9FSXNSVUZCUlN4UlFVRm5RenRKUVVNelJpeExRVUZMTEUxQlFVMHNRMEZCUXl4WFFVRlhMRVZCUVVVc1lVRkJZU3hEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1JVRkJSVHRSUVVOdVJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhYUVVGWExFTkJRVU03V1VGRGNrTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXh6UWtGQmMwSXNWMEZCVnl4aFFVRmhMRU5CUVVNc1EwRkJRenRSUVVWc1JTeE5RVUZOTEZkQlFWY3NSMEZCUnl4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU03VVVGRGVFTXNTVUZCU1N4WFFVRlhMRmxCUVZrc1MwRkJTeXhKUVVGSkxHRkJRV0VzV1VGQldTeExRVUZMTzFsQlEyaEZMRmRCUVZjc1EwRkJReXhYUVVGWExFVkJRVVVzWVVGQllTeERRVUZETEVOQlFVTTdZVUZEY2tNc1NVRkJTU3hYUVVGWExGbEJRVmtzVFVGQlRTeEpRVUZKTEdGQlFXRXNXVUZCV1N4TlFVRk5PMWxCUTNaRkxGbEJRVmtzUTBGQlF5eFhRVUZYTEVWQlFVVXNZVUZCWVN4RFFVRkRMRU5CUVVNN1lVRkRkRU1zU1VGQlNTeE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNZVUZCWVN4RFFVRkRPMWxCUTNKRkxGZEJRVmNzUTBGQlF5eFhRVUZYTEVWQlFVVXNZVUZCWVN4RFFVRkRMRU5CUVVNN1lVRkRja01zU1VGQlNTeFhRVUZYTEVsQlFVa3NZVUZCWVR0WlFVTnVReXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEdGQlFXRXNZVUZCWVN4alFVRmpMRmRCUVZjc1YwRkJWeXhYUVVGWExFZEJRVWNzUTBGQlF5eERRVUZETzB0QlEycEhPMEZCUTBnc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeFhRVUZYTEVOQlFVTXNUVUZCYzBJc1JVRkJSU3hSUVVGM1FqdEpRVU14UlN4TlFVRk5MRmxCUVZrc1IwRkJSeXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETzBsQlEyNURMRTFCUVUwc1kwRkJZeXhIUVVGSExGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZGZGtNc1NVRkJTU3haUVVGWkxFbEJRVWtzWTBGQll5eEZRVUZGTzFGQlEyeERMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zTUVSQlFUQkVMRmxCUVZrc1IwRkJSenRaUVVOMlJpeG5RMEZCWjBNc1kwRkJZeXhGUVVGRkxFTkJRVU1zUTBGQlF6dExRVU55UkR0SlFVVkVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4WlFVRlpMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3VVVGRGNrTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExGbEJRVmtzUzBGQlN5eEpRVUZKTEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJXU3hMUVVGTE8xbEJRelZFTEZkQlFWY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRha01zU1VGQlNTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRmxCUVZrc1RVRkJUU3hKUVVGSkxGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCV1N4TlFVRk5PMWxCUTI1RkxGbEJRVmtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdZVUZEYkVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNdlFpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRmxCUVZrc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhUUVVGVExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1MwRkRha1k3UVVGRFNDeERRVUZETzBGQlJVUXNNa0pCUVRKQ08wRkJRek5DTEUxQlFVMHNWVUZCVlN4UlFVRlJMRU5CUVVNc1VVRkJaMElzUlVGQlJTeExRVUZwUWp0SlFVTXhSQ3hsUVVGbExFZEJRVWNzVVVGQlVTeERRVUZETzBsQlF6TkNMRXRCUVVzc1JVRkJSU3hEUVVGRE8wRkJRMVlzUTBGQlF6dEJRVVZFTEhWR1FVRjFSanRCUVVOMlJpeE5RVUZOTEZWQlFWVXNUVUZCVFN4RFFVRkRMRTFCUVRKQ08wbEJRMmhFTEVsQlFVa3NTMEZCU3l4RFFVRkRMR1ZCUVdVc1EwRkJReXhKUVVGSkxGTkJRVk03VVVGRGNrTXNTMEZCU3l4RFFVRkRMR1ZCUVdVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU01UWl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXp0QlFVTjZReXhEUVVGRE8wRkJSVVFzYzBaQlFYTkdPMEZCUTNSR0xFMUJRVTBzVlVGQlZTeExRVUZMTEVOQlFVTXNTMEZCTUVJN1NVRkRPVU1zU1VGQlNTeExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWxCUVVrc1UwRkJVenRSUVVOeVF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRemxDTEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJReXhMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETzBGQlEzWkRMRU5CUVVNN1FVRkZSQ3hUUVVGVExGbEJRVmtzUTBGQlF5eERRVUZUTEVWQlFVVXNRMEZCVlR0SlFVTjZReXhQUVVGUExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRGRrUXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJaMElzWVVGQllTeERRVUZETEZOQlFXbENMRVZCUVVVc1RVRkJXVHM3VVVGRGFrVXNTVUZCU1N4aFFVRmhMRU5CUVVNc1UwRkJVeXhEUVVGRE8xbEJRVVVzVDBGQlR6dFJRVU55UXl4TlFVRk5MRmRCUVZjc1IwRkJSeXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF6dFJRVU5zUkN4SlFVRkpMRmRCUVZjc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4TFFVRkxMRk5CUVZNc1JVRkJSVHRaUVVNdlF5eGhRVUZoTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRMmhETEU5QlFVODdVMEZEVWp0UlFVTkVMRTFCUVUwc1pVRkJaU3hIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU16UWl4TlFVRk5MR0ZCUVdFc1IwRkJSeXhOUVVGTkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNVMEZCVXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFJRVU0zUml4TlFVRk5MRWRCUVVjc1IwRkJSeXhKUVVGSkxFMUJRVTBzUTBGQlF5d3dRa0ZCTUVJc1EwRkJReXhEUVVGRE8xRkJRMjVFTEV0QlFVc3NUVUZCVFN4RFFVRkRMRWxCUVVrc1lVRkJZU3hGUVVGRk8xbEJRemRDTEUxQlFVMHNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEYUVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eEpRVUZKTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXp0blFrRkJSU3hUUVVGVE8xbEJReTlFTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8yZENRVU55UXl4TlFVRk5MRmRCUVZjc1IwRkJTU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZaTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8yZENRVU53UkN4SlFVRkpMRlZCUVZVc1EwRkJRenRuUWtGRFppeEpRVUZKTEZkQlFWY3NTVUZCU1N4RFFVRkJMRmRCUVZjc1lVRkJXQ3hYUVVGWExIVkNRVUZZTEZkQlFWY3NRMEZCUlN4TlFVRk5MRWxCUVVjc1EwRkJRenR2UWtGQlJTeFZRVUZWTEVkQlFVY3NWMEZCVnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU40UlN4bFFVRmxMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhGUVVGRkxFdEJRVXNzUTBGQlF5eE5RVUZOTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RlFVRkZMRWRCUVZNc1JVRkJSVHR2UWtGRE4wY3NUVUZCVFN4SFFVRkhMRWRCUVVjc1RVRkJUU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2IwSkJRMnBGTERSRFFVRTBRenR2UWtGRE5VTXNTVUZCU1N4SFFVRkhMRXRCUVVzc1NVRkJTVHQzUWtGQlJTeE5RVUZOTEZkQlFWY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU03WjBKQlEyaEVMRU5CUVVNc1EwRkJRU3hGUVVGRkxFVkJRVU1zVlVGQlZTeEZRVUZGTEZWQlFWVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRoUVVNdlFqdFRRVU5HTzFGQlEwUXNZVUZCWVN4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU5vUXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFMUJRVTA3V1VGQlJTeFBRVUZQTzFGQlEzQkRMRmRCUVZjc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SFFVRkhMRVZCUVVNc1MwRkJTeXhGUVVGRkxHVkJRV1VzUlVGQlF5eERRVUZETzBsQlF6TkVMRU5CUVVNN1EwRkJRVHRCUVVWRUxFMUJRVTBzVlVGQlowSXNVVUZCVVN4RFFVRkRMRTlCUVhWRk96czdPMUZCUTNCSExFMUJRVTBzVVVGQlVTeEhRVUZITEUxQlFVRXNUVUZCUVN4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExHTkJRV01zUlVGQlJTd3dRMEZCUlN4SlFVRkpMREJEUVVGRkxFOUJRVThzUTBGQlF6dFJRVU5vUlN4TlFVRk5MR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdVVUZEYWtNc1RVRkJUU3hQUVVGUExFZEJRM1ZFTEVWQlFVVXNRMEZCUXp0UlFVTjJSU3hQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRPMUZCUXpkQ0xFOUJRVThzWVVGQlVDeFBRVUZQTEdOQlFWQXNUMEZCVHl4SlFVRlFMRTlCUVU4c1IwRkJTeXhGUVVGRkxFVkJRVU03VVVGRFppeFpRVUZCTEU5QlFWRXNSVUZCUXl4WFFVRlhMSFZEUVVGWUxGZEJRVmNzUjBGQlN5eEpRVUZKTEZkQlFWY3NSVUZCUlN4RlFVRkRPMUZCUXpORExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVMEZCVXl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVNeFFpeExRVUZMTEUxQlFVMHNRMEZCUXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSVHRaUVVOb1JDeEpRVUZKTEVOQlFVRXNUMEZCVHl4aFFVRlFMRTlCUVU4c2RVSkJRVkFzVDBGQlR5eERRVUZGTEZGQlFWRXNTMEZCU1N4VFFVRlRMRVZCUVVVN1owSkJRMnhETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEU5QlFVOHNZVUZCVUN4UFFVRlBMSFZDUVVGUUxFOUJRVThzUTBGQlJTeFJRVUZSTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN2IwSkJRMmhGTEZOQlFWTTdZVUZEV2p0WlFVTkVMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eEhRVUZITEZkQlFWY3NRMEZCUXl4RFFVRkRPMWxCUTNaRExFbEJRVWs3WjBKQlEwWXNTVUZCU1N4TFFVRkxMRU5CUVVNc1RVRkJUVHR2UWtGRFpDeE5RVUZOTEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRoUVVONFFqdFpRVUZETEU5QlFVOHNRMEZCVFN4RlFVRkZPMmRDUVVObUxFdEJRVXNzUTBGQlF5eFpRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8yRkJRMjVETzFsQlEwUXNUVUZCVFN4RFFVRkRMRWRCUVVjc1RVRkJRU3hMUVVGTExFTkJRVU1zUzBGQlN5eHRRMEZCU1N4RlFVRkZMRU5CUVVNN1dVRkROVUlzVFVGQlRTeEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRPMWxCUTJZc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTzJkQ1FVTXZRaXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeFBRVUZQTEdGQlFWQXNUMEZCVHl4MVFrRkJVQ3hQUVVGUExFTkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTm9SQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEUxQlFVMHNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNTVUZCU1N4VFFVRlRMRU5CUVVNc1EwRkJRenRaUVVNelJTeEpRVUZKTzJkQ1FVTkdMRWxCUVVrc1MwRkJTeXhEUVVGRExFdEJRVXM3YjBKQlEySXNUVUZCVFN4TFFVRkxMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU03WVVGRGRrSTdXVUZCUXl4UFFVRlBMRU5CUVUwc1JVRkJSVHRuUWtGRFppeExRVUZMTEVOQlFVTXNWMEZCVnl4SFFVRkhMRU5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dGhRVU5zUXp0WlFVTkVMRWxCUVVrc1MwRkJTeXhEUVVGRExGZEJRVmM3WjBKQlEyNUNMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlF5eFJRVUZSTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4WFFVRlhMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlF6ZEhMRWxCUVVrc1MwRkJTeXhEUVVGRExGbEJRVms3WjBKQlEzQkNMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlF5eFJRVUZSTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4WlFVRlpMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlF6bEhMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0VFFVTjJRanRSUVVORUxFbEJRVWtzVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4alFVRmpMRVZCUVVVN1dVRkRkRU1zVFVGQlRTeExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkRiRUlzU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTzJkQ1FVTnVReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETzI5Q1FVTllMRkZCUVZFc1JVRkJSU3h6UWtGQmMwSTdiMEpCUTJoRExFbEJRVWtzUlVGQlJTeFpRVUZaTzI5Q1FVTnNRaXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4VFFVRlRMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTE8ybENRVU53UlN4RFFVRkRMRU5CUVVNN1lVRkRTanRUUVVOR08xRkJRMFFzU1VGQlNTeFBRVUZQTEVOQlFVTXNWMEZCVnl4RFFVRkRMRTFCUVUwc1JVRkJSVHRaUVVNNVFpeE5RVUZOTEUxQlFVMHNSMEZCUnl4SlFVRkpMRVZCUVVVc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFpRVU12UWl4TlFVRk5MRlZCUVZVc1IwRkJSeXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRPMWxCUXpORUxFMUJRVTBzVDBGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU03V1VGRGVFUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdXVUZEYWtRc1RVRkJUU3hYUVVGWExFZEJRVWNzZVVaQlFYbEdMRU5CUVVNN1dVRkRPVWNzVFVGQlRTeE5RVUZOTEVkQlFVYzdaMEpCUTJJc1ZVRkJWU3hGUVVGRkxGVkJRVlU3WjBKQlEzUkNMRTlCUVU4c1JVRkJSU3hQUVVGUE8yZENRVU5vUWl4TlFVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFMUJRVTA3WjBKQlEzSkNMRTlCUVU4c1JVRkJSU3hSUVVGUk8yRkJRMnhDTEVOQlFVTTdXVUZEUml4TFFVRkxMRTFCUVUwc1EwRkJReXhKUVVGSkxFMUJRVTA3WjBKQlFVVXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFVkJRVVVzUlVGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRkZCUVZFc1RVRkJUU3hEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1RVRkJUU3hGUVVGRExFTkJRVU1zUTBGQlF6dFpRVU42Uml4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExGZEJRVmNzUlVGQlJTeE5RVUZOTEVWQlFVVXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF6dFRRVU51UkR0UlFVTkVMRTlCUVU4c1QwRkJUeXhEUVVGRE96dERRVU5vUWp0QlFVVkVMRk5CUVdVc1VVRkJVU3hEUVVGRExFTkJRVThzUlVGQlJTeFRRVUUyUWpzN08xRkJRelZFTEVsQlFVa3NRMEZCZFVjc1EwRkJRenRSUVVNMVJ5eE5RVUZOTEUxQlFVMHNSMEZCUnl4VFFVRlRMRWxCUVVrc1UwRkJVeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF5eFRRVUZUTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM0pITEUxQlFVMHNTVUZCU1N4SFFVRkhMRU5CUVVFc1RVRkJRU3hEUVVGRExFTkJRVU1zVDBGQlR5d3dRMEZCUlN4VlFVRlZMRXRCUVVrc1RVRkJUU3hEUVVGRE8xRkJRemRETEUxQlFVMHNWVUZCVlN4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRkJMRU5CUVVNc1EwRkJReXhQUVVGUExEQkRRVUZGTEZWQlFWVXNRMEZCUXp0UlFVTTVSQ3hKUVVGSkxFTkJRVU1zU1VGQlNUdFpRVU5RTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU1zVVVGQlVTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRMnBFTEUxQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRGVrSXNTVUZCU1R0WlFVTkdMRWxCUVVrc1NVRkJTVHRuUWtGRFRpeERRVUZETEVkQlFVY3NSVUZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeFZRVUZYTEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hQUVVGUExFVkJRVVVzU1VGQlNTeEZRVUZETEVOQlFVTTdPMmRDUVVVdlJDeERRVUZETEVkQlFVY3NSVUZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeE5RVUZCTEUxQlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3h0UTBGQlNTeEpRVUZKTEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hQUVVGUExFVkJRVVVzUzBGQlN5eEZRVUZETEVOQlFVTTdVMEZET1VVN1VVRkJReXhQUVVGUExFTkJRVTBzUlVGQlJUdFpRVU5tTEVOQlFVTXNSMEZCUnl4RlFVRkRMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEVOQlFVTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEU5QlFVOHNSVUZCUlN4TFFVRkxMRVZCUVVNc1EwRkJRenRUUVVOdVJUdFJRVU5FTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRGVFSXNZVUZCWVR0UlFVTmlMRU5CUVVNc1EwRkJReXhGUVVGRkxFZEJRVWNzU1VGQlNTeEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVTndRaXhKUVVGSkxFTkJRVU1zU1VGQlNUdFpRVU5RTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU1zVVVGQlVTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRkZCUVZFc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdVVUZEYWtVc1EwRkJReXhEUVVGRExGRkJRVkVzUjBGQlJ5eERRVUZETEVOQlFVTXNVVUZCVVN4RFFVRkRPMUZCUTNoQ0xFTkJRVU1zUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVOb1FpeFBRVUZQTEVOQlFVTXNRMEZCUXpzN1EwRkRWanRCUVVWRUxEWkNRVUUyUWp0QlFVTTNRaXhOUVVGTkxGVkJRV2RDTEV0QlFVc3NRMEZCUXl4RlFVRlZPenRSUVVOd1F5eE5RVUZOTEVsQlFVa3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRE9VTXNRMEZCUXp0RFFVRkJPMEZCUlVRc1RVRkJUU3hWUVVGblFpeFZRVUZWTEVOQlFVTXNXVUZCTWtJc1JVRkRNVVFzVVVGQlowSXNhMEpCUVd0Q0xFVkJRVVVzVDBGQlpTeEhRVUZITEVWQlFVVXNWMEZCYlVJc1JVRkJSVHM3VVVGRE4wVXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTEVWQlFVVXNSVUZCUlR0WlFVTnlReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eEZRVUZGTzJkQ1FVTmtMR0ZCUVdFc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dG5Ra0ZETVVJc1RVRkJUU3hEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRNMElzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTFRc1lVRkJZVHRaUVVOaUxFMUJRVTBzVlVGQlZTeEhRVUZaTEZkQlFWY3NRMEZCUXl4SFFVRkhMRVZCUVVVN1owSkJRek5ETEVsQlFVa3NXVUZCV1N4RlFVRkZMRVZCUVVVN2IwSkJRMnhDTEdGQlFXRXNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenR2UWtGRE1VSXNUMEZCVHl4RlFVRkZMRU5CUVVNN2FVSkJRMWc3V1VGRFNDeERRVUZETEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRaaXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5NTEVOQlFVTTdRMEZCUVR0QlFVVkVMRTFCUVUwc1ZVRkJWU3hsUVVGbExFTkJRVU1zVjBGQmJVSTdTVUZEYWtRc1RVRkJUU3hQUVVGUExFZEJRVWNzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4alFVRmpMRVZCUVVVc1EwRkJRenRKUVVNelF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRSUVVOMlF5eEpRVUZKTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFbEJRVWtzVjBGQlZ6dFpRVU5xUXl4UFFVRlBMRWxCUVVrc1EwRkJRenRMUVVObU8wbEJRMFFzVDBGQlR5eExRVUZMTEVOQlFVTTdRVUZEWml4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGblFpeFZRVUZWTEVOQlFVTXNRMEZCVXl4RlFVRkZMRVZCUVdkQ0xFVkJRVVVzYzBKQlFTdENMRXRCUVVzN08xRkJRMmhITEVsQlFVa3NiVUpCUVcxQ08xbEJRVVVzVFVGQlRTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTJwRkxFMUJRVTBzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1dVRkJXU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFGQlEzWkRMRTFCUVUwc1ZVRkJWU3hIUVVGSExHZENRVUZuUWl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUlVGQlJTeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRPMUZCUXk5RUxFMUJRVTBzVVVGQlVTeEhRVUZITEVkQlFVY3NWVUZCVlN4WFFVRlhMRlZCUVZVc1VVRkJVU3hWUVVGVk8wMUJRMnBGTEZWQlFWVXNWVUZCVlN4VlFVRlZMRTlCUVU4c1ZVRkJWU3hKUVVGSkxFTkJRVU03VVVGRGVFUXNUVUZCVFN4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRMllzU1VGQlNUdFpRVU5HTEVsQlFVa3NUVUZCVFN4SFFVRkhMRVZCUVVVc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZETjBJc1RVRkJUU3hWUVVGVkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNVVUZCVVN4RFFVRkRMR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eEpRVUZKTEVWQlF6bEVMRzlDUVVGdlFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUXpsQ0xFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRlRU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU16UkN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU53UkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRuUWtGQlJTeEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdXVUZEY2tRc1JVRkJSU3hEUVVGRExHRkJRV0VzUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEY2tJc1RVRkJUU3hMUVVGTExFZEJRVWNzVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRE0wTXNUVUZCVFN4UlFVRlJMRWRCUVRSQ0xFVkJRVVVzUTBGQlF6dFpRVU0zUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zVDBGQlR5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1UwRkJVeXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU40Unl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzFsQlF6VkNMRTFCUVUwc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEycENMRTFCUVUwc1RVRkJUU3hIUVVGSExFVkJRVVVzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0WlFVTXZRaXhOUVVGTkxGRkJRVkVzUjBGQlJ5eE5RVUZOTEVOQlFVTXNWVUZCVlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8xbEJRekZETEVWQlFVVXNRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJRenRaUVVOcVFpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xbEJRM2hETEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03V1VGRGRFSXNUVUZCVFN4VlFVRlZMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVVVGQlVTeERRVUZETEdGQlFXRXNRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhKUVVGSkxFVkJRemxFTEdkRFFVRm5ReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFsQlF6RkRMRTFCUVUwc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEycENMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEZUVNc1RVRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUzBGQlN5eE5RVUZOTEVOQlFVVXNRMEZCUXp0WlFVTm9SU3hYUVVGWExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlF6VkNMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRE5VVTdaMEpCUVZNN1dVRkRVaXhGUVVGRkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdXVUZEV0N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0VFFVTXpRanRKUVVOSUxFTkJRVU03UTBGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQXFJR0Z6SUdkeWIyc2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMMmR5YjJzbk8xeHVhVzF3YjNKMElDb2dZWE1nUkVjZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyUm5KenRjYm1sdGNHOXlkQ0I3VDJKelpYSjJZV0pzWlN3Z1UzVmljMk55YVhCMGFXOXVmU0JtY205dElDZHllR3B6Snp0Y2JtbHRjRzl5ZENCVWFXMWxiM1YwSUQwZ1RtOWtaVXBUTGxScGJXVnZkWFE3WEc1cGJYQnZjblFnZTBSaGRHRkdjbUZ0WlgwZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyUm5KenRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSFJsYzNSek9pQjdYRzRnSUZ0clpYazZJSE4wY21sdVoxMDZJSHRjYmlBZ0lDQjBaWE4wY3o4NklGUmxjM1JiWFN3Z1ltVm1iM0psUHpvZ0tDa2dQVDRnVUhKdmJXbHpaVHgyYjJsa1Bpd2dZV1owWlhJL09pQW9LU0E5UGlCUWNtOXRhWE5sUEhadmFXUStMRnh1SUNBZ0lHSmxabTl5WlZOMFlYUjFjejg2SUhOMGNtbHVaeXdnWVdaMFpYSlRkR0YwZFhNL09pQnpkSEpwYm1kY2JpQWdmVnh1ZlNBOUlIdDlPMXh1WEc1amIyNXpkQ0JoZFhSdlZHVnpkSE5EWVhST1lXMWxJRDBnSjBGMWRHOGdWR1Z6ZEhNbk8xeHVZMjl1YzNRZ2QyRnpVbVZuYVhOMFpYSmxaRG9nZTF0clpYazZJSE4wY21sdVoxMDZJR0p2YjJ4bFlXNTlJRDBnZTMwN1hHNWxlSEJ2Y25RZ2JHVjBJR04xY25KbGJuUkRZWFJsWjI5eWVUb2djM1J5YVc1bk8xeHVYRzVsZUhCdmNuUWdibUZ0WlhOd1lXTmxJR0Z6YzNWeVpTQjdYRzRnSUdWNGNHOXlkQ0JtZFc1amRHbHZiaUJ1YjNST2RXeHNLSFpoYkhWbE9pQmhibmtzSUc1aGJXVS9PaUJ6ZEhKcGJtY3BJSHRjYmlBZ0lDQnBaaUFvZG1Gc2RXVWdQVDBnYm5Wc2JDbGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ0pIdHVZVzFsSUQwOUlHNTFiR3dnUHlBblZtRnNkV1VuSURvZ2JtRnRaWDBnYm05MElHUmxabWx1WldSZ0tUdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRlJsYzNSUGNIUnBiMjV6SUh0Y2JpQWdkR2x0Wlc5MWREODZJRzUxYldKbGNqdGNiaUFnZFc1b1lXNWtiR1ZrUlhoalpYQjBhVzl1VkdsdFpXOTFkRDg2SUc1MWJXSmxjanRjYmlBZ2MydHBjRkpsWVhOdmJqODZJSE4wY21sdVp6dGNibjFjYmx4dVpYaHdiM0owSUdOc1lYTnpJRlJsYzNSRGIyNTBaWGgwSUh0Y2JpQWdZMkYwWTJoVmJtaGhibVJzWldRZ1BTQjBjblZsTzF4dUlDQnlaWEJ2Y25RZ1BTQm1ZV3h6WlR0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2loallYUmphRlZ1YUdGdVpHeGxaRDg2SUdKdmIyeGxZVzRzSUhKbGNHOXlkRDg2SUdKdmIyeGxZVzRwSUh0Y2JpQWdJQ0JwWmlBb1kyRjBZMmhWYm1oaGJtUnNaV1FnSVQwOUlIVnVaR1ZtYVc1bFpDa2dkR2hwY3k1allYUmphRlZ1YUdGdVpHeGxaQ0E5SUdOaGRHTm9WVzVvWVc1a2JHVmtPMXh1SUNBZ0lHbG1JQ2h5WlhCdmNuUWdJVDA5SUhWdVpHVm1hVzVsWkNrZ2RHaHBjeTV5WlhCdmNuUWdQU0J5WlhCdmNuUTdYRzRnSUgwN1hHNTlYRzVjYm1WNGNHOXlkQ0JqYkdGemN5QlVaWE4wSUh0Y2JpQWdkR1Z6ZERvZ0tDa2dQVDRnVUhKdmJXbHpaVHhoYm5rK08xeHVJQ0J1WVcxbE9pQnpkSEpwYm1jN1hHNGdJR05oZEdWbmIzSjVPaUJ6ZEhKcGJtYzdYRzRnSUc5d2RHbHZibk0vT2lCVVpYTjBUM0IwYVc5dWN6dGNibHh1SUNCamIyNXpkSEoxWTNSdmNpaGpZWFJsWjI5eWVUb2djM1J5YVc1bkxDQnVZVzFsT2lCemRISnBibWNzSUhSbGMzUTZJQ2dwSUQwK0lGQnliMjFwYzJVOFlXNTVQaXdnYjNCMGFXOXVjejg2SUZSbGMzUlBjSFJwYjI1ektTQjdYRzRnSUNBZ2RHaHBjeTVqWVhSbFoyOXllU0E5SUdOaGRHVm5iM0o1TzF4dUlDQWdJSFJvYVhNdWJtRnRaU0E5SUc1aGJXVTdYRzRnSUNBZ2IzQjBhVzl1Y3lBL1B6MGdlMzA3WEc0Z0lDQWdiM0IwYVc5dWN5NTBhVzFsYjNWMElEOC9QU0F6TURBd01EdGNiaUFnSUNCMGFHbHpMbTl3ZEdsdmJuTWdQU0J2Y0hScGIyNXpPMXh1SUNBZ0lIUm9hWE11ZEdWemRDQTlJR0Z6ZVc1aklDZ3BPaUJRY205dGFYTmxQR0Z1ZVQ0Z1BUNGdlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLR0Z6ZVc1aklDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYkdWMElISmxjM1ZzZENBOUlDY25PMXh1SUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsYzNWc2RDQTlJR0YzWVdsMElIUmxjM1FvS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pUb2dZVzU1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdjbVZxWldOMEtHVXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhKbGMyOXNkbVVvY21WemRXeDBLVHRjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJSDA3WEc0Z0lIMWNibjFjYmx4dVpYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJSFJsYzNSRmRtVnVkRHhVUGlobGRtVnVkRG9nVDJKelpYSjJZV0pzWlR4VVBpeGNiaUFnYUdGdVpHeGxjam9nS0dGeVozTTZJRlFwSUQwK0lIWnZhV1FzSUhSeWFXZG5aWEk2SUNncElEMCtJSFp2YVdRc0lHMXpPaUJ1ZFcxaVpYSWdQU0F3S1RvZ1VISnZiV2x6WlR4emRISnBibWMrSUh0Y2JpQWdiR1YwSUhOMVlqb2dVM1ZpYzJOeWFYQjBhVzl1TzF4dUlDQnlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVW9LSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dUlDQWdJSE4xWWlBOUlHVjJaVzUwTG5OMVluTmpjbWxpWlNnb1lYSm5jeWtnUFQ0Z2UxeHVJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnYUdGdVpHeGxjaWhoY21kektUdGNiaUFnSUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQWdJQ0FnY21WcVpXTjBLR1VwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYzNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDQWdJQ0J5WlhOdmJIWmxLQ2RQU3ljcE8xeHVJQ0FnSUgwcE8xeHVJQ0FnSUhObGRGUnBiV1Z2ZFhRb0tDa2dQVDRnZTF4dUlDQWdJQ0FnYzNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDQWdJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnY0hKbFptVnlMWEJ5YjIxcGMyVXRjbVZxWldOMExXVnljbTl5YzF4dUlDQWdJQ0FnY21WcVpXTjBLQ2QwYVcxbGIzVjBKeWs3WEc0Z0lDQWdmU3dnYlhNcE8xeHVJQ0FnSUhSeWFXZG5aWElvS1R0Y2JpQWdmU2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjBaWE4wS0c1aGJXVTZJSE4wY21sdVp5d2dkR1Z6ZERvZ0tDa2dQVDRnVUhKdmJXbHpaVHhoYm5rK0xDQnZjSFJwYjI1elB6b2dWR1Z6ZEU5d2RHbHZibk1wT2lCMmIybGtJSHRjYmlBZ2FXWWdLSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwZ1BUMGdkVzVrWldacGJtVmtLVnh1SUNBZ0lIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjBnUFNCN2ZUdGNiaUFnYVdZZ0tIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjB1ZEdWemRITWdQVDBnZFc1a1pXWnBibVZrS1Z4dUlDQWdJSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwdWRHVnpkSE1nUFNCYlhUdGNiaUFnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTNTBaWE4wY3lFdWNIVnphQ2h1WlhjZ1ZHVnpkQ2hqZFhKeVpXNTBRMkYwWldkdmNua3NJRzVoYldVc0lIUmxjM1FzSUc5d2RHbHZibk1wS1R0Y2JuMWNibHh1THlvZ1ZHVnpkSE1nZEhkdklHOWlhbVZqZEhNZ1ptOXlJR1Z4ZFdGc2FYUjVMQ0IwYUhKdmQzTWdZVzRnWlhoalpYQjBhVzl1SUdsbUlIUm9aWGtnWVhKbElHNXZkQ0JsY1hWaGJDNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJsZUhCbFkzUW9ZV04wZFdGc09pQmhibmtzSUdWNGNHVmpkR1ZrT2lCaGJua2dQU0IwY25WbExDQmxjbkp2Y2o4NklITjBjbWx1WnlrNklIWnZhV1FnZTF4dUlDQnBaaUFvWlhKeWIzSXBYRzRnSUNBZ1pYSnliM0lnUFNCZ0pIdGxjbkp2Y24wc0lHQTdYRzRnSUdWc2MyVWdaWEp5YjNJZ1BTQW5KenRjYmlBZ2FXWWdLR0ZqZEhWaGJDQWhQVDBnWlhod1pXTjBaV1FwWEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQWtlMlZ5Y205eWZVVjRjR1ZqZEdWa0lGd2lKSHRsZUhCbFkzUmxaSDFjSWl3Z1oyOTBJRndpSkh0aFkzUjFZV3g5WENKZ0tUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdWNGNHVmpkRVpzYjJGMEtHRmpkSFZoYkRvZ2JuVnRZbVZ5TENCbGVIQmxZM1JsWkRvZ2JuVnRZbVZ5TENCMGIyeGxjbUZ1WTJVZ1BTQXdMakF3TVN3Z1pYSnliM0kvT2lCemRISnBibWNwT2lCMmIybGtJSHRjYmlBZ2FXWWdLQ2hoWTNSMVlXd2dQVDA5SUU1MWJXSmxjaTVRVDFOSlZFbFdSVjlKVGtaSlRrbFVXU0FtSmlCbGVIQmxZM1JsWkNBOVBUMGdUblZ0WW1WeUxsQlBVMGxVU1ZaRlgwbE9Sa2xPU1ZSWktTQjhmRnh1SUNBZ0lDQWdLR0ZqZEhWaGJDQTlQVDBnVG5WdFltVnlMazVGUjBGVVNWWkZYMGxPUmtsT1NWUlpJQ1ltSUdWNGNHVmpkR1ZrSUQwOVBTQk9kVzFpWlhJdVRrVkhRVlJKVmtWZlNVNUdTVTVKVkZrcElIeDhYRzRnSUNBZ0lDQW9ZV04wZFdGc0lEMDlQU0JPZFcxaVpYSXVUbUZPSUNZbUlHVjRjR1ZqZEdWa0lEMDlQU0JPZFcxaVpYSXVUbUZPS1NCOGZDQW9hWE5PWVU0b1lXTjBkV0ZzS1NBbUppQnBjMDVoVGlobGVIQmxZM1JsWkNrcEtWeHVJQ0FnSUhKbGRIVnlianRjYmlBZ1kyOXVjM1FnWVhKbFJYRjFZV3dnUFNCTllYUm9MbUZpY3loaFkzUjFZV3dnTFNCbGVIQmxZM1JsWkNrZ1BDQjBiMnhsY21GdVkyVTdYRzRnSUdWNGNHVmpkQ2hoY21WRmNYVmhiQ3dnZEhKMVpTd2dZQ1I3WlhKeWIzSWdQejhnSnlkOUlDaDBiMnhsY21GdVkyVWdQU0FrZTNSdmJHVnlZVzVqWlgwcFlDazdYRzRnSUdsbUlDZ2hZWEpsUlhGMVlXd3BYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCRmVIQmxZM1JsWkNBa2UyVjRjR1ZqZEdWa2ZTd2daMjkwSUNSN1lXTjBkV0ZzZlNBb2RHOXNaWEpoYm1ObElEMGdKSHQwYjJ4bGNtRnVZMlY5S1dBcE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWlhod1pXTjBWR0ZpYkdVb1lXTjBkV0ZzT2lCRVlYUmhSbkpoYldVc0lHVjRjR1ZqZEdWa09pQkVZWFJoUm5KaGJXVXNJR1Z5Y205eVB6b2djM1J5YVc1bktUb2dkbTlwWkNCN1hHNGdJR052Ym5OMElHVjRjR1ZqZEdWa1VtOTNRMjkxYm5RZ1BTQmxlSEJsWTNSbFpDNXliM2REYjNWdWREdGNiaUFnWTI5dWMzUWdZV04wZFdGc1VtOTNRMjkxYm5RZ1BTQmhZM1IxWVd3dWNtOTNRMjkxYm5RN1hHNGdJR1Y0Y0dWamRDaGhZM1IxWVd4U2IzZERiM1Z1ZEN3Z1pYaHdaV04wWldSU2IzZERiM1Z1ZEN3Z1lDUjdaWEp5YjNJZ1B6OGdKeWQ5TENCeWIzY2dZMjkxYm5SZ0tUdGNibHh1SUNCbWIzSWdLR052Ym5OMElHTnZiSFZ0YmlCdlppQmxlSEJsWTNSbFpDNWpiMngxYlc1ektTQjdYRzRnSUNBZ1kyOXVjM1FnWVdOMGRXRnNRMjlzZFcxdUlEMGdZV04wZFdGc0xtTnZiSFZ0Ym5NdVlubE9ZVzFsS0dOdmJIVnRiaTV1WVcxbEtUdGNiaUFnSUNCcFppQW9ZV04wZFdGc1EyOXNkVzF1SUQwOUlHNTFiR3dwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRU52YkhWdGJpQWtlMk52YkhWdGJpNXVZVzFsZlNCdWIzUWdabTkxYm1SZ0tUdGNiaUFnSUNCcFppQW9ZV04wZFdGc1EyOXNkVzF1TG5SNWNHVWdJVDBnWTI5c2RXMXVMblI1Y0dVcFhHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVOdmJIVnRiaUFrZTJOdmJIVnRiaTV1WVcxbGZTQjBlWEJsSUdWNGNHVmpkR1ZrSUNSN1kyOXNkVzF1TG5SNWNHVjlJR2R2ZENBa2UyRmpkSFZoYkVOdmJIVnRiaTUwZVhCbGZXQXBPMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2daWGh3WldOMFpXUlNiM2REYjNWdWREc2dhU3NyS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0IyWVd4MVpTQTlJR052YkhWdGJpNW5aWFFvYVNrN1hHNGdJQ0FnSUNCamIyNXpkQ0JoWTNSMVlXeFdZV3gxWlNBOUlHRmpkSFZoYkVOdmJIVnRiaTVuWlhRb2FTazdYRzRnSUNBZ0lDQnBaaUFvWTI5c2RXMXVMblI1Y0dVZ1BUMGdSRWN1VkZsUVJTNUdURTlCVkNsY2JpQWdJQ0FnSUNBZ1pYaHdaV04wUm14dllYUW9ZV04wZFdGc1ZtRnNkV1VzSUhaaGJIVmxMQ0F3TGpBd01ERXNJR1Z5Y205eUtUdGNiaUFnSUNBZ0lHVnNjMlVnYVdZZ0tHTnZiSFZ0Ymk1MGVYQmxJRDA5SUVSSExsUlpVRVV1UkVGVVJWOVVTVTFGS1Z4dUlDQWdJQ0FnSUNCbGVIQmxZM1FvWVdOMGRXRnNWbUZzZFdVdWFYTlRZVzFsS0haaGJIVmxLU3dnZEhKMVpTd2daWEp5YjNJcE8xeHVJQ0FnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0JsZUhCbFkzUW9ZV04wZFdGc1ZtRnNkV1VzSUhaaGJIVmxMQ0JsY25KdmNpazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmxlSEJsWTNSUFltcGxZM1FvWVdOMGRXRnNPaUI3SUZ0clpYazZJSE4wY21sdVoxMDZJR0Z1ZVNCOUxDQmxlSEJsWTNSbFpEb2dleUJiYTJWNU9pQnpkSEpwYm1kZE9pQmhibmtnZlNrZ2UxeHVJQ0JtYjNJZ0tHTnZibk4wSUZ0bGVIQmxZM1JsWkV0bGVTd2daWGh3WldOMFpXUldZV3gxWlYwZ2IyWWdUMkpxWldOMExtVnVkSEpwWlhNb1pYaHdaV04wWldRcEtTQjdYRzRnSUNBZ2FXWWdLQ0ZoWTNSMVlXd3VhR0Z6VDNkdVVISnZjR1Z5ZEhrb1pYaHdaV04wWldSTFpYa3BLVnh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQkZlSEJsWTNSbFpDQndjbTl3WlhKMGVTQmNJaVI3Wlhod1pXTjBaV1JMWlhsOVhDSWdibTkwSUdadmRXNWtZQ2s3WEc1Y2JpQWdJQ0JqYjI1emRDQmhZM1IxWVd4V1lXeDFaU0E5SUdGamRIVmhiRnRsZUhCbFkzUmxaRXRsZVYwN1hHNGdJQ0FnYVdZZ0tHRmpkSFZoYkZaaGJIVmxJR2x1YzNSaGJtTmxiMllnUVhKeVlYa2dKaVlnWlhod1pXTjBaV1JXWVd4MVpTQnBibk4wWVc1alpXOW1JRUZ5Y21GNUtWeHVJQ0FnSUNBZ1pYaHdaV04wUVhKeVlYa29ZV04wZFdGc1ZtRnNkV1VzSUdWNGNHVmpkR1ZrVm1Gc2RXVXBPMXh1SUNBZ0lHVnNjMlVnYVdZZ0tHRmpkSFZoYkZaaGJIVmxJR2x1YzNSaGJtTmxiMllnVDJKcVpXTjBJQ1ltSUdWNGNHVmpkR1ZrVm1Gc2RXVWdhVzV6ZEdGdVkyVnZaaUJQWW1wbFkzUXBYRzRnSUNBZ0lDQmxlSEJsWTNSUFltcGxZM1FvWVdOMGRXRnNWbUZzZFdVc0lHVjRjR1ZqZEdWa1ZtRnNkV1VwTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLRTUxYldKbGNpNXBjMFpwYm1sMFpTaGhZM1IxWVd4V1lXeDFaU2tnSmlZZ1RuVnRZbVZ5TG1selJtbHVhWFJsS0dWNGNHVmpkR1ZrVm1Gc2RXVXBLVnh1SUNBZ0lDQWdaWGh3WldOMFJteHZZWFFvWVdOMGRXRnNWbUZzZFdVc0lHVjRjR1ZqZEdWa1ZtRnNkV1VwTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLR0ZqZEhWaGJGWmhiSFZsSUNFOUlHVjRjR1ZqZEdWa1ZtRnNkV1VwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRVY0Y0dWamRHVmtJQ2drZTJWNGNHVmpkR1ZrVm1Gc2RXVjlLU0JtYjNJZ2EyVjVJQ2NrZTJWNGNHVmpkR1ZrUzJWNWZTY3NJR2R2ZENBb0pIdGhZM1IxWVd4V1lXeDFaWDBwWUNrN1hHNGdJSDFjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHVjRjR1ZqZEVGeWNtRjVLR0ZqZEhWaGJEb2dRWEp5WVhsTWFXdGxQR0Z1ZVQ0c0lHVjRjR1ZqZEdWa09pQkJjbkpoZVV4cGEyVThZVzU1UGlrZ2UxeHVJQ0JqYjI1emRDQmhZM1IxWVd4TVpXNW5kR2dnUFNCaFkzUjFZV3d1YkdWdVozUm9PMXh1SUNCamIyNXpkQ0JsZUhCbFkzUmxaRXhsYm1kMGFDQTlJR1Y0Y0dWamRHVmtMbXhsYm1kMGFEdGNibHh1SUNCcFppQW9ZV04wZFdGc1RHVnVaM1JvSUNFOUlHVjRjR1ZqZEdWa1RHVnVaM1JvS1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JCY25KaGVYTWdZWEpsSUc5bUlHUnBabVpsY21WdWRDQnNaVzVuZEdnNklHRmpkSFZoYkNCaGNuSmhlU0JzWlc1bmRHZ2dhWE1nSkh0aFkzUjFZV3hNWlc1bmRHaDlJR0FnSzF4dUlDQWdJQ0FnWUdGdVpDQmxlSEJsWTNSbFpDQmhjbkpoZVNCc1pXNW5kR2dnYVhNZ0pIdGxlSEJsWTNSbFpFeGxibWQwYUgxZ0tUdGNiaUFnZlZ4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWVdOMGRXRnNUR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0JwWmlBb1lXTjBkV0ZzVzJsZElHbHVjM1JoYm1ObGIyWWdRWEp5WVhrZ0ppWWdaWGh3WldOMFpXUmJhVjBnYVc1emRHRnVZMlZ2WmlCQmNuSmhlU2xjYmlBZ0lDQWdJR1Y0Y0dWamRFRnljbUY1S0dGamRIVmhiRnRwWFN3Z1pYaHdaV04wWldSYmFWMHBPMXh1SUNBZ0lHVnNjMlVnYVdZZ0tHRmpkSFZoYkZ0cFhTQnBibk4wWVc1alpXOW1JRTlpYW1WamRDQW1KaUJsZUhCbFkzUmxaRnRwWFNCcGJuTjBZVzVqWlc5bUlFOWlhbVZqZENsY2JpQWdJQ0FnSUdWNGNHVmpkRTlpYW1WamRDaGhZM1IxWVd4YmFWMHNJR1Y0Y0dWamRHVmtXMmxkS1R0Y2JpQWdJQ0JsYkhObElHbG1JQ2hoWTNSMVlXeGJhVjBnSVQwZ1pYaHdaV04wWldSYmFWMHBYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFVjRjR1ZqZEdWa0lDUjdaWGh3WldOMFpXUmJhVjE5SUdGMElIQnZjMmwwYVc5dUlDUjdhWDBzSUdkdmRDQWtlMkZqZEhWaGJGdHBYWDFnS1R0Y2JpQWdmVnh1ZlZ4dVhHNHZLaUJFWldacGJtVnpJR0VnZEdWemRDQnpkV2wwWlM0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmpZWFJsWjI5eWVTaGpZWFJsWjI5eWVUb2djM1J5YVc1bkxDQjBaWE4wY3pvZ0tDa2dQVDRnZG05cFpDazZJSFp2YVdRZ2UxeHVJQ0JqZFhKeVpXNTBRMkYwWldkdmNua2dQU0JqWVhSbFoyOXllVHRjYmlBZ2RHVnpkSE1vS1R0Y2JuMWNibHh1THlvZ1JHVm1hVzVsY3lCaElHWjFibU4wYVc5dUlIUnZJR0psSUdWNFpXTjFkR1ZrSUdKbFptOXlaU0IwYUdVZ2RHVnpkSE1nYVc0Z2RHaHBjeUJqWVhSbFoyOXllU0JoY21VZ1pYaGxZM1YwWldRdUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZbVZtYjNKbEtHSmxabTl5WlRvZ0tDa2dQVDRnVUhKdmJXbHpaVHgyYjJsa1BpazZJSFp2YVdRZ2UxeHVJQ0JwWmlBb2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYU0E5UFNCMWJtUmxabWx1WldRcFhHNGdJQ0FnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTQTlJSHQ5TzF4dUlDQjBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkTG1KbFptOXlaU0E5SUdKbFptOXlaVHRjYm4xY2JseHVMeW9nUkdWbWFXNWxjeUJoSUdaMWJtTjBhVzl1SUhSdklHSmxJR1Y0WldOMWRHVmtJR0ZtZEdWeUlIUm9aU0IwWlhOMGN5QnBiaUIwYUdseklHTmhkR1ZuYjNKNUlHRnlaU0JsZUdWamRYUmxaQzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCaFpuUmxjaWhoWm5SbGNqb2dLQ2tnUFQ0Z1VISnZiV2x6WlR4MmIybGtQaWs2SUhadmFXUWdlMXh1SUNCcFppQW9kR1Z6ZEhOYlkzVnljbVZ1ZEVOaGRHVm5iM0o1WFNBOVBTQjFibVJsWm1sdVpXUXBYRzRnSUNBZ2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYU0E5SUh0OU8xeHVJQ0IwWlhOMGMxdGpkWEp5Wlc1MFEyRjBaV2R2Y25sZExtRm1kR1Z5SUQwZ1lXWjBaWEk3WEc1OVhHNWNibVoxYm1OMGFXOXVJR0ZrWkU1aGJXVnpjR0ZqWlNoek9pQnpkSEpwYm1jc0lHWTZJRVJITGtaMWJtTXBPaUJ6ZEhKcGJtY2dlMXh1SUNCeVpYUjFjbTRnY3k1eVpYQnNZV05sS0c1bGR5QlNaV2RGZUhBb1ppNXVZVzFsTENBbloya25LU3dnWmk1dWNVNWhiV1VwTzF4dWZWeHVYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z2FXNXBkRUYxZEc5VVpYTjBjeWh3WVdOcllXZGxTV1E2SUhOMGNtbHVaeXdnYlc5a2RXeGxQem9nWVc1NUtTQjdYRzRnSUdsbUlDaDNZWE5TWldkcGMzUmxjbVZrVzNCaFkydGhaMlZKWkYwcElISmxkSFZ5Ymp0Y2JpQWdZMjl1YzNRZ2JXOWtkV3hsVkdWemRITWdQU0J0YjJSMWJHVWdQeUJ0YjJSMWJHVXVkR1Z6ZEhNZ09pQjBaWE4wY3p0Y2JpQWdhV1lnS0cxdlpIVnNaVlJsYzNSelcyRjFkRzlVWlhOMGMwTmhkRTVoYldWZElDRTlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0IzWVhOU1pXZHBjM1JsY21Wa1czQmhZMnRoWjJWSlpGMGdQU0IwY25WbE8xeHVJQ0FnSUhKbGRIVnlianRjYmlBZ2ZWeHVJQ0JqYjI1emRDQnRiMlIxYkdWQmRYUnZWR1Z6ZEhNZ1BTQmJYVHRjYmlBZ1kyOXVjM1FnY0dGamEwWjFibU4wYVc5dWN5QTlJR0YzWVdsMElHZHliMnN1WkdGd2FTNW1kVzVqZEdsdmJuTXVabWxzZEdWeUtHQndZV05yWVdkbExtbGtJRDBnWENJa2UzQmhZMnRoWjJWSlpIMWNJbUFwTG14cGMzUW9LVHRjYmlBZ1kyOXVjM1FnY21WbklEMGdibVYzSUZKbFowVjRjQ2d2TGlwY1hDOWNYQzljWEhNcWMydHBjRnM2WEZ4elhTb29MaW9wSkM4cE8xeHVJQ0JtYjNJZ0tHTnZibk4wSUdZZ2IyWWdjR0ZqYTBaMWJtTjBhVzl1Y3lrZ2UxeHVJQ0FnSUdOdmJuTjBJSFJsYzNSeklEMGdaaTV2Y0hScGIyNXpXeWQwWlhOMEoxMDdYRzRnSUNBZ2FXWWdLQ0VvZEdWemRITWdKaVlnUVhKeVlYa3VhWE5CY25KaGVTaDBaWE4wY3lrZ0ppWWdkR1Z6ZEhNdWJHVnVaM1JvS1NrZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMFpYTjBjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYzJ0cGNGSmxZWE52Ym5NZ1BTQW9kR1Z6ZEhOYmFWMGdZWE1nYzNSeWFXNW5LUzV0WVhSamFDaHlaV2NwTzF4dUlDQWdJQ0FnYkdWMElITnJhWEJTWldGemIyNDdYRzRnSUNBZ0lDQnBaaUFvYzJ0cGNGSmxZWE52Ym5NZ0ppWWdjMnRwY0ZKbFlYTnZibk0vTG14bGJtZDBhQ0ErSURFcElITnJhWEJTWldGemIyNGdQU0J6YTJsd1VtVmhjMjl1YzFzeFhUdGNiaUFnSUNBZ0lHMXZaSFZzWlVGMWRHOVVaWE4wY3k1d2RYTm9LRzVsZHlCVVpYTjBLR0YxZEc5VVpYTjBjME5oZEU1aGJXVXNJSFJsYzNSekxteGxibWQwYUNBOVBUMGdNU0EvSUdZdWJtRnRaU0E2SUdBa2UyWXVibUZ0WlgwZ0pIdHBJQ3NnTVgxZ0xDQmhjM2x1WXlBb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEpsY3lBOUlHRjNZV2wwSUdkeWIyc3VablZ1WTNScGIyNXpMbVYyWVd3b1lXUmtUbUZ0WlhOd1lXTmxLSFJsYzNSelcybGRMQ0JtS1NrN1hHNGdJQ0FnSUNBZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQnVieTEwYUhKdmR5MXNhWFJsY21Gc1hHNGdJQ0FnSUNBZ0lHbG1JQ2h5WlhNZ0lUMDlJSFJ5ZFdVcElIUm9jbTkzSUdCR1lXbHNaV1E2SUNSN2RHVnpkSE5iYVYxOVlEdGNiaUFnSUNBZ0lIMHNJSHR6YTJsd1VtVmhjMjl1T2lCemEybHdVbVZoYzI5dWZTa3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQjNZWE5TWldkcGMzUmxjbVZrVzNCaFkydGhaMlZKWkYwZ1BTQjBjblZsTzF4dUlDQnBaaUFvSVcxdlpIVnNaVUYxZEc5VVpYTjBjeTVzWlc1bmRHZ3BJSEpsZEhWeWJqdGNiaUFnYlc5a2RXeGxWR1Z6ZEhOYllYVjBiMVJsYzNSelEyRjBUbUZ0WlYwZ1BTQjdkR1Z6ZEhNNklHMXZaSFZzWlVGMWRHOVVaWE4wYzMwN1hHNTlYRzVjYm1WNGNHOXlkQ0JoYzNsdVl5Qm1kVzVqZEdsdmJpQnlkVzVVWlhOMGN5aHZjSFJwYjI1elB6b2dlMk5oZEdWbmIzSjVQem9nYzNSeWFXNW5MQ0IwWlhOMFB6b2djM1J5YVc1bkxDQjBaWE4wUTI5dWRHVjRkRDg2SUZSbGMzUkRiMjUwWlhoMGZTa2dlMXh1SUNCamIyNXpkQ0J3WVdOcllXZGxYeUE5SUdkeWIyc3VablZ1WTNScGIyNXpMbWRsZEVOMWNuSmxiblJEWVd4c0tDay9MbVoxYm1NL0xuQmhZMnRoWjJVN1hHNGdJR0YzWVdsMElHbHVhWFJCZFhSdlZHVnpkSE1vY0dGamEyRm5aVjh1YVdRcE8xeHVJQ0JqYjI1emRDQnlaWE4xYkhSek9pQjdJR05oZEdWbmIzSjVQem9nYzNSeWFXNW5MQ0J1WVcxbFB6b2djM1J5YVc1bkxDQnpkV05qWlhOek9pQmliMjlzWldGdUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsYzNWc2REb2djM1J5YVc1bkxDQnRjem9nYm5WdFltVnlMQ0J6YTJsd2NHVmtPaUJpYjI5c1pXRnVJSDFiWFNBOUlGdGRPMXh1SUNCamIyNXpiMnhsTG14dlp5aGdVblZ1Ym1sdVp5QjBaWE4wYzJBcE8xeHVJQ0J2Y0hScGIyNXpJRDgvUFNCN2ZUdGNiaUFnYjNCMGFXOXVjeUV1ZEdWemRFTnZiblJsZUhRZ1B6ODlJRzVsZHlCVVpYTjBRMjl1ZEdWNGRDZ3BPMXh1SUNCbmNtOXJMbk5vWld4c0xteGhjM1JGY25KdmNpQTlJQ2NuTzF4dUlDQm1iM0lnS0dOdmJuTjBJRnRyWlhrc0lIWmhiSFZsWFNCdlppQlBZbXBsWTNRdVpXNTBjbWxsY3loMFpYTjBjeWtwSUh0Y2JpQWdJQ0JwWmlBb2IzQjBhVzl1Y3o4dVkyRjBaV2R2Y25rZ0lUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdJQ0JwWmlBb0lXdGxlUzUwYjB4dmQyVnlRMkZ6WlNncExuTjBZWEowYzFkcGRHZ29iM0IwYVc5dWN6OHVZMkYwWldkdmNua3VkRzlNYjNkbGNrTmhjMlVvS1NrcFhHNGdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUgxY2JpQWdJQ0JqYjI1emIyeGxMbXh2WnloZ1UzUmhjblJsWkNBa2UydGxlWDBnWTJGMFpXZHZjbmxnS1R0Y2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ2FXWWdLSFpoYkhWbExtSmxabTl5WlNsY2JpQWdJQ0FnSUNBZ1lYZGhhWFFnZG1Gc2RXVXVZbVZtYjNKbEtDazdYRzRnSUNBZ2ZTQmpZWFJqYUNBb2VEb2dZVzU1S1NCN1hHNGdJQ0FnSUNCMllXeDFaUzVpWldadmNtVlRkR0YwZFhNZ1BTQjRMblJ2VTNSeWFXNW5LQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lHTnZibk4wSUhRZ1BTQjJZV3gxWlM1MFpYTjBjeUEvUHlCYlhUdGNiaUFnSUNCamIyNXpkQ0J5WlhNZ1BTQmJYVHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFF1YkdWdVozUm9PeUJwS3lzcFhHNGdJQ0FnSUNCeVpYTXVjSFZ6YUNoaGQyRnBkQ0JsZUdWalZHVnpkQ2gwVzJsZExDQnZjSFJwYjI1elB5NTBaWE4wS1NrN1hHNGdJQ0FnWTI5dWMzUWdaR0YwWVNBOUlDaGhkMkZwZENCUWNtOXRhWE5sTG1Gc2JDaHlaWE1wS1M1bWFXeDBaWElvS0dRcElEMCtJR1F1Y21WemRXeDBJQ0U5SUNkemEybHdjR1ZrSnlrN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lHbG1JQ2gyWVd4MVpTNWhablJsY2lsY2JpQWdJQ0FnSUNBZ1lYZGhhWFFnZG1Gc2RXVXVZV1owWlhJb0tUdGNiaUFnSUNCOUlHTmhkR05vSUNoNE9pQmhibmtwSUh0Y2JpQWdJQ0FnSUhaaGJIVmxMbUZtZEdWeVUzUmhkSFZ6SUQwZ2VDNTBiMU4wY21sdVp5Z3BPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9kbUZzZFdVdVlXWjBaWEpUZEdGMGRYTXBYRzRnSUNBZ0lDQmtZWFJoTG5CMWMyZ29lMk5oZEdWbmIzSjVPaUJyWlhrc0lHNWhiV1U2SUNkcGJtbDBKeXdnY21WemRXeDBPaUIyWVd4MVpTNWhablJsY2xOMFlYUjFjeXdnYzNWalkyVnpjem9nWm1Gc2MyVXNJRzF6T2lBd0xDQnphMmx3Y0dWa09pQm1ZV3h6WlgwcE8xeHVJQ0FnSUdsbUlDaDJZV3gxWlM1aVpXWnZjbVZUZEdGMGRYTXBYRzRnSUNBZ0lDQmtZWFJoTG5CMWMyZ29lMk5oZEdWbmIzSjVPaUJyWlhrc0lHNWhiV1U2SUNkcGJtbDBKeXdnY21WemRXeDBPaUIyWVd4MVpTNWlaV1p2Y21WVGRHRjBkWE1zSUhOMVkyTmxjM002SUdaaGJITmxMQ0J0Y3pvZ01Dd2djMnRwY0hCbFpEb2dabUZzYzJWOUtUdGNiaUFnSUNCeVpYTjFiSFJ6TG5CMWMyZ29MaTR1WkdGMFlTazdYRzRnSUgxY2JpQWdhV1lnS0c5d2RHbHZibk11ZEdWemRFTnZiblJsZUhRdVkyRjBZMmhWYm1oaGJtUnNaV1FwSUh0Y2JpQWdJQ0JoZDJGcGRDQmtaV3hoZVNneE1EQXdLVHRjYmlBZ0lDQnBaaUFvWjNKdmF5NXphR1ZzYkM1c1lYTjBSWEp5YjNJdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lDQWdjbVZ6ZFd4MGN5NXdkWE5vS0h0Y2JpQWdJQ0FnSUNBZ1kyRjBaV2R2Y25rNklDZFZibWhoYm1Sc1pXUWdaWGhqWlhCMGFXOXVjeWNzWEc0Z0lDQWdJQ0FnSUc1aGJXVTZJQ2RsZUdObGNIUnBiMjV6Snl4Y2JpQWdJQ0FnSUNBZ2NtVnpkV3gwT2lCbmNtOXJMbk5vWld4c0xteGhjM1JGY25KdmNpd2djM1ZqWTJWemN6b2dabUZzYzJVc0lHMXpPaUF3TENCemEybHdjR1ZrT2lCbVlXeHpaVnh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJR2xtSUNodmNIUnBiMjV6TG5SbGMzUkRiMjUwWlhoMExuSmxjRzl5ZENrZ2UxeHVJQ0FnSUdOdmJuTjBJR3h2WjJkbGNpQTlJRzVsZHlCRVJ5NU1iMmRuWlhJb0tUdGNiaUFnSUNCamIyNXpkQ0J6ZFdOalpYTnpablZzSUQwZ2NtVnpkV3gwY3k1bWFXeDBaWElvS0hJcElEMCtJSEl1YzNWalkyVnpjeWt1YkdWdVozUm9PMXh1SUNBZ0lHTnZibk4wSUhOcmFYQndaV1FnUFNCeVpYTjFiSFJ6TG1acGJIUmxjaWdvY2lrZ1BUNGdjaTV6YTJsd2NHVmtLUzVzWlc1bmRHZzdYRzRnSUNBZ1kyOXVjM1FnWm1GcGJHVmtJRDBnY21WemRXeDBjeTVtYVd4MFpYSW9LSElwSUQwK0lDRnlMbk4xWTJObGMzTXBPMXh1SUNBZ0lHTnZibk4wSUdSbGMyTnlhWEIwYVc5dUlEMGdKMUJoWTJ0aFoyVWdRSEJoWTJ0aFoyVWdkR1Z6ZEdWa09pQkFjM1ZqWTJWemMyWjFiQ0J6ZFdOalpYTnpablZzTENCQWMydHBjSEJsWkNCemEybHdjR1ZrTENCQVptRnBiR1ZrSUdaaGFXeGxaQ0IwWlhOMGN5YzdYRzRnSUNBZ1kyOXVjM1FnY0dGeVlXMXpJRDBnZTF4dUlDQWdJQ0FnYzNWalkyVnpjMloxYkRvZ2MzVmpZMlZ6YzJaMWJDeGNiaUFnSUNBZ0lITnJhWEJ3WldRNklITnJhWEJ3WldRc1hHNGdJQ0FnSUNCbVlXbHNaV1E2SUdaaGFXeGxaQzVzWlc1bmRHZ3NYRzRnSUNBZ0lDQndZV05yWVdkbE9pQndZV05yWVdkbFgxeHVJQ0FnSUgwN1hHNGdJQ0FnWm05eUlDaGpiMjV6ZENCeUlHOW1JR1poYVd4bFpDa2dUMkpxWldOMExtRnpjMmxuYmlod1lYSmhiWE1zSUh0YllDUjdjaTVqWVhSbFoyOXllWDBnZkNBa2UzSXVibUZ0WlgxZ1hUb2djaTV5WlhOMWJIUjlLVHRjYmlBZ0lDQnNiMmRuWlhJdWJHOW5LR1JsYzJOeWFYQjBhVzl1TENCd1lYSmhiWE1zSUNkd1lXTnJZV2RsTFhSbGMzUmxaQ2NwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ5WlhOMWJIUnpPMXh1ZlZ4dVhHNWhjM2x1WXlCbWRXNWpkR2x2YmlCbGVHVmpWR1Z6ZENoME9pQlVaWE4wTENCd2NtVmthV05oZEdVNklITjBjbWx1WnlCOElIVnVaR1ZtYVc1bFpDa2dlMXh1SUNCc1pYUWdjam9nZXlCallYUmxaMjl5ZVQ4NklITjBjbWx1Wnl3Z2JtRnRaVDg2SUhOMGNtbHVaeXdnYzNWalkyVnpjem9nWW05dmJHVmhiaXdnY21WemRXeDBPaUJ6ZEhKcGJtY3NJRzF6T2lCdWRXMWlaWElzSUhOcmFYQndaV1E2SUdKdmIyeGxZVzRnZlR0Y2JpQWdZMjl1YzNRZ1ptbHNkR1Z5SUQwZ2NISmxaR2xqWVhSbElDRTlJSFZ1WkdWbWFXNWxaQ0FtSmlBb0lYUXVibUZ0WlM1MGIweHZkMlZ5UTJGelpTZ3BMbk4wWVhKMGMxZHBkR2dvY0hKbFpHbGpZWFJsTG5SdlRHOTNaWEpEWVhObEtDa3BLVHRjYmlBZ1kyOXVjM1FnYzJ0cGNDQTlJSFF1YjNCMGFXOXVjejh1YzJ0cGNGSmxZWE52YmlCOGZDQm1hV3gwWlhJN1hHNGdJR052Ym5OMElITnJhWEJTWldGemIyNGdQU0JtYVd4MFpYSWdQeUFuYzJ0cGNIQmxaQ2NnT2lCMExtOXdkR2x2Ym5NL0xuTnJhWEJTWldGemIyNDdYRzRnSUdsbUlDZ2hjMnRwY0NsY2JpQWdJQ0JqYjI1emIyeGxMbXh2WnloZ1UzUmhjblJsWkNBa2UzUXVZMkYwWldkdmNubDlJQ1I3ZEM1dVlXMWxmV0FwTzF4dUlDQmpiMjV6ZENCemRHRnlkQ0E5SUc1bGR5QkVZWFJsS0NrN1hHNGdJSFJ5ZVNCN1hHNGdJQ0FnYVdZZ0tITnJhWEFwWEc0Z0lDQWdJQ0J5SUQwZ2UzTjFZMk5sYzNNNklIUnlkV1VzSUhKbGMzVnNkRG9nYzJ0cGNGSmxZWE52YmlFc0lHMXpPaUF3TENCemEybHdjR1ZrT2lCMGNuVmxmVHRjYmlBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0J5SUQwZ2UzTjFZMk5sYzNNNklIUnlkV1VzSUhKbGMzVnNkRG9nWVhkaGFYUWdkQzUwWlhOMEtDa2dQejhnSjA5TEp5d2diWE02SURBc0lITnJhWEJ3WldRNklHWmhiSE5sZlR0Y2JpQWdmU0JqWVhSamFDQW9lRG9nWVc1NUtTQjdYRzRnSUNBZ2NpQTlJSHR6ZFdOalpYTnpPaUJtWVd4elpTd2djbVZ6ZFd4ME9pQjRMblJ2VTNSeWFXNW5LQ2tzSUcxek9pQXdMQ0J6YTJsd2NHVmtPaUJtWVd4elpYMDdYRzRnSUgxY2JpQWdZMjl1YzNRZ2MzUnZjQ0E5SUc1bGR5QkVZWFJsS0NrN1hHNGdJQzh2SUVCMGN5MXBaMjV2Y21WY2JpQWdjaTV0Y3lBOUlITjBiM0FnTFNCemRHRnlkRHRjYmlBZ2FXWWdLQ0Z6YTJsd0tWeHVJQ0FnSUdOdmJuTnZiR1V1Ykc5bktHQkdhVzVwYzJobFpDQWtlM1F1WTJGMFpXZHZjbmw5SUNSN2RDNXVZVzFsZlNCbWIzSWdKSHR5TG0xemZTQnRjMkFwTzF4dUlDQnlMbU5oZEdWbmIzSjVJRDBnZEM1allYUmxaMjl5ZVR0Y2JpQWdjaTV1WVcxbElEMGdkQzV1WVcxbE8xeHVJQ0J5WlhSMWNtNGdjanRjYm4xY2JseHVMeW9nVjJGcGRITWdXMjF6WFNCdGFXeHNhWE5sWTI5dVpITWdLaTljYm1WNGNHOXlkQ0JoYzNsdVl5Qm1kVzVqZEdsdmJpQmtaV3hoZVNodGN6b2diblZ0WW1WeUtTQjdYRzRnSUdGM1lXbDBJRzVsZHlCUWNtOXRhWE5sS0NoeUtTQTlQaUJ6WlhSVWFXMWxiM1YwS0hJc0lHMXpLU2s3WEc1OVhHNWNibVY0Y0c5eWRDQmhjM2x1WXlCbWRXNWpkR2x2YmlCaGQyRnBkRU5vWldOcktHTm9aV05yU0dGdVpHeGxjam9nS0NrZ1BUNGdZbTl2YkdWaGJpeGNiaUFnWlhKeWIzSTZJSE4wY21sdVp5QTlJQ2RVYVcxbGIzVjBJR1Y0WTJWbFpHVmtKeXdnZDJGcGREb2diblZ0WW1WeUlEMGdOVEF3TENCcGJuUmxjblpoYkRvZ2JuVnRZbVZ5SUQwZ05UQXBPaUJRY205dGFYTmxQSFp2YVdRK0lIdGNiaUFnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNCelpYUlVhVzFsYjNWMEtDZ3BJRDArSUh0Y2JpQWdJQ0FnSUdOc1pXRnlTVzUwWlhKMllXd29hVzUwWlhKMllXeEpaQ2s3WEc0Z0lDQWdJQ0J5WldwbFkzUW9ibVYzSUVWeWNtOXlLR1Z5Y205eUtTazdYRzRnSUNBZ2ZTd2dkMkZwZENrN1hHNGdJQ0FnTHk4Z1FIUnpMV2xuYm05eVpWeHVJQ0FnSUdOdmJuTjBJR2x1ZEdWeWRtRnNTV1E2SUZScGJXVnZkWFFnUFNCelpYUkpiblJsY25aaGJDZ29LU0E5UGlCN1hHNGdJQ0FnSUNCcFppQW9ZMmhsWTJ0SVlXNWtiR1Z5S0NrcElIdGNiaUFnSUNBZ0lDQWdZMnhsWVhKSmJuUmxjblpoYkNocGJuUmxjblpoYkVsa0tUdGNiaUFnSUNBZ0lDQWdjbVZ6YjJ4MlpTZ3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMHNJR2x1ZEdWeWRtRnNLVHRjYmlBZ2ZTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGMwUnBZV3h2WjFCeVpYTmxiblFvWkdsaGJHOW5WR2wwYkdVNklITjBjbWx1WnlrNklHSnZiMnhsWVc0Z2UxeHVJQ0JqYjI1emRDQmthV0ZzYjJkeklEMGdSRWN1UkdsaGJHOW5MbWRsZEU5d1pXNUVhV0ZzYjJkektDazdYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1pHbGhiRzluY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lHbG1JQ2hrYVdGc2IyZHpXMmxkTG5ScGRHeGxJRDA5SUdScFlXeHZaMVJwZEd4bEtWeHVJQ0FnSUNBZ2NtVjBkWEp1SUhSeWRXVTdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHWmhiSE5sTzF4dWZWeHVYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z2RHVnpkRlpwWlhkbGNpaDJPaUJ6ZEhKcGJtY3NJR1JtT2lCRVJ5NUVZWFJoUm5KaGJXVXNJR1JsZEdWamRGTmxiV0Z1ZEdsalZIbHdaWE02SUdKdmIyeGxZVzRnUFNCbVlXeHpaU2s2SUZCeWIyMXBjMlU4ZG05cFpENGdlMXh1SUNCcFppQW9aR1YwWldOMFUyVnRZVzUwYVdOVWVYQmxjeWtnWVhkaGFYUWdaM0p2YXk1a1lYUmhMbVJsZEdWamRGTmxiV0Z1ZEdsalZIbHdaWE1vWkdZcE8xeHVJQ0JqYjI1emRDQjBkaUE5SUdkeWIyc3VjMmhsYkd3dVlXUmtWR0ZpYkdWV2FXVjNLR1JtS1R0Y2JpQWdZMjl1YzNRZ2RtbGxkMlZ5VG1GdFpTQTlJR0JiYm1GdFpUMTJhV1YzWlhJdEpIdDJMbkpsY0d4aFkyVW9MMXhjY3lzdlp5d2dKeTBuS1gwZ2FWMWdPMXh1SUNCamIyNXpkQ0J6Wld4bFkzUnZjaUE5SUdBa2UzWnBaWGRsY2s1aGJXVjlJR05oYm5aaGN5d2tlM1pwWlhkbGNrNWhiV1Y5SUhOMlp5d2tlM1pwWlhkbGNrNWhiV1Y5SUdsdFp5eGNiaUFnSUNBa2UzWnBaWGRsY2s1aGJXVjlJR2x1Y0hWMExDUjdkbWxsZDJWeVRtRnRaWDBnYURFc0pIdDJhV1YzWlhKT1lXMWxmU0JoWUR0Y2JpQWdZMjl1YzNRZ2NtVnpJRDBnVzEwN1hHNGdJSFJ5ZVNCN1hHNGdJQ0FnYkdWMElIWnBaWGRsY2lBOUlIUjJMbUZrWkZacFpYZGxjaWgyS1R0Y2JpQWdJQ0JoZDJGcGRDQmhkMkZwZEVOb1pXTnJLQ2dwSUQwK0lHUnZZM1Z0Wlc1MExuRjFaWEo1VTJWc1pXTjBiM0lvYzJWc1pXTjBiM0lwSUNFOVBTQnVkV3hzTEZ4dUlDQWdJQ0FnSjJOaGJtNXZkQ0JzYjJGa0lIWnBaWGRsY2ljc0lETXdNREFwTzF4dUlDQWdJSEpsY3k1d2RYTm9LRUZ5Y21GNUxtWnliMjBvZEhZdWRtbGxkMlZ5Y3lrdWJHVnVaM1JvS1R0Y2JpQWdJQ0JCY25KaGVTNW1jbTl0S0dSbUxuSnZkeWd3S1M1alpXeHNjeWt1Wm05eVJXRmphQ2dvWXlrZ1BUNGdZeTUyWVd4MVpTQTlJRzUxYkd3cE8xeHVJQ0FnSUdSbUxuSnZkM011YzJWc1pXTjBLQ2h5YjNjcElEMCtJSEp2ZHk1cFpIZ2dQaUF4SUNZbUlISnZkeTVwWkhnZ1BDQTNLVHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTnpzZ2FTQThJREV5T3lCcEt5c3BJR1JtTG1acGJIUmxjaTV6WlhRb2FTd2dabUZzYzJVcE8xeHVJQ0FnSUdSbUxtTjFjbkpsYm5SU2IzZEpaSGdnUFNBeE8xeHVJQ0FnSUdOdmJuTjBJSEJ5YjNCeklEMGdkbWxsZDJWeUxtZGxkRTl3ZEdsdmJuTW9kSEoxWlNrdWJHOXZhenRjYmlBZ0lDQmpiMjV6ZENCdVpYZFFjbTl3Y3pvZ1VtVmpiM0prUEhOMGNtbHVaeXdnWW05dmJHVmhiajRnUFNCN2ZUdGNiaUFnSUNCUFltcGxZM1F1YTJWNWN5aHdjbTl3Y3lrdVptbHNkR1Z5S0NocktTQTlQaUIwZVhCbGIyWWdjSEp2Y0hOYmExMGdQVDA5SUNkaWIyOXNaV0Z1SnlrdVptOXlSV0ZqYUNnb2F5a2dQVDRnYm1WM1VISnZjSE5iYTEwZ1BTQWhjSEp2Y0hOYmExMHBPMXh1SUNBZ0lIWnBaWGRsY2k1elpYUlBjSFJwYjI1ektHNWxkMUJ5YjNCektUdGNiaUFnSUNCaGQyRnBkQ0JrWld4aGVTZ3lOVEFwTzF4dUlDQWdJR052Ym5OMElHeGhlVzkxZENBOUlIUjJMbk5oZG1WTVlYbHZkWFFvS1R0Y2JpQWdJQ0JqYjI1emRDQnZiR1JRY205d2N5QTlJSFpwWlhkbGNpNW5aWFJQY0hScGIyNXpLQ2t1Ykc5dmF6dGNiaUFnSUNCMGRpNXlaWE5sZEV4aGVXOTFkQ2dwTzF4dUlDQWdJSEpsY3k1d2RYTm9LRUZ5Y21GNUxtWnliMjBvZEhZdWRtbGxkMlZ5Y3lrdWJHVnVaM1JvS1R0Y2JpQWdJQ0IwZGk1c2IyRmtUR0Y1YjNWMEtHeGhlVzkxZENrN1hHNGdJQ0FnWVhkaGFYUWdZWGRoYVhSRGFHVmpheWdvS1NBOVBpQmtiMk4xYldWdWRDNXhkV1Z5ZVZObGJHVmpkRzl5S0hObGJHVmpkRzl5S1NBaFBUMGdiblZzYkN4Y2JpQWdJQ0FnSUNkallXNXViM1FnYkc5aFpDQjJhV1YzWlhJZ1puSnZiU0JzWVhsdmRYUW5MQ0F6TURBd0tUdGNiaUFnSUNCaGQyRnBkQ0JrWld4aGVTZ3lOVEFwTzF4dUlDQWdJSEpsY3k1d2RYTm9LRUZ5Y21GNUxtWnliMjBvZEhZdWRtbGxkMlZ5Y3lrdWJHVnVaM1JvS1R0Y2JpQWdJQ0IyYVdWM1pYSWdQU0JCY25KaGVTNW1jbTl0S0hSMkxuWnBaWGRsY25NcExtWnBibVFvS0hZcElEMCtJSFl1ZEhsd1pTQWhQVDBnSjBkeWFXUW5LU0U3WEc0Z0lDQWdaWGh3WldOMFFYSnlZWGtvY21WekxDQmJNaXdnTVN3Z01sMHBPMXh1SUNBZ0lHVjRjR1ZqZENoS1UwOU9Mbk4wY21sdVoybG1lU2gyYVdWM1pYSXVaMlYwVDNCMGFXOXVjeWdwTG14dmIyc3BMQ0JLVTA5T0xuTjBjbWx1WjJsbWVTaHZiR1JRY205d2N5a3BPMXh1SUNCOUlHWnBibUZzYkhrZ2UxeHVJQ0FnSUhSMkxtTnNiM05sS0NrN1hHNGdJQ0FnWjNKdmF5NXphR1ZzYkM1amJHOXpaVlJoWW14bEtHUm1LVHRjYmlBZ2ZWeHVmVnh1SWwxOSIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdGVzdCc7XG4vKiogRGVtbyBzY3JpcHQgY2xhc3MuIENvdWxkIGJlIHVzZWQgZm9yIGNyZWF0aW5nIGRlbW8gc2NyaXB0cyB0byBzaG93IHRoZSBwbGF0Zm9ybSBjYXBhYmlsaXRpZXMgKi9cbmV4cG9ydCBjbGFzcyBEZW1vU2NyaXB0IHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBkZXNjcmlwdGlvbiwgaXNBdXRvbWF0aWMgPSBmYWxzZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMubmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gJyc7XG4gICAgICAgIHRoaXMuX2lzQXV0b21hdGljID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2F1dG9TdGFydEZpcnN0U3RlcCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jdXJyZW50U3RlcCA9IDA7XG4gICAgICAgIHRoaXMuX2lzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc0NhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc1N0ZXBQcm9jZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcm9vdCA9IHVpLmRpdihbXSwgeyBpZDogJ2RlbW8tc2NyaXB0JyxcbiAgICAgICAgICAgIGNsYXNzZXM6ICd0dXRvcmlhbHMtcm9vdCB0dXRvcmlhbHMtdHJhY2sgZGVtby1hcHAtc2NyaXB0JyB9KTtcbiAgICAgICAgdGhpcy5fc3RlcHMgPSBbXTtcbiAgICAgICAgdGhpcy5fbWFpbkhlYWRlciA9IHVpLnBhbmVsKFtdLCAndHV0b3JpYWxzLW1haW4taGVhZGVyJyk7XG4gICAgICAgIHRoaXMuX2hlYWRlciA9IHVpLmgyKCcnKTtcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2ID0gdWkuZGl2SChbXSwgJ3R1dG9yaWFscy1yb290LWhlYWRlcicpO1xuICAgICAgICB0aGlzLl9zdG9wU3RhcnRCdG4gPSB1aS5idXR0b24odWkuaWNvbkZBKCdwYXVzZScpLCAoKSA9PiB0aGlzLl9jaGFuZ2VTdG9wU3RhdGUoKSwgJ1BsYXkgLyBwYXVzZScpO1xuICAgICAgICB0aGlzLl9yZXN0YXJ0QnRuID0gdWkuYnV0dG9uKHVpLmljb25GQSgncmVkbycpLCAoKSA9PiB0aGlzLl9yZXN0YXJ0U2NyaXB0KCksICdSZXN0YXJ0Jyk7XG4gICAgICAgIHRoaXMuX25leHRTdGVwQnRuID0gdWkuYnV0dG9uKHVpLmljb25GQSgncGxheScpLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzU3RlcFByb2Nlc3NlZClcbiAgICAgICAgICAgICAgICB0aGlzLl9uZXh0U3RlcCgpO1xuICAgICAgICB9LCAnTmV4dCBzdGVwJyk7XG4gICAgICAgIHRoaXMuX2FjdGl2aXR5ID0gdWkucGFuZWwoW10sICd0dXRvcmlhbHMtcm9vdC1kZXNjcmlwdGlvbicpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc0RpdiA9IHVpLmRpdlYoW10sICd0dXRvcmlhbHMtcm9vdC1wcm9ncmVzcycpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcyA9IHVpLmVsZW1lbnQoJ3Byb2dyZXNzJyk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzU3RlcHMgPSB1aS5kaXZUZXh0KCcnKTtcbiAgICAgICAgdGhpcy5fY2xvc2VCdG4gPSB1aS5idXR0b24odWkuaWNvbkZBKCdjaGV2cm9uLWxlZnQnKSwgKCkgPT4gdGhpcy5fY2xvc2VEb2NrKCksICdCYWNrIHRvIGRlbW8nKTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgICB0aGlzLl9pc0F1dG9tYXRpYyA9IGlzQXV0b21hdGljO1xuICAgICAgICB0aGlzLl9hdXRvU3RhcnRGaXJzdFN0ZXAgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYXV0b1N0YXJ0Rmlyc3RTdGVwKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubWF4ID0gMDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudmFsdWUgPSAxO1xuICAgICAgICBEZW1vU2NyaXB0LmN1cnJlbnRPYmplY3QgPSB0aGlzO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyBkZW1vIHNjcmlwdCBzdGVwcyAqL1xuICAgIGdldCBzdGVwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZXBzO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyB0aGUgYW1vdW50IG9mIGRlbW8gc2NyaXB0IHN0ZXBzICovXG4gICAgZ2V0IHN0ZXBOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGVwcy5sZW5ndGg7XG4gICAgfVxuICAgIC8qKiBBZGRzIHNjcmlwdCBoZWFkZXIgKi9cbiAgICBfYWRkSGVhZGVyKCkge1xuICAgICAgICB0aGlzLl9jcmVhdGVIZWFkZXJEaXYoKTtcbiAgICAgICAgdGhpcy5fY3JlYXRlUHJvZ3Jlc3NEaXYoKTtcbiAgICAgICAgdGhpcy5fbWFpbkhlYWRlci5hcHBlbmQodGhpcy5faGVhZGVyRGl2LCB0aGlzLl9wcm9ncmVzc0Rpdik7XG4gICAgfVxuICAgIC8qKiBDcmVhdGVzIHNjcmlwdCBoZWFkZXIgZGl2ICovXG4gICAgX2NyZWF0ZUhlYWRlckRpdigpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyLmlubmVyVGV4dCA9IHRoaXMubmFtZTtcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2LmFwcGVuZCh0aGlzLl9jbG9zZUJ0bik7XG4gICAgICAgIHRoaXMuX2hlYWRlckRpdi5hcHBlbmQodGhpcy5faGVhZGVyKTtcbiAgICAgICAgdGhpcy5fbmV4dFN0ZXBCdG4uZmlyc3RDaGlsZC5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhcyBmYS1wbGF5JztcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2LmFwcGVuZCh0aGlzLl9pc0F1dG9tYXRpYyA/IHRoaXMuX3N0b3BTdGFydEJ0biA6IHRoaXMuX25leHRTdGVwQnRuKTtcbiAgICB9XG4gICAgLyoqIENyZWF0ZXMgc2NyaXB0IHByb2dyZXNzIGRpdiAqL1xuICAgIF9jcmVhdGVQcm9ncmVzc0RpdigpIHtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubWF4ID0gdGhpcy5zdGVwTnVtYmVyO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc0Rpdi5hcHBlbmQodGhpcy5fcHJvZ3Jlc3MpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc1N0ZXBzID0gdWkuZGl2VGV4dChgU3RlcDogJHt0aGlzLl9wcm9ncmVzcy52YWx1ZX0gb2YgJHt0aGlzLnN0ZXBOdW1iZXJ9YCk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzRGl2LmFwcGVuZCh0aGlzLl9wcm9ncmVzc1N0ZXBzKTtcbiAgICB9XG4gICAgLyoqIEFkZHMgZGVzY3JpcHRpb24gb2YgdGhlIHNjcmlwdCAqL1xuICAgIF9hZGREZXNjcmlwdGlvbigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLl9hY3Rpdml0eS5hcHBlbmQodWkuZGl2KHRoaXMuZGVzY3JpcHRpb24sICd0dXRvcmlhbHMtcm9vdC1kZXNjcmlwdGlvbicpKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN0ZXBOdW1iZXI7IGkrKykge1xuICAgICAgICAgICAgbGV0IGluc3RydWN0aW9uSW5kaWNhdG9yID0gdWkuaWNvbkZBKCdjbG9jaycpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0F1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uSW5kaWNhdG9yID0gdWkuaWNvbkZBKCdwbGF5JywgKCkgPT4gdGhpcy5fbmV4dFN0ZXAoKSwgJ05leHQgc3RlcCcpO1xuICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbkluZGljYXRvci5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhcyBmYS1wbGF5JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkRpdiA9IHVpLmRpdih0aGlzLl9zdGVwc1tpXS5uYW1lLCAnZ3Jvay10dXRvcmlhbC1lbnRyeS1pbnN0cnVjdGlvbicpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFN0ZXBEZXNjcmlwdGlvbiA9IHVpLmRpdigoX2EgPSB0aGlzLl9zdGVwc1tpXS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVzY3JpcHRpb24sICdncm9rLXR1dG9yaWFsLXN0ZXAtZGVzY3JpcHRpb24gaGlkZGVuJyk7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHVpLmRpdkgoW1xuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uSW5kaWNhdG9yLFxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uRGl2LFxuICAgICAgICAgICAgXSwgJ2dyb2stdHV0b3JpYWwtZW50cnknKTtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2aXR5LmFwcGVuZChlbnRyeSwgY3VycmVudFN0ZXBEZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIEluaXRpYWxpemVzIHRoZSByb290IG9mIHRoZSBkZW1vIHNjcmlwdCAqL1xuICAgIF9pbml0Um9vdCgpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGdyb2suc2hlbGwud2luZG93cy5zaG93Q29udGV4dFBhbmVsID0gdHJ1ZTtcbiAgICAgICAgZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dIZWxwID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHNjcmlwdERvY2tOb2RlID0gQXJyYXkuZnJvbShncm9rLnNoZWxsLmRvY2tNYW5hZ2VyLnJvb3ROb2RlLmNoaWxkcmVuKVswXTtcbiAgICAgICAgdGhpcy5fbm9kZSA9IGdyb2suc2hlbGwuZG9ja01hbmFnZXIuZG9jayh0aGlzLl9yb290LCBERy5ET0NLX1RZUEUuRklMTCwgc2NyaXB0RG9ja05vZGUsICcnKTtcbiAgICAgICAgaWYgKChfYiA9IChfYSA9IHNjcmlwdERvY2tOb2RlLnBhcmVudC5jb250YWluZXIuY29udGFpbmVyRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxhc3RFbGVtZW50Q2hpbGQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jbGFzc0xpc3QuY29udGFpbnMoJ3RhYi1oYW5kbGUtbGlzdC1jb250YWluZXInKSlcbiAgICAgICAgICAgIChfYyA9IHNjcmlwdERvY2tOb2RlLnBhcmVudC5jb250YWluZXIuY29udGFpbmVyRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxhc3RFbGVtZW50Q2hpbGQucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuX25vZGUuY29udGFpbmVyLmNvbnRhaW5lckVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndHV0b3JpYWxzLWRlbW8tc2NyaXB0LWNvbnRhaW5lcicpO1xuICAgICAgICB0aGlzLl9hZGRIZWFkZXIoKTtcbiAgICAgICAgdGhpcy5fcm9vdC5hcHBlbmQodGhpcy5fbWFpbkhlYWRlcik7XG4gICAgICAgIHRoaXMuX2FkZERlc2NyaXB0aW9uKCk7XG4gICAgICAgIHRoaXMuX3Jvb3QuYXBwZW5kKHRoaXMuX2FjdGl2aXR5KTtcbiAgICB9XG4gICAgLyoqIFByb2Nlc3NlcyBuZXh0IHN0ZXAgKi9cbiAgICBfbmV4dFN0ZXAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aGlzLl9pc1N0ZXBQcm9jZXNzZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0F1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIHRoaXMuX25leHRTdGVwQnRuLmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmV4dFN0ZXBCdG4uZmlyc3RDaGlsZC5jbGFzc0xpc3QuYWRkKCdmYS1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLl9hY3Rpdml0eS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdncm9rLXR1dG9yaWFsLWVudHJ5JylbdGhpcy5fY3VycmVudFN0ZXBdO1xuICAgICAgICAgICAgY29uc3QgZW50cnlJbmRpY2F0b3IgPSB0aGlzLl9hY3Rpdml0eS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdncm9rLWljb24nKVt0aGlzLl9jdXJyZW50U3RlcF07XG4gICAgICAgICAgICBjb25zdCBlbnRyeUluc3RydWN0aW9uID0gdGhpcy5fYWN0aXZpdHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ3Jvay10dXRvcmlhbC1zdGVwLWRlc2NyaXB0aW9uJylbdGhpcy5fY3VycmVudFN0ZXBdO1xuICAgICAgICAgICAgZW50cnlJbmRpY2F0b3IuY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYXIgZmEtc3Bpbm5lci10aGlyZCBmYS1zcGluJztcbiAgICAgICAgICAgIGVudHJ5SW5zdHJ1Y3Rpb24uY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgICAgICAgICBlbnRyeUluc3RydWN0aW9uLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gZW50cnk7XG4gICAgICAgICAgICBjb25zdCBzdGVwRGVsYXkgPSAoKF9hID0gdGhpcy5fc3RlcHNbdGhpcy5fY3VycmVudFN0ZXBdLm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZWxheSkgP1xuICAgICAgICAgICAgICAgIChfYiA9IHRoaXMuX3N0ZXBzW3RoaXMuX2N1cnJlbnRTdGVwXS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZGVsYXkgOiAyMDAwO1xuICAgICAgICAgICAgeWllbGQgdGhpcy5fc3RlcHNbdGhpcy5fY3VycmVudFN0ZXBdLmZ1bmMoKTtcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvKHRoaXMuX3Jvb3QsIGN1cnJlbnRTdGVwLm9mZnNldFRvcCAtIHRoaXMuX21haW5IZWFkZXIub2Zmc2V0SGVpZ2h0KTtcbiAgICAgICAgICAgIHlpZWxkIHRoaXMuX2NvdW50ZG93bihlbnRyeSwgZW50cnlJbmRpY2F0b3IsIHN0ZXBEZWxheSk7XG4gICAgICAgICAgICB5aWVsZCBkZWxheShzdGVwRGVsYXkpO1xuICAgICAgICAgICAgY29uc3QgbmV3RW50cnlJbmRpY2F0b3IgPSB1aS5pY29uRkEoJ2NoZWNrJyk7XG4gICAgICAgICAgICBlbnRyeUluZGljYXRvci5yZXBsYWNlV2l0aChuZXdFbnRyeUluZGljYXRvcik7XG4gICAgICAgICAgICBuZXdFbnRyeUluZGljYXRvci5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhciBmYS1jaGVjayc7XG4gICAgICAgICAgICB0aGlzLl9wcm9ncmVzcy52YWx1ZSsrO1xuICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3NTdGVwcy5pbm5lclRleHQgPSBgU3RlcDogJHt0aGlzLl9wcm9ncmVzcy52YWx1ZX0gb2YgJHt0aGlzLnN0ZXBOdW1iZXJ9YDtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGVwKys7XG4gICAgICAgICAgICB0aGlzLl9pc1N0ZXBQcm9jZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RlcCA9PT0gdGhpcy5zdGVwTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNBdXRvbWF0aWMgPyB0aGlzLl9zdG9wU3RhcnRCdG4ucmVwbGFjZVdpdGgodGhpcy5fcmVzdGFydEJ0bikgOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9uZXh0U3RlcEJ0bi5yZXBsYWNlV2l0aCh0aGlzLl9yZXN0YXJ0QnRuKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzQXV0b21hdGljKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFN0ZXBFbnRyeUluZGljYXRvciA9IHRoaXMuX2FjdGl2aXR5LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2dyb2staWNvbicpW3RoaXMuX2N1cnJlbnRTdGVwXTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydE5leHRTdGVwSWNvbiA9IHVpLmljb25GQSgncGxheScsICgpID0+IHRoaXMuX25leHRTdGVwKCksICdOZXh0IHN0ZXAnKTtcbiAgICAgICAgICAgICAgICBzdGFydE5leHRTdGVwSWNvbi5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhcyBmYS1wbGF5JztcbiAgICAgICAgICAgICAgICBuZXh0U3RlcEVudHJ5SW5kaWNhdG9yLnJlcGxhY2VXaXRoKHN0YXJ0TmV4dFN0ZXBJY29uKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9uZXh0U3RlcEJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX25leHRTdGVwQnRuLmZpcnN0Q2hpbGQuY2xhc3NMaXN0LnJlbW92ZSgnZmEtZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKiBTdGFydHMgdGhlIGRlbW8gc2NyaXB0IGFjdGlvbnMgKi9cbiAgICBfc3RhcnRTY3JpcHQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5fY3VycmVudFN0ZXA7IGkgPCB0aGlzLnN0ZXBOdW1iZXI7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc1N0b3BwZWQgfHwgdGhpcy5faXNDYW5jZWxsZWQpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIHlpZWxkIHRoaXMuX25leHRTdGVwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTY3JvbGxzIHRvIHRoZSBjdXJyZW50IHN0ZXBcbiAgICAgKiBAcGFyYW0gZWxlbWVudCAtIEN1cnJlbnQgc3RlcCBlbGVtZW50IGluIHJvb3RcbiAgICAgKiBAcGFyYW0geSAtIHkgY29vcmRpbmF0ZSBvZiB0aGUgZWxlbWVudFxuICAgICAqL1xuICAgIF9zY3JvbGxUbyhlbGVtZW50LCB5KSB7XG4gICAgICAgIGVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSB5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIGludGVyYWN0aXZlIGRlbGF5IGluZGljYXRvclxuICAgICAqIEBwYXJhbSBlbGVtZW50IC0gQ3VycmVudCBzdGVwIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0gaW5kaWNhdG9yIC0gQ3VycmVudCBzdGVwIGluZGljYXRvclxuICAgICAqIEBwYXJhbSB0aW1lIC0gSW5kaWNhdG9yIGFuaW1hdGlvbiB0aW1lXG4gICAgICovXG4gICAgX2NvdW50ZG93bihlbGVtZW50LCBpbmRpY2F0b3IsIHRpbWUpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ZG93bkRpdiA9IHVpLmRpdihbXSwgJ2RlbW8tc2NyaXB0LWNvdW50ZG93bicpO1xuICAgICAgICAgICAgaW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgICAgICAgICAgbGV0IGNvdW50ZG93biA9IHRpbWUgLyAxMDAwO1xuICAgICAgICAgICAgY29uc3Qgc3ZnID0gdGhpcy5fY3JlYXRlU1ZHSW5kaWNhdG9yKGNvdW50ZG93bik7XG4gICAgICAgICAgICBjb3VudGRvd25EaXYuYXBwZW5kKHN2Zyk7XG4gICAgICAgICAgICBlbGVtZW50LnByZXBlbmQoY291bnRkb3duRGl2KTtcbiAgICAgICAgICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvdW50ZG93bi0tO1xuICAgICAgICAgICAgICAgIGlmIChjb3VudGRvd24gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZG93bkRpdi5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3IuY2xhc3NMaXN0LmFkZCgndmlzaWJsZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBTVkcgd2l0aCBjb3VudGRvd24gY2lyY2xlXG4gICAgICogQHBhcmFtIGNvdW50ZG93biAtIGNvdW50ZG93biB0aW1lXG4gICAgICogQHJldHVybnMgU1ZHIGNvdW50ZG93biBpbmRpY2F0b3JcbiAgICAgKi9cbiAgICBfY3JlYXRlU1ZHSW5kaWNhdG9yKGNvdW50ZG93bikge1xuICAgICAgICBjb25zdCBzdmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpO1xuICAgICAgICBjb25zdCBjaXJjbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2NpcmNsZScpO1xuICAgICAgICBjaXJjbGUuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2N4JywgJzcnKTtcbiAgICAgICAgY2lyY2xlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdjeScsICc3Jyk7XG4gICAgICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAncicsICc2Jyk7XG4gICAgICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnc3R5bGUnLCBgYW5pbWF0aW9uOiBjb3VudGRvd24gJHtjb3VudGRvd259cyBsaW5lYXIgaW5maW5pdGUgZm9yd2FyZHNgKTtcbiAgICAgICAgc3ZnLmFwcGVuZChjaXJjbGUpO1xuICAgICAgICByZXR1cm4gc3ZnO1xuICAgIH1cbiAgICAvKiogQ2hhbmdlcyB0aGUgc3RhdGUgb2YgdGhlIGRlbW8gc2NyaXB0IChzdG9wL3BsYXkpICovXG4gICAgX2NoYW5nZVN0b3BTdGF0ZSgpIHtcbiAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMuX3N0b3BTdGFydEJ0bi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdncm9rLWljb24nKTtcbiAgICAgICAgaWNvblswXS5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhcyBmYS1wbGF5JztcbiAgICAgICAgdGhpcy5faXNTdG9wcGVkID0gIXRoaXMuX2lzU3RvcHBlZDtcbiAgICAgICAgaWYgKCF0aGlzLl9pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIGljb25bMF0uY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYWwgZmEtcGF1c2UnO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1N0ZXBQcm9jZXNzZWQpXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRTY3JpcHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogUmVzdGFydHMgdGhlIHNjcmlwdCAqL1xuICAgIF9yZXN0YXJ0U2NyaXB0KCkge1xuICAgICAgICBncm9rLnNoZWxsLmRvY2tNYW5hZ2VyLmNsb3NlKHRoaXMuX25vZGUpO1xuICAgICAgICBncm9rLnNoZWxsLmNsb3NlQWxsKCk7XG4gICAgICAgIHRoaXMuX2NsZWFyUm9vdCgpO1xuICAgICAgICB0aGlzLl9zZXRJbml0UGFyYW1zKCk7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG4gICAgLyoqIENsZWFycyB0aGUgcm9vdCBlbGVtZW50ICovXG4gICAgX2NsZWFyUm9vdCgpIHtcbiAgICAgICAgdGhpcy5fcm9vdCA9IHVpLmRpdihbXSwgeyBpZDogJ2RlbW8tc2NyaXB0JywgY2xhc3NlczogJ3R1dG9yaWFscy1yb290IHR1dG9yaWFscy10cmFjayBkZW1vLWFwcC1zY3JpcHQnIH0pO1xuICAgICAgICB0aGlzLl9tYWluSGVhZGVyID0gdWkucGFuZWwoW10sICd0dXRvcmlhbHMtbWFpbi1oZWFkZXInKTtcbiAgICAgICAgdGhpcy5faGVhZGVyID0gdWkuaDIoJycpO1xuICAgICAgICB0aGlzLl9oZWFkZXJEaXYgPSB1aS5kaXZIKFtdLCAndHV0b3JpYWxzLXJvb3QtaGVhZGVyJyk7XG4gICAgICAgIHRoaXMuX2FjdGl2aXR5ID0gdWkucGFuZWwoW10sICd0dXRvcmlhbHMtcm9vdC1kZXNjcmlwdGlvbicpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc0RpdiA9IHVpLmRpdlYoW10sICd0dXRvcmlhbHMtcm9vdC1wcm9ncmVzcycpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcyA9IHVpLmVsZW1lbnQoJ3Byb2dyZXNzJyk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzU3RlcHMgPSB1aS5kaXZUZXh0KCcnKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubWF4ID0gMDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudmFsdWUgPSAxO1xuICAgIH1cbiAgICAvKiogU2V0cyBpbml0aWFsIHBhcmFtZXRlcnMgKi9cbiAgICBfc2V0SW5pdFBhcmFtcygpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFN0ZXAgPSAwO1xuICAgICAgICB0aGlzLl9pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNDYW5jZWxsZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMuX3N0b3BTdGFydEJ0bi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdncm9rLWljb24nKTtcbiAgICAgICAgaWNvblswXS5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhbCBmYS1wYXVzZSc7XG4gICAgICAgIHRoaXMuX25leHRTdGVwQnRuLmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2FibGVkJyk7XG4gICAgfVxuICAgIC8qKiBDbG9zZXMgZGVtbyBzY3JpcHQgZG9jayAqL1xuICAgIF9jbG9zZURvY2soKSB7XG4gICAgICAgIGdyb2suc2hlbGwuZG9ja01hbmFnZXIuY2xvc2UodGhpcy5fbm9kZSk7XG4gICAgICAgIHRoaXMuY2FuY2VsU2NyaXB0KCk7XG4gICAgfVxuICAgIC8qKiBDYW5jZWxzIHRoZSBzY3JpcHQgKi9cbiAgICBjYW5jZWxTY3JpcHQoKSB7XG4gICAgICAgIHRoaXMuX2lzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgRGVtb1NjcmlwdC5jdXJyZW50T2JqZWN0ID0gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIG5ldyBzdGVwIHRvIHNjcmlwdFxuICAgICAqIEBwYXJhbSBuYW1lIC0gU3RlcCBuYW1lXG4gICAgICogQHBhcmFtIGZ1bmMgLSBTdGVwIGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBTdGVwIG9wdGlvbnMgKGRlc2NyaXB0aW9uIGFuZCBkZWxheSBhZnRlciBzdGVwIGVuZHMpXG4gICAgICogQHJldHVybnMgUmV0dXJucyB0aGUgY3VycmVudCBkZW1vIHNjcmlwdCBvYmplY3RcbiAgICAgKi9cbiAgICBzdGVwKG5hbWUsIGZ1bmMsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fc3RlcHNbdGhpcy5zdGVwcy5sZW5ndGhdID0ge1xuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIGZ1bmM6IGZ1bmMsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqIFN0YXJ0cyB0aGUgZGVtbyBzY3JpcHQgKi9cbiAgICBzdGFydCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRSb290KCk7XG4gICAgICAgICAgICBncm9rLnNoZWxsLm5ld1ZpZXcodGhpcy5uYW1lKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0F1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2NyaXB0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2F1dG9TdGFydEZpcnN0U3RlcClcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLl9uZXh0U3RlcCgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5EZW1vU2NyaXB0LmN1cnJlbnRPYmplY3QgPSBudWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWkdWdGJ5MXpZM0pwY0hRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUprWlcxdkxYTmpjbWx3ZEM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdPenM3T3pzN1FVRkJRU3hQUVVGUExFdEJRVXNzUlVGQlJTeE5RVUZOTEdsQ1FVRnBRaXhEUVVGRE8wRkJRM1JETEU5QlFVOHNTMEZCU3l4RlFVRkZMRTFCUVUwc2FVSkJRV2xDTEVOQlFVTTdRVUZEZEVNc1QwRkJUeXhMUVVGTExFbEJRVWtzVFVGQlRTeHRRa0ZCYlVJc1EwRkJRenRCUVVVeFF5eFBRVUZQTEVWQlFVTXNTMEZCU3l4RlFVRkRMRTFCUVUwc2IwTkJRVzlETEVOQlFVTTdRVUZsZWtRc2JVZEJRVzFITzBGQlEyNUhMRTFCUVUwc1QwRkJUeXhWUVVGVk8wbEJkVU55UWl4WlFVRlpMRWxCUVZrc1JVRkJSU3hYUVVGdFFpeEZRVUZGTEdOQlFYVkNMRXRCUVVzc1JVRkRla1VzVDBGQmQwTTdPMUZCZGtNeFF5eFRRVUZKTEVkQlFWY3NSVUZCUlN4RFFVRkRPMUZCUTJ4Q0xHZENRVUZYTEVkQlFWY3NSVUZCUlN4RFFVRkRPMUZCU1dwQ0xHbENRVUZaTEVkQlFWa3NTMEZCU3l4RFFVRkRPMUZCUXpsQ0xIZENRVUZ0UWl4SFFVRlpMRXRCUVVzc1EwRkJRenRSUVVOeVF5eHBRa0ZCV1N4SFFVRlhMRU5CUVVNc1EwRkJRenRSUVVONlFpeGxRVUZWTEVkQlFWa3NTMEZCU3l4RFFVRkRPMUZCUXpWQ0xHbENRVUZaTEVkQlFWa3NTMEZCU3l4RFFVRkRPMUZCUXpsQ0xIRkNRVUZuUWl4SFFVRlpMRXRCUVVzc1EwRkJRenRSUVVWc1F5eFZRVUZMTEVkQlFXMUNMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkZMR0ZCUVdFN1dVRkRNMFFzVDBGQlR5eEZRVUZGTEdkRVFVRm5SQ3hGUVVGRExFTkJRVU1zUTBGQlF6dFJRVVYwUkN4WFFVRk5MRWRCUVZjc1JVRkJSU3hEUVVGRE8xRkJSWEJDTEdkQ1FVRlhMRWRCUVcxQ0xFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4RlFVRkZMSFZDUVVGMVFpeERRVUZETEVOQlFVTTdVVUZEY0VVc1dVRkJUeXhIUVVGMVFpeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRM2hETEdWQlFWVXNSMEZCYlVJc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVWQlFVVXNkVUpCUVhWQ0xFTkJRVU1zUTBGQlF6dFJRVU5zUlN4clFrRkJZU3hIUVVGelFpeEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEVWQlEzSkZMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1JVRkJSU3hGUVVGRkxHTkJRV01zUTBGQlF5eERRVUZETzFGQlEzcERMR2RDUVVGWExFZEJRWE5DTEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4SFFVRkhMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zWTBGQll5eEZRVUZGTEVWQlFVVXNVMEZCVXl4RFFVRkRMRU5CUVVNN1VVRkRkRWNzYVVKQlFWa3NSMEZCYzBJc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJUdFpRVU14UlN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExHZENRVUZuUWp0blFrRkRlRUlzU1VGQlNTeERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRPMUZCUTNKQ0xFTkJRVU1zUlVGQlJTeFhRVUZYTEVOQlFVTXNRMEZCUXp0UlFVVlNMR05CUVZNc1IwRkJiVUlzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZMRVZCUVVVc05FSkJRVFJDTEVOQlFVTXNRMEZCUXp0UlFVVjJSU3hwUWtGQldTeEhRVUZ0UWl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUlVGQlJTeDVRa0ZCZVVJc1EwRkJReXhEUVVGRE8xRkJRM1JGTEdOQlFWTXNSMEZCZDBJc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXp0UlFVTjRSQ3h0UWtGQll5eEhRVUZ0UWl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFGQlIyaEVMR05CUVZNc1IwRkJjMElzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExHTkJRV01zUTBGQlF5eEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUlVGQlJTeGpRVUZqTEVOQlFVTXNRMEZCUXp0UlFVdHVTQ3hKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTnFRaXhKUVVGSkxFTkJRVU1zVjBGQlZ5eEhRVUZITEZkQlFWY3NRMEZCUXp0UlFVTXZRaXhKUVVGSkxFTkJRVU1zV1VGQldTeEhRVUZITEZkQlFWY3NRMEZCUXp0UlFVTm9ReXhKUVVGSkxFTkJRVU1zYlVKQlFXMUNMRWRCUVVjc1RVRkJRU3hQUVVGUExHRkJRVkFzVDBGQlR5eDFRa0ZCVUN4UFFVRlBMRU5CUVVVc2EwSkJRV3RDTEcxRFFVRkpMRXRCUVVzc1EwRkJRenRSUVVWb1JTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGRrSXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlJYcENMRlZCUVZVc1EwRkJReXhoUVVGaExFZEJRVWNzU1VGQlNTeERRVUZETzBsQlEyeERMRU5CUVVNN1NVRkZSQ3huUTBGQlowTTdTVUZEYUVNc1NVRkJTU3hMUVVGTE8xRkJRMUFzVDBGQlR5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRPMGxCUTNKQ0xFTkJRVU03U1VGRlJDdzRRMEZCT0VNN1NVRkRPVU1zU1VGQlNTeFZRVUZWTzFGQlExb3NUMEZCVHl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF6dEpRVU0xUWl4RFFVRkRPMGxCUjBRc2VVSkJRWGxDTzBsQlEycENMRlZCUVZVN1VVRkRhRUlzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhGUVVGRkxFTkJRVU03VVVGRGVFSXNTVUZCU1N4RFFVRkRMR3RDUVVGclFpeEZRVUZGTEVOQlFVTTdVVUZETVVJc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1JVRkJSU3hKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdTVUZET1VRc1EwRkJRenRKUVVWRUxHZERRVUZuUXp0SlFVTjRRaXhuUWtGQlowSTdVVUZEZEVJc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFRRVUZUTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVOdVF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdVVUZEZGtNc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJSWEJETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1ZVRkJNRUlzUTBGQlF5eFRRVUZUTEVkQlFVY3NkVUpCUVhWQ0xFTkJRVU03VVVGRmJFWXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8wbEJRM0pHTEVOQlFVTTdTVUZGUkN4clEwRkJhME03U1VGRE1VSXNhMEpCUVd0Q08xRkJRM2hDTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTTdVVUZEY2tNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8xRkJRM3BETEVsQlFVa3NRMEZCUXl4alFVRmpMRWRCUVVjc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eFRRVUZUTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1MwRkJTeXhQUVVGUExFbEJRVWtzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUlhoR0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhqUVVGakxFTkJRVU1zUTBGQlF6dEpRVU5vUkN4RFFVRkRPMGxCUlVRc2NVTkJRWEZETzBsQlF6ZENMR1ZCUVdVN08xRkJRM0pDTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1JVRkJSU3cwUWtGQk5FSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZPVVVzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRlRU1zU1VGQlNTeHZRa0ZCYjBJc1IwRkJSeXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMWxCUXpsRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZPMmRDUVVOMFFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVVN2IwSkJRMWdzYjBKQlFXOUNMRWRCUVVjc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVWQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUlVGQlJTeEZRVUZGTEZkQlFWY3NRMEZCUXl4RFFVRkRPMjlDUVVNNVJTeHZRa0ZCYjBJc1EwRkJReXhUUVVGVExFZEJRVWNzZFVKQlFYVkNMRU5CUVVNN2FVSkJRekZFTzJGQlEwWTdXVUZEUkN4TlFVRk5MR05CUVdNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEdsRFFVRnBReXhEUVVGRExFTkJRVU03V1VGRGRFWXNUVUZCVFN4elFrRkJjMElzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVVFc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMREJEUVVGRkxGZEJRVmNzUlVGRGRrVXNkVU5CUVhWRExFTkJRVU1zUTBGQlF6dFpRVU16UXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETzJkQ1FVTndRaXh2UWtGQmIwSTdaMEpCUTNCQ0xHTkJRV003WVVGRFppeEZRVUZGTEhGQ1FVRnhRaXhEUVVGRExFTkJRVU03V1VGRk1VSXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eEZRVUZGTEhOQ1FVRnpRaXhEUVVGRExFTkJRVU03VTBGRGRFUTdTVUZEU0N4RFFVRkRPMGxCUlVRc09FTkJRVGhETzBsQlEzUkRMRk5CUVZNN08xRkJRMllzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1owSkJRV2RDTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUXpORExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRkZCUVZFc1IwRkJSeXhMUVVGTExFTkJRVU03VVVGRmNFTXNUVUZCVFN4alFVRmpMRWRCUVVjc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhSUVVGUkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZMMFVzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJSU3hGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NSVUZCUlN4alFVRmpMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03VVVGRk5VWXNTVUZCU1N4TlFVRkJMRTFCUVVFc1kwRkJZeXhEUVVGRExFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zYVVKQlFXbENMREJEUVVGRkxHZENRVUZuUWl3d1EwRkRkRVlzVTBGQlV5eERRVUZETEZGQlFWRXNRMEZCUXl3eVFrRkJNa0lzUTBGQlF6dFpRVU12UXl4TlFVRkJMR05CUVdNc1EwRkJReXhOUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExHbENRVUZwUWl3d1EwRkJSU3huUWtGQlowSXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRSUVVWb1J5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExHbERRVUZwUXl4RFFVRkRMRU5CUVVNN1VVRkZka1lzU1VGQlNTeERRVUZETEZWQlFWVXNSVUZCUlN4RFFVRkRPMUZCUTJ4Q0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF6dFJRVVZ3UXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hGUVVGRkxFTkJRVU03VVVGRGRrSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMGxCUTNCRExFTkJRVU03U1VGRlJDd3dRa0ZCTUVJN1NVRkRXaXhUUVVGVE96czdXVUZEY2tJc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4SFFVRkhMRWxCUVVrc1EwRkJRenRaUVVNM1FpeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSVHRuUWtGRGRFSXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRPMmRDUVVNelF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRlZCUVRCQ0xFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4aFFVRmhMRU5CUVVNc1EwRkJRenRoUVVNMVJUdFpRVVZFTEUxQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc2NVSkJRWEZDTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03V1VGRE9VWXNUVUZCVFN4alFVRmpMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eHpRa0ZCYzBJc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1dVRkROMFlzVFVGQlRTeG5Ra0ZCWjBJc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEhOQ1FVRnpRaXhEUVVGRExHZERRVUZuUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETzFsQlJYQklMR05CUVdNc1EwRkJReXhUUVVGVExFZEJRVWNzZDBOQlFYZERMRU5CUVVNN1dVRkRjRVVzWjBKQlFXZENMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0WlFVTTFReXhuUWtGQlowSXNRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzFsQlJURkRMRTFCUVUwc1YwRkJWeXhIUVVGSExFdEJRWFZDTEVOQlFVTTdXVUZETlVNc1RVRkJUU3hUUVVGVExFZEJRVWNzUTBGQlFTeE5RVUZCTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEU5QlFVOHNNRU5CUVVVc1MwRkJTeXhGUVVGRExFTkJRVU03WjBKQlF5OUVMRTFCUVVFc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNc1QwRkJUeXd3UTBGQlJTeExRVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRaUVVWNFJDeE5RVUZOTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMWxCUXpWRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJSU3hYUVVGWExFTkJRVU1zVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03V1VGRGJFWXNUVUZCVFN4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFdEJRVzlDTEVWQlFVVXNZMEZCTmtJc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF6dFpRVU4wUml4TlFVRk5MRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dFpRVVYyUWl4TlFVRk5MR2xDUVVGcFFpeEhRVUZITEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03V1VGRE4wTXNZMEZCWXl4RFFVRkRMRmRCUVZjc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4RFFVRkRPMWxCUXpsRExHbENRVUZwUWl4RFFVRkRMRk5CUVZNc1IwRkJSeXgzUWtGQmQwSXNRMEZCUXp0WlFVVjJSQ3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRPMWxCUTNaQ0xFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNVMEZCVXl4SFFVRkhMRk5CUVZNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eExRVUZMTEU5QlFVOHNTVUZCU1N4RFFVRkRMRlZCUVZVc1JVRkJSU3hEUVVGRE8xbEJSWFJHTEVsQlFVa3NRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJRenRaUVVOd1FpeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFZEJRVWNzUzBGQlN5eERRVUZETzFsQlJUbENMRWxCUVVrc1NVRkJTU3hEUVVGRExGbEJRVmtzUzBGQlN5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RlFVRkZPMmRDUVVONlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU1zUTBGQlF6dHZRa0ZEY0VVc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRE8yZENRVU5zUkN4UFFVRlBPMkZCUTFJN1dVRkZSQ3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlR0blFrRkRkRUlzVFVGQlRTeHpRa0ZCYzBJc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEhOQ1FVRnpRaXhEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJRenRuUWtGRGNrY3NUVUZCVFN4cFFrRkJhVUlzUjBGQlJ5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZMRVZCUVVVc1YwRkJWeXhEUVVGRExFTkJRVU03WjBKQlEycEdMR2xDUVVGcFFpeERRVUZETEZOQlFWTXNSMEZCUnl4MVFrRkJkVUlzUTBGQlF6dG5Ra0ZEZEVRc2MwSkJRWE5DTEVOQlFVTXNWMEZCVnl4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVOQlFVTTdaMEpCUTNSRUxFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dG5Ra0ZET1VNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eFZRVUV3UWl4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTTdZVUZETDBVN08wdEJRMFk3U1VGRlJDeHhRMEZCY1VNN1NVRkRka0lzV1VGQldUczdXVUZEZUVJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVlVGQlZTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMmRDUVVONFJDeEpRVUZKTEVsQlFVa3NRMEZCUXl4VlFVRlZMRWxCUVVrc1NVRkJTU3hEUVVGRExGbEJRVms3YjBKQlEzUkRMRTFCUVUwN1owSkJSVklzVFVGQlRTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1lVRkRlRUk3VVVGRFNDeERRVUZETzB0QlFVRTdTVUZGUkRzN096dFBRVWxITzBsQlEwc3NVMEZCVXl4RFFVRkRMRTlCUVhWQ0xFVkJRVVVzUTBGQlV6dFJRVU5zUkN4UFFVRlBMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU03VVVGRGFFSXNUMEZCVHl4RFFVRkRMRk5CUVZNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGVFSXNRMEZCUXp0SlFVVkVPenM3T3p0UFFVdEhPMGxCUTFjc1ZVRkJWU3hEUVVGRExFOUJRVzlDTEVWQlFVVXNVMEZCYzBJc1JVRkJSU3hKUVVGWk96dFpRVU5xUml4TlFVRk5MRmxCUVZrc1IwRkJiVUlzUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRVZCUVVVc2RVSkJRWFZDTEVOQlFVTXNRMEZCUXp0WlFVVjZSU3hUUVVGVExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRaUVVWc1F5eEpRVUZKTEZOQlFWTXNSMEZCUnl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRelZDTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRaUVVWb1JDeFpRVUZaTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM3BDTEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03V1VGRk9VSXNUVUZCVFN4UlFVRlJMRWRCUVVjc1YwRkJWeXhEUVVGRExFZEJRVWNzUlVGQlJUdG5Ra0ZEYUVNc1UwRkJVeXhGUVVGRkxFTkJRVU03WjBKQlExb3NTVUZCU1N4VFFVRlRMRXRCUVVzc1EwRkJReXhGUVVGRk8yOUNRVU51UWl4aFFVRmhMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03YjBKQlEzaENMRmxCUVZrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dHZRa0ZGZEVJc1UwRkJVeXhEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN2IwSkJRM0pETEZOQlFWTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzJsQ1FVTndRenRaUVVOSUxFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTllMRU5CUVVNN1MwRkJRVHRKUVVWRU96czdPMDlCU1VjN1NVRkRTeXh0UWtGQmJVSXNRMEZCUXl4VFFVRnBRanRSUVVNelF5eE5RVUZOTEVkQlFVY3NSMEZCUnl4UlFVRlJMRU5CUVVNc1pVRkJaU3hEUVVGRExEUkNRVUUwUWl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJRekZGTEUxQlFVMHNUVUZCVFN4SFFVRkhMRkZCUVZFc1EwRkJReXhsUVVGbExFTkJRVU1zTkVKQlFUUkNMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU03VVVGRGFFWXNUVUZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNaRExFMUJRVTBzUTBGQlF5eGpRVUZqTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU4yUXl4TlFVRk5MRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRkRU1zVFVGQlRTeERRVUZETEdOQlFXTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1QwRkJUeXhGUVVGRkxIZENRVUYzUWl4VFFVRlRMRFJDUVVFMFFpeERRVUZETEVOQlFVTTdVVUZEY0Vjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVVnVRaXhQUVVGUExFZEJRVWNzUTBGQlF6dEpRVU5pTEVOQlFVTTdTVUZGUkN4MVJFRkJkVVE3U1VGREwwTXNaMEpCUVdkQ08xRkJRM1JDTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU03VVVGRGNFVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGTkJRVk1zUjBGQlJ5eDFRa0ZCZFVJc1EwRkJRenRSUVVNMVF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF6dFJRVVZ1UXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUlVGQlJUdFpRVU53UWl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eEhRVUZITEhkQ1FVRjNRaXhEUVVGRE8xbEJRemRETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTzJkQ1FVTjRRaXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTEVOQlFVTTdVMEZEZGtJN1NVRkRTQ3hEUVVGRE8wbEJSVVFzTUVKQlFUQkNPMGxCUTJ4Q0xHTkJRV003VVVGRGNFSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhYUVVGWExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRk5MRU5CUVVNc1EwRkJRenRSUVVNeFF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8xRkJRM1JDTEVsQlFVa3NRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJRenRSUVVOc1FpeEpRVUZKTEVOQlFVTXNZMEZCWXl4RlFVRkZMRU5CUVVNN1VVRkRkRUlzU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRPMGxCUTJZc1EwRkJRenRKUVVWRUxEaENRVUU0UWp0SlFVTjBRaXhWUVVGVk8xRkJRMmhDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVVc1lVRkJZU3hGUVVGRkxFOUJRVThzUlVGQlJTeG5SRUZCWjBRc1JVRkJReXhEUVVGRExFTkJRVU03VVVGRmVFY3NTVUZCU1N4RFFVRkRMRmRCUVZjc1IwRkJSeXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVXNSVUZCUlN4MVFrRkJkVUlzUTBGQlF5eERRVUZETzFGQlEzcEVMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRSUVVONlFpeEpRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeEZRVUZGTEhWQ1FVRjFRaXhEUVVGRExFTkJRVU03VVVGRmRrUXNTVUZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVXNSVUZCUlN3MFFrRkJORUlzUTBGQlF5eERRVUZETzFGQlJUVkVMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRVZCUVVVc2VVSkJRWGxDTEVOQlFVTXNRMEZCUXp0UlFVTXpSQ3hKUVVGSkxFTkJRVU1zVTBGQlV5eEhRVUZITEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU03VVVGRGVFTXNTVUZCU1N4RFFVRkRMR05CUVdNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUlhKRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOMlFpeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRE0wSXNRMEZCUXp0SlFVVkVMRGhDUVVFNFFqdEpRVU4wUWl4alFVRmpPMUZCUTNCQ0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNSQ0xFbEJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUTNoQ0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUlRGQ0xFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc2MwSkJRWE5DTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1VVRkRjRVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRk5CUVZNc1IwRkJSeXgzUWtGQmQwSXNRMEZCUXp0UlFVTTNReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU03U1VGRGFrUXNRMEZCUXp0SlFVVkVMRGhDUVVFNFFqdEpRVU4wUWl4VlFVRlZPMUZCUTJoQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlRTeERRVUZETEVOQlFVTTdVVUZETVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUlVGQlJTeERRVUZETzBsQlEzUkNMRU5CUVVNN1NVRkZSQ3g1UWtGQmVVSTdTVUZEZWtJc1dVRkJXVHRSUVVOV0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTNwQ0xGVkJRVlVzUTBGQlF5eGhRVUZoTEVkQlFVY3NTVUZCU1N4RFFVRkRPMGxCUTJ4RExFTkJRVU03U1VGRlJEczdPenM3TzA5QlRVYzdTVUZEU0N4SlFVRkpMRU5CUVVNc1NVRkJXU3hGUVVGRkxFbEJRWGxDTEVWQlFVVXNUMEZCWjBRN1VVRkROVVlzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITzFsQlF5OUNMRWxCUVVrc1JVRkJSU3hKUVVGSk8xbEJRMVlzU1VGQlNTeEZRVUZGTEVsQlFVazdXVUZEVml4UFFVRlBMRVZCUVVVc1QwRkJUenRUUVVOcVFpeERRVUZETzFGQlEwWXNUMEZCVHl4SlFVRkpMRU5CUVVNN1NVRkRaQ3hEUVVGRE8wbEJSVVFzTmtKQlFUWkNPMGxCUTNaQ0xFdEJRVXM3TzFsQlExUXNTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8xbEJRMnBDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0WlFVVTVRaXhKUVVGSkxFbEJRVWtzUTBGQlF5eFpRVUZaTEVWQlFVVTdaMEpCUTNKQ0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVWQlFVVXNRMEZCUXp0blFrRkRjRUlzVDBGQlR6dGhRVU5TTzFsQlJVUXNTVUZCU1N4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTzJkQ1FVTXhRaXhOUVVGTkxFbEJRVWtzUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0UlFVTXpRaXhEUVVGRE8wdEJRVUU3TzBGQmNGWk5MSGRDUVVGaExFZEJRWE5DTEVsQlFVa3NRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENBcUlHRnpJRVJISUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5a1p5YzdYRzVwYlhCdmNuUWdLaUJoY3lCMWFTQm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZkV2tuTzF4dWFXMXdiM0owSUNvZ1lYTWdaM0p2YXlCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdlozSnZheWM3WEc1Y2JtbHRjRzl5ZENCN1pHVnNZWGw5SUdaeWIyMGdKMEJrWVhSaFozSnZheTFzYVdKeVlYSnBaWE12ZFhScGJITXZjM0pqTDNSbGMzUW5PMXh1WEc1Y2JpOHFLaUJVZVhCbElHWnZjaUI3UUd4cGJtc2dSR1Z0YjFOamNtbHdkSDBnYzNSbGNDQXFMMXh1Wlhod2IzSjBJSFI1Y0dVZ1UzUmxjQ0E5SUh0Y2JpQWdibUZ0WlRvZ2MzUnlhVzVuTzF4dUlDQm1kVzVqT2lBb0tTQTlQaUJRY205dGFYTmxQSFp2YVdRK08xeHVYRzRnSUM4cUtpQlRkR1Z3SUc5d2RHbHZibk02SUdSbGMyTnlhWEIwYVc5dUlHRnVaQ0JrWld4aGVTQW9hVzRnYlhNcElHRm1kR1Z5SUdaMWJtTjBhVzl1SUdWdVpITWdLaTljYmlBZ2IzQjBhVzl1Y3o4NklIdGNiaUFnSUNCa1pYTmpjbWx3ZEdsdmJqODZJSE4wY21sdVp6dGNiaUFnSUNCa1pXeGhlVDg2SUc1MWJXSmxjanRjYmlBZ2ZWeHVmVHRjYmx4dUx5b3FJRVJsYlc4Z2MyTnlhWEIwSUdOc1lYTnpMaUJEYjNWc1pDQmlaU0IxYzJWa0lHWnZjaUJqY21WaGRHbHVaeUJrWlcxdklITmpjbWx3ZEhNZ2RHOGdjMmh2ZHlCMGFHVWdjR3hoZEdadmNtMGdZMkZ3WVdKcGJHbDBhV1Z6SUNvdlhHNWxlSEJ2Y25RZ1kyeGhjM01nUkdWdGIxTmpjbWx3ZENCN1hHNGdJRzVoYldVNklITjBjbWx1WnlBOUlDY25PMXh1SUNCa1pYTmpjbWx3ZEdsdmJqb2djM1J5YVc1bklEMGdKeWM3WEc1Y2JpQWdjM1JoZEdsaklHTjFjbkpsYm5SUFltcGxZM1E2SUVSbGJXOVRZM0pwY0hRZ2ZDQnVkV3hzSUQwZ2JuVnNiRHRjYmx4dUlDQndjbWwyWVhSbElGOXBjMEYxZEc5dFlYUnBZem9nWW05dmJHVmhiaUE5SUdaaGJITmxPMXh1SUNCd2NtbDJZWFJsSUY5aGRYUnZVM1JoY25SR2FYSnpkRk4wWlhBNklHSnZiMnhsWVc0Z1BTQm1ZV3h6WlR0Y2JpQWdjSEpwZG1GMFpTQmZZM1Z5Y21WdWRGTjBaWEE2SUc1MWJXSmxjaUE5SURBN1hHNGdJSEJ5YVhaaGRHVWdYMmx6VTNSdmNIQmxaRG9nWW05dmJHVmhiaUE5SUdaaGJITmxPMXh1SUNCd2NtbDJZWFJsSUY5cGMwTmhibU5sYkd4bFpEb2dZbTl2YkdWaGJpQTlJR1poYkhObE8xeHVJQ0J3Y21sMllYUmxJRjlwYzFOMFpYQlFjbTlqWlhOelpXUTZJR0p2YjJ4bFlXNGdQU0JtWVd4elpUdGNibHh1SUNCd2NtbDJZWFJsSUY5eWIyOTBPaUJJVkUxTVJHbDJSV3hsYldWdWRDQTlJSFZwTG1ScGRpaGJYU3dnZTJsa09pQW5aR1Z0YnkxelkzSnBjSFFuTEZ4dUlDQWdJR05zWVhOelpYTTZJQ2QwZFhSdmNtbGhiSE10Y205dmRDQjBkWFJ2Y21saGJITXRkSEpoWTJzZ1pHVnRieTFoY0hBdGMyTnlhWEIwSjMwcE8xeHVYRzRnSUhCeWFYWmhkR1VnWDNOMFpYQnpPaUJUZEdWd1cxMGdQU0JiWFR0Y2JseHVJQ0J3Y21sMllYUmxJRjl0WVdsdVNHVmhaR1Z5T2lCSVZFMU1SR2wyUld4bGJXVnVkQ0E5SUhWcExuQmhibVZzS0Z0ZExDQW5kSFYwYjNKcFlXeHpMVzFoYVc0dGFHVmhaR1Z5SnlrN1hHNGdJSEJ5YVhaaGRHVWdYMmhsWVdSbGNqb2dTRlJOVEVobFlXUnBibWRGYkdWdFpXNTBJRDBnZFdrdWFESW9KeWNwTzF4dUlDQndjbWwyWVhSbElGOW9aV0ZrWlhKRWFYWTZJRWhVVFV4RWFYWkZiR1Z0Wlc1MElEMGdkV2t1WkdsMlNDaGJYU3dnSjNSMWRHOXlhV0ZzY3kxeWIyOTBMV2hsWVdSbGNpY3BPMXh1SUNCd2NtbDJZWFJsSUY5emRHOXdVM1JoY25SQ2RHNDZJRWhVVFV4Q2RYUjBiMjVGYkdWdFpXNTBJRDBnZFdrdVluVjBkRzl1S0hWcExtbGpiMjVHUVNnbmNHRjFjMlVuS1N4Y2JpQWdJQ0FvS1NBOVBpQjBhR2x6TGw5amFHRnVaMlZUZEc5d1UzUmhkR1VvS1N3Z0oxQnNZWGtnTHlCd1lYVnpaU2NwTzF4dUlDQndjbWwyWVhSbElGOXlaWE4wWVhKMFFuUnVPaUJJVkUxTVFuVjBkRzl1Uld4bGJXVnVkQ0E5SUhWcExtSjFkSFJ2YmloMWFTNXBZMjl1UmtFb0ozSmxaRzhuS1N3Z0tDa2dQVDRnZEdocGN5NWZjbVZ6ZEdGeWRGTmpjbWx3ZENncExDQW5VbVZ6ZEdGeWRDY3BPMXh1SUNCd2NtbDJZWFJsSUY5dVpYaDBVM1JsY0VKMGJqb2dTRlJOVEVKMWRIUnZia1ZzWlcxbGJuUWdQU0IxYVM1aWRYUjBiMjRvZFdrdWFXTnZia1pCS0Nkd2JHRjVKeWtzSUNncElEMCtJSHRjYmlBZ0lDQnBaaUFvSVhSb2FYTXVYMmx6VTNSbGNGQnliMk5sYzNObFpDbGNiaUFnSUNBZ0lIUm9hWE11WDI1bGVIUlRkR1Z3S0NrN1hHNGdJSDBzSUNkT1pYaDBJSE4wWlhBbktUdGNibHh1SUNCd2NtbDJZWFJsSUY5aFkzUnBkbWwwZVRvZ1NGUk5URVJwZGtWc1pXMWxiblFnUFNCMWFTNXdZVzVsYkNoYlhTd2dKM1IxZEc5eWFXRnNjeTF5YjI5MExXUmxjMk55YVhCMGFXOXVKeWs3WEc1Y2JpQWdjSEpwZG1GMFpTQmZjSEp2WjNKbGMzTkVhWFk2SUVoVVRVeEVhWFpGYkdWdFpXNTBJRDBnZFdrdVpHbDJWaWhiWFN3Z0ozUjFkRzl5YVdGc2N5MXliMjkwTFhCeWIyZHlaWE56SnlrN1hHNGdJSEJ5YVhaaGRHVWdYM0J5YjJkeVpYTnpPaUJJVkUxTVVISnZaM0psYzNORmJHVnRaVzUwSUQwZ2RXa3VaV3hsYldWdWRDZ25jSEp2WjNKbGMzTW5LVHRjYmlBZ2NISnBkbUYwWlNCZmNISnZaM0psYzNOVGRHVndjem9nU0ZSTlRFUnBka1ZzWlcxbGJuUWdQU0IxYVM1a2FYWlVaWGgwS0NjbktUdGNibHh1SUNCd2NtbDJZWFJsSUY5dWIyUmxQem9nUkVjdVJHOWphMDV2WkdVN1hHNGdJSEJ5YVhaaGRHVWdYMk5zYjNObFFuUnVPaUJJVkUxTVFuVjBkRzl1Uld4bGJXVnVkQ0E5SUhWcExtSjFkSFJ2YmloMWFTNXBZMjl1UmtFb0oyTm9aWFp5YjI0dGJHVm1kQ2NwTENBb0tTQTlQaUIwYUdsekxsOWpiRzl6WlVSdlkyc29LU3dnSjBKaFkyc2dkRzhnWkdWdGJ5Y3BPMXh1WEc1Y2JpQWdZMjl1YzNSeWRXTjBiM0lvYm1GdFpUb2djM1J5YVc1bkxDQmtaWE5qY21sd2RHbHZiam9nYzNSeWFXNW5MQ0JwYzBGMWRHOXRZWFJwWXpvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sTEZ4dUlDQWdJRzl3ZEdsdmJuTS9PaUI3WVhWMGIxTjBZWEowUm1seWMzUlRkR1Z3UHpvZ1ltOXZiR1ZoYm4wcElIdGNiaUFnSUNCMGFHbHpMbTVoYldVZ1BTQnVZVzFsTzF4dUlDQWdJSFJvYVhNdVpHVnpZM0pwY0hScGIyNGdQU0JrWlhOamNtbHdkR2x2Ymp0Y2JpQWdJQ0IwYUdsekxsOXBjMEYxZEc5dFlYUnBZeUE5SUdselFYVjBiMjFoZEdsak8xeHVJQ0FnSUhSb2FYTXVYMkYxZEc5VGRHRnlkRVpwY25OMFUzUmxjQ0E5SUc5d2RHbHZibk0vTG1GMWRHOVRkR0Z5ZEVacGNuTjBVM1JsY0NBL1B5Qm1ZV3h6WlR0Y2JseHVJQ0FnSUhSb2FYTXVYM0J5YjJkeVpYTnpMbTFoZUNBOUlEQTdYRzRnSUNBZ2RHaHBjeTVmY0hKdlozSmxjM011ZG1Gc2RXVWdQU0F4TzF4dVhHNGdJQ0FnUkdWdGIxTmpjbWx3ZEM1amRYSnlaVzUwVDJKcVpXTjBJRDBnZEdocGN6dGNiaUFnZlZ4dVhHNGdJQzhxS2lCU1pYUjFjbTV6SUdSbGJXOGdjMk55YVhCMElITjBaWEJ6SUNvdlhHNGdJR2RsZENCemRHVndjeWdwT2lCVGRHVndXMTBnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5emRHVndjenRjYmlBZ2ZWeHVYRzRnSUM4cUtpQlNaWFIxY201eklIUm9aU0JoYlc5MWJuUWdiMllnWkdWdGJ5QnpZM0pwY0hRZ2MzUmxjSE1nS2k5Y2JpQWdaMlYwSUhOMFpYQk9kVzFpWlhJb0tUb2diblZ0WW1WeUlIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZjM1JsY0hNdWJHVnVaM1JvTzF4dUlDQjlYRzVjYmx4dUlDQXZLaW9nUVdSa2N5QnpZM0pwY0hRZ2FHVmhaR1Z5SUNvdlhHNGdJSEJ5YVhaaGRHVWdYMkZrWkVobFlXUmxjaWdwT2lCMmIybGtJSHRjYmlBZ0lDQjBhR2x6TGw5amNtVmhkR1ZJWldGa1pYSkVhWFlvS1R0Y2JpQWdJQ0IwYUdsekxsOWpjbVZoZEdWUWNtOW5jbVZ6YzBScGRpZ3BPMXh1SUNBZ0lIUm9hWE11WDIxaGFXNUlaV0ZrWlhJdVlYQndaVzVrS0hSb2FYTXVYMmhsWVdSbGNrUnBkaXdnZEdocGN5NWZjSEp2WjNKbGMzTkVhWFlwTzF4dUlDQjlYRzVjYmlBZ0x5b3FJRU55WldGMFpYTWdjMk55YVhCMElHaGxZV1JsY2lCa2FYWWdLaTljYmlBZ2NISnBkbUYwWlNCZlkzSmxZWFJsU0dWaFpHVnlSR2wyS0NrNklIWnZhV1FnZTF4dUlDQWdJSFJvYVhNdVgyaGxZV1JsY2k1cGJtNWxjbFJsZUhRZ1BTQjBhR2x6TG01aGJXVTdYRzRnSUNBZ2RHaHBjeTVmYUdWaFpHVnlSR2wyTG1Gd2NHVnVaQ2gwYUdsekxsOWpiRzl6WlVKMGJpazdYRzRnSUNBZ2RHaHBjeTVmYUdWaFpHVnlSR2wyTG1Gd2NHVnVaQ2gwYUdsekxsOW9aV0ZrWlhJcE8xeHVYRzRnSUNBZ0tIUm9hWE11WDI1bGVIUlRkR1Z3UW5SdUxtWnBjbk4wUTJocGJHUWdZWE1nU0ZSTlRFVnNaVzFsYm5RcExtTnNZWE56VG1GdFpTQTlJQ2RuY205ckxXbGpiMjRnWm1GeklHWmhMWEJzWVhrbk8xeHVYRzRnSUNBZ2RHaHBjeTVmYUdWaFpHVnlSR2wyTG1Gd2NHVnVaQ2gwYUdsekxsOXBjMEYxZEc5dFlYUnBZeUEvSUhSb2FYTXVYM04wYjNCVGRHRnlkRUowYmlBNklIUm9hWE11WDI1bGVIUlRkR1Z3UW5SdUtUdGNiaUFnZlZ4dVhHNGdJQzhxS2lCRGNtVmhkR1Z6SUhOamNtbHdkQ0J3Y205bmNtVnpjeUJrYVhZZ0tpOWNiaUFnY0hKcGRtRjBaU0JmWTNKbFlYUmxVSEp2WjNKbGMzTkVhWFlvS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdkR2hwY3k1ZmNISnZaM0psYzNNdWJXRjRJRDBnZEdocGN5NXpkR1Z3VG5WdFltVnlPMXh1SUNBZ0lIUm9hWE11WDNCeWIyZHlaWE56UkdsMkxtRndjR1Z1WkNoMGFHbHpMbDl3Y205bmNtVnpjeWs3WEc0Z0lDQWdkR2hwY3k1ZmNISnZaM0psYzNOVGRHVndjeUE5SUhWcExtUnBkbFJsZUhRb1lGTjBaWEE2SUNSN2RHaHBjeTVmY0hKdlozSmxjM011ZG1Gc2RXVjlJRzltSUNSN2RHaHBjeTV6ZEdWd1RuVnRZbVZ5ZldBcE8xeHVYRzRnSUNBZ2RHaHBjeTVmY0hKdlozSmxjM05FYVhZdVlYQndaVzVrS0hSb2FYTXVYM0J5YjJkeVpYTnpVM1JsY0hNcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xSUVGa1pITWdaR1Z6WTNKcGNIUnBiMjRnYjJZZ2RHaGxJSE5qY21sd2RDQXFMMXh1SUNCd2NtbDJZWFJsSUY5aFpHUkVaWE5qY21sd2RHbHZiaWdwT2lCMmIybGtJSHRjYmlBZ0lDQjBhR2x6TGw5aFkzUnBkbWwwZVM1aGNIQmxibVFvZFdrdVpHbDJLSFJvYVhNdVpHVnpZM0pwY0hScGIyNHNJQ2QwZFhSdmNtbGhiSE10Y205dmRDMWtaWE5qY21sd2RHbHZiaWNwS1R0Y2JseHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2RHaHBjeTV6ZEdWd1RuVnRZbVZ5T3lCcEt5c3BJSHRjYmlBZ0lDQWdJR3hsZENCcGJuTjBjblZqZEdsdmJrbHVaR2xqWVhSdmNpQTlJSFZwTG1samIyNUdRU2duWTJ4dlkyc25LVHRjYmlBZ0lDQWdJR2xtSUNnaGRHaHBjeTVmYVhOQmRYUnZiV0YwYVdNcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0drZ1BUMDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBibk4wY25WamRHbHZia2x1WkdsallYUnZjaUE5SUhWcExtbGpiMjVHUVNnbmNHeGhlU2NzSUNncElEMCtJSFJvYVhNdVgyNWxlSFJUZEdWd0tDa3NJQ2RPWlhoMElITjBaWEFuS1R0Y2JpQWdJQ0FnSUNBZ0lDQnBibk4wY25WamRHbHZia2x1WkdsallYUnZjaTVqYkdGemMwNWhiV1VnUFNBblozSnZheTFwWTI5dUlHWmhjeUJtWVMxd2JHRjVKenRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnWTI5dWMzUWdhVzV6ZEhKMVkzUnBiMjVFYVhZZ1BTQjFhUzVrYVhZb2RHaHBjeTVmYzNSbGNITmJhVjB1Ym1GdFpTd2dKMmR5YjJzdGRIVjBiM0pwWVd3dFpXNTBjbmt0YVc1emRISjFZM1JwYjI0bktUdGNiaUFnSUNBZ0lHTnZibk4wSUdOMWNuSmxiblJUZEdWd1JHVnpZM0pwY0hScGIyNGdQU0IxYVM1a2FYWW9kR2hwY3k1ZmMzUmxjSE5iYVYwdWIzQjBhVzl1Y3o4dVpHVnpZM0pwY0hScGIyNHNYRzRnSUNBZ0lDQWdJQ2RuY205ckxYUjFkRzl5YVdGc0xYTjBaWEF0WkdWelkzSnBjSFJwYjI0Z2FHbGtaR1Z1SnlrN1hHNGdJQ0FnSUNCamIyNXpkQ0JsYm5SeWVTQTlJSFZwTG1ScGRrZ29XMXh1SUNBZ0lDQWdJQ0JwYm5OMGNuVmpkR2x2YmtsdVpHbGpZWFJ2Y2l4Y2JpQWdJQ0FnSUNBZ2FXNXpkSEoxWTNScGIyNUVhWFlzWEc0Z0lDQWdJQ0JkTENBblozSnZheTEwZFhSdmNtbGhiQzFsYm5SeWVTY3BPMXh1WEc0Z0lDQWdJQ0IwYUdsekxsOWhZM1JwZG1sMGVTNWhjSEJsYm1Rb1pXNTBjbmtzSUdOMWNuSmxiblJUZEdWd1JHVnpZM0pwY0hScGIyNHBPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQzhxS2lCSmJtbDBhV0ZzYVhwbGN5QjBhR1VnY205dmRDQnZaaUIwYUdVZ1pHVnRieUJ6WTNKcGNIUWdLaTljYmlBZ2NISnBkbUYwWlNCZmFXNXBkRkp2YjNRb0tUb2dkbTlwWkNCN1hHNGdJQ0FnWjNKdmF5NXphR1ZzYkM1M2FXNWtiM2R6TG5Ob2IzZERiMjUwWlhoMFVHRnVaV3dnUFNCMGNuVmxPMXh1SUNBZ0lHZHliMnN1YzJobGJHd3VkMmx1Wkc5M2N5NXphRzkzU0dWc2NDQTlJR1poYkhObE8xeHVYRzRnSUNBZ1kyOXVjM1FnYzJOeWFYQjBSRzlqYTA1dlpHVWdQU0JCY25KaGVTNW1jbTl0S0dkeWIyc3VjMmhsYkd3dVpHOWphMDFoYm1GblpYSXVjbTl2ZEU1dlpHVXVZMmhwYkdSeVpXNHBXekJkTzF4dVhHNGdJQ0FnZEdocGN5NWZibTlrWlNBOUlHZHliMnN1YzJobGJHd3VaRzlqYTAxaGJtRm5aWEl1Wkc5amF5aDBhR2x6TGw5eWIyOTBMQ0JFUnk1RVQwTkxYMVJaVUVVdVJrbE1UQ3dnYzJOeWFYQjBSRzlqYTA1dlpHVXNJQ2NuS1R0Y2JseHVJQ0FnSUdsbUlDaHpZM0pwY0hSRWIyTnJUbTlrWlM1d1lYSmxiblF1WTI5dWRHRnBibVZ5TG1OdmJuUmhhVzVsY2tWc1pXMWxiblF1Wm1seWMzUkZiR1Z0Wlc1MFEyaHBiR1EvTG14aGMzUkZiR1Z0Wlc1MFEyaHBiR1EvTGx4dUlDQWdJQ0FnWTJ4aGMzTk1hWE4wTG1OdmJuUmhhVzV6S0NkMFlXSXRhR0Z1Wkd4bExXeHBjM1F0WTI5dWRHRnBibVZ5SnlrcFhHNGdJQ0FnSUNCelkzSnBjSFJFYjJOclRtOWtaUzV3WVhKbGJuUXVZMjl1ZEdGcGJtVnlMbU52Ym5SaGFXNWxja1ZzWlcxbGJuUXVabWx5YzNSRmJHVnRaVzUwUTJocGJHUS9MbXhoYzNSRmJHVnRaVzUwUTJocGJHUXVjbVZ0YjNabEtDazdYRzVjYmlBZ0lDQjBhR2x6TGw5dWIyUmxMbU52Ym5SaGFXNWxjaTVqYjI1MFlXbHVaWEpGYkdWdFpXNTBMbU5zWVhOelRHbHpkQzVoWkdRb0ozUjFkRzl5YVdGc2N5MWtaVzF2TFhOamNtbHdkQzFqYjI1MFlXbHVaWEluS1R0Y2JseHVJQ0FnSUhSb2FYTXVYMkZrWkVobFlXUmxjaWdwTzF4dUlDQWdJSFJvYVhNdVgzSnZiM1F1WVhCd1pXNWtLSFJvYVhNdVgyMWhhVzVJWldGa1pYSXBPMXh1WEc0Z0lDQWdkR2hwY3k1ZllXUmtSR1Z6WTNKcGNIUnBiMjRvS1R0Y2JpQWdJQ0IwYUdsekxsOXliMjkwTG1Gd2NHVnVaQ2gwYUdsekxsOWhZM1JwZG1sMGVTazdYRzRnSUgxY2JseHVJQ0F2S2lvZ1VISnZZMlZ6YzJWeklHNWxlSFFnYzNSbGNDQXFMMXh1SUNCd2NtbDJZWFJsSUdGemVXNWpJRjl1WlhoMFUzUmxjQ2dwT2lCUWNtOXRhWE5sUEhadmFXUStJSHRjYmlBZ0lDQjBhR2x6TGw5cGMxTjBaWEJRY205alpYTnpaV1FnUFNCMGNuVmxPMXh1SUNBZ0lHbG1JQ2doZEdocGN5NWZhWE5CZFhSdmJXRjBhV01wSUh0Y2JpQWdJQ0FnSUhSb2FYTXVYMjVsZUhSVGRHVndRblJ1TG1Oc1lYTnpUR2x6ZEM1aFpHUW9KMlJwYzJGaWJHVmtKeWs3WEc0Z0lDQWdJQ0FvZEdocGN5NWZibVY0ZEZOMFpYQkNkRzR1Wm1seWMzUkRhR2xzWkNCaGN5QklWRTFNUld4bGJXVnVkQ2t1WTJ4aGMzTk1hWE4wTG1Ga1pDZ25abUV0WkdsellXSnNaV1FuS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JqYjI1emRDQmxiblJ5ZVNBOUlIUm9hWE11WDJGamRHbDJhWFI1TG1kbGRFVnNaVzFsYm5SelFubERiR0Z6YzA1aGJXVW9KMmR5YjJzdGRIVjBiM0pwWVd3dFpXNTBjbmtuS1Z0MGFHbHpMbDlqZFhKeVpXNTBVM1JsY0YwN1hHNGdJQ0FnWTI5dWMzUWdaVzUwY25sSmJtUnBZMkYwYjNJZ1BTQjBhR2x6TGw5aFkzUnBkbWwwZVM1blpYUkZiR1Z0Wlc1MGMwSjVRMnhoYzNOT1lXMWxLQ2RuY205ckxXbGpiMjRuS1Z0MGFHbHpMbDlqZFhKeVpXNTBVM1JsY0YwN1hHNGdJQ0FnWTI5dWMzUWdaVzUwY25sSmJuTjBjblZqZEdsdmJpQTlJSFJvYVhNdVgyRmpkR2wyYVhSNUxtZGxkRVZzWlcxbGJuUnpRbmxEYkdGemMwNWhiV1VvSjJkeWIyc3RkSFYwYjNKcFlXd3RjM1JsY0Mxa1pYTmpjbWx3ZEdsdmJpY3BXM1JvYVhNdVgyTjFjbkpsYm5SVGRHVndYVHRjYmx4dUlDQWdJR1Z1ZEhKNVNXNWthV05oZEc5eUxtTnNZWE56VG1GdFpTQTlJQ2RuY205ckxXbGpiMjRnWm1GeUlHWmhMWE53YVc1dVpYSXRkR2hwY21RZ1ptRXRjM0JwYmljN1hHNGdJQ0FnWlc1MGNubEpibk4wY25WamRHbHZiaTVqYkdGemMweHBjM1F1Y21WdGIzWmxLQ2RvYVdSa1pXNG5LVHRjYmlBZ0lDQmxiblJ5ZVVsdWMzUnlkV04wYVc5dUxtTnNZWE56VEdsemRDNWhaR1FvSjNacGMybGliR1VuS1R0Y2JseHVJQ0FnSUdOdmJuTjBJR04xY25KbGJuUlRkR1Z3SUQwZ1pXNTBjbmtnWVhNZ1NGUk5URVJwZGtWc1pXMWxiblE3WEc0Z0lDQWdZMjl1YzNRZ2MzUmxjRVJsYkdGNUlEMGdkR2hwY3k1ZmMzUmxjSE5iZEdocGN5NWZZM1Z5Y21WdWRGTjBaWEJkTG05d2RHbHZibk0vTG1SbGJHRjVJRDljYmlBZ0lDQWdJSFJvYVhNdVgzTjBaWEJ6VzNSb2FYTXVYMk4xY25KbGJuUlRkR1Z3WFM1dmNIUnBiMjV6UHk1a1pXeGhlU0VnT2lBeU1EQXdPMXh1WEc0Z0lDQWdZWGRoYVhRZ2RHaHBjeTVmYzNSbGNITmJkR2hwY3k1ZlkzVnljbVZ1ZEZOMFpYQmRMbVoxYm1Nb0tUdGNiaUFnSUNCMGFHbHpMbDl6WTNKdmJHeFVieWgwYUdsekxsOXliMjkwTENCamRYSnlaVzUwVTNSbGNDNXZabVp6WlhSVWIzQWdMU0IwYUdsekxsOXRZV2x1U0dWaFpHVnlMbTltWm5ObGRFaGxhV2RvZENrN1hHNGdJQ0FnWVhkaGFYUWdkR2hwY3k1ZlkyOTFiblJrYjNkdUtHVnVkSEo1SUdGeklFaFVUVXhGYkdWdFpXNTBMQ0JsYm5SeWVVbHVaR2xqWVhSdmNpQmhjeUJJVkUxTVJXeGxiV1Z1ZEN3Z2MzUmxjRVJsYkdGNUtUdGNiaUFnSUNCaGQyRnBkQ0JrWld4aGVTaHpkR1Z3UkdWc1lYa3BPMXh1WEc0Z0lDQWdZMjl1YzNRZ2JtVjNSVzUwY25sSmJtUnBZMkYwYjNJZ1BTQjFhUzVwWTI5dVJrRW9KMk5vWldOckp5azdYRzRnSUNBZ1pXNTBjbmxKYm1ScFkyRjBiM0l1Y21Wd2JHRmpaVmRwZEdnb2JtVjNSVzUwY25sSmJtUnBZMkYwYjNJcE8xeHVJQ0FnSUc1bGQwVnVkSEo1U1c1a2FXTmhkRzl5TG1Oc1lYTnpUbUZ0WlNBOUlDZG5jbTlyTFdsamIyNGdabUZ5SUdaaExXTm9aV05ySnp0Y2JseHVJQ0FnSUhSb2FYTXVYM0J5YjJkeVpYTnpMblpoYkhWbEt5czdYRzRnSUNBZ2RHaHBjeTVmY0hKdlozSmxjM05UZEdWd2N5NXBibTVsY2xSbGVIUWdQU0JnVTNSbGNEb2dKSHQwYUdsekxsOXdjbTluY21WemN5NTJZV3gxWlgwZ2IyWWdKSHQwYUdsekxuTjBaWEJPZFcxaVpYSjlZRHRjYmx4dUlDQWdJSFJvYVhNdVgyTjFjbkpsYm5SVGRHVndLeXM3WEc0Z0lDQWdkR2hwY3k1ZmFYTlRkR1Z3VUhKdlkyVnpjMlZrSUQwZ1ptRnNjMlU3WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTVmWTNWeWNtVnVkRk4wWlhBZ1BUMDlJSFJvYVhNdWMzUmxjRTUxYldKbGNpa2dlMXh1SUNBZ0lDQWdkR2hwY3k1ZmFYTkJkWFJ2YldGMGFXTWdQeUIwYUdsekxsOXpkRzl3VTNSaGNuUkNkRzR1Y21Wd2JHRmpaVmRwZEdnb2RHaHBjeTVmY21WemRHRnlkRUowYmlrZ09seHVJQ0FnSUNBZ0lDQjBhR2x6TGw5dVpYaDBVM1JsY0VKMGJpNXlaWEJzWVdObFYybDBhQ2gwYUdsekxsOXlaWE4wWVhKMFFuUnVLVHRjYmlBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9JWFJvYVhNdVgybHpRWFYwYjIxaGRHbGpLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQnVaWGgwVTNSbGNFVnVkSEo1U1c1a2FXTmhkRzl5SUQwZ2RHaHBjeTVmWVdOMGFYWnBkSGt1WjJWMFJXeGxiV1Z1ZEhOQ2VVTnNZWE56VG1GdFpTZ25aM0p2YXkxcFkyOXVKeWxiZEdocGN5NWZZM1Z5Y21WdWRGTjBaWEJkTzF4dUlDQWdJQ0FnWTI5dWMzUWdjM1JoY25ST1pYaDBVM1JsY0VsamIyNGdQU0IxYVM1cFkyOXVSa0VvSjNCc1lYa25MQ0FvS1NBOVBpQjBhR2x6TGw5dVpYaDBVM1JsY0NncExDQW5UbVY0ZENCemRHVndKeWs3WEc0Z0lDQWdJQ0J6ZEdGeWRFNWxlSFJUZEdWd1NXTnZiaTVqYkdGemMwNWhiV1VnUFNBblozSnZheTFwWTI5dUlHWmhjeUJtWVMxd2JHRjVKenRjYmlBZ0lDQWdJRzVsZUhSVGRHVndSVzUwY25sSmJtUnBZMkYwYjNJdWNtVndiR0ZqWlZkcGRHZ29jM1JoY25ST1pYaDBVM1JsY0VsamIyNHBPMXh1SUNBZ0lDQWdkR2hwY3k1ZmJtVjRkRk4wWlhCQ2RHNHVZMnhoYzNOTWFYTjBMbkpsYlc5MlpTZ25aR2x6WVdKc1pXUW5LVHRjYmlBZ0lDQWdJQ2gwYUdsekxsOXVaWGgwVTNSbGNFSjBiaTVtYVhKemRFTm9hV3hrSUdGeklFaFVUVXhGYkdWdFpXNTBLUzVqYkdGemMweHBjM1F1Y21WdGIzWmxLQ2RtWVMxa2FYTmhZbXhsWkNjcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHFLaUJUZEdGeWRITWdkR2hsSUdSbGJXOGdjMk55YVhCMElHRmpkR2x2Ym5NZ0tpOWNiaUFnY0hKcGRtRjBaU0JoYzNsdVl5QmZjM1JoY25SVFkzSnBjSFFvS1RvZ1VISnZiV2x6WlR4MmIybGtQaUI3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SUhSb2FYTXVYMk4xY25KbGJuUlRkR1Z3T3lCcElEd2dkR2hwY3k1emRHVndUblZ0WW1WeU95QnBLeXNwSUh0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6TGw5cGMxTjBiM0J3WldRZ2ZId2dkR2hwY3k1ZmFYTkRZVzVqWld4c1pXUXBYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVYRzRnSUNBZ0lDQmhkMkZwZENCMGFHbHpMbDl1WlhoMFUzUmxjQ2dwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCVFkzSnZiR3h6SUhSdklIUm9aU0JqZFhKeVpXNTBJSE4wWlhCY2JpQWdJQ29nUUhCaGNtRnRJR1ZzWlcxbGJuUWdMU0JEZFhKeVpXNTBJSE4wWlhBZ1pXeGxiV1Z1ZENCcGJpQnliMjkwWEc0Z0lDQXFJRUJ3WVhKaGJTQjVJQzBnZVNCamIyOXlaR2x1WVhSbElHOW1JSFJvWlNCbGJHVnRaVzUwWEc0Z0lDQXFMMXh1SUNCd2NtbDJZWFJsSUY5elkzSnZiR3hVYnlobGJHVnRaVzUwT2lCSVZFMU1SR2wyUld4bGJXVnVkQ3dnZVRvZ2JuVnRZbVZ5S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdaV3hsYldWdWRDNW1iMk4xY3lncE8xeHVJQ0FnSUdWc1pXMWxiblF1YzJOeWIyeHNWRzl3SUQwZ2VUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJCWkdSeklHRnVJR2x1ZEdWeVlXTjBhWFpsSUdSbGJHRjVJR2x1WkdsallYUnZjbHh1SUNBZ0tpQkFjR0Z5WVcwZ1pXeGxiV1Z1ZENBdElFTjFjbkpsYm5RZ2MzUmxjQ0JsYkdWdFpXNTBYRzRnSUNBcUlFQndZWEpoYlNCcGJtUnBZMkYwYjNJZ0xTQkRkWEp5Wlc1MElITjBaWEFnYVc1a2FXTmhkRzl5WEc0Z0lDQXFJRUJ3WVhKaGJTQjBhVzFsSUMwZ1NXNWthV05oZEc5eUlHRnVhVzFoZEdsdmJpQjBhVzFsWEc0Z0lDQXFMMXh1SUNCd2NtbDJZWFJsSUdGemVXNWpJRjlqYjNWdWRHUnZkMjRvWld4bGJXVnVkRG9nU0ZSTlRFVnNaVzFsYm5Rc0lHbHVaR2xqWVhSdmNqb2dTRlJOVEVWc1pXMWxiblFzSUhScGJXVTZJRzUxYldKbGNpazZJRkJ5YjIxcGMyVThkbTlwWkQ0Z2UxeHVJQ0FnSUdOdmJuTjBJR052ZFc1MFpHOTNia1JwZGpvZ1NGUk5URVJwZGtWc1pXMWxiblFnUFNCMWFTNWthWFlvVzEwc0lDZGtaVzF2TFhOamNtbHdkQzFqYjNWdWRHUnZkMjRuS1R0Y2JseHVJQ0FnSUdsdVpHbGpZWFJ2Y2k1amJHRnpjMHhwYzNRdVlXUmtLQ2RvYVdSa1pXNG5LVHRjYmx4dUlDQWdJR3hsZENCamIzVnVkR1J2ZDI0Z1BTQjBhVzFsSUM4Z01UQXdNRHRjYmlBZ0lDQmpiMjV6ZENCemRtY2dQU0IwYUdsekxsOWpjbVZoZEdWVFZrZEpibVJwWTJGMGIzSW9ZMjkxYm5Sa2IzZHVLVHRjYmx4dUlDQWdJR052ZFc1MFpHOTNia1JwZGk1aGNIQmxibVFvYzNabktUdGNiaUFnSUNCbGJHVnRaVzUwTG5CeVpYQmxibVFvWTI5MWJuUmtiM2R1UkdsMktUdGNibHh1SUNBZ0lHTnZibk4wSUdsdWRHVnlkbUZzSUQwZ2MyVjBTVzUwWlhKMllXd29LQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOTFiblJrYjNkdUxTMDdYRzRnSUNBZ0lDQnBaaUFvWTI5MWJuUmtiM2R1SUQwOVBTQXdLU0I3WEc0Z0lDQWdJQ0FnSUdOc1pXRnlTVzUwWlhKMllXd29hVzUwWlhKMllXd3BPMXh1SUNBZ0lDQWdJQ0JqYjNWdWRHUnZkMjVFYVhZdWNtVnRiM1psS0NrN1hHNWNiaUFnSUNBZ0lDQWdhVzVrYVdOaGRHOXlMbU5zWVhOelRHbHpkQzV5WlcxdmRtVW9KMmhwWkdSbGJpY3BPMXh1SUNBZ0lDQWdJQ0JwYm1ScFkyRjBiM0l1WTJ4aGMzTk1hWE4wTG1Ga1pDZ25kbWx6YVdKc1pTY3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMHNJREV3TURBcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRU55WldGMFpYTWdVMVpISUhkcGRHZ2dZMjkxYm5Sa2IzZHVJR05wY21Oc1pWeHVJQ0FnS2lCQWNHRnlZVzBnWTI5MWJuUmtiM2R1SUMwZ1kyOTFiblJrYjNkdUlIUnBiV1ZjYmlBZ0lDb2dRSEpsZEhWeWJuTWdVMVpISUdOdmRXNTBaRzkzYmlCcGJtUnBZMkYwYjNKY2JpQWdJQ292WEc0Z0lIQnlhWFpoZEdVZ1gyTnlaV0YwWlZOV1IwbHVaR2xqWVhSdmNpaGpiM1Z1ZEdSdmQyNDZJRzUxYldKbGNpazZJRk5XUjFOV1IwVnNaVzFsYm5RZ2UxeHVJQ0FnSUdOdmJuTjBJSE4yWnlBOUlHUnZZM1Z0Wlc1MExtTnlaV0YwWlVWc1pXMWxiblJPVXlnbmFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jbkxDQW5jM1puSnlrN1hHNGdJQ0FnWTI5dWMzUWdZMmx5WTJ4bElEMGdaRzlqZFcxbGJuUXVZM0psWVhSbFJXeGxiV1Z1ZEU1VEtDZG9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5Y3NJQ2RqYVhKamJHVW5LVHRjYmlBZ0lDQmphWEpqYkdVdWMyVjBRWFIwY21saWRYUmxUbE1vYm5Wc2JDd2dKMk40Snl3Z0p6Y25LVHRjYmlBZ0lDQmphWEpqYkdVdWMyVjBRWFIwY21saWRYUmxUbE1vYm5Wc2JDd2dKMk41Snl3Z0p6Y25LVHRjYmlBZ0lDQmphWEpqYkdVdWMyVjBRWFIwY21saWRYUmxUbE1vYm5Wc2JDd2dKM0luTENBbk5pY3BPMXh1SUNBZ0lHTnBjbU5zWlM1elpYUkJkSFJ5YVdKMWRHVk9VeWh1ZFd4c0xDQW5jM1I1YkdVbkxDQmdZVzVwYldGMGFXOXVPaUJqYjNWdWRHUnZkMjRnSkh0amIzVnVkR1J2ZDI1OWN5QnNhVzVsWVhJZ2FXNW1hVzVwZEdVZ1ptOXlkMkZ5WkhOZ0tUdGNiaUFnSUNCemRtY3VZWEJ3Wlc1a0tHTnBjbU5zWlNrN1hHNWNiaUFnSUNCeVpYUjFjbTRnYzNabk8xeHVJQ0I5WEc1Y2JpQWdMeW9xSUVOb1lXNW5aWE1nZEdobElITjBZWFJsSUc5bUlIUm9aU0JrWlcxdklITmpjbWx3ZENBb2MzUnZjQzl3YkdGNUtTQXFMMXh1SUNCd2NtbDJZWFJsSUY5amFHRnVaMlZUZEc5d1UzUmhkR1VvS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdZMjl1YzNRZ2FXTnZiaUE5SUhSb2FYTXVYM04wYjNCVGRHRnlkRUowYmk1blpYUkZiR1Z0Wlc1MGMwSjVRMnhoYzNOT1lXMWxLQ2RuY205ckxXbGpiMjRuS1R0Y2JpQWdJQ0JwWTI5dVd6QmRMbU5zWVhOelRtRnRaU0E5SUNkbmNtOXJMV2xqYjI0Z1ptRnpJR1poTFhCc1lYa25PMXh1SUNBZ0lIUm9hWE11WDJselUzUnZjSEJsWkNBOUlDRjBhR2x6TGw5cGMxTjBiM0J3WldRN1hHNWNiaUFnSUNCcFppQW9JWFJvYVhNdVgybHpVM1J2Y0hCbFpDa2dlMXh1SUNBZ0lDQWdhV052Ymxzd1hTNWpiR0Z6YzA1aGJXVWdQU0FuWjNKdmF5MXBZMjl1SUdaaGJDQm1ZUzF3WVhWelpTYzdYRzRnSUNBZ0lDQnBaaUFvSVhSb2FYTXVYMmx6VTNSbGNGQnliMk5sYzNObFpDbGNiaUFnSUNBZ0lDQWdkR2hwY3k1ZmMzUmhjblJUWTNKcGNIUW9LVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0F2S2lvZ1VtVnpkR0Z5ZEhNZ2RHaGxJSE5qY21sd2RDQXFMMXh1SUNCd2NtbDJZWFJsSUY5eVpYTjBZWEowVTJOeWFYQjBLQ2s2SUhadmFXUWdlMXh1SUNBZ0lHZHliMnN1YzJobGJHd3VaRzlqYTAxaGJtRm5aWEl1WTJ4dmMyVW9kR2hwY3k1ZmJtOWtaU0VwTzF4dUlDQWdJR2R5YjJzdWMyaGxiR3d1WTJ4dmMyVkJiR3dvS1R0Y2JpQWdJQ0IwYUdsekxsOWpiR1ZoY2xKdmIzUW9LVHRjYmlBZ0lDQjBhR2x6TGw5elpYUkpibWwwVUdGeVlXMXpLQ2s3WEc0Z0lDQWdkR2hwY3k1emRHRnlkQ2dwTzF4dUlDQjlYRzVjYmlBZ0x5b3FJRU5zWldGeWN5QjBhR1VnY205dmRDQmxiR1Z0Wlc1MElDb3ZYRzRnSUhCeWFYWmhkR1VnWDJOc1pXRnlVbTl2ZENncE9pQjJiMmxrSUh0Y2JpQWdJQ0IwYUdsekxsOXliMjkwSUQwZ2RXa3VaR2wyS0Z0ZExDQjdhV1E2SUNka1pXMXZMWE5qY21sd2RDY3NJR05zWVhOelpYTTZJQ2QwZFhSdmNtbGhiSE10Y205dmRDQjBkWFJ2Y21saGJITXRkSEpoWTJzZ1pHVnRieTFoY0hBdGMyTnlhWEIwSjMwcE8xeHVYRzRnSUNBZ2RHaHBjeTVmYldGcGJraGxZV1JsY2lBOUlIVnBMbkJoYm1Wc0tGdGRMQ0FuZEhWMGIzSnBZV3h6TFcxaGFXNHRhR1ZoWkdWeUp5azdYRzRnSUNBZ2RHaHBjeTVmYUdWaFpHVnlJRDBnZFdrdWFESW9KeWNwTzF4dUlDQWdJSFJvYVhNdVgyaGxZV1JsY2tScGRpQTlJSFZwTG1ScGRrZ29XMTBzSUNkMGRYUnZjbWxoYkhNdGNtOXZkQzFvWldGa1pYSW5LVHRjYmx4dUlDQWdJSFJvYVhNdVgyRmpkR2wyYVhSNUlEMGdkV2t1Y0dGdVpXd29XMTBzSUNkMGRYUnZjbWxoYkhNdGNtOXZkQzFrWlhOamNtbHdkR2x2YmljcE8xeHVYRzRnSUNBZ2RHaHBjeTVmY0hKdlozSmxjM05FYVhZZ1BTQjFhUzVrYVhaV0tGdGRMQ0FuZEhWMGIzSnBZV3h6TFhKdmIzUXRjSEp2WjNKbGMzTW5LVHRjYmlBZ0lDQjBhR2x6TGw5d2NtOW5jbVZ6Y3lBOUlIVnBMbVZzWlcxbGJuUW9KM0J5YjJkeVpYTnpKeWs3WEc0Z0lDQWdkR2hwY3k1ZmNISnZaM0psYzNOVGRHVndjeUE5SUhWcExtUnBkbFJsZUhRb0p5Y3BPMXh1WEc0Z0lDQWdkR2hwY3k1ZmNISnZaM0psYzNNdWJXRjRJRDBnTUR0Y2JpQWdJQ0IwYUdsekxsOXdjbTluY21WemN5NTJZV3gxWlNBOUlERTdYRzRnSUgxY2JseHVJQ0F2S2lvZ1UyVjBjeUJwYm1sMGFXRnNJSEJoY21GdFpYUmxjbk1nS2k5Y2JpQWdjSEpwZG1GMFpTQmZjMlYwU1c1cGRGQmhjbUZ0Y3lncE9pQjJiMmxrSUh0Y2JpQWdJQ0IwYUdsekxsOWpkWEp5Wlc1MFUzUmxjQ0E5SURBN1hHNGdJQ0FnZEdocGN5NWZhWE5UZEc5d2NHVmtJRDBnWm1Gc2MyVTdYRzRnSUNBZ2RHaHBjeTVmYVhORFlXNWpaV3hzWldRZ1BTQm1ZV3h6WlR0Y2JseHVJQ0FnSUdOdmJuTjBJR2xqYjI0Z1BTQjBhR2x6TGw5emRHOXdVM1JoY25SQ2RHNHVaMlYwUld4bGJXVnVkSE5DZVVOc1lYTnpUbUZ0WlNnblozSnZheTFwWTI5dUp5azdYRzRnSUNBZ2FXTnZibHN3WFM1amJHRnpjMDVoYldVZ1BTQW5aM0p2YXkxcFkyOXVJR1poYkNCbVlTMXdZWFZ6WlNjN1hHNGdJQ0FnZEdocGN5NWZibVY0ZEZOMFpYQkNkRzR1WTJ4aGMzTk1hWE4wTG5KbGJXOTJaU2duWkdsellXSnNaV1FuS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJEYkc5elpYTWdaR1Z0YnlCelkzSnBjSFFnWkc5amF5QXFMMXh1SUNCd2NtbDJZWFJsSUY5amJHOXpaVVJ2WTJzb0tUb2dkbTlwWkNCN1hHNGdJQ0FnWjNKdmF5NXphR1ZzYkM1a2IyTnJUV0Z1WVdkbGNpNWpiRzl6WlNoMGFHbHpMbDl1YjJSbElTazdYRzRnSUNBZ2RHaHBjeTVqWVc1alpXeFRZM0pwY0hRb0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2lCRFlXNWpaV3h6SUhSb1pTQnpZM0pwY0hRZ0tpOWNiaUFnWTJGdVkyVnNVMk55YVhCMEtDazZJSFp2YVdRZ2UxeHVJQ0FnSUhSb2FYTXVYMmx6UTJGdVkyVnNiR1ZrSUQwZ2RISjFaVHRjYmlBZ0lDQkVaVzF2VTJOeWFYQjBMbU4xY25KbGJuUlBZbXBsWTNRZ1BTQnVkV3hzTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFRmtaSE1nWVNCdVpYY2djM1JsY0NCMGJ5QnpZM0pwY0hSY2JpQWdJQ29nUUhCaGNtRnRJRzVoYldVZ0xTQlRkR1Z3SUc1aGJXVmNiaUFnSUNvZ1FIQmhjbUZ0SUdaMWJtTWdMU0JUZEdWd0lHWjFibU4wYVc5dVhHNGdJQ0FxSUVCd1lYSmhiU0J2Y0hScGIyNXpJQzBnVTNSbGNDQnZjSFJwYjI1eklDaGtaWE5qY21sd2RHbHZiaUJoYm1RZ1pHVnNZWGtnWVdaMFpYSWdjM1JsY0NCbGJtUnpLVnh1SUNBZ0tpQkFjbVYwZFhKdWN5QlNaWFIxY201eklIUm9aU0JqZFhKeVpXNTBJR1JsYlc4Z2MyTnlhWEIwSUc5aWFtVmpkRnh1SUNBZ0tpOWNiaUFnYzNSbGNDaHVZVzFsT2lCemRISnBibWNzSUdaMWJtTTZJQ2dwSUQwK0lGQnliMjFwYzJVOGRtOXBaRDRzSUc5d2RHbHZibk0vT2lCN1pHVnpZM0pwY0hScGIyNC9PaUJ6ZEhKcGJtY3NJR1JsYkdGNVB6b2diblZ0WW1WeWZTazZJSFJvYVhNZ2UxeHVJQ0FnSUhSb2FYTXVYM04wWlhCelczUm9hWE11YzNSbGNITXViR1Z1WjNSb1hTQTlJSHRjYmlBZ0lDQWdJRzVoYldVNklHNWhiV1VzWEc0Z0lDQWdJQ0JtZFc1ak9pQm1kVzVqTEZ4dUlDQWdJQ0FnYjNCMGFXOXVjem9nYjNCMGFXOXVjeXhjYmlBZ0lDQjlPMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpPMXh1SUNCOVhHNWNiaUFnTHlvcUlGTjBZWEowY3lCMGFHVWdaR1Z0YnlCelkzSnBjSFFnS2k5Y2JpQWdZWE41Ym1NZ2MzUmhjblFvS1RvZ1VISnZiV2x6WlR4MmIybGtQaUI3WEc0Z0lDQWdkR2hwY3k1ZmFXNXBkRkp2YjNRb0tUdGNiaUFnSUNCbmNtOXJMbk5vWld4c0xtNWxkMVpwWlhjb2RHaHBjeTV1WVcxbEtUdGNibHh1SUNBZ0lHbG1JQ2gwYUdsekxsOXBjMEYxZEc5dFlYUnBZeWtnZTF4dUlDQWdJQ0FnZEdocGN5NWZjM1JoY25SVFkzSnBjSFFvS1R0Y2JpQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NWZZWFYwYjFOMFlYSjBSbWx5YzNSVGRHVndLVnh1SUNBZ0lDQWdZWGRoYVhRZ2RHaHBjeTVmYm1WNGRGTjBaWEFvS1R0Y2JpQWdmVnh1ZlZ4dUlsMTkiLCIvLyBSdW50aW1lIHN5c3RlbSBmb3IgZXhwb3J0ZWQgQy9DKystZnVuY3Rpb25zIGNhbGwuXG4vLyBJdCB3YXMgcHJldmlvdXNlbHkgZGV2ZWxvcGVkIGFuZCBkb2VzIE5PVCBwcm92aWRlIGNhbGwgd2FzbS1mdW5jdGlvbnMgaW4gV2ViV29ya2Vycy5cblxuLy8gdHlwZS10by1oZWFwIGNvcnJlc3BvbmRlbmNlXG5jb25zdCBoZWFwTWFwID0ge1wiaTMyXCI6IFwiSEVBUDMyXCIsIC8vIEludDMyQXJyYXlcbiAgICAgICAgICAgICAgICAgXCJmMzJcIjogXCJIRUFQRjMyXCIgLy8gRmxvYXQzMkFycmF5XG4gICAgICAgICAgICAgICAgfTtcblxuLy8gdHlwZSBzaWduYXR1cmUgdG8gdHlwZWQgYXJyYXkgLGFwcFxuY29uc3QgdHlwZU1hcCA9IHtcImkzMlwiOiBJbnQzMkFycmF5LCAvLyBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgIFwiZjMyXCI6IEZsb2F0MzJBcnJheSAvLyBGbG9hdDMyQXJyYXlcbiAgICAgICAgICAgICAgICB9OyBcbiBcbi8vIHR5cGUtdG8tc2hpZnQgbWFwXG5jb25zdCBzaGlmdE1hcCA9IHtcImkzMlwiOiAyLCAvLyBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgICBcImYzMlwiOiAyIC8vIEZsb2F0MzJBcnJheVxuICAgICAgICAgICAgICAgICB9O1xuXG4vLyB0eXBlLXRvLWNvbHVtbl9jcmVhdG9yIG1hcFxuY29uc3QgdHlwZVRvQ29sdW1uQ3JlYXRvck1hcCA9IHtcImkzMlwiOiBERy5Db2x1bW4uZnJvbUludDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZjMyXCI6IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5fTtcbiBcblxuLy8gQ0xBU1NFUyBUSEFUIEFSRSBVU0VEIEJZIENQUC1XUkFQUEVSXG5cbi8vIHNpbXBsZSBhcmd1bWVudDogYSBudW1iZXIgXG5jbGFzcyBBcmd7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7ICAgICAgICBcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZQYXJhbXMoYXJyT2ZQYXJhbXMpIHtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlR5cGVzKGFyck9mVHlwZXMpIHtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTsgICAgICAgIFxuICAgIH1cblxuICAgIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSkge31cblxuICAgIGlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCl7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBmcmVlQnVmZmVyKG1vZHVsZSkge31cbn1cblxuLy8gY29sdW1uIGFyZ3VtZW50XG5jbGFzcyBBcmdDb2x1bW4gZXh0ZW5kcyBBcmcge1xuXG4gICAgY29uc3RydWN0b3IoZGF0YSwgdGFyZ2V0VHlwZSwgdG9VcGRhdGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcihkYXRhKTtcbiAgICAgICAgdGhpcy50eXBlID0gdGFyZ2V0VHlwZTtcbiAgICAgICAgdGhpcy50b1VwZGF0ZSA9IHRvVXBkYXRlO1xuICAgICAgICB0aGlzLmJ1ZiA9IDA7ICAgIFxuICAgICAgICB0aGlzLm51bU9mUm93cyA9IGRhdGEubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlBhcmFtcyhhcnJPZlBhcmFtcykge1xuICAgICAgICBhcnJPZlBhcmFtcy5wdXNoKHRoaXMuYnVmKTtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLm51bU9mUm93cyk7XG4gICAgfVxuXG4gICAgY29tcGxlbWVudEFyck9mVHlwZXMoYXJyT2ZUeXBlcykge1xuICAgICAgICBhcnJPZlR5cGVzLnB1c2goJ251bWJlcicpO1xuICAgICAgICBhcnJPZlR5cGVzLnB1c2goJ251bWJlcicpOyAgICAgICAgXG4gICAgfVxuXG4gICAgYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXIobW9kdWxlKSB7XG4gICAgICAgIHRoaXMuYnVmID0gbW9kdWxlLl9tYWxsb2ModGhpcy5udW1PZlJvd3MgKiB0eXBlTWFwW3RoaXMudHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgIH1cblxuICAgIGlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCl7XG4gICAgICAgIHJldHVybiAodGhpcy5idWYgIT0gMCk7XG4gICAgfVxuXG4gICAgcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTsgICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBhcnJheSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgY29sID0gdGhpcy5kYXRhO1xuXG4gICAgICAgICAgICBpZigoKGNvbC50eXBlID09ICdpbnQnKSAmJiAodHlwZSA9PSAnaTMyJykpIFxuICAgICAgICAgICAgICAgfHwgKChjb2wudHlwZSA9PSAnZG91YmxlJykgJiYgKHR5cGUgPT0gJ2YzMicpKSlcbiAgICAgICAgICAgICAgYXJyYXkgPSBjb2wuZ2V0UmF3RGF0YSgpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpO1xuXG4gICAgICAgICAgICBpZihhcnJheSkgXG4gICAgICAgICAgICAgIGhlYXAuc2V0KGFycmF5LCB0aGlzLmJ1ZiA+PiBzaGlmdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgYnVmZmVyID0gdGhpcy5idWY7XG4gICAgICAgICAgICBsZXQgYnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICAgICAgbGV0IGFycmF5ID0gdGhpcy5kYXRhLmdldFJhd0RhdGEoKTtcblxuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRoaXMubnVtT2ZSb3dzOyBpKyspXG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBoZWFwW2J1ZmZlciAvIGJ5dGVzICsgaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmcmVlQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgbW9kdWxlLl9mcmVlKHRoaXMuYnVmKTtcbiAgICAgICAgICAgdGhpcy5idWYgPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbi8vIG5ldyBjb2x1bW4gYXJndW1lbnQ6IGEgbmV3IGNvbHVtbiBpcyBjcmVhdGVkXG5jbGFzcyBBcmdOZXdDb2x1bW4gZXh0ZW5kcyBBcmdDb2x1bW4ge1xuICAgIGNvbnN0cnVjdG9yKHRhcmdldFR5cGUsIG51bU9mUm93cykge1xuICAgICAgICBzdXBlcihbXSwgdGFyZ2V0VHlwZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMubnVtT2ZSb3dzID0gbnVtT2ZSb3dzO1xuICAgIH1cblxuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgYnVmID0gdGhpcy5idWY7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBjb2x1bW5DcmVhdG9yID0gdHlwZVRvQ29sdW1uQ3JlYXRvck1hcFt0eXBlXTsgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGFyciA9IG5ldyB0eXBlTWFwW3R5cGVdKHRoaXMubnVtT2ZSb3dzKTsgICAgICAgICAgICBcblxuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICBhcnJbaV0gPSBoZWFwW2J1ZiAvIGFyci5CWVRFU19QRVJfRUxFTUVOVCArIGldO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBjb2x1bW5DcmVhdG9yKCduYW1lJywgYXJyKTtcblxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhcnIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBUaGlzIG1ha2VzIG1pc3Rha2UsIHdoZW4gdGhpcy5udW1PZlJvd3MgPSA1IChUT0RPOiBpbnZlc3RpZ2F0ZSB3aHkpXG4gICAgICAgICAgICAvL3RoaXMuZGF0YSA9IGNvbHVtbkNyZWF0b3IoJ25hbWUnLCBuZXcgdHlwZU1hcFt0eXBlXShoZWFwLmJ1ZmZlciwgdGhpcy5idWYsIHRoaXMubnVtT2ZSb3dzKSk7XG5cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kYXRhLmdldFJhd0RhdGEoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGFuIGFycmF5IG9mIGNvbHVtbnMgYXJndW1lbnRcbmNsYXNzIEFyZ0NvbHVtbnMgZXh0ZW5kcyBBcmcge1xuXG4gICAgY29uc3RydWN0b3IoZGF0YSwgdGFyZ2V0VHlwZSwgdG9VcGRhdGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcihkYXRhKTtcbiAgICAgICAgdGhpcy50eXBlID0gdGFyZ2V0VHlwZTtcbiAgICAgICAgdGhpcy50b1VwZGF0ZSA9IHRvVXBkYXRlO1xuICAgICAgICB0aGlzLmJ1ZiA9IDA7ICAgIFxuICAgICAgICB0aGlzLm51bU9mQ29sdW1ucyA9IGRhdGEubGVuZ3RoO1xuICAgICAgICB0aGlzLm51bU9mUm93cyA9IGRhdGFbMF0ubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlBhcmFtcyhhcnJPZlBhcmFtcykge1xuICAgICAgICBhcnJPZlBhcmFtcy5wdXNoKHRoaXMuYnVmKTtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLm51bU9mUm93cyk7XG4gICAgICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5udW1PZkNvbHVtbnMpO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlR5cGVzKGFyck9mVHlwZXMpIHtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTsgICAgICAgIFxuICAgIH1cblxuICAgIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICB0aGlzLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKHRoaXMubnVtT2ZSb3dzICogdGhpcy5udW1PZkNvbHVtbnMgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0eXBlTWFwW3RoaXMudHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgIH1cblxuICAgIGlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCl7XG4gICAgICAgIHJldHVybiAodGhpcy5idWYgIT0gMCk7XG4gICAgfVxuXG4gICAgcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgIGxldCBudW1PZkJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcHV0IGNvbHVtbnMgZGF0YSB0byBidWZmZXJcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLm51bU9mQ29sdW1uczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgY29sID0gdGhpcy5kYXRhW2ldO1xuXG4gICAgICAgICAgICAgICAgaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gJ2kzMicpKSBcbiAgICAgICAgICAgICAgICAgICB8fCAoKGNvbC50eXBlID09ICdkb3VibGUnKSAmJiAodHlwZSA9PSAnZjMyJykpKVxuICAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBjb2wuZ2V0UmF3RGF0YSgpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gbmV3IHR5cGVNYXBbdHlwZV0oY29sLmdldFJhd0RhdGEoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBkYXRhIGFycmF5XG4gICAgICAgICAgICAgICAgaWYoYXJyYXkgIT0gbnVsbCkgXG4gICAgICAgICAgICAgICAgICAgIGhlYXAuc2V0KGFycmF5LCAodGhpcy5idWYgKyBpICogdGhpcy5udW1PZlJvd3MgKiBudW1PZkJ5dGVzKSA+PiBzaGlmdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLnRvVXBkYXRlICYmIHRoaXMuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKSkge1xuICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgIGxldCBudW1PZlJvd3MgPSB0aGlzLm51bU9mUm93cztcbiAgICAgICAgICAgIGxldCBudW1PZkNvbHMgPSB0aGlzLm51bU9mQ29sdW1uczsgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGFyciA9IG5ldyB0eXBlTWFwW3R5cGVdKGhlYXAuYnVmZmVyLCB0aGlzLmJ1ZiwgbnVtT2ZSb3dzICogbnVtT2ZDb2xzKTtcbiAgICAgICBcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHM7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBjb2xEYXRhID0gdGhpcy5kYXRhW2ldLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgbnVtT2ZSb3dzOyBqKyspXG4gICAgICAgICAgICAgICAgICBjb2xEYXRhW2pdID0gYXJyW2ogKyBpICogbnVtT2ZSb3dzXTsgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnJlZUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgIG1vZHVsZS5fZnJlZSh0aGlzLmJ1Zik7XG4gICAgICAgICAgIHRoaXMuYnVmID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG4vLyBhbiBhcnJheSBvZiBuZXcgY29sdW1uczogbmV3IGNvbHVtbnMgYXJlIGNyZWF0ZWRcbmNsYXNzIEFyZ05ld0NvbHVtbnMgZXh0ZW5kcyBBcmdDb2x1bW5zIHtcblxuICAgIGNvbnN0cnVjdG9yKHRhcmdldFR5cGUsIG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKSB7XG4gICAgICAgIHN1cGVyKFtbXV0sIHRhcmdldFR5cGUsIHRydWUpOyAgXG4gICAgICAgIHRoaXMuZGF0YSA9IFtdOyAgICAgICAgXG4gICAgICAgIHRoaXMubnVtT2ZDb2x1bW5zID0gbnVtT2ZDb2x1bW5zO1xuICAgICAgICB0aGlzLm51bU9mUm93cyA9IG51bU9mUm93cztcbiAgICB9XG5cbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlKSB7IH1cblxuICAgIGdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLnRvVXBkYXRlICYmIHRoaXMuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKSkge1xuICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgIGxldCBudW1PZlJvd3MgPSB0aGlzLm51bU9mUm93cztcbiAgICAgICAgICAgIGxldCBudW1PZkNvbHMgPSB0aGlzLm51bU9mQ29sdW1ucztcbiAgICAgICAgICAgIGxldCBudW1PZkJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDsgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGNvbHVtbkNyZWF0b3IgPSB0eXBlVG9Db2x1bW5DcmVhdG9yTWFwW3R5cGVdO1xuICAgICAgICAgICAgbGV0IGJ1ZiA9IHRoaXMuYnVmO1xuXG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gbmV3IHR5cGVNYXBbdHlwZV0obnVtT2ZSb3dzKTtcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBudW1PZlJvd3M7IGorKylcbiAgICAgICAgICAgICAgICAgICAgYXJyW2pdID0gaGVhcFtidWYgLyBudW1PZkJ5dGVzICsgaiArIGkgKiBudW1PZlJvd3NdO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKGNvbHVtbkNyZWF0b3IoKGkgKyAxKS50b1N0cmluZygpLCBhcnIpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY3JlYXRlIGNvbHVtbnM6IGhlcmUsIG1heSBiZSBhIHByb2JsZW0gd2hlbiBudW1PZlJvd3MgPSA1ICAgICAgICAgICAgXG4gICAgICAgICAgICAvKmZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHM7IGkrKylcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEucHVzaChjb2x1bW5DcmVhdG9yKChpICsgMSkudG9TdHJpbmcoKSwgbmV3IHR5cGVNYXBbdHlwZV0oaGVhcC5idWZmZXIsIFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZiArIGkgKiBudW1PZlJvd3MgKiBudW1PZkJ5dGVzLCBudW1PZlJvd3MpKSk7Ki9cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gYSB3cmFwcGVyIGZvciBleHBvcnRlZCBDL0MrKy1mdW5jdGlvbiBjYWxsXG5mdW5jdGlvbiBjcHBGdW5jV3JhcHBlcihtb2R1bGUsIGNGdW5jTmFtZSwgcmV0dXJuVHlwZSwgYXJncylcbntcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgLy8gYWxsb2NhdGUgbWVtb3J5IGZvciBidWZmZXJzXG4gICAgZm9yKGxldCBhcmcgb2YgYXJncykgICAgICAgICBcbiAgICAgICAgYXJnLmFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSk7XG4gICAgXG4gICAgbGV0IGlzRW5vdWdoT2ZNZW1vcnlBbGxvY2F0ZWQgPSB0cnVlO1xuXG4gICAgLy8gY2hlY2sgbWVtb3J5IGFsbG9jYXRpb25cbiAgICBmb3IobGV0IGFyZyBvZiBhcmdzKVxuICAgICAgICBpc0Vub3VnaE9mTWVtb3J5QWxsb2NhdGVkICY9IGFyZy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpOyAgXG4gICAgXG4gICAgLy8gcnVuIGV4cG9ydGVkIGZ1bmN0aW9uIGlmIGVub3VnaCBvZiBtZW1vcnkgaXMgYWxsb2NhdGVkXG4gICAgaWYoaXNFbm91Z2hPZk1lbW9yeUFsbG9jYXRlZCkge1xuXG4gICAgICAgIGxldCBwYXJhbXMgPSBbXTsgLy8gYXJndW1lbnRzIHRoYXQgYXJlIHB1dCB0byB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25cbiAgICAgICAgbGV0IHR5cGVzID0gW107IC8vIHRoZWlyIHR5cGVzXG5cbiAgICAgICAgLy8gcHJlcGFyZSBkYXRhIHRoYXQgaXMgcHV0IHRvIGV4cG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIGZvcihsZXQgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgIGFyZy5jb21wbGVtZW50QXJyT2ZQYXJhbXMocGFyYW1zKTtcbiAgICAgICAgICAgIGFyZy5jb21wbGVtZW50QXJyT2ZUeXBlcyh0eXBlcyk7XG4gICAgICAgICAgICBhcmcucHV0RGF0YVRvQnVmZmVyKG1vZHVsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXh0ZW5kZWRUeXBlT2ZSZXR1cm4gPSAocmV0dXJuVHlwZSA9PSAnbnVtJykgPyAnbnVtYmVyJyA6IG51bGw7ICAgXG4gICAgICAgIFxuICAgICAgICAvLyBjYWxsIGV4cG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIGlmKGV4dGVuZGVkVHlwZU9mUmV0dXJuKVxuICAgICAgICAgICAgcmVzdWx0ID0gbW9kdWxlLmNjYWxsKGNGdW5jTmFtZSwgZXh0ZW5kZWRUeXBlT2ZSZXR1cm4sIHR5cGVzLCBwYXJhbXMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXN1bHQgPSBtb2R1bGUuY2NhbGwoY0Z1bmNOYW1lLCBleHRlbmRlZFR5cGVPZlJldHVybiwgdHlwZXMsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAvLyB1cGRhdGUgYW5kIGdldCBkYXRhIGZyb20gYnVmZmVycyBpZiByZXF1aXJlZFxuICAgICAgICBmb3IobGV0IGFyZyBvZiBhcmdzKVxuICAgICAgICAgICAgYXJnLmdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSk7ICAgICAgIFxuICAgIH1cblxuICAgIC8vIGNsZWFyIGJ1ZmZlcnNcbiAgICBmb3IobGV0IGFyZyBvZiBhcmdzKSAgICAgICAgIFxuICAgICAgICBhcmcuZnJlZUJ1ZmZlcihtb2R1bGUpO1xuXG4gICAgaWYocmVzdWx0ICE9IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHJlc3VsdDsgICAgXG59IC8vIGNwcEZ1bmNXcmFwcGVyXG5cblxuLy8gQSBMQVlFUiBCRVRXRUVOIEpTIEFORCBDUFAtV1JBUFBFUlxuXG4vLyBQYXJhbWV0ZXJzIGNyZWF0b3JcbmxldCBQYXJhbSA9IHtcbiAgICBpbnRDb2x1bW4gKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbihjb2x1bW4sICdpMzInKTtcbiAgICB9LFxuICAgIFxuICAgIG5ld0ludENvbHVtbiAobnVtT2ZSb3dzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnTmV3Q29sdW1uKCdpMzInLCBudW1PZlJvd3MpO1xuICAgIH0sXG5cbiAgICBpbnRDb2x1bW5zKGNvbHVtbnMpe1xuICAgICAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbnMoY29sdW1ucy50b0xpc3QoKSwgJ2kzMicpO1xuICAgIH0sXG5cbiAgICBuZXdJbnRDb2x1bW5zKG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnTmV3Q29sdW1ucygnaTMyJywgbnVtT2ZSb3dzLCBudW1PZkNvbHVtbnMpO1xuICAgIH0sXG5cbiAgICBmbG9hdENvbHVtbiAoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnQ29sdW1uKGNvbHVtbiwgJ2YzMicpO1xuICAgIH0sXG5cbiAgICBuZXdGbG9hdENvbHVtbiAobnVtT2ZSb3dzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnTmV3Q29sdW1uKCdmMzInLCBudW1PZlJvd3MpO1xuICAgIH0sXG5cbiAgICBmbG9hdENvbHVtbnMoY29sdW1ucyl7XG4gICAgICAgIHJldHVybiBuZXcgQXJnQ29sdW1ucyhjb2x1bW5zLnRvTGlzdCgpLCAnZjMyJyk7XG4gICAgfSxcblxuICAgIG5ld0Zsb2F0Q29sdW1ucyhudW1PZlJvd3MsIG51bU9mQ29sdW1ucykge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ05ld0NvbHVtbnMoJ2YzMicsIG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKTtcbiAgICB9LFxuXG4gICAgaW50KG51bWJlcikge1xuICAgICAgICByZXR1cm4gbmV3IEFyZyhudW1iZXIpO1xuICAgIH0sXG5cbiAgICBudW0obnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnKG51bWJlcik7XG4gICAgfVxufTtcblxuLy8gUmV0dXJuIHZhbHVlIGNyZWF0b3JcbmxldCBSZXR1cm4gPSB7XG4gICAgdGFibGVGcm9tQ29sdW1ucyhhcmdDb2x1bW5zKSB7XG4gICAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoYXJnQ29sdW1ucy5kYXRhKTtcbiAgICB9LFxuXG4gICAgbnVtKG51bWJlcikge1xuICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH0sXG5cbiAgICBpbnQobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfSxcblxuICAgIGRvdWJsZShudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9LFxuXG4gICAgY29sdW1uKGFyZ0NvbHVtbikge1xuICAgICAgICByZXR1cm4gYXJnQ29sdW1uLmRhdGE7XG4gICAgfVxufTtcblxuLy8gVGhlIG1haW4gdG9vbCB0aGF0IGNvbWJpbmVzIGFsbCB0b2dldGhlclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGxXYXNtKG1vZHVsZSwgZnVuY05hbWUsIGlucHV0cykge1xuXG4gICAgbGV0IHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICAvLyBnZXQgc3BlY2lmaWNhdGlvbiBvZiBleHBvcnRlZCBDL0MrKy1mdW5jdGlvblxuICAgIGxldCBmdW5jU3BlY2lmaWNhdGlvbiA9IG1vZHVsZVtmdW5jTmFtZV07XG5cbiAgICAvLyBnZXQgYXJndW1uZXRzXG4gICAgbGV0IGFyZ3MgPSBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHM7IFxuXG4gICAgLy8gYXJyYXkgb2YgYXJndW1lbnRzIHRoYXQgZnVydGhlciBhcmUgdXNlZCBieSBjcHAtd3JhcHBlclxuICAgIGxldCBjcHBGdW5jSW5wdXQgPSBbXTtcblxuICAgIC8vIGNvbXBsZXRlIGFuIGlucHV0IGZvciBjcHBcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yKGxldCBrZXkgaW4gYXJncyl7XG4gICAgICAgIGxldCBhcmcgPSBhcmdzW2tleV07IFxuICAgICAgICBcbiAgICAgICAgLy8gc2tpcCBhdXhpbGlyeSBlbGVtZW50XG4gICAgICAgIGlmKGtleSA9PSAnX2NhbGxSZXN1bHQnKSAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBhbiBhcmd1bWVudFxuICAgICAgICBzd2l0Y2goYXJnLnR5cGUpe1xuICAgICAgICAgICAgY2FzZSAnZmxvYXRDb2x1bW5zJzpcbiAgICAgICAgICAgIGNhc2UgJ2ludCc6XG4gICAgICAgICAgICBjYXNlICdudW0nOlxuICAgICAgICAgICAgY2FzZSAnZmxvYXRDb2x1bW4nOlxuICAgICAgICAgICAgY2FzZSAnaW50Q29sdW1uJzpcbiAgICAgICAgICAgIGNhc2UgJ2ludENvbHVtbnMnOlxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKGlucHV0c1tpXSk7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV3RmxvYXRDb2x1bW5zJzpcbiAgICAgICAgICAgIGNhc2UgJ25ld0ludENvbHVtbnMnOlxuICAgICAgICAgICAgICAgIGxldCB2YWwxID0gYXJnc1sgYXJnWydudW1PZlJvd3MnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZSb3dzJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGxldCB2YWwyID0gYXJnc1sgYXJnWydudW1PZkNvbHVtbnMnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZDb2x1bW5zJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKHZhbDEsIHZhbDIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV3RmxvYXRDb2x1bW4nOlxuICAgICAgICAgICAgY2FzZSAnbmV3SW50Q29sdW1uJzpcbiAgICAgICAgICAgICAgICBsZXQgdmFsID0gYXJnc1sgYXJnWydudW1PZlJvd3MnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZSb3dzJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKHZhbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IC8vIHN3aXRjaFxuXG4gICAgICAgIGNwcEZ1bmNJbnB1dC5wdXNoKGFyZ3Nba2V5XS5kYXRhKTtcblxuICAgIH0gLy8gZm9yIGtleSAgICBcblxuICAgIC8vIENBTEwgRVhQT1JURUQgQ1BQLUZVTkNUSU9OXG4gICAgbGV0IGNhbGxSZXN1bHQgPSBjcHBGdW5jV3JhcHBlcihtb2R1bGUsIGZ1bmNOYW1lLCAnbnVtJywgY3BwRnVuY0lucHV0KTtcblxuICAgIGNvbnNvbGUubG9nKCdDKystZnVuY3Rpb24gY2FsbCByZXN1bHQ6ICcgKyBjYWxsUmVzdWx0KTtcblxuICAgIC8vIHN0b3JlIHJlc3VsdCB0aGF0IGlzIHJldHVybmVkIGJ5IGV4cG9ydGVkIGNwcC1mdW5jdGlvblxuICAgIGFyZ3MuX2NhbGxSZXN1bHQgPSBQYXJhbS5udW0oY2FsbFJlc3VsdCk7XG5cbiAgICAvLyBjcmVhdGUgb3V0cHV0XG4gICAgbGV0IG91dHB1dCA9IGZ1bmNTcGVjaWZpY2F0aW9uLm91dHB1dDtcblxuICAgIGxldCBmaW5pc2ggPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuICAgIGNvbnNvbGUubG9nKGBUaW1lIGZvciBDL0MrKy1mdW5jdGlvbiBpcyAke2ZpbmlzaCAtIHN0YXJ0fSBtcy5gKVxuXG4gICAgLy8gaWYgYSBzaW5nbGUgb2JqZWN0IG11c3QgYmUgcmV0dXJuZWRcbiAgICBpZihvdXRwdXRbJ3R5cGUnXSAhPSAnb2JqZWN0cycpXG4gICAgICByZXR1cm4gUmV0dXJuW291dHB1dFsndHlwZSddXShhcmdzW291dHB1dFsnc291cmNlJ11dLmRhdGEpO1xuXG4gICAgbGV0IGFycmF5VG9SZXR1cm4gPSBbXTtcblxuICAgIC8vIHB1c2ggZGF0YSBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnRzXG4gICAgZm9yKGxldCBuYW1lIG9mIG91dHB1dFsnc291cmNlJ10pXG4gICAgICBhcnJheVRvUmV0dXJuLnB1c2goYXJnc1tuYW1lXS5kYXRhLmRhdGEpO1xuXG4gICAgcmV0dXJuIGFycmF5VG9SZXR1cm47XG4gIH0gLy8gY2FsbFdhc20iLCIvLyBVdGlsaXRpZXMgZm9yIGNhbGxpbmcgd2FzbS1mdW5jdGlvbnMgdmlhIHdlYndvcmtlci5cblxuLy8gV2UgdXNlIGFuIGFwcHJvYWNoIHRoYXQgaXMgd2VsbCBkZXNjcmliZWQgaGVyZTpcbi8vIGh0dHBzOi8vYmVjb21pbmdodW1hbi5haS9wYXNzaW5nLWFuZC1yZXR1cm5pbmctd2ViYXNzZW1ibHktYXJyYXktcGFyYW1ldGVycy1hMGY1NzJjNjVkOTdcbi8vIEl0IGhhcyBiZWVuIG1vZGlmaWVkIGZvciB1c2FnZSBpbiBEQVRBR1JPSy5cblxuLy8gQ29uc3RhbnRzIGZvciB3YXNtLWZ1bmN0aW9ucyBpbiB3ZWJ3b3JrZXJzIHJ1bnRpbWUgc3lzdGVtXG5jb25zdCBUWVBFID0gJ3R5cGUnO1xuY29uc3QgTlVNX1RZUEUgPSAnbnVtJztcbmNvbnN0IEZMT0FUX0NPTFVNTl9UWVBFID0gJ2Zsb2F0Q29sdW1uJztcbmNvbnN0IElOVF9DT0xVTU5fVFlQRSA9ICdpbnRDb2x1bW4nO1xuY29uc3QgRkxPQVRfQ09MVU1OU19UWVBFID0gJ2Zsb2F0Q29sdW1ucyc7XG5jb25zdCBORVdfRkxPQVRfQ09MVU1OU19UWVBFID0gJ25ld0Zsb2F0Q29sdW1ucyc7XG5jb25zdCBJTlRfQ09MVU1OU19UWVBFID0gJ2ludENvbHVtbnMnO1xuY29uc3QgTkVXX0lOVF9DT0xVTU5TX1RZUEUgPSAnbmV3SW50Q29sdW1ucyc7XG5jb25zdCBORVdfRkxPQVRfQ09MVU1OX1RZUEUgPSAnbmV3RmxvYXRDb2x1bW4nO1xuY29uc3QgTkVXX0lOVF9DT0xVTU5fVFlQRSA9ICduZXdJbnRDb2x1bW4nO1xuY29uc3QgQ09MVU1OID0gJ2NvbHVtbic7XG5jb25zdCBDQUxMX1JFU1VMVCA9ICdfY2FsbFJlc3VsdCc7XG5jb25zdCBOVU1fT0ZfUk9XUyA9ICdudW1PZlJvd3MnO1xuY29uc3QgTlVNX09GX0NPTFVNTlMgPSAnbnVtT2ZDb2x1bW5zJztcbmNvbnN0IFJFRiA9ICdyZWYnO1xuY29uc3QgVkFMVUUgPSAndmFsdWUnO1xuY29uc3QgVEFCTEVfT0ZfQ09MVU1OUyA9ICd0YWJsZUZyb21Db2x1bW5zJztcbmNvbnN0IE9CSkVDVFMgPSAnb2JqZWN0cyc7XG5jb25zdCBJTlRfVFlQRSA9ICdpbnQnO1xuY29uc3QgRE9VQkxFX1RZUEUgPSAnZG91YmxlJztcbmNvbnN0IE5VTUJFUiA9ICdudW1iZXInO1xuXG4vLyBUeXBlLXRvLWhlYXAgY29ycmVzcG9uZGVuY2UuXG4vLyBJdCBpcyByZXF1aXJlZCBmb3IgSlMtbW9kdWxlIGdlbmVyYXRlZCBieSBFbXNjcmlwdGVuLFxuLy8gYW5kIGl0IGlzIHVzZWQsIHdoZW4gcGFzc2luZyBhcnJheSBkYXRhIHRvL2Zyb20gd2FzbS1mdW5jdGlvbnMuXG4vLyBNb3JlIGluZm8gY2FuIGJlIGZvdW5kIGF0IHRoZSBmb2xsb3dpbmcgbGluazpcbi8vIGh0dHBzOi8vYmVjb21pbmdodW1hbi5haS9wYXNzaW5nLWFuZC1yZXR1cm5pbmctd2ViYXNzZW1ibHktYXJyYXktcGFyYW1ldGVycy1hMGY1NzJjNjVkOTdcbmNvbnN0IGhlYXBNYXAgPSB7XG4gICAgICAgICAgICAgICAgICdpbnRDb2x1bW4nOiBcIkhFQVAzMlwiLFxuICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW4nOiBcIkhFQVBGMzJcIixcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1ucyc6IFwiSEVBUEYzMlwiLFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW5zJzogXCJIRUFQRjMyXCIsXG4gICAgICAgICAgICAgICAgICdpbnRDb2x1bW5zJzogXCJIRUFQMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbnMnOiBcIkhFQVAzMlwiLFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiBcIkhFQVBGMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbic6IFwiSEVBUDMyXCJcbiAgICAgICAgICAgICAgICB9O1xuXG4vLyBUeXBlIHNpZ25hdHVyZSB0byB0eXBlZCBhcnJheSBtYXAuXG4vLyBJdCBpcyB1c2VkLCB3aGVuIG1hbmlwdWxhdGluZyBjb2x1bW4ocykuXG5jb25zdCB0eXBlTWFwID0ge1xuICAgICAgICAgICAgICAgICAnaW50Q29sdW1uJzogSW50MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1uJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW5zJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW5zJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnaW50Q29sdW1ucyc6IEludDMyQXJyYXksICBcbiAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbnMnOiBJbnQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiBGbG9hdDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgfTsgXG5cbi8vIFR5cGUtdG8tc2hpZnQgbWFwLlxuLy8gSXQgaXMgdXNlZCwgd2hlbiBwYXNzaW5nIGFycmF5IHRvL2Zyb20gd2FzbS1mdW5jdGlvbnMuXG4vLyBNb3JlIGluZm8gY2FuIGJlIGZvdW5kIGF0IHRoZSBmb2xsb3dpbmcgbGluazpcbi8vIGh0dHBzOi8vYmVjb21pbmdodW1hbi5haS9wYXNzaW5nLWFuZC1yZXR1cm5pbmctd2ViYXNzZW1ibHktYXJyYXktcGFyYW1ldGVycy1hMGY1NzJjNjVkOTcgXG5jb25zdCBzaGlmdE1hcCA9IHsnaW50Q29sdW1uJzogMiwgXG4gICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW4nOiAyLCBcbiAgICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbnMnOiAyLCAgXG4gICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW5zJzogMiwgXG4gICAgICAgICAgICAgICAgICAnaW50Q29sdW1ucyc6IDIsICBcbiAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogMixcbiAgICAgICAgICAgICAgICAgICduZXdGbG9hdENvbHVtbic6IDIsXG4gICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogMlxuICAgICAgICAgICAgICAgICB9OyAgICAgICAgIFxuXG4vLyBHZXQgaW5wdXQgZm9yIEMrKy1mdW5jdGlvbi5cbi8vIFRoaXMgZnVuY3Rpb24gdGFrZXMgc3BlY2lmaWNhdGlvbiBvZiBhcmd1bWVudHMgKGFyZ3NTcGVjaWZpY2F0aW9uKSAmIGlucHV0IGRhdGEgKGlucHV0VmFscylcbi8vIGFuZCByZXR1cm5zIGlucHV0IHRoYXQgd2lsbCBiZSBmdXJ0aGVyIHVzZWQgaW4gY3BwL3dhc20tZnVuY3Rpb24uXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3BwSW5wdXQoYXJnc1NwZWNpZmljYXRpb24sIGlucHV0VmFscykge1xuICAgIGxldCBjcHBGdW5jSW5wdXQgPSBbXTtcbiAgICBsZXQgcmVmO1xuXG4gICAgLy8gY29tcGxldGUgYW4gaW5wdXQgZm9yIGNwcFxuICAgIGxldCBpID0gMDtcbiAgICBmb3IoY29uc3Qga2V5IGluIGFyZ3NTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NTcGVjaWZpY2F0aW9uW2tleV07IFxuICAgICAgICBjb25zdCB0eXBlID0gYXJnLnR5cGU7XG4gICAgICAgIFxuICAgICAgICAvLyBza2lwIGF1eGlsaXJ5IGVsZW1lbnRcbiAgICAgICAgaWYoa2V5ID09PSBDQUxMX1JFU1VMVCkgICAgICAgICAgICAgXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAvLyBoZXJlLCB3ZSBjb25zaWRlciBlYWNoIHR5cGUgb2YgaW5wdXRcbiAgICAgICAgc3dpdGNoKHR5cGUpIHsgICAgICAgICAgIFxuIFxuICAgICAgICAgICAgLy8gbnVtYmVyc1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IGlucHV0VmFsc1tpXTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtblxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5O1xuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBPSyBpZiB0eXBlIG9mIGNvbHVtbiBhbmQgdGFyZ2V0IHR5cGUgY29pbnNpZGVcbiAgICAgICAgICAgICAgICAvL2FycmF5ID0gaW5wdXRWYWxzW2ldLmdldFJhd0RhdGEoKTtcblxuICAgICAgICAgICAgICAgIGxldCBjb2wgPSBpbnB1dFZhbHNbaV07XG5cbiAgICAgICAgICAgICAgICAvLyBoZXJlLCB3ZSBjaGVjayB0eXBlcyBhbmQgcGVyZm9ybSBhbiBhcHByb3ByaWF0ZSB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICBpZiggKCAoY29sLnR5cGUgPT09IElOVF9UWVBFKSAmJiAodHlwZSA9PT0gSU5UX0NPTFVNTl9UWVBFKSApIFxuICAgICAgICAgICAgICAgICAgIHx8ICggKGNvbC50eXBlID09PSBET1VCTEVfVFlQRSkgJiYgKHR5cGUgPT09IEZMT0FUX0NPTFVNTl9UWVBFKSApIClcbiAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpO1xuXG4gICAgICAgICAgICAgICAgLyppZigoKGNvbC50eXBlID09ICdpbnQnKSAmJiAodHlwZSA9PSBJTlRfQ09MVU1OX1RZUEUpKSBcbiAgICAgICAgICAgICAgICAgICAgIHx8ICgoY29sLnR5cGUgPT0gJ2RvdWJsZScpICYmICh0eXBlID09IEZMT0FUX0NPTFVNTl9UWVBFKSkpXG4gICAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gbmV3IHR5cGVNYXBbdHlwZV0oY29sLmdldFJhd0RhdGEoKSk7Ki9cblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHR5cGVzXG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSB7ICdhcnJheSc6IGFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVtT2ZSb3dzJzogYXJyYXkubGVuZ3RofTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uIFxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IDA7ICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgcmVmID0gYXJnW05VTV9PRl9ST1dTXVtSRUZdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0udHlwZSA9PT0gTlVNX1RZUEUpXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YVthcmdbTlVNX09GX1JPV1NdW1ZBTFVFXV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geydudW1PZlJvd3MnOiB2YWx9O1xuXG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW5zIG9yIGNvbHVtbl9saXN0XG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5cyA9IFtdOyAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgT0sgaWYgdHlwZSBvZiBjb2x1bW5zIGFuZCB0YXJnZXQgdHlwZSBjb2luc2lkZVxuICAgICAgICAgICAgICAgIC8vZm9yKGxldCBjb2wgb2YgaW5wdXRWYWxzW2ldLnRvTGlzdCgpKVxuICAgICAgICAgICAgICAgIC8vICBhcnJheXMucHVzaChjb2wuZ2V0UmF3RGF0YSgpKTtcblxuICAgICAgICAgICAgICAgIC8vIGhlcmUsIHdlIGNoZWNrIHR5cGVzIGFuZCBwZXJmb3JtIGFuIGFwcHJvcHJpYXRlIHRyYW5zZm9ybVxuICAgICAgICAgICAgICAgIGZvcihsZXQgY29sIG9mIGlucHV0VmFsc1tpXS50b0xpc3QoKSlcbiAgICAgICAgICAgICAgICAgIGlmKCAoIChjb2wudHlwZSA9PT0gSU5UX1RZUEUpICYmICh0eXBlID09PSBJTlRfQ09MVU1OX1RZUEUpICkgXG4gICAgICAgICAgICAgICAgICAgIHx8ICggKGNvbC50eXBlID09PSBET1VCTEVfVFlQRSkgJiYgKHR5cGUgPT09IEZMT0FUX0NPTFVNTl9UWVBFKSApIClcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2goY29sLmdldFJhd0RhdGEoKSk7XG4gICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGFycmF5cy5wdXNoKG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvKmZvcihsZXQgY29sIG9mIGlucHV0VmFsc1tpXS50b0xpc3QoKSlcbiAgICAgICAgICAgICAgICAgICAgaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gSU5UX0NPTFVNTl9UWVBFKSkgXG4gICAgICAgICAgICAgICAgICAgICAgfHwgKChjb2wudHlwZSA9PSAnZG91YmxlJykgJiYgKHR5cGUgPT0gRkxPQVRfQ09MVU1OX1RZUEUpKSlcbiAgICAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChjb2wuZ2V0UmF3RGF0YSgpKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgIGFycmF5cy5wdXNoKG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpKTsqL1xuXG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSB7ICdhcnJheXMnOiBhcnJheXMsXG4gICAgICAgICAgICAgICAgICAgICdudW1PZlJvd3MnOiBhcnJheXNbMF0ubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAnbnVtT2ZDb2x1bW5zJzogYXJyYXlzLmxlbmd0aH07XG5cbiAgICAgICAgICAgICAgICBpKys7ICBcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbnMgb3IgbmV3IGNvbHVtbl9saXN0XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGxldCB2YWwxID0gMDtcbiAgICAgICAgICAgICAgICBsZXQgdmFsMiA9IDA7XG5cbiAgICAgICAgICAgICAgICByZWYgPSBhcmdbTlVNX09GX1JPV1NdW1JFRl07XG5cbiAgICAgICAgICAgICAgICBpZiAoYXJnc1NwZWNpZmljYXRpb25bcmVmXS50eXBlID09PSBOVU1fVFlQRSlcbiAgICAgICAgICAgICAgICAgICAgdmFsMSA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbDEgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGFbYXJnW05VTV9PRl9ST1dTXVtWQUxVRV1dO1xuXG4gICAgICAgICAgICAgICAgcmVmID0gYXJnW05VTV9PRl9DT0xVTU5TXVtSRUZdO1xuXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnUmVmOicpO1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2cocmVmKTtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYXJnc1NwZWNpZmljYXRpb25bcmVmXS50eXBlID09PSBOVU1fVFlQRSlcbiAgICAgICAgICAgICAgICAgICAgdmFsMiA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbDIgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGFbYXJnW05VTV9PRl9DT0xVTU5TXVtWQUxVRV1dOyAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geydudW1PZlJvd3MnOiB2YWwxLFxuICAgICAgICAgICAgICAgICAgJ251bU9mQ29sdW1ucyc6IHZhbDJ9O1xuXG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIFxuXG4gICAgICAgICAgICBkZWZhdWx0OiBcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIFRPRE86IHNwZWNpZnkgYmVoYXZpb3VyICAgICAgICAgICBcbiAgICAgICAgICAgIH0gLy8gc3dpdGNoICAgICAgICBcblxuICAgICAgICBjcHBGdW5jSW5wdXQucHVzaChhcmcpO1xuICAgIH0gLy8gZm9yIGtleVxuXG4gICAgLy9jb25zb2xlLmxvZygnY3BwRnVuY0lucHV0OicpO1xuICAgIC8vY29uc29sZS5sb2coY3BwRnVuY0lucHV0KTtcblxuICAgIHJldHVybiBjcHBGdW5jSW5wdXQ7XG59IC8vIGdldENwcElucHV0XG5cbi8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgYnVmZmVycyBmb3IgYXJyYXkgZGF0YVxuZnVuY3Rpb24gYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXIobW9kdWxlLCBpbnB1dHMpIHtcbiAgICBmb3IoY29uc3QgYXJnIG9mIGlucHV0cykgeyBcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuXG4gICAgICAgIHN3aXRjaCh0eXBlKSB7IC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6IFxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbiAmIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGFyZy5kYXRhLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKGFyZy5kYXRhLm51bU9mUm93cyAqIHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW5zICYgbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTogICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6ICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOiAvLyBhbGxvY2F0aW9uIG1lbW9yeSBmb3IgY29sdW1ucyB0aGF0IGFyZSBjcmVhdGVkXG4gICAgICAgICAgICAgICAgYXJnLmRhdGEuYnVmID0gbW9kdWxlLl9tYWxsb2MoYXJnLmRhdGEubnVtT2ZSb3dzICogYXJnLmRhdGEubnVtT2ZDb2x1bW5zIFxuICAgICAgICAgICAgICAgICAgICAqIHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhazsgXG4gICAgICAgIH0gIFxuICAgIH1cbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKCdpbnB1dHMgYWZ0ZXIgbWVtb3J5IGFsbG9jYXRpb246Jyk7XG4gICAgLy9jb25zb2xlLmxvZyhpbnB1dHMpO1xufSAvLyBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlclxuXG4vLyBHZXQgYXJyYXkgb2YgdmFsdWVzIHRoYXQgYXJlIHB1dCB0byB3YXNtLWZ1bmN0aW9uLlxuZnVuY3Rpb24gZ2V0QXJyT2ZXYXNtUGFyYW1zKGlucHV0cykge1xuICAgIGxldCBwYXJhbXMgPSBbXTtcblxuICAgIC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgc3dpdGNoIChhcmcudHlwZSkge1xuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4gJiBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5idWYpOyAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5udW1PZlJvd3MpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5zICYgbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTogXG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEuYnVmKTtcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5udW1PZlJvd3MpO1xuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhLm51bU9mQ29sdW1ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xufSAvLyBnZXRBcnJPZldhc21QYXJhbXNcblxuLy8gR2V0IGFycmF5IG9mIHR5cGVzIHRoYXQgYXJlIHB1dCB0byB3YXNtLWZ1bmN0aW9uLlxuZnVuY3Rpb24gZ2V0QXJyT2ZXYXNtVHlwZXMoaW5wdXRzKSB7XG4gICAgbGV0IHR5cGVzID0gW107XG5cbiAgICBmb3IoY29uc3QgYXJnIG9mIGlucHV0cykge1xuICAgICAgICBzd2l0Y2ggKGFyZy50eXBlKSB7IC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbiAmIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5zICYgbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXM7XG59IC8vIGdldEFyck9mV2FzbVR5cGVzXG5cbi8vIFB1dCBhcnJheSBkYXRhIHRvIGJ1ZmZlclxuZnVuY3Rpb24gcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSwgaW5wdXRzKSB7XG4gICAgbGV0IHNoaWZ0O1xuICAgIGxldCBoZWFwOyAgICBcbiAgICBcbiAgICBmb3IoY29uc3QgYXJnIG9mIGlucHV0cykge1xuICAgICAgICBjb25zdCB0eXBlID0gYXJnLnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7IC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgc2hpZnQgPSBzaGlmdE1hcFt0eXBlXTtcbiAgICAgICAgICAgICAgICBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dOyAgXG4gICAgICAgICAgICAgICAgaGVhcC5zZXQoYXJnLmRhdGEuYXJyYXksIGFyZy5kYXRhLmJ1ZiA+PiBzaGlmdCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICAgICAgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgICAgICBsZXQgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7XG4gICAgICAgICAgICAgICAgbGV0IGJ1ZiA9IGFyZy5kYXRhLmJ1ZjtcbiAgICAgICAgICAgICAgICBsZXQgbnVtT2ZDb2x1bW5zID0gYXJnLmRhdGEubnVtT2ZDb2x1bW5zO1xuICAgICAgICAgICAgICAgIGxldCBudW1PZlJvd3MgPSBhcmcuZGF0YS5udW1PZlJvd3M7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5cyA9IGFyZy5kYXRhLmFycmF5cztcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHVtbnM7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgaGVhcC5zZXQoYXJyYXlzW2ldLCAoYnVmICsgaSAqIG51bU9mUm93cyAqIG51bU9mQnl0ZXMpID4+IHNoaWZ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW4ocylcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufSAvLyBwdXREYXRhVG9CdWZmZXJcblxuLy8gR2V0IGFycmF5IGRhdGEgZnJvbSBidWZmZXIuXG5mdW5jdGlvbiBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUsIGlucHV0cykge1xuXG4gICAgbGV0IGhlYXA7XG4gICAgbGV0IG51bU9mUm93cztcbiAgICBsZXQgbnVtT2ZDb2xzO1xuICAgIGxldCBudW1PZkJ5dGVzOyAgICBcbiAgICBsZXQgYnVmO1xuXG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBudW1iZXJcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1uKHMpXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTogIFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOiAgICAgICAgICBcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtblxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgICAgICBudW1PZlJvd3MgPSBhcmcuZGF0YS5udW1PZlJvd3M7XG4gICAgICAgICAgICAgICAgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7ICAgIFxuICAgICAgICAgICAgICAgIGJ1ZiA9IGFyZy5kYXRhLmJ1ZjtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgdHlwZU1hcFt0eXBlXShudW1PZlJvd3MpO1xuXG4gICAgICAgICAgICAgICAgZm9yKGxldCBqID0gMDsgaiA8IG51bU9mUm93czsgaisrKVxuICAgICAgICAgICAgICAgICAgICBhcnJheVtqXSA9IGhlYXBbYnVmIC8gbnVtT2ZCeXRlcyArIGpdO1xuXG4gICAgICAgICAgICAgICAgYXJnLmFycmF5ID0gYXJyYXk7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6IFxuICAgICAgICAgICAgICAgIGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICAgICAgbnVtT2ZSb3dzID0gYXJnLmRhdGEubnVtT2ZSb3dzO1xuICAgICAgICAgICAgICAgIG51bU9mQ29scyA9IGFyZy5kYXRhLm51bU9mQ29sdW1ucztcbiAgICAgICAgICAgICAgICBudW1PZkJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDsgICAgXG4gICAgICAgICAgICAgICAgYnVmID0gYXJnLmRhdGEuYnVmO1xuICAgICAgICAgICAgICAgIGxldCBhcnJheXMgPSBbXTtcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSBuZXcgdHlwZU1hcFt0eXBlXShudW1PZlJvd3MpO1xuXG4gICAgICAgICAgICAgICAgICAgZm9yKGxldCBqID0gMDsgaiA8IG51bU9mUm93czsgaisrKVxuICAgICAgICAgICAgICAgICAgICAgIGFycltqXSA9IGhlYXBbYnVmIC8gbnVtT2ZCeXRlcyArIGogKyBpICogbnVtT2ZSb3dzXTsgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChhcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFyZy5hcnJheXMgPSBhcnJheXM7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9ICAgICAgICAgICAgXG59IC8vIGdldERhdGFGcm9tQnVmZmVyXG5cbi8vIENsZWFyIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGFycmF5IGRhdGFcbmZ1bmN0aW9uIGNsZWFyTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSwgaW5wdXRzKSB7XG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIFxuICAgICAgICBzd2l0Y2goYXJnLnR5cGUpIHsgLy8gcHJvY2VzcyBlYWNoIHR5cGUgb2YgaW5wdXRcblxuICAgICAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGVhY2ggbm9uLW51bWJlciBjYXNlXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgbW9kdWxlLl9mcmVlKGFyZy5kYXRhLmJ1Zik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrOyBcbiAgICAgICAgfSAgICBcbn0gLy8gY2xlYXJNZW1vcnlGb3JCdWZmZXJcblxuLy8gRXh0cmFjdCBuZXdseSBjcmVhdGVkIGRhdGE6IG5ldyBjb2x1bW4ocykgYXJlIGNyZWF0ZWRcbmZ1bmN0aW9uIGV4dHJhY3ROZXdseUNyZWF0ZWREYXRhKGZ1bmNTcGVjaWZpY2F0aW9uQXJncywgYXJnc0FmdGVyV2FzbUNhbGwpIHtcbiAgICAvLyB0eXBlLXRvLWNvbHVtbl9jcmVhdG9yIG1hcFxuICAgIGNvbnN0IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXAgPSB7J25ld0Zsb2F0Q29sdW1ucyc6IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbnMnOiBERy5Db2x1bW4uZnJvbUludDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiBERy5Db2x1bW4uZnJvbUludDMyQXJyYXl9O1xuXG4gICAgbGV0IGkgPSAwO1xuXG4gICAgZm9yKGNvbnN0IGtleSBpbiBmdW5jU3BlY2lmaWNhdGlvbkFyZ3MpIFxuICAgIHtcbiAgICAgICAgY29uc3QgYXJnID0gZnVuY1NwZWNpZmljYXRpb25BcmdzW2tleV07XG5cbiAgICAgICAgc3dpdGNoKGFyZy50eXBlKXsgLy8gUHJvY2VzcyBlYWNoIHR5cGVcblxuICAgICAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbihzKVxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGxldCBuYW1lO1xuXG4gICAgICAgICAgICAgICAgLy8gc3BlY2lmeSBuYW1lIGZvciBjb2x1bW5cbiAgICAgICAgICAgICAgICBpZihhcmcubmFtZSA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSAoMCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBlbHNlIFxuICAgICAgICAgICAgICAgICAgICBuYW1lcyA9IGFyZy5uYW1lO1xuXG4gICAgICAgICAgICAgICAgYXJnLmNvbHVtbiA9IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXBbYXJnLnR5cGVdKG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3NBZnRlcldhc21DYWxsW2ldLmFycmF5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBsZXQgbGVuZ3RoID0gYXJnc0FmdGVyV2FzbUNhbGxbaV0uYXJyYXlzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgIGxldCBuYW1lcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgLy8gc3BlY2lmeSBuYW1lIGZvciBjb2x1bW5cbiAgICAgICAgICAgICAgICBpZihhcmcubmFtZXMgPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGsgPSAxOyBrIDw9IGxlbmd0aDsgaysrKVxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMucHVzaCgoaykudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgZWxzZSBuYW1lcyA9IGFyZy5uYW1lcztcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBsZW5ndGg7IGorKylcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHR5cGVUb0NvbHVtbkNyZWF0b3JNYXBbYXJnLnR5cGVdKG5hbWVzW2pdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FmdGVyV2FzbUNhbGxbaV0uYXJyYXlzW2pdKSk7XG5cbiAgICAgICAgICAgICAgICBhcmcuY29sdW1ucyA9IGNvbHVtbnM7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaSsrO1xuICAgIH1cbn0gLy8gZXh0cmFjdE5ld2x5Q3JlYXRlZERhdGFcblxuLy8gR2V0IG91dHB1dCBkYXRhOiBvdmVyYWxsIG91dHB1dCBpcyBjcmVhdGVkXG5mdW5jdGlvbiBnZXRPdXRwdXQoZnVuY1NwZWNpZmljYXRpb24pIHsgIFxuICAgIGxldCBvdXRwdXQgPSBmdW5jU3BlY2lmaWNhdGlvbi5vdXRwdXQ7XG4gICAgXG4gICAgY29uc3QgdHlwZVRvRGF0YUZpZWxkTWFwID0geyduZXdGbG9hdENvbHVtbnMnOiAnY29sdW1ucycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogJ2NvbHVtbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiAnY29sdW1uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbic6ICdjb2x1bW4nfTtcblxuICAgIHN3aXRjaChvdXRwdXQudHlwZSkge1xuXG4gICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzW291dHB1dC5zb3VyY2VdO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDT0xVTU46XG4gICAgICAgICAgICByZXR1cm4gZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzW291dHB1dC5zb3VyY2VdLmNvbHVtbjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgVEFCTEVfT0ZfQ09MVU1OUzpcbiAgICAgICAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzW291dHB1dC5zb3VyY2VdLmNvbHVtbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBPQkpFQ1RTOlxuICAgICAgICAgICAgbGV0IGFycmF5VG9SZXR1cm4gPSBbXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcHVzaCBkYXRhIG9mIHRoZSByZXF1aXJlZCBhcmd1bWVudHNcbiAgICAgICAgICAgIGZvcihsZXQgbmFtZSBvZiBvdXRwdXQuc291cmNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyZyA9IGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tuYW1lXTtcbiAgICAgICAgICAgICAgICBhcnJheVRvUmV0dXJuLnB1c2goYXJnW3R5cGVUb0RhdGFGaWVsZE1hcFthcmcudHlwZV1dKTtcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgIHJldHVybiBhcnJheVRvUmV0dXJuO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxufSAvLyBnZXRPdXRwdXRcblxuLy8gQ2xlYXIgbmV3bHkgY3JlYXRlZCBkYXRhIGZpZWxkcyAobmV3IGNvbHVtbihzKSlcbmZ1bmN0aW9uIGNsZWFyTmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbkFyZ3MpIHsgXG4gICAgZm9yKGNvbnN0IGtleSBpbiBmdW5jU3BlY2lmaWNhdGlvbkFyZ3MpIHtcbiAgICAgICAgY29uc3QgYXJnID0gZnVuY1NwZWNpZmljYXRpb25BcmdzW2tleV07XG5cbiAgICAgICAgc3dpdGNoIChhcmcudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGFyZy5jb2x1bW4gPSBudWxsOyAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuY29sdW1ucyA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59IC8vIGNsZWFyTmV3bHlDcmVhdGVkRGF0YVxuXG4vLyBUSEUgTUFJTiBGVU5DVElPTjogYSB3cmFwcGVyIGZvciBDKystZnVuY3Rpb24gY2FsbFxuZXhwb3J0IGZ1bmN0aW9uIGNwcFdyYXBwZXIobW9kdWxlLCBhcmdzLCBjcHBGdW5jTmFtZSwgcmV0dXJuVHlwZSkge1xuICAgIC8vIGFsbG9jYXRlIG1lbW9yeSBmb3IgYXJyYXlzIHRoYXQgYXJlIHBhc3NlZCB0byBDKystZnVuY3Rpb25cbiAgICBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUsIGFyZ3MpO1xuXG4gICAgLy8gcHV0IGRhdGEgKGp1c3QgY29sdW1uKHMpKSB0byBhbGxvY2F0ZWQgYnVmZmVyc1xuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUsIGFyZ3MpO1xuXG4gICAgLy8gY3JlYXRlIGFycmF5IG9mIHBhcmFtZXRlcnMgdGhhdCBhcmUgcGFzc2VkIHRvIEMrKy1mdW5jdGlvblxuICAgIGxldCBwYXJhbXMgPSBnZXRBcnJPZldhc21QYXJhbXMoYXJncyk7XG5cbiAgICAvL2NvbnNvbGUubG9nKCdwYXJhbXM6Jyk7XG4gICAgLy9jb25zb2xlLmxvZyhwYXJhbXMpO1xuXG4gICAgLy8gY3JlYXRlIGFycmF5IG9mIHBhcmFtZXRlcnMnIHR5cGVzIHRoYXQgYXJlIHBhc3NlZCB0byBDKystZnVuY3Rpb25cbiAgICBsZXQgdHlwZXMgPSBnZXRBcnJPZldhc21UeXBlcyhhcmdzKTtcbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKCd0eXBlczonKTtcbiAgICAvL2NvbnNvbGUubG9nKHR5cGVzKTtcblxuICAgIC8vIGNhbGwgd2FzbS1mdW5jdGlvblxuICAgIGxldCByZXN1bHQgPSBtb2R1bGUuY2NhbGwoY3BwRnVuY05hbWUsIHJldHVyblR5cGUsIHR5cGVzLCBwYXJhbXMpO1xuICAgIFxuICAgIC8vY29uc29sZS5sb2cocmVzdWx0KTtcblxuICAgIC8vIGdldCBkYXRhIGZyb20gYnVmZmVycyAoanVzdCBjb2x1bW4ocykpXG4gICAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlLCBhcmdzKTsgICAgICAgIFxuXG4gICAgLy8gY2xlYXIgbWVtb3J5IHRoYXQgd2FzIHByZXZpb3VzZWx5IGFsbG9jYXRlZFxuICAgIGNsZWFyTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSwgYXJncyk7XG5cbiAgICAvL2NvbnNvbGUubG9nKCdkb25lJyk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBHZXQgdGhlIHJlcXVpcmVkIG91dHB1dC5cbi8vIEl0IHRha2VzIGEgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZnVuY3Rpb24gYW5kIHRoZSBkYXRhIGNvbXB1dGVkXG4vLyBhbmQgZXh0cmFjdHMgdGhlIHJlcXVpcmVkIHJlc3VsdHMuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzdWx0KGZ1bmNTcGVjaWZpY2F0aW9uLCBkYXRhRnJvbVdlYldvcmtlcikge1xuICAgIGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50cy5fY2FsbFJlc3VsdCA9IGRhdGFGcm9tV2ViV29ya2VyLmNhbGxSZXN1bHQ7ICBcblxuICAgIGV4dHJhY3ROZXdseUNyZWF0ZWREYXRhKGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50cywgZGF0YUZyb21XZWJXb3JrZXIuYXJncyk7ICAgIFxuXG4gICAgbGV0IG91dFB1dCA9IGdldE91dHB1dChmdW5jU3BlY2lmaWNhdGlvbik7XG5cbiAgICAvLyBCZWxvdywgd2UgcmVtb3ZlIG5ld2x5IGNyZWF0ZWQgY29sdW1uKHMpLCB3aGljaCBhcmUgY3JlYXRlZCBhdCB0aGUgZXh0cmFjdGlvbi1zdGVwLlxuICAgIC8vIEl0IGlzIGVzcGVjaWFsbHkgcmVxdWlyZWQsIHdoZW4gbXVsdGlwbGUgY2FsbCBvZiB3YXNtLWZ1bmN0aW9ucyBpbiB3ZWJ3b3JrZXIuXG4gICAgY2xlYXJOZXdseUNyZWF0ZWREYXRhKGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gb3V0UHV0O1xufSIsIi8vIElucHV0cyBjb3JyZWN0bmVzcyBjaGVjayB0b29sc1xuLy9MaW1pdGF0aW9uIGNvbnN0YW50c1xuY29uc3QgQ09NUF9NSU4gPSAxO1xuY29uc3QgU0FNUExFU19DT1VOVF9NSU4gPSAxO1xuY29uc3QgRkVBVFVSRVNfQ09VTlRfTUlOID0gMTtcbmNvbnN0IFBFUkNFTlRBR0VfTUlOID0gMDtcbmNvbnN0IFBFUkNFTlRBR0VfTUFYID0gMTAwO1xuY29uc3QgTUFYX0VMRU1FTlRTX0NPVU5UID0gMTAwMDAwMDAwO1xuLy8gRXJyb3IgbWVzc2FnZXNcbmNvbnN0IENPTVBfUE9TSVRWRV9NRVMgPSAnY29tcG9uZW50cyBtdXN0IGJlIHBvc2l0aXZlLic7XG5jb25zdCBDT01QX0VYQ0VTUyA9ICdjb21wb25lbnRzIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBmZWF1dHVyZXMgY291bnQuJztcbmNvbnN0IElOQ09SRVJSRUNUX01JTl9NQVhfTUVTID0gJ21pbiBtdXN0IGJlIGxlc3MgdGhhbiBtYXguJztcbmNvbnN0IElOQ09SRVJSRUNUX0ZFQVRVUkVTX01FUyA9ICdmZWF0dXJlcyBtdXN0IGJlIHBvc2l0aXZlLic7XG5jb25zdCBJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyA9ICdzYW1wbGVzIG11c3QgYmUgcG9zaXRpdmUuJztcbmNvbnN0IElOQ09SRVJSRUNUX1BFUkNFTlRBR0VfTUVTID0gJ3Zpb2xhdG9ycyBwZXJjZW50YWdlIG11c3QgYmUgZnJvbSB0aGUgcmFuZ2UgZnJvbSAwIHRvIDEwMC4nO1xuY29uc3QgREFUQUZSQU1FX0lTX1RPT19CSUdfTUVTID0gJ2RhdGFmcmFtZSBpcyB0b28gYmlnLic7XG4vLyBDaGVjayBjb21wb25lbnRzIGNvdW50IChQQ0EsIFBMUylcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NvbXBvbmVuZXRzKGZlYXR1cmVzLCBjb21wb25lbnRzKSB7XG4gICAgaWYgKGNvbXBvbmVudHMgPCBDT01QX01JTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKENPTVBfUE9TSVRWRV9NRVMpO1xuICAgIGlmIChjb21wb25lbnRzID4gZmVhdHVyZXMubGVuZ3RoKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoQ09NUF9FWENFU1MpO1xuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggKiBmZWF0dXJlcy5ieUluZGV4KDApLmxlbmd0aCA+IE1BWF9FTEVNRU5UU19DT1VOVClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKERBVEFGUkFNRV9JU19UT09fQklHX01FUyk7XG59XG4vLyBDaGVjayBpbnB1dHMgb2YgZGF0YSBmb3IgU1ZNIHRlc3RpbmcgZ2VuZXJhdG9yXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tHZW5lcmF0b3JTVk1pbnB1dHMoc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICAgIGlmIChtaW4gPj0gbWF4KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfTUlOX01BWF9NRVMpO1xuICAgIGlmIChmZWF0dXJlc0NvdW50IDwgRkVBVFVSRVNfQ09VTlRfTUlOKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfRkVBVFVSRVNfTUVTKTtcbiAgICBpZiAoc2FtcGxlc0NvdW50IDwgU0FNUExFU19DT1VOVF9NSU4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyk7XG4gICAgaWYgKCh2aW9sYXRvcnNQZXJjZW50YWdlIDwgUEVSQ0VOVEFHRV9NSU4pIHx8ICh2aW9sYXRvcnNQZXJjZW50YWdlID4gUEVSQ0VOVEFHRV9NQVgpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfUEVSQ0VOVEFHRV9NRVMpO1xufVxuIiwiLy8gRXhwbG9yYXRvcnkgZGF0YSBhbmFseXNpcyAoRURBKSB0b29sc1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlciwgX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25JbldlYldvcmtlciB9IGZyb20gJy4uL3dhc20vRURBQVBJJztcbmltcG9ydCB7IGNoZWNrQ29tcG9uZW5ldHMgfSBmcm9tICcuL3V0aWxzJztcbi8vIFByaW5jaXBhbCBjb21wb25lbnRzIGFuYWx5c2lzIChQQ0EpXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVBDQSh0YWJsZSwgZmVhdHVyZXMsIGNvbXBvbmVudHMsIGNlbnRlciwgc2NhbGUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjaGVja0NvbXBvbmVuZXRzKGZlYXR1cmVzLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3QgY2VudGVyTnVtID0gY2VudGVyID8gMSA6IDA7XG4gICAgICAgIGNvbnN0IHNjYWxlTnVtID0gc2NhbGUgPyAxIDogMDtcbiAgICAgICAgbGV0IF9vdXRwdXQ7XG4gICAgICAgIGxldCBfcHJvbWlzZSA9IF9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpc0luV2ViV29ya2VyKHRhYmxlLCBmZWF0dXJlcywgY29tcG9uZW50cywgY2VudGVyTnVtLCBzY2FsZU51bSk7XG4gICAgICAgIHlpZWxkIF9wcm9taXNlLnRoZW4oX3Jlc3VsdCA9PiB7IF9vdXRwdXQgPSBfcmVzdWx0OyB9LCBfZXJyb3IgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke19lcnJvcn1gKTsgfSk7XG4gICAgICAgIHJldHVybiBfb3V0cHV0O1xuICAgIH0pO1xufVxuLy8gUGFydGlhbCBsZWFzdCBzcXVhcmUgcmVncmVzc2lvbiAoUExTKVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVQTFModGFibGUsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY2hlY2tDb21wb25lbmV0cyhmZWF0dXJlcywgY29tcG9uZW50cyk7XG4gICAgICAgIGxldCBfb3V0cHV0O1xuICAgICAgICBsZXQgX3Byb21pc2UgPSBfcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbkluV2ViV29ya2VyKHRhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50cyk7XG4gICAgICAgIHlpZWxkIF9wcm9taXNlLnRoZW4oX3Jlc3VsdCA9PiB7IF9vdXRwdXQgPSBfcmVzdWx0OyB9LCBfZXJyb3IgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke19lcnJvcn1gKTsgfSk7XG4gICAgICAgIHJldHVybiBfb3V0cHV0O1xuICAgIH0pO1xufVxuIiwiLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LlxuLy8gSmF2YVNjcmlwdCBBUEkgZm9yIGNhbGwgd2FzbS1mdW5jdGlvbnMgZnJvbSB0aGUgbW9kdWxlIEVEQVxuXG4vLyBJbXBvcnRzIGZvciBjYWxsIHdhc20gcnVudGltZS1zeXN0ZW06IGluIHRoZSBtYWluIHN0cmVhbSBhbmQgaW4gd2Vid29ya2Vyc1xuaW1wb3J0IHtjYWxsV2FzbX0gZnJvbSAnLi4vd2FzbS9jYWxsV2FzbSc7XG5pbXBvcnQge2dldENwcElucHV0LCBnZXRSZXN1bHR9IGZyb20gJy4uL3dhc20vY2FsbFdhc21Gb3JXZWJXb3JrZXInO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX2luaXRFREFBUEkoKSB7XG4gIGF3YWl0IGluaXRFREEoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpcyh0YWJsZSwgY29sdW1ucywgY29tcG9uZW50c0NvdW50LCBjZW50ZXJOdW0sIHNjYWxlTnVtKSB7XG4gIHJldHVybiBjYWxsV2FzbShFREEsICdwcmluY2lwYWxDb21wb25lbnRBbmFseXNpcycsIFtjb2x1bW5zLCBjb21wb25lbnRzQ291bnQsIGNlbnRlck51bSwgc2NhbGVOdW1dKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpc0luV2ViV29ya2VyKHRhYmxlLCBjb2x1bW5zLCBjb21wb25lbnRzQ291bnQsIGNlbnRlck51bSwgc2NhbGVOdW0pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpc1dvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzJ10uYXJndW1lbnRzLFtjb2x1bW5zLCBjb21wb25lbnRzQ291bnQsIGNlbnRlck51bSwgc2NhbGVOdW1dKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsncHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXMnXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9lcnJvcihkZiwgY29sMSwgY29sMikge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAnZXJyb3InLCBbY29sMSwgY29sMl0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX2Vycm9ySW5XZWJXb3JrZXIoZGYsIGNvbDEsIGNvbDIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9lcnJvcldvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ2Vycm9yJ10uYXJndW1lbnRzLFtjb2wxLCBjb2wyXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ2Vycm9yJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbih0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHNDb3VudCkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAncGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbicsIFtmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50c0NvdW50XSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbkluV2ViV29ya2VyKHRhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50c0NvdW50KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbldvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb24nXS5hcmd1bWVudHMsW2ZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzQ291bnRdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsncGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbiddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX2dlbmVyYXRlRGF0YXNldChrZXJuZWwsIGtlcm5lbFBhcmFtcywgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAnZ2VuZXJhdGVEYXRhc2V0JywgW2tlcm5lbCwga2VybmVsUGFyYW1zLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfZ2VuZXJhdGVEYXRhc2V0SW5XZWJXb3JrZXIoa2VybmVsLCBrZXJuZWxQYXJhbXMsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9nZW5lcmF0ZURhdGFzZXRXb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydnZW5lcmF0ZURhdGFzZXQnXS5hcmd1bWVudHMsW2tlcm5lbCwga2VybmVsUGFyYW1zLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ2dlbmVyYXRlRGF0YXNldCddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX25vcm1hbGl6ZURhdGFzZXQoZGF0YSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAnbm9ybWFsaXplRGF0YXNldCcsIFtkYXRhXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfbm9ybWFsaXplRGF0YXNldEluV2ViV29ya2VyKGRhdGEpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9ub3JtYWxpemVEYXRhc2V0V29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsnbm9ybWFsaXplRGF0YXNldCddLmFyZ3VtZW50cyxbZGF0YV0pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWydub3JtYWxpemVEYXRhc2V0J10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfdHJhaW5MU1NWTShnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBkYXRhc2V0LCBsYWJlbHMpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3RyYWluTFNTVk0nLCBbZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgZGF0YXNldCwgbGFiZWxzXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfdHJhaW5MU1NWTUluV2ViV29ya2VyKGdhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGRhdGFzZXQsIGxhYmVscykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL3RyYWluTFNTVk1Xb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWyd0cmFpbkxTU1ZNJ10uYXJndW1lbnRzLFtnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBkYXRhc2V0LCBsYWJlbHNdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsndHJhaW5MU1NWTSddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX3ByZWRpY3RCeUxTU1ZNKGtlcm5lbCwga2VybmVsUGFyYW1zLCBub3JtYWxpemVkRGF0YSwgbGFiZWxzLCBtZWFucywgc3RkRGV2cywgbW9kZWxQYXJhbXMsIHByZWNvbXB1dGVkV2VpZ2h0cywgdGFyZ2V0RGF0YSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAncHJlZGljdEJ5TFNTVk0nLCBba2VybmVsLCBrZXJuZWxQYXJhbXMsIG5vcm1hbGl6ZWREYXRhLCBsYWJlbHMsIG1lYW5zLCBzdGREZXZzLCBtb2RlbFBhcmFtcywgcHJlY29tcHV0ZWRXZWlnaHRzLCB0YXJnZXREYXRhXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfcHJlZGljdEJ5TFNTVk1JbldlYldvcmtlcihrZXJuZWwsIGtlcm5lbFBhcmFtcywgbm9ybWFsaXplZERhdGEsIGxhYmVscywgbWVhbnMsIHN0ZERldnMsIG1vZGVsUGFyYW1zLCBwcmVjb21wdXRlZFdlaWdodHMsIHRhcmdldERhdGEpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9wcmVkaWN0QnlMU1NWTVdvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ3ByZWRpY3RCeUxTU1ZNJ10uYXJndW1lbnRzLFtrZXJuZWwsIGtlcm5lbFBhcmFtcywgbm9ybWFsaXplZERhdGEsIGxhYmVscywgbWVhbnMsIHN0ZERldnMsIG1vZGVsUGFyYW1zLCBwcmVjb21wdXRlZFdlaWdodHMsIHRhcmdldERhdGFdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsncHJlZGljdEJ5TFNTVk0nXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF90cmFpbkFuZEFuYWx5emVMU1NWTShnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50LCBkYXRhc2V0LCBsYWJlbHMpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3RyYWluQW5kQW5hbHl6ZUxTU1ZNJywgW2dhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQsIGRhdGFzZXQsIGxhYmVsc10pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3RyYWluQW5kQW5hbHl6ZUxTU1ZNSW5XZWJXb3JrZXIoZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvdHJhaW5BbmRBbmFseXplTFNTVk1Xb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWyd0cmFpbkFuZEFuYWx5emVMU1NWTSddLmFyZ3VtZW50cyxbZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3RyYWluQW5kQW5hbHl6ZUxTU1ZNJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbiIsIi8vIEN1c3RvbSBVSSBmb3IgRXhwbG9yYXRvcnkgZGF0YSBhbmFseXNpcyAoRURBKSB0b29sc1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuLy8gUmVuYW1lIFBDQSBjb2x1bW5zXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lUENBY29sdW1ucyhwY2FUYWJsZSkge1xuICAgIGZvciAoY29uc3QgY29sIG9mIHBjYVRhYmxlLmNvbHVtbnMudG9MaXN0KCkpXG4gICAgICAgIGNvbC5uYW1lID0gJ1BDQScgKyBjb2wubmFtZTtcbiAgICByZXR1cm4gcGNhVGFibGU7XG59XG4vLyBQcmVkaWN0ZWQgdnMgUmVmZXJlbmNlIHNjYXR0ZXIgcGxvdFxuZXhwb3J0IGZ1bmN0aW9uIHByZWRpY3RlZFZlcnN1c1JlZmVyZW5jZVNjYXR0ZXJQbG90KHNhbXBsZXNOYW1lcywgcmVmZXJlbmNlLCBwcmVkaWN0aW9uKSB7XG4gICAgcHJlZGljdGlvbi5uYW1lID0gcmVmZXJlbmNlLm5hbWUgKyAnKHByZWRpY3RlZCknO1xuICAgIGxldCBkZlJlZmVyZW5jZVByZWRpY3Rpb24gPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW3NhbXBsZXNOYW1lcywgcmVmZXJlbmNlLCBwcmVkaWN0aW9uXSk7XG4gICAgZGZSZWZlcmVuY2VQcmVkaWN0aW9uLm5hbWUgPSAnUmVmZXJlbmNlIHZzLiBQcmVkaWN0ZWQnO1xuICAgIHJldHVybiBERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGZSZWZlcmVuY2VQcmVkaWN0aW9uLCB7IHRpdGxlOiBkZlJlZmVyZW5jZVByZWRpY3Rpb24ubmFtZSxcbiAgICAgICAgeDogcmVmZXJlbmNlLm5hbWUsXG4gICAgICAgIHk6IHByZWRpY3Rpb24ubmFtZSxcbiAgICAgICAgc2hvd1JlZ3Jlc3Npb25MaW5lOiB0cnVlLFxuICAgICAgICBtYXJrZXJUeXBlOiAnY2lyY2xlJyxcbiAgICAgICAgbGFiZWxzOiBzYW1wbGVzTmFtZXMubmFtZVxuICAgIH0pO1xufVxuLy8gUmVncmVzc2lvbiBDb2VmZmljaWVudHMgQmFyIENoYXJ0XG5leHBvcnQgZnVuY3Rpb24gcmVncmVzc2lvbkNvZWZmaWNpZW50c0JhckNoYXJ0KGZlYXR1cmVzLCByZWdyZXNzaW9uQ29lZmZzKSB7XG4gICAgcmVncmVzc2lvbkNvZWZmcy5uYW1lID0gJ3JlZ3Jlc3Npb24gY29lZmZpY2llbnQnO1xuICAgIGxldCBuYW1lc09mUHJlZGljdG9ycyA9IFtdO1xuICAgIGZvciAoY29uc3QgY29sIG9mIGZlYXR1cmVzKVxuICAgICAgICBuYW1lc09mUHJlZGljdG9ycy5wdXNoKGNvbC5uYW1lKTtcbiAgICBsZXQgcHJlZGljdG9yTmFtZXNDb2x1bW4gPSBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ2ZlYXR1cmUnLCBuYW1lc09mUHJlZGljdG9ycyk7XG4gICAgbGV0IGRmUmVnckNvZWZzID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtwcmVkaWN0b3JOYW1lc0NvbHVtbiwgcmVncmVzc2lvbkNvZWZmc10pO1xuICAgIGRmUmVnckNvZWZzLm5hbWUgPSAnUmVncmVzc2lvbiBDb2VmZmljaWVudHMnO1xuICAgIHJldHVybiBERy5WaWV3ZXIuYmFyQ2hhcnQoZGZSZWdyQ29lZnMsIHsgdGl0bGU6IGRmUmVnckNvZWZzLm5hbWUsIHNwbGl0OiAnZmVhdHVyZScsXG4gICAgICAgIHZhbHVlOiAncmVncmVzc2lvbiBjb2VmZmljaWVudCcsIHZhbHVlQWdnclR5cGU6ICdhdmcnIH0pO1xufVxuLy8gU2NvcmVzIFNjYXR0ZXIgUGxvdFxuZXhwb3J0IGZ1bmN0aW9uIHNjb3Jlc1NjYXR0ZXJQbG90KHNhbXBsZXNOYW1lcywgeFNjb3JlcywgeVNjb3Jlcykge1xuICAgIGxldCBzY29yZXNDb2x1bW5zID0gW3NhbXBsZXNOYW1lc107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4U2NvcmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHhTY29yZXNbaV0ubmFtZSA9IGB4LnNjb3JlLnQke2kgKyAxfWA7XG4gICAgICAgIHNjb3Jlc0NvbHVtbnMucHVzaCh4U2NvcmVzW2ldKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5U2NvcmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHlTY29yZXNbaV0ubmFtZSA9IGB5LnNjb3JlLnUke2kgKyAxfWA7XG4gICAgICAgIHNjb3Jlc0NvbHVtbnMucHVzaCh5U2NvcmVzW2ldKTtcbiAgICB9XG4gICAgbGV0IHNjb3JlcyA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhzY29yZXNDb2x1bW5zKTtcbiAgICBzY29yZXMubmFtZSA9ICdTY29yZXMnO1xuICAgIC8vZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoc2NvcmVzKTtcbiAgICBjb25zdCBpbmRleCA9IHhTY29yZXMubGVuZ3RoID4gMSA/IDEgOiAwO1xuICAgIHJldHVybiBERy5WaWV3ZXIuc2NhdHRlclBsb3Qoc2NvcmVzLCB7IHRpdGxlOiBzY29yZXMubmFtZSxcbiAgICAgICAgeDogeFNjb3Jlc1swXS5uYW1lLFxuICAgICAgICB5OiB4U2NvcmVzW2luZGV4XS5uYW1lLFxuICAgICAgICBtYXJrZXJUeXBlOiAnY2lyY2xlJyxcbiAgICAgICAgbGFiZWxzOiBzYW1wbGVzTmFtZXMubmFtZVxuICAgIH0pO1xufVxuLy8gTG9hZGluZyBTY2F0dGVyIFBsb3RcbmV4cG9ydCBmdW5jdGlvbiBsb2FkaW5nU2NhdHRlclBsb3QoZmVhdHVyZXMsIHhMb2FkaW5ncykge1xuICAgIGxldCBsb2FkaW5nQ29scyA9IFtdO1xuICAgIGxldCBsb2FkaW5nTGFiZWxzID0gW107XG4gICAgZm9yIChsZXQgY29sIG9mIGZlYXR1cmVzKVxuICAgICAgICBsb2FkaW5nTGFiZWxzLnB1c2goY29sLm5hbWUpO1xuICAgIGxvYWRpbmdDb2xzLnB1c2goREcuQ29sdW1uLmZyb21TdHJpbmdzKCdsYWJlbHMnLCBsb2FkaW5nTGFiZWxzKSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4TG9hZGluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgeExvYWRpbmdzW2ldLm5hbWUgPSBgeC5sb2FkaW5nLnAke2kgKyAxfWA7XG4gICAgICAgIGxvYWRpbmdDb2xzLnB1c2goeExvYWRpbmdzW2ldKTtcbiAgICB9XG4gICAgbGV0IGRmTG9hZGluZ3MgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMobG9hZGluZ0NvbHMpO1xuICAgIGRmTG9hZGluZ3MubmFtZSA9ICdMb2FkaW5ncyc7XG4gICAgcmV0dXJuIERHLlZpZXdlci5zY2F0dGVyUGxvdChkZkxvYWRpbmdzLCB7IHRpdGxlOiBkZkxvYWRpbmdzLm5hbWUsXG4gICAgICAgIHg6IHhMb2FkaW5nc1swXS5uYW1lLFxuICAgICAgICB5OiB4TG9hZGluZ3NbeExvYWRpbmdzLmxlbmd0aCAtIDFdLm5hbWUsXG4gICAgICAgIG1hcmtlclR5cGU6ICdjaXJjbGUnLFxuICAgICAgICBsYWJlbHM6ICdsYWJlbHMnXG4gICAgfSk7XG59XG4vLyBBZGQgUExTIHZpc3VhbGl6YXRpb25cbmV4cG9ydCBmdW5jdGlvbiBhZGRQTFN2aXN1YWxpemF0aW9uKHRhYmxlLCBzYW1wbGVzTmFtZXMsIGZlYXR1cmVzLCBwcmVkaWN0LCBwbHNPdXRwdXQpIHtcbiAgICBsZXQgdmlldyA9IGdyb2suc2hlbGwuZ2V0VGFibGVWaWV3KHRhYmxlLm5hbWUpO1xuICAgIC8vIDEuIFByZWRpY3RlZCB2cyBSZWZlcmVuY2Ugc2NhdHRlciBwbG90XG4gICAgdmlldy5hZGRWaWV3ZXIocHJlZGljdGVkVmVyc3VzUmVmZXJlbmNlU2NhdHRlclBsb3Qoc2FtcGxlc05hbWVzLCBwcmVkaWN0LCBwbHNPdXRwdXRbMF0pKTtcbiAgICAvLyAyLiBSZWdyZXNzaW9uIENvZWZmaWNpZW50cyBCYXIgQ2hhcnRcbiAgICB2aWV3LmFkZFZpZXdlcihyZWdyZXNzaW9uQ29lZmZpY2llbnRzQmFyQ2hhcnQoZmVhdHVyZXMsIHBsc091dHB1dFsxXSkpO1xuICAgIC8vIDMuIExvYWRpbmcgU2NhdHRlciBQbG90XG4gICAgdmlldy5hZGRWaWV3ZXIobG9hZGluZ1NjYXR0ZXJQbG90KGZlYXR1cmVzLCBwbHNPdXRwdXRbNF0pKTtcbiAgICAvLyA0LiBTY29yZXMgU2NhdHRlciBQbG90XG4gICAgdmlldy5hZGRWaWV3ZXIoc2NvcmVzU2NhdHRlclBsb3Qoc2FtcGxlc05hbWVzLCBwbHNPdXRwdXRbMl0sIHBsc091dHB1dFszXSkpO1xufVxuIiwiLy8gVGVzdCBkYXRhIGdlbmVyYXRpb24gdG9vbHNcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IGNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBfZ2VuZXJhdGVEYXRhc2V0SW5XZWJXb3JrZXIgfSBmcm9tICcuLi93YXNtL0VEQUFQSSc7XG5jb25zdCBTVk1fR0VOX0ZFQVRVUkVTX0lOREVYID0gMDtcbmNvbnN0IFNWTV9HRU5fTEFCRUxTX0lOREVYID0gMTtcbmNvbnN0IFNWTV9GRUFUVVJFX05BTUUgPSAnRmVhdHVyZSAjJztcbmNvbnN0IFNWTV9MQUJFTF9OQU1FID0gJ0xhYmVsJztcbi8vIFJldHVybnMgdGhlIGRhdGFmcmFtZSBcImNhcnNcIlxuZXhwb3J0IGZ1bmN0aW9uIGNhcnNEYXRhZnJhbWUoKSB7XG4gICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbXG4gICAgICAgIERHLkNvbHVtbi5mcm9tU3RyaW5ncygnbW9kZWwnLCBbJ2FsZmFyb21lbycsICdhdWRpJywgJ2JtdycsICdjaGV2cm9sZXQnLCAnZG9kZ2UxJywgJ2RvZGdlMicsICdob25kYTEnLCAnaG9uZGEyJywgJ2lzdXp1JywgJ2phZ3VhcicsICdtYXpkYScsICdtZXJjZWRlcycsICdtZXJjdXJ5JywgJ21pdHN1YmlzaGknLCAnbmlzc2FuMScsICduaXNzYW4yJywgJ3BldWdvdCcsICdwbHltb3V0aCcsICdwb3JzY2hlJywgJ3NhYWInLCAnc3ViYXJ1JywgJ3RveW90YTEnLCAndG95b3RhMicsICd0b3lvdGEzJywgJ3RveW90YTQnLCAndm9sa3N3YWdlbjEnLCAndm9sa3N3YWdlbjInLCAndm9sdm8xJywgJ3ZvbHZvMicsICd2b2x2bzMnXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnZGllc2VsJywgbmV3IEludDMyQXJyYXkoWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDAsIDFdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgndHVyYm8nLCBuZXcgSW50MzJBcnJheShbMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCd0d28uZG9vcnMnLCBuZXcgSW50MzJBcnJheShbMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMF0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdoYXRjaGJhY2snLCBuZXcgSW50MzJBcnJheShbMSwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMF0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ3doZWVsLmJhc2UnLCBuZXcgRmxvYXQzMkFycmF5KFs5NC41LCAxMDUuODAwMDAzMDUxNzU3ODEsIDEwMS4xOTk5OTY5NDgyNDIxOSwgOTQuNSwgOTMuNjk5OTk2OTQ4MjQyMTksIDkzLjY5OTk5Njk0ODI0MjE5LCA5My42OTk5OTY5NDgyNDIxOSwgOTYuNSwgOTQuMzAwMDAzMDUxNzU3ODEsIDExMywgOTMuMDk5OTk4NDc0MTIxMSwgMTE1LjU5OTk5ODQ3NDEyMTEsIDEwMi42OTk5OTY5NDgyNDIxOSwgOTMuNjk5OTk2OTQ4MjQyMTksIDk0LjUsIDk0LjUsIDkzLjY5OTk5Njk0ODI0MjE5LCAxMTQuMTk5OTk2OTQ4MjQyMTksIDg5LjUsIDk5LjA5OTk5ODQ3NDEyMTEsIDk3LjE5OTk5Njk0ODI0MjE5LCA5NS42OTk5OTY5NDgyNDIxOSwgOTUuNjk5OTk2OTQ4MjQyMTksIDk4LjQwMDAwMTUyNTg3ODksIDEwMi40MDAwMDE1MjU4Nzg5LCA5Ny4zMDAwMDMwNTE3NTc4MSwgMTAwLjQwMDAwMTUyNTg3ODksIDEwNC4zMDAwMDMwNTE3NTc4MSwgMTA5LjA5OTk5ODQ3NDEyMTEsIDEwOS4wOTk5OTg0NzQxMjExXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSgnbGVuZ3RoJywgbmV3IEZsb2F0MzJBcnJheShbMTcxLjE5OTk5Njk0ODI0MjIsIDE5Mi42OTk5OTY5NDgyNDIyLCAxNzYuODAwMDAzMDUxNzU3OCwgMTU4LjgwMDAwMzA1MTc1NzgsIDE1Ny4zMDAwMDMwNTE3NTc4LCAxNTcuMzAwMDAzMDUxNzU3OCwgMTUwLCAxNzUuMzk5OTkzODk2NDg0MzgsIDE3MC42OTk5OTY5NDgyNDIyLCAxOTkuNjAwMDA2MTAzNTE1NjIsIDE2Ni44MDAwMDMwNTE3NTc4LCAyMDIuNjAwMDA2MTAzNTE1NjIsIDE3OC4zOTk5OTM4OTY0ODQzOCwgMTU3LjMwMDAwMzA1MTc1NzgsIDE3MC4xOTk5OTY5NDgyNDIyLCAxNjUuMzAwMDAzMDUxNzU3OCwgMTU3LjMwMDAwMzA1MTc1NzgsIDE5OC44OTk5OTM4OTY0ODQzOCwgMTY4Ljg5OTk5Mzg5NjQ4NDM4LCAxODYuNjAwMDA2MTAzNTE1NjIsIDE3MiwgMTU4LjY5OTk5Njk0ODI0MjIsIDE2Ni4zMDAwMDMwNTE3NTc4LCAxNzYuMTk5OTk2OTQ4MjQyMiwgMTc1LjYwMDAwNjEwMzUxNTYyLCAxNzEuNjk5OTk2OTQ4MjQyMiwgMTgwLjE5OTk5Njk0ODI0MjIsIDE4OC44MDAwMDMwNTE3NTc4LCAxODguODAwMDAzMDUxNzU3OCwgMTg4LjgwMDAwMzA1MTc1NzhdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KCd3aWR0aCcsIG5ldyBGbG9hdDMyQXJyYXkoWzY1LjUsIDcxLjQwMDAwMTUyNTg3ODksIDY0LjgwMDAwMzA1MTc1NzgxLCA2My41OTk5OTg0NzQxMjEwOTQsIDYzLjc5OTk5OTIzNzA2MDU1LCA2My43OTk5OTkyMzcwNjA1NSwgNjQsIDY1LjE5OTk5Njk0ODI0MjE5LCA2MS43OTk5OTkyMzcwNjA1NSwgNjkuNTk5OTk4NDc0MTIxMSwgNjQuMTk5OTk2OTQ4MjQyMTksIDcxLjY5OTk5Njk0ODI0MjE5LCA2OCwgNjQuNDAwMDAxNTI1ODc4OSwgNjMuNzk5OTk5MjM3MDYwNTUsIDYzLjc5OTk5OTIzNzA2MDU1LCA2My43OTk5OTkyMzcwNjA1NSwgNjguNDAwMDAxNTI1ODc4OSwgNjUsIDY2LjUsIDY1LjQwMDAwMTUyNTg3ODksIDYzLjU5OTk5ODQ3NDEyMTA5NCwgNjQuNDAwMDAxNTI1ODc4OSwgNjUuNTk5OTk4NDc0MTIxMSwgNjYuNSwgNjUuNSwgNjYuOTAwMDAxNTI1ODc4OSwgNjcuMTk5OTk2OTQ4MjQyMTksIDY4LjgwMDAwMzA1MTc1NzgxLCA2OC45MDAwMDE1MjU4Nzg5XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSgnaGVpZ2h0JywgbmV3IEZsb2F0MzJBcnJheShbNTIuNDAwMDAxNTI1ODc4OTA2LCA1NS43MDAwMDA3NjI5Mzk0NSwgNTQuMjk5OTk5MjM3MDYwNTUsIDUyLCA1MC43OTk5OTkyMzcwNjA1NSwgNTAuNTk5OTk4NDc0MTIxMDk0LCA1Mi41OTk5OTg0NzQxMjEwOTQsIDU0LjA5OTk5ODQ3NDEyMTA5NCwgNTMuNSwgNTIuNzk5OTk5MjM3MDYwNTUsIDU0LjA5OTk5ODQ3NDEyMTA5NCwgNTYuMjk5OTk5MjM3MDYwNTUsIDU0Ljc5OTk5OTIzNzA2MDU1LCA1MC43OTk5OTkyMzcwNjA1NSwgNTMuNSwgNTQuNSwgNTAuNTk5OTk4NDc0MTIxMDk0LCA1OC43MDAwMDA3NjI5Mzk0NSwgNTEuNTk5OTk4NDc0MTIxMDk0LCA1Ni4wOTk5OTg0NzQxMjEwOTQsIDUyLjUsIDU0LjUsIDUzLCA1MiwgNTQuOTAwMDAxNTI1ODc4OTA2LCA1NS43MDAwMDA3NjI5Mzk0NSwgNTUuMDk5OTk4NDc0MTIxMDk0LCA1Ni4yMDAwMDA3NjI5Mzk0NSwgNTUuNSwgNTUuNV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdjdXJiLndlaWdodCcsIG5ldyBJbnQzMkFycmF5KFsyODIzLCAyODQ0LCAyMzk1LCAxOTA5LCAyMTI4LCAxOTY3LCAxOTU2LCAyMzA0LCAyMzM3LCA0MDY2LCAxOTUwLCAzNzcwLCAyOTEwLCAxOTE4LCAyMDI0LCAxOTUxLCAxOTY3LCAzNDMwLCAyODAwLCAyNjk1LCAyMTkwLCAxOTg1LCAyMjc1LCAyNTUxLCAyNDgwLCAyMjYxLCAyNjYxLCAyOTEyLCAzMDQ5LCAzMjE3XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ2VuZy5zaXplJywgbmV3IEludDMyQXJyYXkoWzE1MiwgMTM2LCAxMDgsIDkwLCA5OCwgOTAsIDkyLCAxMTAsIDExMSwgMjU4LCA5MSwgMTgzLCAxNDAsIDkyLCA5NywgOTcsIDkwLCAxNTIsIDE5NCwgMTIxLCAxMDgsIDkyLCAxMTAsIDE0NiwgMTEwLCA5NywgMTM2LCAxNDEsIDE0MSwgMTQ1XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ2hvcnNlcG93ZXInLCBuZXcgSW50MzJBcnJheShbMTU0LCAxMTAsIDEwMSwgNzAsIDEwMiwgNjgsIDc2LCA4NiwgNzgsIDE3NiwgNjgsIDEyMywgMTc1LCA2OCwgNjksIDY5LCA2OCwgOTUsIDIwNywgMTEwLCA4MiwgNjIsIDU2LCAxMTYsIDczLCA1MiwgMTEwLCAxMTQsIDE2MCwgMTA2XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3BlYWsucnBtJywgbmV3IEludDMyQXJyYXkoWzUwMDAsIDU1MDAsIDU4MDAsIDU0MDAsIDU1MDAsIDU1MDAsIDYwMDAsIDU4MDAsIDQ4MDAsIDQ3NTAsIDUwMDAsIDQzNTAsIDUwMDAsIDU1MDAsIDUyMDAsIDUyMDAsIDU1MDAsIDQxNTAsIDU5MDAsIDUyNTAsIDQ0MDAsIDQ4MDAsIDQ1MDAsIDQ4MDAsIDQ1MDAsIDQ4MDAsIDU1MDAsIDU0MDAsIDUzMDAsIDQ4MDBdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnc3ltYm9sJywgbmV3IEludDMyQXJyYXkoWzEsIDEsIDIsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDEsIC0xLCAxLCAyLCAxLCAxLCAxLCAwLCAzLCAyLCAwLCAxLCAwLCAyLCAtMSwgMiwgMCwgLTIsIC0xLCAtMV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdjaXR5Lm1wZycsIG5ldyBJbnQzMkFycmF5KFsxOSwgMTksIDIzLCAzOCwgMjQsIDMxLCAzMCwgMjcsIDI0LCAxNSwgMzEsIDIyLCAxOSwgMzcsIDMxLCAzMSwgMzEsIDI1LCAxNywgMjEsIDI4LCAzNSwgMzQsIDI0LCAzMCwgMzcsIDE5LCAyMywgMTksIDI2XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ2hpZ2h3YXkubXBnJywgbmV3IEludDMyQXJyYXkoWzI2LCAyNSwgMjksIDQzLCAzMCwgMzgsIDM0LCAzMywgMjksIDE5LCAzOCwgMjUsIDI0LCA0MSwgMzcsIDM3LCAzOCwgMjUsIDI1LCAyOCwgMzMsIDM5LCAzNiwgMzAsIDMzLCA0NiwgMjQsIDI4LCAyNSwgMjddKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgncHJpY2UnLCBuZXcgSW50MzJBcnJheShbMTY1MDAsIDE3NzEwLCAxNjQzMCwgNjU3NSwgNzk1NywgNjIyOSwgNzEyOSwgODg0NSwgNjc4NSwgMzU1NTAsIDczOTUsIDMxNjAwLCAxNjUwMywgNTM4OSwgNzM0OSwgNzI5OSwgNjIyOSwgMTM4NjAsIDM3MDI4LCAxMjE3MCwgNzc3NSwgNTM0OCwgNzg5OCwgOTk4OSwgMTA2OTgsIDc3NzUsIDEzMjk1LCAxMjk0MCwgMTkwNDUsIDIyNDcwXSkpLFxuICAgIF0pO1xufSAvLyBjYXJzRGF0YWZyYW1lXG4vLyBHZW5lcmF0ZSBkYXRhc2V0IGZvciB0ZXN0aW5nIGJpbmFyeSBjbGFzc2lmaWVyc1xuZXhwb3J0IGZ1bmN0aW9uIHRlc3REYXRhRm9yQmluYXJ5Q2xhc3NpZmljYXRpb24oa2VybmVsLCBrZXJuZWxQYXJhbXMsIG5hbWUsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAvLyBjaGVjayBpbnB1dHNcbiAgICAgICAgY2hlY2tHZW5lcmF0b3JTVk1pbnB1dHMoc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgICAgIC8vIGtlcm5lbCBwYXJhbXMgY29sdW1uXG4gICAgICAgIGNvbnN0IGtlcm5lbFBhcmFtc0NvbCA9IERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgJ2tlcm5lbFBhcmFtcycsIGtlcm5lbFBhcmFtcyk7XG4gICAgICAgIC8vIENBTEwgV0FTTS1DT01QVVRBVElPTlMgIFxuICAgICAgICBsZXQgX291dHB1dDtcbiAgICAgICAgbGV0IF9wcm9taXNlID0gX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyKGtlcm5lbCwga2VybmVsUGFyYW1zQ29sLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKTtcbiAgICAgICAgeWllbGQgX3Byb21pc2UudGhlbihfcmVzdWx0ID0+IHsgX291dHB1dCA9IF9yZXN1bHQ7IH0sIF9lcnJvciA9PiB7IHRocm93IG5ldyBFcnJvcihgRXJyb3I6ICR7X2Vycm9yfWApOyB9KTtcbiAgICAgICAgLy8gUmVuYW1lIGxhYmVscyBjb2x1bW5cbiAgICAgICAgX291dHB1dFtTVk1fR0VOX0xBQkVMU19JTkRFWF0ubmFtZSA9IFNWTV9MQUJFTF9OQU1FO1xuICAgICAgICAvLyBSZW5hbWUgZmVhdHVyZSBjb2x1bW5zXG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIF9vdXRwdXRbU1ZNX0dFTl9GRUFUVVJFU19JTkRFWF0pXG4gICAgICAgICAgICBjb2wubmFtZSA9IFNWTV9GRUFUVVJFX05BTUUgKyBjb2wubmFtZTtcbiAgICAgICAgLy8gQ3JlYXRlIGRhdGFmcmFtZVxuICAgICAgICBjb25zdCBkZiA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhfb3V0cHV0W1NWTV9HRU5fRkVBVFVSRVNfSU5ERVhdKTtcbiAgICAgICAgZGYubmFtZSA9IG5hbWU7XG4gICAgICAgIGRmLmNvbHVtbnMuYWRkKF9vdXRwdXRbU1ZNX0dFTl9MQUJFTFNfSU5ERVhdKTtcbiAgICAgICAgcmV0dXJuIGRmO1xuICAgIH0pO1xufSAvLyB0ZXN0RGF0YUZvck1hY2hpbmVMZWFybmluZ1xuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG4vKiBTdXBwb3J0IHZlY3RvciBtYWNoaW5lIChTVk0pIHRvb2xzLlxuICAgSXQncyBkZXZlbG9wZWQgZm9yIGFwcGx5aW5nIGluIGNvbWJpbmF0aW9uIHdpdGggREFUQUdST0sgcHJlZGljdGl2ZSB0b29scy5cblxuICAgVHJhaW5pbmcgJiBwcmVkaWN0aW5nIGFyZSBwcm92aWRlZCBieSB3YXNtLWNvbXB1dGF0aW9ucy5cblxuICAgTGVhc3Qgc3F1YXJlIHN1cHBvcnQgdmVjdG9yIG1hY2hpbmUgKExTLVNWTSkgaXMgaW1wbGVtZW50ZWQ6XG4gICAgIFsxXSBTdXlrZW5zLCBKLiwgVmFuZGV3YWxsZSwgSi4gXCJMZWFzdCBTcXVhcmVzIFN1cHBvcnQgVmVjdG9yIE1hY2hpbmUgQ2xhc3NpZmllcnNcIixcbiAgICAgICAgICAgTmV1cmFsIFByb2Nlc3NpbmcgTGV0dGVycyA5LCAyOTMtMzAwICgxOTk5KS4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMjMvQToxMDE4NjI4NjA5NzQyXG4qL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgX3RyYWluQW5kQW5hbHl6ZUxTU1ZNSW5XZWJXb3JrZXIsIF9wcmVkaWN0QnlMU1NWTUluV2ViV29ya2VyIH0gZnJvbSAnLi4vd2FzbS9FREFBUEknO1xuLy8gMS4gQ09OU1RBTlRTXG4vLyBrZXJuZWwgdHlwZXNcbmV4cG9ydCBjb25zdCBMSU5FQVIgPSAwO1xuZXhwb3J0IGNvbnN0IFBPTFlOT01JQUwgPSAxO1xuZXhwb3J0IGNvbnN0IFJCRiA9IDI7XG5leHBvcnQgY29uc3QgU0lHTU9JRCA9IDM7XG4vLyBvdXRwdXQtcmVsYXRlZFxuY29uc3QgQ09ORlVTSU9OX01BVFJfU0laRSA9IDQ7XG5jb25zdCBOT1JNQUxJWkVEX0RBVEFfSU5ERVggPSAwO1xuY29uc3QgTUVBTlNfSU5ERVggPSAxO1xuY29uc3QgU1REX0RFVlNfSU5ERVggPSAyO1xuY29uc3QgTU9ERUxfUEFSQU1TX0lOREVYID0gMztcbmNvbnN0IE1PREVMX1dFSUdIVFNfSU5ERVggPSA0O1xuY29uc3QgUFJFRElDVEVEX0xBQkVMU19JTkRFWCA9IDU7XG5jb25zdCBDT1JSRUNUTkVTU19JTkRFWCA9IDY7XG5jb25zdCBDT05GVVNJT05fTUFUUklYX0lOREVYID0gNztcbmNvbnN0IFRSVUVfUE9TSVRJVkVfSU5ERVggPSAwO1xuY29uc3QgRkFMU0VfTkVHQVRJVkVfSU5ERVggPSAxO1xuY29uc3QgRkFMU0VfUE9TSVRJVkVfSU5ERVggPSAyO1xuY29uc3QgVFJVRV9ORUdBVElWRV9JTkRFWCA9IDM7XG4vLyBrZXJuZWwgcGFyYW1ldGVycyBpbmRlY2VzXG5jb25zdCBSQkZfU0lHTUFfSU5ERVggPSAwO1xuY29uc3QgUE9MWU5PTUlBTF9DX0lOREVYID0gMDtcbmNvbnN0IFBPTFlOT01JQUxfRF9JTkRFWCA9IDE7XG5jb25zdCBTSUdNT0lEX0tBUFBBX0lOREVYID0gMDtcbmNvbnN0IFNJR01PSURfVEhFVEFfSU5ERVggPSAxO1xuLy8gaHlwZXJwYXJhbWV0ZXJzIGxpbWl0c1xuY29uc3QgR0FNTUFfSU5GSU1VTV9MSU1JVCA9IDA7XG5jb25zdCBSQkZfU0lHTUFfSU5GSU1VTV9MSU1JVCA9IDA7XG5jb25zdCBQT0xZTk9NSUFMX0NfSU5GSU1VTV9MSU1JVCA9IDA7XG5jb25zdCBQT0xZTk9NSUFMX0RfSU5GSU1VTV9MSU1JVCA9IDA7XG4vLyBlcnJvciBtZXNzYWdlc1xuY29uc3QgV1JPTkdfR0FNTUFfTUVTU0FHRSA9ICdnYW1tYSBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlLic7XG5jb25zdCBXUk9OR19SQkZfU0lHTUFfTUVTU0FHRSA9ICdzaWdtYSBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlLic7XG5jb25zdCBXUk9OR19QT0xZTk9NSUFMX0NfTUVTU0FHRSA9ICdjIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUuJztcbmNvbnN0IFdST05HX1BPTFlOT01JQUxfRF9NRVNTQUdFID0gJ2QgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4nO1xuY29uc3QgV1JPTkdfS0VSTkVMX01FU1NBR0UgPSAnaW5jb3JyZWN0IGtlcm5lbC4nO1xuLy8gbmFtZXNcbmNvbnN0IExBQkVMUyA9ICdMYWJlbHMnO1xuY29uc3QgUFJFRElDVEVEID0gJ3ByZWRpY3RlZCc7XG5jb25zdCBDT1JSRUNUTkVTUyA9ICdjb3JyZWN0bmVzcyc7XG5jb25zdCBDT05GVVNJT05fTUFUUklYX05BTUUgPSAnQ29uZnVzaW9uIG1hdHJpeCc7XG5jb25zdCBNRUFOID0gJ21lYW4nO1xuY29uc3QgU1REX0RFViA9ICdzdGQgZGV2JztcbmNvbnN0IE1PREVMX1BBUkFNU19OQU1FID0gJ2FscGhhJztcbmNvbnN0IE1PREVMX1dFSUdIVFNfTkFNRSA9ICd3ZWlnaHQnO1xuY29uc3QgR0FNTUEgPSAnZ2FtbWEnO1xuY29uc3QgS0VSTkVMID0gJ2tlcm5lbCc7XG5jb25zdCBLRVJORUxfUEFSQU1TID0gJ2tlcm5lbCBwYXJhbXMnO1xuY29uc3QgS0VSTkVMX1BBUkFNXzEgPSAna2VybmVsIHBhcmFtIDEnO1xuY29uc3QgS0VSTkVMX1BBUkFNXzIgPSAna2VybmVsIHBhcmFtIDInO1xuY29uc3QgRkVBVFVSRVNfQ09VTlRfTkFNRSA9ICdmZWF0dXJlcyBjb3VudCc7XG5jb25zdCBUUkFJTl9TQU1QTEVTX0NPVU5UX05BTUUgPSAndHJhaW4gc2FtcGxlcyBjb3VudCc7XG5jb25zdCBUUkFJTl9FUlJPUiA9ICdUcmFpbiBlcnJvciwlJztcbmNvbnN0IEtFUk5FTF9UWVBFX1RPX05BTUVfTUFQID0gWydsaW5lYXInLCAncG9seW5vbWlhbCcsICdSQkYnLCAnc2lnbW9pZCddO1xuY29uc3QgUE9TSVRJVkVfTkFNRSA9ICdwb3NpdGl2ZSAoUCknO1xuY29uc3QgTkVHQVRJVkVfTkFNRSA9ICduZWdhdGl2ZSAoTiknO1xuY29uc3QgUFJFRElDVEVEX1BPU0lUSVZFX05BTUUgPSAncHJlZGljdGVkIHBvc2l0aXZlIChQUCknO1xuY29uc3QgUFJFRElDVEVEX05FR0FUSVZFX05BTUUgPSAncHJlZGljdGVkIG5lZ2F0aXZlIChQTiknO1xuY29uc3QgU0VOU0lUSVZJVFkgPSAnU2Vuc2l0aXZpdHknO1xuY29uc3QgU1BFQ0lGSUNJVFkgPSAnU3BlY2lmaWNpdHknO1xuY29uc3QgQkFMQU5DRURfQUNDVVJBQ1kgPSAnQmFsYW5jZWQgYWNjdXJhY3knO1xuY29uc3QgUE9TSVRJVkVfUFJFRElDVElWRV9WQUxVRSA9ICdQb3NpdGl2ZSBwcmVkaWNpdHZlIHZhbHVlJztcbmNvbnN0IE5FR0FUSVZFX1BSRURJQ1RJVkVfVkFMVUUgPSAnTmVnYXRpdmUgcHJlZGljaXR2ZSB2YWx1ZSc7XG5jb25zdCBNTF9SRVBPUlQgPSAnTW9kZWwgcmVwb3J0JztcbmNvbnN0IE1MX1JFUE9SVF9QUkVESUNURURfTEFCRUxTID0gJ1ByZWRpY3RlZCBsYWJlbHMnO1xuY29uc3QgTUxfUkVQT1JUX1RSQUlOX0xBQkVMUyA9ICdUcmFpbiBsYWJlbHMnO1xuY29uc3QgTUxfUkVQT1JUX0NPUlJFQ1RORVNTID0gJ1ByZWRpY3Rpb24gY29ycmVjdG5lc3MnO1xuY29uc3QgUFJFRElDVElPTiA9ICdwcmVkaWN0aW9uJztcbi8vIFBhY2svdW5wYWNrIGNvbnN0YW50c1xuY29uc3QgQllURVMgPSA0O1xuY29uc3QgSU5UU19DT1VOVCA9IDM7XG5jb25zdCBLRVJfUEFSQU1TX0NPVU5UID0gMjtcbmNvbnN0IE1PREVMX0tFUk5FTF9JTkRFWCA9IDA7XG5jb25zdCBTQU1QTEVTX0NPVU5UX0lOREVYID0gMTtcbmNvbnN0IEZFQVRVUkVTX0NPVU5UX0lOREVYID0gMjtcbi8vIG1pc2NcbmNvbnN0IElOSVRfVkFMVUUgPSAwOyAvLyBhbnkgbnVtYmVyIGNhbiBiZSB1c2VkXG5jb25zdCBMU19TVk1fQUREX0NPTlNUID0gMTsgLy8gc2VlIFsxXSBmb3IgbW9yZSBkZXRhaWxzXG4vLyAyLiBUT09MU1xuLy8gQ2hlY2sgTFMtU1ZNIGxlYXJuaW5nIGh5cGVycGFyYW1ldGVyc1xuZnVuY3Rpb24gY2hlY2tIeXBlcnBhcmFtZXRlcnMoaHlwZXJwYXJhbWV0ZXJzKSB7XG4gICAgLy8gY2hlY2sgZ2FtbWFcbiAgICBpZiAoaHlwZXJwYXJhbWV0ZXJzLmdhbW1hIDw9IEdBTU1BX0lORklNVU1fTElNSVQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihXUk9OR19HQU1NQV9NRVNTQUdFKTtcbiAgICAvLyBjaGVjayBrZXJuZWwgJiBpdHMgcGFyYW1ldGVyc1xuICAgIHN3aXRjaCAoaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCkge1xuICAgICAgICBjYXNlIExJTkVBUjogLy8gdGhlIGNhc2Ugb2YgbGluZWFyIGtlcm5lbFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFJCRjogLy8gdGhlIGNhc2Ugb2YgUkJGIGtlcm5lbFxuICAgICAgICAgICAgaWYgKGh5cGVycGFyYW1ldGVycy5zaWdtYSA8PSBSQkZfU0lHTUFfSU5GSU1VTV9MSU1JVClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoV1JPTkdfUkJGX1NJR01BX01FU1NBR0UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFBPTFlOT01JQUw6IC8vIHRoZSBjYXNlIG9mIHBvbHlub21pYWwga2VybmVsXG4gICAgICAgICAgICAvLyBjaGVjayBjXG4gICAgICAgICAgICBpZiAoaHlwZXJwYXJhbWV0ZXJzLmNQYXJhbSA8PSBQT0xZTk9NSUFMX0NfSU5GSU1VTV9MSU1JVClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoV1JPTkdfUE9MWU5PTUlBTF9DX01FU1NBR0UpO1xuICAgICAgICAgICAgLy8gY2hlY2sgZFxuICAgICAgICAgICAgaWYgKGh5cGVycGFyYW1ldGVycy5kUGFyYW0gPD0gUE9MWU5PTUlBTF9EX0lORklNVU1fTElNSVQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX1BPTFlOT01JQUxfRF9NRVNTQUdFKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBTSUdNT0lEOiAvLyB0aGUgY2FzZSBvZiBwb2x5bm9taWFsIGtlcm5lbFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBkZWZhdWx0OiAvLyBpbmNvcnJlY3Qga2VybmVsXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoV1JPTkdfS0VSTkVMX01FU1NBR0UpO1xuICAgIH0gLy8gc3dpdGNoICAgIFxufSAvLyBjaGVja0h5cGVycGFyYW1ldGVyc1xuLy8gUmV0dXJuZXMgbGFiZWxzIHByZWRpY3RlZCBieSB0aGUgbW9kZWwgc3BlY2lmaWVkXG5mdW5jdGlvbiBwcmVkaWN0KG1vZGVsLCBkYXRhc2V0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IF9vdXRwdXQ7XG4gICAgICAgIGxldCBfcHJvbWlzZSA9IF9wcmVkaWN0QnlMU1NWTUluV2ViV29ya2VyKG1vZGVsLmtlcm5lbFR5cGUsIG1vZGVsLmtlcm5lbFBhcmFtcywgbW9kZWwubm9ybWFsaXplZFRyYWluRGF0YS5jb2x1bW5zLCBtb2RlbC50cmFpbkxhYmVscywgbW9kZWwubWVhbnMsIG1vZGVsLnN0ZERldnMsIG1vZGVsLm1vZGVsUGFyYW1zLCBtb2RlbC5tb2RlbFdlaWdodHMsIGRhdGFzZXQpO1xuICAgICAgICB5aWVsZCBfcHJvbWlzZS50aGVuKF9yZXN1bHQgPT4geyBfb3V0cHV0ID0gX3Jlc3VsdDsgfSwgX2Vycm9yID0+IHsgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogJHtfZXJyb3J9YCk7IH0pO1xuICAgICAgICByZXR1cm4gX291dHB1dDtcbiAgICB9KTtcbn0gLy8gcHJlZGljdFxuLy8gRXZhbHVhdGUgYWNjdXJhY3kgb2YgdGhlIG1vZGVsXG5mdW5jdGlvbiBldmFsdWF0ZUFjY3VyYWN5KG1vZGVsKSB7XG4gICAgbGV0IGRhdGEgPSBtb2RlbC5jb25mdXNpb25NYXRyaXguZ2V0UmF3RGF0YSgpO1xuICAgIC8vIGhlcmUsIHRoZSBjbGFzc2ljIG5vdGF0aW9uIGlzIHVzZWQgKHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TZW5zaXRpdml0eV9hbmRfc3BlY2lmaWNpdHkpXG4gICAgbGV0IFRQID0gZGF0YVtUUlVFX1BPU0lUSVZFX0lOREVYXTsgLy8gdHJ1ZSBwb3NpdGl2ZVxuICAgIGxldCBUTiA9IGRhdGFbVFJVRV9ORUdBVElWRV9JTkRFWF07IC8vIHRydWUgbmVnYXRpdmVcbiAgICBsZXQgRlAgPSBkYXRhW0ZBTFNFX1BPU0lUSVZFX0lOREVYXTsgLy8gZmFsc2UgcG9zaXRpdmVcbiAgICBsZXQgRk4gPSBkYXRhW0ZBTFNFX05FR0FUSVZFX0lOREVYXTsgLy8gZmFsc2UgbmVnYXRpdmVcbiAgICBsZXQgUCA9IFRQICsgRk47IC8vIHBvc2l0aXZlXG4gICAgbGV0IE4gPSBGUCArIFROOyAvLyBuZWdhdGl2ZVxuICAgIGxldCBUUFIgPSBUUCAvIFA7IC8vIHRydWUgcG9zaXRpdmUgcmF0ZVxuICAgIGxldCBUTlIgPSBUTiAvIE47IC8vIHRydWUgbmVnYXRpdmUgcmF0ZVxuICAgIGxldCBQUFYgPSBUUCAvIChUUCArIEZQKTsgLy8gcG9zaXRpdmUgcHJlZGljaXR2ZSB2YWx1ZVxuICAgIGxldCBOUFYgPSBUTiAvIChUTiArIEZOKTsgLy8gbmVnYXRpdmUgcHJlZGljaXR2ZSB2YWx1ZVxuICAgIGxldCBBQ0MgPSAoVFAgKyBUTikgLyAoUCArIE4pOyAvLyBhY2N1cmFjeVxuICAgIGxldCBCQSA9IChUUFIgKyBUTlIpIC8gMjsgLy8gYmFsYW5jZWQgYWNjdXJhY3lcbiAgICBtb2RlbC5zZW5zaXRpdml0eSA9IFRQUjtcbiAgICBtb2RlbC5zcGVjaWZpY2l0eSA9IFROUjtcbiAgICBtb2RlbC5iYWxhbmNlZEFjY3VyYWN5ID0gQkE7XG4gICAgbW9kZWwucG9zaXRpdmVQcmVkaWNpdHZlVmFsdWUgPSBQUFY7XG4gICAgbW9kZWwubmVnYXRpdmVQcmVkaWNpdHZlVmFsdWUgPSBOUFY7XG4gICAgbW9kZWwudHJhaW5FcnJvciA9ICgxIC0gQUNDKSAqIDEwMDsgLy8gdHJhaW4gZXJyb3IsICVcbn0gLy8gZXZhbHVhdGVBY2N1cmFjeVxuLy8gUmV0dXJucyB0cmFpbmVkIExTLVNWTSBtb2RlbC5cbmZ1bmN0aW9uIHRyYWluQW5kQW5hbHl6ZU1vZGVsKGh5cGVycGFyYW1ldGVycywgZGF0YXNldCwgbGFiZWxzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gY2hlY2sgY29ycmVjdG5lc3Mgb2YgaHlwZXJwYXJhbWV0ZXIgZ2FtbWFcbiAgICAgICAgY2hlY2tIeXBlcnBhcmFtZXRlcnMoaHlwZXJwYXJhbWV0ZXJzKTtcbiAgICAgICAgLy8gY3JlYXRlIGRlZmF1bHQga2VybmVsIHBhcmFtcyBhcnJheVxuICAgICAgICBjb25zdCBrZXJuZWxQYXJhbXNBcnJheSA9IFtJTklUX1ZBTFVFLCBJTklUX1ZBTFVFXTtcbiAgICAgICAgLy8gZmlsbCBrZXJuZWxQYXJhbXNcbiAgICAgICAgc3dpdGNoIChoeXBlcnBhcmFtZXRlcnMua2VybmVsKSB7XG4gICAgICAgICAgICBjYXNlIExJTkVBUjogLy8gbm8ga2VybmVsIHBhcmFtZXRlcnMgaW4gdGhlIGNhc2Ugb2YgbGluZWFyIGtlcm5lbFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBSQkY6IC8vIHNpZ21hIHBhcmFtZXRlciBpbiB0aGUgY2FzZSBvZiBSQkYta2VybmVsXG4gICAgICAgICAgICAgICAga2VybmVsUGFyYW1zQXJyYXlbUkJGX1NJR01BX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy5zaWdtYTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUE9MWU5PTUlBTDogLy8gc2lnbWEgcGFyYW1ldGVyIGluIHRoZSBjYXNlIG9mIHBvbHlub21pYWwga2VybmVsXG4gICAgICAgICAgICAgICAga2VybmVsUGFyYW1zQXJyYXlbUE9MWU5PTUlBTF9DX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy5jUGFyYW07XG4gICAgICAgICAgICAgICAga2VybmVsUGFyYW1zQXJyYXlbUE9MWU5PTUlBTF9EX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy5kUGFyYW07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNJR01PSUQ6IC8vIHNpZ21hIHBhcmFtZXRlciBpbiB0aGUgY2FzZSBvZiBzaWdtb2lkIGtlcm5lbFxuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1NJR01PSURfS0FQUEFfSU5ERVhdID0gaHlwZXJwYXJhbWV0ZXJzLmthcHBhO1xuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1NJR01PSURfVEhFVEFfSU5ERVhdID0gaHlwZXJwYXJhbWV0ZXJzLnRoZXRhO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDogLy8gaW5jb3JyZWN0IGtlcm5lbCBcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoV1JPTkdfS0VSTkVMX01FU1NBR0UpO1xuICAgICAgICB9XG4gICAgICAgIDtcbiAgICAgICAgLy8gY3JlYXRlIGtlcm5lbCBwYXJhbXMgY29sdW1uXG4gICAgICAgIGxldCBrZXJuZWxQYXJhbXMgPSBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEtFUk5FTF9QQVJBTVMsIGtlcm5lbFBhcmFtc0FycmF5KTtcbiAgICAgICAgLy8gY29tcHV0ZSBzaXplIG9mIG1vZGVsIHBhcmFtcyAmIHByZWNvbXB1dGVkIHdlaWd0aHNcbiAgICAgICAgbGV0IHRyYWluQ29scyA9IGRhdGFzZXQudG9MaXN0KCk7XG4gICAgICAgIGxldCBtb2RlbFBhcmFtc0NvdW50ID0gdHJhaW5Db2xzWzBdLmxlbmd0aCArIExTX1NWTV9BRERfQ09OU1Q7XG4gICAgICAgIGxldCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCA9IHRyYWluQ29scy5sZW5ndGggKyBMU19TVk1fQUREX0NPTlNUO1xuICAgICAgICBsZXQgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCA9IENPTkZVU0lPTl9NQVRSX1NJWkU7XG4gICAgICAgIC8vIGNhbGwgd2ViYXNzZW1ibHkgdHJhaW5pbmcgZnVuY3Rpb25cbiAgICAgICAgbGV0IG91dHB1dDtcbiAgICAgICAgbGV0IF9wcm9taXNlID0gX3RyYWluQW5kQW5hbHl6ZUxTU1ZNSW5XZWJXb3JrZXIoaHlwZXJwYXJhbWV0ZXJzLmdhbW1hLCBoeXBlcnBhcmFtZXRlcnMua2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50LCBkYXRhc2V0LCBsYWJlbHMpO1xuICAgICAgICB5aWVsZCBfcHJvbWlzZS50aGVuKF9yZXN1bHQgPT4geyBvdXRwdXQgPSBfcmVzdWx0OyB9LCBfZXJyb3IgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke19lcnJvcn1gKTsgfSk7XG4gICAgICAgIC8vIHJlbmFtZSBvdXRwdXQgY29sdW1uc1xuICAgICAgICBvdXRwdXRbTUVBTlNfSU5ERVhdLm5hbWUgPSBNRUFOO1xuICAgICAgICBvdXRwdXRbU1REX0RFVlNfSU5ERVhdLm5hbWUgPSBTVERfREVWO1xuICAgICAgICBvdXRwdXRbTU9ERUxfUEFSQU1TX0lOREVYXS5uYW1lID0gTU9ERUxfUEFSQU1TX05BTUU7XG4gICAgICAgIG91dHB1dFtNT0RFTF9XRUlHSFRTX0lOREVYXS5uYW1lID0gTU9ERUxfV0VJR0hUU19OQU1FO1xuICAgICAgICBvdXRwdXRbUFJFRElDVEVEX0xBQkVMU19JTkRFWF0ubmFtZSA9IFBSRURJQ1RFRDtcbiAgICAgICAgb3V0cHV0W0NPUlJFQ1RORVNTX0lOREVYXS5uYW1lID0gQ09SUkVDVE5FU1M7XG4gICAgICAgIG91dHB1dFtDT05GVVNJT05fTUFUUklYX0lOREVYXS5uYW1lID0gQ09ORlVTSU9OX01BVFJJWF9OQU1FO1xuICAgICAgICAvLyBjb21wbGV0ZSBtb2RlbFxuICAgICAgICBsZXQgbW9kZWwgPSB7XG4gICAgICAgICAgICB0cmFpbkdhbW1hOiBoeXBlcnBhcmFtZXRlcnMuZ2FtbWEsXG4gICAgICAgICAgICBrZXJuZWxUeXBlOiBoeXBlcnBhcmFtZXRlcnMua2VybmVsLFxuICAgICAgICAgICAga2VybmVsUGFyYW1zOiBrZXJuZWxQYXJhbXMsXG4gICAgICAgICAgICB0cmFpbkxhYmVsczogbGFiZWxzLFxuICAgICAgICAgICAgbm9ybWFsaXplZFRyYWluRGF0YTogREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKG91dHB1dFtOT1JNQUxJWkVEX0RBVEFfSU5ERVhdKSxcbiAgICAgICAgICAgIG1lYW5zOiBvdXRwdXRbTUVBTlNfSU5ERVhdLFxuICAgICAgICAgICAgc3RkRGV2czogb3V0cHV0W1NURF9ERVZTX0lOREVYXSxcbiAgICAgICAgICAgIG1vZGVsUGFyYW1zOiBvdXRwdXRbTU9ERUxfUEFSQU1TX0lOREVYXSxcbiAgICAgICAgICAgIG1vZGVsV2VpZ2h0czogb3V0cHV0W01PREVMX1dFSUdIVFNfSU5ERVhdLFxuICAgICAgICAgICAgcHJlZGljdGVkTGFiZWxzOiBvdXRwdXRbUFJFRElDVEVEX0xBQkVMU19JTkRFWF0sXG4gICAgICAgICAgICBjb3JyZWN0bmVzczogb3V0cHV0W0NPUlJFQ1RORVNTX0lOREVYXSxcbiAgICAgICAgICAgIGNvbmZ1c2lvbk1hdHJpeDogb3V0cHV0W0NPTkZVU0lPTl9NQVRSSVhfSU5ERVhdLFxuICAgICAgICAgICAgdHJhaW5FcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZmVhdHVyZXNDb3VudDogdHJhaW5Db2xzLmxlbmd0aCxcbiAgICAgICAgICAgIHRyYWluU2FtcGxlc0NvdW50OiB0cmFpbkNvbHNbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIGV2YWx1YXRlQWNjdXJhY3kobW9kZWwpO1xuICAgICAgICByZXR1cm4gbW9kZWw7XG4gICAgfSk7XG59IC8vIHRyYWluQW5kQW5hbHl6ZU1vZGVsXG4vLyBXcmFwcGVyIGZvciBjb21iaW5pbmcgdGhlIGZ1bmN0aW9uIFwidHJhaW5BbmRBbmFseXplTW9kZWxcIiB3aXRoIERhdGFncm9rIHByZWRpY2l0dmUgdG9vbHNcbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFpbmVkTW9kZWwoaHlwZXJwYXJhbWV0ZXJzLCBkZiwgcHJlZGljdF9jb2x1bW4pIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgY29sdW1ucyA9IGRmLmNvbHVtbnM7XG4gICAgICAgIGxldCBsYWJlbHMgPSBjb2x1bW5zLmJ5TmFtZShwcmVkaWN0X2NvbHVtbik7XG4gICAgICAgIGNvbHVtbnMucmVtb3ZlKHByZWRpY3RfY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIHlpZWxkIHRyYWluQW5kQW5hbHl6ZU1vZGVsKGh5cGVycGFyYW1ldGVycywgY29sdW1ucywgbGFiZWxzKTtcbiAgICB9KTtcbn1cbi8vIFJldHVybnMgZGF0YWZyYW1lIHdpdGggc2hvcnQgaW5mbyBhYm91dCBtb2RlbFxuZnVuY3Rpb24gZ2V0TW9kZWxJbmZvKG1vZGVsKSB7XG4gICAgbGV0IGtlcm5lbFBhcmFtcyA9IG1vZGVsLmtlcm5lbFBhcmFtcy5nZXRSYXdEYXRhKCk7XG4gICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgR0FNTUEsIFttb2RlbC50cmFpbkdhbW1hXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tU3RyaW5ncyhLRVJORUwsIFtLRVJORUxfVFlQRV9UT19OQU1FX01BUFttb2RlbC5rZXJuZWxUeXBlXV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEtFUk5FTF9QQVJBTV8xLCBba2VybmVsUGFyYW1zWzBdXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgS0VSTkVMX1BBUkFNXzIsIFtrZXJuZWxQYXJhbXNbMV1dKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBGRUFUVVJFU19DT1VOVF9OQU1FLCBbbW9kZWwuZmVhdHVyZXNDb3VudF0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFRSQUlOX1NBTVBMRVNfQ09VTlRfTkFNRSwgW21vZGVsLnRyYWluU2FtcGxlc0NvdW50XSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgVFJBSU5fRVJST1IsIFttb2RlbC50cmFpbkVycm9yXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgQkFMQU5DRURfQUNDVVJBQ1ksIFttb2RlbC5iYWxhbmNlZEFjY3VyYWN5XSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgU0VOU0lUSVZJVFksIFttb2RlbC5zZW5zaXRpdml0eV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFNQRUNJRklDSVRZLCBbbW9kZWwuc3BlY2lmaWNpdHldKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBQT1NJVElWRV9QUkVESUNUSVZFX1ZBTFVFLCBbbW9kZWwucG9zaXRpdmVQcmVkaWNpdHZlVmFsdWVdKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBORUdBVElWRV9QUkVESUNUSVZFX1ZBTFVFLCBbbW9kZWwubmVnYXRpdmVQcmVkaWNpdHZlVmFsdWVdKVxuICAgIF0pO1xufVxuLy8gR2V0IGRhdGFmcmFtZSB3aXRoIGNvbmZ1c2lvbiBtYXRyaXhcbmZ1bmN0aW9uIGdldENvbmZ1c2lvbk1hdHJpeERGKG1vZGVsKSB7XG4gICAgbGV0IGRhdGEgPSBtb2RlbC5jb25mdXNpb25NYXRyaXguZ2V0UmF3RGF0YSgpO1xuICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJycsIFtQT1NJVElWRV9OQU1FLCBORUdBVElWRV9OQU1FXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnaW50JywgUFJFRElDVEVEX1BPU0lUSVZFX05BTUUsIFtkYXRhW1RSVUVfUE9TSVRJVkVfSU5ERVhdLCBkYXRhW0ZBTFNFX1BPU0lUSVZFX0lOREVYXV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2ludCcsIFBSRURJQ1RFRF9ORUdBVElWRV9OQU1FLCBbZGF0YVtGQUxTRV9ORUdBVElWRV9JTkRFWF0sIGRhdGFbVFJVRV9ORUdBVElWRV9JTkRFWF1dKVxuICAgIF0pO1xufVxuLy8gU2hvdyB0cmFpbmluZyByZXBvcnRcbmV4cG9ydCBmdW5jdGlvbiBzaG93VHJhaW5SZXBvcnQoZGYsIG1vZGVsKSB7XG4gICAgZGYubmFtZSA9IE1MX1JFUE9SVDtcbiAgICBkZi5jb2x1bW5zLmFkZChtb2RlbC50cmFpbkxhYmVscyk7XG4gICAgZGYuY29sdW1ucy5hZGQobW9kZWwucHJlZGljdGVkTGFiZWxzKTtcbiAgICBkZi5jb2x1bW5zLmFkZChtb2RlbC5jb3JyZWN0bmVzcyk7XG4gICAgbGV0IGRmVmlldyA9IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGRmKTtcbiAgICBkZlZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5mb3JtKGdldE1vZGVsSW5mbyhtb2RlbCkpKTtcbiAgICBkZlZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5zY2F0dGVyUGxvdChkZiwgeyB0aXRsZTogTUxfUkVQT1JUX1BSRURJQ1RFRF9MQUJFTFMsXG4gICAgICAgIGNvbG9yOiBtb2RlbC5wcmVkaWN0ZWRMYWJlbHMubmFtZVxuICAgIH0pKTtcbiAgICBkZlZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5zY2F0dGVyUGxvdChkZiwgeyB0aXRsZTogTUxfUkVQT1JUX1RSQUlOX0xBQkVMUyxcbiAgICAgICAgY29sb3I6IG1vZGVsLnRyYWluTGFiZWxzLm5hbWVcbiAgICB9KSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuZ3JpZChnZXRDb25mdXNpb25NYXRyaXhERihtb2RlbCkpKTtcbiAgICBkZlZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5zY2F0dGVyUGxvdChkZiwgeyB0aXRsZTogTUxfUkVQT1JUX0NPUlJFQ1RORVNTLFxuICAgICAgICBjb2xvcjogbW9kZWwuY29ycmVjdG5lc3MubmFtZVxuICAgIH0pKTtcbn0gLy8gc2hvd1RyYWluUmVwb3J0XG4vLyBSZXR1cm5zIHRyYWluZWQgbW9kZWwgcGFja2VkIGludG8gVUludDhBcnJheVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhY2tlZE1vZGVsKG1vZGVsKSB7XG4gICAgLy8gZ2V0IHByaW5jaXBhbCBkYXRhXG4gICAgbGV0IGRhdGFDb2xzID0gbW9kZWwubm9ybWFsaXplZFRyYWluRGF0YS5jb2x1bW5zO1xuICAgIGxldCBzYW1wbGVzQ291bnQgPSBtb2RlbC50cmFpblNhbXBsZXNDb3VudDtcbiAgICBsZXQgZmVhdHVyZXNDb3VudCA9IG1vZGVsLmZlYXR1cmVzQ291bnQ7XG4gICAgLypsZXQgYnVmZmVyU2l6ZSA9IEJZVEVTICogKDcgKyBmZWF0dXJlc0NvdW50ICogc2FtcGxlc0NvdW50XG4gICAgICArIDMgKiBmZWF0dXJlc0NvdW50ICsgMiAqIHNhbXBsZXNDb3VudCk7Ki9cbiAgICAvLyBjb21wdXRlIHNpemUgb2YgcGFja2VkIG1vZGVsXG4gICAgbGV0IGJ1ZmZlclNpemUgPSBCWVRFUyAqIChJTlRTX0NPVU5UICsgS0VSX1BBUkFNU19DT1VOVCArXG4gICAgICAgIHNhbXBsZXNDb3VudCArIGZlYXR1cmVzQ291bnQgKyBmZWF0dXJlc0NvdW50ICsgc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVFxuICAgICAgICArIGZlYXR1cmVzQ291bnQgKyBMU19TVk1fQUREX0NPTlNUICsgZmVhdHVyZXNDb3VudCAqIHNhbXBsZXNDb3VudCk7XG4gICAgLy8gcGFja2VkIG1vZGVsXG4gICAgbGV0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlclNpemUpO1xuICAgIGxldCBidWZmZXIgPSByZXN1bHQuYnVmZmVyO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIC8vIHBhY2sga2VybmVsIHR5cGUgYW5kIHNpemVzXG4gICAgbGV0IGludHMgPSBuZXcgSW50MzJBcnJheShidWZmZXIsIG9mZnNldCwgSU5UU19DT1VOVCk7XG4gICAgaW50c1tNT0RFTF9LRVJORUxfSU5ERVhdID0gbW9kZWwua2VybmVsVHlwZTtcbiAgICBpbnRzW1NBTVBMRVNfQ09VTlRfSU5ERVhdID0gc2FtcGxlc0NvdW50O1xuICAgIGludHNbRkVBVFVSRVNfQ09VTlRfSU5ERVhdID0gZmVhdHVyZXNDb3VudDtcbiAgICBvZmZzZXQgKz0gSU5UU19DT1VOVCAqIEJZVEVTO1xuICAgIC8vIHBhY2sga2VybmVsIHBhcmFtZXRlcnNcbiAgICBsZXQgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgS0VSX1BBUkFNU19DT1VOVCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC5rZXJuZWxQYXJhbXMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gS0VSX1BBUkFNU19DT1VOVCAqIEJZVEVTO1xuICAgIC8vIHBhY2sgcGFjayBsYWJlbHMgb2YgdHJhaW5pbmcgZGF0YVxuICAgIGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIHNhbXBsZXNDb3VudCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC50cmFpbkxhYmVscy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSBzYW1wbGVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBwYWNrIG1lYW4gdmFsdWVzIG9mIHRyYWluaW5nIGRhdGFcbiAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLm1lYW5zLmdldFJhd0RhdGEoKSk7XG4gICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBwYWNrIHN0YW5kYXJkIGRldmlhdGlvbnMgb2YgdHJhaW5pbmcgZGF0YVxuICAgIGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwuc3RkRGV2cy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgLy8gcGFjayBtb2RlbCBwYXJhbXRlcnNcbiAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBzYW1wbGVzQ291bnQgKyBMU19TVk1fQUREX0NPTlNUKTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLm1vZGVsUGFyYW1zLmdldFJhd0RhdGEoKSk7XG4gICAgb2Zmc2V0ICs9IChzYW1wbGVzQ291bnQgKyBMU19TVk1fQUREX0NPTlNUKSAqIEJZVEVTO1xuICAgIC8vIHBhY2sgbW9kZWwncyBwcmVjb21wdXRlZCB3ZWlnaHRzXG4gICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgZmVhdHVyZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwubW9kZWxXZWlnaHRzLmdldFJhd0RhdGEoKSk7XG4gICAgb2Zmc2V0ICs9IChmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkgKiBCWVRFUztcbiAgICAvLyBwYWNrIHRyYWluaW5nIGRhdGFzZXRcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBkYXRhQ29scykge1xuICAgICAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KTtcbiAgICAgICAgZmxvYXRzLnNldChjb2wuZ2V0UmF3RGF0YSgpKTtcbiAgICAgICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn0gLy8gZ2V0UGFja2VkTW9kZWxcbi8vIFJldHVybnMgdW5wYWNrZWQgbW9kZWxcbmZ1bmN0aW9uIGdldFVucGFja2VkTW9kZWwocGFja2VkTW9kZWwpIHtcbiAgICBsZXQgbW9kZWxCeXRlcyA9IHBhY2tlZE1vZGVsLmJ1ZmZlcjtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAvLyBleHRyYWN0IGtlcm5lbCB0eXBlIGFuZCBzaXplc1xuICAgIGxldCBoZWFkZXIgPSBuZXcgSW50MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIElOVFNfQ09VTlQpO1xuICAgIG9mZnNldCArPSBJTlRTX0NPVU5UICogQllURVM7XG4gICAgbGV0IHNhbXBsZXNDb3VudCA9IGhlYWRlcltTQU1QTEVTX0NPVU5UX0lOREVYXTtcbiAgICBsZXQgZmVhdHVyZXNDb3VudCA9IGhlYWRlcltGRUFUVVJFU19DT1VOVF9JTkRFWF07XG4gICAgLy8gZXh0cmFjdCBwYXJhbWV0ZXJzIG9mIGtlcm5lbFxuICAgIGNvbnN0IGtlcm5lbFBhcmFtcyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KEtFUk5FTF9QQVJBTVMsIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBLRVJfUEFSQU1TX0NPVU5UKSk7XG4gICAgb2Zmc2V0ICs9IEtFUl9QQVJBTVNfQ09VTlQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IHRyYWluaW5nIGxhYmVsc1xuICAgIGNvbnN0IHRyYWluTGFiZWxzID0gREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoTEFCRUxTLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgc2FtcGxlc0NvdW50KSk7XG4gICAgb2Zmc2V0ICs9IHNhbXBsZXNDb3VudCAqIEJZVEVTO1xuICAgIC8vIGV4dHJhY3QgbWVhbiB2YWx1ZXMgb2YgdHJhaW5pbmcgZGF0YVxuICAgIGNvbnN0IG1lYW5zID0gREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoTUVBTiwgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQpKTtcbiAgICBvZmZzZXQgKz0gZmVhdHVyZXNDb3VudCAqIEJZVEVTO1xuICAgIC8vIGV4dHJhY3Qgc3RhbmRhcmQgZGV2aWF0aW9ucyBvZiB0cmFpbmluZyBkYXRhXG4gICAgY29uc3Qgc3RkRGV2cyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KFNURF9ERVYsIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KSk7XG4gICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IHBhcmFtZXRlcnMgb2YgbW9kZWxcbiAgICBjb25zdCBtb2RlbFBhcmFtcyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KE1PREVMX1BBUkFNU19OQU1FLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkpO1xuICAgIG9mZnNldCArPSAoc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IG1vZGVsJ3MgcHJlY29tcHV0ZWQgd2VpZ2h0c1xuICAgIGNvbnN0IG1vZGVsV2VpZ2h0cyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KE1PREVMX1dFSUdIVFNfTkFNRSwgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQgKyBMU19TVk1fQUREX0NPTlNUKSk7XG4gICAgb2Zmc2V0ICs9IChmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IHRyYWluaW5nIGRhdGEgY29sdW1uc1xuICAgIGxldCBkYXRhQ29scyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtcGxlc0NvdW50OyBpKyspIHtcbiAgICAgICAgZGF0YUNvbHMucHVzaChERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShpLnRvU3RyaW5nKCksIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KSkpO1xuICAgICAgICBvZmZzZXQgKz0gZmVhdHVyZXNDb3VudCAqIEJZVEVTO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkVHJhaW5EYXRhID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGRhdGFDb2xzKTtcbiAgICBsZXQgbW9kZWwgPSB7IGtlcm5lbFR5cGU6IGhlYWRlcltNT0RFTF9LRVJORUxfSU5ERVhdLFxuICAgICAgICBrZXJuZWxQYXJhbXM6IGtlcm5lbFBhcmFtcyxcbiAgICAgICAgdHJhaW5MYWJlbHM6IHRyYWluTGFiZWxzLFxuICAgICAgICBtZWFuczogbWVhbnMsXG4gICAgICAgIHN0ZERldnM6IHN0ZERldnMsXG4gICAgICAgIG1vZGVsUGFyYW1zOiBtb2RlbFBhcmFtcyxcbiAgICAgICAgbW9kZWxXZWlnaHRzOiBtb2RlbFdlaWdodHMsXG4gICAgICAgIG5vcm1hbGl6ZWRUcmFpbkRhdGE6IG5vcm1hbGl6ZWRUcmFpbkRhdGFcbiAgICB9O1xuICAgIHJldHVybiBtb2RlbDtcbn0gLy8gZ2V0VW5wYWNrZWRNb2RlbFxuLy8gV3JhcHBlciBmb3IgY29tYmluaW5nIHRoZSBmdW5jdGlvbiBcInByZWRpY3RcIiB3aXRoIERhdGFncm9rIHByZWRpY2l0dmUgdG9vbHNcbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmVkaWN0aW9uKGRmLCBwYWNrZWRNb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCBtb2RlbCA9IGdldFVucGFja2VkTW9kZWwobmV3IFVpbnQ4QXJyYXkocGFja2VkTW9kZWwpKTtcbiAgICAgICAgbGV0IHJlcyA9IHlpZWxkIHByZWRpY3QobW9kZWwsIGRmLmNvbHVtbnMpO1xuICAgICAgICByZXMubmFtZSA9IFBSRURJQ1RJT047XG4gICAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW3Jlc10pO1xuICAgIH0pO1xufSAvLyBnZXRQcmVkaWN0aW9uXG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbi8qIERvIG5vdCBjaGFuZ2UgdGhlc2UgaW1wb3J0IGxpbmVzIHRvIG1hdGNoIGV4dGVybmFsIG1vZHVsZXMgaW4gd2VicGFjayBjb25maWd1cmF0aW9uICovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgRGVtb1NjcmlwdCB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdHV0b3JpYWxzL3NyYy9kZW1vLXNjcmlwdCc7XG5pbXBvcnQgeyBfaW5pdEVEQUFQSSB9IGZyb20gJy4uL3dhc20vRURBQVBJJztcbmltcG9ydCB7IGNvbXB1dGVQQ0EsIGNvbXB1dGVQTFMgfSBmcm9tICcuL0VEQXRvb2xzJztcbmltcG9ydCB7IHJlbmFtZVBDQWNvbHVtbnMsIGFkZFBMU3Zpc3VhbGl6YXRpb24sIHJlZ3Jlc3Npb25Db2VmZmljaWVudHNCYXJDaGFydCwgc2NvcmVzU2NhdHRlclBsb3QsIHByZWRpY3RlZFZlcnN1c1JlZmVyZW5jZVNjYXR0ZXJQbG90IH0gZnJvbSAnLi9FREF1aSc7XG5pbXBvcnQgeyBjYXJzRGF0YWZyYW1lLCB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uIH0gZnJvbSAnLi9kYXRhR2VuZXJhdG9ycyc7XG5pbXBvcnQgeyBMSU5FQVIsIFJCRiwgUE9MWU5PTUlBTCwgU0lHTU9JRCwgZ2V0VHJhaW5lZE1vZGVsLCBnZXRQcmVkaWN0aW9uLCBzaG93VHJhaW5SZXBvcnQsIGdldFBhY2tlZE1vZGVsIH0gZnJvbSAnLi9zdm0nO1xuZXhwb3J0IGNvbnN0IF9wYWNrYWdlID0gbmV3IERHLlBhY2thZ2UoKTtcbi8vbmFtZTogaW5mb1xuZXhwb3J0IGZ1bmN0aW9uIGluZm8oKSB7XG4gICAgZ3Jvay5zaGVsbC5pbmZvKF9wYWNrYWdlLndlYlJvb3QpO1xufVxuLy90YWdzOiBpbml0XG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfaW5pdEVEQUFQSSgpO1xuICAgIH0pO1xufVxuLy90b3AtbWVudTogVG9vbHMgfCBEYXRhIFNjaWVuY2UgfCBQcmluY2lwYWwgQ29tcG9uZW50IEFuYWx5c2lzLi4uXG4vL25hbWU6IFBDQVxuLy9kZXNjcmlwdGlvbjogUHJpbmNpcGFsIGNvbXBvbmVudCBhbmFseXNpcyAoUENBKS5cbi8vaW5wdXQ6IGRhdGFmcmFtZSB0YWJsZVxuLy9pbnB1dDogY29sdW1uX2xpc3QgZmVhdHVyZXNcbi8vaW5wdXQ6IGludCBjb21wb25lbnRzID0gMlxuLy9pbnB1dDogYm9vbCBjZW50ZXIgPSB0cnVlXG4vL2lucHV0OiBib29sIHNjYWxlID0gdHJ1ZVxuLy9vdXRwdXQ6IGRhdGFmcmFtZSByZXN1bHQge2FjdGlvbjpqb2luKHRhYmxlKX1cbmV4cG9ydCBmdW5jdGlvbiBQQ0EodGFibGUsIGZlYXR1cmVzLCBjb21wb25lbnRzLCBjZW50ZXIsIHNjYWxlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHJlbmFtZVBDQWNvbHVtbnMoeWllbGQgY29tcHV0ZVBDQSh0YWJsZSwgZmVhdHVyZXMsIGNvbXBvbmVudHMsIGNlbnRlciwgc2NhbGUpKTtcbiAgICB9KTtcbn1cbi8vdG9wLW1lbnU6IFRvb2xzIHwgRGF0YSBTY2llbmNlIHwgTXVsdGl2YXJpYXRlIEFuYWx5c2lzIChQTFMpLi4uXG4vL25hbWU6IE11bHRpdmFyaWF0ZSBBbmFseXNpcyAoUExTKVxuLy9kZXNjcmlwdGlvbjogUGFydGlhbCBsZWFzdCBzcXVhcmUgcmVncmVzc2lvbiAoUExTKS5cbi8vaW5wdXQ6IGRhdGFmcmFtZSB0YWJsZVxuLy9pbnB1dDogY29sdW1uIG5hbWVzXG4vL2lucHV0OiBjb2x1bW5fbGlzdCBmZWF0dXJlc1xuLy9pbnB1dDogY29sdW1uIHByZWRpY3Rcbi8vaW5wdXQ6IGludCBjb21wb25lbnRzID0gM1xuZXhwb3J0IGZ1bmN0aW9uIFBMUyh0YWJsZSwgbmFtZXMsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgcGxzUmVzdWx0cyA9IHlpZWxkIGNvbXB1dGVQTFModGFibGUsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzKTtcbiAgICAgICAgYWRkUExTdmlzdWFsaXphdGlvbih0YWJsZSwgbmFtZXMsIGZlYXR1cmVzLCBwcmVkaWN0LCBwbHNSZXN1bHRzKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogTVZBIGRlbW9cbi8vZGVzY3JpcHRpb246IE11bHRpZGltZW5zaW9uYWwgZGF0YSBhbmFseXNpcyB1c2luZyBwYXJ0aWFsIGxlYXN0IHNxdWFyZXMgKFBMUykgcmVncmVzc2lvbi4gSXQgcmVkdWNlcyB0aGUgcHJlZGljdG9ycyB0byBhIHNtYWxsZXIgc2V0IG9mIHVuY29ycmVsYXRlZCBjb21wb25lbnRzIGFuZCBwZXJmb3JtcyBsZWFzdCBzcXVhcmVzIHJlZ3Jlc3Npb24gb24gdGhlbS5cbi8vbWV0YS5kZW1vUGF0aDogQ29tcHV0ZSB8IE11bHRpdmFyaWF0ZSBhbmFseXNpc1xuLy9tZXRhLmlzRGVtb1NjcmlwdDogVHJ1ZVxuZXhwb3J0IGZ1bmN0aW9uIGRlbW9NdWx0aXZhcmlhdGVBbmFseXNpcygpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkZW1vU2NyaXB0ID0gbmV3IERlbW9TY3JpcHQoJ1BhcnRpYWwgbGVhc3Qgc3F1YXJlcyByZWdyZXNzaW9uJywgJ0FuYWx5c2lzIG9mIG11bHRpZGltZW5zaW9uYWwgZGF0YS4nKTtcbiAgICAgICAgY29uc3QgY2FycyA9IGNhcnNEYXRhZnJhbWUoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IDM7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gY2Fycy5jb2x1bW5zLmJ5TmFtZSgnbW9kZWwnKTtcbiAgICAgICAgY29uc3QgcHJlZGljdCA9IGNhcnMuY29sdW1ucy5ieU5hbWUoJ3ByaWNlJyk7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVzID0gY2Fycy5jb2x1bW5zLnJlbW92ZSgncHJpY2UnKS5yZW1vdmUoJ21vZGVsJyk7XG4gICAgICAgIGNvbnN0IHBsc091dHB1dCA9IHlpZWxkIGNvbXB1dGVQTFMoY2FycywgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBzb3VyY2VDYXJzID0gY2Fyc0RhdGFmcmFtZSgpO1xuICAgICAgICBzb3VyY2VDYXJzLm5hbWUgPSAnQ2Fycyc7XG4gICAgICAgIGxldCB2aWV3O1xuICAgICAgICBsZXQgZGlhbG9nO1xuICAgICAgICB5aWVsZCBkZW1vU2NyaXB0XG4gICAgICAgICAgICAuc3RlcCgnRGF0YScsICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KHNvdXJjZUNhcnMpO1xuICAgICAgICAgICAgdmlldyA9IGdyb2suc2hlbGwuZ2V0VGFibGVWaWV3KHNvdXJjZUNhcnMubmFtZSk7XG4gICAgICAgIH0pLCB7IGRlc2NyaXB0aW9uOiAnRWFjaCBjYXIgaGFzIG1hbnkgZmVhdHVyZXMgLSBwYXR0ZXJucyBleHRyYWN0aW9uIGlzIGNvbXBsaWNhdGVkLicsIGRlbGF5OiAwIH0pXG4gICAgICAgICAgICAuc3RlcCgnTW9kZWwnLCAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBkaWFsb2cgPSB1aS5kaWFsb2coeyB0aXRsZTogJ011bHRpdmFyaWF0ZSBBbmFseXNpcyAoUExTKScgfSlcbiAgICAgICAgICAgICAgICAuYWRkKHVpLnRhYmxlSW5wdXQoJ1RhYmxlJywgc291cmNlQ2FycykpXG4gICAgICAgICAgICAgICAgLmFkZCh1aS5jb2x1bW5zSW5wdXQoJ0ZlYXR1cmVzJywgY2FycywgZmVhdHVyZXMudG9MaXN0LCB7IGF2YWlsYWJsZTogdW5kZWZpbmVkLCBjaGVja2VkOiBmZWF0dXJlcy5uYW1lcygpIH0pKVxuICAgICAgICAgICAgICAgIC5hZGQodWkuY29sdW1uSW5wdXQoJ05hbWVzJywgY2FycywgbmFtZXMsIHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgLmFkZCh1aS5jb2x1bW5JbnB1dCgnUHJlZGljdCcsIGNhcnMsIHByZWRpY3QsIHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgLmFkZCh1aS5pbnRJbnB1dCgnQ29tcG9uZW50cycsIGNvbXBvbmVudHMsIHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgLm9uT0soKCkgPT4ge1xuICAgICAgICAgICAgICAgIGdyb2suc2hlbGwuaW5mbygnTXVsdGl2YXJpYXRlIGFuYWx5c2lzIGhhcyBiZWVuIGFscmVhZHkgcGVyZm9ybWVkLicpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc2hvdyh7IHg6IDQwMCwgeTogMTQwIH0pO1xuICAgICAgICB9KSwgeyBkZXNjcmlwdGlvbjogJ1ByZWRpY3QgY2FyIHByaWNlIGJ5IGl0cyBvdGhlciBmZWF0dXJlcy4nLCBkZWxheTogMCB9KVxuICAgICAgICAgICAgLnN0ZXAoJ1JlZ3Jlc3Npb24gY29lZmZjaWNpZW50cycsICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGRpYWxvZy5jbG9zZSgpO1xuICAgICAgICAgICAgdmlldy5hZGRWaWV3ZXIocmVncmVzc2lvbkNvZWZmaWNpZW50c0JhckNoYXJ0KGZlYXR1cmVzLCBwbHNPdXRwdXRbMV0pKTtcbiAgICAgICAgfSksIHsgZGVzY3JpcHRpb246ICdUaGUgZmVhdHVyZSBcImRpZXNlbFwiIGFmZmVjdHMgdGhlIHByaWNlIHRoZSBtb3N0LicsIGRlbGF5OiAwIH0pXG4gICAgICAgICAgICAuc3RlcCgnU2NvcmVzJywgKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyB2aWV3LmFkZFZpZXdlcihzY29yZXNTY2F0dGVyUGxvdChuYW1lcywgcGxzT3V0cHV0WzJdLCBwbHNPdXRwdXRbM10pKTsgfSksIHsgZGVzY3JpcHRpb246ICdTaW1pbGFyaXRpZXMgJiBkaXNzaW1pbGFyaXRpZXM6IGFsZmFyb21lbyBhbmQgbWVyY2VkZXMgYXJlIGRpZmZlcmVudC4nLCBkZWxheTogMCB9KVxuICAgICAgICAgICAgLnN0ZXAoJ1ByZWRpY3Rpb24nLCAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHZpZXcuYWRkVmlld2VyKHByZWRpY3RlZFZlcnN1c1JlZmVyZW5jZVNjYXR0ZXJQbG90KG5hbWVzLCBwcmVkaWN0LCBwbHNPdXRwdXRbMF0pKTsgfSksIHsgZGVzY3JpcHRpb246ICdDbG9zZXIgdG8gdGhlIGxpbmUgbWVhbnMgYmV0dGVyIHByaWNlIHByZWRpY3Rpb24uJywgZGVsYXk6IDAgfSlcbiAgICAgICAgICAgIC5zdGFydCgpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBHZW5lcmF0ZSBsaW5lYXIgc2VwYXJhYmxlIGRhdGFzZXRcbi8vZGVzY3JpcHRpb246IEdlbmVyYXRlcyBsaW5lYXIgc2VwYXJibGUgZGF0YXNldCBmb3IgdGVzdGluZyBiaW5hcnkgY2xhc3NpZmljYXRvcnMuXG4vL2lucHV0OiBzdHJpbmcgbmFtZSA9ICdEYXRhJyB7Y2FwdGlvbjogbmFtZTsgY2F0ZWdvcnk6IERhdGFzZXR9XG4vL2lucHV0OiBpbnQgc2FtcGxlc0NvdW50ID0gMTAwMCB7Y2FwdGlvbjogc2FtcGxlczsgY2F0ZWdvcnk6IFNpemV9XG4vL2lucHV0OiBpbnQgZmVhdHVyZXNDb3VudCA9IDIge2NhcHRpb246IGZlYXR1cmVzOyBjYXRlZ29yeTogU2l6ZX1cbi8vaW5wdXQ6IGRvdWJsZSBtaW4gPSAtMzkge2NhcHRpb246IG1pbjsgY2F0ZWdvcnk6IFJhbmdlfVxuLy9pbnB1dDogZG91YmxlIG1heCA9IDE3MyB7Y2FwdGlvbjogbWF4OyBjYXRlZ29yeTogUmFuZ2V9XG4vL2lucHV0OiBkb3VibGUgdmlvbGF0b3JzUGVyY2VudGFnZSA9IDUge2NhcHRpb246IHZpb2xhdG9yczsgdW5pdHM6ICU7IGNhdGVnb3J5OiBEYXRhc2V0fVxuLy9vdXRwdXQ6IGRhdGFmcmFtZSBkZlxuZXhwb3J0IGZ1bmN0aW9uIHRlc3REYXRhTGluZWFyU2VwYXJhYmxlKG5hbWUsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgdGVzdERhdGFGb3JCaW5hcnlDbGFzc2lmaWNhdGlvbihMSU5FQVIsIFswLCAwXSwgbmFtZSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgfSk7XG59XG4vL25hbWU6IEdlbmVyYXRlIGxpbmVhciBub24tc2VwYXJhYmxlIGRhdGFzZXRcbi8vZGVzY3JpcHRpb246IEdlbmVyYXRlcyBsaW5lYXIgbm9uLXNlcGFyYmxlIGRhdGFzZXQgZm9yIHRlc3RpbmcgYmluYXJ5IGNsYXNzaWZpY2F0b3JzLlxuLy9pbnB1dDogc3RyaW5nIG5hbWUgPSAnRGF0YScge2NhcHRpb246IG5hbWU7IGNhdGVnb3J5OiBEYXRhc2V0fVxuLy9pbnB1dDogZG91YmxlIHNpZ21hID0gOTAgIHtjYXB0aW9uOiBzaWdtYTsgY2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc30gW1JCRi1rZXJuZWwgcGFyYW1hdGVyXVxuLy9pbnB1dDogaW50IHNhbXBsZXNDb3VudCA9IDEwMDAge2NhcHRpb246IHNhbXBsZXM7IGNhdGVnb3J5OiBTaXplfVxuLy9pbnB1dDogaW50IGZlYXR1cmVzQ291bnQgPSAyIHtjYXB0aW9uOiBmZWF0dXJlczsgY2F0ZWdvcnk6IFNpemV9XG4vL2lucHV0OiBkb3VibGUgbWluID0gLTM5IHtjYXB0aW9uOiBtaW47IGNhdGVnb3J5OiBSYW5nZX1cbi8vaW5wdXQ6IGRvdWJsZSBtYXggPSAxNzMge2NhcHRpb246IG1heDsgY2F0ZWdvcnk6IFJhbmdlfVxuLy9pbnB1dDogZG91YmxlIHZpb2xhdG9yc1BlcmNlbnRhZ2UgPSA1IHtjYXB0aW9uOiB2aW9sYXRvcnM7IHVuaXRzOiAlOyBjYXRlZ29yeTogRGF0YXNldH1cbi8vb3V0cHV0OiBkYXRhZnJhbWUgZGZcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0RGF0YUxpbmVhck5vblNlcGFyYWJsZShuYW1lLCBzaWdtYSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uKFJCRiwgW3NpZ21hLCAwXSwgbmFtZSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgfSk7XG59XG4vL25hbWU6IHRyYWluTGluZWFyS2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBsaW5lYXIga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkb3VibGUgZ2FtbWEgPSAxLjAge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBib29sIHRvU2hvd1JlcG9ydCA9IGZhbHNlIHtjYXB0aW9uOiB0byBzaG93IHJlcG9ydDsgY2F0ZWdvcnk6IFJlcG9ydH1cbi8vb3V0cHV0OiBkeW5hbWljIG1vZGVsXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5MaW5lYXJLZXJuZWxTVk0oZGYsIHByZWRpY3RfY29sdW1uLCBnYW1tYSwgdG9TaG93UmVwb3J0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdHJhaW5lZE1vZGVsID0geWllbGQgZ2V0VHJhaW5lZE1vZGVsKHsgZ2FtbWE6IGdhbW1hLCBrZXJuZWw6IExJTkVBUiB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogYXBwbHlMaW5lYXJLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IGxpbmVhciBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMaW5lYXJLZXJuZWxTVk0oZGYsIG1vZGVsKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHlpZWxkIGdldFByZWRpY3Rpb24oZGYsIG1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogdHJhaW5SQkZrZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IFJCRi1rZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiB0cmFpblxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vaW5wdXQ6IGRvdWJsZSBnYW1tYSA9IDEuMCB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGRvdWJsZSBzaWdtYSA9IDEuNSB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGJvb2wgdG9TaG93UmVwb3J0ID0gZmFsc2Uge2NhcHRpb246IHRvIHNob3cgcmVwb3J0OyBjYXRlZ29yeTogUmVwb3J0fVxuLy9vdXRwdXQ6IGR5bmFtaWMgbW9kZWxcbmV4cG9ydCBmdW5jdGlvbiB0cmFpblJCRmtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4sIGdhbW1hLCBzaWdtYSwgdG9TaG93UmVwb3J0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdHJhaW5lZE1vZGVsID0geWllbGQgZ2V0VHJhaW5lZE1vZGVsKHsgZ2FtbWE6IGdhbW1hLCBrZXJuZWw6IFJCRiwgc2lnbWE6IHNpZ21hIH0sIGRmLCBwcmVkaWN0X2NvbHVtbik7XG4gICAgICAgIGlmICh0b1Nob3dSZXBvcnQpXG4gICAgICAgICAgICBzaG93VHJhaW5SZXBvcnQoZGYsIHRyYWluZWRNb2RlbCk7XG4gICAgICAgIHJldHVybiBnZXRQYWNrZWRNb2RlbCh0cmFpbmVkTW9kZWwpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBhcHBseVJCRmtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogUkJGLWtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IGFwcGx5XG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IGR5bmFtaWMgbW9kZWxcbi8vb3V0cHV0OiBkYXRhZnJhbWUgdGFibGVcbmV4cG9ydCBmdW5jdGlvbiBhcHBseVJCRmtlcm5lbFNWTShkZiwgbW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgZ2V0UHJlZGljdGlvbihkZiwgbW9kZWwpO1xuICAgIH0pO1xufVxuLy9uYW1lOiB0cmFpblBvbHlub21pYWxLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IHBvbHlub21pYWwga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkb3VibGUgZ2FtbWEgPSAxLjAge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgYyA9IDEge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgZCA9IDIge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBib29sIHRvU2hvd1JlcG9ydCA9IGZhbHNlIHtjYXB0aW9uOiB0byBzaG93IHJlcG9ydDsgY2F0ZWdvcnk6IFJlcG9ydH1cbi8vb3V0cHV0OiBkeW5hbWljIG1vZGVsXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNKGRmLCBwcmVkaWN0X2NvbHVtbiwgZ2FtbWEsIGMsIGQsIHRvU2hvd1JlcG9ydCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBQT0xZTk9NSUFMLCBjUGFyYW06IGMsIGRQYXJhbTogZCB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn0gLy8gdHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNXG4vL25hbWU6IGFwcGx5UG9seW5vbWlhbEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogcG9seW5vbWlhbCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlQb2x5bm9taWFsS2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4vL25hbWU6IHRyYWluU2lnbW9pZEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogc2lnbW9pZCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiB0cmFpblxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vaW5wdXQ6IGRvdWJsZSBnYW1tYSA9IDEuMCB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGRvdWJsZSBrYXBwYSA9IDEge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgdGhldGEgPSAxIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogYm9vbCB0b1Nob3dSZXBvcnQgPSBmYWxzZSB7Y2FwdGlvbjogdG8gc2hvdyByZXBvcnQ7IGNhdGVnb3J5OiBSZXBvcnR9XG4vL291dHB1dDogZHluYW1pYyBtb2RlbFxuZXhwb3J0IGZ1bmN0aW9uIHRyYWluU2lnbW9pZEtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4sIGdhbW1hLCBrYXBwYSwgdGhldGEsIHRvU2hvd1JlcG9ydCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBTSUdNT0lELCBrYXBwYToga2FwcGEsIHRoZXRhOiB0aGV0YSB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn0gLy8gdHJhaW5TaWdtb2lkS2VybmVsU1ZNXG4vL25hbWU6IGFwcGx5U2lnbW9pZEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogc2lnbW9pZCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlTaWdtb2lkS2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4iXSwibmFtZXMiOlsiX193ZWJwYWNrX3JlcXVpcmVfXyIsImV4cG9ydHMiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImNodW5rSWQiLCJnIiwiZ2xvYmFsVGhpcyIsInRoaXMiLCJGdW5jdGlvbiIsImUiLCJ3aW5kb3ciLCJvYmoiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJzY3JpcHRVcmwiLCJpbXBvcnRTY3JpcHRzIiwibG9jYXRpb24iLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsZW5ndGgiLCJpIiwiRXJyb3IiLCJyZXBsYWNlIiwicCIsImIiLCJiYXNlVVJJIiwic2VsZiIsImhyZWYiLCJncm9rIiwidWkiLCJERyIsImFzc3VyZSIsImRlbGF5IiwibXMiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsImdlbmVyYXRvciIsIlByb21pc2UiLCJzZXRUaW1lb3V0IiwiUCIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIm5vdE51bGwiLCJuYW1lIiwiRGVtb1NjcmlwdCIsImNvbnN0cnVjdG9yIiwiZGVzY3JpcHRpb24iLCJpc0F1dG9tYXRpYyIsIm9wdGlvbnMiLCJfYSIsIl9pc0F1dG9tYXRpYyIsIl9hdXRvU3RhcnRGaXJzdFN0ZXAiLCJfY3VycmVudFN0ZXAiLCJfaXNTdG9wcGVkIiwiX2lzQ2FuY2VsbGVkIiwiX2lzU3RlcFByb2Nlc3NlZCIsIl9yb290IiwiaWQiLCJjbGFzc2VzIiwiX3N0ZXBzIiwiX21haW5IZWFkZXIiLCJfaGVhZGVyIiwiX2hlYWRlckRpdiIsIl9zdG9wU3RhcnRCdG4iLCJfY2hhbmdlU3RvcFN0YXRlIiwiX3Jlc3RhcnRCdG4iLCJfcmVzdGFydFNjcmlwdCIsIl9uZXh0U3RlcEJ0biIsIl9uZXh0U3RlcCIsIl9hY3Rpdml0eSIsIl9wcm9ncmVzc0RpdiIsIl9wcm9ncmVzcyIsIl9wcm9ncmVzc1N0ZXBzIiwiX2Nsb3NlQnRuIiwiX2Nsb3NlRG9jayIsImF1dG9TdGFydEZpcnN0U3RlcCIsIm1heCIsImN1cnJlbnRPYmplY3QiLCJzdGVwcyIsInN0ZXBOdW1iZXIiLCJfYWRkSGVhZGVyIiwiX2NyZWF0ZUhlYWRlckRpdiIsIl9jcmVhdGVQcm9ncmVzc0RpdiIsImFwcGVuZCIsImlubmVyVGV4dCIsImZpcnN0Q2hpbGQiLCJjbGFzc05hbWUiLCJfYWRkRGVzY3JpcHRpb24iLCJpbnN0cnVjdGlvbkluZGljYXRvciIsImluc3RydWN0aW9uRGl2IiwiY3VycmVudFN0ZXBEZXNjcmlwdGlvbiIsImVudHJ5IiwiX2luaXRSb290IiwiX2IiLCJfYyIsInNjcmlwdERvY2tOb2RlIiwiQXJyYXkiLCJmcm9tIiwiX25vZGUiLCJwYXJlbnQiLCJjb250YWluZXIiLCJjb250YWluZXJFbGVtZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJsYXN0RWxlbWVudENoaWxkIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJyZW1vdmUiLCJhZGQiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiZW50cnlJbmRpY2F0b3IiLCJlbnRyeUluc3RydWN0aW9uIiwiY3VycmVudFN0ZXAiLCJzdGVwRGVsYXkiLCJmdW5jIiwiX3Njcm9sbFRvIiwib2Zmc2V0VG9wIiwib2Zmc2V0SGVpZ2h0IiwiX2NvdW50ZG93biIsIm5ld0VudHJ5SW5kaWNhdG9yIiwicmVwbGFjZVdpdGgiLCJuZXh0U3RlcEVudHJ5SW5kaWNhdG9yIiwic3RhcnROZXh0U3RlcEljb24iLCJfc3RhcnRTY3JpcHQiLCJlbGVtZW50IiwieSIsImZvY3VzIiwic2Nyb2xsVG9wIiwiaW5kaWNhdG9yIiwidGltZSIsImNvdW50ZG93bkRpdiIsImNvdW50ZG93biIsInN2ZyIsIl9jcmVhdGVTVkdJbmRpY2F0b3IiLCJwcmVwZW5kIiwiaW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJjcmVhdGVFbGVtZW50TlMiLCJjaXJjbGUiLCJzZXRBdHRyaWJ1dGVOUyIsImljb24iLCJfY2xlYXJSb290IiwiX3NldEluaXRQYXJhbXMiLCJzdGFydCIsImNhbmNlbFNjcmlwdCIsIkludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJDb2x1bW4iLCJmcm9tSW50MzJBcnJheSIsImZyb21GbG9hdDMyQXJyYXkiLCJOVU1fVFlQRSIsIkZMT0FUX0NPTFVNTl9UWVBFIiwiSU5UX0NPTFVNTl9UWVBFIiwiRkxPQVRfQ09MVU1OU19UWVBFIiwiTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRSIsIklOVF9DT0xVTU5TX1RZUEUiLCJORVdfSU5UX0NPTFVNTlNfVFlQRSIsIk5FV19GTE9BVF9DT0xVTU5fVFlQRSIsIk5FV19JTlRfQ09MVU1OX1RZUEUiLCJDT0xVTU4iLCJDQUxMX1JFU1VMVCIsIk5VTV9PRl9ST1dTIiwiTlVNX09GX0NPTFVNTlMiLCJSRUYiLCJWQUxVRSIsIlRBQkxFX09GX0NPTFVNTlMiLCJPQkpFQ1RTIiwiSU5UX1RZUEUiLCJET1VCTEVfVFlQRSIsImFyZ3NTcGVjaWZpY2F0aW9uIiwiaW5wdXRWYWxzIiwicmVmIiwiY3BwRnVuY0lucHV0IiwiYXJnIiwidHlwZSIsImRhdGEiLCJhcnJheSIsImNvbCIsImdldFJhd0RhdGEiLCJ2YWwiLCJhcnJheXMiLCJ0b0xpc3QiLCJwdXNoIiwidmFsMSIsInZhbDIiLCJmdW5jU3BlY2lmaWNhdGlvbiIsImRhdGFGcm9tV2ViV29ya2VyIiwiYXJndW1lbnRzIiwiX2NhbGxSZXN1bHQiLCJjYWxsUmVzdWx0IiwiZnVuY1NwZWNpZmljYXRpb25BcmdzIiwiYXJnc0FmdGVyV2FzbUNhbGwiLCJ0eXBlVG9Db2x1bW5DcmVhdG9yTWFwIiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJuYW1lcyIsImNvbHVtbiIsImNvbHVtbnMiLCJrIiwiaiIsImV4dHJhY3ROZXdseUNyZWF0ZWREYXRhIiwiYXJncyIsIm91dFB1dCIsIm91dHB1dCIsInR5cGVUb0RhdGFGaWVsZE1hcCIsInNvdXJjZSIsIkRhdGFGcmFtZSIsImZyb21Db2x1bW5zIiwiYXJyYXlUb1JldHVybiIsImdldE91dHB1dCIsImNsZWFyTmV3bHlDcmVhdGVkRGF0YSIsIkNPTVBfTUlOIiwiU0FNUExFU19DT1VOVF9NSU4iLCJGRUFUVVJFU19DT1VOVF9NSU4iLCJQRVJDRU5UQUdFX01JTiIsIlBFUkNFTlRBR0VfTUFYIiwiTUFYX0VMRU1FTlRTX0NPVU5UIiwiQ09NUF9QT1NJVFZFX01FUyIsIkNPTVBfRVhDRVNTIiwiSU5DT1JFUlJFQ1RfTUlOX01BWF9NRVMiLCJJTkNPUkVSUkVDVF9GRUFUVVJFU19NRVMiLCJJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyIsIklOQ09SRVJSRUNUX1BFUkNFTlRBR0VfTUVTIiwiREFUQUZSQU1FX0lTX1RPT19CSUdfTUVTIiwiY2hlY2tDb21wb25lbmV0cyIsImZlYXR1cmVzIiwiY29tcG9uZW50cyIsImJ5SW5kZXgiLCJjb21wdXRlUExTIiwidGFibGUiLCJwcmVkaWN0IiwiX291dHB1dCIsIl9wcm9taXNlIiwiYXN5bmMiLCJjb21wb25lbnRzQ291bnQiLCJ3b3JrZXIiLCJXb3JrZXIiLCJVUkwiLCJwb3N0TWVzc2FnZSIsIkVEQSIsIm9ubWVzc2FnZSIsInRlcm1pbmF0ZSIsIl9wYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uSW5XZWJXb3JrZXIiLCJfcmVzdWx0IiwiX2Vycm9yIiwicHJlZGljdGVkVmVyc3VzUmVmZXJlbmNlU2NhdHRlclBsb3QiLCJzYW1wbGVzTmFtZXMiLCJyZWZlcmVuY2UiLCJwcmVkaWN0aW9uIiwiZGZSZWZlcmVuY2VQcmVkaWN0aW9uIiwidGl0bGUiLCJ4Iiwic2hvd1JlZ3Jlc3Npb25MaW5lIiwibWFya2VyVHlwZSIsImxhYmVscyIsInJlZ3Jlc3Npb25Db2VmZmljaWVudHNCYXJDaGFydCIsInJlZ3Jlc3Npb25Db2VmZnMiLCJuYW1lc09mUHJlZGljdG9ycyIsInByZWRpY3Rvck5hbWVzQ29sdW1uIiwiZGZSZWdyQ29lZnMiLCJzcGxpdCIsInZhbHVlQWdnclR5cGUiLCJzY29yZXNTY2F0dGVyUGxvdCIsInhTY29yZXMiLCJ5U2NvcmVzIiwic2NvcmVzQ29sdW1ucyIsInNjb3JlcyIsImluZGV4IiwiU1ZNX0dFTl9GRUFUVVJFU19JTkRFWCIsIlNWTV9HRU5fTEFCRUxTX0lOREVYIiwiU1ZNX0ZFQVRVUkVfTkFNRSIsIlNWTV9MQUJFTF9OQU1FIiwiY2Fyc0RhdGFmcmFtZSIsInRlc3REYXRhRm9yQmluYXJ5Q2xhc3NpZmljYXRpb24iLCJrZXJuZWwiLCJrZXJuZWxQYXJhbXMiLCJzYW1wbGVzQ291bnQiLCJmZWF0dXJlc0NvdW50IiwibWluIiwidmlvbGF0b3JzUGVyY2VudGFnZSIsImNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzIiwia2VybmVsUGFyYW1zQ29sIiwiX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyIiwiZGYiLCJMSU5FQVIiLCJQT0xZTk9NSUFMIiwiUkJGIiwiU0lHTU9JRCIsIkNPTkZVU0lPTl9NQVRSX1NJWkUiLCJOT1JNQUxJWkVEX0RBVEFfSU5ERVgiLCJNRUFOU19JTkRFWCIsIlNURF9ERVZTX0lOREVYIiwiTU9ERUxfUEFSQU1TX0lOREVYIiwiTU9ERUxfV0VJR0hUU19JTkRFWCIsIlBSRURJQ1RFRF9MQUJFTFNfSU5ERVgiLCJDT1JSRUNUTkVTU19JTkRFWCIsIkNPTkZVU0lPTl9NQVRSSVhfSU5ERVgiLCJUUlVFX1BPU0lUSVZFX0lOREVYIiwiRkFMU0VfTkVHQVRJVkVfSU5ERVgiLCJGQUxTRV9QT1NJVElWRV9JTkRFWCIsIlRSVUVfTkVHQVRJVkVfSU5ERVgiLCJSQkZfU0lHTUFfSU5ERVgiLCJQT0xZTk9NSUFMX0NfSU5ERVgiLCJQT0xZTk9NSUFMX0RfSU5ERVgiLCJTSUdNT0lEX0tBUFBBX0lOREVYIiwiU0lHTU9JRF9USEVUQV9JTkRFWCIsIkdBTU1BX0lORklNVU1fTElNSVQiLCJSQkZfU0lHTUFfSU5GSU1VTV9MSU1JVCIsIlBPTFlOT01JQUxfQ19JTkZJTVVNX0xJTUlUIiwiUE9MWU5PTUlBTF9EX0lORklNVU1fTElNSVQiLCJXUk9OR19HQU1NQV9NRVNTQUdFIiwiV1JPTkdfUkJGX1NJR01BX01FU1NBR0UiLCJXUk9OR19QT0xZTk9NSUFMX0NfTUVTU0FHRSIsIldST05HX1BPTFlOT01JQUxfRF9NRVNTQUdFIiwiV1JPTkdfS0VSTkVMX01FU1NBR0UiLCJMQUJFTFMiLCJQUkVESUNURUQiLCJDT1JSRUNUTkVTUyIsIkNPTkZVU0lPTl9NQVRSSVhfTkFNRSIsIk1FQU4iLCJTVERfREVWIiwiTU9ERUxfUEFSQU1TX05BTUUiLCJNT0RFTF9XRUlHSFRTX05BTUUiLCJHQU1NQSIsIktFUk5FTCIsIktFUk5FTF9QQVJBTVMiLCJLRVJORUxfUEFSQU1fMSIsIktFUk5FTF9QQVJBTV8yIiwiRkVBVFVSRVNfQ09VTlRfTkFNRSIsIlRSQUlOX1NBTVBMRVNfQ09VTlRfTkFNRSIsIlRSQUlOX0VSUk9SIiwiS0VSTkVMX1RZUEVfVE9fTkFNRV9NQVAiLCJQT1NJVElWRV9OQU1FIiwiTkVHQVRJVkVfTkFNRSIsIlBSRURJQ1RFRF9QT1NJVElWRV9OQU1FIiwiUFJFRElDVEVEX05FR0FUSVZFX05BTUUiLCJTRU5TSVRJVklUWSIsIlNQRUNJRklDSVRZIiwiQkFMQU5DRURfQUNDVVJBQ1kiLCJQT1NJVElWRV9QUkVESUNUSVZFX1ZBTFVFIiwiTkVHQVRJVkVfUFJFRElDVElWRV9WQUxVRSIsIk1MX1JFUE9SVCIsIk1MX1JFUE9SVF9QUkVESUNURURfTEFCRUxTIiwiTUxfUkVQT1JUX1RSQUlOX0xBQkVMUyIsIk1MX1JFUE9SVF9DT1JSRUNUTkVTUyIsIlBSRURJQ1RJT04iLCJCWVRFUyIsIklOVFNfQ09VTlQiLCJLRVJfUEFSQU1TX0NPVU5UIiwiTU9ERUxfS0VSTkVMX0lOREVYIiwiU0FNUExFU19DT1VOVF9JTkRFWCIsIkZFQVRVUkVTX0NPVU5UX0lOREVYIiwiSU5JVF9WQUxVRSIsIkxTX1NWTV9BRERfQ09OU1QiLCJnZXRUcmFpbmVkTW9kZWwiLCJoeXBlcnBhcmFtZXRlcnMiLCJwcmVkaWN0X2NvbHVtbiIsImJ5TmFtZSIsImRhdGFzZXQiLCJnYW1tYSIsInNpZ21hIiwiY1BhcmFtIiwiZFBhcmFtIiwiY2hlY2tIeXBlcnBhcmFtZXRlcnMiLCJrZXJuZWxQYXJhbXNBcnJheSIsImthcHBhIiwidGhldGEiLCJ0cmFpbkNvbHMiLCJtb2RlbFBhcmFtc0NvdW50IiwicHJlY29tcHV0ZWRXZWlnaHRzQ291bnQiLCJjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50IiwiX3RyYWluQW5kQW5hbHl6ZUxTU1ZNSW5XZWJXb3JrZXIiLCJtb2RlbCIsInRyYWluR2FtbWEiLCJrZXJuZWxUeXBlIiwidHJhaW5MYWJlbHMiLCJub3JtYWxpemVkVHJhaW5EYXRhIiwibWVhbnMiLCJzdGREZXZzIiwibW9kZWxQYXJhbXMiLCJtb2RlbFdlaWdodHMiLCJwcmVkaWN0ZWRMYWJlbHMiLCJjb3JyZWN0bmVzcyIsImNvbmZ1c2lvbk1hdHJpeCIsInRyYWluRXJyb3IiLCJ0cmFpblNhbXBsZXNDb3VudCIsIlRQIiwiVE4iLCJGUCIsIkZOIiwiTiIsIlRQUiIsIlROUiIsIlBQViIsIk5QViIsIkFDQyIsIkJBIiwic2Vuc2l0aXZpdHkiLCJzcGVjaWZpY2l0eSIsImJhbGFuY2VkQWNjdXJhY3kiLCJwb3NpdGl2ZVByZWRpY2l0dmVWYWx1ZSIsIm5lZ2F0aXZlUHJlZGljaXR2ZVZhbHVlIiwiZXZhbHVhdGVBY2N1cmFjeSIsInRyYWluQW5kQW5hbHl6ZU1vZGVsIiwic2hvd1RyYWluUmVwb3J0IiwiZGZWaWV3IiwiYWRkVmlld2VyIiwiZ2V0TW9kZWxJbmZvIiwiY29sb3IiLCJnZXRDb25mdXNpb25NYXRyaXhERiIsImdldFBhY2tlZE1vZGVsIiwiZGF0YUNvbHMiLCJVaW50OEFycmF5IiwiYnVmZmVyIiwib2Zmc2V0IiwiaW50cyIsImZsb2F0cyIsInNldCIsImdldFByZWRpY3Rpb24iLCJwYWNrZWRNb2RlbCIsIm1vZGVsQnl0ZXMiLCJoZWFkZXIiLCJnZXRVbnBhY2tlZE1vZGVsIiwicmVzIiwibm9ybWFsaXplZERhdGEiLCJwcmVjb21wdXRlZFdlaWdodHMiLCJ0YXJnZXREYXRhIiwiX3ByZWRpY3RCeUxTU1ZNSW5XZWJXb3JrZXIiLCJfcGFja2FnZSIsImluZm8iLCJ3ZWJSb290IiwiaW5pdCIsImluaXRFREEiLCJfaW5pdEVEQUFQSSIsIlBDQSIsImNlbnRlciIsInNjYWxlIiwicGNhVGFibGUiLCJyZW5hbWVQQ0Fjb2x1bW5zIiwiY2VudGVyTnVtIiwic2NhbGVOdW0iLCJfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlciIsImNvbXB1dGVQQ0EiLCJQTFMiLCJwbHNSZXN1bHRzIiwicGxzT3V0cHV0IiwidmlldyIsInhMb2FkaW5ncyIsImxvYWRpbmdDb2xzIiwibG9hZGluZ0xhYmVscyIsImRmTG9hZGluZ3MiLCJsb2FkaW5nU2NhdHRlclBsb3QiLCJhZGRQTFN2aXN1YWxpemF0aW9uIiwiZGVtb011bHRpdmFyaWF0ZUFuYWx5c2lzIiwiZGVtb1NjcmlwdCIsImNhcnMiLCJzb3VyY2VDYXJzIiwiZGlhbG9nIiwiYXZhaWxhYmxlIiwiY2hlY2tlZCIsIm9uT0siLCJzaG93IiwiY2xvc2UiLCJ0ZXN0RGF0YUxpbmVhclNlcGFyYWJsZSIsInRlc3REYXRhTGluZWFyTm9uU2VwYXJhYmxlIiwidHJhaW5MaW5lYXJLZXJuZWxTVk0iLCJ0b1Nob3dSZXBvcnQiLCJ0cmFpbmVkTW9kZWwiLCJhcHBseUxpbmVhcktlcm5lbFNWTSIsInRyYWluUkJGa2VybmVsU1ZNIiwiYXBwbHlSQkZrZXJuZWxTVk0iLCJ0cmFpblBvbHlub21pYWxLZXJuZWxTVk0iLCJjIiwiZCIsImFwcGx5UG9seW5vbWlhbEtlcm5lbFNWTSIsInRyYWluU2lnbW9pZEtlcm5lbFNWTSIsImFwcGx5U2lnbW9pZEtlcm5lbFNWTSJdLCJzb3VyY2VSb290IjoiIn0=
1
+ var eda;(()=>{"use strict";var t={m:{},d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},u:t=>t+".js"};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var e;t.g.importScripts&&(e=t.g.location+"");var n=t.g.document;if(!e&&n&&(n.currentScript&&(e=n.currentScript.src),!e)){var r=n.getElementsByTagName("script");if(r.length)for(var a=r.length-1;a>-1&&!e;)e=r[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),t.p=e})(),t.b=document.baseURI||self.location.href;var e={};t.r(e),t.d(e,{PCA:()=>Pe,PLS:()=>Le,_package:()=>ke,applyLinearKernelSVM:()=>Re,applyPolynomialKernelSVM:()=>Me,applyRBFkernelSVM:()=>Te,applySigmoidKernelSVM:()=>$e,demoMultivariateAnalysis:()=>Ee,info:()=>De,init:()=>Fe,testDataLinearNonSeparable:()=>xe,testDataLinearSeparable:()=>Ie,trainLinearKernelSVM:()=>Ve,trainPolynomialKernelSVM:()=>Be,trainRBFkernelSVM:()=>Ne,trainSigmoidKernelSVM:()=>Oe});const n=grok,r=ui,a=DG;var o;function i(t){return e=this,n=void 0,a=function*(){yield new Promise((e=>setTimeout(e,t)))},new((r=void 0)||(r=Promise))((function(t,o){function i(t){try{l(a.next(t))}catch(t){o(t)}}function s(t){try{l(a.throw(t))}catch(t){o(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r((function(t){t(n)}))).then(i,s)}l((a=a.apply(e,n||[])).next())}));var e,n,r,a}!function(t){t.notNull=function(t,e){if(null==t)throw new Error(`${null==e?"Value":e} not defined`)}}(o||(o={}));var s=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};class l{constructor(t,e,n=!1,a){var o;this.name="",this.description="",this._isAutomatic=!1,this._autoStartFirstStep=!1,this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._isStepProcessed=!1,this._root=r.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._steps=[],this._mainHeader=r.panel([],"tutorials-main-header"),this._header=r.h2(""),this._headerDiv=r.divH([],"tutorials-root-header"),this._stopStartBtn=r.button(r.iconFA("pause"),(()=>this._changeStopState()),"Play / pause"),this._restartBtn=r.button(r.iconFA("redo"),(()=>this._restartScript()),"Restart"),this._nextStepBtn=r.button(r.iconFA("play"),(()=>{this._isStepProcessed||this._nextStep()}),"Next step"),this._activity=r.panel([],"tutorials-root-description"),this._progressDiv=r.divV([],"tutorials-root-progress"),this._progress=r.element("progress"),this._progressSteps=r.divText(""),this._closeBtn=r.button(r.iconFA("chevron-left"),(()=>this._closeDock()),"Back to demo"),this.name=t,this.description=e,this._isAutomatic=n,this._autoStartFirstStep=null!==(o=null==a?void 0:a.autoStartFirstStep)&&void 0!==o&&o,this._progress.max=0,this._progress.value=1,l.currentObject=this}get steps(){return this._steps}get stepNumber(){return this._steps.length}_addHeader(){this._createHeaderDiv(),this._createProgressDiv(),this._mainHeader.append(this._headerDiv,this._progressDiv)}_createHeaderDiv(){this._header.innerText=this.name,this._headerDiv.append(this._closeBtn),this._headerDiv.append(this._header),this._nextStepBtn.firstChild.className="grok-icon fas fa-play",this._headerDiv.append(this._isAutomatic?this._stopStartBtn:this._nextStepBtn)}_createProgressDiv(){this._progress.max=this.stepNumber,this._progressDiv.append(this._progress),this._progressSteps=r.divText(`Step: ${this._progress.value} of ${this.stepNumber}`),this._progressDiv.append(this._progressSteps)}_addDescription(){var t;this._activity.append(r.div(this.description,"tutorials-root-description"));for(let e=0;e<this.stepNumber;e++){let n=r.iconFA("clock");this._isAutomatic||0===e&&(n=r.iconFA("play",(()=>this._nextStep()),"Next step"),n.className="grok-icon fas fa-play");const a=r.div(this._steps[e].name,"grok-tutorial-entry-instruction"),o=r.div(null===(t=this._steps[e].options)||void 0===t?void 0:t.description,"grok-tutorial-step-description hidden"),i=r.divH([n,a],"grok-tutorial-entry");this._activity.append(i,o)}}_initRoot(){var t,e,r;n.shell.windows.showContextPanel=!0,n.shell.windows.showHelp=!1;const o=Array.from(n.shell.dockManager.rootNode.children)[0];this._node=n.shell.dockManager.dock(this._root,a.DOCK_TYPE.FILL,o,""),(null===(e=null===(t=o.parent.container.containerElement.firstElementChild)||void 0===t?void 0:t.lastElementChild)||void 0===e?void 0:e.classList.contains("tab-handle-list-container"))&&(null===(r=o.parent.container.containerElement.firstElementChild)||void 0===r||r.lastElementChild.remove()),this._node.container.containerElement.classList.add("tutorials-demo-script-container"),this._addHeader(),this._root.append(this._mainHeader),this._addDescription(),this._root.append(this._activity)}_nextStep(){var t,e;return s(this,void 0,void 0,(function*(){this._isStepProcessed=!0,this._isAutomatic||(this._nextStepBtn.classList.add("disabled"),this._nextStepBtn.firstChild.classList.add("fa-disabled"));const n=this._activity.getElementsByClassName("grok-tutorial-entry")[this._currentStep],a=this._activity.getElementsByClassName("grok-icon")[this._currentStep],o=this._activity.getElementsByClassName("grok-tutorial-step-description")[this._currentStep];a.className="grok-icon far fa-spinner-third fa-spin",o.classList.remove("hidden"),o.classList.add("visible");const s=n,l=(null===(t=this._steps[this._currentStep].options)||void 0===t?void 0:t.delay)?null===(e=this._steps[this._currentStep].options)||void 0===e?void 0:e.delay:2e3;yield this._steps[this._currentStep].func(),this._scrollTo(this._root,s.offsetTop-this._mainHeader.offsetHeight),this._isAutomatic&&(yield this._countdown(n,a,l),yield i(l));const c=r.iconFA("check");if(a.replaceWith(c),c.className="grok-icon far fa-check",this._progress.value++,this._progressSteps.innerText=`Step: ${this._progress.value} of ${this.stepNumber}`,this._currentStep++,this._isStepProcessed=!1,this._currentStep!==this.stepNumber){if(!this._isAutomatic){const t=this._activity.getElementsByClassName("grok-icon")[this._currentStep],e=r.iconFA("play",(()=>this._nextStep()),"Next step");e.className="grok-icon fas fa-play",t.replaceWith(e),this._nextStepBtn.classList.remove("disabled"),this._nextStepBtn.firstChild.classList.remove("fa-disabled")}}else this._isAutomatic?this._stopStartBtn.replaceWith(this._restartBtn):this._nextStepBtn.replaceWith(this._restartBtn)}))}_startScript(){return s(this,void 0,void 0,(function*(){for(let t=this._currentStep;t<this.stepNumber&&!this._isStopped&&!this._isCancelled;t++)yield this._nextStep()}))}_scrollTo(t,e){t.focus(),t.scrollTop=e}_countdown(t,e,n){return s(this,void 0,void 0,(function*(){const a=r.div([],"demo-script-countdown");e.classList.add("hidden");let o=n/1e3;const i=this._createSVGIndicator(o);a.append(i),t.prepend(a);const s=setInterval((()=>{o--,0===o&&(clearInterval(s),a.remove(),e.classList.remove("hidden"),e.classList.add("visible"))}),1e3)}))}_createSVGIndicator(t){const e=document.createElementNS("http://www.w3.org/2000/svg","svg"),n=document.createElementNS("http://www.w3.org/2000/svg","circle");return n.setAttributeNS(null,"cx","7"),n.setAttributeNS(null,"cy","7"),n.setAttributeNS(null,"r","6"),n.setAttributeNS(null,"style",`animation: countdown ${t}s linear infinite forwards`),e.append(n),e}_changeStopState(){const t=this._stopStartBtn.getElementsByClassName("grok-icon");t[0].className="grok-icon fas fa-play",this._isStopped=!this._isStopped,this._isStopped||(t[0].className="grok-icon fal fa-pause",this._isStepProcessed||this._startScript())}_restartScript(){n.shell.dockManager.close(this._node),n.shell.closeAll(),this._clearRoot(),this._setInitParams(),this.start()}_clearRoot(){this._root=r.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._mainHeader=r.panel([],"tutorials-main-header"),this._header=r.h2(""),this._headerDiv=r.divH([],"tutorials-root-header"),this._activity=r.panel([],"tutorials-root-description"),this._progressDiv=r.divV([],"tutorials-root-progress"),this._progress=r.element("progress"),this._progressSteps=r.divText(""),this._progress.max=0,this._progress.value=1}_setInitParams(){this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._stopStartBtn.getElementsByClassName("grok-icon")[0].className="grok-icon fal fa-pause",this._nextStepBtn.classList.remove("disabled")}_closeDock(){n.shell.dockManager.close(this._node),this.cancelScript()}cancelScript(){this._isCancelled=!0,l.currentObject=null}step(t,e,n){return this._steps[this.steps.length]={name:t,func:e,options:n},this}start(){return s(this,void 0,void 0,(function*(){this._initRoot(),n.shell.newView(this.name),this._isAutomatic?this._startScript():this._autoStartFirstStep&&(yield this._nextStep())}))}}l.currentObject=null,Int32Array,Float32Array,DG.Column.fromInt32Array,DG.Column.fromFloat32Array;const c="num",u="floatColumn",m="intColumn",d="floatColumns",h="newFloatColumns",p="intColumns",f="newIntColumns",y="newFloatColumn",v="newIntColumn",w="column",g="_callResult",_="numOfRows",b="numOfColumns",S="ref",C="value",A="tableFromColumns",k="objects",D="int",F="double",P={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array};function L(t,e){let n,r=[],a=0;for(const o in t){const i=t[o],s=i.type;if(o!==g){switch(s){case c:case D:case F:i.data=e[a],a++;break;case m:case u:let r,o=e[a];r=o.type===D&&s===m||o.type===F&&s===u?o.getRawData():new P[s](o.getRawData()),i.data={array:r,numOfRows:r.length},a++;break;case v:case y:let l=0;n=i[_][S],l=t[n].type===c?t[n].data:t[n].data[i[_][C]],i.data={numOfRows:l},a++;break;case p:case d:let w=[];for(let t of e[a].toList())t.type===D&&s===m||t.type===F&&s===u?w.push(t.getRawData()):w.push(new P[s](t.getRawData()));i.data={arrays:w,numOfRows:w[0].length,numOfColumns:w.length},a++;break;case f:case h:let g=0,A=0;n=i[_][S],g=t[n].type===c?t[n].data:t[n].data[i[_][C]],n=i[b][S],A=t[n].type===c?t[n].data:t[n].data[i[b][C]],i.data={numOfRows:g,numOfColumns:A},a++;break;default:return}r.push(i)}}return r}function E(t,e){t.arguments._callResult=e.callResult,function(t,e){const n={newFloatColumns:DG.Column.fromFloat32Array,newIntColumns:DG.Column.fromInt32Array,newFloatColumn:DG.Column.fromFloat32Array,newIntColumn:DG.Column.fromInt32Array};let r=0;for(const a in t){const o=t[a];switch(o.type){case c:case D:case F:case m:case u:case d:case p:break;case y:case v:let t;null==o.name?t=(0).toString():s=o.name,o.column=n[o.type](t,e[r].array);break;case f:case h:let a=[],i=e[r].arrays.length,s=[];if(null==o.names)for(let t=1;t<=i;t++)s.push(t.toString());else s=o.names;for(let t=0;t<i;t++)a.push(n[o.type](s[t],e[r].arrays[t]));o.columns=a}r++}}(t.arguments,e.args);let n=function(t){let e=t.output;const n={newFloatColumns:"columns",newIntColumns:"columns",newFloatColumn:"column",newIntColumn:"column"};switch(e.type){case c:case D:case F:return t.arguments[e.source];case w:return t.arguments[e.source].column;case A:return DG.DataFrame.fromColumns(t.arguments[e.source].columns);case k:let r=[];for(let a of e.source){let e=t.arguments[a];r.push(e[n[e.type]])}return r}}(t);return function(t){for(const e in t){const n=t[e];switch(n.type){case c:case D:case F:case m:case u:case p:case d:break;case v:case y:n.column=null;break;case f:case h:n.columns=null}}}(t.arguments),n}const I=1,x=1,V=1,R=0,N=100,T=1e8,B="components must be positive.",M="components must not be greater than feautures count.",O="min must be less than max.",$="features must be positive.",H="samples must be positive.",W="violators percentage must be from the range from 0 to 100.",j="dataframe is too big.";function G(t,e){if(e<I)throw new Error(B);if(e>t.length)throw new Error(M);if(t.length*t.byIndex(0).length>T)throw new Error(j)}var z=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};function K(e,n,r,a){return z(this,void 0,void 0,(function*(){let e;G(n,a);let o=async function(e,n,r,a){return new Promise(((e,o)=>{const i=new Worker(new URL(t.p+t.u(93),t.b));i.postMessage(L(EDA.partialLeastSquareRegression.arguments,[n,r,a])),i.onmessage=function(t){i.terminate(),e(E(EDA.partialLeastSquareRegression,t.data))}}))}(0,n,r,a);return yield o.then((t=>{e=t}),(t=>{throw new Error(`Error: ${t}`)})),e}))}function U(t,e,n){n.name=e.name+"(predicted)";let r=a.DataFrame.fromColumns([t,e,n]);return r.name="Reference vs. Predicted",a.Viewer.scatterPlot(r,{title:r.name,x:e.name,y:n.name,showRegressionLine:!0,markerType:"circle",labels:t.name})}function q(t,e){e.name="regression coefficient";let n=[];for(const e of t)n.push(e.name);let r=a.Column.fromStrings("feature",n),o=a.DataFrame.fromColumns([r,e]);return o.name="Regression Coefficients",a.Viewer.barChart(o,{title:o.name,split:"feature",value:"regression coefficient",valueAggrType:"avg"})}function Y(t,e,n){let r=[t];for(let t=0;t<e.length;t++)e[t].name=`x.score.t${t+1}`,r.push(e[t]);for(let t=0;t<n.length;t++)n[t].name=`y.score.u${t+1}`,r.push(n[t]);let o=a.DataFrame.fromColumns(r);o.name="Scores";const i=e.length>1?1:0;return a.Viewer.scatterPlot(o,{title:o.name,x:e[0].name,y:e[i].name,markerType:"circle",labels:t.name})}var J=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};const Q=0,X=1,Z="Feature #",tt="Label";function et(){return a.DataFrame.fromColumns([a.Column.fromStrings("model",["alfaromeo","audi","bmw","chevrolet","dodge1","dodge2","honda1","honda2","isuzu","jaguar","mazda","mercedes","mercury","mitsubishi","nissan1","nissan2","peugot","plymouth","porsche","saab","subaru","toyota1","toyota2","toyota3","toyota4","volkswagen1","volkswagen2","volvo1","volvo2","volvo3"]),a.Column.fromInt32Array("diesel",new Int32Array([0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,1])),a.Column.fromInt32Array("turbo",new Int32Array([0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1])),a.Column.fromInt32Array("two.doors",new Int32Array([1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0])),a.Column.fromInt32Array("hatchback",new Int32Array([1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0])),a.Column.fromFloat32Array("wheel.base",new Float32Array([94.5,105.80000305175781,101.19999694824219,94.5,93.69999694824219,93.69999694824219,93.69999694824219,96.5,94.30000305175781,113,93.0999984741211,115.5999984741211,102.69999694824219,93.69999694824219,94.5,94.5,93.69999694824219,114.19999694824219,89.5,99.0999984741211,97.19999694824219,95.69999694824219,95.69999694824219,98.4000015258789,102.4000015258789,97.30000305175781,100.4000015258789,104.30000305175781,109.0999984741211,109.0999984741211])),a.Column.fromFloat32Array("length",new Float32Array([171.1999969482422,192.6999969482422,176.8000030517578,158.8000030517578,157.3000030517578,157.3000030517578,150,175.39999389648438,170.6999969482422,199.60000610351562,166.8000030517578,202.60000610351562,178.39999389648438,157.3000030517578,170.1999969482422,165.3000030517578,157.3000030517578,198.89999389648438,168.89999389648438,186.60000610351562,172,158.6999969482422,166.3000030517578,176.1999969482422,175.60000610351562,171.6999969482422,180.1999969482422,188.8000030517578,188.8000030517578,188.8000030517578])),a.Column.fromFloat32Array("width",new Float32Array([65.5,71.4000015258789,64.80000305175781,63.599998474121094,63.79999923706055,63.79999923706055,64,65.19999694824219,61.79999923706055,69.5999984741211,64.19999694824219,71.69999694824219,68,64.4000015258789,63.79999923706055,63.79999923706055,63.79999923706055,68.4000015258789,65,66.5,65.4000015258789,63.599998474121094,64.4000015258789,65.5999984741211,66.5,65.5,66.9000015258789,67.19999694824219,68.80000305175781,68.9000015258789])),a.Column.fromFloat32Array("height",new Float32Array([52.400001525878906,55.70000076293945,54.29999923706055,52,50.79999923706055,50.599998474121094,52.599998474121094,54.099998474121094,53.5,52.79999923706055,54.099998474121094,56.29999923706055,54.79999923706055,50.79999923706055,53.5,54.5,50.599998474121094,58.70000076293945,51.599998474121094,56.099998474121094,52.5,54.5,53,52,54.900001525878906,55.70000076293945,55.099998474121094,56.20000076293945,55.5,55.5])),a.Column.fromInt32Array("curb.weight",new Int32Array([2823,2844,2395,1909,2128,1967,1956,2304,2337,4066,1950,3770,2910,1918,2024,1951,1967,3430,2800,2695,2190,1985,2275,2551,2480,2261,2661,2912,3049,3217])),a.Column.fromInt32Array("eng.size",new Int32Array([152,136,108,90,98,90,92,110,111,258,91,183,140,92,97,97,90,152,194,121,108,92,110,146,110,97,136,141,141,145])),a.Column.fromInt32Array("horsepower",new Int32Array([154,110,101,70,102,68,76,86,78,176,68,123,175,68,69,69,68,95,207,110,82,62,56,116,73,52,110,114,160,106])),a.Column.fromInt32Array("peak.rpm",new Int32Array([5e3,5500,5800,5400,5500,5500,6e3,5800,4800,4750,5e3,4350,5e3,5500,5200,5200,5500,4150,5900,5250,4400,4800,4500,4800,4500,4800,5500,5400,5300,4800])),a.Column.fromInt32Array("symbol",new Int32Array([1,1,2,0,1,1,1,0,0,0,1,-1,1,2,1,1,1,0,3,2,0,1,0,2,-1,2,0,-2,-1,-1])),a.Column.fromInt32Array("city.mpg",new Int32Array([19,19,23,38,24,31,30,27,24,15,31,22,19,37,31,31,31,25,17,21,28,35,34,24,30,37,19,23,19,26])),a.Column.fromInt32Array("highway.mpg",new Int32Array([26,25,29,43,30,38,34,33,29,19,38,25,24,41,37,37,38,25,25,28,33,39,36,30,33,46,24,28,25,27])),a.Column.fromInt32Array("price",new Int32Array([16500,17710,16430,6575,7957,6229,7129,8845,6785,35550,7395,31600,16503,5389,7349,7299,6229,13860,37028,12170,7775,5348,7898,9989,10698,7775,13295,12940,19045,22470]))])}function nt(e,n,r,o,i,s,l,c){return J(this,void 0,void 0,(function*(){!function(t,e,n,r,a){if(n>=r)throw new Error(O);if(e<V)throw new Error($);if(t<x)throw new Error(H);if(a<R||a>N)throw new Error(W)}(o,i,s,l,c);const u=a.Column.fromList("double","kernelParams",n);let m,d=async function(e,n,r,a,o,i,s){return new Promise(((l,c)=>{const u=new Worker(new URL(t.p+t.u(584),t.b));u.postMessage(L(EDA.generateDataset.arguments,[e,n,r,a,o,i,s])),u.onmessage=function(t){u.terminate(),l(E(EDA.generateDataset,t.data))}}))}(e,u,o,i,s,l,c);yield d.then((t=>{m=t}),(t=>{throw new Error(`Error: ${t}`)})),m[X].name=tt;for(const t of m[Q])t.name=Z+t.name;const h=a.DataFrame.fromColumns(m[Q]);return h.name=r,h.columns.add(m[X]),h}))}var rt=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};const at=0,ot=1,it=2,st=3,lt=4,ct=0,ut=1,mt=2,dt=3,ht=4,pt=5,ft=6,yt=7,vt=0,wt=1,gt=2,_t=3,bt=0,St=0,Ct=1,At=0,kt=1,Dt=0,Ft=0,Pt=0,Lt=0,Et="gamma must be strictly positive.",It="sigma must be strictly positive.",xt="c must be strictly positive.",Vt="d must be strictly positive.",Rt="incorrect kernel.",Nt="Labels",Tt="predicted",Bt="correctness",Mt="Confusion matrix",Ot="mean",$t="std dev",Ht="alpha",Wt="weight",jt="gamma",Gt="kernel",zt="kernel params",Kt="kernel param 1",Ut="kernel param 2",qt="features count",Yt="train samples count",Jt="Train error,%",Qt=["linear","polynomial","RBF","sigmoid"],Xt="positive (P)",Zt="negative (N)",te="predicted positive (PP)",ee="predicted negative (PN)",ne="Sensitivity",re="Specificity",ae="Balanced accuracy",oe="Positive predicitve value",ie="Negative predicitve value",se="Model report",le="Predicted labels",ce="Train labels",ue="Prediction correctness",me="prediction",de=4,he=3,pe=2,fe=0,ye=1,ve=2,we=0,ge=1;function _e(e,n,r){return rt(this,void 0,void 0,(function*(){let o=n.columns,i=o.byName(r);return o.remove(r),yield function(e,n,r){return rt(this,void 0,void 0,(function*(){!function(t){if(t.gamma<=Dt)throw new Error(Et);switch(t.kernel){case at:return;case it:if(t.sigma<=Ft)throw new Error(It);return;case ot:if(t.cParam<=Pt)throw new Error(xt);if(t.dParam<=Lt)throw new Error(Vt);return;case st:return;default:throw new Error(Rt)}}(e);const o=[we,we];switch(e.kernel){case at:break;case it:o[bt]=e.sigma;break;case ot:o[St]=e.cParam,o[Ct]=e.dParam;break;case st:o[At]=e.kappa,o[kt]=e.theta;break;default:throw new Error(Rt)}let i,s=a.Column.fromList("double",zt,o),l=n.toList(),c=l[0].length+ge,u=l.length+ge,m=lt,d=async function(e,n,r,a,o,i,s,l){return new Promise(((c,u)=>{const m=new Worker(new URL(t.p+t.u(111),t.b));m.postMessage(L(EDA.trainAndAnalyzeLSSVM.arguments,[e,n,r,a,o,i,s,l])),m.onmessage=function(t){m.terminate(),c(E(EDA.trainAndAnalyzeLSSVM,t.data))}}))}(e.gamma,e.kernel,s,c,u,m,n,r);yield d.then((t=>{i=t}),(t=>{throw new Error(`Error: ${t}`)})),i[ut].name=Ot,i[mt].name=$t,i[dt].name=Ht,i[ht].name=Wt,i[pt].name=Tt,i[ft].name=Bt,i[yt].name=Mt;let h={trainGamma:e.gamma,kernelType:e.kernel,kernelParams:s,trainLabels:r,normalizedTrainData:a.DataFrame.fromColumns(i[ct]),means:i[ut],stdDevs:i[mt],modelParams:i[dt],modelWeights:i[ht],predictedLabels:i[pt],correctness:i[ft],confusionMatrix:i[yt],trainError:void 0,featuresCount:l.length,trainSamplesCount:l[0].length};return function(t){let e=t.confusionMatrix.getRawData(),n=e[vt],r=e[_t],a=e[gt],o=e[wt],i=n+o,s=a+r,l=n/i,c=r/s,u=n/(n+a),m=r/(r+o),d=(n+r)/(i+s),h=(l+c)/2;t.sensitivity=l,t.specificity=c,t.balancedAccuracy=h,t.positivePredicitveValue=u,t.negativePredicitveValue=m,t.trainError=100*(1-d)}(h),h}))}(e,o,i)}))}function be(t,e){t.name=se,t.columns.add(e.trainLabels),t.columns.add(e.predictedLabels),t.columns.add(e.correctness);let r=n.shell.addTableView(t);r.addViewer(a.Viewer.form(function(t){let e=t.kernelParams.getRawData();return a.DataFrame.fromColumns([a.Column.fromList("double",jt,[t.trainGamma]),a.Column.fromStrings(Gt,[Qt[t.kernelType]]),a.Column.fromList("double",Kt,[e[0]]),a.Column.fromList("double",Ut,[e[1]]),a.Column.fromList("double",qt,[t.featuresCount]),a.Column.fromList("double",Yt,[t.trainSamplesCount]),a.Column.fromList("double",Jt,[t.trainError]),a.Column.fromList("double",ae,[t.balancedAccuracy]),a.Column.fromList("double",ne,[t.sensitivity]),a.Column.fromList("double",re,[t.specificity]),a.Column.fromList("double",oe,[t.positivePredicitveValue]),a.Column.fromList("double",ie,[t.negativePredicitveValue])])}(e))),r.addViewer(a.Viewer.scatterPlot(t,{title:le,color:e.predictedLabels.name})),r.addViewer(a.Viewer.scatterPlot(t,{title:ce,color:e.trainLabels.name})),r.addViewer(a.Viewer.grid(function(t){let e=t.confusionMatrix.getRawData();return a.DataFrame.fromColumns([a.Column.fromStrings("",[Xt,Zt]),a.Column.fromList("int",te,[e[vt],e[gt]]),a.Column.fromList("int",ee,[e[wt],e[_t]])])}(e))),r.addViewer(a.Viewer.scatterPlot(t,{title:ue,color:e.correctness.name}))}function Se(t){let e=t.normalizedTrainData.columns,n=t.trainSamplesCount,r=t.featuresCount,a=new Uint8Array(de*(he+pe+n+r+r+n+ge+r+ge+r*n)),o=a.buffer,i=0,s=new Int32Array(o,i,he);s[fe]=t.kernelType,s[ye]=n,s[ve]=r,i+=he*de;let l=new Float32Array(o,i,pe);l.set(t.kernelParams.getRawData()),i+=pe*de,l=new Float32Array(o,i,n),l.set(t.trainLabels.getRawData()),i+=n*de,l=new Float32Array(o,i,r),l.set(t.means.getRawData()),i+=r*de,l=new Float32Array(o,i,r),l.set(t.stdDevs.getRawData()),i+=r*de,l=new Float32Array(o,i,n+ge),l.set(t.modelParams.getRawData()),i+=(n+ge)*de,l=new Float32Array(o,i,r+ge),l.set(t.modelWeights.getRawData()),i+=(r+ge)*de;for(const t of e)l=new Float32Array(o,i,r),l.set(t.getRawData()),i+=r*de;return a}function Ce(e,n){return rt(this,void 0,void 0,(function*(){let r=function(t){let e=t.buffer,n=0,r=new Int32Array(e,n,he);n+=he*de;let o=r[ye],i=r[ve];const s=a.Column.fromFloat32Array(zt,new Float32Array(e,n,pe));n+=pe*de;const l=a.Column.fromFloat32Array(Nt,new Float32Array(e,n,o));n+=o*de;const c=a.Column.fromFloat32Array(Ot,new Float32Array(e,n,i));n+=i*de;const u=a.Column.fromFloat32Array($t,new Float32Array(e,n,i));n+=i*de;const m=a.Column.fromFloat32Array(Ht,new Float32Array(e,n,o+ge));n+=(o+ge)*de;const d=a.Column.fromFloat32Array(Wt,new Float32Array(e,n,i+ge));n+=(i+ge)*de;let h=[];for(let t=0;t<o;t++)h.push(a.Column.fromFloat32Array(t.toString(),new Float32Array(e,n,i))),n+=i*de;const p=a.DataFrame.fromColumns(h);return{kernelType:r[fe],kernelParams:s,trainLabels:l,means:c,stdDevs:u,modelParams:m,modelWeights:d,normalizedTrainData:p}}(new Uint8Array(n)),o=yield function(e,n){return rt(this,void 0,void 0,(function*(){let r,a=async function(e,n,r,a,o,i,s,l,c){return new Promise(((u,m)=>{const d=new Worker(new URL(t.p+t.u(604),t.b));d.postMessage(L(EDA.predictByLSSVM.arguments,[e,n,r,a,o,i,s,l,c])),d.onmessage=function(t){d.terminate(),u(E(EDA.predictByLSSVM,t.data))}}))}(e.kernelType,e.kernelParams,e.normalizedTrainData.columns,e.trainLabels,e.means,e.stdDevs,e.modelParams,e.modelWeights,n);return yield a.then((t=>{r=t}),(t=>{throw new Error(`Error: ${t}`)})),r}))}(r,e.columns);return o.name=me,a.DataFrame.fromColumns([o])}))}var Ae=function(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{l(r.next(t))}catch(t){o(t)}}function s(t){try{l(r.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}l((r=r.apply(t,e||[])).next())}))};const ke=new a.Package;function De(){n.shell.info(ke.webRoot)}function Fe(){return Ae(this,void 0,void 0,(function*(){yield async function(){await initEDA()}()}))}function Pe(e,n,r,a,o){return Ae(this,void 0,void 0,(function*(){return function(t){for(const e of t.columns.toList())e.name="PCA"+e.name;return t}(yield function(e,n,r,a,o){return z(this,void 0,void 0,(function*(){G(n,r);let e,i=async function(e,n,r,a,o){return new Promise(((e,i)=>{const s=new Worker(new URL(t.p+t.u(155),t.b));s.postMessage(L(EDA.principalComponentAnalysis.arguments,[n,r,a,o])),s.onmessage=function(t){s.terminate(),e(E(EDA.principalComponentAnalysis,t.data))}}))}(0,n,r,a?1:0,o?1:0);return yield i.then((t=>{e=t}),(t=>{throw new Error(`Error: ${t}`)})),e}))}(0,n,r,a,o))}))}function Le(t,e,r,o,i){return Ae(this,void 0,void 0,(function*(){const s=yield K(0,r,o,i);!function(t,e,r,o,i){let s=n.shell.getTableView(t.name);s.addViewer(U(e,o,i[0])),s.addViewer(q(r,i[1])),s.addViewer(function(t,e){let n=[],r=[];for(let e of t)r.push(e.name);n.push(a.Column.fromStrings("labels",r));for(let t=0;t<e.length;t++)e[t].name=`x.loading.p${t+1}`,n.push(e[t]);let o=a.DataFrame.fromColumns(n);return o.name="Loadings",a.Viewer.scatterPlot(o,{title:o.name,x:e[0].name,y:e[e.length-1].name,markerType:"circle",labels:"labels"})}(r,i[4])),s.addViewer(Y(e,i[2],i[3]))}(t,e,r,o,s)}))}function Ee(){return Ae(this,void 0,void 0,(function*(){const t=new l("Partial least squares regression","Analysis of multidimensional data."),e=et(),a=e.columns.byName("model"),o=e.columns.byName("price"),i=e.columns.remove("price").remove("model"),s=yield K(0,i,o,3),c=et();let u,m;c.name="Cars",yield t.step("Data",(()=>Ae(this,void 0,void 0,(function*(){n.shell.addTableView(c),u=n.shell.getTableView(c.name)}))),{description:"Each car has many features - patterns extraction is complicated.",delay:0}).step("Model",(()=>Ae(this,void 0,void 0,(function*(){m=r.dialog({title:"Multivariate Analysis (PLS)"}).add(r.tableInput("Table",c)).add(r.columnsInput("Features",e,i.toList,{available:void 0,checked:i.names()})).add(r.columnInput("Names",e,a,void 0)).add(r.columnInput("Predict",e,o,void 0)).add(r.intInput("Components",3,void 0)).onOK((()=>{n.shell.info("Multivariate analysis has been already performed.")})).show({x:400,y:140})}))),{description:"Predict car price by its other features.",delay:0}).step("Regression coeffcicients",(()=>Ae(this,void 0,void 0,(function*(){m.close(),u.addViewer(q(i,s[1]))}))),{description:'The feature "diesel" affects the price the most.',delay:0}).step("Scores",(()=>Ae(this,void 0,void 0,(function*(){u.addViewer(Y(a,s[2],s[3]))}))),{description:"Similarities & dissimilarities: alfaromeo and mercedes are different.",delay:0}).step("Prediction",(()=>Ae(this,void 0,void 0,(function*(){u.addViewer(U(a,o,s[0]))}))),{description:"Closer to the line means better price prediction.",delay:0}).start()}))}function Ie(t,e,n,r,a,o){return Ae(this,void 0,void 0,(function*(){return yield nt(at,[0,0],t,e,n,r,a,o)}))}function xe(t,e,n,r,a,o,i){return Ae(this,void 0,void 0,(function*(){return yield nt(it,[e,0],t,n,r,a,o,i)}))}function Ve(t,e,n,r){return Ae(this,void 0,void 0,(function*(){const a=yield _e({gamma:n,kernel:at},t,e);return r&&be(t,a),Se(a)}))}function Re(t,e){return Ae(this,void 0,void 0,(function*(){return yield Ce(t,e)}))}function Ne(t,e,n,r,a){return Ae(this,void 0,void 0,(function*(){const o=yield _e({gamma:n,kernel:it,sigma:r},t,e);return a&&be(t,o),Se(o)}))}function Te(t,e){return Ae(this,void 0,void 0,(function*(){return yield Ce(t,e)}))}function Be(t,e,n,r,a,o){return Ae(this,void 0,void 0,(function*(){const i=yield _e({gamma:n,kernel:ot,cParam:r,dParam:a},t,e);return o&&be(t,i),Se(i)}))}function Me(t,e){return Ae(this,void 0,void 0,(function*(){return yield Ce(t,e)}))}function Oe(t,e,n,r,a,o){return Ae(this,void 0,void 0,(function*(){const i=yield _e({gamma:n,kernel:st,kappa:r,theta:a},t,e);return o&&be(t,i),Se(i)}))}function $e(t,e){return Ae(this,void 0,void 0,(function*(){return yield Ce(t,e)}))}eda=e})();
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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eUYsRUFDbkMsR0FDSixDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9nZXQgamF2YXNjcmlwdCBjaHVuayBmaWxlbmFtZSIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGgiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9qc29ucCBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL2VkYS9leHRlcm5hbCB2YXIgXCJncm9rXCIiLCJ3ZWJwYWNrOi8vZWRhL2V4dGVybmFsIHZhciBcInVpXCIiLCJ3ZWJwYWNrOi8vZWRhL2V4dGVybmFsIHZhciBcIkRHXCIiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdHV0b3JpYWxzL3NyYy9kZW1vLXNjcmlwdC5qcyIsIndlYnBhY2s6Ly9lZGEvLi93YXNtL2NhbGxXYXNtLmpzIiwid2VicGFjazovL2VkYS8uL3dhc20vY2FsbFdhc21Gb3JXZWJXb3JrZXIuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3V0aWxzLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9FREF0b29scy50cyIsIndlYnBhY2s6Ly9lZGEvLi93YXNtL0VEQUFQSS5qcyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvRURBdWkudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL2RhdGFHZW5lcmF0b3JzLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9zdm0udHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3BhY2thZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJlcXVpcmUgc2NvcGVcbnZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCIvLyBUaGlzIGZ1bmN0aW9uIGFsbG93IHRvIHJlZmVyZW5jZSBhc3luYyBjaHVua3Ncbl9fd2VicGFja19yZXF1aXJlX18udSA9IChjaHVua0lkKSA9PiB7XG5cdC8vIHJldHVybiB1cmwgZm9yIGZpbGVuYW1lcyBiYXNlZCBvbiB0ZW1wbGF0ZVxuXHRyZXR1cm4gXCJcIiArIGNodW5rSWQgKyBcIi5qc1wiO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICFzY3JpcHRVcmwpIHNjcmlwdFVybCA9IHNjcmlwdHNbaS0tXS5zcmM7XG5cdFx0fVxuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmIgPSBkb2N1bWVudC5iYXNlVVJJIHx8IHNlbGYubG9jYXRpb24uaHJlZjtcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBhbmQgbG9hZGluZyBjaHVua3Ncbi8vIHVuZGVmaW5lZCA9IGNodW5rIG5vdCBsb2FkZWQsIG51bGwgPSBjaHVuayBwcmVsb2FkZWQvcHJlZmV0Y2hlZFxuLy8gW3Jlc29sdmUsIHJlamVjdCwgUHJvbWlzZV0gPSBjaHVuayBsb2FkaW5nLCAwID0gY2h1bmsgbG9hZGVkXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHQzNTk6IDBcbn07XG5cbi8vIG5vIGNodW5rIG9uIGRlbWFuZCBsb2FkaW5nXG5cbi8vIG5vIHByZWZldGNoaW5nXG5cbi8vIG5vIHByZWxvYWRlZFxuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0XG5cbi8vIG5vIG9uIGNodW5rcyBsb2FkZWRcblxuLy8gbm8ganNvbnAgZnVuY3Rpb24iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gZ3JvazsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gdWk7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IERHOyIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuZXhwb3J0IGNvbnN0IHRlc3RzID0ge307XG5jb25zdCBhdXRvVGVzdHNDYXROYW1lID0gJ0F1dG8gVGVzdHMnO1xuY29uc3Qgd2FzUmVnaXN0ZXJlZCA9IHt9O1xuZXhwb3J0IGxldCBjdXJyZW50Q2F0ZWdvcnk7XG5leHBvcnQgdmFyIGFzc3VyZTtcbihmdW5jdGlvbiAoYXNzdXJlKSB7XG4gICAgZnVuY3Rpb24gbm90TnVsbCh2YWx1ZSwgbmFtZSkge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lID09IG51bGwgPyAnVmFsdWUnIDogbmFtZX0gbm90IGRlZmluZWRgKTtcbiAgICB9XG4gICAgYXNzdXJlLm5vdE51bGwgPSBub3ROdWxsO1xufSkoYXNzdXJlIHx8IChhc3N1cmUgPSB7fSkpO1xuZXhwb3J0IGNsYXNzIFRlc3RDb250ZXh0IHtcbiAgICBjb25zdHJ1Y3RvcihjYXRjaFVuaGFuZGxlZCwgcmVwb3J0KSB7XG4gICAgICAgIHRoaXMuY2F0Y2hVbmhhbmRsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlcG9ydCA9IGZhbHNlO1xuICAgICAgICBpZiAoY2F0Y2hVbmhhbmRsZWQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRoaXMuY2F0Y2hVbmhhbmRsZWQgPSBjYXRjaFVuaGFuZGxlZDtcbiAgICAgICAgaWYgKHJlcG9ydCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhpcy5yZXBvcnQgPSByZXBvcnQ7XG4gICAgfVxuICAgIDtcbn1cbmV4cG9ydCBjbGFzcyBUZXN0IHtcbiAgICBjb25zdHJ1Y3RvcihjYXRlZ29yeSwgbmFtZSwgdGVzdCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDogKG9wdGlvbnMgPSB7fSk7XG4gICAgICAgIChfYSA9IG9wdGlvbnMudGltZW91dCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKG9wdGlvbnMudGltZW91dCA9IDMwMDAwKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy50ZXN0ID0gKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0geWllbGQgdGVzdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RFdmVudChldmVudCwgaGFuZGxlciwgdHJpZ2dlciwgbXMgPSAwKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHN1YjtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXIoYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgICAgICAgICAgICByZWplY3QoJ3RpbWVvdXQnKTtcbiAgICAgICAgICAgIH0sIG1zKTtcbiAgICAgICAgICAgIHRyaWdnZXIoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdGVzdChuYW1lLCB0ZXN0LCBvcHRpb25zKSB7XG4gICAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgICAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gICAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPT0gdW5kZWZpbmVkKVxuICAgICAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID0gW107XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cy5wdXNoKG5ldyBUZXN0KGN1cnJlbnRDYXRlZ29yeSwgbmFtZSwgdGVzdCwgb3B0aW9ucykpO1xufVxuLyogVGVzdHMgdHdvIG9iamVjdHMgZm9yIGVxdWFsaXR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3QoYWN0dWFsLCBleHBlY3RlZCA9IHRydWUsIGVycm9yKSB7XG4gICAgaWYgKGVycm9yKVxuICAgICAgICBlcnJvciA9IGAke2Vycm9yfSwgYDtcbiAgICBlbHNlXG4gICAgICAgIGVycm9yID0gJyc7XG4gICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvcn1FeHBlY3RlZCBcIiR7ZXhwZWN0ZWR9XCIsIGdvdCBcIiR7YWN0dWFsfVwiYCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0RmxvYXQoYWN0dWFsLCBleHBlY3RlZCwgdG9sZXJhbmNlID0gMC4wMDEsIGVycm9yKSB7XG4gICAgaWYgKChhY3R1YWwgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSB8fFxuICAgICAgICAoYWN0dWFsID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkgfHxcbiAgICAgICAgKGFjdHVhbCA9PT0gTnVtYmVyLk5hTiAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLk5hTikgfHwgKGlzTmFOKGFjdHVhbCkgJiYgaXNOYU4oZXhwZWN0ZWQpKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGFyZUVxdWFsID0gTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgdG9sZXJhbmNlO1xuICAgIGV4cGVjdChhcmVFcXVhbCwgdHJ1ZSwgYCR7ZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyd9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYCk7XG4gICAgaWYgKCFhcmVFcXVhbClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfSAodG9sZXJhbmNlID0gJHt0b2xlcmFuY2V9KWApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdFRhYmxlKGFjdHVhbCwgZXhwZWN0ZWQsIGVycm9yKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRSb3dDb3VudCA9IGV4cGVjdGVkLnJvd0NvdW50O1xuICAgIGNvbnN0IGFjdHVhbFJvd0NvdW50ID0gYWN0dWFsLnJvd0NvdW50O1xuICAgIGV4cGVjdChhY3R1YWxSb3dDb3VudCwgZXhwZWN0ZWRSb3dDb3VudCwgYCR7ZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyd9LCByb3cgY291bnRgKTtcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBleHBlY3RlZC5jb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IGFjdHVhbENvbHVtbiA9IGFjdHVhbC5jb2x1bW5zLmJ5TmFtZShjb2x1bW4ubmFtZSk7XG4gICAgICAgIGlmIChhY3R1YWxDb2x1bW4gPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7Y29sdW1uLm5hbWV9IG5vdCBmb3VuZGApO1xuICAgICAgICBpZiAoYWN0dWFsQ29sdW1uLnR5cGUgIT0gY29sdW1uLnR5cGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2NvbHVtbi5uYW1lfSB0eXBlIGV4cGVjdGVkICR7Y29sdW1uLnR5cGV9IGdvdCAke2FjdHVhbENvbHVtbi50eXBlfWApO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cGVjdGVkUm93Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb2x1bW4uZ2V0KGkpO1xuICAgICAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxDb2x1bW4uZ2V0KGkpO1xuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09IERHLlRZUEUuRkxPQVQpXG4gICAgICAgICAgICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIHZhbHVlLCAwLjAwMDEsIGVycm9yKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbHVtbi50eXBlID09IERHLlRZUEUuREFURV9USU1FKVxuICAgICAgICAgICAgICAgIGV4cGVjdChhY3R1YWxWYWx1ZS5pc1NhbWUodmFsdWUpLCB0cnVlLCBlcnJvcik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZXhwZWN0KGFjdHVhbFZhbHVlLCB2YWx1ZSwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdE9iamVjdChhY3R1YWwsIGV4cGVjdGVkKSB7XG4gICAgZm9yIChjb25zdCBbZXhwZWN0ZWRLZXksIGV4cGVjdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkKSkge1xuICAgICAgICBpZiAoIWFjdHVhbC5oYXNPd25Qcm9wZXJ0eShleHBlY3RlZEtleSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHByb3BlcnR5IFwiJHtleHBlY3RlZEtleX1cIiBub3QgZm91bmRgKTtcbiAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxbZXhwZWN0ZWRLZXldO1xuICAgICAgICBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICAgICAgICBleHBlY3RBcnJheShhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICAgICAgICBleHBlY3RPYmplY3QoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgICAgICBlbHNlIGlmIChOdW1iZXIuaXNGaW5pdGUoYWN0dWFsVmFsdWUpICYmIE51bWJlci5pc0Zpbml0ZShleHBlY3RlZFZhbHVlKSlcbiAgICAgICAgICAgIGV4cGVjdEZsb2F0KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgIT0gZXhwZWN0ZWRWYWx1ZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgKCR7ZXhwZWN0ZWRWYWx1ZX0pIGZvciBrZXkgJyR7ZXhwZWN0ZWRLZXl9JywgZ290ICgke2FjdHVhbFZhbHVlfSlgKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0QXJyYXkoYWN0dWFsLCBleHBlY3RlZCkge1xuICAgIGNvbnN0IGFjdHVhbExlbmd0aCA9IGFjdHVhbC5sZW5ndGg7XG4gICAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSBleHBlY3RlZC5sZW5ndGg7XG4gICAgaWYgKGFjdHVhbExlbmd0aCAhPSBleHBlY3RlZExlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5cyBhcmUgb2YgZGlmZmVyZW50IGxlbmd0aDogYWN0dWFsIGFycmF5IGxlbmd0aCBpcyAke2FjdHVhbExlbmd0aH0gYCArXG4gICAgICAgICAgICBgYW5kIGV4cGVjdGVkIGFycmF5IGxlbmd0aCBpcyAke2V4cGVjdGVkTGVuZ3RofWApO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgICAgIGVsc2UgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgICAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsW2ldICE9IGV4cGVjdGVkW2ldKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkW2ldfSBhdCBwb3NpdGlvbiAke2l9LCBnb3QgJHthY3R1YWxbaV19YCk7XG4gICAgfVxufVxuLyogRGVmaW5lcyBhIHRlc3Qgc3VpdGUuICovXG5leHBvcnQgZnVuY3Rpb24gY2F0ZWdvcnkoY2F0ZWdvcnksIHRlc3RzKSB7XG4gICAgY3VycmVudENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGVzdHMoKTtcbn1cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZShiZWZvcmUpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmJlZm9yZSA9IGJlZm9yZTtcbn1cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXIoYWZ0ZXIpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmFmdGVyID0gYWZ0ZXI7XG59XG5mdW5jdGlvbiBhZGROYW1lc3BhY2UocywgZikge1xuICAgIHJldHVybiBzLnJlcGxhY2UobmV3IFJlZ0V4cChmLm5hbWUsICdnaScpLCBmLm5xTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5pdEF1dG9UZXN0cyhwYWNrYWdlSWQsIG1vZHVsZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICh3YXNSZWdpc3RlcmVkW3BhY2thZ2VJZF0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG1vZHVsZVRlc3RzID0gbW9kdWxlID8gbW9kdWxlLnRlc3RzIDogdGVzdHM7XG4gICAgICAgIGlmIChtb2R1bGVUZXN0c1thdXRvVGVzdHNDYXROYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3YXNSZWdpc3RlcmVkW3BhY2thZ2VJZF0gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vZHVsZUF1dG9UZXN0cyA9IFtdO1xuICAgICAgICBjb25zdCBwYWNrRnVuY3Rpb25zID0geWllbGQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5maWx0ZXIoYHBhY2thZ2UuaWQgPSBcIiR7cGFja2FnZUlkfVwiYCkubGlzdCgpO1xuICAgICAgICBjb25zdCByZWcgPSBuZXcgUmVnRXhwKC8uKlxcL1xcL1xccypza2lwWzpcXHNdKiguKikkLyk7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBwYWNrRnVuY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0cyA9IGYub3B0aW9uc1sndGVzdCddO1xuICAgICAgICAgICAgaWYgKCEodGVzdHMgJiYgQXJyYXkuaXNBcnJheSh0ZXN0cykgJiYgdGVzdHMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lwUmVhc29ucyA9IHRlc3RzW2ldLm1hdGNoKHJlZyk7XG4gICAgICAgICAgICAgICAgbGV0IHNraXBSZWFzb247XG4gICAgICAgICAgICAgICAgaWYgKHNraXBSZWFzb25zICYmIChza2lwUmVhc29ucyA9PT0gbnVsbCB8fCBza2lwUmVhc29ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2tpcFJlYXNvbnMubGVuZ3RoKSA+IDEpXG4gICAgICAgICAgICAgICAgICAgIHNraXBSZWFzb24gPSBza2lwUmVhc29uc1sxXTtcbiAgICAgICAgICAgICAgICBtb2R1bGVBdXRvVGVzdHMucHVzaChuZXcgVGVzdChhdXRvVGVzdHNDYXROYW1lLCB0ZXN0cy5sZW5ndGggPT09IDEgPyBmLm5hbWUgOiBgJHtmLm5hbWV9ICR7aSArIDF9YCwgKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBncm9rLmZ1bmN0aW9ucy5ldmFsKGFkZE5hbWVzcGFjZSh0ZXN0c1tpXSwgZikpO1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYEZhaWxlZDogJHt0ZXN0c1tpXX1gO1xuICAgICAgICAgICAgICAgIH0pLCB7IHNraXBSZWFzb246IHNraXBSZWFzb24gfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSA9IHRydWU7XG4gICAgICAgIGlmICghbW9kdWxlQXV0b1Rlc3RzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbW9kdWxlVGVzdHNbYXV0b1Rlc3RzQ2F0TmFtZV0gPSB7IHRlc3RzOiBtb2R1bGVBdXRvVGVzdHMgfTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBydW5UZXN0cyhvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIHZhciBfZTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBwYWNrYWdlXyA9IChfYiA9IChfYSA9IGdyb2suZnVuY3Rpb25zLmdldEN1cnJlbnRDYWxsKCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mdW5jKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucGFja2FnZTtcbiAgICAgICAgeWllbGQgaW5pdEF1dG9UZXN0cyhwYWNrYWdlXy5pZCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgY29uc29sZS5sb2coYFJ1bm5pbmcgdGVzdHNgKTtcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDogKG9wdGlvbnMgPSB7fSk7XG4gICAgICAgIChfYyA9IChfZSA9IG9wdGlvbnMpLnRlc3RDb250ZXh0KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAoX2UudGVzdENvbnRleHQgPSBuZXcgVGVzdENvbnRleHQoKSk7XG4gICAgICAgIGdyb2suc2hlbGwubGFzdEVycm9yID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRlc3RzKSkge1xuICAgICAgICAgICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2F0ZWdvcnkpICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICgha2V5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2F0ZWdvcnkudG9Mb3dlckNhc2UoKSkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFN0YXJ0ZWQgJHtrZXl9IGNhdGVnb3J5YCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iZWZvcmUpXG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHZhbHVlLmJlZm9yZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5iZWZvcmVTdGF0dXMgPSB4LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0ID0gKF9kID0gdmFsdWUudGVzdHMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IFtdO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgcmVzLnB1c2goeWllbGQgZXhlY1Rlc3QodFtpXSwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnRlc3QpKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSAoeWllbGQgUHJvbWlzZS5hbGwocmVzKSkuZmlsdGVyKChkKSA9PiBkLnJlc3VsdCAhPSAnc2tpcHBlZCcpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYWZ0ZXIpXG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHZhbHVlLmFmdGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmFmdGVyU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlLmFmdGVyU3RhdHVzKVxuICAgICAgICAgICAgICAgIGRhdGEucHVzaCh7IGNhdGVnb3J5OiBrZXksIG5hbWU6ICdpbml0JywgcmVzdWx0OiB2YWx1ZS5hZnRlclN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5iZWZvcmVTdGF0dXMpXG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKHsgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2luaXQnLCByZXN1bHQ6IHZhbHVlLmJlZm9yZVN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCguLi5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy50ZXN0Q29udGV4dC5jYXRjaFVuaGFuZGxlZCkge1xuICAgICAgICAgICAgeWllbGQgZGVsYXkoMTAwMCk7XG4gICAgICAgICAgICBpZiAoZ3Jvay5zaGVsbC5sYXN0RXJyb3IubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnVW5oYW5kbGVkIGV4Y2VwdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZXhjZXB0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogZ3Jvay5zaGVsbC5sYXN0RXJyb3IsIHN1Y2Nlc3M6IGZhbHNlLCBtczogMCwgc2tpcHBlZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy50ZXN0Q29udGV4dC5yZXBvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBERy5Mb2dnZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NmdWwgPSByZXN1bHRzLmZpbHRlcigocikgPT4gci5zdWNjZXNzKS5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBza2lwcGVkID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+IHIuc2tpcHBlZCkubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgZmFpbGVkID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+ICFyLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSAnUGFja2FnZSBAcGFja2FnZSB0ZXN0ZWQ6IEBzdWNjZXNzZnVsIHN1Y2Nlc3NmdWwsIEBza2lwcGVkIHNraXBwZWQsIEBmYWlsZWQgZmFpbGVkIHRlc3RzJztcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzZnVsOiBzdWNjZXNzZnVsLFxuICAgICAgICAgICAgICAgIHNraXBwZWQ6IHNraXBwZWQsXG4gICAgICAgICAgICAgICAgZmFpbGVkOiBmYWlsZWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIHBhY2thZ2U6IHBhY2thZ2VfXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yIChjb25zdCByIG9mIGZhaWxlZClcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHBhcmFtcywgeyBbYCR7ci5jYXRlZ29yeX0gfCAke3IubmFtZX1gXTogci5yZXN1bHQgfSk7XG4gICAgICAgICAgICBsb2dnZXIubG9nKGRlc2NyaXB0aW9uLCBwYXJhbXMsICdwYWNrYWdlLXRlc3RlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZXhlY1Rlc3QodCwgcHJlZGljYXRlKSB7XG4gICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHI7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHByZWRpY2F0ZSAhPSB1bmRlZmluZWQgJiYgKCF0Lm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHByZWRpY2F0ZS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICAgIGNvbnN0IHNraXAgPSAoKF9hID0gdC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2tpcFJlYXNvbikgfHwgZmlsdGVyO1xuICAgICAgICBjb25zdCBza2lwUmVhc29uID0gZmlsdGVyID8gJ3NraXBwZWQnIDogKF9iID0gdC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2tpcFJlYXNvbjtcbiAgICAgICAgaWYgKCFza2lwKVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFN0YXJ0ZWQgJHt0LmNhdGVnb3J5fSAke3QubmFtZX1gKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNraXApXG4gICAgICAgICAgICAgICAgciA9IHsgc3VjY2VzczogdHJ1ZSwgcmVzdWx0OiBza2lwUmVhc29uLCBtczogMCwgc2tpcHBlZDogdHJ1ZSB9O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHIgPSB7IHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogKF9jID0geWllbGQgdC50ZXN0KCkpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6ICdPSycsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICByID0geyBzdWNjZXNzOiBmYWxzZSwgcmVzdWx0OiB4LnRvU3RyaW5nKCksIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0b3AgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHIubXMgPSBzdG9wIC0gc3RhcnQ7XG4gICAgICAgIGlmICghc2tpcClcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGaW5pc2hlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfSBmb3IgJHtyLm1zfSBtc2ApO1xuICAgICAgICByLmNhdGVnb3J5ID0gdC5jYXRlZ29yeTtcbiAgICAgICAgci5uYW1lID0gdC5uYW1lO1xuICAgICAgICByZXR1cm4gcjtcbiAgICB9KTtcbn1cbi8qIFdhaXRzIFttc10gbWlsbGlzZWNvbmRzICovXG5leHBvcnQgZnVuY3Rpb24gZGVsYXkobXMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGF3YWl0Q2hlY2soY2hlY2tIYW5kbGVyLCBlcnJvciA9ICdUaW1lb3V0IGV4Y2VlZGVkJywgd2FpdCA9IDUwMCwgaW50ZXJ2YWwgPSA1MCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IpKTtcbiAgICAgICAgICAgIH0sIHdhaXQpO1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tIYW5kbGVyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2dQcmVzZW50KGRpYWxvZ1RpdGxlKSB7XG4gICAgY29uc3QgZGlhbG9ncyA9IERHLkRpYWxvZy5nZXRPcGVuRGlhbG9ncygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlhbG9ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZGlhbG9nc1tpXS50aXRsZSA9PSBkaWFsb2dUaXRsZSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gdGVzdFZpZXdlcih2LCBkZiwgZGV0ZWN0U2VtYW50aWNUeXBlcyA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKGRldGVjdFNlbWFudGljVHlwZXMpXG4gICAgICAgICAgICB5aWVsZCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG4gICAgICAgIGNvbnN0IHR2ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoZGYpO1xuICAgICAgICBjb25zdCB2aWV3ZXJOYW1lID0gYFtuYW1lPXZpZXdlci0ke3YucmVwbGFjZSgvXFxzKy9nLCAnLScpfSBpXWA7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gYCR7dmlld2VyTmFtZX0gY2FudmFzLCR7dmlld2VyTmFtZX0gc3ZnLCR7dmlld2VyTmFtZX0gaW1nLFxuICAgICR7dmlld2VyTmFtZX0gaW5wdXQsJHt2aWV3ZXJOYW1lfSBoMSwke3ZpZXdlck5hbWV9IGFgO1xuICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCB2aWV3ZXIgPSB0di5hZGRWaWV3ZXIodik7XG4gICAgICAgICAgICB5aWVsZCBhd2FpdENoZWNrKCgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpICE9PSBudWxsLCAnY2Fubm90IGxvYWQgdmlld2VyJywgMzAwMCk7XG4gICAgICAgICAgICByZXMucHVzaChBcnJheS5mcm9tKHR2LnZpZXdlcnMpLmxlbmd0aCk7XG4gICAgICAgICAgICBBcnJheS5mcm9tKGRmLnJvdygwKS5jZWxscykuZm9yRWFjaCgoYykgPT4gYy52YWx1ZSA9IG51bGwpO1xuICAgICAgICAgICAgZGYucm93cy5zZWxlY3QoKHJvdykgPT4gcm93LmlkeCA+IDEgJiYgcm93LmlkeCA8IDcpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDc7IGkgPCAxMjsgaSsrKVxuICAgICAgICAgICAgICAgIGRmLmZpbHRlci5zZXQoaSwgZmFsc2UpO1xuICAgICAgICAgICAgZGYuY3VycmVudFJvd0lkeCA9IDE7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHZpZXdlci5nZXRPcHRpb25zKHRydWUpLmxvb2s7XG4gICAgICAgICAgICBjb25zdCBuZXdQcm9wcyA9IHt9O1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZpbHRlcigoaykgPT4gdHlwZW9mIHByb3BzW2tdID09PSAnYm9vbGVhbicpLmZvckVhY2goKGspID0+IG5ld1Byb3BzW2tdID0gIXByb3BzW2tdKTtcbiAgICAgICAgICAgIHZpZXdlci5zZXRPcHRpb25zKG5ld1Byb3BzKTtcbiAgICAgICAgICAgIHlpZWxkIGRlbGF5KDI1MCk7XG4gICAgICAgICAgICBjb25zdCBsYXlvdXQgPSB0di5zYXZlTGF5b3V0KCk7XG4gICAgICAgICAgICBjb25zdCBvbGRQcm9wcyA9IHZpZXdlci5nZXRPcHRpb25zKCkubG9vaztcbiAgICAgICAgICAgIHR2LnJlc2V0TGF5b3V0KCk7XG4gICAgICAgICAgICByZXMucHVzaChBcnJheS5mcm9tKHR2LnZpZXdlcnMpLmxlbmd0aCk7XG4gICAgICAgICAgICB0di5sb2FkTGF5b3V0KGxheW91dCk7XG4gICAgICAgICAgICB5aWVsZCBhd2FpdENoZWNrKCgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpICE9PSBudWxsLCAnY2Fubm90IGxvYWQgdmlld2VyIGZyb20gbGF5b3V0JywgMzAwMCk7XG4gICAgICAgICAgICB5aWVsZCBkZWxheSgyNTApO1xuICAgICAgICAgICAgcmVzLnB1c2goQXJyYXkuZnJvbSh0di52aWV3ZXJzKS5sZW5ndGgpO1xuICAgICAgICAgICAgdmlld2VyID0gQXJyYXkuZnJvbSh0di52aWV3ZXJzKS5maW5kKCh2KSA9PiB2LnR5cGUgIT09ICdHcmlkJyk7XG4gICAgICAgICAgICBleHBlY3RBcnJheShyZXMsIFsyLCAxLCAyXSk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkodmlld2VyLmdldE9wdGlvbnMoKS5sb29rKSwgSlNPTi5zdHJpbmdpZnkob2xkUHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHR2LmNsb3NlKCk7XG4gICAgICAgICAgICBncm9rLnNoZWxsLmNsb3NlVGFibGUoZGYpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkR1Z6ZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJblJsYzNRdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN08wRkJRVUVzVDBGQlR5eExRVUZMTEVsQlFVa3NUVUZCVFN4dFFrRkJiVUlzUTBGQlF6dEJRVU14UXl4UFFVRlBMRXRCUVVzc1JVRkJSU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRPMEZCUzNSRExFMUJRVTBzUTBGQlF5eE5RVUZOTEV0QlFVc3NSMEZMWkN4RlFVRkZMRU5CUVVNN1FVRkZVQ3hOUVVGTkxHZENRVUZuUWl4SFFVRkhMRmxCUVZrc1EwRkJRenRCUVVOMFF5eE5RVUZOTEdGQlFXRXNSMEZCTmtJc1JVRkJSU3hEUVVGRE8wRkJRMjVFTEUxQlFVMHNRMEZCUXl4SlFVRkpMR1ZCUVhWQ0xFTkJRVU03UVVGRmJrTXNUVUZCVFN4TFFVRlhMRTFCUVUwc1EwRkxkRUk3UVVGTVJDeFhRVUZwUWl4TlFVRk5PMGxCUTNKQ0xGTkJRV2RDTEU5QlFVOHNRMEZCUXl4TFFVRlZMRVZCUVVVc1NVRkJZVHRSUVVNdlF5eEpRVUZKTEV0QlFVc3NTVUZCU1N4SlFVRkpPMWxCUTJZc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITEVsQlFVa3NTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4alFVRmpMRU5CUVVNc1EwRkJRenRKUVVOd1JTeERRVUZETzBsQlNHVXNZMEZCVHl4VlFVZDBRaXhEUVVGQk8wRkJRMGdzUTBGQlF5eEZRVXhuUWl4TlFVRk5MRXRCUVU0c1RVRkJUU3hSUVV0MFFqdEJRVkZFTEUxQlFVMHNUMEZCVHl4WFFVRlhPMGxCU1hSQ0xGbEJRVmtzWTBGQmQwSXNSVUZCUlN4TlFVRm5RanRSUVVoMFJDeHRRa0ZCWXl4SFFVRkhMRWxCUVVrc1EwRkJRenRSUVVOMFFpeFhRVUZOTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUjJJc1NVRkJTU3hqUVVGakxFdEJRVXNzVTBGQlV6dFpRVUZGTEVsQlFVa3NRMEZCUXl4alFVRmpMRWRCUVVjc1kwRkJZeXhEUVVGRE8xRkJRM1pGTEVsQlFVa3NUVUZCVFN4TFFVRkxMRk5CUVZNN1dVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXp0SlFVTnFSQ3hEUVVGRE8wbEJRVUVzUTBGQlF6dERRVU5JTzBGQlJVUXNUVUZCVFN4UFFVRlBMRWxCUVVrN1NVRk5aaXhaUVVGWkxGRkJRV2RDTEVWQlFVVXNTVUZCV1N4RlFVRkZMRWxCUVhkQ0xFVkJRVVVzVDBGQmNVSTdPMUZCUTNwR0xFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NVVUZCVVN4RFFVRkRPMUZCUTNwQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTJwQ0xFOUJRVThzWVVGQlVDeFBRVUZQTEdOQlFWQXNUMEZCVHl4SlFVRlFMRTlCUVU4c1IwRkJTeXhGUVVGRkxFVkJRVU03VVVGRFppeE5RVUZCTEU5QlFVOHNRMEZCUXl4UFFVRlBMRzlEUVVGbUxFOUJRVThzUTBGQlF5eFBRVUZQTEVkQlFVc3NTMEZCU3l4RlFVRkRPMUZCUXpGQ0xFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NUMEZCVHl4RFFVRkRPMUZCUTNaQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NSMEZCZFVJc1JVRkJSVHRaUVVOdVF5eFBRVUZQTEVsQlFVa3NUMEZCVHl4RFFVRkRMRU5CUVU4c1QwRkJUeXhGUVVGRkxFMUJRVTBzUlVGQlJTeEZRVUZGTzJkQ1FVTXpReXhKUVVGSkxFMUJRVTBzUjBGQlJ5eEZRVUZGTEVOQlFVTTdaMEpCUTJoQ0xFbEJRVWs3YjBKQlEwWXNUVUZCVFN4SFFVRkhMRTFCUVUwc1NVRkJTU3hGUVVGRkxFTkJRVU03YVVKQlEzWkNPMmRDUVVGRExFOUJRVThzUTBGQlRTeEZRVUZGTzI5Q1FVTm1MRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHBRa0ZEV0R0blFrRkRSQ3hQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEYkVJc1EwRkJReXhEUVVGQkxFTkJRVU1zUTBGQlF6dFJRVU5NTEVOQlFVTXNRMEZCUVN4RFFVRkRPMGxCUTBvc1EwRkJRenREUVVOR08wRkJSVVFzVFVGQlRTeFZRVUZuUWl4VFFVRlRMRU5CUVVrc1MwRkJiMElzUlVGRGNrUXNUMEZCTUVJc1JVRkJSU3hQUVVGdFFpeEZRVUZGTEV0QlFXRXNRMEZCUXpzN1VVRkRMMFFzU1VGQlNTeEhRVUZwUWl4RFFVRkRPMUZCUTNSQ0xFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1RVRkJUU3hGUVVGRkxFVkJRVVU3V1VGRGNrTXNSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUlR0blFrRkROMElzU1VGQlNUdHZRa0ZEUml4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03YVVKQlEyWTdaMEpCUVVNc1QwRkJUeXhEUVVGRExFVkJRVVU3YjBKQlExWXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8ybENRVU5ZTzJkQ1FVTkVMRWRCUVVjc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dG5Ra0ZEYkVJc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFsQlEyaENMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRMGdzVlVGQlZTeERRVUZETEVkQlFVY3NSVUZCUlR0blFrRkRaQ3hIUVVGSExFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdaMEpCUTJ4Q0xIZEVRVUYzUkR0blFrRkRlRVFzVFVGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMWxCUTNCQ0xFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXp0WlFVTlFMRTlCUVU4c1JVRkJSU3hEUVVGRE8xRkJRMW9zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEVEN4RFFVRkRPME5CUVVFN1FVRkZSQ3hOUVVGTkxGVkJRVlVzU1VGQlNTeERRVUZETEVsQlFWa3NSVUZCUlN4SlFVRjNRaXhGUVVGRkxFOUJRWEZDTzBsQlEyaEdMRWxCUVVrc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eEpRVUZKTEZOQlFWTTdVVUZEY2tNc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTTVRaXhKUVVGSkxFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1UwRkJVenRSUVVNelF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU53UXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zUzBGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhsUVVGbExFVkJRVVVzU1VGQlNTeEZRVUZGTEVsQlFVa3NSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM0pHTEVOQlFVTTdRVUZGUkN4blJrRkJaMFk3UVVGRGFFWXNUVUZCVFN4VlFVRlZMRTFCUVUwc1EwRkJReXhOUVVGWExFVkJRVVVzVjBGQlowSXNTVUZCU1N4RlFVRkZMRXRCUVdNN1NVRkRkRVVzU1VGQlNTeExRVUZMTzFGQlExQXNTMEZCU3l4SFFVRkhMRWRCUVVjc1MwRkJTeXhKUVVGSkxFTkJRVU03TzFGQlEyeENMRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRGFFSXNTVUZCU1N4TlFVRk5MRXRCUVVzc1VVRkJVVHRSUVVOeVFpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRWRCUVVjc1MwRkJTeXhoUVVGaExGRkJRVkVzVjBGQlZ5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTNaRkxFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNWMEZCVnl4RFFVRkRMRTFCUVdNc1JVRkJSU3hSUVVGblFpeEZRVUZGTEZOQlFWTXNSMEZCUnl4TFFVRkxMRVZCUVVVc1MwRkJZenRKUVVNM1JpeEpRVUZKTEVOQlFVTXNUVUZCVFN4TFFVRkxMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNTVUZCU1N4UlFVRlJMRXRCUVVzc1RVRkJUU3hEUVVGRExHbENRVUZwUWl4RFFVRkRPMUZCUXpsRkxFTkJRVU1zVFVGQlRTeExRVUZMTEUxQlFVMHNRMEZCUXl4cFFrRkJhVUlzU1VGQlNTeFJRVUZSTEV0QlFVc3NUVUZCVFN4RFFVRkRMR2xDUVVGcFFpeERRVUZETzFGQlF6bEZMRU5CUVVNc1RVRkJUU3hMUVVGTExFMUJRVTBzUTBGQlF5eEhRVUZITEVsQlFVa3NVVUZCVVN4TFFVRkxMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdVVUZETVVZc1QwRkJUenRKUVVOVUxFMUJRVTBzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGSExGRkJRVkVzUTBGQlF5eEhRVUZITEZOQlFWTXNRMEZCUXp0SlFVTjZSQ3hOUVVGTkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVsQlFVa3NSVUZCUlN4SFFVRkhMRXRCUVVzc1lVRkJUQ3hMUVVGTExHTkJRVXdzUzBGQlN5eEhRVUZKTEVWQlFVVXNhVUpCUVdsQ0xGTkJRVk1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEY0VVc1NVRkJTU3hEUVVGRExGRkJRVkU3VVVGRFdDeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRmxCUVZrc1VVRkJVU3hUUVVGVExFMUJRVTBzYVVKQlFXbENMRk5CUVZNc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRGRFWXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hYUVVGWExFTkJRVU1zVFVGQmFVSXNSVUZCUlN4UlFVRnRRaXhGUVVGRkxFdEJRV003U1VGRGFFWXNUVUZCVFN4blFrRkJaMElzUjBGQlJ5eFJRVUZSTEVOQlFVTXNVVUZCVVN4RFFVRkRPMGxCUXpORExFMUJRVTBzWTBGQll5eEhRVUZITEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNN1NVRkRka01zVFVGQlRTeERRVUZETEdOQlFXTXNSVUZCUlN4blFrRkJaMElzUlVGQlJTeEhRVUZITEV0QlFVc3NZVUZCVEN4TFFVRkxMR05CUVV3c1MwRkJTeXhIUVVGSkxFVkJRVVVzWVVGQllTeERRVUZETEVOQlFVTTdTVUZGZEVVc1MwRkJTeXhOUVVGTkxFMUJRVTBzU1VGQlNTeFJRVUZSTEVOQlFVTXNUMEZCVHl4RlFVRkZPMUZCUTNKRExFMUJRVTBzV1VGQldTeEhRVUZITEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTjRSQ3hKUVVGSkxGbEJRVmtzU1VGQlNTeEpRVUZKTzFsQlEzUkNMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zVlVGQlZTeE5RVUZOTEVOQlFVTXNTVUZCU1N4WlFVRlpMRU5CUVVNc1EwRkJRenRSUVVOeVJDeEpRVUZKTEZsQlFWa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1RVRkJUU3hEUVVGRExFbEJRVWs3V1VGRGJFTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXhWUVVGVkxFMUJRVTBzUTBGQlF5eEpRVUZKTEd0Q1FVRnJRaXhOUVVGTkxFTkJRVU1zU1VGQlNTeFJRVUZSTEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRMnBITEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eG5Ra0ZCWjBJc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU42UXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpWQ0xFMUJRVTBzVjBGQlZ5eEhRVUZITEZsQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGVFTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3p0blFrRkRPVUlzVjBGQlZ5eERRVUZETEZkQlFWY3NSVUZCUlN4TFFVRkxMRVZCUVVVc1RVRkJUU3hGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzJsQ1FVTTFReXhKUVVGSkxFMUJRVTBzUTBGQlF5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVE8yZENRVU4yUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4SlFVRkpMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03TzJkQ1FVVXZReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEV0QlFVc3NSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRUUVVOeVF6dExRVU5HTzBGQlEwZ3NRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3haUVVGWkxFTkJRVU1zVFVGQk9FSXNSVUZCUlN4UlFVRm5RenRKUVVNelJpeExRVUZMTEUxQlFVMHNRMEZCUXl4WFFVRlhMRVZCUVVVc1lVRkJZU3hEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1JVRkJSVHRSUVVOdVJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhYUVVGWExFTkJRVU03V1VGRGNrTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXh6UWtGQmMwSXNWMEZCVnl4aFFVRmhMRU5CUVVNc1EwRkJRenRSUVVWc1JTeE5RVUZOTEZkQlFWY3NSMEZCUnl4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU03VVVGRGVFTXNTVUZCU1N4WFFVRlhMRmxCUVZrc1MwRkJTeXhKUVVGSkxHRkJRV0VzV1VGQldTeExRVUZMTzFsQlEyaEZMRmRCUVZjc1EwRkJReXhYUVVGWExFVkJRVVVzWVVGQllTeERRVUZETEVOQlFVTTdZVUZEY2tNc1NVRkJTU3hYUVVGWExGbEJRVmtzVFVGQlRTeEpRVUZKTEdGQlFXRXNXVUZCV1N4TlFVRk5PMWxCUTNaRkxGbEJRVmtzUTBGQlF5eFhRVUZYTEVWQlFVVXNZVUZCWVN4RFFVRkRMRU5CUVVNN1lVRkRkRU1zU1VGQlNTeE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNZVUZCWVN4RFFVRkRPMWxCUTNKRkxGZEJRVmNzUTBGQlF5eFhRVUZYTEVWQlFVVXNZVUZCWVN4RFFVRkRMRU5CUVVNN1lVRkRja01zU1VGQlNTeFhRVUZYTEVsQlFVa3NZVUZCWVR0WlFVTnVReXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEdGQlFXRXNZVUZCWVN4alFVRmpMRmRCUVZjc1YwRkJWeXhYUVVGWExFZEJRVWNzUTBGQlF5eERRVUZETzB0QlEycEhPMEZCUTBnc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeFhRVUZYTEVOQlFVTXNUVUZCYzBJc1JVRkJSU3hSUVVGM1FqdEpRVU14UlN4TlFVRk5MRmxCUVZrc1IwRkJSeXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETzBsQlEyNURMRTFCUVUwc1kwRkJZeXhIUVVGSExGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZGZGtNc1NVRkJTU3haUVVGWkxFbEJRVWtzWTBGQll5eEZRVUZGTzFGQlEyeERMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zTUVSQlFUQkVMRmxCUVZrc1IwRkJSenRaUVVOMlJpeG5RMEZCWjBNc1kwRkJZeXhGUVVGRkxFTkJRVU1zUTBGQlF6dExRVU55UkR0SlFVVkVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4WlFVRlpMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3VVVGRGNrTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExGbEJRVmtzUzBGQlN5eEpRVUZKTEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJXU3hMUVVGTE8xbEJRelZFTEZkQlFWY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRha01zU1VGQlNTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRmxCUVZrc1RVRkJUU3hKUVVGSkxGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCV1N4TlFVRk5PMWxCUTI1RkxGbEJRVmtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdZVUZEYkVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNdlFpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRmxCUVZrc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhUUVVGVExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1MwRkRha1k3UVVGRFNDeERRVUZETzBGQlJVUXNNa0pCUVRKQ08wRkJRek5DTEUxQlFVMHNWVUZCVlN4UlFVRlJMRU5CUVVNc1VVRkJaMElzUlVGQlJTeExRVUZwUWp0SlFVTXhSQ3hsUVVGbExFZEJRVWNzVVVGQlVTeERRVUZETzBsQlF6TkNMRXRCUVVzc1JVRkJSU3hEUVVGRE8wRkJRMVlzUTBGQlF6dEJRVVZFTEhWR1FVRjFSanRCUVVOMlJpeE5RVUZOTEZWQlFWVXNUVUZCVFN4RFFVRkRMRTFCUVRKQ08wbEJRMmhFTEVsQlFVa3NTMEZCU3l4RFFVRkRMR1ZCUVdVc1EwRkJReXhKUVVGSkxGTkJRVk03VVVGRGNrTXNTMEZCU3l4RFFVRkRMR1ZCUVdVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU01UWl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXp0QlFVTjZReXhEUVVGRE8wRkJSVVFzYzBaQlFYTkdPMEZCUTNSR0xFMUJRVTBzVlVGQlZTeExRVUZMTEVOQlFVTXNTMEZCTUVJN1NVRkRPVU1zU1VGQlNTeExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWxCUVVrc1UwRkJVenRSUVVOeVF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRemxDTEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJReXhMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETzBGQlEzWkRMRU5CUVVNN1FVRkZSQ3hUUVVGVExGbEJRVmtzUTBGQlF5eERRVUZUTEVWQlFVVXNRMEZCVlR0SlFVTjZReXhQUVVGUExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRGRrUXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJaMElzWVVGQllTeERRVUZETEZOQlFXbENMRVZCUVVVc1RVRkJXVHM3VVVGRGFrVXNTVUZCU1N4aFFVRmhMRU5CUVVNc1UwRkJVeXhEUVVGRE8xbEJRVVVzVDBGQlR6dFJRVU55UXl4TlFVRk5MRmRCUVZjc1IwRkJSeXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF6dFJRVU5zUkN4SlFVRkpMRmRCUVZjc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4TFFVRkxMRk5CUVZNc1JVRkJSVHRaUVVNdlF5eGhRVUZoTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRMmhETEU5QlFVODdVMEZEVWp0UlFVTkVMRTFCUVUwc1pVRkJaU3hIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU16UWl4TlFVRk5MR0ZCUVdFc1IwRkJSeXhOUVVGTkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNVMEZCVXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFJRVU0zUml4TlFVRk5MRWRCUVVjc1IwRkJSeXhKUVVGSkxFMUJRVTBzUTBGQlF5d3dRa0ZCTUVJc1EwRkJReXhEUVVGRE8xRkJRMjVFTEV0QlFVc3NUVUZCVFN4RFFVRkRMRWxCUVVrc1lVRkJZU3hGUVVGRk8xbEJRemRDTEUxQlFVMHNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEYUVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eEpRVUZKTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXp0blFrRkJSU3hUUVVGVE8xbEJReTlFTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8yZENRVU55UXl4TlFVRk5MRmRCUVZjc1IwRkJTU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZaTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8yZENRVU53UkN4SlFVRkpMRlZCUVZVc1EwRkJRenRuUWtGRFppeEpRVUZKTEZkQlFWY3NTVUZCU1N4RFFVRkJMRmRCUVZjc1lVRkJXQ3hYUVVGWExIVkNRVUZZTEZkQlFWY3NRMEZCUlN4TlFVRk5MRWxCUVVjc1EwRkJRenR2UWtGQlJTeFZRVUZWTEVkQlFVY3NWMEZCVnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU40UlN4bFFVRmxMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhGUVVGRkxFdEJRVXNzUTBGQlF5eE5RVUZOTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RlFVRkZMRWRCUVZNc1JVRkJSVHR2UWtGRE4wY3NUVUZCVFN4SFFVRkhMRWRCUVVjc1RVRkJUU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2IwSkJRMnBGTERSRFFVRTBRenR2UWtGRE5VTXNTVUZCU1N4SFFVRkhMRXRCUVVzc1NVRkJTVHQzUWtGQlJTeE5RVUZOTEZkQlFWY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU03WjBKQlEyaEVMRU5CUVVNc1EwRkJRU3hGUVVGRkxFVkJRVU1zVlVGQlZTeEZRVUZGTEZWQlFWVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRoUVVNdlFqdFRRVU5HTzFGQlEwUXNZVUZCWVN4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU5vUXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFMUJRVTA3V1VGQlJTeFBRVUZQTzFGQlEzQkRMRmRCUVZjc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SFFVRkhMRVZCUVVNc1MwRkJTeXhGUVVGRkxHVkJRV1VzUlVGQlF5eERRVUZETzBsQlF6TkVMRU5CUVVNN1EwRkJRVHRCUVVWRUxFMUJRVTBzVlVGQlowSXNVVUZCVVN4RFFVRkRMRTlCUVhWRk96czdPMUZCUTNCSExFMUJRVTBzVVVGQlVTeEhRVUZITEUxQlFVRXNUVUZCUVN4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExHTkJRV01zUlVGQlJTd3dRMEZCUlN4SlFVRkpMREJEUVVGRkxFOUJRVThzUTBGQlF6dFJRVU5vUlN4TlFVRk5MR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdVVUZEYWtNc1RVRkJUU3hQUVVGUExFZEJRM1ZFTEVWQlFVVXNRMEZCUXp0UlFVTjJSU3hQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRPMUZCUXpkQ0xFOUJRVThzWVVGQlVDeFBRVUZQTEdOQlFWQXNUMEZCVHl4SlFVRlFMRTlCUVU4c1IwRkJTeXhGUVVGRkxFVkJRVU03VVVGRFppeFpRVUZCTEU5QlFWRXNSVUZCUXl4WFFVRlhMSFZEUVVGWUxGZEJRVmNzUjBGQlN5eEpRVUZKTEZkQlFWY3NSVUZCUlN4RlFVRkRPMUZCUXpORExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVMEZCVXl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVNeFFpeExRVUZMTEUxQlFVMHNRMEZCUXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSVHRaUVVOb1JDeEpRVUZKTEVOQlFVRXNUMEZCVHl4aFFVRlFMRTlCUVU4c2RVSkJRVkFzVDBGQlR5eERRVUZGTEZGQlFWRXNTMEZCU1N4VFFVRlRMRVZCUVVVN1owSkJRMnhETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEU5QlFVOHNZVUZCVUN4UFFVRlBMSFZDUVVGUUxFOUJRVThzUTBGQlJTeFJRVUZSTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN2IwSkJRMmhGTEZOQlFWTTdZVUZEV2p0WlFVTkVMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eEhRVUZITEZkQlFWY3NRMEZCUXl4RFFVRkRPMWxCUTNaRExFbEJRVWs3WjBKQlEwWXNTVUZCU1N4TFFVRkxMRU5CUVVNc1RVRkJUVHR2UWtGRFpDeE5RVUZOTEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRoUVVONFFqdFpRVUZETEU5QlFVOHNRMEZCVFN4RlFVRkZPMmRDUVVObUxFdEJRVXNzUTBGQlF5eFpRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8yRkJRMjVETzFsQlEwUXNUVUZCVFN4RFFVRkRMRWRCUVVjc1RVRkJRU3hMUVVGTExFTkJRVU1zUzBGQlN5eHRRMEZCU1N4RlFVRkZMRU5CUVVNN1dVRkROVUlzVFVGQlRTeEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRPMWxCUTJZc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTzJkQ1FVTXZRaXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeFBRVUZQTEdGQlFWQXNUMEZCVHl4MVFrRkJVQ3hQUVVGUExFTkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTm9SQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEUxQlFVMHNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNTVUZCU1N4VFFVRlRMRU5CUVVNc1EwRkJRenRaUVVNelJTeEpRVUZKTzJkQ1FVTkdMRWxCUVVrc1MwRkJTeXhEUVVGRExFdEJRVXM3YjBKQlEySXNUVUZCVFN4TFFVRkxMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU03WVVGRGRrSTdXVUZCUXl4UFFVRlBMRU5CUVUwc1JVRkJSVHRuUWtGRFppeExRVUZMTEVOQlFVTXNWMEZCVnl4SFFVRkhMRU5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dGhRVU5zUXp0WlFVTkVMRWxCUVVrc1MwRkJTeXhEUVVGRExGZEJRVmM3WjBKQlEyNUNMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlF5eFJRVUZSTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4WFFVRlhMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlF6ZEhMRWxCUVVrc1MwRkJTeXhEUVVGRExGbEJRVms3WjBKQlEzQkNMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlF5eFJRVUZSTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4WlFVRlpMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlF6bEhMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0VFFVTjJRanRSUVVORUxFbEJRVWtzVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4alFVRmpMRVZCUVVVN1dVRkRkRU1zVFVGQlRTeExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkRiRUlzU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTzJkQ1FVTnVReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETzI5Q1FVTllMRkZCUVZFc1JVRkJSU3h6UWtGQmMwSTdiMEpCUTJoRExFbEJRVWtzUlVGQlJTeFpRVUZaTzI5Q1FVTnNRaXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4VFFVRlRMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTE8ybENRVU53UlN4RFFVRkRMRU5CUVVNN1lVRkRTanRUUVVOR08xRkJRMFFzU1VGQlNTeFBRVUZQTEVOQlFVTXNWMEZCVnl4RFFVRkRMRTFCUVUwc1JVRkJSVHRaUVVNNVFpeE5RVUZOTEUxQlFVMHNSMEZCUnl4SlFVRkpMRVZCUVVVc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFpRVU12UWl4TlFVRk5MRlZCUVZVc1IwRkJSeXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRPMWxCUXpORUxFMUJRVTBzVDBGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU03V1VGRGVFUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdXVUZEYWtRc1RVRkJUU3hYUVVGWExFZEJRVWNzZVVaQlFYbEdMRU5CUVVNN1dVRkRPVWNzVFVGQlRTeE5RVUZOTEVkQlFVYzdaMEpCUTJJc1ZVRkJWU3hGUVVGRkxGVkJRVlU3WjBKQlEzUkNMRTlCUVU4c1JVRkJSU3hQUVVGUE8yZENRVU5vUWl4TlFVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFMUJRVTA3WjBKQlEzSkNMRTlCUVU4c1JVRkJSU3hSUVVGUk8yRkJRMnhDTEVOQlFVTTdXVUZEUml4TFFVRkxMRTFCUVUwc1EwRkJReXhKUVVGSkxFMUJRVTA3WjBKQlFVVXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFVkJRVVVzUlVGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRkZCUVZFc1RVRkJUU3hEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1RVRkJUU3hGUVVGRExFTkJRVU1zUTBGQlF6dFpRVU42Uml4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExGZEJRVmNzUlVGQlJTeE5RVUZOTEVWQlFVVXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF6dFRRVU51UkR0UlFVTkVMRTlCUVU4c1QwRkJUeXhEUVVGRE96dERRVU5vUWp0QlFVVkVMRk5CUVdVc1VVRkJVU3hEUVVGRExFTkJRVThzUlVGQlJTeFRRVUUyUWpzN08xRkJRelZFTEVsQlFVa3NRMEZCZFVjc1EwRkJRenRSUVVNMVJ5eE5RVUZOTEUxQlFVMHNSMEZCUnl4VFFVRlRMRWxCUVVrc1UwRkJVeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF5eFRRVUZUTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM0pITEUxQlFVMHNTVUZCU1N4SFFVRkhMRU5CUVVFc1RVRkJRU3hEUVVGRExFTkJRVU1zVDBGQlR5d3dRMEZCUlN4VlFVRlZMRXRCUVVrc1RVRkJUU3hEUVVGRE8xRkJRemRETEUxQlFVMHNWVUZCVlN4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRkJMRU5CUVVNc1EwRkJReXhQUVVGUExEQkRRVUZGTEZWQlFWVXNRMEZCUXp0UlFVTTVSQ3hKUVVGSkxFTkJRVU1zU1VGQlNUdFpRVU5RTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU1zVVVGQlVTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRMnBFTEUxQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRGVrSXNTVUZCU1R0WlFVTkdMRWxCUVVrc1NVRkJTVHRuUWtGRFRpeERRVUZETEVkQlFVY3NSVUZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeFZRVUZYTEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hQUVVGUExFVkJRVVVzU1VGQlNTeEZRVUZETEVOQlFVTTdPMmRDUVVVdlJDeERRVUZETEVkQlFVY3NSVUZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeE5RVUZCTEUxQlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3h0UTBGQlNTeEpRVUZKTEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hQUVVGUExFVkJRVVVzUzBGQlN5eEZRVUZETEVOQlFVTTdVMEZET1VVN1VVRkJReXhQUVVGUExFTkJRVTBzUlVGQlJUdFpRVU5tTEVOQlFVTXNSMEZCUnl4RlFVRkRMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEVOQlFVTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEU5QlFVOHNSVUZCUlN4TFFVRkxMRVZCUVVNc1EwRkJRenRUUVVOdVJUdFJRVU5FTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRGVFSXNZVUZCWVR0UlFVTmlMRU5CUVVNc1EwRkJReXhGUVVGRkxFZEJRVWNzU1VGQlNTeEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVTndRaXhKUVVGSkxFTkJRVU1zU1VGQlNUdFpRVU5RTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU1zVVVGQlVTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRkZCUVZFc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdVVUZEYWtVc1EwRkJReXhEUVVGRExGRkJRVkVzUjBGQlJ5eERRVUZETEVOQlFVTXNVVUZCVVN4RFFVRkRPMUZCUTNoQ0xFTkJRVU1zUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVOb1FpeFBRVUZQTEVOQlFVTXNRMEZCUXpzN1EwRkRWanRCUVVWRUxEWkNRVUUyUWp0QlFVTTNRaXhOUVVGTkxGVkJRV2RDTEV0QlFVc3NRMEZCUXl4RlFVRlZPenRSUVVOd1F5eE5RVUZOTEVsQlFVa3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRE9VTXNRMEZCUXp0RFFVRkJPMEZCUlVRc1RVRkJUU3hWUVVGblFpeFZRVUZWTEVOQlFVTXNXVUZCTWtJc1JVRkRNVVFzVVVGQlowSXNhMEpCUVd0Q0xFVkJRVVVzVDBGQlpTeEhRVUZITEVWQlFVVXNWMEZCYlVJc1JVRkJSVHM3VVVGRE4wVXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTEVWQlFVVXNSVUZCUlR0WlFVTnlReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eEZRVUZGTzJkQ1FVTmtMR0ZCUVdFc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dG5Ra0ZETVVJc1RVRkJUU3hEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRNMElzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTFRc1lVRkJZVHRaUVVOaUxFMUJRVTBzVlVGQlZTeEhRVUZaTEZkQlFWY3NRMEZCUXl4SFFVRkhMRVZCUVVVN1owSkJRek5ETEVsQlFVa3NXVUZCV1N4RlFVRkZMRVZCUVVVN2IwSkJRMnhDTEdGQlFXRXNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenR2UWtGRE1VSXNUMEZCVHl4RlFVRkZMRU5CUVVNN2FVSkJRMWc3V1VGRFNDeERRVUZETEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRaaXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5NTEVOQlFVTTdRMEZCUVR0QlFVVkVMRTFCUVUwc1ZVRkJWU3hsUVVGbExFTkJRVU1zVjBGQmJVSTdTVUZEYWtRc1RVRkJUU3hQUVVGUExFZEJRVWNzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4alFVRmpMRVZCUVVVc1EwRkJRenRKUVVNelF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRSUVVOMlF5eEpRVUZKTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFbEJRVWtzVjBGQlZ6dFpRVU5xUXl4UFFVRlBMRWxCUVVrc1EwRkJRenRMUVVObU8wbEJRMFFzVDBGQlR5eExRVUZMTEVOQlFVTTdRVUZEWml4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGblFpeFZRVUZWTEVOQlFVTXNRMEZCVXl4RlFVRkZMRVZCUVdkQ0xFVkJRVVVzYzBKQlFTdENMRXRCUVVzN08xRkJRMmhITEVsQlFVa3NiVUpCUVcxQ08xbEJRVVVzVFVGQlRTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTJwRkxFMUJRVTBzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1dVRkJXU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFGQlEzWkRMRTFCUVUwc1ZVRkJWU3hIUVVGSExHZENRVUZuUWl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUlVGQlJTeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRPMUZCUXk5RUxFMUJRVTBzVVVGQlVTeEhRVUZITEVkQlFVY3NWVUZCVlN4WFFVRlhMRlZCUVZVc1VVRkJVU3hWUVVGVk8wMUJRMnBGTEZWQlFWVXNWVUZCVlN4VlFVRlZMRTlCUVU4c1ZVRkJWU3hKUVVGSkxFTkJRVU03VVVGRGVFUXNUVUZCVFN4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRMllzU1VGQlNUdFpRVU5HTEVsQlFVa3NUVUZCVFN4SFFVRkhMRVZCUVVVc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZETjBJc1RVRkJUU3hWUVVGVkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNVVUZCVVN4RFFVRkRMR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eEpRVUZKTEVWQlF6bEVMRzlDUVVGdlFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUXpsQ0xFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRlRU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU16UkN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU53UkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRuUWtGQlJTeEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdXVUZEY2tRc1JVRkJSU3hEUVVGRExHRkJRV0VzUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEY2tJc1RVRkJUU3hMUVVGTExFZEJRVWNzVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRE0wTXNUVUZCVFN4UlFVRlJMRWRCUVRSQ0xFVkJRVVVzUTBGQlF6dFpRVU0zUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zVDBGQlR5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1UwRkJVeXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU40Unl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzFsQlF6VkNMRTFCUVUwc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEycENMRTFCUVUwc1RVRkJUU3hIUVVGSExFVkJRVVVzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0WlFVTXZRaXhOUVVGTkxGRkJRVkVzUjBGQlJ5eE5RVUZOTEVOQlFVTXNWVUZCVlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8xbEJRekZETEVWQlFVVXNRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJRenRaUVVOcVFpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xbEJRM2hETEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03V1VGRGRFSXNUVUZCVFN4VlFVRlZMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVVVGQlVTeERRVUZETEdGQlFXRXNRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhKUVVGSkxFVkJRemxFTEdkRFFVRm5ReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFsQlF6RkRMRTFCUVUwc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEycENMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEZUVNc1RVRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUzBGQlN5eE5RVUZOTEVOQlFVVXNRMEZCUXp0WlFVTm9SU3hYUVVGWExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlF6VkNMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRE5VVTdaMEpCUVZNN1dVRkRVaXhGUVVGRkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdXVUZEV0N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0VFFVTXpRanRKUVVOSUxFTkJRVU03UTBGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQXFJR0Z6SUdkeWIyc2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMMmR5YjJzbk8xeHVhVzF3YjNKMElDb2dZWE1nUkVjZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyUm5KenRjYm1sdGNHOXlkQ0I3VDJKelpYSjJZV0pzWlN3Z1UzVmljMk55YVhCMGFXOXVmU0JtY205dElDZHllR3B6Snp0Y2JtbHRjRzl5ZENCVWFXMWxiM1YwSUQwZ1RtOWtaVXBUTGxScGJXVnZkWFE3WEc1cGJYQnZjblFnZTBSaGRHRkdjbUZ0WlgwZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyUm5KenRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSFJsYzNSek9pQjdYRzRnSUZ0clpYazZJSE4wY21sdVoxMDZJSHRjYmlBZ0lDQjBaWE4wY3o4NklGUmxjM1JiWFN3Z1ltVm1iM0psUHpvZ0tDa2dQVDRnVUhKdmJXbHpaVHgyYjJsa1Bpd2dZV1owWlhJL09pQW9LU0E5UGlCUWNtOXRhWE5sUEhadmFXUStMRnh1SUNBZ0lHSmxabTl5WlZOMFlYUjFjejg2SUhOMGNtbHVaeXdnWVdaMFpYSlRkR0YwZFhNL09pQnpkSEpwYm1kY2JpQWdmVnh1ZlNBOUlIdDlPMXh1WEc1amIyNXpkQ0JoZFhSdlZHVnpkSE5EWVhST1lXMWxJRDBnSjBGMWRHOGdWR1Z6ZEhNbk8xeHVZMjl1YzNRZ2QyRnpVbVZuYVhOMFpYSmxaRG9nZTF0clpYazZJSE4wY21sdVoxMDZJR0p2YjJ4bFlXNTlJRDBnZTMwN1hHNWxlSEJ2Y25RZ2JHVjBJR04xY25KbGJuUkRZWFJsWjI5eWVUb2djM1J5YVc1bk8xeHVYRzVsZUhCdmNuUWdibUZ0WlhOd1lXTmxJR0Z6YzNWeVpTQjdYRzRnSUdWNGNHOXlkQ0JtZFc1amRHbHZiaUJ1YjNST2RXeHNLSFpoYkhWbE9pQmhibmtzSUc1aGJXVS9PaUJ6ZEhKcGJtY3BJSHRjYmlBZ0lDQnBaaUFvZG1Gc2RXVWdQVDBnYm5Wc2JDbGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ0pIdHVZVzFsSUQwOUlHNTFiR3dnUHlBblZtRnNkV1VuSURvZ2JtRnRaWDBnYm05MElHUmxabWx1WldSZ0tUdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRlJsYzNSUGNIUnBiMjV6SUh0Y2JpQWdkR2x0Wlc5MWREODZJRzUxYldKbGNqdGNiaUFnZFc1b1lXNWtiR1ZrUlhoalpYQjBhVzl1VkdsdFpXOTFkRDg2SUc1MWJXSmxjanRjYmlBZ2MydHBjRkpsWVhOdmJqODZJSE4wY21sdVp6dGNibjFjYmx4dVpYaHdiM0owSUdOc1lYTnpJRlJsYzNSRGIyNTBaWGgwSUh0Y2JpQWdZMkYwWTJoVmJtaGhibVJzWldRZ1BTQjBjblZsTzF4dUlDQnlaWEJ2Y25RZ1BTQm1ZV3h6WlR0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2loallYUmphRlZ1YUdGdVpHeGxaRDg2SUdKdmIyeGxZVzRzSUhKbGNHOXlkRDg2SUdKdmIyeGxZVzRwSUh0Y2JpQWdJQ0JwWmlBb1kyRjBZMmhWYm1oaGJtUnNaV1FnSVQwOUlIVnVaR1ZtYVc1bFpDa2dkR2hwY3k1allYUmphRlZ1YUdGdVpHeGxaQ0E5SUdOaGRHTm9WVzVvWVc1a2JHVmtPMXh1SUNBZ0lHbG1JQ2h5WlhCdmNuUWdJVDA5SUhWdVpHVm1hVzVsWkNrZ2RHaHBjeTV5WlhCdmNuUWdQU0J5WlhCdmNuUTdYRzRnSUgwN1hHNTlYRzVjYm1WNGNHOXlkQ0JqYkdGemN5QlVaWE4wSUh0Y2JpQWdkR1Z6ZERvZ0tDa2dQVDRnVUhKdmJXbHpaVHhoYm5rK08xeHVJQ0J1WVcxbE9pQnpkSEpwYm1jN1hHNGdJR05oZEdWbmIzSjVPaUJ6ZEhKcGJtYzdYRzRnSUc5d2RHbHZibk0vT2lCVVpYTjBUM0IwYVc5dWN6dGNibHh1SUNCamIyNXpkSEoxWTNSdmNpaGpZWFJsWjI5eWVUb2djM1J5YVc1bkxDQnVZVzFsT2lCemRISnBibWNzSUhSbGMzUTZJQ2dwSUQwK0lGQnliMjFwYzJVOFlXNTVQaXdnYjNCMGFXOXVjejg2SUZSbGMzUlBjSFJwYjI1ektTQjdYRzRnSUNBZ2RHaHBjeTVqWVhSbFoyOXllU0E5SUdOaGRHVm5iM0o1TzF4dUlDQWdJSFJvYVhNdWJtRnRaU0E5SUc1aGJXVTdYRzRnSUNBZ2IzQjBhVzl1Y3lBL1B6MGdlMzA3WEc0Z0lDQWdiM0IwYVc5dWN5NTBhVzFsYjNWMElEOC9QU0F6TURBd01EdGNiaUFnSUNCMGFHbHpMbTl3ZEdsdmJuTWdQU0J2Y0hScGIyNXpPMXh1SUNBZ0lIUm9hWE11ZEdWemRDQTlJR0Z6ZVc1aklDZ3BPaUJRY205dGFYTmxQR0Z1ZVQ0Z1BUNGdlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLR0Z6ZVc1aklDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYkdWMElISmxjM1ZzZENBOUlDY25PMXh1SUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsYzNWc2RDQTlJR0YzWVdsMElIUmxjM1FvS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pUb2dZVzU1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdjbVZxWldOMEtHVXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhKbGMyOXNkbVVvY21WemRXeDBLVHRjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJSDA3WEc0Z0lIMWNibjFjYmx4dVpYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJSFJsYzNSRmRtVnVkRHhVUGlobGRtVnVkRG9nVDJKelpYSjJZV0pzWlR4VVBpeGNiaUFnYUdGdVpHeGxjam9nS0dGeVozTTZJRlFwSUQwK0lIWnZhV1FzSUhSeWFXZG5aWEk2SUNncElEMCtJSFp2YVdRc0lHMXpPaUJ1ZFcxaVpYSWdQU0F3S1RvZ1VISnZiV2x6WlR4emRISnBibWMrSUh0Y2JpQWdiR1YwSUhOMVlqb2dVM1ZpYzJOeWFYQjBhVzl1TzF4dUlDQnlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVW9LSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dUlDQWdJSE4xWWlBOUlHVjJaVzUwTG5OMVluTmpjbWxpWlNnb1lYSm5jeWtnUFQ0Z2UxeHVJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnYUdGdVpHeGxjaWhoY21kektUdGNiaUFnSUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQWdJQ0FnY21WcVpXTjBLR1VwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYzNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDQWdJQ0J5WlhOdmJIWmxLQ2RQU3ljcE8xeHVJQ0FnSUgwcE8xeHVJQ0FnSUhObGRGUnBiV1Z2ZFhRb0tDa2dQVDRnZTF4dUlDQWdJQ0FnYzNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDQWdJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnY0hKbFptVnlMWEJ5YjIxcGMyVXRjbVZxWldOMExXVnljbTl5YzF4dUlDQWdJQ0FnY21WcVpXTjBLQ2QwYVcxbGIzVjBKeWs3WEc0Z0lDQWdmU3dnYlhNcE8xeHVJQ0FnSUhSeWFXZG5aWElvS1R0Y2JpQWdmU2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjBaWE4wS0c1aGJXVTZJSE4wY21sdVp5d2dkR1Z6ZERvZ0tDa2dQVDRnVUhKdmJXbHpaVHhoYm5rK0xDQnZjSFJwYjI1elB6b2dWR1Z6ZEU5d2RHbHZibk1wT2lCMmIybGtJSHRjYmlBZ2FXWWdLSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwZ1BUMGdkVzVrWldacGJtVmtLVnh1SUNBZ0lIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjBnUFNCN2ZUdGNiaUFnYVdZZ0tIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjB1ZEdWemRITWdQVDBnZFc1a1pXWnBibVZrS1Z4dUlDQWdJSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwdWRHVnpkSE1nUFNCYlhUdGNiaUFnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTNTBaWE4wY3lFdWNIVnphQ2h1WlhjZ1ZHVnpkQ2hqZFhKeVpXNTBRMkYwWldkdmNua3NJRzVoYldVc0lIUmxjM1FzSUc5d2RHbHZibk1wS1R0Y2JuMWNibHh1THlvZ1ZHVnpkSE1nZEhkdklHOWlhbVZqZEhNZ1ptOXlJR1Z4ZFdGc2FYUjVMQ0IwYUhKdmQzTWdZVzRnWlhoalpYQjBhVzl1SUdsbUlIUm9aWGtnWVhKbElHNXZkQ0JsY1hWaGJDNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJsZUhCbFkzUW9ZV04wZFdGc09pQmhibmtzSUdWNGNHVmpkR1ZrT2lCaGJua2dQU0IwY25WbExDQmxjbkp2Y2o4NklITjBjbWx1WnlrNklIWnZhV1FnZTF4dUlDQnBaaUFvWlhKeWIzSXBYRzRnSUNBZ1pYSnliM0lnUFNCZ0pIdGxjbkp2Y24wc0lHQTdYRzRnSUdWc2MyVWdaWEp5YjNJZ1BTQW5KenRjYmlBZ2FXWWdLR0ZqZEhWaGJDQWhQVDBnWlhod1pXTjBaV1FwWEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQWtlMlZ5Y205eWZVVjRjR1ZqZEdWa0lGd2lKSHRsZUhCbFkzUmxaSDFjSWl3Z1oyOTBJRndpSkh0aFkzUjFZV3g5WENKZ0tUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdWNGNHVmpkRVpzYjJGMEtHRmpkSFZoYkRvZ2JuVnRZbVZ5TENCbGVIQmxZM1JsWkRvZ2JuVnRZbVZ5TENCMGIyeGxjbUZ1WTJVZ1BTQXdMakF3TVN3Z1pYSnliM0kvT2lCemRISnBibWNwT2lCMmIybGtJSHRjYmlBZ2FXWWdLQ2hoWTNSMVlXd2dQVDA5SUU1MWJXSmxjaTVRVDFOSlZFbFdSVjlKVGtaSlRrbFVXU0FtSmlCbGVIQmxZM1JsWkNBOVBUMGdUblZ0WW1WeUxsQlBVMGxVU1ZaRlgwbE9Sa2xPU1ZSWktTQjhmRnh1SUNBZ0lDQWdLR0ZqZEhWaGJDQTlQVDBnVG5WdFltVnlMazVGUjBGVVNWWkZYMGxPUmtsT1NWUlpJQ1ltSUdWNGNHVmpkR1ZrSUQwOVBTQk9kVzFpWlhJdVRrVkhRVlJKVmtWZlNVNUdTVTVKVkZrcElIeDhYRzRnSUNBZ0lDQW9ZV04wZFdGc0lEMDlQU0JPZFcxaVpYSXVUbUZPSUNZbUlHVjRjR1ZqZEdWa0lEMDlQU0JPZFcxaVpYSXVUbUZPS1NCOGZDQW9hWE5PWVU0b1lXTjBkV0ZzS1NBbUppQnBjMDVoVGlobGVIQmxZM1JsWkNrcEtWeHVJQ0FnSUhKbGRIVnlianRjYmlBZ1kyOXVjM1FnWVhKbFJYRjFZV3dnUFNCTllYUm9MbUZpY3loaFkzUjFZV3dnTFNCbGVIQmxZM1JsWkNrZ1BDQjBiMnhsY21GdVkyVTdYRzRnSUdWNGNHVmpkQ2hoY21WRmNYVmhiQ3dnZEhKMVpTd2dZQ1I3WlhKeWIzSWdQejhnSnlkOUlDaDBiMnhsY21GdVkyVWdQU0FrZTNSdmJHVnlZVzVqWlgwcFlDazdYRzRnSUdsbUlDZ2hZWEpsUlhGMVlXd3BYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCRmVIQmxZM1JsWkNBa2UyVjRjR1ZqZEdWa2ZTd2daMjkwSUNSN1lXTjBkV0ZzZlNBb2RHOXNaWEpoYm1ObElEMGdKSHQwYjJ4bGNtRnVZMlY5S1dBcE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWlhod1pXTjBWR0ZpYkdVb1lXTjBkV0ZzT2lCRVlYUmhSbkpoYldVc0lHVjRjR1ZqZEdWa09pQkVZWFJoUm5KaGJXVXNJR1Z5Y205eVB6b2djM1J5YVc1bktUb2dkbTlwWkNCN1hHNGdJR052Ym5OMElHVjRjR1ZqZEdWa1VtOTNRMjkxYm5RZ1BTQmxlSEJsWTNSbFpDNXliM2REYjNWdWREdGNiaUFnWTI5dWMzUWdZV04wZFdGc1VtOTNRMjkxYm5RZ1BTQmhZM1IxWVd3dWNtOTNRMjkxYm5RN1hHNGdJR1Y0Y0dWamRDaGhZM1IxWVd4U2IzZERiM1Z1ZEN3Z1pYaHdaV04wWldSU2IzZERiM1Z1ZEN3Z1lDUjdaWEp5YjNJZ1B6OGdKeWQ5TENCeWIzY2dZMjkxYm5SZ0tUdGNibHh1SUNCbWIzSWdLR052Ym5OMElHTnZiSFZ0YmlCdlppQmxlSEJsWTNSbFpDNWpiMngxYlc1ektTQjdYRzRnSUNBZ1kyOXVjM1FnWVdOMGRXRnNRMjlzZFcxdUlEMGdZV04wZFdGc0xtTnZiSFZ0Ym5NdVlubE9ZVzFsS0dOdmJIVnRiaTV1WVcxbEtUdGNiaUFnSUNCcFppQW9ZV04wZFdGc1EyOXNkVzF1SUQwOUlHNTFiR3dwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRU52YkhWdGJpQWtlMk52YkhWdGJpNXVZVzFsZlNCdWIzUWdabTkxYm1SZ0tUdGNiaUFnSUNCcFppQW9ZV04wZFdGc1EyOXNkVzF1TG5SNWNHVWdJVDBnWTI5c2RXMXVMblI1Y0dVcFhHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVOdmJIVnRiaUFrZTJOdmJIVnRiaTV1WVcxbGZTQjBlWEJsSUdWNGNHVmpkR1ZrSUNSN1kyOXNkVzF1TG5SNWNHVjlJR2R2ZENBa2UyRmpkSFZoYkVOdmJIVnRiaTUwZVhCbGZXQXBPMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2daWGh3WldOMFpXUlNiM2REYjNWdWREc2dhU3NyS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0IyWVd4MVpTQTlJR052YkhWdGJpNW5aWFFvYVNrN1hHNGdJQ0FnSUNCamIyNXpkQ0JoWTNSMVlXeFdZV3gxWlNBOUlHRmpkSFZoYkVOdmJIVnRiaTVuWlhRb2FTazdYRzRnSUNBZ0lDQnBaaUFvWTI5c2RXMXVMblI1Y0dVZ1BUMGdSRWN1VkZsUVJTNUdURTlCVkNsY2JpQWdJQ0FnSUNBZ1pYaHdaV04wUm14dllYUW9ZV04wZFdGc1ZtRnNkV1VzSUhaaGJIVmxMQ0F3TGpBd01ERXNJR1Z5Y205eUtUdGNiaUFnSUNBZ0lHVnNjMlVnYVdZZ0tHTnZiSFZ0Ymk1MGVYQmxJRDA5SUVSSExsUlpVRVV1UkVGVVJWOVVTVTFGS1Z4dUlDQWdJQ0FnSUNCbGVIQmxZM1FvWVdOMGRXRnNWbUZzZFdVdWFYTlRZVzFsS0haaGJIVmxLU3dnZEhKMVpTd2daWEp5YjNJcE8xeHVJQ0FnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0JsZUhCbFkzUW9ZV04wZFdGc1ZtRnNkV1VzSUhaaGJIVmxMQ0JsY25KdmNpazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmxlSEJsWTNSUFltcGxZM1FvWVdOMGRXRnNPaUI3SUZ0clpYazZJSE4wY21sdVoxMDZJR0Z1ZVNCOUxDQmxlSEJsWTNSbFpEb2dleUJiYTJWNU9pQnpkSEpwYm1kZE9pQmhibmtnZlNrZ2UxeHVJQ0JtYjNJZ0tHTnZibk4wSUZ0bGVIQmxZM1JsWkV0bGVTd2daWGh3WldOMFpXUldZV3gxWlYwZ2IyWWdUMkpxWldOMExtVnVkSEpwWlhNb1pYaHdaV04wWldRcEtTQjdYRzRnSUNBZ2FXWWdLQ0ZoWTNSMVlXd3VhR0Z6VDNkdVVISnZjR1Z5ZEhrb1pYaHdaV04wWldSTFpYa3BLVnh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQkZlSEJsWTNSbFpDQndjbTl3WlhKMGVTQmNJaVI3Wlhod1pXTjBaV1JMWlhsOVhDSWdibTkwSUdadmRXNWtZQ2s3WEc1Y2JpQWdJQ0JqYjI1emRDQmhZM1IxWVd4V1lXeDFaU0E5SUdGamRIVmhiRnRsZUhCbFkzUmxaRXRsZVYwN1hHNGdJQ0FnYVdZZ0tHRmpkSFZoYkZaaGJIVmxJR2x1YzNSaGJtTmxiMllnUVhKeVlYa2dKaVlnWlhod1pXTjBaV1JXWVd4MVpTQnBibk4wWVc1alpXOW1JRUZ5Y21GNUtWeHVJQ0FnSUNBZ1pYaHdaV04wUVhKeVlYa29ZV04wZFdGc1ZtRnNkV1VzSUdWNGNHVmpkR1ZrVm1Gc2RXVXBPMXh1SUNBZ0lHVnNjMlVnYVdZZ0tHRmpkSFZoYkZaaGJIVmxJR2x1YzNSaGJtTmxiMllnVDJKcVpXTjBJQ1ltSUdWNGNHVmpkR1ZrVm1Gc2RXVWdhVzV6ZEdGdVkyVnZaaUJQWW1wbFkzUXBYRzRnSUNBZ0lDQmxlSEJsWTNSUFltcGxZM1FvWVdOMGRXRnNWbUZzZFdVc0lHVjRjR1ZqZEdWa1ZtRnNkV1VwTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLRTUxYldKbGNpNXBjMFpwYm1sMFpTaGhZM1IxWVd4V1lXeDFaU2tnSmlZZ1RuVnRZbVZ5TG1selJtbHVhWFJsS0dWNGNHVmpkR1ZrVm1Gc2RXVXBLVnh1SUNBZ0lDQWdaWGh3WldOMFJteHZZWFFvWVdOMGRXRnNWbUZzZFdVc0lHVjRjR1ZqZEdWa1ZtRnNkV1VwTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLR0ZqZEhWaGJGWmhiSFZsSUNFOUlHVjRjR1ZqZEdWa1ZtRnNkV1VwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRVY0Y0dWamRHVmtJQ2drZTJWNGNHVmpkR1ZrVm1Gc2RXVjlLU0JtYjNJZ2EyVjVJQ2NrZTJWNGNHVmpkR1ZrUzJWNWZTY3NJR2R2ZENBb0pIdGhZM1IxWVd4V1lXeDFaWDBwWUNrN1hHNGdJSDFjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHVjRjR1ZqZEVGeWNtRjVLR0ZqZEhWaGJEb2dRWEp5WVhsTWFXdGxQR0Z1ZVQ0c0lHVjRjR1ZqZEdWa09pQkJjbkpoZVV4cGEyVThZVzU1UGlrZ2UxeHVJQ0JqYjI1emRDQmhZM1IxWVd4TVpXNW5kR2dnUFNCaFkzUjFZV3d1YkdWdVozUm9PMXh1SUNCamIyNXpkQ0JsZUhCbFkzUmxaRXhsYm1kMGFDQTlJR1Y0Y0dWamRHVmtMbXhsYm1kMGFEdGNibHh1SUNCcFppQW9ZV04wZFdGc1RHVnVaM1JvSUNFOUlHVjRjR1ZqZEdWa1RHVnVaM1JvS1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JCY25KaGVYTWdZWEpsSUc5bUlHUnBabVpsY21WdWRDQnNaVzVuZEdnNklHRmpkSFZoYkNCaGNuSmhlU0JzWlc1bmRHZ2dhWE1nSkh0aFkzUjFZV3hNWlc1bmRHaDlJR0FnSzF4dUlDQWdJQ0FnWUdGdVpDQmxlSEJsWTNSbFpDQmhjbkpoZVNCc1pXNW5kR2dnYVhNZ0pIdGxlSEJsWTNSbFpFeGxibWQwYUgxZ0tUdGNiaUFnZlZ4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWVdOMGRXRnNUR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0JwWmlBb1lXTjBkV0ZzVzJsZElHbHVjM1JoYm1ObGIyWWdRWEp5WVhrZ0ppWWdaWGh3WldOMFpXUmJhVjBnYVc1emRHRnVZMlZ2WmlCQmNuSmhlU2xjYmlBZ0lDQWdJR1Y0Y0dWamRFRnljbUY1S0dGamRIVmhiRnRwWFN3Z1pYaHdaV04wWldSYmFWMHBPMXh1SUNBZ0lHVnNjMlVnYVdZZ0tHRmpkSFZoYkZ0cFhTQnBibk4wWVc1alpXOW1JRTlpYW1WamRDQW1KaUJsZUhCbFkzUmxaRnRwWFNCcGJuTjBZVzVqWlc5bUlFOWlhbVZqZENsY2JpQWdJQ0FnSUdWNGNHVmpkRTlpYW1WamRDaGhZM1IxWVd4YmFWMHNJR1Y0Y0dWamRHVmtXMmxkS1R0Y2JpQWdJQ0JsYkhObElHbG1JQ2hoWTNSMVlXeGJhVjBnSVQwZ1pYaHdaV04wWldSYmFWMHBYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFVjRjR1ZqZEdWa0lDUjdaWGh3WldOMFpXUmJhVjE5SUdGMElIQnZjMmwwYVc5dUlDUjdhWDBzSUdkdmRDQWtlMkZqZEhWaGJGdHBYWDFnS1R0Y2JpQWdmVnh1ZlZ4dVhHNHZLaUJFWldacGJtVnpJR0VnZEdWemRDQnpkV2wwWlM0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmpZWFJsWjI5eWVTaGpZWFJsWjI5eWVUb2djM1J5YVc1bkxDQjBaWE4wY3pvZ0tDa2dQVDRnZG05cFpDazZJSFp2YVdRZ2UxeHVJQ0JqZFhKeVpXNTBRMkYwWldkdmNua2dQU0JqWVhSbFoyOXllVHRjYmlBZ2RHVnpkSE1vS1R0Y2JuMWNibHh1THlvZ1JHVm1hVzVsY3lCaElHWjFibU4wYVc5dUlIUnZJR0psSUdWNFpXTjFkR1ZrSUdKbFptOXlaU0IwYUdVZ2RHVnpkSE1nYVc0Z2RHaHBjeUJqWVhSbFoyOXllU0JoY21VZ1pYaGxZM1YwWldRdUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZbVZtYjNKbEtHSmxabTl5WlRvZ0tDa2dQVDRnVUhKdmJXbHpaVHgyYjJsa1BpazZJSFp2YVdRZ2UxeHVJQ0JwWmlBb2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYU0E5UFNCMWJtUmxabWx1WldRcFhHNGdJQ0FnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTQTlJSHQ5TzF4dUlDQjBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkTG1KbFptOXlaU0E5SUdKbFptOXlaVHRjYm4xY2JseHVMeW9nUkdWbWFXNWxjeUJoSUdaMWJtTjBhVzl1SUhSdklHSmxJR1Y0WldOMWRHVmtJR0ZtZEdWeUlIUm9aU0IwWlhOMGN5QnBiaUIwYUdseklHTmhkR1ZuYjNKNUlHRnlaU0JsZUdWamRYUmxaQzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCaFpuUmxjaWhoWm5SbGNqb2dLQ2tnUFQ0Z1VISnZiV2x6WlR4MmIybGtQaWs2SUhadmFXUWdlMXh1SUNCcFppQW9kR1Z6ZEhOYlkzVnljbVZ1ZEVOaGRHVm5iM0o1WFNBOVBTQjFibVJsWm1sdVpXUXBYRzRnSUNBZ2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYU0E5SUh0OU8xeHVJQ0IwWlhOMGMxdGpkWEp5Wlc1MFEyRjBaV2R2Y25sZExtRm1kR1Z5SUQwZ1lXWjBaWEk3WEc1OVhHNWNibVoxYm1OMGFXOXVJR0ZrWkU1aGJXVnpjR0ZqWlNoek9pQnpkSEpwYm1jc0lHWTZJRVJITGtaMWJtTXBPaUJ6ZEhKcGJtY2dlMXh1SUNCeVpYUjFjbTRnY3k1eVpYQnNZV05sS0c1bGR5QlNaV2RGZUhBb1ppNXVZVzFsTENBbloya25LU3dnWmk1dWNVNWhiV1VwTzF4dWZWeHVYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z2FXNXBkRUYxZEc5VVpYTjBjeWh3WVdOcllXZGxTV1E2SUhOMGNtbHVaeXdnYlc5a2RXeGxQem9nWVc1NUtTQjdYRzRnSUdsbUlDaDNZWE5TWldkcGMzUmxjbVZrVzNCaFkydGhaMlZKWkYwcElISmxkSFZ5Ymp0Y2JpQWdZMjl1YzNRZ2JXOWtkV3hsVkdWemRITWdQU0J0YjJSMWJHVWdQeUJ0YjJSMWJHVXVkR1Z6ZEhNZ09pQjBaWE4wY3p0Y2JpQWdhV1lnS0cxdlpIVnNaVlJsYzNSelcyRjFkRzlVWlhOMGMwTmhkRTVoYldWZElDRTlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0IzWVhOU1pXZHBjM1JsY21Wa1czQmhZMnRoWjJWSlpGMGdQU0IwY25WbE8xeHVJQ0FnSUhKbGRIVnlianRjYmlBZ2ZWeHVJQ0JqYjI1emRDQnRiMlIxYkdWQmRYUnZWR1Z6ZEhNZ1BTQmJYVHRjYmlBZ1kyOXVjM1FnY0dGamEwWjFibU4wYVc5dWN5QTlJR0YzWVdsMElHZHliMnN1WkdGd2FTNW1kVzVqZEdsdmJuTXVabWxzZEdWeUtHQndZV05yWVdkbExtbGtJRDBnWENJa2UzQmhZMnRoWjJWSlpIMWNJbUFwTG14cGMzUW9LVHRjYmlBZ1kyOXVjM1FnY21WbklEMGdibVYzSUZKbFowVjRjQ2d2TGlwY1hDOWNYQzljWEhNcWMydHBjRnM2WEZ4elhTb29MaW9wSkM4cE8xeHVJQ0JtYjNJZ0tHTnZibk4wSUdZZ2IyWWdjR0ZqYTBaMWJtTjBhVzl1Y3lrZ2UxeHVJQ0FnSUdOdmJuTjBJSFJsYzNSeklEMGdaaTV2Y0hScGIyNXpXeWQwWlhOMEoxMDdYRzRnSUNBZ2FXWWdLQ0VvZEdWemRITWdKaVlnUVhKeVlYa3VhWE5CY25KaGVTaDBaWE4wY3lrZ0ppWWdkR1Z6ZEhNdWJHVnVaM1JvS1NrZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMFpYTjBjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYzJ0cGNGSmxZWE52Ym5NZ1BTQW9kR1Z6ZEhOYmFWMGdZWE1nYzNSeWFXNW5LUzV0WVhSamFDaHlaV2NwTzF4dUlDQWdJQ0FnYkdWMElITnJhWEJTWldGemIyNDdYRzRnSUNBZ0lDQnBaaUFvYzJ0cGNGSmxZWE52Ym5NZ0ppWWdjMnRwY0ZKbFlYTnZibk0vTG14bGJtZDBhQ0ErSURFcElITnJhWEJTWldGemIyNGdQU0J6YTJsd1VtVmhjMjl1YzFzeFhUdGNiaUFnSUNBZ0lHMXZaSFZzWlVGMWRHOVVaWE4wY3k1d2RYTm9LRzVsZHlCVVpYTjBLR0YxZEc5VVpYTjBjME5oZEU1aGJXVXNJSFJsYzNSekxteGxibWQwYUNBOVBUMGdNU0EvSUdZdWJtRnRaU0E2SUdBa2UyWXVibUZ0WlgwZ0pIdHBJQ3NnTVgxZ0xDQmhjM2x1WXlBb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEpsY3lBOUlHRjNZV2wwSUdkeWIyc3VablZ1WTNScGIyNXpMbVYyWVd3b1lXUmtUbUZ0WlhOd1lXTmxLSFJsYzNSelcybGRMQ0JtS1NrN1hHNGdJQ0FnSUNBZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQnVieTEwYUhKdmR5MXNhWFJsY21Gc1hHNGdJQ0FnSUNBZ0lHbG1JQ2h5WlhNZ0lUMDlJSFJ5ZFdVcElIUm9jbTkzSUdCR1lXbHNaV1E2SUNSN2RHVnpkSE5iYVYxOVlEdGNiaUFnSUNBZ0lIMHNJSHR6YTJsd1VtVmhjMjl1T2lCemEybHdVbVZoYzI5dWZTa3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQjNZWE5TWldkcGMzUmxjbVZrVzNCaFkydGhaMlZKWkYwZ1BTQjBjblZsTzF4dUlDQnBaaUFvSVcxdlpIVnNaVUYxZEc5VVpYTjBjeTVzWlc1bmRHZ3BJSEpsZEhWeWJqdGNiaUFnYlc5a2RXeGxWR1Z6ZEhOYllYVjBiMVJsYzNSelEyRjBUbUZ0WlYwZ1BTQjdkR1Z6ZEhNNklHMXZaSFZzWlVGMWRHOVVaWE4wYzMwN1hHNTlYRzVjYm1WNGNHOXlkQ0JoYzNsdVl5Qm1kVzVqZEdsdmJpQnlkVzVVWlhOMGN5aHZjSFJwYjI1elB6b2dlMk5oZEdWbmIzSjVQem9nYzNSeWFXNW5MQ0IwWlhOMFB6b2djM1J5YVc1bkxDQjBaWE4wUTI5dWRHVjRkRDg2SUZSbGMzUkRiMjUwWlhoMGZTa2dlMXh1SUNCamIyNXpkQ0J3WVdOcllXZGxYeUE5SUdkeWIyc3VablZ1WTNScGIyNXpMbWRsZEVOMWNuSmxiblJEWVd4c0tDay9MbVoxYm1NL0xuQmhZMnRoWjJVN1hHNGdJR0YzWVdsMElHbHVhWFJCZFhSdlZHVnpkSE1vY0dGamEyRm5aVjh1YVdRcE8xeHVJQ0JqYjI1emRDQnlaWE4xYkhSek9pQjdJR05oZEdWbmIzSjVQem9nYzNSeWFXNW5MQ0J1WVcxbFB6b2djM1J5YVc1bkxDQnpkV05qWlhOek9pQmliMjlzWldGdUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsYzNWc2REb2djM1J5YVc1bkxDQnRjem9nYm5WdFltVnlMQ0J6YTJsd2NHVmtPaUJpYjI5c1pXRnVJSDFiWFNBOUlGdGRPMXh1SUNCamIyNXpiMnhsTG14dlp5aGdVblZ1Ym1sdVp5QjBaWE4wYzJBcE8xeHVJQ0J2Y0hScGIyNXpJRDgvUFNCN2ZUdGNiaUFnYjNCMGFXOXVjeUV1ZEdWemRFTnZiblJsZUhRZ1B6ODlJRzVsZHlCVVpYTjBRMjl1ZEdWNGRDZ3BPMXh1SUNCbmNtOXJMbk5vWld4c0xteGhjM1JGY25KdmNpQTlJQ2NuTzF4dUlDQm1iM0lnS0dOdmJuTjBJRnRyWlhrc0lIWmhiSFZsWFNCdlppQlBZbXBsWTNRdVpXNTBjbWxsY3loMFpYTjBjeWtwSUh0Y2JpQWdJQ0JwWmlBb2IzQjBhVzl1Y3o4dVkyRjBaV2R2Y25rZ0lUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdJQ0JwWmlBb0lXdGxlUzUwYjB4dmQyVnlRMkZ6WlNncExuTjBZWEowYzFkcGRHZ29iM0IwYVc5dWN6OHVZMkYwWldkdmNua3VkRzlNYjNkbGNrTmhjMlVvS1NrcFhHNGdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUgxY2JpQWdJQ0JqYjI1emIyeGxMbXh2WnloZ1UzUmhjblJsWkNBa2UydGxlWDBnWTJGMFpXZHZjbmxnS1R0Y2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ2FXWWdLSFpoYkhWbExtSmxabTl5WlNsY2JpQWdJQ0FnSUNBZ1lYZGhhWFFnZG1Gc2RXVXVZbVZtYjNKbEtDazdYRzRnSUNBZ2ZTQmpZWFJqYUNBb2VEb2dZVzU1S1NCN1hHNGdJQ0FnSUNCMllXeDFaUzVpWldadmNtVlRkR0YwZFhNZ1BTQjRMblJ2VTNSeWFXNW5LQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lHTnZibk4wSUhRZ1BTQjJZV3gxWlM1MFpYTjBjeUEvUHlCYlhUdGNiaUFnSUNCamIyNXpkQ0J5WlhNZ1BTQmJYVHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFF1YkdWdVozUm9PeUJwS3lzcFhHNGdJQ0FnSUNCeVpYTXVjSFZ6YUNoaGQyRnBkQ0JsZUdWalZHVnpkQ2gwVzJsZExDQnZjSFJwYjI1elB5NTBaWE4wS1NrN1hHNGdJQ0FnWTI5dWMzUWdaR0YwWVNBOUlDaGhkMkZwZENCUWNtOXRhWE5sTG1Gc2JDaHlaWE1wS1M1bWFXeDBaWElvS0dRcElEMCtJR1F1Y21WemRXeDBJQ0U5SUNkemEybHdjR1ZrSnlrN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lHbG1JQ2gyWVd4MVpTNWhablJsY2lsY2JpQWdJQ0FnSUNBZ1lYZGhhWFFnZG1Gc2RXVXVZV1owWlhJb0tUdGNiaUFnSUNCOUlHTmhkR05vSUNoNE9pQmhibmtwSUh0Y2JpQWdJQ0FnSUhaaGJIVmxMbUZtZEdWeVUzUmhkSFZ6SUQwZ2VDNTBiMU4wY21sdVp5Z3BPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9kbUZzZFdVdVlXWjBaWEpUZEdGMGRYTXBYRzRnSUNBZ0lDQmtZWFJoTG5CMWMyZ29lMk5oZEdWbmIzSjVPaUJyWlhrc0lHNWhiV1U2SUNkcGJtbDBKeXdnY21WemRXeDBPaUIyWVd4MVpTNWhablJsY2xOMFlYUjFjeXdnYzNWalkyVnpjem9nWm1Gc2MyVXNJRzF6T2lBd0xDQnphMmx3Y0dWa09pQm1ZV3h6WlgwcE8xeHVJQ0FnSUdsbUlDaDJZV3gxWlM1aVpXWnZjbVZUZEdGMGRYTXBYRzRnSUNBZ0lDQmtZWFJoTG5CMWMyZ29lMk5oZEdWbmIzSjVPaUJyWlhrc0lHNWhiV1U2SUNkcGJtbDBKeXdnY21WemRXeDBPaUIyWVd4MVpTNWlaV1p2Y21WVGRHRjBkWE1zSUhOMVkyTmxjM002SUdaaGJITmxMQ0J0Y3pvZ01Dd2djMnRwY0hCbFpEb2dabUZzYzJWOUtUdGNiaUFnSUNCeVpYTjFiSFJ6TG5CMWMyZ29MaTR1WkdGMFlTazdYRzRnSUgxY2JpQWdhV1lnS0c5d2RHbHZibk11ZEdWemRFTnZiblJsZUhRdVkyRjBZMmhWYm1oaGJtUnNaV1FwSUh0Y2JpQWdJQ0JoZDJGcGRDQmtaV3hoZVNneE1EQXdLVHRjYmlBZ0lDQnBaaUFvWjNKdmF5NXphR1ZzYkM1c1lYTjBSWEp5YjNJdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lDQWdjbVZ6ZFd4MGN5NXdkWE5vS0h0Y2JpQWdJQ0FnSUNBZ1kyRjBaV2R2Y25rNklDZFZibWhoYm1Sc1pXUWdaWGhqWlhCMGFXOXVjeWNzWEc0Z0lDQWdJQ0FnSUc1aGJXVTZJQ2RsZUdObGNIUnBiMjV6Snl4Y2JpQWdJQ0FnSUNBZ2NtVnpkV3gwT2lCbmNtOXJMbk5vWld4c0xteGhjM1JGY25KdmNpd2djM1ZqWTJWemN6b2dabUZzYzJVc0lHMXpPaUF3TENCemEybHdjR1ZrT2lCbVlXeHpaVnh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJR2xtSUNodmNIUnBiMjV6TG5SbGMzUkRiMjUwWlhoMExuSmxjRzl5ZENrZ2UxeHVJQ0FnSUdOdmJuTjBJR3h2WjJkbGNpQTlJRzVsZHlCRVJ5NU1iMmRuWlhJb0tUdGNiaUFnSUNCamIyNXpkQ0J6ZFdOalpYTnpablZzSUQwZ2NtVnpkV3gwY3k1bWFXeDBaWElvS0hJcElEMCtJSEl1YzNWalkyVnpjeWt1YkdWdVozUm9PMXh1SUNBZ0lHTnZibk4wSUhOcmFYQndaV1FnUFNCeVpYTjFiSFJ6TG1acGJIUmxjaWdvY2lrZ1BUNGdjaTV6YTJsd2NHVmtLUzVzWlc1bmRHZzdYRzRnSUNBZ1kyOXVjM1FnWm1GcGJHVmtJRDBnY21WemRXeDBjeTVtYVd4MFpYSW9LSElwSUQwK0lDRnlMbk4xWTJObGMzTXBPMXh1SUNBZ0lHTnZibk4wSUdSbGMyTnlhWEIwYVc5dUlEMGdKMUJoWTJ0aFoyVWdRSEJoWTJ0aFoyVWdkR1Z6ZEdWa09pQkFjM1ZqWTJWemMyWjFiQ0J6ZFdOalpYTnpablZzTENCQWMydHBjSEJsWkNCemEybHdjR1ZrTENCQVptRnBiR1ZrSUdaaGFXeGxaQ0IwWlhOMGN5YzdYRzRnSUNBZ1kyOXVjM1FnY0dGeVlXMXpJRDBnZTF4dUlDQWdJQ0FnYzNWalkyVnpjMloxYkRvZ2MzVmpZMlZ6YzJaMWJDeGNiaUFnSUNBZ0lITnJhWEJ3WldRNklITnJhWEJ3WldRc1hHNGdJQ0FnSUNCbVlXbHNaV1E2SUdaaGFXeGxaQzVzWlc1bmRHZ3NYRzRnSUNBZ0lDQndZV05yWVdkbE9pQndZV05yWVdkbFgxeHVJQ0FnSUgwN1hHNGdJQ0FnWm05eUlDaGpiMjV6ZENCeUlHOW1JR1poYVd4bFpDa2dUMkpxWldOMExtRnpjMmxuYmlod1lYSmhiWE1zSUh0YllDUjdjaTVqWVhSbFoyOXllWDBnZkNBa2UzSXVibUZ0WlgxZ1hUb2djaTV5WlhOMWJIUjlLVHRjYmlBZ0lDQnNiMmRuWlhJdWJHOW5LR1JsYzJOeWFYQjBhVzl1TENCd1lYSmhiWE1zSUNkd1lXTnJZV2RsTFhSbGMzUmxaQ2NwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ5WlhOMWJIUnpPMXh1ZlZ4dVhHNWhjM2x1WXlCbWRXNWpkR2x2YmlCbGVHVmpWR1Z6ZENoME9pQlVaWE4wTENCd2NtVmthV05oZEdVNklITjBjbWx1WnlCOElIVnVaR1ZtYVc1bFpDa2dlMXh1SUNCc1pYUWdjam9nZXlCallYUmxaMjl5ZVQ4NklITjBjbWx1Wnl3Z2JtRnRaVDg2SUhOMGNtbHVaeXdnYzNWalkyVnpjem9nWW05dmJHVmhiaXdnY21WemRXeDBPaUJ6ZEhKcGJtY3NJRzF6T2lCdWRXMWlaWElzSUhOcmFYQndaV1E2SUdKdmIyeGxZVzRnZlR0Y2JpQWdZMjl1YzNRZ1ptbHNkR1Z5SUQwZ2NISmxaR2xqWVhSbElDRTlJSFZ1WkdWbWFXNWxaQ0FtSmlBb0lYUXVibUZ0WlM1MGIweHZkMlZ5UTJGelpTZ3BMbk4wWVhKMGMxZHBkR2dvY0hKbFpHbGpZWFJsTG5SdlRHOTNaWEpEWVhObEtDa3BLVHRjYmlBZ1kyOXVjM1FnYzJ0cGNDQTlJSFF1YjNCMGFXOXVjejh1YzJ0cGNGSmxZWE52YmlCOGZDQm1hV3gwWlhJN1hHNGdJR052Ym5OMElITnJhWEJTWldGemIyNGdQU0JtYVd4MFpYSWdQeUFuYzJ0cGNIQmxaQ2NnT2lCMExtOXdkR2x2Ym5NL0xuTnJhWEJTWldGemIyNDdYRzRnSUdsbUlDZ2hjMnRwY0NsY2JpQWdJQ0JqYjI1emIyeGxMbXh2WnloZ1UzUmhjblJsWkNBa2UzUXVZMkYwWldkdmNubDlJQ1I3ZEM1dVlXMWxmV0FwTzF4dUlDQmpiMjV6ZENCemRHRnlkQ0E5SUc1bGR5QkVZWFJsS0NrN1hHNGdJSFJ5ZVNCN1hHNGdJQ0FnYVdZZ0tITnJhWEFwWEc0Z0lDQWdJQ0J5SUQwZ2UzTjFZMk5sYzNNNklIUnlkV1VzSUhKbGMzVnNkRG9nYzJ0cGNGSmxZWE52YmlFc0lHMXpPaUF3TENCemEybHdjR1ZrT2lCMGNuVmxmVHRjYmlBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0J5SUQwZ2UzTjFZMk5sYzNNNklIUnlkV1VzSUhKbGMzVnNkRG9nWVhkaGFYUWdkQzUwWlhOMEtDa2dQejhnSjA5TEp5d2diWE02SURBc0lITnJhWEJ3WldRNklHWmhiSE5sZlR0Y2JpQWdmU0JqWVhSamFDQW9lRG9nWVc1NUtTQjdYRzRnSUNBZ2NpQTlJSHR6ZFdOalpYTnpPaUJtWVd4elpTd2djbVZ6ZFd4ME9pQjRMblJ2VTNSeWFXNW5LQ2tzSUcxek9pQXdMQ0J6YTJsd2NHVmtPaUJtWVd4elpYMDdYRzRnSUgxY2JpQWdZMjl1YzNRZ2MzUnZjQ0E5SUc1bGR5QkVZWFJsS0NrN1hHNGdJQzh2SUVCMGN5MXBaMjV2Y21WY2JpQWdjaTV0Y3lBOUlITjBiM0FnTFNCemRHRnlkRHRjYmlBZ2FXWWdLQ0Z6YTJsd0tWeHVJQ0FnSUdOdmJuTnZiR1V1Ykc5bktHQkdhVzVwYzJobFpDQWtlM1F1WTJGMFpXZHZjbmw5SUNSN2RDNXVZVzFsZlNCbWIzSWdKSHR5TG0xemZTQnRjMkFwTzF4dUlDQnlMbU5oZEdWbmIzSjVJRDBnZEM1allYUmxaMjl5ZVR0Y2JpQWdjaTV1WVcxbElEMGdkQzV1WVcxbE8xeHVJQ0J5WlhSMWNtNGdjanRjYm4xY2JseHVMeW9nVjJGcGRITWdXMjF6WFNCdGFXeHNhWE5sWTI5dVpITWdLaTljYm1WNGNHOXlkQ0JoYzNsdVl5Qm1kVzVqZEdsdmJpQmtaV3hoZVNodGN6b2diblZ0WW1WeUtTQjdYRzRnSUdGM1lXbDBJRzVsZHlCUWNtOXRhWE5sS0NoeUtTQTlQaUJ6WlhSVWFXMWxiM1YwS0hJc0lHMXpLU2s3WEc1OVhHNWNibVY0Y0c5eWRDQmhjM2x1WXlCbWRXNWpkR2x2YmlCaGQyRnBkRU5vWldOcktHTm9aV05yU0dGdVpHeGxjam9nS0NrZ1BUNGdZbTl2YkdWaGJpeGNiaUFnWlhKeWIzSTZJSE4wY21sdVp5QTlJQ2RVYVcxbGIzVjBJR1Y0WTJWbFpHVmtKeXdnZDJGcGREb2diblZ0WW1WeUlEMGdOVEF3TENCcGJuUmxjblpoYkRvZ2JuVnRZbVZ5SUQwZ05UQXBPaUJRY205dGFYTmxQSFp2YVdRK0lIdGNiaUFnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNCelpYUlVhVzFsYjNWMEtDZ3BJRDArSUh0Y2JpQWdJQ0FnSUdOc1pXRnlTVzUwWlhKMllXd29hVzUwWlhKMllXeEpaQ2s3WEc0Z0lDQWdJQ0J5WldwbFkzUW9ibVYzSUVWeWNtOXlLR1Z5Y205eUtTazdYRzRnSUNBZ2ZTd2dkMkZwZENrN1hHNGdJQ0FnTHk4Z1FIUnpMV2xuYm05eVpWeHVJQ0FnSUdOdmJuTjBJR2x1ZEdWeWRtRnNTV1E2SUZScGJXVnZkWFFnUFNCelpYUkpiblJsY25aaGJDZ29LU0E5UGlCN1hHNGdJQ0FnSUNCcFppQW9ZMmhsWTJ0SVlXNWtiR1Z5S0NrcElIdGNiaUFnSUNBZ0lDQWdZMnhsWVhKSmJuUmxjblpoYkNocGJuUmxjblpoYkVsa0tUdGNiaUFnSUNBZ0lDQWdjbVZ6YjJ4MlpTZ3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMHNJR2x1ZEdWeWRtRnNLVHRjYmlBZ2ZTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGMwUnBZV3h2WjFCeVpYTmxiblFvWkdsaGJHOW5WR2wwYkdVNklITjBjbWx1WnlrNklHSnZiMnhsWVc0Z2UxeHVJQ0JqYjI1emRDQmthV0ZzYjJkeklEMGdSRWN1UkdsaGJHOW5MbWRsZEU5d1pXNUVhV0ZzYjJkektDazdYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1pHbGhiRzluY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lHbG1JQ2hrYVdGc2IyZHpXMmxkTG5ScGRHeGxJRDA5SUdScFlXeHZaMVJwZEd4bEtWeHVJQ0FnSUNBZ2NtVjBkWEp1SUhSeWRXVTdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHWmhiSE5sTzF4dWZWeHVYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z2RHVnpkRlpwWlhkbGNpaDJPaUJ6ZEhKcGJtY3NJR1JtT2lCRVJ5NUVZWFJoUm5KaGJXVXNJR1JsZEdWamRGTmxiV0Z1ZEdsalZIbHdaWE02SUdKdmIyeGxZVzRnUFNCbVlXeHpaU2s2SUZCeWIyMXBjMlU4ZG05cFpENGdlMXh1SUNCcFppQW9aR1YwWldOMFUyVnRZVzUwYVdOVWVYQmxjeWtnWVhkaGFYUWdaM0p2YXk1a1lYUmhMbVJsZEdWamRGTmxiV0Z1ZEdsalZIbHdaWE1vWkdZcE8xeHVJQ0JqYjI1emRDQjBkaUE5SUdkeWIyc3VjMmhsYkd3dVlXUmtWR0ZpYkdWV2FXVjNLR1JtS1R0Y2JpQWdZMjl1YzNRZ2RtbGxkMlZ5VG1GdFpTQTlJR0JiYm1GdFpUMTJhV1YzWlhJdEpIdDJMbkpsY0d4aFkyVW9MMXhjY3lzdlp5d2dKeTBuS1gwZ2FWMWdPMXh1SUNCamIyNXpkQ0J6Wld4bFkzUnZjaUE5SUdBa2UzWnBaWGRsY2s1aGJXVjlJR05oYm5aaGN5d2tlM1pwWlhkbGNrNWhiV1Y5SUhOMlp5d2tlM1pwWlhkbGNrNWhiV1Y5SUdsdFp5eGNiaUFnSUNBa2UzWnBaWGRsY2s1aGJXVjlJR2x1Y0hWMExDUjdkbWxsZDJWeVRtRnRaWDBnYURFc0pIdDJhV1YzWlhKT1lXMWxmU0JoWUR0Y2JpQWdZMjl1YzNRZ2NtVnpJRDBnVzEwN1hHNGdJSFJ5ZVNCN1hHNGdJQ0FnYkdWMElIWnBaWGRsY2lBOUlIUjJMbUZrWkZacFpYZGxjaWgyS1R0Y2JpQWdJQ0JoZDJGcGRDQmhkMkZwZEVOb1pXTnJLQ2dwSUQwK0lHUnZZM1Z0Wlc1MExuRjFaWEo1VTJWc1pXTjBiM0lvYzJWc1pXTjBiM0lwSUNFOVBTQnVkV3hzTEZ4dUlDQWdJQ0FnSjJOaGJtNXZkQ0JzYjJGa0lIWnBaWGRsY2ljc0lETXdNREFwTzF4dUlDQWdJSEpsY3k1d2RYTm9LRUZ5Y21GNUxtWnliMjBvZEhZdWRtbGxkMlZ5Y3lrdWJHVnVaM1JvS1R0Y2JpQWdJQ0JCY25KaGVTNW1jbTl0S0dSbUxuSnZkeWd3S1M1alpXeHNjeWt1Wm05eVJXRmphQ2dvWXlrZ1BUNGdZeTUyWVd4MVpTQTlJRzUxYkd3cE8xeHVJQ0FnSUdSbUxuSnZkM011YzJWc1pXTjBLQ2h5YjNjcElEMCtJSEp2ZHk1cFpIZ2dQaUF4SUNZbUlISnZkeTVwWkhnZ1BDQTNLVHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTnpzZ2FTQThJREV5T3lCcEt5c3BJR1JtTG1acGJIUmxjaTV6WlhRb2FTd2dabUZzYzJVcE8xeHVJQ0FnSUdSbUxtTjFjbkpsYm5SU2IzZEpaSGdnUFNBeE8xeHVJQ0FnSUdOdmJuTjBJSEJ5YjNCeklEMGdkbWxsZDJWeUxtZGxkRTl3ZEdsdmJuTW9kSEoxWlNrdWJHOXZhenRjYmlBZ0lDQmpiMjV6ZENCdVpYZFFjbTl3Y3pvZ1VtVmpiM0prUEhOMGNtbHVaeXdnWW05dmJHVmhiajRnUFNCN2ZUdGNiaUFnSUNCUFltcGxZM1F1YTJWNWN5aHdjbTl3Y3lrdVptbHNkR1Z5S0NocktTQTlQaUIwZVhCbGIyWWdjSEp2Y0hOYmExMGdQVDA5SUNkaWIyOXNaV0Z1SnlrdVptOXlSV0ZqYUNnb2F5a2dQVDRnYm1WM1VISnZjSE5iYTEwZ1BTQWhjSEp2Y0hOYmExMHBPMXh1SUNBZ0lIWnBaWGRsY2k1elpYUlBjSFJwYjI1ektHNWxkMUJ5YjNCektUdGNiaUFnSUNCaGQyRnBkQ0JrWld4aGVTZ3lOVEFwTzF4dUlDQWdJR052Ym5OMElHeGhlVzkxZENBOUlIUjJMbk5oZG1WTVlYbHZkWFFvS1R0Y2JpQWdJQ0JqYjI1emRDQnZiR1JRY205d2N5QTlJSFpwWlhkbGNpNW5aWFJQY0hScGIyNXpLQ2t1Ykc5dmF6dGNiaUFnSUNCMGRpNXlaWE5sZEV4aGVXOTFkQ2dwTzF4dUlDQWdJSEpsY3k1d2RYTm9LRUZ5Y21GNUxtWnliMjBvZEhZdWRtbGxkMlZ5Y3lrdWJHVnVaM1JvS1R0Y2JpQWdJQ0IwZGk1c2IyRmtUR0Y1YjNWMEtHeGhlVzkxZENrN1hHNGdJQ0FnWVhkaGFYUWdZWGRoYVhSRGFHVmpheWdvS1NBOVBpQmtiMk4xYldWdWRDNXhkV1Z5ZVZObGJHVmpkRzl5S0hObGJHVmpkRzl5S1NBaFBUMGdiblZzYkN4Y2JpQWdJQ0FnSUNkallXNXViM1FnYkc5aFpDQjJhV1YzWlhJZ1puSnZiU0JzWVhsdmRYUW5MQ0F6TURBd0tUdGNiaUFnSUNCaGQyRnBkQ0JrWld4aGVTZ3lOVEFwTzF4dUlDQWdJSEpsY3k1d2RYTm9LRUZ5Y21GNUxtWnliMjBvZEhZdWRtbGxkMlZ5Y3lrdWJHVnVaM1JvS1R0Y2JpQWdJQ0IyYVdWM1pYSWdQU0JCY25KaGVTNW1jbTl0S0hSMkxuWnBaWGRsY25NcExtWnBibVFvS0hZcElEMCtJSFl1ZEhsd1pTQWhQVDBnSjBkeWFXUW5LU0U3WEc0Z0lDQWdaWGh3WldOMFFYSnlZWGtvY21WekxDQmJNaXdnTVN3Z01sMHBPMXh1SUNBZ0lHVjRjR1ZqZENoS1UwOU9Mbk4wY21sdVoybG1lU2gyYVdWM1pYSXVaMlYwVDNCMGFXOXVjeWdwTG14dmIyc3BMQ0JLVTA5T0xuTjBjbWx1WjJsbWVTaHZiR1JRY205d2N5a3BPMXh1SUNCOUlHWnBibUZzYkhrZ2UxeHVJQ0FnSUhSMkxtTnNiM05sS0NrN1hHNGdJQ0FnWjNKdmF5NXphR1ZzYkM1amJHOXpaVlJoWW14bEtHUm1LVHRjYmlBZ2ZWeHVmVnh1SWwxOSIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdGVzdCc7XG4vKiogRGVtbyBzY3JpcHQgY2xhc3MuIENvdWxkIGJlIHVzZWQgZm9yIGNyZWF0aW5nIGRlbW8gc2NyaXB0cyB0byBzaG93IHRoZSBwbGF0Zm9ybSBjYXBhYmlsaXRpZXMgKi9cbmV4cG9ydCBjbGFzcyBEZW1vU2NyaXB0IHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBkZXNjcmlwdGlvbiwgaXNBdXRvbWF0aWMgPSBmYWxzZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMubmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gJyc7XG4gICAgICAgIHRoaXMuX2lzQXV0b21hdGljID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2F1dG9TdGFydEZpcnN0U3RlcCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jdXJyZW50U3RlcCA9IDA7XG4gICAgICAgIHRoaXMuX2lzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc0NhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc1N0ZXBQcm9jZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcm9vdCA9IHVpLmRpdihbXSwgeyBpZDogJ2RlbW8tc2NyaXB0JyxcbiAgICAgICAgICAgIGNsYXNzZXM6ICd0dXRvcmlhbHMtcm9vdCB0dXRvcmlhbHMtdHJhY2sgZGVtby1hcHAtc2NyaXB0JyB9KTtcbiAgICAgICAgdGhpcy5fc3RlcHMgPSBbXTtcbiAgICAgICAgdGhpcy5fbWFpbkhlYWRlciA9IHVpLnBhbmVsKFtdLCAndHV0b3JpYWxzLW1haW4taGVhZGVyJyk7XG4gICAgICAgIHRoaXMuX2hlYWRlciA9IHVpLmgyKCcnKTtcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2ID0gdWkuZGl2SChbXSwgJ3R1dG9yaWFscy1yb290LWhlYWRlcicpO1xuICAgICAgICB0aGlzLl9zdG9wU3RhcnRCdG4gPSB1aS5idXR0b24odWkuaWNvbkZBKCdwYXVzZScpLCAoKSA9PiB0aGlzLl9jaGFuZ2VTdG9wU3RhdGUoKSwgJ1BsYXkgLyBwYXVzZScpO1xuICAgICAgICB0aGlzLl9yZXN0YXJ0QnRuID0gdWkuYnV0dG9uKHVpLmljb25GQSgncmVkbycpLCAoKSA9PiB0aGlzLl9yZXN0YXJ0U2NyaXB0KCksICdSZXN0YXJ0Jyk7XG4gICAgICAgIHRoaXMuX25leHRTdGVwQnRuID0gdWkuYnV0dG9uKHVpLmljb25GQSgncGxheScpLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzU3RlcFByb2Nlc3NlZClcbiAgICAgICAgICAgICAgICB0aGlzLl9uZXh0U3RlcCgpO1xuICAgICAgICB9LCAnTmV4dCBzdGVwJyk7XG4gICAgICAgIHRoaXMuX2FjdGl2aXR5ID0gdWkucGFuZWwoW10sICd0dXRvcmlhbHMtcm9vdC1kZXNjcmlwdGlvbicpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc0RpdiA9IHVpLmRpdlYoW10sICd0dXRvcmlhbHMtcm9vdC1wcm9ncmVzcycpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcyA9IHVpLmVsZW1lbnQoJ3Byb2dyZXNzJyk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzU3RlcHMgPSB1aS5kaXZUZXh0KCcnKTtcbiAgICAgICAgdGhpcy5fY2xvc2VCdG4gPSB1aS5idXR0b24odWkuaWNvbkZBKCdjaGV2cm9uLWxlZnQnKSwgKCkgPT4gdGhpcy5fY2xvc2VEb2NrKCksICdCYWNrIHRvIGRlbW8nKTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgICB0aGlzLl9pc0F1dG9tYXRpYyA9IGlzQXV0b21hdGljO1xuICAgICAgICB0aGlzLl9hdXRvU3RhcnRGaXJzdFN0ZXAgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYXV0b1N0YXJ0Rmlyc3RTdGVwKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubWF4ID0gMDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudmFsdWUgPSAxO1xuICAgICAgICBEZW1vU2NyaXB0LmN1cnJlbnRPYmplY3QgPSB0aGlzO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyBkZW1vIHNjcmlwdCBzdGVwcyAqL1xuICAgIGdldCBzdGVwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZXBzO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyB0aGUgYW1vdW50IG9mIGRlbW8gc2NyaXB0IHN0ZXBzICovXG4gICAgZ2V0IHN0ZXBOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGVwcy5sZW5ndGg7XG4gICAgfVxuICAgIC8qKiBBZGRzIHNjcmlwdCBoZWFkZXIgKi9cbiAgICBfYWRkSGVhZGVyKCkge1xuICAgICAgICB0aGlzLl9jcmVhdGVIZWFkZXJEaXYoKTtcbiAgICAgICAgdGhpcy5fY3JlYXRlUHJvZ3Jlc3NEaXYoKTtcbiAgICAgICAgdGhpcy5fbWFpbkhlYWRlci5hcHBlbmQodGhpcy5faGVhZGVyRGl2LCB0aGlzLl9wcm9ncmVzc0Rpdik7XG4gICAgfVxuICAgIC8qKiBDcmVhdGVzIHNjcmlwdCBoZWFkZXIgZGl2ICovXG4gICAgX2NyZWF0ZUhlYWRlckRpdigpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyLmlubmVyVGV4dCA9IHRoaXMubmFtZTtcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2LmFwcGVuZCh0aGlzLl9jbG9zZUJ0bik7XG4gICAgICAgIHRoaXMuX2hlYWRlckRpdi5hcHBlbmQodGhpcy5faGVhZGVyKTtcbiAgICAgICAgdGhpcy5fbmV4dFN0ZXBCdG4uZmlyc3RDaGlsZC5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhcyBmYS1wbGF5JztcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2LmFwcGVuZCh0aGlzLl9pc0F1dG9tYXRpYyA/IHRoaXMuX3N0b3BTdGFydEJ0biA6IHRoaXMuX25leHRTdGVwQnRuKTtcbiAgICB9XG4gICAgLyoqIENyZWF0ZXMgc2NyaXB0IHByb2dyZXNzIGRpdiAqL1xuICAgIF9jcmVhdGVQcm9ncmVzc0RpdigpIHtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubWF4ID0gdGhpcy5zdGVwTnVtYmVyO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc0Rpdi5hcHBlbmQodGhpcy5fcHJvZ3Jlc3MpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc1N0ZXBzID0gdWkuZGl2VGV4dChgU3RlcDogJHt0aGlzLl9wcm9ncmVzcy52YWx1ZX0gb2YgJHt0aGlzLnN0ZXBOdW1iZXJ9YCk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzRGl2LmFwcGVuZCh0aGlzLl9wcm9ncmVzc1N0ZXBzKTtcbiAgICB9XG4gICAgLyoqIEFkZHMgZGVzY3JpcHRpb24gb2YgdGhlIHNjcmlwdCAqL1xuICAgIF9hZGREZXNjcmlwdGlvbigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLl9hY3Rpdml0eS5hcHBlbmQodWkuZGl2KHRoaXMuZGVzY3JpcHRpb24sICd0dXRvcmlhbHMtcm9vdC1kZXNjcmlwdGlvbicpKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN0ZXBOdW1iZXI7IGkrKykge1xuICAgICAgICAgICAgbGV0IGluc3RydWN0aW9uSW5kaWNhdG9yID0gdWkuaWNvbkZBKCdjbG9jaycpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0F1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uSW5kaWNhdG9yID0gdWkuaWNvbkZBKCdwbGF5JywgKCkgPT4gdGhpcy5fbmV4dFN0ZXAoKSwgJ05leHQgc3RlcCcpO1xuICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbkluZGljYXRvci5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhcyBmYS1wbGF5JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkRpdiA9IHVpLmRpdih0aGlzLl9zdGVwc1tpXS5uYW1lLCAnZ3Jvay10dXRvcmlhbC1lbnRyeS1pbnN0cnVjdGlvbicpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFN0ZXBEZXNjcmlwdGlvbiA9IHVpLmRpdigoX2EgPSB0aGlzLl9zdGVwc1tpXS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVzY3JpcHRpb24sICdncm9rLXR1dG9yaWFsLXN0ZXAtZGVzY3JpcHRpb24gaGlkZGVuJyk7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHVpLmRpdkgoW1xuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uSW5kaWNhdG9yLFxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uRGl2LFxuICAgICAgICAgICAgXSwgJ2dyb2stdHV0b3JpYWwtZW50cnknKTtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2aXR5LmFwcGVuZChlbnRyeSwgY3VycmVudFN0ZXBEZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIEluaXRpYWxpemVzIHRoZSByb290IG9mIHRoZSBkZW1vIHNjcmlwdCAqL1xuICAgIF9pbml0Um9vdCgpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGdyb2suc2hlbGwud2luZG93cy5zaG93Q29udGV4dFBhbmVsID0gdHJ1ZTtcbiAgICAgICAgZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dIZWxwID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHNjcmlwdERvY2tOb2RlID0gQXJyYXkuZnJvbShncm9rLnNoZWxsLmRvY2tNYW5hZ2VyLnJvb3ROb2RlLmNoaWxkcmVuKVswXTtcbiAgICAgICAgdGhpcy5fbm9kZSA9IGdyb2suc2hlbGwuZG9ja01hbmFnZXIuZG9jayh0aGlzLl9yb290LCBERy5ET0NLX1RZUEUuRklMTCwgc2NyaXB0RG9ja05vZGUsICcnKTtcbiAgICAgICAgaWYgKChfYiA9IChfYSA9IHNjcmlwdERvY2tOb2RlLnBhcmVudC5jb250YWluZXIuY29udGFpbmVyRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxhc3RFbGVtZW50Q2hpbGQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jbGFzc0xpc3QuY29udGFpbnMoJ3RhYi1oYW5kbGUtbGlzdC1jb250YWluZXInKSlcbiAgICAgICAgICAgIChfYyA9IHNjcmlwdERvY2tOb2RlLnBhcmVudC5jb250YWluZXIuY29udGFpbmVyRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxhc3RFbGVtZW50Q2hpbGQucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuX25vZGUuY29udGFpbmVyLmNvbnRhaW5lckVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndHV0b3JpYWxzLWRlbW8tc2NyaXB0LWNvbnRhaW5lcicpO1xuICAgICAgICB0aGlzLl9hZGRIZWFkZXIoKTtcbiAgICAgICAgdGhpcy5fcm9vdC5hcHBlbmQodGhpcy5fbWFpbkhlYWRlcik7XG4gICAgICAgIHRoaXMuX2FkZERlc2NyaXB0aW9uKCk7XG4gICAgICAgIHRoaXMuX3Jvb3QuYXBwZW5kKHRoaXMuX2FjdGl2aXR5KTtcbiAgICB9XG4gICAgLyoqIFByb2Nlc3NlcyBuZXh0IHN0ZXAgKi9cbiAgICBfbmV4dFN0ZXAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aGlzLl9pc1N0ZXBQcm9jZXNzZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0F1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIHRoaXMuX25leHRTdGVwQnRuLmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmV4dFN0ZXBCdG4uZmlyc3RDaGlsZC5jbGFzc0xpc3QuYWRkKCdmYS1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLl9hY3Rpdml0eS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdncm9rLXR1dG9yaWFsLWVudHJ5JylbdGhpcy5fY3VycmVudFN0ZXBdO1xuICAgICAgICAgICAgY29uc3QgZW50cnlJbmRpY2F0b3IgPSB0aGlzLl9hY3Rpdml0eS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdncm9rLWljb24nKVt0aGlzLl9jdXJyZW50U3RlcF07XG4gICAgICAgICAgICBjb25zdCBlbnRyeUluc3RydWN0aW9uID0gdGhpcy5fYWN0aXZpdHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ3Jvay10dXRvcmlhbC1zdGVwLWRlc2NyaXB0aW9uJylbdGhpcy5fY3VycmVudFN0ZXBdO1xuICAgICAgICAgICAgZW50cnlJbmRpY2F0b3IuY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYXIgZmEtc3Bpbm5lci10aGlyZCBmYS1zcGluJztcbiAgICAgICAgICAgIGVudHJ5SW5zdHJ1Y3Rpb24uY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgICAgICAgICBlbnRyeUluc3RydWN0aW9uLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gZW50cnk7XG4gICAgICAgICAgICBjb25zdCBzdGVwRGVsYXkgPSAoKF9hID0gdGhpcy5fc3RlcHNbdGhpcy5fY3VycmVudFN0ZXBdLm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZWxheSkgP1xuICAgICAgICAgICAgICAgIChfYiA9IHRoaXMuX3N0ZXBzW3RoaXMuX2N1cnJlbnRTdGVwXS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZGVsYXkgOiAyMDAwO1xuICAgICAgICAgICAgeWllbGQgdGhpcy5fc3RlcHNbdGhpcy5fY3VycmVudFN0ZXBdLmZ1bmMoKTtcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvKHRoaXMuX3Jvb3QsIGN1cnJlbnRTdGVwLm9mZnNldFRvcCAtIHRoaXMuX21haW5IZWFkZXIub2Zmc2V0SGVpZ2h0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0F1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIHlpZWxkIHRoaXMuX2NvdW50ZG93bihlbnRyeSwgZW50cnlJbmRpY2F0b3IsIHN0ZXBEZWxheSk7XG4gICAgICAgICAgICAgICAgeWllbGQgZGVsYXkoc3RlcERlbGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5ld0VudHJ5SW5kaWNhdG9yID0gdWkuaWNvbkZBKCdjaGVjaycpO1xuICAgICAgICAgICAgZW50cnlJbmRpY2F0b3IucmVwbGFjZVdpdGgobmV3RW50cnlJbmRpY2F0b3IpO1xuICAgICAgICAgICAgbmV3RW50cnlJbmRpY2F0b3IuY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYXIgZmEtY2hlY2snO1xuICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudmFsdWUrKztcbiAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzU3RlcHMuaW5uZXJUZXh0ID0gYFN0ZXA6ICR7dGhpcy5fcHJvZ3Jlc3MudmFsdWV9IG9mICR7dGhpcy5zdGVwTnVtYmVyfWA7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RlcCsrO1xuICAgICAgICAgICAgdGhpcy5faXNTdGVwUHJvY2Vzc2VkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0ZXAgPT09IHRoaXMuc3RlcE51bWJlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzQXV0b21hdGljID8gdGhpcy5fc3RvcFN0YXJ0QnRuLnJlcGxhY2VXaXRoKHRoaXMuX3Jlc3RhcnRCdG4pIDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmV4dFN0ZXBCdG4ucmVwbGFjZVdpdGgodGhpcy5fcmVzdGFydEJ0bik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0F1dG9tYXRpYykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRTdGVwRW50cnlJbmRpY2F0b3IgPSB0aGlzLl9hY3Rpdml0eS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdncm9rLWljb24nKVt0aGlzLl9jdXJyZW50U3RlcF07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnROZXh0U3RlcEljb24gPSB1aS5pY29uRkEoJ3BsYXknLCAoKSA9PiB0aGlzLl9uZXh0U3RlcCgpLCAnTmV4dCBzdGVwJyk7XG4gICAgICAgICAgICAgICAgc3RhcnROZXh0U3RlcEljb24uY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYXMgZmEtcGxheSc7XG4gICAgICAgICAgICAgICAgbmV4dFN0ZXBFbnRyeUluZGljYXRvci5yZXBsYWNlV2l0aChzdGFydE5leHRTdGVwSWNvbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmV4dFN0ZXBCdG4uY2xhc3NMaXN0LnJlbW92ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9uZXh0U3RlcEJ0bi5maXJzdENoaWxkLmNsYXNzTGlzdC5yZW1vdmUoJ2ZhLWRpc2FibGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKiogU3RhcnRzIHRoZSBkZW1vIHNjcmlwdCBhY3Rpb25zICovXG4gICAgX3N0YXJ0U2NyaXB0KCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2N1cnJlbnRTdGVwOyBpIDwgdGhpcy5zdGVwTnVtYmVyOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNTdG9wcGVkIHx8IHRoaXMuX2lzQ2FuY2VsbGVkKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLl9uZXh0U3RlcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2Nyb2xscyB0byB0aGUgY3VycmVudCBzdGVwXG4gICAgICogQHBhcmFtIGVsZW1lbnQgLSBDdXJyZW50IHN0ZXAgZWxlbWVudCBpbiByb290XG4gICAgICogQHBhcmFtIHkgLSB5IGNvb3JkaW5hdGUgb2YgdGhlIGVsZW1lbnRcbiAgICAgKi9cbiAgICBfc2Nyb2xsVG8oZWxlbWVudCwgeSkge1xuICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0geTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBpbnRlcmFjdGl2ZSBkZWxheSBpbmRpY2F0b3JcbiAgICAgKiBAcGFyYW0gZWxlbWVudCAtIEN1cnJlbnQgc3RlcCBlbGVtZW50XG4gICAgICogQHBhcmFtIGluZGljYXRvciAtIEN1cnJlbnQgc3RlcCBpbmRpY2F0b3JcbiAgICAgKiBAcGFyYW0gdGltZSAtIEluZGljYXRvciBhbmltYXRpb24gdGltZVxuICAgICAqL1xuICAgIF9jb3VudGRvd24oZWxlbWVudCwgaW5kaWNhdG9yLCB0aW1lKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjb3VudGRvd25EaXYgPSB1aS5kaXYoW10sICdkZW1vLXNjcmlwdC1jb3VudGRvd24nKTtcbiAgICAgICAgICAgIGluZGljYXRvci5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgICAgICAgIGxldCBjb3VudGRvd24gPSB0aW1lIC8gMTAwMDtcbiAgICAgICAgICAgIGNvbnN0IHN2ZyA9IHRoaXMuX2NyZWF0ZVNWR0luZGljYXRvcihjb3VudGRvd24pO1xuICAgICAgICAgICAgY291bnRkb3duRGl2LmFwcGVuZChzdmcpO1xuICAgICAgICAgICAgZWxlbWVudC5wcmVwZW5kKGNvdW50ZG93bkRpdik7XG4gICAgICAgICAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb3VudGRvd24tLTtcbiAgICAgICAgICAgICAgICBpZiAoY291bnRkb3duID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgICAgICBjb3VudGRvd25EaXYucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGluZGljYXRvci5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgU1ZHIHdpdGggY291bnRkb3duIGNpcmNsZVxuICAgICAqIEBwYXJhbSBjb3VudGRvd24gLSBjb3VudGRvd24gdGltZVxuICAgICAqIEByZXR1cm5zIFNWRyBjb3VudGRvd24gaW5kaWNhdG9yXG4gICAgICovXG4gICAgX2NyZWF0ZVNWR0luZGljYXRvcihjb3VudGRvd24pIHtcbiAgICAgICAgY29uc3Qgc3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdzdmcnKTtcbiAgICAgICAgY29uc3QgY2lyY2xlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdjaXJjbGUnKTtcbiAgICAgICAgY2lyY2xlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdjeCcsICc3Jyk7XG4gICAgICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnY3knLCAnNycpO1xuICAgICAgICBjaXJjbGUuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3InLCAnNicpO1xuICAgICAgICBjaXJjbGUuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3N0eWxlJywgYGFuaW1hdGlvbjogY291bnRkb3duICR7Y291bnRkb3dufXMgbGluZWFyIGluZmluaXRlIGZvcndhcmRzYCk7XG4gICAgICAgIHN2Zy5hcHBlbmQoY2lyY2xlKTtcbiAgICAgICAgcmV0dXJuIHN2ZztcbiAgICB9XG4gICAgLyoqIENoYW5nZXMgdGhlIHN0YXRlIG9mIHRoZSBkZW1vIHNjcmlwdCAoc3RvcC9wbGF5KSAqL1xuICAgIF9jaGFuZ2VTdG9wU3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IGljb24gPSB0aGlzLl9zdG9wU3RhcnRCdG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ3Jvay1pY29uJyk7XG4gICAgICAgIGljb25bMF0uY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYXMgZmEtcGxheSc7XG4gICAgICAgIHRoaXMuX2lzU3RvcHBlZCA9ICF0aGlzLl9pc1N0b3BwZWQ7XG4gICAgICAgIGlmICghdGhpcy5faXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBpY29uWzBdLmNsYXNzTmFtZSA9ICdncm9rLWljb24gZmFsIGZhLXBhdXNlJztcbiAgICAgICAgICAgIGlmICghdGhpcy5faXNTdGVwUHJvY2Vzc2VkKVxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2NyaXB0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIFJlc3RhcnRzIHRoZSBzY3JpcHQgKi9cbiAgICBfcmVzdGFydFNjcmlwdCgpIHtcbiAgICAgICAgZ3Jvay5zaGVsbC5kb2NrTWFuYWdlci5jbG9zZSh0aGlzLl9ub2RlKTtcbiAgICAgICAgZ3Jvay5zaGVsbC5jbG9zZUFsbCgpO1xuICAgICAgICB0aGlzLl9jbGVhclJvb3QoKTtcbiAgICAgICAgdGhpcy5fc2V0SW5pdFBhcmFtcygpO1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICAgIC8qKiBDbGVhcnMgdGhlIHJvb3QgZWxlbWVudCAqL1xuICAgIF9jbGVhclJvb3QoKSB7XG4gICAgICAgIHRoaXMuX3Jvb3QgPSB1aS5kaXYoW10sIHsgaWQ6ICdkZW1vLXNjcmlwdCcsIGNsYXNzZXM6ICd0dXRvcmlhbHMtcm9vdCB0dXRvcmlhbHMtdHJhY2sgZGVtby1hcHAtc2NyaXB0JyB9KTtcbiAgICAgICAgdGhpcy5fbWFpbkhlYWRlciA9IHVpLnBhbmVsKFtdLCAndHV0b3JpYWxzLW1haW4taGVhZGVyJyk7XG4gICAgICAgIHRoaXMuX2hlYWRlciA9IHVpLmgyKCcnKTtcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2ID0gdWkuZGl2SChbXSwgJ3R1dG9yaWFscy1yb290LWhlYWRlcicpO1xuICAgICAgICB0aGlzLl9hY3Rpdml0eSA9IHVpLnBhbmVsKFtdLCAndHV0b3JpYWxzLXJvb3QtZGVzY3JpcHRpb24nKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NEaXYgPSB1aS5kaXZWKFtdLCAndHV0b3JpYWxzLXJvb3QtcHJvZ3Jlc3MnKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MgPSB1aS5lbGVtZW50KCdwcm9ncmVzcycpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc1N0ZXBzID0gdWkuZGl2VGV4dCgnJyk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLm1heCA9IDA7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLnZhbHVlID0gMTtcbiAgICB9XG4gICAgLyoqIFNldHMgaW5pdGlhbCBwYXJhbWV0ZXJzICovXG4gICAgX3NldEluaXRQYXJhbXMoKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGVwID0gMDtcbiAgICAgICAgdGhpcy5faXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzQ2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGljb24gPSB0aGlzLl9zdG9wU3RhcnRCdG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ3Jvay1pY29uJyk7XG4gICAgICAgIGljb25bMF0uY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYWwgZmEtcGF1c2UnO1xuICAgICAgICB0aGlzLl9uZXh0U3RlcEJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdkaXNhYmxlZCcpO1xuICAgIH1cbiAgICAvKiogQ2xvc2VzIGRlbW8gc2NyaXB0IGRvY2sgKi9cbiAgICBfY2xvc2VEb2NrKCkge1xuICAgICAgICBncm9rLnNoZWxsLmRvY2tNYW5hZ2VyLmNsb3NlKHRoaXMuX25vZGUpO1xuICAgICAgICB0aGlzLmNhbmNlbFNjcmlwdCgpO1xuICAgIH1cbiAgICAvKiogQ2FuY2VscyB0aGUgc2NyaXB0ICovXG4gICAgY2FuY2VsU2NyaXB0KCkge1xuICAgICAgICB0aGlzLl9pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIERlbW9TY3JpcHQuY3VycmVudE9iamVjdCA9IG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBuZXcgc3RlcCB0byBzY3JpcHRcbiAgICAgKiBAcGFyYW0gbmFtZSAtIFN0ZXAgbmFtZVxuICAgICAqIEBwYXJhbSBmdW5jIC0gU3RlcCBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gU3RlcCBvcHRpb25zIChkZXNjcmlwdGlvbiBhbmQgZGVsYXkgYWZ0ZXIgc3RlcCBlbmRzKVxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIGN1cnJlbnQgZGVtbyBzY3JpcHQgb2JqZWN0XG4gICAgICovXG4gICAgc3RlcChuYW1lLCBmdW5jLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX3N0ZXBzW3RoaXMuc3RlcHMubGVuZ3RoXSA9IHtcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBmdW5jOiBmdW5jLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKiBTdGFydHMgdGhlIGRlbW8gc2NyaXB0ICovXG4gICAgc3RhcnQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0Um9vdCgpO1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC5uZXdWaWV3KHRoaXMubmFtZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNBdXRvbWF0aWMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydFNjcmlwdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9hdXRvU3RhcnRGaXJzdFN0ZXApXG4gICAgICAgICAgICAgICAgeWllbGQgdGhpcy5fbmV4dFN0ZXAoKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuRGVtb1NjcmlwdC5jdXJyZW50T2JqZWN0ID0gbnVsbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpHVnRieTF6WTNKcGNIUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKa1pXMXZMWE5qY21sd2RDNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenM3T3pzN096czdRVUZCUVN4UFFVRlBMRXRCUVVzc1JVRkJSU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRPMEZCUTNSRExFOUJRVThzUzBGQlN5eEZRVUZGTEUxQlFVMHNhVUpCUVdsQ0xFTkJRVU03UVVGRGRFTXNUMEZCVHl4TFFVRkxMRWxCUVVrc1RVRkJUU3h0UWtGQmJVSXNRMEZCUXp0QlFVVXhReXhQUVVGUExFVkJRVU1zUzBGQlN5eEZRVUZETEUxQlFVMHNiME5CUVc5RExFTkJRVU03UVVGbGVrUXNiVWRCUVcxSE8wRkJRMjVITEUxQlFVMHNUMEZCVHl4VlFVRlZPMGxCZFVOeVFpeFpRVUZaTEVsQlFWa3NSVUZCUlN4WFFVRnRRaXhGUVVGRkxHTkJRWFZDTEV0QlFVc3NSVUZEZWtVc1QwRkJkME03TzFGQmRrTXhReXhUUVVGSkxFZEJRVmNzUlVGQlJTeERRVUZETzFGQlEyeENMR2RDUVVGWExFZEJRVmNzUlVGQlJTeERRVUZETzFGQlNXcENMR2xDUVVGWkxFZEJRVmtzUzBGQlN5eERRVUZETzFGQlF6bENMSGRDUVVGdFFpeEhRVUZaTEV0QlFVc3NRMEZCUXp0UlFVTnlReXhwUWtGQldTeEhRVUZYTEVOQlFVTXNRMEZCUXp0UlFVTjZRaXhsUVVGVkxFZEJRVmtzUzBGQlN5eERRVUZETzFGQlF6VkNMR2xDUVVGWkxFZEJRVmtzUzBGQlN5eERRVUZETzFGQlF6bENMSEZDUVVGblFpeEhRVUZaTEV0QlFVc3NRMEZCUXp0UlFVVnNReXhWUVVGTExFZEJRVzFDTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZGTEdGQlFXRTdXVUZETTBRc1QwRkJUeXhGUVVGRkxHZEVRVUZuUkN4RlFVRkRMRU5CUVVNc1EwRkJRenRSUVVWMFJDeFhRVUZOTEVkQlFWY3NSVUZCUlN4RFFVRkRPMUZCUlhCQ0xHZENRVUZYTEVkQlFXMUNMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeEZRVUZGTEhWQ1FVRjFRaXhEUVVGRExFTkJRVU03VVVGRGNFVXNXVUZCVHl4SFFVRjFRaXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNoRExHVkJRVlVzUjBGQmJVSXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFVkJRVVVzZFVKQlFYVkNMRU5CUVVNc1EwRkJRenRSUVVOc1JTeHJRa0ZCWVN4SFFVRnpRaXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRM0pGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNSVUZCUlN4RlFVRkZMR05CUVdNc1EwRkJReXhEUVVGRE8xRkJRM3BETEdkQ1FVRlhMRWRCUVhOQ0xFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeEhRVUZITEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1kwRkJZeXhGUVVGRkxFVkJRVVVzVTBGQlV5eERRVUZETEVOQlFVTTdVVUZEZEVjc2FVSkJRVmtzUjBGQmMwSXNSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSVHRaUVVNeFJTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMR2RDUVVGblFqdG5Ra0ZEZUVJc1NVRkJTU3hEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETzFGQlEzSkNMRU5CUVVNc1JVRkJSU3hYUVVGWExFTkJRVU1zUTBGQlF6dFJRVVZTTEdOQlFWTXNSMEZCYlVJc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVWQlFVVXNORUpCUVRSQ0xFTkJRVU1zUTBGQlF6dFJRVVYyUlN4cFFrRkJXU3hIUVVGdFFpeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1JVRkJSU3g1UWtGQmVVSXNRMEZCUXl4RFFVRkRPMUZCUTNSRkxHTkJRVk1zUjBGQmQwSXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dFJRVU40UkN4dFFrRkJZeXhIUVVGdFFpeEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJSMmhFTEdOQlFWTXNSMEZCYzBJc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4VlFVRlZMRVZCUVVVc1JVRkJSU3hqUVVGakxFTkJRVU1zUTBGQlF6dFJRVXR1U0N4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU5xUWl4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExGZEJRVmNzUTBGQlF6dFJRVU12UWl4SlFVRkpMRU5CUVVNc1dVRkJXU3hIUVVGSExGZEJRVmNzUTBGQlF6dFJRVU5vUXl4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVkQlFVY3NUVUZCUVN4UFFVRlBMR0ZCUVZBc1QwRkJUeXgxUWtGQlVDeFBRVUZQTEVOQlFVVXNhMEpCUVd0Q0xHMURRVUZKTEV0QlFVc3NRMEZCUXp0UlFVVm9SU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRka0lzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJSWHBDTEZWQlFWVXNRMEZCUXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRE8wbEJRMnhETEVOQlFVTTdTVUZGUkN4blEwRkJaME03U1VGRGFFTXNTVUZCU1N4TFFVRkxPMUZCUTFBc1QwRkJUeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBsQlEzSkNMRU5CUVVNN1NVRkZSQ3c0UTBGQk9FTTdTVUZET1VNc1NVRkJTU3hWUVVGVk8xRkJRMW9zVDBGQlR5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVNMVFpeERRVUZETzBsQlIwUXNlVUpCUVhsQ08wbEJRMnBDTEZWQlFWVTdVVUZEYUVJc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RlFVRkZMRU5CUVVNN1VVRkRlRUlzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhGUVVGRkxFTkJRVU03VVVGRE1VSXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNSVUZCUlN4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03U1VGRE9VUXNRMEZCUXp0SlFVVkVMR2REUVVGblF6dEpRVU40UWl4blFrRkJaMEk3VVVGRGRFSXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXp0UlFVTnVReXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03VVVGRGRrTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUlhCRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNWVUZCTUVJc1EwRkJReXhUUVVGVExFZEJRVWNzZFVKQlFYVkNMRU5CUVVNN1VVRkZiRVlzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPMGxCUTNKR0xFTkJRVU03U1VGRlJDeHJRMEZCYTBNN1NVRkRNVUlzYTBKQlFXdENPMUZCUTNoQ0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU03VVVGRGNrTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUTNwRExFbEJRVWtzUTBGQlF5eGpRVUZqTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTMEZCU3l4UFFVRlBMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF5eERRVUZETzFGQlJYaEdMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1EwRkJRenRKUVVOb1JDeERRVUZETzBsQlJVUXNjVU5CUVhGRE8wbEJRemRDTEdWQlFXVTdPMUZCUTNKQ0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZkQlFWY3NSVUZCUlN3MFFrRkJORUlzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGT1VVc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZEZUVNc1NVRkJTU3h2UWtGQmIwSXNSMEZCUnl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFsQlF6bERMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTzJkQ1FVTjBRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVTdiMEpCUTFnc2IwSkJRVzlDTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hGUVVGRkxGZEJRVmNzUTBGQlF5eERRVUZETzI5Q1FVTTVSU3h2UWtGQmIwSXNRMEZCUXl4VFFVRlRMRWRCUVVjc2RVSkJRWFZDTEVOQlFVTTdhVUpCUXpGRU8yRkJRMFk3V1VGRFJDeE5RVUZOTEdOQlFXTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxHbERRVUZwUXl4RFFVRkRMRU5CUVVNN1dVRkRkRVlzVFVGQlRTeHpRa0ZCYzBJc1IwRkJSeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVRXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFBRVUZQTERCRFFVRkZMRmRCUVZjc1JVRkRka1VzZFVOQlFYVkRMRU5CUVVNc1EwRkJRenRaUVVNelF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8yZENRVU53UWl4dlFrRkJiMEk3WjBKQlEzQkNMR05CUVdNN1lVRkRaaXhGUVVGRkxIRkNRVUZ4UWl4RFFVRkRMRU5CUVVNN1dVRkZNVUlzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhGUVVGRkxITkNRVUZ6UWl4RFFVRkRMRU5CUVVNN1UwRkRkRVE3U1VGRFNDeERRVUZETzBsQlJVUXNPRU5CUVRoRE8wbEJRM1JETEZOQlFWTTdPMUZCUTJZc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNaMEpCUVdkQ0xFZEJRVWNzU1VGQlNTeERRVUZETzFGQlF6TkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEZGQlFWRXNSMEZCUnl4TFFVRkxMRU5CUVVNN1VVRkZjRU1zVFVGQlRTeGpRVUZqTEVkQlFVY3NTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZkQlFWY3NRMEZCUXl4UlFVRlJMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGTDBVc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUlVGQlJTeGpRVUZqTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkZOVVlzU1VGQlNTeE5RVUZCTEUxQlFVRXNZMEZCWXl4RFFVRkRMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc2FVSkJRV2xDTERCRFFVRkZMR2RDUVVGblFpd3dRMEZEZEVZc1UwRkJVeXhEUVVGRExGRkJRVkVzUTBGQlF5d3lRa0ZCTWtJc1EwRkJRenRaUVVNdlF5eE5RVUZCTEdOQlFXTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExHZENRVUZuUWl4RFFVRkRMR2xDUVVGcFFpd3dRMEZCUlN4blFrRkJaMElzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0UlFVVm9SeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMR2xEUVVGcFF5eERRVUZETEVOQlFVTTdVVUZGZGtZc1NVRkJTU3hEUVVGRExGVkJRVlVzUlVGQlJTeERRVUZETzFGQlEyeENMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRSUVVWd1F5eEpRVUZKTEVOQlFVTXNaVUZCWlN4RlFVRkZMRU5CUVVNN1VVRkRka0lzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzBsQlEzQkRMRU5CUVVNN1NVRkZSQ3d3UWtGQk1FSTdTVUZEV2l4VFFVRlRPenM3V1VGRGNrSXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeEhRVUZITEVsQlFVa3NRMEZCUXp0WlFVTTNRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlR0blFrRkRkRUlzU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzJkQ1FVTXpReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEZWQlFUQkNMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXp0aFFVTTFSVHRaUVVWRUxFMUJRVTBzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc2MwSkJRWE5DTEVOQlFVTXNjVUpCUVhGQ0xFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1dVRkRPVVlzVFVGQlRTeGpRVUZqTEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXh6UWtGQmMwSXNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdXVUZETjBZc1RVRkJUU3huUWtGQlowSXNSMEZCUnl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExITkNRVUZ6UWl4RFFVRkRMR2REUVVGblF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8xbEJSWEJJTEdOQlFXTXNRMEZCUXl4VFFVRlRMRWRCUVVjc2QwTkJRWGRETEVOQlFVTTdXVUZEY0VVc1owSkJRV2RDTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dFpRVU0xUXl4blFrRkJaMElzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8xbEJSVEZETEUxQlFVMHNWMEZCVnl4SFFVRkhMRXRCUVhWQ0xFTkJRVU03V1VGRE5VTXNUVUZCVFN4VFFVRlRMRWRCUVVjc1EwRkJRU3hOUVVGQkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRExFOUJRVThzTUVOQlFVVXNTMEZCU3l4RlFVRkRMRU5CUVVNN1owSkJReTlFTEUxQlFVRXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTXNUMEZCVHl3d1EwRkJSU3hMUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0WlFVVjRSQ3hOUVVGTkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzFsQlF6VkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUlN4WFFVRlhMRU5CUVVNc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1dVRkRiRVlzU1VGQlNTeEpRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZPMmRDUVVOeVFpeE5RVUZOTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1MwRkJiMElzUlVGQlJTeGpRVUUyUWl4RlFVRkZMRk5CUVZNc1EwRkJReXhEUVVGRE8yZENRVU4wUml4TlFVRk5MRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dGhRVU40UWp0WlFVVkVMRTFCUVUwc2FVSkJRV2xDTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFpRVU0zUXl4alFVRmpMRU5CUVVNc1YwRkJWeXhEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNN1dVRkRPVU1zYVVKQlFXbENMRU5CUVVNc1UwRkJVeXhIUVVGSExIZENRVUYzUWl4RFFVRkRPMWxCUlhaRUxFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1dVRkRka0lzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4VFFVRlRMRWRCUVVjc1UwRkJVeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFVc3NUMEZCVHl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFTkJRVU03V1VGRmRFWXNTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRE8xbEJRM0JDTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUjBGQlJ5eExRVUZMTEVOQlFVTTdXVUZGT1VJc1NVRkJTU3hKUVVGSkxFTkJRVU1zV1VGQldTeExRVUZMTEVsQlFVa3NRMEZCUXl4VlFVRlZMRVZCUVVVN1owSkJRM3BETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF5eERRVUZETzI5Q1FVTndSU3hKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU03WjBKQlEyeEVMRTlCUVU4N1lVRkRVanRaUVVWRUxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZPMmRDUVVOMFFpeE5RVUZOTEhOQ1FVRnpRaXhIUVVGSExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8yZENRVU55Unl4TlFVRk5MR2xDUVVGcFFpeEhRVUZITEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRVZCUVVVc1JVRkJSU3hYUVVGWExFTkJRVU1zUTBGQlF6dG5Ra0ZEYWtZc2FVSkJRV2xDTEVOQlFVTXNVMEZCVXl4SFFVRkhMSFZDUVVGMVFpeERRVUZETzJkQ1FVTjBSQ3h6UWtGQmMwSXNRMEZCUXl4WFFVRlhMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNRMEZCUXp0blFrRkRkRVFzU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzJkQ1FVTTVReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEZWQlFUQkNMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXp0aFFVTXZSVHM3UzBGRFJqdEpRVVZFTEhGRFFVRnhRenRKUVVOMlFpeFpRVUZaT3p0WlFVTjRRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1owSkJRM2hFTEVsQlFVa3NTVUZCU1N4RFFVRkRMRlZCUVZVc1NVRkJTU3hKUVVGSkxFTkJRVU1zV1VGQldUdHZRa0ZEZEVNc1RVRkJUVHRuUWtGRlVpeE5RVUZOTEVsQlFVa3NRMEZCUXl4VFFVRlRMRVZCUVVVc1EwRkJRenRoUVVONFFqdFJRVU5JTEVOQlFVTTdTMEZCUVR0SlFVVkVPenM3TzA5QlNVYzdTVUZEU3l4VFFVRlRMRU5CUVVNc1QwRkJkVUlzUlVGQlJTeERRVUZUTzFGQlEyeEVMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF6dFJRVU5vUWl4UFFVRlBMRU5CUVVNc1UwRkJVeXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU40UWl4RFFVRkRPMGxCUlVRN096czdPMDlCUzBjN1NVRkRWeXhWUVVGVkxFTkJRVU1zVDBGQmIwSXNSVUZCUlN4VFFVRnpRaXhGUVVGRkxFbEJRVms3TzFsQlEycEdMRTFCUVUwc1dVRkJXU3hIUVVGdFFpeEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1JVRkJSU3gxUWtGQmRVSXNRMEZCUXl4RFFVRkRPMWxCUlhwRkxGTkJRVk1zUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8xbEJSV3hETEVsQlFVa3NVMEZCVXl4SFFVRkhMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU03V1VGRE5VSXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8xbEJSV2hFTEZsQlFWa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGVrSXNUMEZCVHl4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dFpRVVU1UWl4TlFVRk5MRkZCUVZFc1IwRkJSeXhYUVVGWExFTkJRVU1zUjBGQlJ5eEZRVUZGTzJkQ1FVTm9ReXhUUVVGVExFVkJRVVVzUTBGQlF6dG5Ra0ZEV2l4SlFVRkpMRk5CUVZNc1MwRkJTeXhEUVVGRExFVkJRVVU3YjBKQlEyNUNMR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dHZRa0ZEZUVJc1dVRkJXU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzI5Q1FVVjBRaXhUUVVGVExFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenR2UWtGRGNrTXNVMEZCVXl4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdhVUpCUTNCRE8xbEJRMGdzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUTFnc1EwRkJRenRMUVVGQk8wbEJSVVE3T3pzN1QwRkpSenRKUVVOTExHMUNRVUZ0UWl4RFFVRkRMRk5CUVdsQ08xRkJRek5ETEUxQlFVMHNSMEZCUnl4SFFVRkhMRkZCUVZFc1EwRkJReXhsUVVGbExFTkJRVU1zTkVKQlFUUkNMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRE1VVXNUVUZCVFN4TlFVRk5MRWRCUVVjc1VVRkJVU3hEUVVGRExHVkJRV1VzUTBGQlF5dzBRa0ZCTkVJc1JVRkJSU3hSUVVGUkxFTkJRVU1zUTBGQlF6dFJRVU5vUml4TlFVRk5MRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRka01zVFVGQlRTeERRVUZETEdOQlFXTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEzWkRMRTFCUVUwc1EwRkJReXhqUVVGakxFTkJRVU1zU1VGQlNTeEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOMFF5eE5RVUZOTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hQUVVGUExFVkJRVVVzZDBKQlFYZENMRk5CUVZNc05FSkJRVFJDTEVOQlFVTXNRMEZCUXp0UlFVTndSeXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUlc1Q0xFOUJRVThzUjBGQlJ5eERRVUZETzBsQlEySXNRMEZCUXp0SlFVVkVMSFZFUVVGMVJEdEpRVU12UXl4blFrRkJaMEk3VVVGRGRFSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eHpRa0ZCYzBJc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF6dFJRVU53UlN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eEhRVUZITEhWQ1FVRjFRaXhEUVVGRE8xRkJRelZETEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETzFGQlJXNURMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVlVGQlZTeEZRVUZGTzFsQlEzQkNMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTEVkQlFVY3NkMEpCUVhkQ0xFTkJRVU03V1VGRE4wTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhuUWtGQlowSTdaMEpCUTNoQ0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVWQlFVVXNRMEZCUXp0VFFVTjJRanRKUVVOSUxFTkJRVU03U1VGRlJDd3dRa0ZCTUVJN1NVRkRiRUlzWTBGQll6dFJRVU53UWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVUwc1EwRkJReXhEUVVGRE8xRkJRekZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03VVVGRGRFSXNTVUZCU1N4RFFVRkRMRlZCUVZVc1JVRkJSU3hEUVVGRE8xRkJRMnhDTEVsQlFVa3NRMEZCUXl4alFVRmpMRVZCUVVVc1EwRkJRenRSUVVOMFFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1NVRkRaaXhEUVVGRE8wbEJSVVFzT0VKQlFUaENPMGxCUTNSQ0xGVkJRVlU3VVVGRGFFSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJSU3hoUVVGaExFVkJRVVVzVDBGQlR5eEZRVUZGTEdkRVFVRm5SQ3hGUVVGRExFTkJRVU1zUTBGQlF6dFJRVVY0Unl4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4RlFVRkZMSFZDUVVGMVFpeERRVUZETEVOQlFVTTdVVUZEZWtRc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRM3BDTEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVWQlFVVXNkVUpCUVhWQ0xFTkJRVU1zUTBGQlF6dFJRVVYyUkN4SlFVRkpMRU5CUVVNc1UwRkJVeXhIUVVGSExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4RlFVRkZMRFJDUVVFMFFpeERRVUZETEVOQlFVTTdVVUZGTlVRc1NVRkJTU3hEUVVGRExGbEJRVmtzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1JVRkJSU3g1UWtGQmVVSXNRMEZCUXl4RFFVRkRPMUZCUXpORUxFbEJRVWtzUTBGQlF5eFRRVUZUTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dFJRVU40UXl4SlFVRkpMRU5CUVVNc1kwRkJZeXhIUVVGSExFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkZja01zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRM1pDTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU16UWl4RFFVRkRPMGxCUlVRc09FSkJRVGhDTzBsQlEzUkNMR05CUVdNN1VVRkRjRUlzU1VGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRkRUlzU1VGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4TFFVRkxMRU5CUVVNN1VVRkRlRUlzU1VGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4TFFVRkxMRU5CUVVNN1VVRkZNVUlzVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXh6UWtGQmMwSXNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRSUVVOd1JTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhIUVVGSExIZENRVUYzUWl4RFFVRkRPMUZCUXpkRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dEpRVU5xUkN4RFFVRkRPMGxCUlVRc09FSkJRVGhDTzBsQlEzUkNMRlZCUVZVN1VVRkRhRUlzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WFFVRlhMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZOTEVOQlFVTXNRMEZCUXp0UlFVTXhReXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTEVOQlFVTTdTVUZEZEVJc1EwRkJRenRKUVVWRUxIbENRVUY1UWp0SlFVTjZRaXhaUVVGWk8xRkJRMVlzU1VGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkRla0lzVlVGQlZTeERRVUZETEdGQlFXRXNSMEZCUnl4SlFVRkpMRU5CUVVNN1NVRkRiRU1zUTBGQlF6dEpRVVZFT3pzN096czdUMEZOUnp0SlFVTklMRWxCUVVrc1EwRkJReXhKUVVGWkxFVkJRVVVzU1VGQmVVSXNSVUZCUlN4UFFVRm5SRHRSUVVNMVJpeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVYzdXVUZETDBJc1NVRkJTU3hGUVVGRkxFbEJRVWs3V1VGRFZpeEpRVUZKTEVWQlFVVXNTVUZCU1R0WlFVTldMRTlCUVU4c1JVRkJSU3hQUVVGUE8xTkJRMnBDTEVOQlFVTTdVVUZEUml4UFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOa0xFTkJRVU03U1VGRlJDdzJRa0ZCTmtJN1NVRkRka0lzUzBGQlN6czdXVUZEVkN4SlFVRkpMRU5CUVVNc1UwRkJVeXhGUVVGRkxFTkJRVU03V1VGRGFrSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUlRsQ0xFbEJRVWtzU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlR0blFrRkRja0lzU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlN4RFFVRkRPMmRDUVVOd1FpeFBRVUZQTzJGQlExSTdXVUZGUkN4SlFVRkpMRWxCUVVrc1EwRkJReXh0UWtGQmJVSTdaMEpCUXpGQ0xFMUJRVTBzU1VGQlNTeERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRPMUZCUXpOQ0xFTkJRVU03UzBGQlFUczdRVUYwVmswc2QwSkJRV0VzUjBGQmMwSXNTVUZCU1N4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJQ29nWVhNZ1JFY2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMMlJuSnp0Y2JtbHRjRzl5ZENBcUlHRnpJSFZwSUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5MWFTYzdYRzVwYlhCdmNuUWdLaUJoY3lCbmNtOXJJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzluY205ckp6dGNibHh1YVcxd2IzSjBJSHRrWld4aGVYMGdabkp2YlNBblFHUmhkR0ZuY205ckxXeHBZbkpoY21sbGN5OTFkR2xzY3k5emNtTXZkR1Z6ZENjN1hHNWNibHh1THlvcUlGUjVjR1VnWm05eUlIdEFiR2x1YXlCRVpXMXZVMk55YVhCMGZTQnpkR1Z3SUNvdlhHNWxlSEJ2Y25RZ2RIbHdaU0JUZEdWd0lEMGdlMXh1SUNCdVlXMWxPaUJ6ZEhKcGJtYzdYRzRnSUdaMWJtTTZJQ2dwSUQwK0lGQnliMjFwYzJVOGRtOXBaRDQ3WEc1Y2JpQWdMeW9xSUZOMFpYQWdiM0IwYVc5dWN6b2daR1Z6WTNKcGNIUnBiMjRnWVc1a0lHUmxiR0Y1SUNocGJpQnRjeWtnWVdaMFpYSWdablZ1WTNScGIyNGdaVzVrY3lBcUwxeHVJQ0J2Y0hScGIyNXpQem9nZTF4dUlDQWdJR1JsYzJOeWFYQjBhVzl1UHpvZ2MzUnlhVzVuTzF4dUlDQWdJR1JsYkdGNVB6b2diblZ0WW1WeU8xeHVJQ0I5WEc1OU8xeHVYRzR2S2lvZ1JHVnRieUJ6WTNKcGNIUWdZMnhoYzNNdUlFTnZkV3hrSUdKbElIVnpaV1FnWm05eUlHTnlaV0YwYVc1bklHUmxiVzhnYzJOeWFYQjBjeUIwYnlCemFHOTNJSFJvWlNCd2JHRjBabTl5YlNCallYQmhZbWxzYVhScFpYTWdLaTljYm1WNGNHOXlkQ0JqYkdGemN5QkVaVzF2VTJOeWFYQjBJSHRjYmlBZ2JtRnRaVG9nYzNSeWFXNW5JRDBnSnljN1hHNGdJR1JsYzJOeWFYQjBhVzl1T2lCemRISnBibWNnUFNBbkp6dGNibHh1SUNCemRHRjBhV01nWTNWeWNtVnVkRTlpYW1WamREb2dSR1Z0YjFOamNtbHdkQ0I4SUc1MWJHd2dQU0J1ZFd4c08xeHVYRzRnSUhCeWFYWmhkR1VnWDJselFYVjBiMjFoZEdsak9pQmliMjlzWldGdUlEMGdabUZzYzJVN1hHNGdJSEJ5YVhaaGRHVWdYMkYxZEc5VGRHRnlkRVpwY25OMFUzUmxjRG9nWW05dmJHVmhiaUE5SUdaaGJITmxPMXh1SUNCd2NtbDJZWFJsSUY5amRYSnlaVzUwVTNSbGNEb2diblZ0WW1WeUlEMGdNRHRjYmlBZ2NISnBkbUYwWlNCZmFYTlRkRzl3Y0dWa09pQmliMjlzWldGdUlEMGdabUZzYzJVN1hHNGdJSEJ5YVhaaGRHVWdYMmx6UTJGdVkyVnNiR1ZrT2lCaWIyOXNaV0Z1SUQwZ1ptRnNjMlU3WEc0Z0lIQnlhWFpoZEdVZ1gybHpVM1JsY0ZCeWIyTmxjM05sWkRvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sTzF4dVhHNGdJSEJ5YVhaaGRHVWdYM0p2YjNRNklFaFVUVXhFYVhaRmJHVnRaVzUwSUQwZ2RXa3VaR2wyS0Z0ZExDQjdhV1E2SUNka1pXMXZMWE5qY21sd2RDY3NYRzRnSUNBZ1kyeGhjM05sY3pvZ0ozUjFkRzl5YVdGc2N5MXliMjkwSUhSMWRHOXlhV0ZzY3kxMGNtRmpheUJrWlcxdkxXRndjQzF6WTNKcGNIUW5mU2s3WEc1Y2JpQWdjSEpwZG1GMFpTQmZjM1JsY0hNNklGTjBaWEJiWFNBOUlGdGRPMXh1WEc0Z0lIQnlhWFpoZEdVZ1gyMWhhVzVJWldGa1pYSTZJRWhVVFV4RWFYWkZiR1Z0Wlc1MElEMGdkV2t1Y0dGdVpXd29XMTBzSUNkMGRYUnZjbWxoYkhNdGJXRnBiaTFvWldGa1pYSW5LVHRjYmlBZ2NISnBkbUYwWlNCZmFHVmhaR1Z5T2lCSVZFMU1TR1ZoWkdsdVowVnNaVzFsYm5RZ1BTQjFhUzVvTWlnbkp5azdYRzRnSUhCeWFYWmhkR1VnWDJobFlXUmxja1JwZGpvZ1NGUk5URVJwZGtWc1pXMWxiblFnUFNCMWFTNWthWFpJS0Z0ZExDQW5kSFYwYjNKcFlXeHpMWEp2YjNRdGFHVmhaR1Z5SnlrN1hHNGdJSEJ5YVhaaGRHVWdYM04wYjNCVGRHRnlkRUowYmpvZ1NGUk5URUoxZEhSdmJrVnNaVzFsYm5RZ1BTQjFhUzVpZFhSMGIyNG9kV2t1YVdOdmJrWkJLQ2R3WVhWelpTY3BMRnh1SUNBZ0lDZ3BJRDArSUhSb2FYTXVYMk5vWVc1blpWTjBiM0JUZEdGMFpTZ3BMQ0FuVUd4aGVTQXZJSEJoZFhObEp5azdYRzRnSUhCeWFYWmhkR1VnWDNKbGMzUmhjblJDZEc0NklFaFVUVXhDZFhSMGIyNUZiR1Z0Wlc1MElEMGdkV2t1WW5WMGRHOXVLSFZwTG1samIyNUdRU2duY21Wa2J5Y3BMQ0FvS1NBOVBpQjBhR2x6TGw5eVpYTjBZWEowVTJOeWFYQjBLQ2tzSUNkU1pYTjBZWEowSnlrN1hHNGdJSEJ5YVhaaGRHVWdYMjVsZUhSVGRHVndRblJ1T2lCSVZFMU1RblYwZEc5dVJXeGxiV1Z1ZENBOUlIVnBMbUoxZEhSdmJpaDFhUzVwWTI5dVJrRW9KM0JzWVhrbktTd2dLQ2tnUFQ0Z2UxeHVJQ0FnSUdsbUlDZ2hkR2hwY3k1ZmFYTlRkR1Z3VUhKdlkyVnpjMlZrS1Z4dUlDQWdJQ0FnZEdocGN5NWZibVY0ZEZOMFpYQW9LVHRjYmlBZ2ZTd2dKMDVsZUhRZ2MzUmxjQ2NwTzF4dVhHNGdJSEJ5YVhaaGRHVWdYMkZqZEdsMmFYUjVPaUJJVkUxTVJHbDJSV3hsYldWdWRDQTlJSFZwTG5CaGJtVnNLRnRkTENBbmRIVjBiM0pwWVd4ekxYSnZiM1F0WkdWelkzSnBjSFJwYjI0bktUdGNibHh1SUNCd2NtbDJZWFJsSUY5d2NtOW5jbVZ6YzBScGRqb2dTRlJOVEVScGRrVnNaVzFsYm5RZ1BTQjFhUzVrYVhaV0tGdGRMQ0FuZEhWMGIzSnBZV3h6TFhKdmIzUXRjSEp2WjNKbGMzTW5LVHRjYmlBZ2NISnBkbUYwWlNCZmNISnZaM0psYzNNNklFaFVUVXhRY205bmNtVnpjMFZzWlcxbGJuUWdQU0IxYVM1bGJHVnRaVzUwS0Nkd2NtOW5jbVZ6Y3ljcE8xeHVJQ0J3Y21sMllYUmxJRjl3Y205bmNtVnpjMU4wWlhCek9pQklWRTFNUkdsMlJXeGxiV1Z1ZENBOUlIVnBMbVJwZGxSbGVIUW9KeWNwTzF4dVhHNGdJSEJ5YVhaaGRHVWdYMjV2WkdVL09pQkVSeTVFYjJOclRtOWtaVHRjYmlBZ2NISnBkbUYwWlNCZlkyeHZjMlZDZEc0NklFaFVUVXhDZFhSMGIyNUZiR1Z0Wlc1MElEMGdkV2t1WW5WMGRHOXVLSFZwTG1samIyNUdRU2duWTJobGRuSnZiaTFzWldaMEp5a3NJQ2dwSUQwK0lIUm9hWE11WDJOc2IzTmxSRzlqYXlncExDQW5RbUZqYXlCMGJ5QmtaVzF2SnlrN1hHNWNibHh1SUNCamIyNXpkSEoxWTNSdmNpaHVZVzFsT2lCemRISnBibWNzSUdSbGMyTnlhWEIwYVc5dU9pQnpkSEpwYm1jc0lHbHpRWFYwYjIxaGRHbGpPaUJpYjI5c1pXRnVJRDBnWm1Gc2MyVXNYRzRnSUNBZ2IzQjBhVzl1Y3o4NklIdGhkWFJ2VTNSaGNuUkdhWEp6ZEZOMFpYQS9PaUJpYjI5c1pXRnVmU2tnZTF4dUlDQWdJSFJvYVhNdWJtRnRaU0E5SUc1aGJXVTdYRzRnSUNBZ2RHaHBjeTVrWlhOamNtbHdkR2x2YmlBOUlHUmxjMk55YVhCMGFXOXVPMXh1SUNBZ0lIUm9hWE11WDJselFYVjBiMjFoZEdsaklEMGdhWE5CZFhSdmJXRjBhV003WEc0Z0lDQWdkR2hwY3k1ZllYVjBiMU4wWVhKMFJtbHljM1JUZEdWd0lEMGdiM0IwYVc5dWN6OHVZWFYwYjFOMFlYSjBSbWx5YzNSVGRHVndJRDgvSUdaaGJITmxPMXh1WEc0Z0lDQWdkR2hwY3k1ZmNISnZaM0psYzNNdWJXRjRJRDBnTUR0Y2JpQWdJQ0IwYUdsekxsOXdjbTluY21WemN5NTJZV3gxWlNBOUlERTdYRzVjYmlBZ0lDQkVaVzF2VTJOeWFYQjBMbU4xY25KbGJuUlBZbXBsWTNRZ1BTQjBhR2x6TzF4dUlDQjlYRzVjYmlBZ0x5b3FJRkpsZEhWeWJuTWdaR1Z0YnlCelkzSnBjSFFnYzNSbGNITWdLaTljYmlBZ1oyVjBJSE4wWlhCektDazZJRk4wWlhCYlhTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYM04wWlhCek8xeHVJQ0I5WEc1Y2JpQWdMeW9xSUZKbGRIVnlibk1nZEdobElHRnRiM1Z1ZENCdlppQmtaVzF2SUhOamNtbHdkQ0J6ZEdWd2N5QXFMMXh1SUNCblpYUWdjM1JsY0U1MWJXSmxjaWdwT2lCdWRXMWlaWElnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5emRHVndjeTVzWlc1bmRHZzdYRzRnSUgxY2JseHVYRzRnSUM4cUtpQkJaR1J6SUhOamNtbHdkQ0JvWldGa1pYSWdLaTljYmlBZ2NISnBkbUYwWlNCZllXUmtTR1ZoWkdWeUtDazZJSFp2YVdRZ2UxeHVJQ0FnSUhSb2FYTXVYMk55WldGMFpVaGxZV1JsY2tScGRpZ3BPMXh1SUNBZ0lIUm9hWE11WDJOeVpXRjBaVkJ5YjJkeVpYTnpSR2wyS0NrN1hHNGdJQ0FnZEdocGN5NWZiV0ZwYmtobFlXUmxjaTVoY0hCbGJtUW9kR2hwY3k1ZmFHVmhaR1Z5UkdsMkxDQjBhR2x6TGw5d2NtOW5jbVZ6YzBScGRpazdYRzRnSUgxY2JseHVJQ0F2S2lvZ1EzSmxZWFJsY3lCelkzSnBjSFFnYUdWaFpHVnlJR1JwZGlBcUwxeHVJQ0J3Y21sMllYUmxJRjlqY21WaGRHVklaV0ZrWlhKRWFYWW9LVG9nZG05cFpDQjdYRzRnSUNBZ2RHaHBjeTVmYUdWaFpHVnlMbWx1Ym1WeVZHVjRkQ0E5SUhSb2FYTXVibUZ0WlR0Y2JpQWdJQ0IwYUdsekxsOW9aV0ZrWlhKRWFYWXVZWEJ3Wlc1a0tIUm9hWE11WDJOc2IzTmxRblJ1S1R0Y2JpQWdJQ0IwYUdsekxsOW9aV0ZrWlhKRWFYWXVZWEJ3Wlc1a0tIUm9hWE11WDJobFlXUmxjaWs3WEc1Y2JpQWdJQ0FvZEdocGN5NWZibVY0ZEZOMFpYQkNkRzR1Wm1seWMzUkRhR2xzWkNCaGN5QklWRTFNUld4bGJXVnVkQ2t1WTJ4aGMzTk9ZVzFsSUQwZ0oyZHliMnN0YVdOdmJpQm1ZWE1nWm1FdGNHeGhlU2M3WEc1Y2JpQWdJQ0IwYUdsekxsOW9aV0ZrWlhKRWFYWXVZWEJ3Wlc1a0tIUm9hWE11WDJselFYVjBiMjFoZEdsaklEOGdkR2hwY3k1ZmMzUnZjRk4wWVhKMFFuUnVJRG9nZEdocGN5NWZibVY0ZEZOMFpYQkNkRzRwTzF4dUlDQjlYRzVjYmlBZ0x5b3FJRU55WldGMFpYTWdjMk55YVhCMElIQnliMmR5WlhOeklHUnBkaUFxTDF4dUlDQndjbWwyWVhSbElGOWpjbVZoZEdWUWNtOW5jbVZ6YzBScGRpZ3BPaUIyYjJsa0lIdGNiaUFnSUNCMGFHbHpMbDl3Y205bmNtVnpjeTV0WVhnZ1BTQjBhR2x6TG5OMFpYQk9kVzFpWlhJN1hHNGdJQ0FnZEdocGN5NWZjSEp2WjNKbGMzTkVhWFl1WVhCd1pXNWtLSFJvYVhNdVgzQnliMmR5WlhOektUdGNiaUFnSUNCMGFHbHpMbDl3Y205bmNtVnpjMU4wWlhCeklEMGdkV2t1WkdsMlZHVjRkQ2hnVTNSbGNEb2dKSHQwYUdsekxsOXdjbTluY21WemN5NTJZV3gxWlgwZ2IyWWdKSHQwYUdsekxuTjBaWEJPZFcxaVpYSjlZQ2s3WEc1Y2JpQWdJQ0IwYUdsekxsOXdjbTluY21WemMwUnBkaTVoY0hCbGJtUW9kR2hwY3k1ZmNISnZaM0psYzNOVGRHVndjeWs3WEc0Z0lIMWNibHh1SUNBdktpb2dRV1JrY3lCa1pYTmpjbWx3ZEdsdmJpQnZaaUIwYUdVZ2MyTnlhWEIwSUNvdlhHNGdJSEJ5YVhaaGRHVWdYMkZrWkVSbGMyTnlhWEIwYVc5dUtDazZJSFp2YVdRZ2UxeHVJQ0FnSUhSb2FYTXVYMkZqZEdsMmFYUjVMbUZ3Y0dWdVpDaDFhUzVrYVhZb2RHaHBjeTVrWlhOamNtbHdkR2x2Yml3Z0ozUjFkRzl5YVdGc2N5MXliMjkwTFdSbGMyTnlhWEIwYVc5dUp5a3BPMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0IwYUdsekxuTjBaWEJPZFcxaVpYSTdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2JHVjBJR2x1YzNSeWRXTjBhVzl1U1c1a2FXTmhkRzl5SUQwZ2RXa3VhV052YmtaQktDZGpiRzlqYXljcE8xeHVJQ0FnSUNBZ2FXWWdLQ0YwYUdsekxsOXBjMEYxZEc5dFlYUnBZeWtnZTF4dUlDQWdJQ0FnSUNCcFppQW9hU0E5UFQwZ01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUdsdWMzUnlkV04wYVc5dVNXNWthV05oZEc5eUlEMGdkV2t1YVdOdmJrWkJLQ2R3YkdGNUp5d2dLQ2tnUFQ0Z2RHaHBjeTVmYm1WNGRGTjBaWEFvS1N3Z0owNWxlSFFnYzNSbGNDY3BPMXh1SUNBZ0lDQWdJQ0FnSUdsdWMzUnlkV04wYVc5dVNXNWthV05oZEc5eUxtTnNZWE56VG1GdFpTQTlJQ2RuY205ckxXbGpiMjRnWm1GeklHWmhMWEJzWVhrbk8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQmpiMjV6ZENCcGJuTjBjblZqZEdsdmJrUnBkaUE5SUhWcExtUnBkaWgwYUdsekxsOXpkR1Z3YzF0cFhTNXVZVzFsTENBblozSnZheTEwZFhSdmNtbGhiQzFsYm5SeWVTMXBibk4wY25WamRHbHZiaWNwTzF4dUlDQWdJQ0FnWTI5dWMzUWdZM1Z5Y21WdWRGTjBaWEJFWlhOamNtbHdkR2x2YmlBOUlIVnBMbVJwZGloMGFHbHpMbDl6ZEdWd2MxdHBYUzV2Y0hScGIyNXpQeTVrWlhOamNtbHdkR2x2Yml4Y2JpQWdJQ0FnSUNBZ0oyZHliMnN0ZEhWMGIzSnBZV3d0YzNSbGNDMWtaWE5qY21sd2RHbHZiaUJvYVdSa1pXNG5LVHRjYmlBZ0lDQWdJR052Ym5OMElHVnVkSEo1SUQwZ2RXa3VaR2wyU0NoYlhHNGdJQ0FnSUNBZ0lHbHVjM1J5ZFdOMGFXOXVTVzVrYVdOaGRHOXlMRnh1SUNBZ0lDQWdJQ0JwYm5OMGNuVmpkR2x2YmtScGRpeGNiaUFnSUNBZ0lGMHNJQ2RuY205ckxYUjFkRzl5YVdGc0xXVnVkSEo1SnlrN1hHNWNiaUFnSUNBZ0lIUm9hWE11WDJGamRHbDJhWFI1TG1Gd2NHVnVaQ2hsYm5SeWVTd2dZM1Z5Y21WdWRGTjBaWEJFWlhOamNtbHdkR2x2YmlrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0x5b3FJRWx1YVhScFlXeHBlbVZ6SUhSb1pTQnliMjkwSUc5bUlIUm9aU0JrWlcxdklITmpjbWx3ZENBcUwxeHVJQ0J3Y21sMllYUmxJRjlwYm1sMFVtOXZkQ2dwT2lCMmIybGtJSHRjYmlBZ0lDQm5jbTlyTG5Ob1pXeHNMbmRwYm1SdmQzTXVjMmh2ZDBOdmJuUmxlSFJRWVc1bGJDQTlJSFJ5ZFdVN1hHNGdJQ0FnWjNKdmF5NXphR1ZzYkM1M2FXNWtiM2R6TG5Ob2IzZElaV3h3SUQwZ1ptRnNjMlU3WEc1Y2JpQWdJQ0JqYjI1emRDQnpZM0pwY0hSRWIyTnJUbTlrWlNBOUlFRnljbUY1TG1aeWIyMG9aM0p2YXk1emFHVnNiQzVrYjJOclRXRnVZV2RsY2k1eWIyOTBUbTlrWlM1amFHbHNaSEpsYmlsYk1GMDdYRzVjYmlBZ0lDQjBhR2x6TGw5dWIyUmxJRDBnWjNKdmF5NXphR1ZzYkM1a2IyTnJUV0Z1WVdkbGNpNWtiMk5yS0hSb2FYTXVYM0p2YjNRc0lFUkhMa1JQUTB0ZlZGbFFSUzVHU1V4TUxDQnpZM0pwY0hSRWIyTnJUbTlrWlN3Z0p5Y3BPMXh1WEc0Z0lDQWdhV1lnS0hOamNtbHdkRVJ2WTJ0T2IyUmxMbkJoY21WdWRDNWpiMjUwWVdsdVpYSXVZMjl1ZEdGcGJtVnlSV3hsYldWdWRDNW1hWEp6ZEVWc1pXMWxiblJEYUdsc1pEOHViR0Z6ZEVWc1pXMWxiblJEYUdsc1pEOHVYRzRnSUNBZ0lDQmpiR0Z6YzB4cGMzUXVZMjl1ZEdGcGJuTW9KM1JoWWkxb1lXNWtiR1V0YkdsemRDMWpiMjUwWVdsdVpYSW5LU2xjYmlBZ0lDQWdJSE5qY21sd2RFUnZZMnRPYjJSbExuQmhjbVZ1ZEM1amIyNTBZV2x1WlhJdVkyOXVkR0ZwYm1WeVJXeGxiV1Z1ZEM1bWFYSnpkRVZzWlcxbGJuUkRhR2xzWkQ4dWJHRnpkRVZzWlcxbGJuUkRhR2xzWkM1eVpXMXZkbVVvS1R0Y2JseHVJQ0FnSUhSb2FYTXVYMjV2WkdVdVkyOXVkR0ZwYm1WeUxtTnZiblJoYVc1bGNrVnNaVzFsYm5RdVkyeGhjM05NYVhOMExtRmtaQ2duZEhWMGIzSnBZV3h6TFdSbGJXOHRjMk55YVhCMExXTnZiblJoYVc1bGNpY3BPMXh1WEc0Z0lDQWdkR2hwY3k1ZllXUmtTR1ZoWkdWeUtDazdYRzRnSUNBZ2RHaHBjeTVmY205dmRDNWhjSEJsYm1Rb2RHaHBjeTVmYldGcGJraGxZV1JsY2lrN1hHNWNiaUFnSUNCMGFHbHpMbDloWkdSRVpYTmpjbWx3ZEdsdmJpZ3BPMXh1SUNBZ0lIUm9hWE11WDNKdmIzUXVZWEJ3Wlc1a0tIUm9hWE11WDJGamRHbDJhWFI1S1R0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJRY205alpYTnpaWE1nYm1WNGRDQnpkR1Z3SUNvdlhHNGdJSEJ5YVhaaGRHVWdZWE41Ym1NZ1gyNWxlSFJUZEdWd0tDazZJRkJ5YjIxcGMyVThkbTlwWkQ0Z2UxeHVJQ0FnSUhSb2FYTXVYMmx6VTNSbGNGQnliMk5sYzNObFpDQTlJSFJ5ZFdVN1hHNGdJQ0FnYVdZZ0tDRjBhR2x6TGw5cGMwRjFkRzl0WVhScFl5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1ZmJtVjRkRk4wWlhCQ2RHNHVZMnhoYzNOTWFYTjBMbUZrWkNnblpHbHpZV0pzWldRbktUdGNiaUFnSUNBZ0lDaDBhR2x6TGw5dVpYaDBVM1JsY0VKMGJpNW1hWEp6ZEVOb2FXeGtJR0Z6SUVoVVRVeEZiR1Z0Wlc1MEtTNWpiR0Z6YzB4cGMzUXVZV1JrS0NkbVlTMWthWE5oWW14bFpDY3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHTnZibk4wSUdWdWRISjVJRDBnZEdocGN5NWZZV04wYVhacGRIa3VaMlYwUld4bGJXVnVkSE5DZVVOc1lYTnpUbUZ0WlNnblozSnZheTEwZFhSdmNtbGhiQzFsYm5SeWVTY3BXM1JvYVhNdVgyTjFjbkpsYm5SVGRHVndYVHRjYmlBZ0lDQmpiMjV6ZENCbGJuUnllVWx1WkdsallYUnZjaUE5SUhSb2FYTXVYMkZqZEdsMmFYUjVMbWRsZEVWc1pXMWxiblJ6UW5sRGJHRnpjMDVoYldVb0oyZHliMnN0YVdOdmJpY3BXM1JvYVhNdVgyTjFjbkpsYm5SVGRHVndYVHRjYmlBZ0lDQmpiMjV6ZENCbGJuUnllVWx1YzNSeWRXTjBhVzl1SUQwZ2RHaHBjeTVmWVdOMGFYWnBkSGt1WjJWMFJXeGxiV1Z1ZEhOQ2VVTnNZWE56VG1GdFpTZ25aM0p2YXkxMGRYUnZjbWxoYkMxemRHVndMV1JsYzJOeWFYQjBhVzl1SnlsYmRHaHBjeTVmWTNWeWNtVnVkRk4wWlhCZE8xeHVYRzRnSUNBZ1pXNTBjbmxKYm1ScFkyRjBiM0l1WTJ4aGMzTk9ZVzFsSUQwZ0oyZHliMnN0YVdOdmJpQm1ZWElnWm1FdGMzQnBibTVsY2kxMGFHbHlaQ0JtWVMxemNHbHVKenRjYmlBZ0lDQmxiblJ5ZVVsdWMzUnlkV04wYVc5dUxtTnNZWE56VEdsemRDNXlaVzF2ZG1Vb0oyaHBaR1JsYmljcE8xeHVJQ0FnSUdWdWRISjVTVzV6ZEhKMVkzUnBiMjR1WTJ4aGMzTk1hWE4wTG1Ga1pDZ25kbWx6YVdKc1pTY3BPMXh1WEc0Z0lDQWdZMjl1YzNRZ1kzVnljbVZ1ZEZOMFpYQWdQU0JsYm5SeWVTQmhjeUJJVkUxTVJHbDJSV3hsYldWdWREdGNiaUFnSUNCamIyNXpkQ0J6ZEdWd1JHVnNZWGtnUFNCMGFHbHpMbDl6ZEdWd2MxdDBhR2x6TGw5amRYSnlaVzUwVTNSbGNGMHViM0IwYVc5dWN6OHVaR1ZzWVhrZ1AxeHVJQ0FnSUNBZ2RHaHBjeTVmYzNSbGNITmJkR2hwY3k1ZlkzVnljbVZ1ZEZOMFpYQmRMbTl3ZEdsdmJuTS9MbVJsYkdGNUlTQTZJREl3TURBN1hHNWNiaUFnSUNCaGQyRnBkQ0IwYUdsekxsOXpkR1Z3YzF0MGFHbHpMbDlqZFhKeVpXNTBVM1JsY0YwdVpuVnVZeWdwTzF4dUlDQWdJSFJvYVhNdVgzTmpjbTlzYkZSdktIUm9hWE11WDNKdmIzUXNJR04xY25KbGJuUlRkR1Z3TG05bVpuTmxkRlJ2Y0NBdElIUm9hWE11WDIxaGFXNUlaV0ZrWlhJdWIyWm1jMlYwU0dWcFoyaDBLVHRjYmlBZ0lDQnBaaUFvZEdocGN5NWZhWE5CZFhSdmJXRjBhV01wSUh0Y2JpQWdJQ0FnSUdGM1lXbDBJSFJvYVhNdVgyTnZkVzUwWkc5M2JpaGxiblJ5ZVNCaGN5QklWRTFNUld4bGJXVnVkQ3dnWlc1MGNubEpibVJwWTJGMGIzSWdZWE1nU0ZSTlRFVnNaVzFsYm5Rc0lITjBaWEJFWld4aGVTazdYRzRnSUNBZ0lDQmhkMkZwZENCa1pXeGhlU2h6ZEdWd1JHVnNZWGtwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR052Ym5OMElHNWxkMFZ1ZEhKNVNXNWthV05oZEc5eUlEMGdkV2t1YVdOdmJrWkJLQ2RqYUdWamF5Y3BPMXh1SUNBZ0lHVnVkSEo1U1c1a2FXTmhkRzl5TG5KbGNHeGhZMlZYYVhSb0tHNWxkMFZ1ZEhKNVNXNWthV05oZEc5eUtUdGNiaUFnSUNCdVpYZEZiblJ5ZVVsdVpHbGpZWFJ2Y2k1amJHRnpjMDVoYldVZ1BTQW5aM0p2YXkxcFkyOXVJR1poY2lCbVlTMWphR1ZqYXljN1hHNWNiaUFnSUNCMGFHbHpMbDl3Y205bmNtVnpjeTUyWVd4MVpTc3JPMXh1SUNBZ0lIUm9hWE11WDNCeWIyZHlaWE56VTNSbGNITXVhVzV1WlhKVVpYaDBJRDBnWUZOMFpYQTZJQ1I3ZEdocGN5NWZjSEp2WjNKbGMzTXVkbUZzZFdWOUlHOW1JQ1I3ZEdocGN5NXpkR1Z3VG5WdFltVnlmV0E3WEc1Y2JpQWdJQ0IwYUdsekxsOWpkWEp5Wlc1MFUzUmxjQ3NyTzF4dUlDQWdJSFJvYVhNdVgybHpVM1JsY0ZCeWIyTmxjM05sWkNBOUlHWmhiSE5sTzF4dVhHNGdJQ0FnYVdZZ0tIUm9hWE11WDJOMWNuSmxiblJUZEdWd0lEMDlQU0IwYUdsekxuTjBaWEJPZFcxaVpYSXBJSHRjYmlBZ0lDQWdJSFJvYVhNdVgybHpRWFYwYjIxaGRHbGpJRDhnZEdocGN5NWZjM1J2Y0ZOMFlYSjBRblJ1TG5KbGNHeGhZMlZYYVhSb0tIUm9hWE11WDNKbGMzUmhjblJDZEc0cElEcGNiaUFnSUNBZ0lDQWdkR2hwY3k1ZmJtVjRkRk4wWlhCQ2RHNHVjbVZ3YkdGalpWZHBkR2dvZEdocGN5NWZjbVZ6ZEdGeWRFSjBiaWs3WEc0Z0lDQWdJQ0J5WlhSMWNtNDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLQ0YwYUdsekxsOXBjMEYxZEc5dFlYUnBZeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdibVY0ZEZOMFpYQkZiblJ5ZVVsdVpHbGpZWFJ2Y2lBOUlIUm9hWE11WDJGamRHbDJhWFI1TG1kbGRFVnNaVzFsYm5SelFubERiR0Z6YzA1aGJXVW9KMmR5YjJzdGFXTnZiaWNwVzNSb2FYTXVYMk4xY25KbGJuUlRkR1Z3WFR0Y2JpQWdJQ0FnSUdOdmJuTjBJSE4wWVhKMFRtVjRkRk4wWlhCSlkyOXVJRDBnZFdrdWFXTnZia1pCS0Nkd2JHRjVKeXdnS0NrZ1BUNGdkR2hwY3k1ZmJtVjRkRk4wWlhBb0tTd2dKMDVsZUhRZ2MzUmxjQ2NwTzF4dUlDQWdJQ0FnYzNSaGNuUk9aWGgwVTNSbGNFbGpiMjR1WTJ4aGMzTk9ZVzFsSUQwZ0oyZHliMnN0YVdOdmJpQm1ZWE1nWm1FdGNHeGhlU2M3WEc0Z0lDQWdJQ0J1WlhoMFUzUmxjRVZ1ZEhKNVNXNWthV05oZEc5eUxuSmxjR3hoWTJWWGFYUm9LSE4wWVhKMFRtVjRkRk4wWlhCSlkyOXVLVHRjYmlBZ0lDQWdJSFJvYVhNdVgyNWxlSFJUZEdWd1FuUnVMbU5zWVhOelRHbHpkQzV5WlcxdmRtVW9KMlJwYzJGaWJHVmtKeWs3WEc0Z0lDQWdJQ0FvZEdocGN5NWZibVY0ZEZOMFpYQkNkRzR1Wm1seWMzUkRhR2xzWkNCaGN5QklWRTFNUld4bGJXVnVkQ2t1WTJ4aGMzTk1hWE4wTG5KbGJXOTJaU2duWm1FdFpHbHpZV0pzWldRbktUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQXZLaW9nVTNSaGNuUnpJSFJvWlNCa1pXMXZJSE5qY21sd2RDQmhZM1JwYjI1eklDb3ZYRzRnSUhCeWFYWmhkR1VnWVhONWJtTWdYM04wWVhKMFUyTnlhWEIwS0NrNklGQnliMjFwYzJVOGRtOXBaRDRnZTF4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNCMGFHbHpMbDlqZFhKeVpXNTBVM1JsY0RzZ2FTQThJSFJvYVhNdWMzUmxjRTUxYldKbGNqc2dhU3NyS1NCN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1ZmFYTlRkRzl3Y0dWa0lIeDhJSFJvYVhNdVgybHpRMkZ1WTJWc2JHVmtLVnh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNibHh1SUNBZ0lDQWdZWGRoYVhRZ2RHaHBjeTVmYm1WNGRGTjBaWEFvS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1UyTnliMnhzY3lCMGJ5QjBhR1VnWTNWeWNtVnVkQ0J6ZEdWd1hHNGdJQ0FxSUVCd1lYSmhiU0JsYkdWdFpXNTBJQzBnUTNWeWNtVnVkQ0J6ZEdWd0lHVnNaVzFsYm5RZ2FXNGdjbTl2ZEZ4dUlDQWdLaUJBY0dGeVlXMGdlU0F0SUhrZ1kyOXZjbVJwYm1GMFpTQnZaaUIwYUdVZ1pXeGxiV1Z1ZEZ4dUlDQWdLaTljYmlBZ2NISnBkbUYwWlNCZmMyTnliMnhzVkc4b1pXeGxiV1Z1ZERvZ1NGUk5URVJwZGtWc1pXMWxiblFzSUhrNklHNTFiV0psY2lrNklIWnZhV1FnZTF4dUlDQWdJR1ZzWlcxbGJuUXVabTlqZFhNb0tUdGNiaUFnSUNCbGJHVnRaVzUwTG5OamNtOXNiRlJ2Y0NBOUlIazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUVdSa2N5QmhiaUJwYm5SbGNtRmpkR2wyWlNCa1pXeGhlU0JwYm1ScFkyRjBiM0pjYmlBZ0lDb2dRSEJoY21GdElHVnNaVzFsYm5RZ0xTQkRkWEp5Wlc1MElITjBaWEFnWld4bGJXVnVkRnh1SUNBZ0tpQkFjR0Z5WVcwZ2FXNWthV05oZEc5eUlDMGdRM1Z5Y21WdWRDQnpkR1Z3SUdsdVpHbGpZWFJ2Y2x4dUlDQWdLaUJBY0dGeVlXMGdkR2x0WlNBdElFbHVaR2xqWVhSdmNpQmhibWx0WVhScGIyNGdkR2x0WlZ4dUlDQWdLaTljYmlBZ2NISnBkbUYwWlNCaGMzbHVZeUJmWTI5MWJuUmtiM2R1S0dWc1pXMWxiblE2SUVoVVRVeEZiR1Z0Wlc1MExDQnBibVJwWTJGMGIzSTZJRWhVVFV4RmJHVnRaVzUwTENCMGFXMWxPaUJ1ZFcxaVpYSXBPaUJRY205dGFYTmxQSFp2YVdRK0lIdGNiaUFnSUNCamIyNXpkQ0JqYjNWdWRHUnZkMjVFYVhZNklFaFVUVXhFYVhaRmJHVnRaVzUwSUQwZ2RXa3VaR2wyS0Z0ZExDQW5aR1Z0YnkxelkzSnBjSFF0WTI5MWJuUmtiM2R1SnlrN1hHNWNiaUFnSUNCcGJtUnBZMkYwYjNJdVkyeGhjM05NYVhOMExtRmtaQ2duYUdsa1pHVnVKeWs3WEc1Y2JpQWdJQ0JzWlhRZ1kyOTFiblJrYjNkdUlEMGdkR2x0WlNBdklERXdNREE3WEc0Z0lDQWdZMjl1YzNRZ2MzWm5JRDBnZEdocGN5NWZZM0psWVhSbFUxWkhTVzVrYVdOaGRHOXlLR052ZFc1MFpHOTNiaWs3WEc1Y2JpQWdJQ0JqYjNWdWRHUnZkMjVFYVhZdVlYQndaVzVrS0hOMlp5azdYRzRnSUNBZ1pXeGxiV1Z1ZEM1d2NtVndaVzVrS0dOdmRXNTBaRzkzYmtScGRpazdYRzVjYmlBZ0lDQmpiMjV6ZENCcGJuUmxjblpoYkNBOUlITmxkRWx1ZEdWeWRtRnNLQ2dwSUQwK0lIdGNiaUFnSUNBZ0lHTnZkVzUwWkc5M2JpMHRPMXh1SUNBZ0lDQWdhV1lnS0dOdmRXNTBaRzkzYmlBOVBUMGdNQ2tnZTF4dUlDQWdJQ0FnSUNCamJHVmhja2x1ZEdWeWRtRnNLR2x1ZEdWeWRtRnNLVHRjYmlBZ0lDQWdJQ0FnWTI5MWJuUmtiM2R1UkdsMkxuSmxiVzkyWlNncE8xeHVYRzRnSUNBZ0lDQWdJR2x1WkdsallYUnZjaTVqYkdGemMweHBjM1F1Y21WdGIzWmxLQ2RvYVdSa1pXNG5LVHRjYmlBZ0lDQWdJQ0FnYVc1a2FXTmhkRzl5TG1Oc1lYTnpUR2x6ZEM1aFpHUW9KM1pwYzJsaWJHVW5LVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlMQ0F4TURBd0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJEY21WaGRHVnpJRk5XUnlCM2FYUm9JR052ZFc1MFpHOTNiaUJqYVhKamJHVmNiaUFnSUNvZ1FIQmhjbUZ0SUdOdmRXNTBaRzkzYmlBdElHTnZkVzUwWkc5M2JpQjBhVzFsWEc0Z0lDQXFJRUJ5WlhSMWNtNXpJRk5XUnlCamIzVnVkR1J2ZDI0Z2FXNWthV05oZEc5eVhHNGdJQ0FxTDF4dUlDQndjbWwyWVhSbElGOWpjbVZoZEdWVFZrZEpibVJwWTJGMGIzSW9ZMjkxYm5Sa2IzZHVPaUJ1ZFcxaVpYSXBPaUJUVmtkVFZrZEZiR1Z0Wlc1MElIdGNiaUFnSUNCamIyNXpkQ0J6ZG1jZ1BTQmtiMk4xYldWdWRDNWpjbVZoZEdWRmJHVnRaVzUwVGxNb0oyaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabkp5d2dKM04yWnljcE8xeHVJQ0FnSUdOdmJuTjBJR05wY21Oc1pTQTlJR1J2WTNWdFpXNTBMbU55WldGMFpVVnNaVzFsYm5ST1V5Z25hSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY25MQ0FuWTJseVkyeGxKeWs3WEc0Z0lDQWdZMmx5WTJ4bExuTmxkRUYwZEhKcFluVjBaVTVUS0c1MWJHd3NJQ2RqZUNjc0lDYzNKeWs3WEc0Z0lDQWdZMmx5WTJ4bExuTmxkRUYwZEhKcFluVjBaVTVUS0c1MWJHd3NJQ2RqZVNjc0lDYzNKeWs3WEc0Z0lDQWdZMmx5WTJ4bExuTmxkRUYwZEhKcFluVjBaVTVUS0c1MWJHd3NJQ2R5Snl3Z0p6WW5LVHRjYmlBZ0lDQmphWEpqYkdVdWMyVjBRWFIwY21saWRYUmxUbE1vYm5Wc2JDd2dKM04wZVd4bEp5d2dZR0Z1YVcxaGRHbHZiam9nWTI5MWJuUmtiM2R1SUNSN1kyOTFiblJrYjNkdWZYTWdiR2x1WldGeUlHbHVabWx1YVhSbElHWnZjbmRoY21SellDazdYRzRnSUNBZ2MzWm5MbUZ3Y0dWdVpDaGphWEpqYkdVcE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUhOMlp6dGNiaUFnZlZ4dVhHNGdJQzhxS2lCRGFHRnVaMlZ6SUhSb1pTQnpkR0YwWlNCdlppQjBhR1VnWkdWdGJ5QnpZM0pwY0hRZ0tITjBiM0F2Y0d4aGVTa2dLaTljYmlBZ2NISnBkbUYwWlNCZlkyaGhibWRsVTNSdmNGTjBZWFJsS0NrNklIWnZhV1FnZTF4dUlDQWdJR052Ym5OMElHbGpiMjRnUFNCMGFHbHpMbDl6ZEc5d1UzUmhjblJDZEc0dVoyVjBSV3hsYldWdWRITkNlVU5zWVhOelRtRnRaU2duWjNKdmF5MXBZMjl1SnlrN1hHNGdJQ0FnYVdOdmJsc3dYUzVqYkdGemMwNWhiV1VnUFNBblozSnZheTFwWTI5dUlHWmhjeUJtWVMxd2JHRjVKenRjYmlBZ0lDQjBhR2x6TGw5cGMxTjBiM0J3WldRZ1BTQWhkR2hwY3k1ZmFYTlRkRzl3Y0dWa08xeHVYRzRnSUNBZ2FXWWdLQ0YwYUdsekxsOXBjMU4wYjNCd1pXUXBJSHRjYmlBZ0lDQWdJR2xqYjI1Yk1GMHVZMnhoYzNOT1lXMWxJRDBnSjJkeWIyc3RhV052YmlCbVlXd2dabUV0Y0dGMWMyVW5PMXh1SUNBZ0lDQWdhV1lnS0NGMGFHbHpMbDlwYzFOMFpYQlFjbTlqWlhOelpXUXBYRzRnSUNBZ0lDQWdJSFJvYVhNdVgzTjBZWEowVTJOeWFYQjBLQ2s3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnTHlvcUlGSmxjM1JoY25SeklIUm9aU0J6WTNKcGNIUWdLaTljYmlBZ2NISnBkbUYwWlNCZmNtVnpkR0Z5ZEZOamNtbHdkQ2dwT2lCMmIybGtJSHRjYmlBZ0lDQm5jbTlyTG5Ob1pXeHNMbVJ2WTJ0TllXNWhaMlZ5TG1Oc2IzTmxLSFJvYVhNdVgyNXZaR1VoS1R0Y2JpQWdJQ0JuY205ckxuTm9aV3hzTG1Oc2IzTmxRV3hzS0NrN1hHNGdJQ0FnZEdocGN5NWZZMnhsWVhKU2IyOTBLQ2s3WEc0Z0lDQWdkR2hwY3k1ZmMyVjBTVzVwZEZCaGNtRnRjeWdwTzF4dUlDQWdJSFJvYVhNdWMzUmhjblFvS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJEYkdWaGNuTWdkR2hsSUhKdmIzUWdaV3hsYldWdWRDQXFMMXh1SUNCd2NtbDJZWFJsSUY5amJHVmhjbEp2YjNRb0tUb2dkbTlwWkNCN1hHNGdJQ0FnZEdocGN5NWZjbTl2ZENBOUlIVnBMbVJwZGloYlhTd2dlMmxrT2lBblpHVnRieTF6WTNKcGNIUW5MQ0JqYkdGemMyVnpPaUFuZEhWMGIzSnBZV3h6TFhKdmIzUWdkSFYwYjNKcFlXeHpMWFJ5WVdOcklHUmxiVzh0WVhCd0xYTmpjbWx3ZENkOUtUdGNibHh1SUNBZ0lIUm9hWE11WDIxaGFXNUlaV0ZrWlhJZ1BTQjFhUzV3WVc1bGJDaGJYU3dnSjNSMWRHOXlhV0ZzY3kxdFlXbHVMV2hsWVdSbGNpY3BPMXh1SUNBZ0lIUm9hWE11WDJobFlXUmxjaUE5SUhWcExtZ3lLQ2NuS1R0Y2JpQWdJQ0IwYUdsekxsOW9aV0ZrWlhKRWFYWWdQU0IxYVM1a2FYWklLRnRkTENBbmRIVjBiM0pwWVd4ekxYSnZiM1F0YUdWaFpHVnlKeWs3WEc1Y2JpQWdJQ0IwYUdsekxsOWhZM1JwZG1sMGVTQTlJSFZwTG5CaGJtVnNLRnRkTENBbmRIVjBiM0pwWVd4ekxYSnZiM1F0WkdWelkzSnBjSFJwYjI0bktUdGNibHh1SUNBZ0lIUm9hWE11WDNCeWIyZHlaWE56UkdsMklEMGdkV2t1WkdsMlZpaGJYU3dnSjNSMWRHOXlhV0ZzY3kxeWIyOTBMWEJ5YjJkeVpYTnpKeWs3WEc0Z0lDQWdkR2hwY3k1ZmNISnZaM0psYzNNZ1BTQjFhUzVsYkdWdFpXNTBLQ2R3Y205bmNtVnpjeWNwTzF4dUlDQWdJSFJvYVhNdVgzQnliMmR5WlhOelUzUmxjSE1nUFNCMWFTNWthWFpVWlhoMEtDY25LVHRjYmx4dUlDQWdJSFJvYVhNdVgzQnliMmR5WlhOekxtMWhlQ0E5SURBN1hHNGdJQ0FnZEdocGN5NWZjSEp2WjNKbGMzTXVkbUZzZFdVZ1BTQXhPMXh1SUNCOVhHNWNiaUFnTHlvcUlGTmxkSE1nYVc1cGRHbGhiQ0J3WVhKaGJXVjBaWEp6SUNvdlhHNGdJSEJ5YVhaaGRHVWdYM05sZEVsdWFYUlFZWEpoYlhNb0tUb2dkbTlwWkNCN1hHNGdJQ0FnZEdocGN5NWZZM1Z5Y21WdWRGTjBaWEFnUFNBd08xeHVJQ0FnSUhSb2FYTXVYMmx6VTNSdmNIQmxaQ0E5SUdaaGJITmxPMXh1SUNBZ0lIUm9hWE11WDJselEyRnVZMlZzYkdWa0lEMGdabUZzYzJVN1hHNWNiaUFnSUNCamIyNXpkQ0JwWTI5dUlEMGdkR2hwY3k1ZmMzUnZjRk4wWVhKMFFuUnVMbWRsZEVWc1pXMWxiblJ6UW5sRGJHRnpjMDVoYldVb0oyZHliMnN0YVdOdmJpY3BPMXh1SUNBZ0lHbGpiMjViTUYwdVkyeGhjM05PWVcxbElEMGdKMmR5YjJzdGFXTnZiaUJtWVd3Z1ptRXRjR0YxYzJVbk8xeHVJQ0FnSUhSb2FYTXVYMjVsZUhSVGRHVndRblJ1TG1Oc1lYTnpUR2x6ZEM1eVpXMXZkbVVvSjJScGMyRmliR1ZrSnlrN1hHNGdJSDFjYmx4dUlDQXZLaW9nUTJ4dmMyVnpJR1JsYlc4Z2MyTnlhWEIwSUdSdlkyc2dLaTljYmlBZ2NISnBkbUYwWlNCZlkyeHZjMlZFYjJOcktDazZJSFp2YVdRZ2UxeHVJQ0FnSUdkeWIyc3VjMmhsYkd3dVpHOWphMDFoYm1GblpYSXVZMnh2YzJVb2RHaHBjeTVmYm05a1pTRXBPMXh1SUNBZ0lIUm9hWE11WTJGdVkyVnNVMk55YVhCMEtDazdYRzRnSUgxY2JseHVJQ0F2S2lvZ1EyRnVZMlZzY3lCMGFHVWdjMk55YVhCMElDb3ZYRzRnSUdOaGJtTmxiRk5qY21sd2RDZ3BPaUIyYjJsa0lIdGNiaUFnSUNCMGFHbHpMbDlwYzBOaGJtTmxiR3hsWkNBOUlIUnlkV1U3WEc0Z0lDQWdSR1Z0YjFOamNtbHdkQzVqZFhKeVpXNTBUMkpxWldOMElEMGdiblZzYkR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkJaR1J6SUdFZ2JtVjNJSE4wWlhBZ2RHOGdjMk55YVhCMFhHNGdJQ0FxSUVCd1lYSmhiU0J1WVcxbElDMGdVM1JsY0NCdVlXMWxYRzRnSUNBcUlFQndZWEpoYlNCbWRXNWpJQzBnVTNSbGNDQm1kVzVqZEdsdmJseHVJQ0FnS2lCQWNHRnlZVzBnYjNCMGFXOXVjeUF0SUZOMFpYQWdiM0IwYVc5dWN5QW9aR1Z6WTNKcGNIUnBiMjRnWVc1a0lHUmxiR0Y1SUdGbWRHVnlJSE4wWlhBZ1pXNWtjeWxjYmlBZ0lDb2dRSEpsZEhWeWJuTWdVbVYwZFhKdWN5QjBhR1VnWTNWeWNtVnVkQ0JrWlcxdklITmpjbWx3ZENCdlltcGxZM1JjYmlBZ0lDb3ZYRzRnSUhOMFpYQW9ibUZ0WlRvZ2MzUnlhVzVuTENCbWRXNWpPaUFvS1NBOVBpQlFjbTl0YVhObFBIWnZhV1ErTENCdmNIUnBiMjV6UHpvZ2UyUmxjMk55YVhCMGFXOXVQem9nYzNSeWFXNW5MQ0JrWld4aGVUODZJRzUxYldKbGNuMHBPaUIwYUdseklIdGNiaUFnSUNCMGFHbHpMbDl6ZEdWd2MxdDBhR2x6TG5OMFpYQnpMbXhsYm1kMGFGMGdQU0I3WEc0Z0lDQWdJQ0J1WVcxbE9pQnVZVzFsTEZ4dUlDQWdJQ0FnWm5WdVl6b2dablZ1WXl4Y2JpQWdJQ0FnSUc5d2RHbHZibk02SUc5d2RHbHZibk1zWEc0Z0lDQWdmVHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjenRjYmlBZ2ZWeHVYRzRnSUM4cUtpQlRkR0Z5ZEhNZ2RHaGxJR1JsYlc4Z2MyTnlhWEIwSUNvdlhHNGdJR0Z6ZVc1aklITjBZWEowS0NrNklGQnliMjFwYzJVOGRtOXBaRDRnZTF4dUlDQWdJSFJvYVhNdVgybHVhWFJTYjI5MEtDazdYRzRnSUNBZ1ozSnZheTV6YUdWc2JDNXVaWGRXYVdWM0tIUm9hWE11Ym1GdFpTazdYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NWZhWE5CZFhSdmJXRjBhV01wSUh0Y2JpQWdJQ0FnSUhSb2FYTXVYM04wWVhKMFUyTnlhWEIwS0NrN1hHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0hSb2FYTXVYMkYxZEc5VGRHRnlkRVpwY25OMFUzUmxjQ2xjYmlBZ0lDQWdJR0YzWVdsMElIUm9hWE11WDI1bGVIUlRkR1Z3S0NrN1hHNGdJSDFjYm4xY2JpSmRmUT09IiwiLy8gUnVudGltZSBzeXN0ZW0gZm9yIGV4cG9ydGVkIEMvQysrLWZ1bmN0aW9ucyBjYWxsLlxuLy8gSXQgd2FzIHByZXZpb3VzZWx5IGRldmVsb3BlZCBhbmQgZG9lcyBOT1QgcHJvdmlkZSBjYWxsIHdhc20tZnVuY3Rpb25zIGluIFdlYldvcmtlcnMuXG5cbi8vIHR5cGUtdG8taGVhcCBjb3JyZXNwb25kZW5jZVxuY29uc3QgaGVhcE1hcCA9IHtcImkzMlwiOiBcIkhFQVAzMlwiLCAvLyBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgIFwiZjMyXCI6IFwiSEVBUEYzMlwiIC8vIEZsb2F0MzJBcnJheVxuICAgICAgICAgICAgICAgIH07XG5cbi8vIHR5cGUgc2lnbmF0dXJlIHRvIHR5cGVkIGFycmF5ICxhcHBcbmNvbnN0IHR5cGVNYXAgPSB7XCJpMzJcIjogSW50MzJBcnJheSwgLy8gSW50MzJBcnJheVxuICAgICAgICAgICAgICAgICBcImYzMlwiOiBGbG9hdDMyQXJyYXkgLy8gRmxvYXQzMkFycmF5XG4gICAgICAgICAgICAgICAgfTsgXG4gXG4vLyB0eXBlLXRvLXNoaWZ0IG1hcFxuY29uc3Qgc2hpZnRNYXAgPSB7XCJpMzJcIjogMiwgLy8gSW50MzJBcnJheVxuICAgICAgICAgICAgICAgICAgXCJmMzJcIjogMiAvLyBGbG9hdDMyQXJyYXlcbiAgICAgICAgICAgICAgICAgfTtcblxuLy8gdHlwZS10by1jb2x1bW5fY3JlYXRvciBtYXBcbmNvbnN0IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXAgPSB7XCJpMzJcIjogREcuQ29sdW1uLmZyb21JbnQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImYzMlwiOiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheX07XG4gXG5cbi8vIENMQVNTRVMgVEhBVCBBUkUgVVNFRCBCWSBDUFAtV1JBUFBFUlxuXG4vLyBzaW1wbGUgYXJndW1lbnQ6IGEgbnVtYmVyIFxuY2xhc3MgQXJne1xuXG4gICAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOyAgICAgICAgXG4gICAgfVxuXG4gICAgY29tcGxlbWVudEFyck9mUGFyYW1zKGFyck9mUGFyYW1zKSB7XG4gICAgICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZUeXBlcyhhcnJPZlR5cGVzKSB7XG4gICAgICAgIGFyck9mVHlwZXMucHVzaCgnbnVtYmVyJyk7ICAgICAgICBcbiAgICB9XG5cbiAgICBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBpc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpe1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlKSB7fVxuXG4gICAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlKSB7fVxuXG4gICAgZnJlZUJ1ZmZlcihtb2R1bGUpIHt9XG59XG5cbi8vIGNvbHVtbiBhcmd1bWVudFxuY2xhc3MgQXJnQ29sdW1uIGV4dGVuZHMgQXJnIHtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGEsIHRhcmdldFR5cGUsIHRvVXBkYXRlID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoZGF0YSk7XG4gICAgICAgIHRoaXMudHlwZSA9IHRhcmdldFR5cGU7XG4gICAgICAgIHRoaXMudG9VcGRhdGUgPSB0b1VwZGF0ZTtcbiAgICAgICAgdGhpcy5idWYgPSAwOyAgICBcbiAgICAgICAgdGhpcy5udW1PZlJvd3MgPSBkYXRhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZQYXJhbXMoYXJyT2ZQYXJhbXMpIHtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLmJ1Zik7XG4gICAgICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5udW1PZlJvd3MpO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlR5cGVzKGFyck9mVHlwZXMpIHtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTsgICAgICAgIFxuICAgIH1cblxuICAgIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICB0aGlzLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKHRoaXMubnVtT2ZSb3dzICogdHlwZU1hcFt0aGlzLnR5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICB9XG5cbiAgICBpc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpe1xuICAgICAgICByZXR1cm4gKHRoaXMuYnVmICE9IDApO1xuICAgIH1cblxuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGxldCBzaGlmdCA9IHNoaWZ0TWFwW3R5cGVdO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07ICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgYXJyYXkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IGNvbCA9IHRoaXMuZGF0YTtcblxuICAgICAgICAgICAgaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gJ2kzMicpKSBcbiAgICAgICAgICAgICAgIHx8ICgoY29sLnR5cGUgPT0gJ2RvdWJsZScpICYmICh0eXBlID09ICdmMzInKSkpXG4gICAgICAgICAgICAgIGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgYXJyYXkgPSBuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKTtcblxuICAgICAgICAgICAgaWYoYXJyYXkpIFxuICAgICAgICAgICAgICBoZWFwLnNldChhcnJheSwgdGhpcy5idWYgPj4gc2hpZnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlKSB7XG4gICAgICAgIGlmKHRoaXMudG9VcGRhdGUgJiYgdGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGxldCBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dO1xuICAgICAgICAgICAgbGV0IGJ1ZmZlciA9IHRoaXMuYnVmO1xuICAgICAgICAgICAgbGV0IGJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDtcbiAgICAgICAgICAgIGxldCBhcnJheSA9IHRoaXMuZGF0YS5nZXRSYXdEYXRhKCk7XG5cbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLm51bU9mUm93czsgaSsrKVxuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gaGVhcFtidWZmZXIgLyBieXRlcyArIGldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnJlZUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgIG1vZHVsZS5fZnJlZSh0aGlzLmJ1Zik7XG4gICAgICAgICAgIHRoaXMuYnVmID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG4vLyBuZXcgY29sdW1uIGFyZ3VtZW50OiBhIG5ldyBjb2x1bW4gaXMgY3JlYXRlZFxuY2xhc3MgQXJnTmV3Q29sdW1uIGV4dGVuZHMgQXJnQ29sdW1uIHtcbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXRUeXBlLCBudW1PZlJvd3MpIHtcbiAgICAgICAgc3VwZXIoW10sIHRhcmdldFR5cGUsIHRydWUpO1xuICAgICAgICB0aGlzLm51bU9mUm93cyA9IG51bU9mUm93cztcbiAgICB9XG5cbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlKSB7fVxuXG4gICAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlKSB7XG4gICAgICAgIGlmKHRoaXMudG9VcGRhdGUgJiYgdGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGxldCBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dO1xuICAgICAgICAgICAgbGV0IGJ1ZiA9IHRoaXMuYnVmO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgY29sdW1uQ3JlYXRvciA9IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXBbdHlwZV07ICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBhcnIgPSBuZXcgdHlwZU1hcFt0eXBlXSh0aGlzLm51bU9mUm93cyk7ICAgICAgICAgICAgXG5cbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgYXJyW2ldID0gaGVhcFtidWYgLyBhcnIuQllURVNfUEVSX0VMRU1FTlQgKyBpXTtcblxuICAgICAgICAgICAgdGhpcy5kYXRhID0gY29sdW1uQ3JlYXRvcignbmFtZScsIGFycik7XG5cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYXJyKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVGhpcyBtYWtlcyBtaXN0YWtlLCB3aGVuIHRoaXMubnVtT2ZSb3dzID0gNSAoVE9ETzogaW52ZXN0aWdhdGUgd2h5KVxuICAgICAgICAgICAgLy90aGlzLmRhdGEgPSBjb2x1bW5DcmVhdG9yKCduYW1lJywgbmV3IHR5cGVNYXBbdHlwZV0oaGVhcC5idWZmZXIsIHRoaXMuYnVmLCB0aGlzLm51bU9mUm93cykpO1xuXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuZGF0YS5nZXRSYXdEYXRhKCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBhbiBhcnJheSBvZiBjb2x1bW5zIGFyZ3VtZW50XG5jbGFzcyBBcmdDb2x1bW5zIGV4dGVuZHMgQXJnIHtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGEsIHRhcmdldFR5cGUsIHRvVXBkYXRlID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoZGF0YSk7XG4gICAgICAgIHRoaXMudHlwZSA9IHRhcmdldFR5cGU7XG4gICAgICAgIHRoaXMudG9VcGRhdGUgPSB0b1VwZGF0ZTtcbiAgICAgICAgdGhpcy5idWYgPSAwOyAgICBcbiAgICAgICAgdGhpcy5udW1PZkNvbHVtbnMgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgdGhpcy5udW1PZlJvd3MgPSBkYXRhWzBdLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZQYXJhbXMoYXJyT2ZQYXJhbXMpIHtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLmJ1Zik7XG4gICAgICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5udW1PZlJvd3MpO1xuICAgICAgICBhcnJPZlBhcmFtcy5wdXNoKHRoaXMubnVtT2ZDb2x1bW5zKTtcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZUeXBlcyhhcnJPZlR5cGVzKSB7XG4gICAgICAgIGFyck9mVHlwZXMucHVzaCgnbnVtYmVyJyk7XG4gICAgICAgIGFyck9mVHlwZXMucHVzaCgnbnVtYmVyJyk7XG4gICAgICAgIGFyck9mVHlwZXMucHVzaCgnbnVtYmVyJyk7ICAgICAgICBcbiAgICB9XG5cbiAgICBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgdGhpcy5idWYgPSBtb2R1bGUuX21hbGxvYyh0aGlzLm51bU9mUm93cyAqIHRoaXMubnVtT2ZDb2x1bW5zIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdHlwZU1hcFt0aGlzLnR5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICB9XG5cbiAgICBpc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpe1xuICAgICAgICByZXR1cm4gKHRoaXMuYnVmICE9IDApO1xuICAgIH1cblxuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGxldCBzaGlmdCA9IHNoaWZ0TWFwW3R5cGVdO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHB1dCBjb2x1bW5zIGRhdGEgdG8gYnVmZmVyXG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdGhpcy5udW1PZkNvbHVtbnM7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IGNvbCA9IHRoaXMuZGF0YVtpXTtcblxuICAgICAgICAgICAgICAgIGlmKCgoY29sLnR5cGUgPT0gJ2ludCcpICYmICh0eXBlID09ICdpMzInKSkgXG4gICAgICAgICAgICAgICAgICAgfHwgKChjb2wudHlwZSA9PSAnZG91YmxlJykgJiYgKHR5cGUgPT0gJ2YzMicpKSlcbiAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpO1xuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgZGF0YSBhcnJheVxuICAgICAgICAgICAgICAgIGlmKGFycmF5ICE9IG51bGwpIFxuICAgICAgICAgICAgICAgICAgICBoZWFwLnNldChhcnJheSwgKHRoaXMuYnVmICsgaSAqIHRoaXMubnVtT2ZSb3dzICogbnVtT2ZCeXRlcykgPj4gc2hpZnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgbnVtT2ZSb3dzID0gdGhpcy5udW1PZlJvd3M7XG4gICAgICAgICAgICBsZXQgbnVtT2ZDb2xzID0gdGhpcy5udW1PZkNvbHVtbnM7ICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBhcnIgPSBuZXcgdHlwZU1hcFt0eXBlXShoZWFwLmJ1ZmZlciwgdGhpcy5idWYsIG51bU9mUm93cyAqIG51bU9mQ29scyk7XG4gICAgICAgXG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgY29sRGF0YSA9IHRoaXMuZGF0YVtpXS5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgZm9yKGxldCBqID0gMDsgaiA8IG51bU9mUm93czsgaisrKVxuICAgICAgICAgICAgICAgICAgY29sRGF0YVtqXSA9IGFycltqICsgaSAqIG51bU9mUm93c107ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZyZWVCdWZmZXIobW9kdWxlKSB7XG4gICAgICAgIGlmKHRoaXMuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKSkge1xuICAgICAgICAgICBtb2R1bGUuX2ZyZWUodGhpcy5idWYpO1xuICAgICAgICAgICB0aGlzLmJ1ZiA9IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuLy8gYW4gYXJyYXkgb2YgbmV3IGNvbHVtbnM6IG5ldyBjb2x1bW5zIGFyZSBjcmVhdGVkXG5jbGFzcyBBcmdOZXdDb2x1bW5zIGV4dGVuZHMgQXJnQ29sdW1ucyB7XG5cbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXRUeXBlLCBudW1PZlJvd3MsIG51bU9mQ29sdW1ucykge1xuICAgICAgICBzdXBlcihbW11dLCB0YXJnZXRUeXBlLCB0cnVlKTsgIFxuICAgICAgICB0aGlzLmRhdGEgPSBbXTsgICAgICAgIFxuICAgICAgICB0aGlzLm51bU9mQ29sdW1ucyA9IG51bU9mQ29sdW1ucztcbiAgICAgICAgdGhpcy5udW1PZlJvd3MgPSBudW1PZlJvd3M7XG4gICAgfVxuXG4gICAgcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSkgeyB9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgbnVtT2ZSb3dzID0gdGhpcy5udW1PZlJvd3M7XG4gICAgICAgICAgICBsZXQgbnVtT2ZDb2xzID0gdGhpcy5udW1PZkNvbHVtbnM7XG4gICAgICAgICAgICBsZXQgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7ICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBjb2x1bW5DcmVhdG9yID0gdHlwZVRvQ29sdW1uQ3JlYXRvck1hcFt0eXBlXTtcbiAgICAgICAgICAgIGxldCBidWYgPSB0aGlzLmJ1ZjtcblxuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IG51bU9mQ29sczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyciA9IG5ldyB0eXBlTWFwW3R5cGVdKG51bU9mUm93cyk7XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgbnVtT2ZSb3dzOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIGFycltqXSA9IGhlYXBbYnVmIC8gbnVtT2ZCeXRlcyArIGogKyBpICogbnVtT2ZSb3dzXTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEucHVzaChjb2x1bW5DcmVhdG9yKChpICsgMSkudG9TdHJpbmcoKSwgYXJyKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNyZWF0ZSBjb2x1bW5zOiBoZXJlLCBtYXkgYmUgYSBwcm9ibGVtIHdoZW4gbnVtT2ZSb3dzID0gNSAgICAgICAgICAgIFxuICAgICAgICAgICAgLypmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLnB1c2goY29sdW1uQ3JlYXRvcigoaSArIDEpLnRvU3RyaW5nKCksIG5ldyB0eXBlTWFwW3R5cGVdKGhlYXAuYnVmZmVyLCBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWYgKyBpICogbnVtT2ZSb3dzICogbnVtT2ZCeXRlcywgbnVtT2ZSb3dzKSkpOyovXG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGEgd3JhcHBlciBmb3IgZXhwb3J0ZWQgQy9DKystZnVuY3Rpb24gY2FsbFxuZnVuY3Rpb24gY3BwRnVuY1dyYXBwZXIobW9kdWxlLCBjRnVuY05hbWUsIHJldHVyblR5cGUsIGFyZ3MpXG57XG4gICAgbGV0IHJlc3VsdDtcblxuICAgIC8vIGFsbG9jYXRlIG1lbW9yeSBmb3IgYnVmZmVyc1xuICAgIGZvcihsZXQgYXJnIG9mIGFyZ3MpICAgICAgICAgXG4gICAgICAgIGFyZy5hbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUpO1xuICAgIFxuICAgIGxldCBpc0Vub3VnaE9mTWVtb3J5QWxsb2NhdGVkID0gdHJ1ZTtcblxuICAgIC8vIGNoZWNrIG1lbW9yeSBhbGxvY2F0aW9uXG4gICAgZm9yKGxldCBhcmcgb2YgYXJncylcbiAgICAgICAgaXNFbm91Z2hPZk1lbW9yeUFsbG9jYXRlZCAmPSBhcmcuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKTsgIFxuICAgIFxuICAgIC8vIHJ1biBleHBvcnRlZCBmdW5jdGlvbiBpZiBlbm91Z2ggb2YgbWVtb3J5IGlzIGFsbG9jYXRlZFxuICAgIGlmKGlzRW5vdWdoT2ZNZW1vcnlBbGxvY2F0ZWQpIHtcblxuICAgICAgICBsZXQgcGFyYW1zID0gW107IC8vIGFyZ3VtZW50cyB0aGF0IGFyZSBwdXQgdG8gdGhlIGV4cG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIGxldCB0eXBlcyA9IFtdOyAvLyB0aGVpciB0eXBlc1xuXG4gICAgICAgIC8vIHByZXBhcmUgZGF0YSB0aGF0IGlzIHB1dCB0byBleHBvcnRlZCBmdW5jdGlvblxuICAgICAgICBmb3IobGV0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAgICAgICBhcmcuY29tcGxlbWVudEFyck9mUGFyYW1zKHBhcmFtcyk7XG4gICAgICAgICAgICBhcmcuY29tcGxlbWVudEFyck9mVHlwZXModHlwZXMpO1xuICAgICAgICAgICAgYXJnLnB1dERhdGFUb0J1ZmZlcihtb2R1bGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV4dGVuZGVkVHlwZU9mUmV0dXJuID0gKHJldHVyblR5cGUgPT0gJ251bScpID8gJ251bWJlcicgOiBudWxsOyAgIFxuICAgICAgICBcbiAgICAgICAgLy8gY2FsbCBleHBvcnRlZCBmdW5jdGlvblxuICAgICAgICBpZihleHRlbmRlZFR5cGVPZlJldHVybilcbiAgICAgICAgICAgIHJlc3VsdCA9IG1vZHVsZS5jY2FsbChjRnVuY05hbWUsIGV4dGVuZGVkVHlwZU9mUmV0dXJuLCB0eXBlcywgcGFyYW1zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmVzdWx0ID0gbW9kdWxlLmNjYWxsKGNGdW5jTmFtZSwgZXh0ZW5kZWRUeXBlT2ZSZXR1cm4sIHR5cGVzLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgLy8gdXBkYXRlIGFuZCBnZXQgZGF0YSBmcm9tIGJ1ZmZlcnMgaWYgcmVxdWlyZWRcbiAgICAgICAgZm9yKGxldCBhcmcgb2YgYXJncylcbiAgICAgICAgICAgIGFyZy5nZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpOyAgICAgICBcbiAgICB9XG5cbiAgICAvLyBjbGVhciBidWZmZXJzXG4gICAgZm9yKGxldCBhcmcgb2YgYXJncykgICAgICAgICBcbiAgICAgICAgYXJnLmZyZWVCdWZmZXIobW9kdWxlKTtcblxuICAgIGlmKHJlc3VsdCAhPSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiByZXN1bHQ7ICAgIFxufSAvLyBjcHBGdW5jV3JhcHBlclxuXG5cbi8vIEEgTEFZRVIgQkVUV0VFTiBKUyBBTkQgQ1BQLVdSQVBQRVJcblxuLy8gUGFyYW1ldGVycyBjcmVhdG9yXG5sZXQgUGFyYW0gPSB7XG4gICAgaW50Q29sdW1uIChjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcmdDb2x1bW4oY29sdW1uLCAnaTMyJyk7XG4gICAgfSxcbiAgICBcbiAgICBuZXdJbnRDb2x1bW4gKG51bU9mUm93cykge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ05ld0NvbHVtbignaTMyJywgbnVtT2ZSb3dzKTtcbiAgICB9LFxuXG4gICAgaW50Q29sdW1ucyhjb2x1bW5zKXtcbiAgICAgICAgcmV0dXJuIG5ldyBBcmdDb2x1bW5zKGNvbHVtbnMudG9MaXN0KCksICdpMzInKTtcbiAgICB9LFxuXG4gICAgbmV3SW50Q29sdW1ucyhudW1PZlJvd3MsIG51bU9mQ29sdW1ucykge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ05ld0NvbHVtbnMoJ2kzMicsIG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKTtcbiAgICB9LFxuXG4gICAgZmxvYXRDb2x1bW4gKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbihjb2x1bW4sICdmMzInKTtcbiAgICB9LFxuXG4gICAgbmV3RmxvYXRDb2x1bW4gKG51bU9mUm93cykge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ05ld0NvbHVtbignZjMyJywgbnVtT2ZSb3dzKTtcbiAgICB9LFxuXG4gICAgZmxvYXRDb2x1bW5zKGNvbHVtbnMpe1xuICAgICAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbnMoY29sdW1ucy50b0xpc3QoKSwgJ2YzMicpO1xuICAgIH0sXG5cbiAgICBuZXdGbG9hdENvbHVtbnMobnVtT2ZSb3dzLCBudW1PZkNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcmdOZXdDb2x1bW5zKCdmMzInLCBudW1PZlJvd3MsIG51bU9mQ29sdW1ucyk7XG4gICAgfSxcblxuICAgIGludChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcmcobnVtYmVyKTtcbiAgICB9LFxuXG4gICAgbnVtKG51bWJlcikge1xuICAgICAgICByZXR1cm4gbmV3IEFyZyhudW1iZXIpO1xuICAgIH1cbn07XG5cbi8vIFJldHVybiB2YWx1ZSBjcmVhdG9yXG5sZXQgUmV0dXJuID0ge1xuICAgIHRhYmxlRnJvbUNvbHVtbnMoYXJnQ29sdW1ucykge1xuICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGFyZ0NvbHVtbnMuZGF0YSk7XG4gICAgfSxcblxuICAgIG51bShudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9LFxuXG4gICAgaW50KG51bWJlcikge1xuICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH0sXG5cbiAgICBkb3VibGUobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfSxcblxuICAgIGNvbHVtbihhcmdDb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGFyZ0NvbHVtbi5kYXRhO1xuICAgIH1cbn07XG5cbi8vIFRoZSBtYWluIHRvb2wgdGhhdCBjb21iaW5lcyBhbGwgdG9nZXRoZXJcbmV4cG9ydCBmdW5jdGlvbiBjYWxsV2FzbShtb2R1bGUsIGZ1bmNOYW1lLCBpbnB1dHMpIHtcbiAgICAvLyBnZXQgc3BlY2lmaWNhdGlvbiBvZiBleHBvcnRlZCBDL0MrKy1mdW5jdGlvblxuICAgIGxldCBmdW5jU3BlY2lmaWNhdGlvbiA9IG1vZHVsZVtmdW5jTmFtZV07XG5cbiAgICAvLyBnZXQgYXJndW1uZXRzXG4gICAgbGV0IGFyZ3MgPSBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHM7IFxuXG4gICAgLy8gYXJyYXkgb2YgYXJndW1lbnRzIHRoYXQgZnVydGhlciBhcmUgdXNlZCBieSBjcHAtd3JhcHBlclxuICAgIGxldCBjcHBGdW5jSW5wdXQgPSBbXTtcblxuICAgIC8vIGNvbXBsZXRlIGFuIGlucHV0IGZvciBjcHBcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yKGxldCBrZXkgaW4gYXJncyl7XG4gICAgICAgIGxldCBhcmcgPSBhcmdzW2tleV07IFxuICAgICAgICBcbiAgICAgICAgLy8gc2tpcCBhdXhpbGlyeSBlbGVtZW50XG4gICAgICAgIGlmKGtleSA9PSAnX2NhbGxSZXN1bHQnKSAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBhbiBhcmd1bWVudFxuICAgICAgICBzd2l0Y2goYXJnLnR5cGUpe1xuICAgICAgICAgICAgY2FzZSAnZmxvYXRDb2x1bW5zJzpcbiAgICAgICAgICAgIGNhc2UgJ2ludCc6XG4gICAgICAgICAgICBjYXNlICdudW0nOlxuICAgICAgICAgICAgY2FzZSAnZmxvYXRDb2x1bW4nOlxuICAgICAgICAgICAgY2FzZSAnaW50Q29sdW1uJzpcbiAgICAgICAgICAgIGNhc2UgJ2ludENvbHVtbnMnOlxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKGlucHV0c1tpXSk7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV3RmxvYXRDb2x1bW5zJzpcbiAgICAgICAgICAgIGNhc2UgJ25ld0ludENvbHVtbnMnOlxuICAgICAgICAgICAgICAgIGxldCB2YWwxID0gYXJnc1sgYXJnWydudW1PZlJvd3MnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZSb3dzJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGxldCB2YWwyID0gYXJnc1sgYXJnWydudW1PZkNvbHVtbnMnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZDb2x1bW5zJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKHZhbDEsIHZhbDIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV3RmxvYXRDb2x1bW4nOlxuICAgICAgICAgICAgY2FzZSAnbmV3SW50Q29sdW1uJzpcbiAgICAgICAgICAgICAgICBsZXQgdmFsID0gYXJnc1sgYXJnWydudW1PZlJvd3MnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZSb3dzJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKHZhbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IC8vIHN3aXRjaFxuXG4gICAgICAgIGNwcEZ1bmNJbnB1dC5wdXNoKGFyZ3Nba2V5XS5kYXRhKTtcblxuICAgIH0gLy8gZm9yIGtleSAgICBcblxuICAgIC8vIENBTEwgRVhQT1JURUQgQ1BQLUZVTkNUSU9OXG4gICAgbGV0IGNhbGxSZXN1bHQgPSBjcHBGdW5jV3JhcHBlcihtb2R1bGUsIGZ1bmNOYW1lLCAnbnVtJywgY3BwRnVuY0lucHV0KTtcblxuICAgIC8vIHN0b3JlIHJlc3VsdCB0aGF0IGlzIHJldHVybmVkIGJ5IGV4cG9ydGVkIGNwcC1mdW5jdGlvblxuICAgIGFyZ3MuX2NhbGxSZXN1bHQgPSBQYXJhbS5udW0oY2FsbFJlc3VsdCk7XG5cbiAgICAvLyBjcmVhdGUgb3V0cHV0XG4gICAgbGV0IG91dHB1dCA9IGZ1bmNTcGVjaWZpY2F0aW9uLm91dHB1dDtcblxuICAgIC8vIGlmIGEgc2luZ2xlIG9iamVjdCBtdXN0IGJlIHJldHVybmVkXG4gICAgaWYob3V0cHV0Wyd0eXBlJ10gIT0gJ29iamVjdHMnKVxuICAgICAgcmV0dXJuIFJldHVybltvdXRwdXRbJ3R5cGUnXV0oYXJnc1tvdXRwdXRbJ3NvdXJjZSddXS5kYXRhKTtcblxuICAgIGxldCBhcnJheVRvUmV0dXJuID0gW107XG5cbiAgICAvLyBwdXNoIGRhdGEgb2YgdGhlIHJlcXVpcmVkIGFyZ3VtZW50c1xuICAgIGZvcihsZXQgbmFtZSBvZiBvdXRwdXRbJ3NvdXJjZSddKVxuICAgICAgYXJyYXlUb1JldHVybi5wdXNoKGFyZ3NbbmFtZV0uZGF0YS5kYXRhKTtcblxuICAgIHJldHVybiBhcnJheVRvUmV0dXJuO1xuICB9IC8vIGNhbGxXYXNtIiwiLy8gVXRpbGl0aWVzIGZvciBjYWxsaW5nIHdhc20tZnVuY3Rpb25zIHZpYSB3ZWJ3b3JrZXIuXG5cbi8vIFdlIHVzZSBhbiBhcHByb2FjaCB0aGF0IGlzIHdlbGwgZGVzY3JpYmVkIGhlcmU6XG4vLyBodHRwczovL2JlY29taW5naHVtYW4uYWkvcGFzc2luZy1hbmQtcmV0dXJuaW5nLXdlYmFzc2VtYmx5LWFycmF5LXBhcmFtZXRlcnMtYTBmNTcyYzY1ZDk3XG4vLyBJdCBoYXMgYmVlbiBtb2RpZmllZCBmb3IgdXNhZ2UgaW4gREFUQUdST0suXG5cbi8vIENvbnN0YW50cyBmb3Igd2FzbS1mdW5jdGlvbnMgaW4gd2Vid29ya2VycyBydW50aW1lIHN5c3RlbVxuY29uc3QgVFlQRSA9ICd0eXBlJztcbmNvbnN0IE5VTV9UWVBFID0gJ251bSc7XG5jb25zdCBGTE9BVF9DT0xVTU5fVFlQRSA9ICdmbG9hdENvbHVtbic7XG5jb25zdCBJTlRfQ09MVU1OX1RZUEUgPSAnaW50Q29sdW1uJztcbmNvbnN0IEZMT0FUX0NPTFVNTlNfVFlQRSA9ICdmbG9hdENvbHVtbnMnO1xuY29uc3QgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRSA9ICduZXdGbG9hdENvbHVtbnMnO1xuY29uc3QgSU5UX0NPTFVNTlNfVFlQRSA9ICdpbnRDb2x1bW5zJztcbmNvbnN0IE5FV19JTlRfQ09MVU1OU19UWVBFID0gJ25ld0ludENvbHVtbnMnO1xuY29uc3QgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFID0gJ25ld0Zsb2F0Q29sdW1uJztcbmNvbnN0IE5FV19JTlRfQ09MVU1OX1RZUEUgPSAnbmV3SW50Q29sdW1uJztcbmNvbnN0IENPTFVNTiA9ICdjb2x1bW4nO1xuY29uc3QgQ0FMTF9SRVNVTFQgPSAnX2NhbGxSZXN1bHQnO1xuY29uc3QgTlVNX09GX1JPV1MgPSAnbnVtT2ZSb3dzJztcbmNvbnN0IE5VTV9PRl9DT0xVTU5TID0gJ251bU9mQ29sdW1ucyc7XG5jb25zdCBSRUYgPSAncmVmJztcbmNvbnN0IFZBTFVFID0gJ3ZhbHVlJztcbmNvbnN0IFRBQkxFX09GX0NPTFVNTlMgPSAndGFibGVGcm9tQ29sdW1ucyc7XG5jb25zdCBPQkpFQ1RTID0gJ29iamVjdHMnO1xuY29uc3QgSU5UX1RZUEUgPSAnaW50JztcbmNvbnN0IERPVUJMRV9UWVBFID0gJ2RvdWJsZSc7XG5jb25zdCBOVU1CRVIgPSAnbnVtYmVyJztcblxuLy8gVHlwZS10by1oZWFwIGNvcnJlc3BvbmRlbmNlLlxuLy8gSXQgaXMgcmVxdWlyZWQgZm9yIEpTLW1vZHVsZSBnZW5lcmF0ZWQgYnkgRW1zY3JpcHRlbixcbi8vIGFuZCBpdCBpcyB1c2VkLCB3aGVuIHBhc3NpbmcgYXJyYXkgZGF0YSB0by9mcm9tIHdhc20tZnVuY3Rpb25zLlxuLy8gTW9yZSBpbmZvIGNhbiBiZSBmb3VuZCBhdCB0aGUgZm9sbG93aW5nIGxpbms6XG4vLyBodHRwczovL2JlY29taW5naHVtYW4uYWkvcGFzc2luZy1hbmQtcmV0dXJuaW5nLXdlYmFzc2VtYmx5LWFycmF5LXBhcmFtZXRlcnMtYTBmNTcyYzY1ZDk3XG5jb25zdCBoZWFwTWFwID0ge1xuICAgICAgICAgICAgICAgICAnaW50Q29sdW1uJzogXCJIRUFQMzJcIixcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1uJzogXCJIRUFQRjMyXCIsXG4gICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbnMnOiBcIkhFQVBGMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1ucyc6IFwiSEVBUEYzMlwiLFxuICAgICAgICAgICAgICAgICAnaW50Q29sdW1ucyc6IFwiSEVBUDMyXCIsXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogXCJIRUFQMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogXCJIRUFQRjMyXCIsXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiBcIkhFQVAzMlwiXG4gICAgICAgICAgICAgICAgfTtcblxuLy8gVHlwZSBzaWduYXR1cmUgdG8gdHlwZWQgYXJyYXkgbWFwLlxuLy8gSXQgaXMgdXNlZCwgd2hlbiBtYW5pcHVsYXRpbmcgY29sdW1uKHMpLlxuY29uc3QgdHlwZU1hcCA9IHtcbiAgICAgICAgICAgICAgICAgJ2ludENvbHVtbic6IEludDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbic6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1ucyc6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1ucyc6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ2ludENvbHVtbnMnOiBJbnQzMkFycmF5LCAgXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogSW50MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogSW50MzJBcnJheVxuICAgICAgICAgICAgICAgIH07IFxuXG4vLyBUeXBlLXRvLXNoaWZ0IG1hcC5cbi8vIEl0IGlzIHVzZWQsIHdoZW4gcGFzc2luZyBhcnJheSB0by9mcm9tIHdhc20tZnVuY3Rpb25zLlxuLy8gTW9yZSBpbmZvIGNhbiBiZSBmb3VuZCBhdCB0aGUgZm9sbG93aW5nIGxpbms6XG4vLyBodHRwczovL2JlY29taW5naHVtYW4uYWkvcGFzc2luZy1hbmQtcmV0dXJuaW5nLXdlYmFzc2VtYmx5LWFycmF5LXBhcmFtZXRlcnMtYTBmNTcyYzY1ZDk3IFxuY29uc3Qgc2hpZnRNYXAgPSB7J2ludENvbHVtbic6IDIsIFxuICAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1uJzogMiwgXG4gICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW5zJzogMiwgIFxuICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1ucyc6IDIsIFxuICAgICAgICAgICAgICAgICAgJ2ludENvbHVtbnMnOiAyLCAgXG4gICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1ucyc6IDIsXG4gICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiAyLFxuICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbic6IDJcbiAgICAgICAgICAgICAgICAgfTsgICAgICAgICBcblxuLy8gR2V0IGlucHV0IGZvciBDKystZnVuY3Rpb24uXG4vLyBUaGlzIGZ1bmN0aW9uIHRha2VzIHNwZWNpZmljYXRpb24gb2YgYXJndW1lbnRzIChhcmdzU3BlY2lmaWNhdGlvbikgJiBpbnB1dCBkYXRhIChpbnB1dFZhbHMpXG4vLyBhbmQgcmV0dXJucyBpbnB1dCB0aGF0IHdpbGwgYmUgZnVydGhlciB1c2VkIGluIGNwcC93YXNtLWZ1bmN0aW9uLlxuZXhwb3J0IGZ1bmN0aW9uIGdldENwcElucHV0KGFyZ3NTcGVjaWZpY2F0aW9uLCBpbnB1dFZhbHMpIHtcbiAgICBsZXQgY3BwRnVuY0lucHV0ID0gW107XG4gICAgbGV0IHJlZjtcblxuICAgIC8vIGNvbXBsZXRlIGFuIGlucHV0IGZvciBjcHBcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yKGNvbnN0IGtleSBpbiBhcmdzU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBjb25zdCBhcmcgPSBhcmdzU3BlY2lmaWNhdGlvbltrZXldOyBcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuICAgICAgICBcbiAgICAgICAgLy8gc2tpcCBhdXhpbGlyeSBlbGVtZW50XG4gICAgICAgIGlmKGtleSA9PT0gQ0FMTF9SRVNVTFQpICAgICAgICAgICAgIFxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgLy8gaGVyZSwgd2UgY29uc2lkZXIgZWFjaCB0eXBlIG9mIGlucHV0XG4gICAgICAgIHN3aXRjaCh0eXBlKSB7ICAgICAgICAgICBcbiBcbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSBpbnB1dFZhbHNbaV07XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcblxuICAgICAgICAgICAgICAgIGxldCBhcnJheTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgT0sgaWYgdHlwZSBvZiBjb2x1bW4gYW5kIHRhcmdldCB0eXBlIGNvaW5zaWRlXG4gICAgICAgICAgICAgICAgLy9hcnJheSA9IGlucHV0VmFsc1tpXS5nZXRSYXdEYXRhKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgY29sID0gaW5wdXRWYWxzW2ldO1xuXG4gICAgICAgICAgICAgICAgLy8gaGVyZSwgd2UgY2hlY2sgdHlwZXMgYW5kIHBlcmZvcm0gYW4gYXBwcm9wcmlhdGUgdHJhbnNmb3JtXG4gICAgICAgICAgICAgICAgaWYoICggKGNvbC50eXBlID09PSBJTlRfVFlQRSkgJiYgKHR5cGUgPT09IElOVF9DT0xVTU5fVFlQRSkgKSBcbiAgICAgICAgICAgICAgICAgICB8fCAoIChjb2wudHlwZSA9PT0gRE9VQkxFX1RZUEUpICYmICh0eXBlID09PSBGTE9BVF9DT0xVTU5fVFlQRSkgKSApXG4gICAgICAgICAgICAgICAgICAgICBhcnJheSA9IGNvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKTtcblxuICAgICAgICAgICAgICAgIC8qaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gSU5UX0NPTFVNTl9UWVBFKSkgXG4gICAgICAgICAgICAgICAgICAgICB8fCAoKGNvbC50eXBlID09ICdkb3VibGUnKSAmJiAodHlwZSA9PSBGTE9BVF9DT0xVTU5fVFlQRSkpKVxuICAgICAgICAgICAgICAgICAgICAgICBhcnJheSA9IGNvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpOyovXG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayB0eXBlc1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geyAnYXJyYXknOiBhcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ251bU9mUm93cyc6IGFycmF5Lmxlbmd0aH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbiBcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGxldCB2YWwgPSAwOyAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIHJlZiA9IGFyZ1tOVU1fT0ZfUk9XU11bUkVGXTtcblxuICAgICAgICAgICAgICAgIGlmIChhcmdzU3BlY2lmaWNhdGlvbltyZWZdLnR5cGUgPT09IE5VTV9UWVBFKVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGFbYXJnW05VTV9PRl9ST1dTXVtWQUxVRV1dOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IHsnbnVtT2ZSb3dzJzogdmFsfTtcblxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1ucyBvciBjb2x1bW5fbGlzdFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGxldCBhcnJheXMgPSBbXTsgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIE9LIGlmIHR5cGUgb2YgY29sdW1ucyBhbmQgdGFyZ2V0IHR5cGUgY29pbnNpZGVcbiAgICAgICAgICAgICAgICAvL2ZvcihsZXQgY29sIG9mIGlucHV0VmFsc1tpXS50b0xpc3QoKSlcbiAgICAgICAgICAgICAgICAvLyAgYXJyYXlzLnB1c2goY29sLmdldFJhd0RhdGEoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBoZXJlLCB3ZSBjaGVjayB0eXBlcyBhbmQgcGVyZm9ybSBhbiBhcHByb3ByaWF0ZSB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICBmb3IobGV0IGNvbCBvZiBpbnB1dFZhbHNbaV0udG9MaXN0KCkpXG4gICAgICAgICAgICAgICAgICBpZiggKCAoY29sLnR5cGUgPT09IElOVF9UWVBFKSAmJiAodHlwZSA9PT0gSU5UX0NPTFVNTl9UWVBFKSApIFxuICAgICAgICAgICAgICAgICAgICB8fCAoIChjb2wudHlwZSA9PT0gRE9VQkxFX1RZUEUpICYmICh0eXBlID09PSBGTE9BVF9DT0xVTU5fVFlQRSkgKSApXG4gICAgICAgICAgICAgICAgICAgIGFycmF5cy5wdXNoKGNvbC5nZXRSYXdEYXRhKCkpO1xuICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLypmb3IobGV0IGNvbCBvZiBpbnB1dFZhbHNbaV0udG9MaXN0KCkpXG4gICAgICAgICAgICAgICAgICAgIGlmKCgoY29sLnR5cGUgPT0gJ2ludCcpICYmICh0eXBlID09IElOVF9DT0xVTU5fVFlQRSkpIFxuICAgICAgICAgICAgICAgICAgICAgIHx8ICgoY29sLnR5cGUgPT0gJ2RvdWJsZScpICYmICh0eXBlID09IEZMT0FUX0NPTFVNTl9UWVBFKSkpXG4gICAgICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2goY29sLmdldFJhd0RhdGEoKSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKSk7Ki9cblxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geyAnYXJyYXlzJzogYXJyYXlzLFxuICAgICAgICAgICAgICAgICAgICAnbnVtT2ZSb3dzJzogYXJyYXlzWzBdLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgJ251bU9mQ29sdW1ucyc6IGFycmF5cy5sZW5ndGh9O1xuXG4gICAgICAgICAgICAgICAgaSsrOyAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5zIG9yIG5ldyBjb2x1bW5fbGlzdFxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBsZXQgdmFsMSA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IHZhbDIgPSAwO1xuXG4gICAgICAgICAgICAgICAgcmVmID0gYXJnW05VTV9PRl9ST1dTXVtSRUZdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0udHlwZSA9PT0gTlVNX1RZUEUpXG4gICAgICAgICAgICAgICAgICAgIHZhbDEgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwxID0gYXJnc1NwZWNpZmljYXRpb25bcmVmXS5kYXRhW2FyZ1tOVU1fT0ZfUk9XU11bVkFMVUVdXTtcblxuICAgICAgICAgICAgICAgIHJlZiA9IGFyZ1tOVU1fT0ZfQ09MVU1OU11bUkVGXTtcblxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ1JlZjonKTtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHJlZik7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0udHlwZSA9PT0gTlVNX1RZUEUpXG4gICAgICAgICAgICAgICAgICAgIHZhbDIgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwyID0gYXJnc1NwZWNpZmljYXRpb25bcmVmXS5kYXRhW2FyZ1tOVU1fT0ZfQ09MVU1OU11bVkFMVUVdXTsgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IHsnbnVtT2ZSb3dzJzogdmFsMSxcbiAgICAgICAgICAgICAgICAgICdudW1PZkNvbHVtbnMnOiB2YWwyfTtcblxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICBcblxuICAgICAgICAgICAgZGVmYXVsdDogXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBUT0RPOiBzcGVjaWZ5IGJlaGF2aW91ciAgICAgICAgICAgXG4gICAgICAgICAgICB9IC8vIHN3aXRjaCAgICAgICAgXG5cbiAgICAgICAgY3BwRnVuY0lucHV0LnB1c2goYXJnKTtcbiAgICB9IC8vIGZvciBrZXlcblxuICAgIC8vY29uc29sZS5sb2coJ2NwcEZ1bmNJbnB1dDonKTtcbiAgICAvL2NvbnNvbGUubG9nKGNwcEZ1bmNJbnB1dCk7XG5cbiAgICByZXR1cm4gY3BwRnVuY0lucHV0O1xufSAvLyBnZXRDcHBJbnB1dFxuXG4vLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIGJ1ZmZlcnMgZm9yIGFycmF5IGRhdGFcbmZ1bmN0aW9uIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSwgaW5wdXRzKSB7XG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHsgXG4gICAgICAgIGNvbnN0IHR5cGUgPSBhcmcudHlwZTtcblxuICAgICAgICBzd2l0Y2godHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOiBcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4gJiBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuZGF0YS5idWYgPSBtb2R1bGUuX21hbGxvYyhhcmcuZGF0YS5udW1PZlJvd3MgKiB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1ucyAmIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6ICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOiAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTogLy8gYWxsb2NhdGlvbiBtZW1vcnkgZm9yIGNvbHVtbnMgdGhhdCBhcmUgY3JlYXRlZFxuICAgICAgICAgICAgICAgIGFyZy5kYXRhLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKGFyZy5kYXRhLm51bU9mUm93cyAqIGFyZy5kYXRhLm51bU9mQ29sdW1ucyBcbiAgICAgICAgICAgICAgICAgICAgKiB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7IFxuICAgICAgICB9ICBcbiAgICB9XG4gICAgXG4gICAgLy9jb25zb2xlLmxvZygnaW5wdXRzIGFmdGVyIG1lbW9yeSBhbGxvY2F0aW9uOicpO1xuICAgIC8vY29uc29sZS5sb2coaW5wdXRzKTtcbn0gLy8gYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXJcblxuLy8gR2V0IGFycmF5IG9mIHZhbHVlcyB0aGF0IGFyZSBwdXQgdG8gd2FzbS1mdW5jdGlvbi5cbmZ1bmN0aW9uIGdldEFyck9mV2FzbVBhcmFtcyhpbnB1dHMpIHtcbiAgICBsZXQgcGFyYW1zID0gW107XG5cbiAgICAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSB7XG4gICAgICAgIHN3aXRjaCAoYXJnLnR5cGUpIHtcblxuICAgICAgICAgICAgLy8gbnVtYmVyc1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTogICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1uICYgbmV3IGNvbHVtblxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEuYnVmKTsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEubnVtT2ZSb3dzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1ucyAmIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6IFxuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhLmJ1Zik7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEubnVtT2ZSb3dzKTtcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5udW1PZkNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbn0gLy8gZ2V0QXJyT2ZXYXNtUGFyYW1zXG5cbi8vIEdldCBhcnJheSBvZiB0eXBlcyB0aGF0IGFyZSBwdXQgdG8gd2FzbS1mdW5jdGlvbi5cbmZ1bmN0aW9uIGdldEFyck9mV2FzbVR5cGVzKGlucHV0cykge1xuICAgIGxldCB0eXBlcyA9IFtdO1xuXG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgc3dpdGNoIChhcmcudHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4gJiBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1ucyAmIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzO1xufSAvLyBnZXRBcnJPZldhc21UeXBlc1xuXG4vLyBQdXQgYXJyYXkgZGF0YSB0byBidWZmZXJcbmZ1bmN0aW9uIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUsIGlucHV0cykge1xuICAgIGxldCBzaGlmdDtcbiAgICBsZXQgaGVhcDsgICAgXG4gICAgXG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICAgICAgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTsgIFxuICAgICAgICAgICAgICAgIGhlYXAuc2V0KGFyZy5kYXRhLmFycmF5LCBhcmcuZGF0YS5idWYgPj4gc2hpZnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBzaGlmdCA9IHNoaWZ0TWFwW3R5cGVdO1xuICAgICAgICAgICAgICAgIGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICAgICAgbGV0IG51bU9mQnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICAgICAgICAgIGxldCBidWYgPSBhcmcuZGF0YS5idWY7XG4gICAgICAgICAgICAgICAgbGV0IG51bU9mQ29sdW1ucyA9IGFyZy5kYXRhLm51bU9mQ29sdW1ucztcbiAgICAgICAgICAgICAgICBsZXQgbnVtT2ZSb3dzID0gYXJnLmRhdGEubnVtT2ZSb3dzO1xuICAgICAgICAgICAgICAgIGxldCBhcnJheXMgPSBhcmcuZGF0YS5hcnJheXM7XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2x1bW5zOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIGhlYXAuc2V0KGFycmF5c1tpXSwgKGJ1ZiArIGkgKiBudW1PZlJvd3MgKiBudW1PZkJ5dGVzKSA+PiBzaGlmdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uKHMpXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn0gLy8gcHV0RGF0YVRvQnVmZmVyXG5cbi8vIEdldCBhcnJheSBkYXRhIGZyb20gYnVmZmVyLlxuZnVuY3Rpb24gZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlLCBpbnB1dHMpIHtcblxuICAgIGxldCBoZWFwO1xuICAgIGxldCBudW1PZlJvd3M7XG4gICAgbGV0IG51bU9mQ29scztcbiAgICBsZXQgbnVtT2ZCeXRlczsgICAgXG4gICAgbGV0IGJ1ZjtcblxuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBhcmcudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHsgLy8gUHJvY2VzcyBlYWNoIHR5cGUgb2YgaW5wdXRcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbihzKVxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6ICBcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTogICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICAgICAgbnVtT2ZSb3dzID0gYXJnLmRhdGEubnVtT2ZSb3dzO1xuICAgICAgICAgICAgICAgIG51bU9mQnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UOyAgICBcbiAgICAgICAgICAgICAgICBidWYgPSBhcmcuZGF0YS5idWY7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IHR5cGVNYXBbdHlwZV0obnVtT2ZSb3dzKTtcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBudW1PZlJvd3M7IGorKylcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbal0gPSBoZWFwW2J1ZiAvIG51bU9mQnl0ZXMgKyBqXTtcblxuICAgICAgICAgICAgICAgIGFyZy5hcnJheSA9IGFycmF5O1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOiBcbiAgICAgICAgICAgICAgICBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dO1xuICAgICAgICAgICAgICAgIG51bU9mUm93cyA9IGFyZy5kYXRhLm51bU9mUm93cztcbiAgICAgICAgICAgICAgICBudW1PZkNvbHMgPSBhcmcuZGF0YS5udW1PZkNvbHVtbnM7XG4gICAgICAgICAgICAgICAgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7ICAgIFxuICAgICAgICAgICAgICAgIGJ1ZiA9IGFyZy5kYXRhLmJ1ZjtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXlzID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gbmV3IHR5cGVNYXBbdHlwZV0obnVtT2ZSb3dzKTtcblxuICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBudW1PZlJvd3M7IGorKylcbiAgICAgICAgICAgICAgICAgICAgICBhcnJbal0gPSBoZWFwW2J1ZiAvIG51bU9mQnl0ZXMgKyBqICsgaSAqIG51bU9mUm93c107ICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2goYXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhcmcuYXJyYXlzID0gYXJyYXlzO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfSAgICAgICAgICAgIFxufSAvLyBnZXREYXRhRnJvbUJ1ZmZlclxuXG4vLyBDbGVhciBtZW1vcnkgYWxsb2NhdGVkIGZvciBhcnJheSBkYXRhXG5mdW5jdGlvbiBjbGVhck1lbW9yeUZvckJ1ZmZlcihtb2R1bGUsIGlucHV0cykge1xuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSBcbiAgICAgICAgc3dpdGNoKGFyZy50eXBlKSB7IC8vIHByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlclxuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBlYWNoIG5vbi1udW1iZXIgY2FzZVxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIG1vZHVsZS5fZnJlZShhcmcuZGF0YS5idWYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhazsgXG4gICAgICAgIH0gICAgXG59IC8vIGNsZWFyTWVtb3J5Rm9yQnVmZmVyXG5cbi8vIEV4dHJhY3QgbmV3bHkgY3JlYXRlZCBkYXRhOiBuZXcgY29sdW1uKHMpIGFyZSBjcmVhdGVkXG5mdW5jdGlvbiBleHRyYWN0TmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbkFyZ3MsIGFyZ3NBZnRlcldhc21DYWxsKSB7XG4gICAgLy8gdHlwZS10by1jb2x1bW5fY3JlYXRvciBtYXBcbiAgICBjb25zdCB0eXBlVG9Db2x1bW5DcmVhdG9yTWFwID0geyduZXdGbG9hdENvbHVtbnMnOiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogREcuQ29sdW1uLmZyb21JbnQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogREcuQ29sdW1uLmZyb21JbnQzMkFycmF5fTtcblxuICAgIGxldCBpID0gMDtcblxuICAgIGZvcihjb25zdCBrZXkgaW4gZnVuY1NwZWNpZmljYXRpb25BcmdzKSBcbiAgICB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGZ1bmNTcGVjaWZpY2F0aW9uQXJnc1trZXldO1xuXG4gICAgICAgIHN3aXRjaChhcmcudHlwZSl7IC8vIFByb2Nlc3MgZWFjaCB0eXBlXG5cbiAgICAgICAgICAgIC8vIG51bWJlclxuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4ocylcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBsZXQgbmFtZTtcblxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZnkgbmFtZSBmb3IgY29sdW1uXG4gICAgICAgICAgICAgICAgaWYoYXJnLm5hbWUgPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBuYW1lID0gKDApLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgZWxzZSBcbiAgICAgICAgICAgICAgICAgICAgbmFtZXMgPSBhcmcubmFtZTtcblxuICAgICAgICAgICAgICAgIGFyZy5jb2x1bW4gPSB0eXBlVG9Db2x1bW5DcmVhdG9yTWFwW2FyZy50eXBlXShuYW1lLFxuICAgICAgICAgICAgICAgICAgICBhcmdzQWZ0ZXJXYXNtQ2FsbFtpXS5hcnJheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gW107XG4gICAgICAgICAgICAgICAgbGV0IGxlbmd0aCA9IGFyZ3NBZnRlcldhc21DYWxsW2ldLmFycmF5cy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICBsZXQgbmFtZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZnkgbmFtZSBmb3IgY29sdW1uXG4gICAgICAgICAgICAgICAgaWYoYXJnLm5hbWVzID09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBrID0gMTsgayA8PSBsZW5ndGg7IGsrKylcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLnB1c2goKGspLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIGVsc2UgbmFtZXMgPSBhcmcubmFtZXM7XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCh0eXBlVG9Db2x1bW5DcmVhdG9yTWFwW2FyZy50eXBlXShuYW1lc1tqXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NBZnRlcldhc21DYWxsW2ldLmFycmF5c1tqXSkpO1xuXG4gICAgICAgICAgICAgICAgYXJnLmNvbHVtbnMgPSBjb2x1bW5zO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGkrKztcbiAgICB9XG59IC8vIGV4dHJhY3ROZXdseUNyZWF0ZWREYXRhXG5cbi8vIEdldCBvdXRwdXQgZGF0YTogb3ZlcmFsbCBvdXRwdXQgaXMgY3JlYXRlZFxuZnVuY3Rpb24gZ2V0T3V0cHV0KGZ1bmNTcGVjaWZpY2F0aW9uKSB7ICBcbiAgICBsZXQgb3V0cHV0ID0gZnVuY1NwZWNpZmljYXRpb24ub3V0cHV0O1xuICAgIFxuICAgIGNvbnN0IHR5cGVUb0RhdGFGaWVsZE1hcCA9IHsnbmV3RmxvYXRDb2x1bW5zJzogJ2NvbHVtbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1ucyc6ICdjb2x1bW5zJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogJ2NvbHVtbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiAnY29sdW1uJ307XG5cbiAgICBzd2l0Y2gob3V0cHV0LnR5cGUpIHtcblxuICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tvdXRwdXQuc291cmNlXTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ09MVU1OOlxuICAgICAgICAgICAgcmV0dXJuIGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tvdXRwdXQuc291cmNlXS5jb2x1bW47XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFRBQkxFX09GX0NPTFVNTlM6XG4gICAgICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tvdXRwdXQuc291cmNlXS5jb2x1bW5zKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgT0JKRUNUUzpcbiAgICAgICAgICAgIGxldCBhcnJheVRvUmV0dXJuID0gW107XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHB1c2ggZGF0YSBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnRzXG4gICAgICAgICAgICBmb3IobGV0IG5hbWUgb2Ygb3V0cHV0LnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGxldCBhcmcgPSBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHNbbmFtZV07XG4gICAgICAgICAgICAgICAgYXJyYXlUb1JldHVybi5wdXNoKGFyZ1t0eXBlVG9EYXRhRmllbGRNYXBbYXJnLnR5cGVdXSk7XG4gICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlUb1JldHVybjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbn0gLy8gZ2V0T3V0cHV0XG5cbi8vIENsZWFyIG5ld2x5IGNyZWF0ZWQgZGF0YSBmaWVsZHMgKG5ldyBjb2x1bW4ocykpXG5mdW5jdGlvbiBjbGVhck5ld2x5Q3JlYXRlZERhdGEoZnVuY1NwZWNpZmljYXRpb25BcmdzKSB7IFxuICAgIGZvcihjb25zdCBrZXkgaW4gZnVuY1NwZWNpZmljYXRpb25BcmdzKSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGZ1bmNTcGVjaWZpY2F0aW9uQXJnc1trZXldO1xuXG4gICAgICAgIHN3aXRjaCAoYXJnLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTogICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuY29sdW1uID0gbnVsbDsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgYXJnLmNvbHVtbnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufSAvLyBjbGVhck5ld2x5Q3JlYXRlZERhdGFcblxuLy8gVEhFIE1BSU4gRlVOQ1RJT046IGEgd3JhcHBlciBmb3IgQysrLWZ1bmN0aW9uIGNhbGxcbmV4cG9ydCBmdW5jdGlvbiBjcHBXcmFwcGVyKG1vZHVsZSwgYXJncywgY3BwRnVuY05hbWUsIHJldHVyblR5cGUpIHtcbiAgICAvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFycmF5cyB0aGF0IGFyZSBwYXNzZWQgdG8gQysrLWZ1bmN0aW9uXG4gICAgYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXIobW9kdWxlLCBhcmdzKTtcblxuICAgIC8vIHB1dCBkYXRhIChqdXN0IGNvbHVtbihzKSkgdG8gYWxsb2NhdGVkIGJ1ZmZlcnNcbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlLCBhcmdzKTtcblxuICAgIC8vIGNyZWF0ZSBhcnJheSBvZiBwYXJhbWV0ZXJzIHRoYXQgYXJlIHBhc3NlZCB0byBDKystZnVuY3Rpb25cbiAgICBsZXQgcGFyYW1zID0gZ2V0QXJyT2ZXYXNtUGFyYW1zKGFyZ3MpO1xuXG4gICAgLy9jb25zb2xlLmxvZygncGFyYW1zOicpO1xuICAgIC8vY29uc29sZS5sb2cocGFyYW1zKTtcblxuICAgIC8vIGNyZWF0ZSBhcnJheSBvZiBwYXJhbWV0ZXJzJyB0eXBlcyB0aGF0IGFyZSBwYXNzZWQgdG8gQysrLWZ1bmN0aW9uXG4gICAgbGV0IHR5cGVzID0gZ2V0QXJyT2ZXYXNtVHlwZXMoYXJncyk7XG4gICAgXG4gICAgLy9jb25zb2xlLmxvZygndHlwZXM6Jyk7XG4gICAgLy9jb25zb2xlLmxvZyh0eXBlcyk7XG5cbiAgICAvLyBjYWxsIHdhc20tZnVuY3Rpb25cbiAgICBsZXQgcmVzdWx0ID0gbW9kdWxlLmNjYWxsKGNwcEZ1bmNOYW1lLCByZXR1cm5UeXBlLCB0eXBlcywgcGFyYW1zKTtcbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKHJlc3VsdCk7XG5cbiAgICAvLyBnZXQgZGF0YSBmcm9tIGJ1ZmZlcnMgKGp1c3QgY29sdW1uKHMpKVxuICAgIGdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSwgYXJncyk7ICAgICAgICBcblxuICAgIC8vIGNsZWFyIG1lbW9yeSB0aGF0IHdhcyBwcmV2aW91c2VseSBhbGxvY2F0ZWRcbiAgICBjbGVhck1lbW9yeUZvckJ1ZmZlcihtb2R1bGUsIGFyZ3MpO1xuXG4gICAgLy9jb25zb2xlLmxvZygnZG9uZScpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0IHRoZSByZXF1aXJlZCBvdXRwdXQuXG4vLyBJdCB0YWtlcyBhIHNwZWNpZmljYXRpb24gb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgZGF0YSBjb21wdXRlZFxuLy8gYW5kIGV4dHJhY3RzIHRoZSByZXF1aXJlZCByZXN1bHRzLlxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3VsdChmdW5jU3BlY2lmaWNhdGlvbiwgZGF0YUZyb21XZWJXb3JrZXIpIHtcbiAgICBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHMuX2NhbGxSZXN1bHQgPSBkYXRhRnJvbVdlYldvcmtlci5jYWxsUmVzdWx0OyAgXG5cbiAgICBleHRyYWN0TmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHMsIGRhdGFGcm9tV2ViV29ya2VyLmFyZ3MpOyAgICBcblxuICAgIGxldCBvdXRQdXQgPSBnZXRPdXRwdXQoZnVuY1NwZWNpZmljYXRpb24pO1xuXG4gICAgLy8gQmVsb3csIHdlIHJlbW92ZSBuZXdseSBjcmVhdGVkIGNvbHVtbihzKSwgd2hpY2ggYXJlIGNyZWF0ZWQgYXQgdGhlIGV4dHJhY3Rpb24tc3RlcC5cbiAgICAvLyBJdCBpcyBlc3BlY2lhbGx5IHJlcXVpcmVkLCB3aGVuIG11bHRpcGxlIGNhbGwgb2Ygd2FzbS1mdW5jdGlvbnMgaW4gd2Vid29ya2VyLlxuICAgIGNsZWFyTmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIG91dFB1dDtcbn0iLCIvLyBJbnB1dHMgY29ycmVjdG5lc3MgY2hlY2sgdG9vbHNcbi8vTGltaXRhdGlvbiBjb25zdGFudHNcbmNvbnN0IENPTVBfTUlOID0gMTtcbmNvbnN0IFNBTVBMRVNfQ09VTlRfTUlOID0gMTtcbmNvbnN0IEZFQVRVUkVTX0NPVU5UX01JTiA9IDE7XG5jb25zdCBQRVJDRU5UQUdFX01JTiA9IDA7XG5jb25zdCBQRVJDRU5UQUdFX01BWCA9IDEwMDtcbmNvbnN0IE1BWF9FTEVNRU5UU19DT1VOVCA9IDEwMDAwMDAwMDtcbi8vIEVycm9yIG1lc3NhZ2VzXG5jb25zdCBDT01QX1BPU0lUVkVfTUVTID0gJ2NvbXBvbmVudHMgbXVzdCBiZSBwb3NpdGl2ZS4nO1xuY29uc3QgQ09NUF9FWENFU1MgPSAnY29tcG9uZW50cyBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gZmVhdXR1cmVzIGNvdW50Lic7XG5jb25zdCBJTkNPUkVSUkVDVF9NSU5fTUFYX01FUyA9ICdtaW4gbXVzdCBiZSBsZXNzIHRoYW4gbWF4Lic7XG5jb25zdCBJTkNPUkVSUkVDVF9GRUFUVVJFU19NRVMgPSAnZmVhdHVyZXMgbXVzdCBiZSBwb3NpdGl2ZS4nO1xuY29uc3QgSU5DT1JFUlJFQ1RfU0FNUExFU19NRVMgPSAnc2FtcGxlcyBtdXN0IGJlIHBvc2l0aXZlLic7XG5jb25zdCBJTkNPUkVSUkVDVF9QRVJDRU5UQUdFX01FUyA9ICd2aW9sYXRvcnMgcGVyY2VudGFnZSBtdXN0IGJlIGZyb20gdGhlIHJhbmdlIGZyb20gMCB0byAxMDAuJztcbmNvbnN0IERBVEFGUkFNRV9JU19UT09fQklHX01FUyA9ICdkYXRhZnJhbWUgaXMgdG9vIGJpZy4nO1xuLy8gQ2hlY2sgY29tcG9uZW50cyBjb3VudCAoUENBLCBQTFMpXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDb21wb25lbmV0cyhmZWF0dXJlcywgY29tcG9uZW50cykge1xuICAgIGlmIChjb21wb25lbnRzIDwgQ09NUF9NSU4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihDT01QX1BPU0lUVkVfTUVTKTtcbiAgICBpZiAoY29tcG9uZW50cyA+IGZlYXR1cmVzLmxlbmd0aClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKENPTVBfRVhDRVNTKTtcbiAgICBpZiAoZmVhdHVyZXMubGVuZ3RoICogZmVhdHVyZXMuYnlJbmRleCgwKS5sZW5ndGggPiBNQVhfRUxFTUVOVFNfQ09VTlQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihEQVRBRlJBTUVfSVNfVE9PX0JJR19NRVMpO1xufVxuLy8gQ2hlY2sgaW5wdXRzIG9mIGRhdGEgZm9yIFNWTSB0ZXN0aW5nIGdlbmVyYXRvclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzKHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgICBpZiAobWluID49IG1heClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SRVJSRUNUX01JTl9NQVhfTUVTKTtcbiAgICBpZiAoZmVhdHVyZXNDb3VudCA8IEZFQVRVUkVTX0NPVU5UX01JTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SRVJSRUNUX0ZFQVRVUkVTX01FUyk7XG4gICAgaWYgKHNhbXBsZXNDb3VudCA8IFNBTVBMRVNfQ09VTlRfTUlOKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfU0FNUExFU19NRVMpO1xuICAgIGlmICgodmlvbGF0b3JzUGVyY2VudGFnZSA8IFBFUkNFTlRBR0VfTUlOKSB8fCAodmlvbGF0b3JzUGVyY2VudGFnZSA+IFBFUkNFTlRBR0VfTUFYKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SRVJSRUNUX1BFUkNFTlRBR0VfTUVTKTtcbn1cbiIsIi8vIEV4cGxvcmF0b3J5IGRhdGEgYW5hbHlzaXMgKEVEQSkgdG9vbHNcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgX3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzSW5XZWJXb3JrZXIsIF9wYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uSW5XZWJXb3JrZXIgfSBmcm9tICcuLi93YXNtL0VEQUFQSSc7XG5pbXBvcnQgeyBjaGVja0NvbXBvbmVuZXRzIH0gZnJvbSAnLi91dGlscyc7XG4vLyBQcmluY2lwYWwgY29tcG9uZW50cyBhbmFseXNpcyAoUENBKVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVQQ0EodGFibGUsIGZlYXR1cmVzLCBjb21wb25lbnRzLCBjZW50ZXIsIHNjYWxlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY2hlY2tDb21wb25lbmV0cyhmZWF0dXJlcywgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGNlbnRlck51bSA9IGNlbnRlciA/IDEgOiAwO1xuICAgICAgICBjb25zdCBzY2FsZU51bSA9IHNjYWxlID8gMSA6IDA7XG4gICAgICAgIGxldCBfb3V0cHV0O1xuICAgICAgICBsZXQgX3Byb21pc2UgPSBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlcih0YWJsZSwgZmVhdHVyZXMsIGNvbXBvbmVudHMsIGNlbnRlck51bSwgc2NhbGVOdW0pO1xuICAgICAgICB5aWVsZCBfcHJvbWlzZS50aGVuKF9yZXN1bHQgPT4geyBfb3V0cHV0ID0gX3Jlc3VsdDsgfSwgX2Vycm9yID0+IHsgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogJHtfZXJyb3J9YCk7IH0pO1xuICAgICAgICByZXR1cm4gX291dHB1dDtcbiAgICB9KTtcbn1cbi8vIFBhcnRpYWwgbGVhc3Qgc3F1YXJlIHJlZ3Jlc3Npb24gKFBMUylcbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlUExTKHRhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50cykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNoZWNrQ29tcG9uZW5ldHMoZmVhdHVyZXMsIGNvbXBvbmVudHMpO1xuICAgICAgICBsZXQgX291dHB1dDtcbiAgICAgICAgbGV0IF9wcm9taXNlID0gX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25JbldlYldvcmtlcih0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHMpO1xuICAgICAgICB5aWVsZCBfcHJvbWlzZS50aGVuKF9yZXN1bHQgPT4geyBfb3V0cHV0ID0gX3Jlc3VsdDsgfSwgX2Vycm9yID0+IHsgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogJHtfZXJyb3J9YCk7IH0pO1xuICAgICAgICByZXR1cm4gX291dHB1dDtcbiAgICB9KTtcbn1cbiIsIi8vIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseS5cbi8vIEphdmFTY3JpcHQgQVBJIGZvciBjYWxsIHdhc20tZnVuY3Rpb25zIGZyb20gdGhlIG1vZHVsZSBFREFcblxuLy8gSW1wb3J0cyBmb3IgY2FsbCB3YXNtIHJ1bnRpbWUtc3lzdGVtOiBpbiB0aGUgbWFpbiBzdHJlYW0gYW5kIGluIHdlYndvcmtlcnNcbmltcG9ydCB7Y2FsbFdhc219IGZyb20gJy4uL3dhc20vY2FsbFdhc20nO1xuaW1wb3J0IHtnZXRDcHBJbnB1dCwgZ2V0UmVzdWx0fSBmcm9tICcuLi93YXNtL2NhbGxXYXNtRm9yV2ViV29ya2VyJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9pbml0RURBQVBJKCkge1xuICBhd2FpdCBpbml0RURBKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXModGFibGUsIGNvbHVtbnMsIGNvbXBvbmVudHNDb3VudCwgY2VudGVyTnVtLCBzY2FsZU51bSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAncHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXMnLCBbY29sdW1ucywgY29tcG9uZW50c0NvdW50LCBjZW50ZXJOdW0sIHNjYWxlTnVtXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlcih0YWJsZSwgY29sdW1ucywgY29tcG9uZW50c0NvdW50LCBjZW50ZXJOdW0sIHNjYWxlTnVtKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNXb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydwcmluY2lwYWxDb21wb25lbnRBbmFseXNpcyddLmFyZ3VtZW50cyxbY29sdW1ucywgY29tcG9uZW50c0NvdW50LCBjZW50ZXJOdW0sIHNjYWxlTnVtXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfZXJyb3IoZGYsIGNvbDEsIGNvbDIpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ2Vycm9yJywgW2NvbDEsIGNvbDJdKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9lcnJvckluV2ViV29ya2VyKGRmLCBjb2wxLCBjb2wyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvZXJyb3JXb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydlcnJvciddLmFyZ3VtZW50cyxbY29sMSwgY29sMl0pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWydlcnJvciddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb24odGFibGUsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzQ291bnQpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb24nLCBbZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHNDb3VudF0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25JbldlYldvcmtlcih0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHNDb3VudCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25Xb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydwYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uJ10uYXJndW1lbnRzLFtmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50c0NvdW50XSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb24nXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9nZW5lcmF0ZURhdGFzZXQoa2VybmVsLCBrZXJuZWxQYXJhbXMsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ2dlbmVyYXRlRGF0YXNldCcsIFtrZXJuZWwsIGtlcm5lbFBhcmFtcywgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZV0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyKGtlcm5lbCwga2VybmVsUGFyYW1zLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvZ2VuZXJhdGVEYXRhc2V0V29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsnZ2VuZXJhdGVEYXRhc2V0J10uYXJndW1lbnRzLFtrZXJuZWwsIGtlcm5lbFBhcmFtcywgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZV0pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWydnZW5lcmF0ZURhdGFzZXQnXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9ub3JtYWxpemVEYXRhc2V0KGRhdGEpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ25vcm1hbGl6ZURhdGFzZXQnLCBbZGF0YV0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX25vcm1hbGl6ZURhdGFzZXRJbldlYldvcmtlcihkYXRhKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvbm9ybWFsaXplRGF0YXNldFdvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ25vcm1hbGl6ZURhdGFzZXQnXS5hcmd1bWVudHMsW2RhdGFdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsnbm9ybWFsaXplRGF0YXNldCddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX3RyYWluTFNTVk0oZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKSB7XG4gIHJldHVybiBjYWxsV2FzbShFREEsICd0cmFpbkxTU1ZNJywgW2dhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGRhdGFzZXQsIGxhYmVsc10pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3RyYWluTFNTVk1JbldlYldvcmtlcihnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBkYXRhc2V0LCBsYWJlbHMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy90cmFpbkxTU1ZNV29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsndHJhaW5MU1NWTSddLmFyZ3VtZW50cyxbZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgZGF0YXNldCwgbGFiZWxzXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3RyYWluTFNTVk0nXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9wcmVkaWN0QnlMU1NWTShrZXJuZWwsIGtlcm5lbFBhcmFtcywgbm9ybWFsaXplZERhdGEsIGxhYmVscywgbWVhbnMsIHN0ZERldnMsIG1vZGVsUGFyYW1zLCBwcmVjb21wdXRlZFdlaWdodHMsIHRhcmdldERhdGEpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3ByZWRpY3RCeUxTU1ZNJywgW2tlcm5lbCwga2VybmVsUGFyYW1zLCBub3JtYWxpemVkRGF0YSwgbGFiZWxzLCBtZWFucywgc3RkRGV2cywgbW9kZWxQYXJhbXMsIHByZWNvbXB1dGVkV2VpZ2h0cywgdGFyZ2V0RGF0YV0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3ByZWRpY3RCeUxTU1ZNSW5XZWJXb3JrZXIoa2VybmVsLCBrZXJuZWxQYXJhbXMsIG5vcm1hbGl6ZWREYXRhLCBsYWJlbHMsIG1lYW5zLCBzdGREZXZzLCBtb2RlbFBhcmFtcywgcHJlY29tcHV0ZWRXZWlnaHRzLCB0YXJnZXREYXRhKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvcHJlZGljdEJ5TFNTVk1Xb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydwcmVkaWN0QnlMU1NWTSddLmFyZ3VtZW50cyxba2VybmVsLCBrZXJuZWxQYXJhbXMsIG5vcm1hbGl6ZWREYXRhLCBsYWJlbHMsIG1lYW5zLCBzdGREZXZzLCBtb2RlbFBhcmFtcywgcHJlY29tcHV0ZWRXZWlnaHRzLCB0YXJnZXREYXRhXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3ByZWRpY3RCeUxTU1ZNJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfdHJhaW5BbmRBbmFseXplTFNTVk0oZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKSB7XG4gIHJldHVybiBjYWxsV2FzbShFREEsICd0cmFpbkFuZEFuYWx5emVMU1NWTScsIFtnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50LCBkYXRhc2V0LCBsYWJlbHNdKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyKGdhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQsIGRhdGFzZXQsIGxhYmVscykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL3RyYWluQW5kQW5hbHl6ZUxTU1ZNV29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsndHJhaW5BbmRBbmFseXplTFNTVk0nXS5hcmd1bWVudHMsW2dhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQsIGRhdGFzZXQsIGxhYmVsc10pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWyd0cmFpbkFuZEFuYWx5emVMU1NWTSddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG4iLCIvLyBDdXN0b20gVUkgZm9yIEV4cGxvcmF0b3J5IGRhdGEgYW5hbHlzaXMgKEVEQSkgdG9vbHNcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbi8vIFJlbmFtZSBQQ0EgY29sdW1uc1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZVBDQWNvbHVtbnMocGNhVGFibGUpIHtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBwY2FUYWJsZS5jb2x1bW5zLnRvTGlzdCgpKVxuICAgICAgICBjb2wubmFtZSA9ICdQQ0EnICsgY29sLm5hbWU7XG4gICAgcmV0dXJuIHBjYVRhYmxlO1xufVxuLy8gUHJlZGljdGVkIHZzIFJlZmVyZW5jZSBzY2F0dGVyIHBsb3RcbmV4cG9ydCBmdW5jdGlvbiBwcmVkaWN0ZWRWZXJzdXNSZWZlcmVuY2VTY2F0dGVyUGxvdChzYW1wbGVzTmFtZXMsIHJlZmVyZW5jZSwgcHJlZGljdGlvbikge1xuICAgIHByZWRpY3Rpb24ubmFtZSA9IHJlZmVyZW5jZS5uYW1lICsgJyhwcmVkaWN0ZWQpJztcbiAgICBsZXQgZGZSZWZlcmVuY2VQcmVkaWN0aW9uID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtzYW1wbGVzTmFtZXMsIHJlZmVyZW5jZSwgcHJlZGljdGlvbl0pO1xuICAgIGRmUmVmZXJlbmNlUHJlZGljdGlvbi5uYW1lID0gJ1JlZmVyZW5jZSB2cy4gUHJlZGljdGVkJztcbiAgICByZXR1cm4gREcuVmlld2VyLnNjYXR0ZXJQbG90KGRmUmVmZXJlbmNlUHJlZGljdGlvbiwgeyB0aXRsZTogZGZSZWZlcmVuY2VQcmVkaWN0aW9uLm5hbWUsXG4gICAgICAgIHg6IHJlZmVyZW5jZS5uYW1lLFxuICAgICAgICB5OiBwcmVkaWN0aW9uLm5hbWUsXG4gICAgICAgIHNob3dSZWdyZXNzaW9uTGluZTogdHJ1ZSxcbiAgICAgICAgbWFya2VyVHlwZTogJ2NpcmNsZScsXG4gICAgICAgIGxhYmVsczogc2FtcGxlc05hbWVzLm5hbWVcbiAgICB9KTtcbn1cbi8vIFJlZ3Jlc3Npb24gQ29lZmZpY2llbnRzIEJhciBDaGFydFxuZXhwb3J0IGZ1bmN0aW9uIHJlZ3Jlc3Npb25Db2VmZmljaWVudHNCYXJDaGFydChmZWF0dXJlcywgcmVncmVzc2lvbkNvZWZmcykge1xuICAgIHJlZ3Jlc3Npb25Db2VmZnMubmFtZSA9ICdyZWdyZXNzaW9uIGNvZWZmaWNpZW50JztcbiAgICBsZXQgbmFtZXNPZlByZWRpY3RvcnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBmZWF0dXJlcylcbiAgICAgICAgbmFtZXNPZlByZWRpY3RvcnMucHVzaChjb2wubmFtZSk7XG4gICAgbGV0IHByZWRpY3Rvck5hbWVzQ29sdW1uID0gREcuQ29sdW1uLmZyb21TdHJpbmdzKCdmZWF0dXJlJywgbmFtZXNPZlByZWRpY3RvcnMpO1xuICAgIGxldCBkZlJlZ3JDb2VmcyA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbcHJlZGljdG9yTmFtZXNDb2x1bW4sIHJlZ3Jlc3Npb25Db2VmZnNdKTtcbiAgICBkZlJlZ3JDb2Vmcy5uYW1lID0gJ1JlZ3Jlc3Npb24gQ29lZmZpY2llbnRzJztcbiAgICByZXR1cm4gREcuVmlld2VyLmJhckNoYXJ0KGRmUmVnckNvZWZzLCB7IHRpdGxlOiBkZlJlZ3JDb2Vmcy5uYW1lLCBzcGxpdDogJ2ZlYXR1cmUnLFxuICAgICAgICB2YWx1ZTogJ3JlZ3Jlc3Npb24gY29lZmZpY2llbnQnLCB2YWx1ZUFnZ3JUeXBlOiAnYXZnJyB9KTtcbn1cbi8vIFNjb3JlcyBTY2F0dGVyIFBsb3RcbmV4cG9ydCBmdW5jdGlvbiBzY29yZXNTY2F0dGVyUGxvdChzYW1wbGVzTmFtZXMsIHhTY29yZXMsIHlTY29yZXMpIHtcbiAgICBsZXQgc2NvcmVzQ29sdW1ucyA9IFtzYW1wbGVzTmFtZXNdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeFNjb3Jlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB4U2NvcmVzW2ldLm5hbWUgPSBgeC5zY29yZS50JHtpICsgMX1gO1xuICAgICAgICBzY29yZXNDb2x1bW5zLnB1c2goeFNjb3Jlc1tpXSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeVNjb3Jlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB5U2NvcmVzW2ldLm5hbWUgPSBgeS5zY29yZS51JHtpICsgMX1gO1xuICAgICAgICBzY29yZXNDb2x1bW5zLnB1c2goeVNjb3Jlc1tpXSk7XG4gICAgfVxuICAgIGxldCBzY29yZXMgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoc2NvcmVzQ29sdW1ucyk7XG4gICAgc2NvcmVzLm5hbWUgPSAnU2NvcmVzJztcbiAgICAvL2dyb2suc2hlbGwuYWRkVGFibGVWaWV3KHNjb3Jlcyk7XG4gICAgY29uc3QgaW5kZXggPSB4U2NvcmVzLmxlbmd0aCA+IDEgPyAxIDogMDtcbiAgICByZXR1cm4gREcuVmlld2VyLnNjYXR0ZXJQbG90KHNjb3JlcywgeyB0aXRsZTogc2NvcmVzLm5hbWUsXG4gICAgICAgIHg6IHhTY29yZXNbMF0ubmFtZSxcbiAgICAgICAgeTogeFNjb3Jlc1tpbmRleF0ubmFtZSxcbiAgICAgICAgbWFya2VyVHlwZTogJ2NpcmNsZScsXG4gICAgICAgIGxhYmVsczogc2FtcGxlc05hbWVzLm5hbWVcbiAgICB9KTtcbn1cbi8vIExvYWRpbmcgU2NhdHRlciBQbG90XG5leHBvcnQgZnVuY3Rpb24gbG9hZGluZ1NjYXR0ZXJQbG90KGZlYXR1cmVzLCB4TG9hZGluZ3MpIHtcbiAgICBsZXQgbG9hZGluZ0NvbHMgPSBbXTtcbiAgICBsZXQgbG9hZGluZ0xhYmVscyA9IFtdO1xuICAgIGZvciAobGV0IGNvbCBvZiBmZWF0dXJlcylcbiAgICAgICAgbG9hZGluZ0xhYmVscy5wdXNoKGNvbC5uYW1lKTtcbiAgICBsb2FkaW5nQ29scy5wdXNoKERHLkNvbHVtbi5mcm9tU3RyaW5ncygnbGFiZWxzJywgbG9hZGluZ0xhYmVscykpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeExvYWRpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHhMb2FkaW5nc1tpXS5uYW1lID0gYHgubG9hZGluZy5wJHtpICsgMX1gO1xuICAgICAgICBsb2FkaW5nQ29scy5wdXNoKHhMb2FkaW5nc1tpXSk7XG4gICAgfVxuICAgIGxldCBkZkxvYWRpbmdzID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGxvYWRpbmdDb2xzKTtcbiAgICBkZkxvYWRpbmdzLm5hbWUgPSAnTG9hZGluZ3MnO1xuICAgIHJldHVybiBERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGZMb2FkaW5ncywgeyB0aXRsZTogZGZMb2FkaW5ncy5uYW1lLFxuICAgICAgICB4OiB4TG9hZGluZ3NbMF0ubmFtZSxcbiAgICAgICAgeTogeExvYWRpbmdzW3hMb2FkaW5ncy5sZW5ndGggLSAxXS5uYW1lLFxuICAgICAgICBtYXJrZXJUeXBlOiAnY2lyY2xlJyxcbiAgICAgICAgbGFiZWxzOiAnbGFiZWxzJ1xuICAgIH0pO1xufVxuLy8gQWRkIFBMUyB2aXN1YWxpemF0aW9uXG5leHBvcnQgZnVuY3Rpb24gYWRkUExTdmlzdWFsaXphdGlvbih0YWJsZSwgc2FtcGxlc05hbWVzLCBmZWF0dXJlcywgcHJlZGljdCwgcGxzT3V0cHV0KSB7XG4gICAgbGV0IHZpZXcgPSBncm9rLnNoZWxsLmdldFRhYmxlVmlldyh0YWJsZS5uYW1lKTtcbiAgICAvLyAxLiBQcmVkaWN0ZWQgdnMgUmVmZXJlbmNlIHNjYXR0ZXIgcGxvdFxuICAgIHZpZXcuYWRkVmlld2VyKHByZWRpY3RlZFZlcnN1c1JlZmVyZW5jZVNjYXR0ZXJQbG90KHNhbXBsZXNOYW1lcywgcHJlZGljdCwgcGxzT3V0cHV0WzBdKSk7XG4gICAgLy8gMi4gUmVncmVzc2lvbiBDb2VmZmljaWVudHMgQmFyIENoYXJ0XG4gICAgdmlldy5hZGRWaWV3ZXIocmVncmVzc2lvbkNvZWZmaWNpZW50c0JhckNoYXJ0KGZlYXR1cmVzLCBwbHNPdXRwdXRbMV0pKTtcbiAgICAvLyAzLiBMb2FkaW5nIFNjYXR0ZXIgUGxvdFxuICAgIHZpZXcuYWRkVmlld2VyKGxvYWRpbmdTY2F0dGVyUGxvdChmZWF0dXJlcywgcGxzT3V0cHV0WzRdKSk7XG4gICAgLy8gNC4gU2NvcmVzIFNjYXR0ZXIgUGxvdFxuICAgIHZpZXcuYWRkVmlld2VyKHNjb3Jlc1NjYXR0ZXJQbG90KHNhbXBsZXNOYW1lcywgcGxzT3V0cHV0WzJdLCBwbHNPdXRwdXRbM10pKTtcbn1cbiIsIi8vIFRlc3QgZGF0YSBnZW5lcmF0aW9uIHRvb2xzXG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBjaGVja0dlbmVyYXRvclNWTWlucHV0cyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyIH0gZnJvbSAnLi4vd2FzbS9FREFBUEknO1xuY29uc3QgU1ZNX0dFTl9GRUFUVVJFU19JTkRFWCA9IDA7XG5jb25zdCBTVk1fR0VOX0xBQkVMU19JTkRFWCA9IDE7XG5jb25zdCBTVk1fRkVBVFVSRV9OQU1FID0gJ0ZlYXR1cmUgIyc7XG5jb25zdCBTVk1fTEFCRUxfTkFNRSA9ICdMYWJlbCc7XG4vLyBSZXR1cm5zIHRoZSBkYXRhZnJhbWUgXCJjYXJzXCJcbmV4cG9ydCBmdW5jdGlvbiBjYXJzRGF0YWZyYW1lKCkge1xuICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ21vZGVsJywgWydhbGZhcm9tZW8nLCAnYXVkaScsICdibXcnLCAnY2hldnJvbGV0JywgJ2RvZGdlMScsICdkb2RnZTInLCAnaG9uZGExJywgJ2hvbmRhMicsICdpc3V6dScsICdqYWd1YXInLCAnbWF6ZGEnLCAnbWVyY2VkZXMnLCAnbWVyY3VyeScsICdtaXRzdWJpc2hpJywgJ25pc3NhbjEnLCAnbmlzc2FuMicsICdwZXVnb3QnLCAncGx5bW91dGgnLCAncG9yc2NoZScsICdzYWFiJywgJ3N1YmFydScsICd0b3lvdGExJywgJ3RveW90YTInLCAndG95b3RhMycsICd0b3lvdGE0JywgJ3ZvbGtzd2FnZW4xJywgJ3ZvbGtzd2FnZW4yJywgJ3ZvbHZvMScsICd2b2x2bzInLCAndm9sdm8zJ10pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ2RpZXNlbCcsIG5ldyBJbnQzMkFycmF5KFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAwLCAxXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3R1cmJvJywgbmV3IEludDMyQXJyYXkoWzAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDFdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgndHdvLmRvb3JzJywgbmV3IEludDMyQXJyYXkoWzEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDBdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnaGF0Y2hiYWNrJywgbmV3IEludDMyQXJyYXkoWzEsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDBdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KCd3aGVlbC5iYXNlJywgbmV3IEZsb2F0MzJBcnJheShbOTQuNSwgMTA1LjgwMDAwMzA1MTc1NzgxLCAxMDEuMTk5OTk2OTQ4MjQyMTksIDk0LjUsIDkzLjY5OTk5Njk0ODI0MjE5LCA5My42OTk5OTY5NDgyNDIxOSwgOTMuNjk5OTk2OTQ4MjQyMTksIDk2LjUsIDk0LjMwMDAwMzA1MTc1NzgxLCAxMTMsIDkzLjA5OTk5ODQ3NDEyMTEsIDExNS41OTk5OTg0NzQxMjExLCAxMDIuNjk5OTk2OTQ4MjQyMTksIDkzLjY5OTk5Njk0ODI0MjE5LCA5NC41LCA5NC41LCA5My42OTk5OTY5NDgyNDIxOSwgMTE0LjE5OTk5Njk0ODI0MjE5LCA4OS41LCA5OS4wOTk5OTg0NzQxMjExLCA5Ny4xOTk5OTY5NDgyNDIxOSwgOTUuNjk5OTk2OTQ4MjQyMTksIDk1LjY5OTk5Njk0ODI0MjE5LCA5OC40MDAwMDE1MjU4Nzg5LCAxMDIuNDAwMDAxNTI1ODc4OSwgOTcuMzAwMDAzMDUxNzU3ODEsIDEwMC40MDAwMDE1MjU4Nzg5LCAxMDQuMzAwMDAzMDUxNzU3ODEsIDEwOS4wOTk5OTg0NzQxMjExLCAxMDkuMDk5OTk4NDc0MTIxMV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ2xlbmd0aCcsIG5ldyBGbG9hdDMyQXJyYXkoWzE3MS4xOTk5OTY5NDgyNDIyLCAxOTIuNjk5OTk2OTQ4MjQyMiwgMTc2LjgwMDAwMzA1MTc1NzgsIDE1OC44MDAwMDMwNTE3NTc4LCAxNTcuMzAwMDAzMDUxNzU3OCwgMTU3LjMwMDAwMzA1MTc1NzgsIDE1MCwgMTc1LjM5OTk5Mzg5NjQ4NDM4LCAxNzAuNjk5OTk2OTQ4MjQyMiwgMTk5LjYwMDAwNjEwMzUxNTYyLCAxNjYuODAwMDAzMDUxNzU3OCwgMjAyLjYwMDAwNjEwMzUxNTYyLCAxNzguMzk5OTkzODk2NDg0MzgsIDE1Ny4zMDAwMDMwNTE3NTc4LCAxNzAuMTk5OTk2OTQ4MjQyMiwgMTY1LjMwMDAwMzA1MTc1NzgsIDE1Ny4zMDAwMDMwNTE3NTc4LCAxOTguODk5OTkzODk2NDg0MzgsIDE2OC44OTk5OTM4OTY0ODQzOCwgMTg2LjYwMDAwNjEwMzUxNTYyLCAxNzIsIDE1OC42OTk5OTY5NDgyNDIyLCAxNjYuMzAwMDAzMDUxNzU3OCwgMTc2LjE5OTk5Njk0ODI0MjIsIDE3NS42MDAwMDYxMDM1MTU2MiwgMTcxLjY5OTk5Njk0ODI0MjIsIDE4MC4xOTk5OTY5NDgyNDIyLCAxODguODAwMDAzMDUxNzU3OCwgMTg4LjgwMDAwMzA1MTc1NzgsIDE4OC44MDAwMDMwNTE3NTc4XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSgnd2lkdGgnLCBuZXcgRmxvYXQzMkFycmF5KFs2NS41LCA3MS40MDAwMDE1MjU4Nzg5LCA2NC44MDAwMDMwNTE3NTc4MSwgNjMuNTk5OTk4NDc0MTIxMDk0LCA2My43OTk5OTkyMzcwNjA1NSwgNjMuNzk5OTk5MjM3MDYwNTUsIDY0LCA2NS4xOTk5OTY5NDgyNDIxOSwgNjEuNzk5OTk5MjM3MDYwNTUsIDY5LjU5OTk5ODQ3NDEyMTEsIDY0LjE5OTk5Njk0ODI0MjE5LCA3MS42OTk5OTY5NDgyNDIxOSwgNjgsIDY0LjQwMDAwMTUyNTg3ODksIDYzLjc5OTk5OTIzNzA2MDU1LCA2My43OTk5OTkyMzcwNjA1NSwgNjMuNzk5OTk5MjM3MDYwNTUsIDY4LjQwMDAwMTUyNTg3ODksIDY1LCA2Ni41LCA2NS40MDAwMDE1MjU4Nzg5LCA2My41OTk5OTg0NzQxMjEwOTQsIDY0LjQwMDAwMTUyNTg3ODksIDY1LjU5OTk5ODQ3NDEyMTEsIDY2LjUsIDY1LjUsIDY2LjkwMDAwMTUyNTg3ODksIDY3LjE5OTk5Njk0ODI0MjE5LCA2OC44MDAwMDMwNTE3NTc4MSwgNjguOTAwMDAxNTI1ODc4OV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ2hlaWdodCcsIG5ldyBGbG9hdDMyQXJyYXkoWzUyLjQwMDAwMTUyNTg3ODkwNiwgNTUuNzAwMDAwNzYyOTM5NDUsIDU0LjI5OTk5OTIzNzA2MDU1LCA1MiwgNTAuNzk5OTk5MjM3MDYwNTUsIDUwLjU5OTk5ODQ3NDEyMTA5NCwgNTIuNTk5OTk4NDc0MTIxMDk0LCA1NC4wOTk5OTg0NzQxMjEwOTQsIDUzLjUsIDUyLjc5OTk5OTIzNzA2MDU1LCA1NC4wOTk5OTg0NzQxMjEwOTQsIDU2LjI5OTk5OTIzNzA2MDU1LCA1NC43OTk5OTkyMzcwNjA1NSwgNTAuNzk5OTk5MjM3MDYwNTUsIDUzLjUsIDU0LjUsIDUwLjU5OTk5ODQ3NDEyMTA5NCwgNTguNzAwMDAwNzYyOTM5NDUsIDUxLjU5OTk5ODQ3NDEyMTA5NCwgNTYuMDk5OTk4NDc0MTIxMDk0LCA1Mi41LCA1NC41LCA1MywgNTIsIDU0LjkwMDAwMTUyNTg3ODkwNiwgNTUuNzAwMDAwNzYyOTM5NDUsIDU1LjA5OTk5ODQ3NDEyMTA5NCwgNTYuMjAwMDAwNzYyOTM5NDUsIDU1LjUsIDU1LjVdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnY3VyYi53ZWlnaHQnLCBuZXcgSW50MzJBcnJheShbMjgyMywgMjg0NCwgMjM5NSwgMTkwOSwgMjEyOCwgMTk2NywgMTk1NiwgMjMwNCwgMjMzNywgNDA2NiwgMTk1MCwgMzc3MCwgMjkxMCwgMTkxOCwgMjAyNCwgMTk1MSwgMTk2NywgMzQzMCwgMjgwMCwgMjY5NSwgMjE5MCwgMTk4NSwgMjI3NSwgMjU1MSwgMjQ4MCwgMjI2MSwgMjY2MSwgMjkxMiwgMzA0OSwgMzIxN10pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdlbmcuc2l6ZScsIG5ldyBJbnQzMkFycmF5KFsxNTIsIDEzNiwgMTA4LCA5MCwgOTgsIDkwLCA5MiwgMTEwLCAxMTEsIDI1OCwgOTEsIDE4MywgMTQwLCA5MiwgOTcsIDk3LCA5MCwgMTUyLCAxOTQsIDEyMSwgMTA4LCA5MiwgMTEwLCAxNDYsIDExMCwgOTcsIDEzNiwgMTQxLCAxNDEsIDE0NV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdob3JzZXBvd2VyJywgbmV3IEludDMyQXJyYXkoWzE1NCwgMTEwLCAxMDEsIDcwLCAxMDIsIDY4LCA3NiwgODYsIDc4LCAxNzYsIDY4LCAxMjMsIDE3NSwgNjgsIDY5LCA2OSwgNjgsIDk1LCAyMDcsIDExMCwgODIsIDYyLCA1NiwgMTE2LCA3MywgNTIsIDExMCwgMTE0LCAxNjAsIDEwNl0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdwZWFrLnJwbScsIG5ldyBJbnQzMkFycmF5KFs1MDAwLCA1NTAwLCA1ODAwLCA1NDAwLCA1NTAwLCA1NTAwLCA2MDAwLCA1ODAwLCA0ODAwLCA0NzUwLCA1MDAwLCA0MzUwLCA1MDAwLCA1NTAwLCA1MjAwLCA1MjAwLCA1NTAwLCA0MTUwLCA1OTAwLCA1MjUwLCA0NDAwLCA0ODAwLCA0NTAwLCA0ODAwLCA0NTAwLCA0ODAwLCA1NTAwLCA1NDAwLCA1MzAwLCA0ODAwXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3N5bWJvbCcsIG5ldyBJbnQzMkFycmF5KFsxLCAxLCAyLCAwLCAxLCAxLCAxLCAwLCAwLCAwLCAxLCAtMSwgMSwgMiwgMSwgMSwgMSwgMCwgMywgMiwgMCwgMSwgMCwgMiwgLTEsIDIsIDAsIC0yLCAtMSwgLTFdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnY2l0eS5tcGcnLCBuZXcgSW50MzJBcnJheShbMTksIDE5LCAyMywgMzgsIDI0LCAzMSwgMzAsIDI3LCAyNCwgMTUsIDMxLCAyMiwgMTksIDM3LCAzMSwgMzEsIDMxLCAyNSwgMTcsIDIxLCAyOCwgMzUsIDM0LCAyNCwgMzAsIDM3LCAxOSwgMjMsIDE5LCAyNl0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdoaWdod2F5Lm1wZycsIG5ldyBJbnQzMkFycmF5KFsyNiwgMjUsIDI5LCA0MywgMzAsIDM4LCAzNCwgMzMsIDI5LCAxOSwgMzgsIDI1LCAyNCwgNDEsIDM3LCAzNywgMzgsIDI1LCAyNSwgMjgsIDMzLCAzOSwgMzYsIDMwLCAzMywgNDYsIDI0LCAyOCwgMjUsIDI3XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3ByaWNlJywgbmV3IEludDMyQXJyYXkoWzE2NTAwLCAxNzcxMCwgMTY0MzAsIDY1NzUsIDc5NTcsIDYyMjksIDcxMjksIDg4NDUsIDY3ODUsIDM1NTUwLCA3Mzk1LCAzMTYwMCwgMTY1MDMsIDUzODksIDczNDksIDcyOTksIDYyMjksIDEzODYwLCAzNzAyOCwgMTIxNzAsIDc3NzUsIDUzNDgsIDc4OTgsIDk5ODksIDEwNjk4LCA3Nzc1LCAxMzI5NSwgMTI5NDAsIDE5MDQ1LCAyMjQ3MF0pKSxcbiAgICBdKTtcbn0gLy8gY2Fyc0RhdGFmcmFtZVxuLy8gR2VuZXJhdGUgZGF0YXNldCBmb3IgdGVzdGluZyBiaW5hcnkgY2xhc3NpZmllcnNcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uKGtlcm5lbCwga2VybmVsUGFyYW1zLCBuYW1lLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gY2hlY2sgaW5wdXRzXG4gICAgICAgIGNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzKHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpO1xuICAgICAgICAvLyBrZXJuZWwgcGFyYW1zIGNvbHVtblxuICAgICAgICBjb25zdCBrZXJuZWxQYXJhbXNDb2wgPSBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsICdrZXJuZWxQYXJhbXMnLCBrZXJuZWxQYXJhbXMpO1xuICAgICAgICAvLyBDQUxMIFdBU00tQ09NUFVUQVRJT05TICBcbiAgICAgICAgbGV0IF9vdXRwdXQ7XG4gICAgICAgIGxldCBfcHJvbWlzZSA9IF9nZW5lcmF0ZURhdGFzZXRJbldlYldvcmtlcihrZXJuZWwsIGtlcm5lbFBhcmFtc0NvbCwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgICAgIHlpZWxkIF9wcm9taXNlLnRoZW4oX3Jlc3VsdCA9PiB7IF9vdXRwdXQgPSBfcmVzdWx0OyB9LCBfZXJyb3IgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke19lcnJvcn1gKTsgfSk7XG4gICAgICAgIC8vIFJlbmFtZSBsYWJlbHMgY29sdW1uXG4gICAgICAgIF9vdXRwdXRbU1ZNX0dFTl9MQUJFTFNfSU5ERVhdLm5hbWUgPSBTVk1fTEFCRUxfTkFNRTtcbiAgICAgICAgLy8gUmVuYW1lIGZlYXR1cmUgY29sdW1uc1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBfb3V0cHV0W1NWTV9HRU5fRkVBVFVSRVNfSU5ERVhdKVxuICAgICAgICAgICAgY29sLm5hbWUgPSBTVk1fRkVBVFVSRV9OQU1FICsgY29sLm5hbWU7XG4gICAgICAgIC8vIENyZWF0ZSBkYXRhZnJhbWVcbiAgICAgICAgY29uc3QgZGYgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoX291dHB1dFtTVk1fR0VOX0ZFQVRVUkVTX0lOREVYXSk7XG4gICAgICAgIGRmLm5hbWUgPSBuYW1lO1xuICAgICAgICBkZi5jb2x1bW5zLmFkZChfb3V0cHV0W1NWTV9HRU5fTEFCRUxTX0lOREVYXSk7XG4gICAgICAgIHJldHVybiBkZjtcbiAgICB9KTtcbn0gLy8gdGVzdERhdGFGb3JNYWNoaW5lTGVhcm5pbmdcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuLyogU3VwcG9ydCB2ZWN0b3IgbWFjaGluZSAoU1ZNKSB0b29scy5cbiAgIEl0J3MgZGV2ZWxvcGVkIGZvciBhcHBseWluZyBpbiBjb21iaW5hdGlvbiB3aXRoIERBVEFHUk9LIHByZWRpY3RpdmUgdG9vbHMuXG5cbiAgIFRyYWluaW5nICYgcHJlZGljdGluZyBhcmUgcHJvdmlkZWQgYnkgd2FzbS1jb21wdXRhdGlvbnMuXG5cbiAgIExlYXN0IHNxdWFyZSBzdXBwb3J0IHZlY3RvciBtYWNoaW5lIChMUy1TVk0pIGlzIGltcGxlbWVudGVkOlxuICAgICBbMV0gU3V5a2VucywgSi4sIFZhbmRld2FsbGUsIEouIFwiTGVhc3QgU3F1YXJlcyBTdXBwb3J0IFZlY3RvciBNYWNoaW5lIENsYXNzaWZpZXJzXCIsXG4gICAgICAgICAgIE5ldXJhbCBQcm9jZXNzaW5nIExldHRlcnMgOSwgMjkzLTMwMCAoMTk5OSkuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDIzL0E6MTAxODYyODYwOTc0MlxuKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IF90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyLCBfcHJlZGljdEJ5TFNTVk1JbldlYldvcmtlciB9IGZyb20gJy4uL3dhc20vRURBQVBJJztcbi8vIDEuIENPTlNUQU5UU1xuLy8ga2VybmVsIHR5cGVzXG5leHBvcnQgY29uc3QgTElORUFSID0gMDtcbmV4cG9ydCBjb25zdCBQT0xZTk9NSUFMID0gMTtcbmV4cG9ydCBjb25zdCBSQkYgPSAyO1xuZXhwb3J0IGNvbnN0IFNJR01PSUQgPSAzO1xuLy8gb3V0cHV0LXJlbGF0ZWRcbmNvbnN0IENPTkZVU0lPTl9NQVRSX1NJWkUgPSA0O1xuY29uc3QgTk9STUFMSVpFRF9EQVRBX0lOREVYID0gMDtcbmNvbnN0IE1FQU5TX0lOREVYID0gMTtcbmNvbnN0IFNURF9ERVZTX0lOREVYID0gMjtcbmNvbnN0IE1PREVMX1BBUkFNU19JTkRFWCA9IDM7XG5jb25zdCBNT0RFTF9XRUlHSFRTX0lOREVYID0gNDtcbmNvbnN0IFBSRURJQ1RFRF9MQUJFTFNfSU5ERVggPSA1O1xuY29uc3QgQ09SUkVDVE5FU1NfSU5ERVggPSA2O1xuY29uc3QgQ09ORlVTSU9OX01BVFJJWF9JTkRFWCA9IDc7XG5jb25zdCBUUlVFX1BPU0lUSVZFX0lOREVYID0gMDtcbmNvbnN0IEZBTFNFX05FR0FUSVZFX0lOREVYID0gMTtcbmNvbnN0IEZBTFNFX1BPU0lUSVZFX0lOREVYID0gMjtcbmNvbnN0IFRSVUVfTkVHQVRJVkVfSU5ERVggPSAzO1xuLy8ga2VybmVsIHBhcmFtZXRlcnMgaW5kZWNlc1xuY29uc3QgUkJGX1NJR01BX0lOREVYID0gMDtcbmNvbnN0IFBPTFlOT01JQUxfQ19JTkRFWCA9IDA7XG5jb25zdCBQT0xZTk9NSUFMX0RfSU5ERVggPSAxO1xuY29uc3QgU0lHTU9JRF9LQVBQQV9JTkRFWCA9IDA7XG5jb25zdCBTSUdNT0lEX1RIRVRBX0lOREVYID0gMTtcbi8vIGh5cGVycGFyYW1ldGVycyBsaW1pdHNcbmNvbnN0IEdBTU1BX0lORklNVU1fTElNSVQgPSAwO1xuY29uc3QgUkJGX1NJR01BX0lORklNVU1fTElNSVQgPSAwO1xuY29uc3QgUE9MWU5PTUlBTF9DX0lORklNVU1fTElNSVQgPSAwO1xuY29uc3QgUE9MWU5PTUlBTF9EX0lORklNVU1fTElNSVQgPSAwO1xuLy8gZXJyb3IgbWVzc2FnZXNcbmNvbnN0IFdST05HX0dBTU1BX01FU1NBR0UgPSAnZ2FtbWEgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4nO1xuY29uc3QgV1JPTkdfUkJGX1NJR01BX01FU1NBR0UgPSAnc2lnbWEgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4nO1xuY29uc3QgV1JPTkdfUE9MWU5PTUlBTF9DX01FU1NBR0UgPSAnYyBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlLic7XG5jb25zdCBXUk9OR19QT0xZTk9NSUFMX0RfTUVTU0FHRSA9ICdkIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUuJztcbmNvbnN0IFdST05HX0tFUk5FTF9NRVNTQUdFID0gJ2luY29ycmVjdCBrZXJuZWwuJztcbi8vIG5hbWVzXG5jb25zdCBMQUJFTFMgPSAnTGFiZWxzJztcbmNvbnN0IFBSRURJQ1RFRCA9ICdwcmVkaWN0ZWQnO1xuY29uc3QgQ09SUkVDVE5FU1MgPSAnY29ycmVjdG5lc3MnO1xuY29uc3QgQ09ORlVTSU9OX01BVFJJWF9OQU1FID0gJ0NvbmZ1c2lvbiBtYXRyaXgnO1xuY29uc3QgTUVBTiA9ICdtZWFuJztcbmNvbnN0IFNURF9ERVYgPSAnc3RkIGRldic7XG5jb25zdCBNT0RFTF9QQVJBTVNfTkFNRSA9ICdhbHBoYSc7XG5jb25zdCBNT0RFTF9XRUlHSFRTX05BTUUgPSAnd2VpZ2h0JztcbmNvbnN0IEdBTU1BID0gJ2dhbW1hJztcbmNvbnN0IEtFUk5FTCA9ICdrZXJuZWwnO1xuY29uc3QgS0VSTkVMX1BBUkFNUyA9ICdrZXJuZWwgcGFyYW1zJztcbmNvbnN0IEtFUk5FTF9QQVJBTV8xID0gJ2tlcm5lbCBwYXJhbSAxJztcbmNvbnN0IEtFUk5FTF9QQVJBTV8yID0gJ2tlcm5lbCBwYXJhbSAyJztcbmNvbnN0IEZFQVRVUkVTX0NPVU5UX05BTUUgPSAnZmVhdHVyZXMgY291bnQnO1xuY29uc3QgVFJBSU5fU0FNUExFU19DT1VOVF9OQU1FID0gJ3RyYWluIHNhbXBsZXMgY291bnQnO1xuY29uc3QgVFJBSU5fRVJST1IgPSAnVHJhaW4gZXJyb3IsJSc7XG5jb25zdCBLRVJORUxfVFlQRV9UT19OQU1FX01BUCA9IFsnbGluZWFyJywgJ3BvbHlub21pYWwnLCAnUkJGJywgJ3NpZ21vaWQnXTtcbmNvbnN0IFBPU0lUSVZFX05BTUUgPSAncG9zaXRpdmUgKFApJztcbmNvbnN0IE5FR0FUSVZFX05BTUUgPSAnbmVnYXRpdmUgKE4pJztcbmNvbnN0IFBSRURJQ1RFRF9QT1NJVElWRV9OQU1FID0gJ3ByZWRpY3RlZCBwb3NpdGl2ZSAoUFApJztcbmNvbnN0IFBSRURJQ1RFRF9ORUdBVElWRV9OQU1FID0gJ3ByZWRpY3RlZCBuZWdhdGl2ZSAoUE4pJztcbmNvbnN0IFNFTlNJVElWSVRZID0gJ1NlbnNpdGl2aXR5JztcbmNvbnN0IFNQRUNJRklDSVRZID0gJ1NwZWNpZmljaXR5JztcbmNvbnN0IEJBTEFOQ0VEX0FDQ1VSQUNZID0gJ0JhbGFuY2VkIGFjY3VyYWN5JztcbmNvbnN0IFBPU0lUSVZFX1BSRURJQ1RJVkVfVkFMVUUgPSAnUG9zaXRpdmUgcHJlZGljaXR2ZSB2YWx1ZSc7XG5jb25zdCBORUdBVElWRV9QUkVESUNUSVZFX1ZBTFVFID0gJ05lZ2F0aXZlIHByZWRpY2l0dmUgdmFsdWUnO1xuY29uc3QgTUxfUkVQT1JUID0gJ01vZGVsIHJlcG9ydCc7XG5jb25zdCBNTF9SRVBPUlRfUFJFRElDVEVEX0xBQkVMUyA9ICdQcmVkaWN0ZWQgbGFiZWxzJztcbmNvbnN0IE1MX1JFUE9SVF9UUkFJTl9MQUJFTFMgPSAnVHJhaW4gbGFiZWxzJztcbmNvbnN0IE1MX1JFUE9SVF9DT1JSRUNUTkVTUyA9ICdQcmVkaWN0aW9uIGNvcnJlY3RuZXNzJztcbmNvbnN0IFBSRURJQ1RJT04gPSAncHJlZGljdGlvbic7XG4vLyBQYWNrL3VucGFjayBjb25zdGFudHNcbmNvbnN0IEJZVEVTID0gNDtcbmNvbnN0IElOVFNfQ09VTlQgPSAzO1xuY29uc3QgS0VSX1BBUkFNU19DT1VOVCA9IDI7XG5jb25zdCBNT0RFTF9LRVJORUxfSU5ERVggPSAwO1xuY29uc3QgU0FNUExFU19DT1VOVF9JTkRFWCA9IDE7XG5jb25zdCBGRUFUVVJFU19DT1VOVF9JTkRFWCA9IDI7XG4vLyBtaXNjXG5jb25zdCBJTklUX1ZBTFVFID0gMDsgLy8gYW55IG51bWJlciBjYW4gYmUgdXNlZFxuY29uc3QgTFNfU1ZNX0FERF9DT05TVCA9IDE7IC8vIHNlZSBbMV0gZm9yIG1vcmUgZGV0YWlsc1xuLy8gMi4gVE9PTFNcbi8vIENoZWNrIExTLVNWTSBsZWFybmluZyBoeXBlcnBhcmFtZXRlcnNcbmZ1bmN0aW9uIGNoZWNrSHlwZXJwYXJhbWV0ZXJzKGh5cGVycGFyYW1ldGVycykge1xuICAgIC8vIGNoZWNrIGdhbW1hXG4gICAgaWYgKGh5cGVycGFyYW1ldGVycy5nYW1tYSA8PSBHQU1NQV9JTkZJTVVNX0xJTUlUKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoV1JPTkdfR0FNTUFfTUVTU0FHRSk7XG4gICAgLy8gY2hlY2sga2VybmVsICYgaXRzIHBhcmFtZXRlcnNcbiAgICBzd2l0Y2ggKGh5cGVycGFyYW1ldGVycy5rZXJuZWwpIHtcbiAgICAgICAgY2FzZSBMSU5FQVI6IC8vIHRoZSBjYXNlIG9mIGxpbmVhciBrZXJuZWxcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBSQkY6IC8vIHRoZSBjYXNlIG9mIFJCRiBrZXJuZWxcbiAgICAgICAgICAgIGlmIChoeXBlcnBhcmFtZXRlcnMuc2lnbWEgPD0gUkJGX1NJR01BX0lORklNVU1fTElNSVQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX1JCRl9TSUdNQV9NRVNTQUdFKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBQT0xZTk9NSUFMOiAvLyB0aGUgY2FzZSBvZiBwb2x5bm9taWFsIGtlcm5lbFxuICAgICAgICAgICAgLy8gY2hlY2sgY1xuICAgICAgICAgICAgaWYgKGh5cGVycGFyYW1ldGVycy5jUGFyYW0gPD0gUE9MWU5PTUlBTF9DX0lORklNVU1fTElNSVQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX1BPTFlOT01JQUxfQ19NRVNTQUdFKTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGRcbiAgICAgICAgICAgIGlmIChoeXBlcnBhcmFtZXRlcnMuZFBhcmFtIDw9IFBPTFlOT01JQUxfRF9JTkZJTVVNX0xJTUlUKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihXUk9OR19QT0xZTk9NSUFMX0RfTUVTU0FHRSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgU0lHTU9JRDogLy8gdGhlIGNhc2Ugb2YgcG9seW5vbWlhbCBrZXJuZWxcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdDogLy8gaW5jb3JyZWN0IGtlcm5lbFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX0tFUk5FTF9NRVNTQUdFKTtcbiAgICB9IC8vIHN3aXRjaCAgICBcbn0gLy8gY2hlY2tIeXBlcnBhcmFtZXRlcnNcbi8vIFJldHVybmVzIGxhYmVscyBwcmVkaWN0ZWQgYnkgdGhlIG1vZGVsIHNwZWNpZmllZFxuZnVuY3Rpb24gcHJlZGljdChtb2RlbCwgZGF0YXNldCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCBfb3V0cHV0O1xuICAgICAgICBsZXQgX3Byb21pc2UgPSBfcHJlZGljdEJ5TFNTVk1JbldlYldvcmtlcihtb2RlbC5rZXJuZWxUeXBlLCBtb2RlbC5rZXJuZWxQYXJhbXMsIG1vZGVsLm5vcm1hbGl6ZWRUcmFpbkRhdGEuY29sdW1ucywgbW9kZWwudHJhaW5MYWJlbHMsIG1vZGVsLm1lYW5zLCBtb2RlbC5zdGREZXZzLCBtb2RlbC5tb2RlbFBhcmFtcywgbW9kZWwubW9kZWxXZWlnaHRzLCBkYXRhc2V0KTtcbiAgICAgICAgeWllbGQgX3Byb21pc2UudGhlbihfcmVzdWx0ID0+IHsgX291dHB1dCA9IF9yZXN1bHQ7IH0sIF9lcnJvciA9PiB7IHRocm93IG5ldyBFcnJvcihgRXJyb3I6ICR7X2Vycm9yfWApOyB9KTtcbiAgICAgICAgcmV0dXJuIF9vdXRwdXQ7XG4gICAgfSk7XG59IC8vIHByZWRpY3Rcbi8vIEV2YWx1YXRlIGFjY3VyYWN5IG9mIHRoZSBtb2RlbFxuZnVuY3Rpb24gZXZhbHVhdGVBY2N1cmFjeShtb2RlbCkge1xuICAgIGxldCBkYXRhID0gbW9kZWwuY29uZnVzaW9uTWF0cml4LmdldFJhd0RhdGEoKTtcbiAgICAvLyBoZXJlLCB0aGUgY2xhc3NpYyBub3RhdGlvbiBpcyB1c2VkIChzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2Vuc2l0aXZpdHlfYW5kX3NwZWNpZmljaXR5KVxuICAgIGxldCBUUCA9IGRhdGFbVFJVRV9QT1NJVElWRV9JTkRFWF07IC8vIHRydWUgcG9zaXRpdmVcbiAgICBsZXQgVE4gPSBkYXRhW1RSVUVfTkVHQVRJVkVfSU5ERVhdOyAvLyB0cnVlIG5lZ2F0aXZlXG4gICAgbGV0IEZQID0gZGF0YVtGQUxTRV9QT1NJVElWRV9JTkRFWF07IC8vIGZhbHNlIHBvc2l0aXZlXG4gICAgbGV0IEZOID0gZGF0YVtGQUxTRV9ORUdBVElWRV9JTkRFWF07IC8vIGZhbHNlIG5lZ2F0aXZlXG4gICAgbGV0IFAgPSBUUCArIEZOOyAvLyBwb3NpdGl2ZVxuICAgIGxldCBOID0gRlAgKyBUTjsgLy8gbmVnYXRpdmVcbiAgICBsZXQgVFBSID0gVFAgLyBQOyAvLyB0cnVlIHBvc2l0aXZlIHJhdGVcbiAgICBsZXQgVE5SID0gVE4gLyBOOyAvLyB0cnVlIG5lZ2F0aXZlIHJhdGVcbiAgICBsZXQgUFBWID0gVFAgLyAoVFAgKyBGUCk7IC8vIHBvc2l0aXZlIHByZWRpY2l0dmUgdmFsdWVcbiAgICBsZXQgTlBWID0gVE4gLyAoVE4gKyBGTik7IC8vIG5lZ2F0aXZlIHByZWRpY2l0dmUgdmFsdWVcbiAgICBsZXQgQUNDID0gKFRQICsgVE4pIC8gKFAgKyBOKTsgLy8gYWNjdXJhY3lcbiAgICBsZXQgQkEgPSAoVFBSICsgVE5SKSAvIDI7IC8vIGJhbGFuY2VkIGFjY3VyYWN5XG4gICAgbW9kZWwuc2Vuc2l0aXZpdHkgPSBUUFI7XG4gICAgbW9kZWwuc3BlY2lmaWNpdHkgPSBUTlI7XG4gICAgbW9kZWwuYmFsYW5jZWRBY2N1cmFjeSA9IEJBO1xuICAgIG1vZGVsLnBvc2l0aXZlUHJlZGljaXR2ZVZhbHVlID0gUFBWO1xuICAgIG1vZGVsLm5lZ2F0aXZlUHJlZGljaXR2ZVZhbHVlID0gTlBWO1xuICAgIG1vZGVsLnRyYWluRXJyb3IgPSAoMSAtIEFDQykgKiAxMDA7IC8vIHRyYWluIGVycm9yLCAlXG59IC8vIGV2YWx1YXRlQWNjdXJhY3lcbi8vIFJldHVybnMgdHJhaW5lZCBMUy1TVk0gbW9kZWwuXG5mdW5jdGlvbiB0cmFpbkFuZEFuYWx5emVNb2RlbChoeXBlcnBhcmFtZXRlcnMsIGRhdGFzZXQsIGxhYmVscykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIC8vIGNoZWNrIGNvcnJlY3RuZXNzIG9mIGh5cGVycGFyYW1ldGVyIGdhbW1hXG4gICAgICAgIGNoZWNrSHlwZXJwYXJhbWV0ZXJzKGh5cGVycGFyYW1ldGVycyk7XG4gICAgICAgIC8vIGNyZWF0ZSBkZWZhdWx0IGtlcm5lbCBwYXJhbXMgYXJyYXlcbiAgICAgICAgY29uc3Qga2VybmVsUGFyYW1zQXJyYXkgPSBbSU5JVF9WQUxVRSwgSU5JVF9WQUxVRV07XG4gICAgICAgIC8vIGZpbGwga2VybmVsUGFyYW1zXG4gICAgICAgIHN3aXRjaCAoaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCkge1xuICAgICAgICAgICAgY2FzZSBMSU5FQVI6IC8vIG5vIGtlcm5lbCBwYXJhbWV0ZXJzIGluIHRoZSBjYXNlIG9mIGxpbmVhciBrZXJuZWxcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUkJGOiAvLyBzaWdtYSBwYXJhbWV0ZXIgaW4gdGhlIGNhc2Ugb2YgUkJGLWtlcm5lbFxuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1JCRl9TSUdNQV9JTkRFWF0gPSBoeXBlcnBhcmFtZXRlcnMuc2lnbWE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBPTFlOT01JQUw6IC8vIHNpZ21hIHBhcmFtZXRlciBpbiB0aGUgY2FzZSBvZiBwb2x5bm9taWFsIGtlcm5lbFxuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1BPTFlOT01JQUxfQ19JTkRFWF0gPSBoeXBlcnBhcmFtZXRlcnMuY1BhcmFtO1xuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1BPTFlOT01JQUxfRF9JTkRFWF0gPSBoeXBlcnBhcmFtZXRlcnMuZFBhcmFtO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTSUdNT0lEOiAvLyBzaWdtYSBwYXJhbWV0ZXIgaW4gdGhlIGNhc2Ugb2Ygc2lnbW9pZCBrZXJuZWxcbiAgICAgICAgICAgICAgICBrZXJuZWxQYXJhbXNBcnJheVtTSUdNT0lEX0tBUFBBX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy5rYXBwYTtcbiAgICAgICAgICAgICAgICBrZXJuZWxQYXJhbXNBcnJheVtTSUdNT0lEX1RIRVRBX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy50aGV0YTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIGluY29ycmVjdCBrZXJuZWwgXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX0tFUk5FTF9NRVNTQUdFKTtcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgICAgIC8vIGNyZWF0ZSBrZXJuZWwgcGFyYW1zIGNvbHVtblxuICAgICAgICBsZXQga2VybmVsUGFyYW1zID0gREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBLRVJORUxfUEFSQU1TLCBrZXJuZWxQYXJhbXNBcnJheSk7XG4gICAgICAgIC8vIGNvbXB1dGUgc2l6ZSBvZiBtb2RlbCBwYXJhbXMgJiBwcmVjb21wdXRlZCB3ZWlndGhzXG4gICAgICAgIGxldCB0cmFpbkNvbHMgPSBkYXRhc2V0LnRvTGlzdCgpO1xuICAgICAgICBsZXQgbW9kZWxQYXJhbXNDb3VudCA9IHRyYWluQ29sc1swXS5sZW5ndGggKyBMU19TVk1fQUREX0NPTlNUO1xuICAgICAgICBsZXQgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQgPSB0cmFpbkNvbHMubGVuZ3RoICsgTFNfU1ZNX0FERF9DT05TVDtcbiAgICAgICAgbGV0IGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQgPSBDT05GVVNJT05fTUFUUl9TSVpFO1xuICAgICAgICAvLyBjYWxsIHdlYmFzc2VtYmx5IHRyYWluaW5nIGZ1bmN0aW9uXG4gICAgICAgIGxldCBvdXRwdXQ7XG4gICAgICAgIGxldCBfcHJvbWlzZSA9IF90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyKGh5cGVycGFyYW1ldGVycy5nYW1tYSwgaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKTtcbiAgICAgICAgeWllbGQgX3Byb21pc2UudGhlbihfcmVzdWx0ID0+IHsgb3V0cHV0ID0gX3Jlc3VsdDsgfSwgX2Vycm9yID0+IHsgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogJHtfZXJyb3J9YCk7IH0pO1xuICAgICAgICAvLyByZW5hbWUgb3V0cHV0IGNvbHVtbnNcbiAgICAgICAgb3V0cHV0W01FQU5TX0lOREVYXS5uYW1lID0gTUVBTjtcbiAgICAgICAgb3V0cHV0W1NURF9ERVZTX0lOREVYXS5uYW1lID0gU1REX0RFVjtcbiAgICAgICAgb3V0cHV0W01PREVMX1BBUkFNU19JTkRFWF0ubmFtZSA9IE1PREVMX1BBUkFNU19OQU1FO1xuICAgICAgICBvdXRwdXRbTU9ERUxfV0VJR0hUU19JTkRFWF0ubmFtZSA9IE1PREVMX1dFSUdIVFNfTkFNRTtcbiAgICAgICAgb3V0cHV0W1BSRURJQ1RFRF9MQUJFTFNfSU5ERVhdLm5hbWUgPSBQUkVESUNURUQ7XG4gICAgICAgIG91dHB1dFtDT1JSRUNUTkVTU19JTkRFWF0ubmFtZSA9IENPUlJFQ1RORVNTO1xuICAgICAgICBvdXRwdXRbQ09ORlVTSU9OX01BVFJJWF9JTkRFWF0ubmFtZSA9IENPTkZVU0lPTl9NQVRSSVhfTkFNRTtcbiAgICAgICAgLy8gY29tcGxldGUgbW9kZWxcbiAgICAgICAgbGV0IG1vZGVsID0ge1xuICAgICAgICAgICAgdHJhaW5HYW1tYTogaHlwZXJwYXJhbWV0ZXJzLmdhbW1hLFxuICAgICAgICAgICAga2VybmVsVHlwZTogaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCxcbiAgICAgICAgICAgIGtlcm5lbFBhcmFtczoga2VybmVsUGFyYW1zLFxuICAgICAgICAgICAgdHJhaW5MYWJlbHM6IGxhYmVscyxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRUcmFpbkRhdGE6IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhvdXRwdXRbTk9STUFMSVpFRF9EQVRBX0lOREVYXSksXG4gICAgICAgICAgICBtZWFuczogb3V0cHV0W01FQU5TX0lOREVYXSxcbiAgICAgICAgICAgIHN0ZERldnM6IG91dHB1dFtTVERfREVWU19JTkRFWF0sXG4gICAgICAgICAgICBtb2RlbFBhcmFtczogb3V0cHV0W01PREVMX1BBUkFNU19JTkRFWF0sXG4gICAgICAgICAgICBtb2RlbFdlaWdodHM6IG91dHB1dFtNT0RFTF9XRUlHSFRTX0lOREVYXSxcbiAgICAgICAgICAgIHByZWRpY3RlZExhYmVsczogb3V0cHV0W1BSRURJQ1RFRF9MQUJFTFNfSU5ERVhdLFxuICAgICAgICAgICAgY29ycmVjdG5lc3M6IG91dHB1dFtDT1JSRUNUTkVTU19JTkRFWF0sXG4gICAgICAgICAgICBjb25mdXNpb25NYXRyaXg6IG91dHB1dFtDT05GVVNJT05fTUFUUklYX0lOREVYXSxcbiAgICAgICAgICAgIHRyYWluRXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGZlYXR1cmVzQ291bnQ6IHRyYWluQ29scy5sZW5ndGgsXG4gICAgICAgICAgICB0cmFpblNhbXBsZXNDb3VudDogdHJhaW5Db2xzWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICBldmFsdWF0ZUFjY3VyYWN5KG1vZGVsKTtcbiAgICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH0pO1xufSAvLyB0cmFpbkFuZEFuYWx5emVNb2RlbFxuLy8gV3JhcHBlciBmb3IgY29tYmluaW5nIHRoZSBmdW5jdGlvbiBcInRyYWluQW5kQW5hbHl6ZU1vZGVsXCIgd2l0aCBEYXRhZ3JvayBwcmVkaWNpdHZlIHRvb2xzXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhaW5lZE1vZGVsKGh5cGVycGFyYW1ldGVycywgZGYsIHByZWRpY3RfY29sdW1uKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IGNvbHVtbnMgPSBkZi5jb2x1bW5zO1xuICAgICAgICBsZXQgbGFiZWxzID0gY29sdW1ucy5ieU5hbWUocHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBjb2x1bW5zLnJlbW92ZShwcmVkaWN0X2NvbHVtbik7XG4gICAgICAgIHJldHVybiB5aWVsZCB0cmFpbkFuZEFuYWx5emVNb2RlbChoeXBlcnBhcmFtZXRlcnMsIGNvbHVtbnMsIGxhYmVscyk7XG4gICAgfSk7XG59XG4vLyBSZXR1cm5zIGRhdGFmcmFtZSB3aXRoIHNob3J0IGluZm8gYWJvdXQgbW9kZWxcbmZ1bmN0aW9uIGdldE1vZGVsSW5mbyhtb2RlbCkge1xuICAgIGxldCBrZXJuZWxQYXJhbXMgPSBtb2RlbC5rZXJuZWxQYXJhbXMuZ2V0UmF3RGF0YSgpO1xuICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEdBTU1BLCBbbW9kZWwudHJhaW5HYW1tYV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoS0VSTkVMLCBbS0VSTkVMX1RZUEVfVE9fTkFNRV9NQVBbbW9kZWwua2VybmVsVHlwZV1dKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBLRVJORUxfUEFSQU1fMSwgW2tlcm5lbFBhcmFtc1swXV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEtFUk5FTF9QQVJBTV8yLCBba2VybmVsUGFyYW1zWzFdXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgRkVBVFVSRVNfQ09VTlRfTkFNRSwgW21vZGVsLmZlYXR1cmVzQ291bnRdKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBUUkFJTl9TQU1QTEVTX0NPVU5UX05BTUUsIFttb2RlbC50cmFpblNhbXBsZXNDb3VudF0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFRSQUlOX0VSUk9SLCBbbW9kZWwudHJhaW5FcnJvcl0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEJBTEFOQ0VEX0FDQ1VSQUNZLCBbbW9kZWwuYmFsYW5jZWRBY2N1cmFjeV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFNFTlNJVElWSVRZLCBbbW9kZWwuc2Vuc2l0aXZpdHldKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBTUEVDSUZJQ0lUWSwgW21vZGVsLnNwZWNpZmljaXR5XSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgUE9TSVRJVkVfUFJFRElDVElWRV9WQUxVRSwgW21vZGVsLnBvc2l0aXZlUHJlZGljaXR2ZVZhbHVlXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgTkVHQVRJVkVfUFJFRElDVElWRV9WQUxVRSwgW21vZGVsLm5lZ2F0aXZlUHJlZGljaXR2ZVZhbHVlXSlcbiAgICBdKTtcbn1cbi8vIEdldCBkYXRhZnJhbWUgd2l0aCBjb25mdXNpb24gbWF0cml4XG5mdW5jdGlvbiBnZXRDb25mdXNpb25NYXRyaXhERihtb2RlbCkge1xuICAgIGxldCBkYXRhID0gbW9kZWwuY29uZnVzaW9uTWF0cml4LmdldFJhd0RhdGEoKTtcbiAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtcbiAgICAgICAgREcuQ29sdW1uLmZyb21TdHJpbmdzKCcnLCBbUE9TSVRJVkVfTkFNRSwgTkVHQVRJVkVfTkFNRV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2ludCcsIFBSRURJQ1RFRF9QT1NJVElWRV9OQU1FLCBbZGF0YVtUUlVFX1BPU0lUSVZFX0lOREVYXSwgZGF0YVtGQUxTRV9QT1NJVElWRV9JTkRFWF1dKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdpbnQnLCBQUkVESUNURURfTkVHQVRJVkVfTkFNRSwgW2RhdGFbRkFMU0VfTkVHQVRJVkVfSU5ERVhdLCBkYXRhW1RSVUVfTkVHQVRJVkVfSU5ERVhdXSlcbiAgICBdKTtcbn1cbi8vIFNob3cgdHJhaW5pbmcgcmVwb3J0XG5leHBvcnQgZnVuY3Rpb24gc2hvd1RyYWluUmVwb3J0KGRmLCBtb2RlbCkge1xuICAgIGRmLm5hbWUgPSBNTF9SRVBPUlQ7XG4gICAgZGYuY29sdW1ucy5hZGQobW9kZWwudHJhaW5MYWJlbHMpO1xuICAgIGRmLmNvbHVtbnMuYWRkKG1vZGVsLnByZWRpY3RlZExhYmVscyk7XG4gICAgZGYuY29sdW1ucy5hZGQobW9kZWwuY29ycmVjdG5lc3MpO1xuICAgIGxldCBkZlZpZXcgPSBncm9rLnNoZWxsLmFkZFRhYmxlVmlldyhkZik7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuZm9ybShnZXRNb2RlbEluZm8obW9kZWwpKSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHsgdGl0bGU6IE1MX1JFUE9SVF9QUkVESUNURURfTEFCRUxTLFxuICAgICAgICBjb2xvcjogbW9kZWwucHJlZGljdGVkTGFiZWxzLm5hbWVcbiAgICB9KSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHsgdGl0bGU6IE1MX1JFUE9SVF9UUkFJTl9MQUJFTFMsXG4gICAgICAgIGNvbG9yOiBtb2RlbC50cmFpbkxhYmVscy5uYW1lXG4gICAgfSkpO1xuICAgIGRmVmlldy5hZGRWaWV3ZXIoREcuVmlld2VyLmdyaWQoZ2V0Q29uZnVzaW9uTWF0cml4REYobW9kZWwpKSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHsgdGl0bGU6IE1MX1JFUE9SVF9DT1JSRUNUTkVTUyxcbiAgICAgICAgY29sb3I6IG1vZGVsLmNvcnJlY3RuZXNzLm5hbWVcbiAgICB9KSk7XG59IC8vIHNob3dUcmFpblJlcG9ydFxuLy8gUmV0dXJucyB0cmFpbmVkIG1vZGVsIHBhY2tlZCBpbnRvIFVJbnQ4QXJyYXlcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrZWRNb2RlbChtb2RlbCkge1xuICAgIC8vIGdldCBwcmluY2lwYWwgZGF0YVxuICAgIGxldCBkYXRhQ29scyA9IG1vZGVsLm5vcm1hbGl6ZWRUcmFpbkRhdGEuY29sdW1ucztcbiAgICBsZXQgc2FtcGxlc0NvdW50ID0gbW9kZWwudHJhaW5TYW1wbGVzQ291bnQ7XG4gICAgbGV0IGZlYXR1cmVzQ291bnQgPSBtb2RlbC5mZWF0dXJlc0NvdW50O1xuICAgIC8qbGV0IGJ1ZmZlclNpemUgPSBCWVRFUyAqICg3ICsgZmVhdHVyZXNDb3VudCAqIHNhbXBsZXNDb3VudFxuICAgICAgKyAzICogZmVhdHVyZXNDb3VudCArIDIgKiBzYW1wbGVzQ291bnQpOyovXG4gICAgLy8gY29tcHV0ZSBzaXplIG9mIHBhY2tlZCBtb2RlbFxuICAgIGxldCBidWZmZXJTaXplID0gQllURVMgKiAoSU5UU19DT1VOVCArIEtFUl9QQVJBTVNfQ09VTlQgK1xuICAgICAgICBzYW1wbGVzQ291bnQgKyBmZWF0dXJlc0NvdW50ICsgZmVhdHVyZXNDb3VudCArIHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1RcbiAgICAgICAgKyBmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCArIGZlYXR1cmVzQ291bnQgKiBzYW1wbGVzQ291bnQpO1xuICAgIC8vIHBhY2tlZCBtb2RlbFxuICAgIGxldCByZXN1bHQgPSBuZXcgVWludDhBcnJheShidWZmZXJTaXplKTtcbiAgICBsZXQgYnVmZmVyID0gcmVzdWx0LmJ1ZmZlcjtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAvLyBwYWNrIGtlcm5lbCB0eXBlIGFuZCBzaXplc1xuICAgIGxldCBpbnRzID0gbmV3IEludDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIElOVFNfQ09VTlQpO1xuICAgIGludHNbTU9ERUxfS0VSTkVMX0lOREVYXSA9IG1vZGVsLmtlcm5lbFR5cGU7XG4gICAgaW50c1tTQU1QTEVTX0NPVU5UX0lOREVYXSA9IHNhbXBsZXNDb3VudDtcbiAgICBpbnRzW0ZFQVRVUkVTX0NPVU5UX0lOREVYXSA9IGZlYXR1cmVzQ291bnQ7XG4gICAgb2Zmc2V0ICs9IElOVFNfQ09VTlQgKiBCWVRFUztcbiAgICAvLyBwYWNrIGtlcm5lbCBwYXJhbWV0ZXJzXG4gICAgbGV0IGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIEtFUl9QQVJBTVNfQ09VTlQpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwua2VybmVsUGFyYW1zLmdldFJhd0RhdGEoKSk7XG4gICAgb2Zmc2V0ICs9IEtFUl9QQVJBTVNfQ09VTlQgKiBCWVRFUztcbiAgICAvLyBwYWNrIHBhY2sgbGFiZWxzIG9mIHRyYWluaW5nIGRhdGFcbiAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBzYW1wbGVzQ291bnQpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwudHJhaW5MYWJlbHMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gc2FtcGxlc0NvdW50ICogQllURVM7XG4gICAgLy8gcGFjayBtZWFuIHZhbHVlcyBvZiB0cmFpbmluZyBkYXRhXG4gICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgZmVhdHVyZXNDb3VudCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC5tZWFucy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgLy8gcGFjayBzdGFuZGFyZCBkZXZpYXRpb25zIG9mIHRyYWluaW5nIGRhdGFcbiAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLnN0ZERldnMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gZmVhdHVyZXNDb3VudCAqIEJZVEVTO1xuICAgIC8vIHBhY2sgbW9kZWwgcGFyYW10ZXJzXG4gICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC5tb2RlbFBhcmFtcy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSAoc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkgKiBCWVRFUztcbiAgICAvLyBwYWNrIG1vZGVsJ3MgcHJlY29tcHV0ZWQgd2VpZ2h0c1xuICAgIGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQgKyBMU19TVk1fQUREX0NPTlNUKTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLm1vZGVsV2VpZ2h0cy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSAoZmVhdHVyZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gcGFjayB0cmFpbmluZyBkYXRhc2V0XG4gICAgZm9yIChjb25zdCBjb2wgb2YgZGF0YUNvbHMpIHtcbiAgICAgICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgZmVhdHVyZXNDb3VudCk7XG4gICAgICAgIGZsb2F0cy5zZXQoY29sLmdldFJhd0RhdGEoKSk7XG4gICAgICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59IC8vIGdldFBhY2tlZE1vZGVsXG4vLyBSZXR1cm5zIHVucGFja2VkIG1vZGVsXG5mdW5jdGlvbiBnZXRVbnBhY2tlZE1vZGVsKHBhY2tlZE1vZGVsKSB7XG4gICAgbGV0IG1vZGVsQnl0ZXMgPSBwYWNrZWRNb2RlbC5idWZmZXI7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgLy8gZXh0cmFjdCBrZXJuZWwgdHlwZSBhbmQgc2l6ZXNcbiAgICBsZXQgaGVhZGVyID0gbmV3IEludDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBJTlRTX0NPVU5UKTtcbiAgICBvZmZzZXQgKz0gSU5UU19DT1VOVCAqIEJZVEVTO1xuICAgIGxldCBzYW1wbGVzQ291bnQgPSBoZWFkZXJbU0FNUExFU19DT1VOVF9JTkRFWF07XG4gICAgbGV0IGZlYXR1cmVzQ291bnQgPSBoZWFkZXJbRkVBVFVSRVNfQ09VTlRfSU5ERVhdO1xuICAgIC8vIGV4dHJhY3QgcGFyYW1ldGVycyBvZiBrZXJuZWxcbiAgICBjb25zdCBrZXJuZWxQYXJhbXMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShLRVJORUxfUEFSQU1TLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgS0VSX1BBUkFNU19DT1VOVCkpO1xuICAgIG9mZnNldCArPSBLRVJfUEFSQU1TX0NPVU5UICogQllURVM7XG4gICAgLy8gZXh0cmFjdCB0cmFpbmluZyBsYWJlbHNcbiAgICBjb25zdCB0cmFpbkxhYmVscyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KExBQkVMUywgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIHNhbXBsZXNDb3VudCkpO1xuICAgIG9mZnNldCArPSBzYW1wbGVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IG1lYW4gdmFsdWVzIG9mIHRyYWluaW5nIGRhdGFcbiAgICBjb25zdCBtZWFucyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KE1FQU4sIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KSk7XG4gICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IHN0YW5kYXJkIGRldmlhdGlvbnMgb2YgdHJhaW5pbmcgZGF0YVxuICAgIGNvbnN0IHN0ZERldnMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShTVERfREVWLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgZmVhdHVyZXNDb3VudCkpO1xuICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgLy8gZXh0cmFjdCBwYXJhbWV0ZXJzIG9mIG1vZGVsXG4gICAgY29uc3QgbW9kZWxQYXJhbXMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShNT0RFTF9QQVJBTVNfTkFNRSwgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpKTtcbiAgICBvZmZzZXQgKz0gKHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gZXh0cmFjdCBtb2RlbCdzIHByZWNvbXB1dGVkIHdlaWdodHNcbiAgICBjb25zdCBtb2RlbFdlaWdodHMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShNT0RFTF9XRUlHSFRTX05BTUUsIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkpO1xuICAgIG9mZnNldCArPSAoZmVhdHVyZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gZXh0cmFjdCB0cmFpbmluZyBkYXRhIGNvbHVtbnNcbiAgICBsZXQgZGF0YUNvbHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNhbXBsZXNDb3VudDsgaSsrKSB7XG4gICAgICAgIGRhdGFDb2xzLnB1c2goREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoaS50b1N0cmluZygpLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgZmVhdHVyZXNDb3VudCkpKTtcbiAgICAgICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZFRyYWluRGF0YSA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhkYXRhQ29scyk7XG4gICAgbGV0IG1vZGVsID0geyBrZXJuZWxUeXBlOiBoZWFkZXJbTU9ERUxfS0VSTkVMX0lOREVYXSxcbiAgICAgICAga2VybmVsUGFyYW1zOiBrZXJuZWxQYXJhbXMsXG4gICAgICAgIHRyYWluTGFiZWxzOiB0cmFpbkxhYmVscyxcbiAgICAgICAgbWVhbnM6IG1lYW5zLFxuICAgICAgICBzdGREZXZzOiBzdGREZXZzLFxuICAgICAgICBtb2RlbFBhcmFtczogbW9kZWxQYXJhbXMsXG4gICAgICAgIG1vZGVsV2VpZ2h0czogbW9kZWxXZWlnaHRzLFxuICAgICAgICBub3JtYWxpemVkVHJhaW5EYXRhOiBub3JtYWxpemVkVHJhaW5EYXRhXG4gICAgfTtcbiAgICByZXR1cm4gbW9kZWw7XG59IC8vIGdldFVucGFja2VkTW9kZWxcbi8vIFdyYXBwZXIgZm9yIGNvbWJpbmluZyB0aGUgZnVuY3Rpb24gXCJwcmVkaWN0XCIgd2l0aCBEYXRhZ3JvayBwcmVkaWNpdHZlIHRvb2xzXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJlZGljdGlvbihkZiwgcGFja2VkTW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgbW9kZWwgPSBnZXRVbnBhY2tlZE1vZGVsKG5ldyBVaW50OEFycmF5KHBhY2tlZE1vZGVsKSk7XG4gICAgICAgIGxldCByZXMgPSB5aWVsZCBwcmVkaWN0KG1vZGVsLCBkZi5jb2x1bW5zKTtcbiAgICAgICAgcmVzLm5hbWUgPSBQUkVESUNUSU9OO1xuICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtyZXNdKTtcbiAgICB9KTtcbn0gLy8gZ2V0UHJlZGljdGlvblxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG4vKiBEbyBub3QgY2hhbmdlIHRoZXNlIGltcG9ydCBsaW5lcyB0byBtYXRjaCBleHRlcm5hbCBtb2R1bGVzIGluIHdlYnBhY2sgY29uZmlndXJhdGlvbiAqL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IERlbW9TY3JpcHQgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3R1dG9yaWFscy9zcmMvZGVtby1zY3JpcHQnO1xuaW1wb3J0IHsgX2luaXRFREFBUEkgfSBmcm9tICcuLi93YXNtL0VEQUFQSSc7XG5pbXBvcnQgeyBjb21wdXRlUENBLCBjb21wdXRlUExTIH0gZnJvbSAnLi9FREF0b29scyc7XG5pbXBvcnQgeyByZW5hbWVQQ0Fjb2x1bW5zLCBhZGRQTFN2aXN1YWxpemF0aW9uLCByZWdyZXNzaW9uQ29lZmZpY2llbnRzQmFyQ2hhcnQsIHNjb3Jlc1NjYXR0ZXJQbG90LCBwcmVkaWN0ZWRWZXJzdXNSZWZlcmVuY2VTY2F0dGVyUGxvdCB9IGZyb20gJy4vRURBdWknO1xuaW1wb3J0IHsgY2Fyc0RhdGFmcmFtZSwgdGVzdERhdGFGb3JCaW5hcnlDbGFzc2lmaWNhdGlvbiB9IGZyb20gJy4vZGF0YUdlbmVyYXRvcnMnO1xuaW1wb3J0IHsgTElORUFSLCBSQkYsIFBPTFlOT01JQUwsIFNJR01PSUQsIGdldFRyYWluZWRNb2RlbCwgZ2V0UHJlZGljdGlvbiwgc2hvd1RyYWluUmVwb3J0LCBnZXRQYWNrZWRNb2RlbCB9IGZyb20gJy4vc3ZtJztcbmV4cG9ydCBjb25zdCBfcGFja2FnZSA9IG5ldyBERy5QYWNrYWdlKCk7XG4vL25hbWU6IGluZm9cbmV4cG9ydCBmdW5jdGlvbiBpbmZvKCkge1xuICAgIGdyb2suc2hlbGwuaW5mbyhfcGFja2FnZS53ZWJSb290KTtcbn1cbi8vdGFnczogaW5pdFxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX2luaXRFREFBUEkoKTtcbiAgICB9KTtcbn1cbi8vdG9wLW1lbnU6IFRvb2xzIHwgRGF0YSBTY2llbmNlIHwgUHJpbmNpcGFsIENvbXBvbmVudCBBbmFseXNpcy4uLlxuLy9uYW1lOiBQQ0Fcbi8vZGVzY3JpcHRpb246IFByaW5jaXBhbCBjb21wb25lbnQgYW5hbHlzaXMgKFBDQSkuXG4vL2lucHV0OiBkYXRhZnJhbWUgdGFibGVcbi8vaW5wdXQ6IGNvbHVtbl9saXN0IGZlYXR1cmVzIHt0eXBlOiBudW1lcmljYWx9XG4vL2lucHV0OiBpbnQgY29tcG9uZW50cyA9IDJcbi8vaW5wdXQ6IGJvb2wgY2VudGVyID0gdHJ1ZVxuLy9pbnB1dDogYm9vbCBzY2FsZSA9IHRydWVcbi8vb3V0cHV0OiBkYXRhZnJhbWUgcmVzdWx0IHthY3Rpb246am9pbih0YWJsZSl9XG5leHBvcnQgZnVuY3Rpb24gUENBKHRhYmxlLCBmZWF0dXJlcywgY29tcG9uZW50cywgY2VudGVyLCBzY2FsZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiByZW5hbWVQQ0Fjb2x1bW5zKHlpZWxkIGNvbXB1dGVQQ0EodGFibGUsIGZlYXR1cmVzLCBjb21wb25lbnRzLCBjZW50ZXIsIHNjYWxlKSk7XG4gICAgfSk7XG59XG4vL3RvcC1tZW51OiBNTCB8IE11bHRpdmFyaWF0ZSBBbmFseXNpcyAoUExTKS4uLlxuLy9uYW1lOiBNdWx0aXZhcmlhdGUgQW5hbHlzaXMgKFBMUylcbi8vZGVzY3JpcHRpb246IE11bHRpZGltZW5zaW9uYWwgZGF0YSBhbmFseXNpcyB1c2luZyBwYXJ0aWFsIGxlYXN0IHNxdWFyZXMgKFBMUykgcmVncmVzc2lvbi4gSXQgcmVkdWNlcyB0aGUgcHJlZGljdG9ycyB0byBhIHNtYWxsZXIgc2V0IG9mIHVuY29ycmVsYXRlZCBjb21wb25lbnRzIGFuZCBwZXJmb3JtcyBsZWFzdCBzcXVhcmVzIHJlZ3Jlc3Npb24gb24gdGhlbS5cbi8vaW5wdXQ6IGRhdGFmcmFtZSB0YWJsZVxuLy9pbnB1dDogY29sdW1uIG5hbWVzXG4vL2lucHV0OiBjb2x1bW5fbGlzdCBmZWF0dXJlcyB7dHlwZTogbnVtZXJpY2FsfVxuLy9pbnB1dDogY29sdW1uIHByZWRpY3Qge3R5cGU6IG51bWVyaWNhbH1cbi8vaW5wdXQ6IGludCBjb21wb25lbnRzID0gM1xuZXhwb3J0IGZ1bmN0aW9uIFBMUyh0YWJsZSwgbmFtZXMsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgcGxzUmVzdWx0cyA9IHlpZWxkIGNvbXB1dGVQTFModGFibGUsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzKTtcbiAgICAgICAgYWRkUExTdmlzdWFsaXphdGlvbih0YWJsZSwgbmFtZXMsIGZlYXR1cmVzLCBwcmVkaWN0LCBwbHNSZXN1bHRzKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogTVZBIGRlbW9cbi8vZGVzY3JpcHRpb246IE11bHRpZGltZW5zaW9uYWwgZGF0YSBhbmFseXNpcyB1c2luZyBwYXJ0aWFsIGxlYXN0IHNxdWFyZXMgKFBMUykgcmVncmVzc2lvbi4gSXQgcmVkdWNlcyB0aGUgcHJlZGljdG9ycyB0byBhIHNtYWxsZXIgc2V0IG9mIHVuY29ycmVsYXRlZCBjb21wb25lbnRzIGFuZCBwZXJmb3JtcyBsZWFzdCBzcXVhcmVzIHJlZ3Jlc3Npb24gb24gdGhlbS5cbi8vbWV0YS5kZW1vUGF0aDogQ29tcHV0ZSB8IE11bHRpdmFyaWF0ZSBhbmFseXNpc1xuLy9tZXRhLmlzRGVtb1NjcmlwdDogVHJ1ZVxuZXhwb3J0IGZ1bmN0aW9uIGRlbW9NdWx0aXZhcmlhdGVBbmFseXNpcygpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkZW1vU2NyaXB0ID0gbmV3IERlbW9TY3JpcHQoJ1BhcnRpYWwgbGVhc3Qgc3F1YXJlcyByZWdyZXNzaW9uJywgJ0FuYWx5c2lzIG9mIG11bHRpZGltZW5zaW9uYWwgZGF0YS4nKTtcbiAgICAgICAgY29uc3QgY2FycyA9IGNhcnNEYXRhZnJhbWUoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IDM7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gY2Fycy5jb2x1bW5zLmJ5TmFtZSgnbW9kZWwnKTtcbiAgICAgICAgY29uc3QgcHJlZGljdCA9IGNhcnMuY29sdW1ucy5ieU5hbWUoJ3ByaWNlJyk7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVzID0gY2Fycy5jb2x1bW5zLnJlbW92ZSgncHJpY2UnKS5yZW1vdmUoJ21vZGVsJyk7XG4gICAgICAgIGNvbnN0IHBsc091dHB1dCA9IHlpZWxkIGNvbXB1dGVQTFMoY2FycywgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBzb3VyY2VDYXJzID0gY2Fyc0RhdGFmcmFtZSgpO1xuICAgICAgICBzb3VyY2VDYXJzLm5hbWUgPSAnQ2Fycyc7XG4gICAgICAgIGxldCB2aWV3O1xuICAgICAgICBsZXQgZGlhbG9nO1xuICAgICAgICB5aWVsZCBkZW1vU2NyaXB0XG4gICAgICAgICAgICAuc3RlcCgnRGF0YScsICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KHNvdXJjZUNhcnMpO1xuICAgICAgICAgICAgdmlldyA9IGdyb2suc2hlbGwuZ2V0VGFibGVWaWV3KHNvdXJjZUNhcnMubmFtZSk7XG4gICAgICAgIH0pLCB7IGRlc2NyaXB0aW9uOiAnRWFjaCBjYXIgaGFzIG1hbnkgZmVhdHVyZXMgLSBwYXR0ZXJucyBleHRyYWN0aW9uIGlzIGNvbXBsaWNhdGVkLicsIGRlbGF5OiAwIH0pXG4gICAgICAgICAgICAuc3RlcCgnTW9kZWwnLCAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBkaWFsb2cgPSB1aS5kaWFsb2coeyB0aXRsZTogJ011bHRpdmFyaWF0ZSBBbmFseXNpcyAoUExTKScgfSlcbiAgICAgICAgICAgICAgICAuYWRkKHVpLnRhYmxlSW5wdXQoJ1RhYmxlJywgc291cmNlQ2FycykpXG4gICAgICAgICAgICAgICAgLmFkZCh1aS5jb2x1bW5zSW5wdXQoJ0ZlYXR1cmVzJywgY2FycywgZmVhdHVyZXMudG9MaXN0LCB7IGF2YWlsYWJsZTogdW5kZWZpbmVkLCBjaGVja2VkOiBmZWF0dXJlcy5uYW1lcygpIH0pKVxuICAgICAgICAgICAgICAgIC5hZGQodWkuY29sdW1uSW5wdXQoJ05hbWVzJywgY2FycywgbmFtZXMsIHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgLmFkZCh1aS5jb2x1bW5JbnB1dCgnUHJlZGljdCcsIGNhcnMsIHByZWRpY3QsIHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgLmFkZCh1aS5pbnRJbnB1dCgnQ29tcG9uZW50cycsIGNvbXBvbmVudHMsIHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgLm9uT0soKCkgPT4ge1xuICAgICAgICAgICAgICAgIGdyb2suc2hlbGwuaW5mbygnTXVsdGl2YXJpYXRlIGFuYWx5c2lzIGhhcyBiZWVuIGFscmVhZHkgcGVyZm9ybWVkLicpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc2hvdyh7IHg6IDQwMCwgeTogMTQwIH0pO1xuICAgICAgICB9KSwgeyBkZXNjcmlwdGlvbjogJ1ByZWRpY3QgY2FyIHByaWNlIGJ5IGl0cyBvdGhlciBmZWF0dXJlcy4nLCBkZWxheTogMCB9KVxuICAgICAgICAgICAgLnN0ZXAoJ1JlZ3Jlc3Npb24gY29lZmZjaWNpZW50cycsICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGRpYWxvZy5jbG9zZSgpO1xuICAgICAgICAgICAgdmlldy5hZGRWaWV3ZXIocmVncmVzc2lvbkNvZWZmaWNpZW50c0JhckNoYXJ0KGZlYXR1cmVzLCBwbHNPdXRwdXRbMV0pKTtcbiAgICAgICAgfSksIHsgZGVzY3JpcHRpb246ICdUaGUgZmVhdHVyZSBcImRpZXNlbFwiIGFmZmVjdHMgdGhlIHByaWNlIHRoZSBtb3N0LicsIGRlbGF5OiAwIH0pXG4gICAgICAgICAgICAuc3RlcCgnU2NvcmVzJywgKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyB2aWV3LmFkZFZpZXdlcihzY29yZXNTY2F0dGVyUGxvdChuYW1lcywgcGxzT3V0cHV0WzJdLCBwbHNPdXRwdXRbM10pKTsgfSksIHsgZGVzY3JpcHRpb246ICdTaW1pbGFyaXRpZXMgJiBkaXNzaW1pbGFyaXRpZXM6IGFsZmFyb21lbyBhbmQgbWVyY2VkZXMgYXJlIGRpZmZlcmVudC4nLCBkZWxheTogMCB9KVxuICAgICAgICAgICAgLnN0ZXAoJ1ByZWRpY3Rpb24nLCAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHZpZXcuYWRkVmlld2VyKHByZWRpY3RlZFZlcnN1c1JlZmVyZW5jZVNjYXR0ZXJQbG90KG5hbWVzLCBwcmVkaWN0LCBwbHNPdXRwdXRbMF0pKTsgfSksIHsgZGVzY3JpcHRpb246ICdDbG9zZXIgdG8gdGhlIGxpbmUgbWVhbnMgYmV0dGVyIHByaWNlIHByZWRpY3Rpb24uJywgZGVsYXk6IDAgfSlcbiAgICAgICAgICAgIC5zdGFydCgpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBHZW5lcmF0ZSBsaW5lYXIgc2VwYXJhYmxlIGRhdGFzZXRcbi8vZGVzY3JpcHRpb246IEdlbmVyYXRlcyBsaW5lYXIgc2VwYXJibGUgZGF0YXNldCBmb3IgdGVzdGluZyBiaW5hcnkgY2xhc3NpZmljYXRvcnMuXG4vL2lucHV0OiBzdHJpbmcgbmFtZSA9ICdEYXRhJyB7Y2FwdGlvbjogbmFtZTsgY2F0ZWdvcnk6IERhdGFzZXR9XG4vL2lucHV0OiBpbnQgc2FtcGxlc0NvdW50ID0gMTAwMCB7Y2FwdGlvbjogc2FtcGxlczsgY2F0ZWdvcnk6IFNpemV9XG4vL2lucHV0OiBpbnQgZmVhdHVyZXNDb3VudCA9IDIge2NhcHRpb246IGZlYXR1cmVzOyBjYXRlZ29yeTogU2l6ZX1cbi8vaW5wdXQ6IGRvdWJsZSBtaW4gPSAtMzkge2NhcHRpb246IG1pbjsgY2F0ZWdvcnk6IFJhbmdlfVxuLy9pbnB1dDogZG91YmxlIG1heCA9IDE3MyB7Y2FwdGlvbjogbWF4OyBjYXRlZ29yeTogUmFuZ2V9XG4vL2lucHV0OiBkb3VibGUgdmlvbGF0b3JzUGVyY2VudGFnZSA9IDUge2NhcHRpb246IHZpb2xhdG9yczsgdW5pdHM6ICU7IGNhdGVnb3J5OiBEYXRhc2V0fVxuLy9vdXRwdXQ6IGRhdGFmcmFtZSBkZlxuZXhwb3J0IGZ1bmN0aW9uIHRlc3REYXRhTGluZWFyU2VwYXJhYmxlKG5hbWUsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgdGVzdERhdGFGb3JCaW5hcnlDbGFzc2lmaWNhdGlvbihMSU5FQVIsIFswLCAwXSwgbmFtZSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgfSk7XG59XG4vL25hbWU6IEdlbmVyYXRlIGxpbmVhciBub24tc2VwYXJhYmxlIGRhdGFzZXRcbi8vZGVzY3JpcHRpb246IEdlbmVyYXRlcyBsaW5lYXIgbm9uLXNlcGFyYmxlIGRhdGFzZXQgZm9yIHRlc3RpbmcgYmluYXJ5IGNsYXNzaWZpY2F0b3JzLlxuLy9pbnB1dDogc3RyaW5nIG5hbWUgPSAnRGF0YScge2NhcHRpb246IG5hbWU7IGNhdGVnb3J5OiBEYXRhc2V0fVxuLy9pbnB1dDogZG91YmxlIHNpZ21hID0gOTAgIHtjYXB0aW9uOiBzaWdtYTsgY2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc30gW1JCRi1rZXJuZWwgcGFyYW1hdGVyXVxuLy9pbnB1dDogaW50IHNhbXBsZXNDb3VudCA9IDEwMDAge2NhcHRpb246IHNhbXBsZXM7IGNhdGVnb3J5OiBTaXplfVxuLy9pbnB1dDogaW50IGZlYXR1cmVzQ291bnQgPSAyIHtjYXB0aW9uOiBmZWF0dXJlczsgY2F0ZWdvcnk6IFNpemV9XG4vL2lucHV0OiBkb3VibGUgbWluID0gLTM5IHtjYXB0aW9uOiBtaW47IGNhdGVnb3J5OiBSYW5nZX1cbi8vaW5wdXQ6IGRvdWJsZSBtYXggPSAxNzMge2NhcHRpb246IG1heDsgY2F0ZWdvcnk6IFJhbmdlfVxuLy9pbnB1dDogZG91YmxlIHZpb2xhdG9yc1BlcmNlbnRhZ2UgPSA1IHtjYXB0aW9uOiB2aW9sYXRvcnM7IHVuaXRzOiAlOyBjYXRlZ29yeTogRGF0YXNldH1cbi8vb3V0cHV0OiBkYXRhZnJhbWUgZGZcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0RGF0YUxpbmVhck5vblNlcGFyYWJsZShuYW1lLCBzaWdtYSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uKFJCRiwgW3NpZ21hLCAwXSwgbmFtZSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgfSk7XG59XG4vL25hbWU6IHRyYWluTGluZWFyS2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBsaW5lYXIga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkb3VibGUgZ2FtbWEgPSAxLjAge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBib29sIHRvU2hvd1JlcG9ydCA9IGZhbHNlIHtjYXB0aW9uOiB0byBzaG93IHJlcG9ydDsgY2F0ZWdvcnk6IFJlcG9ydH1cbi8vb3V0cHV0OiBkeW5hbWljIG1vZGVsXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5MaW5lYXJLZXJuZWxTVk0oZGYsIHByZWRpY3RfY29sdW1uLCBnYW1tYSwgdG9TaG93UmVwb3J0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdHJhaW5lZE1vZGVsID0geWllbGQgZ2V0VHJhaW5lZE1vZGVsKHsgZ2FtbWE6IGdhbW1hLCBrZXJuZWw6IExJTkVBUiB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogYXBwbHlMaW5lYXJLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IGxpbmVhciBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMaW5lYXJLZXJuZWxTVk0oZGYsIG1vZGVsKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHlpZWxkIGdldFByZWRpY3Rpb24oZGYsIG1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogdHJhaW5SQkZrZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IFJCRi1rZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiB0cmFpblxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vaW5wdXQ6IGRvdWJsZSBnYW1tYSA9IDEuMCB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGRvdWJsZSBzaWdtYSA9IDEuNSB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGJvb2wgdG9TaG93UmVwb3J0ID0gZmFsc2Uge2NhcHRpb246IHRvIHNob3cgcmVwb3J0OyBjYXRlZ29yeTogUmVwb3J0fVxuLy9vdXRwdXQ6IGR5bmFtaWMgbW9kZWxcbmV4cG9ydCBmdW5jdGlvbiB0cmFpblJCRmtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4sIGdhbW1hLCBzaWdtYSwgdG9TaG93UmVwb3J0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdHJhaW5lZE1vZGVsID0geWllbGQgZ2V0VHJhaW5lZE1vZGVsKHsgZ2FtbWE6IGdhbW1hLCBrZXJuZWw6IFJCRiwgc2lnbWE6IHNpZ21hIH0sIGRmLCBwcmVkaWN0X2NvbHVtbik7XG4gICAgICAgIGlmICh0b1Nob3dSZXBvcnQpXG4gICAgICAgICAgICBzaG93VHJhaW5SZXBvcnQoZGYsIHRyYWluZWRNb2RlbCk7XG4gICAgICAgIHJldHVybiBnZXRQYWNrZWRNb2RlbCh0cmFpbmVkTW9kZWwpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBhcHBseVJCRmtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogUkJGLWtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IGFwcGx5XG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IGR5bmFtaWMgbW9kZWxcbi8vb3V0cHV0OiBkYXRhZnJhbWUgdGFibGVcbmV4cG9ydCBmdW5jdGlvbiBhcHBseVJCRmtlcm5lbFNWTShkZiwgbW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgZ2V0UHJlZGljdGlvbihkZiwgbW9kZWwpO1xuICAgIH0pO1xufVxuLy9uYW1lOiB0cmFpblBvbHlub21pYWxLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IHBvbHlub21pYWwga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkb3VibGUgZ2FtbWEgPSAxLjAge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgYyA9IDEge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgZCA9IDIge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBib29sIHRvU2hvd1JlcG9ydCA9IGZhbHNlIHtjYXB0aW9uOiB0byBzaG93IHJlcG9ydDsgY2F0ZWdvcnk6IFJlcG9ydH1cbi8vb3V0cHV0OiBkeW5hbWljIG1vZGVsXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNKGRmLCBwcmVkaWN0X2NvbHVtbiwgZ2FtbWEsIGMsIGQsIHRvU2hvd1JlcG9ydCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBQT0xZTk9NSUFMLCBjUGFyYW06IGMsIGRQYXJhbTogZCB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn0gLy8gdHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNXG4vL25hbWU6IGFwcGx5UG9seW5vbWlhbEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogcG9seW5vbWlhbCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlQb2x5bm9taWFsS2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4vL25hbWU6IHRyYWluU2lnbW9pZEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogc2lnbW9pZCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiB0cmFpblxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vaW5wdXQ6IGRvdWJsZSBnYW1tYSA9IDEuMCB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGRvdWJsZSBrYXBwYSA9IDEge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgdGhldGEgPSAxIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogYm9vbCB0b1Nob3dSZXBvcnQgPSBmYWxzZSB7Y2FwdGlvbjogdG8gc2hvdyByZXBvcnQ7IGNhdGVnb3J5OiBSZXBvcnR9XG4vL291dHB1dDogZHluYW1pYyBtb2RlbFxuZXhwb3J0IGZ1bmN0aW9uIHRyYWluU2lnbW9pZEtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4sIGdhbW1hLCBrYXBwYSwgdGhldGEsIHRvU2hvd1JlcG9ydCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBTSUdNT0lELCBrYXBwYToga2FwcGEsIHRoZXRhOiB0aGV0YSB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn0gLy8gdHJhaW5TaWdtb2lkS2VybmVsU1ZNXG4vL25hbWU6IGFwcGx5U2lnbW9pZEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogc2lnbW9pZCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlTaWdtb2lkS2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4iXSwibmFtZXMiOlsiX193ZWJwYWNrX3JlcXVpcmVfXyIsImV4cG9ydHMiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImNodW5rSWQiLCJnIiwiZ2xvYmFsVGhpcyIsInRoaXMiLCJGdW5jdGlvbiIsImUiLCJ3aW5kb3ciLCJvYmoiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJzY3JpcHRVcmwiLCJpbXBvcnRTY3JpcHRzIiwibG9jYXRpb24iLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsZW5ndGgiLCJpIiwiRXJyb3IiLCJyZXBsYWNlIiwicCIsImIiLCJiYXNlVVJJIiwic2VsZiIsImhyZWYiLCJncm9rIiwidWkiLCJERyIsImFzc3VyZSIsImRlbGF5IiwibXMiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsImdlbmVyYXRvciIsIlByb21pc2UiLCJzZXRUaW1lb3V0IiwiUCIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIm5vdE51bGwiLCJuYW1lIiwiRGVtb1NjcmlwdCIsImNvbnN0cnVjdG9yIiwiZGVzY3JpcHRpb24iLCJpc0F1dG9tYXRpYyIsIm9wdGlvbnMiLCJfYSIsIl9pc0F1dG9tYXRpYyIsIl9hdXRvU3RhcnRGaXJzdFN0ZXAiLCJfY3VycmVudFN0ZXAiLCJfaXNTdG9wcGVkIiwiX2lzQ2FuY2VsbGVkIiwiX2lzU3RlcFByb2Nlc3NlZCIsIl9yb290IiwiaWQiLCJjbGFzc2VzIiwiX3N0ZXBzIiwiX21haW5IZWFkZXIiLCJfaGVhZGVyIiwiX2hlYWRlckRpdiIsIl9zdG9wU3RhcnRCdG4iLCJfY2hhbmdlU3RvcFN0YXRlIiwiX3Jlc3RhcnRCdG4iLCJfcmVzdGFydFNjcmlwdCIsIl9uZXh0U3RlcEJ0biIsIl9uZXh0U3RlcCIsIl9hY3Rpdml0eSIsIl9wcm9ncmVzc0RpdiIsIl9wcm9ncmVzcyIsIl9wcm9ncmVzc1N0ZXBzIiwiX2Nsb3NlQnRuIiwiX2Nsb3NlRG9jayIsImF1dG9TdGFydEZpcnN0U3RlcCIsIm1heCIsImN1cnJlbnRPYmplY3QiLCJzdGVwcyIsInN0ZXBOdW1iZXIiLCJfYWRkSGVhZGVyIiwiX2NyZWF0ZUhlYWRlckRpdiIsIl9jcmVhdGVQcm9ncmVzc0RpdiIsImFwcGVuZCIsImlubmVyVGV4dCIsImZpcnN0Q2hpbGQiLCJjbGFzc05hbWUiLCJfYWRkRGVzY3JpcHRpb24iLCJpbnN0cnVjdGlvbkluZGljYXRvciIsImluc3RydWN0aW9uRGl2IiwiY3VycmVudFN0ZXBEZXNjcmlwdGlvbiIsImVudHJ5IiwiX2luaXRSb290IiwiX2IiLCJfYyIsInNjcmlwdERvY2tOb2RlIiwiQXJyYXkiLCJmcm9tIiwiX25vZGUiLCJwYXJlbnQiLCJjb250YWluZXIiLCJjb250YWluZXJFbGVtZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJsYXN0RWxlbWVudENoaWxkIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJyZW1vdmUiLCJhZGQiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiZW50cnlJbmRpY2F0b3IiLCJlbnRyeUluc3RydWN0aW9uIiwiY3VycmVudFN0ZXAiLCJzdGVwRGVsYXkiLCJmdW5jIiwiX3Njcm9sbFRvIiwib2Zmc2V0VG9wIiwib2Zmc2V0SGVpZ2h0IiwiX2NvdW50ZG93biIsIm5ld0VudHJ5SW5kaWNhdG9yIiwicmVwbGFjZVdpdGgiLCJuZXh0U3RlcEVudHJ5SW5kaWNhdG9yIiwic3RhcnROZXh0U3RlcEljb24iLCJfc3RhcnRTY3JpcHQiLCJlbGVtZW50IiwieSIsImZvY3VzIiwic2Nyb2xsVG9wIiwiaW5kaWNhdG9yIiwidGltZSIsImNvdW50ZG93bkRpdiIsImNvdW50ZG93biIsInN2ZyIsIl9jcmVhdGVTVkdJbmRpY2F0b3IiLCJwcmVwZW5kIiwiaW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJjcmVhdGVFbGVtZW50TlMiLCJjaXJjbGUiLCJzZXRBdHRyaWJ1dGVOUyIsImljb24iLCJfY2xlYXJSb290IiwiX3NldEluaXRQYXJhbXMiLCJzdGFydCIsImNhbmNlbFNjcmlwdCIsIkludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJDb2x1bW4iLCJmcm9tSW50MzJBcnJheSIsImZyb21GbG9hdDMyQXJyYXkiLCJOVU1fVFlQRSIsIkZMT0FUX0NPTFVNTl9UWVBFIiwiSU5UX0NPTFVNTl9UWVBFIiwiRkxPQVRfQ09MVU1OU19UWVBFIiwiTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRSIsIklOVF9DT0xVTU5TX1RZUEUiLCJORVdfSU5UX0NPTFVNTlNfVFlQRSIsIk5FV19GTE9BVF9DT0xVTU5fVFlQRSIsIk5FV19JTlRfQ09MVU1OX1RZUEUiLCJDT0xVTU4iLCJDQUxMX1JFU1VMVCIsIk5VTV9PRl9ST1dTIiwiTlVNX09GX0NPTFVNTlMiLCJSRUYiLCJWQUxVRSIsIlRBQkxFX09GX0NPTFVNTlMiLCJPQkpFQ1RTIiwiSU5UX1RZUEUiLCJET1VCTEVfVFlQRSIsImFyZ3NTcGVjaWZpY2F0aW9uIiwiaW5wdXRWYWxzIiwicmVmIiwiY3BwRnVuY0lucHV0IiwiYXJnIiwidHlwZSIsImRhdGEiLCJhcnJheSIsImNvbCIsImdldFJhd0RhdGEiLCJ2YWwiLCJhcnJheXMiLCJ0b0xpc3QiLCJwdXNoIiwidmFsMSIsInZhbDIiLCJmdW5jU3BlY2lmaWNhdGlvbiIsImRhdGFGcm9tV2ViV29ya2VyIiwiYXJndW1lbnRzIiwiX2NhbGxSZXN1bHQiLCJjYWxsUmVzdWx0IiwiZnVuY1NwZWNpZmljYXRpb25BcmdzIiwiYXJnc0FmdGVyV2FzbUNhbGwiLCJ0eXBlVG9Db2x1bW5DcmVhdG9yTWFwIiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJuYW1lcyIsImNvbHVtbiIsImNvbHVtbnMiLCJrIiwiaiIsImV4dHJhY3ROZXdseUNyZWF0ZWREYXRhIiwiYXJncyIsIm91dFB1dCIsIm91dHB1dCIsInR5cGVUb0RhdGFGaWVsZE1hcCIsInNvdXJjZSIsIkRhdGFGcmFtZSIsImZyb21Db2x1bW5zIiwiYXJyYXlUb1JldHVybiIsImdldE91dHB1dCIsImNsZWFyTmV3bHlDcmVhdGVkRGF0YSIsIkNPTVBfTUlOIiwiU0FNUExFU19DT1VOVF9NSU4iLCJGRUFUVVJFU19DT1VOVF9NSU4iLCJQRVJDRU5UQUdFX01JTiIsIlBFUkNFTlRBR0VfTUFYIiwiTUFYX0VMRU1FTlRTX0NPVU5UIiwiQ09NUF9QT1NJVFZFX01FUyIsIkNPTVBfRVhDRVNTIiwiSU5DT1JFUlJFQ1RfTUlOX01BWF9NRVMiLCJJTkNPUkVSUkVDVF9GRUFUVVJFU19NRVMiLCJJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyIsIklOQ09SRVJSRUNUX1BFUkNFTlRBR0VfTUVTIiwiREFUQUZSQU1FX0lTX1RPT19CSUdfTUVTIiwiY2hlY2tDb21wb25lbmV0cyIsImZlYXR1cmVzIiwiY29tcG9uZW50cyIsImJ5SW5kZXgiLCJjb21wdXRlUExTIiwidGFibGUiLCJwcmVkaWN0IiwiX291dHB1dCIsIl9wcm9taXNlIiwiYXN5bmMiLCJjb21wb25lbnRzQ291bnQiLCJ3b3JrZXIiLCJXb3JrZXIiLCJVUkwiLCJwb3N0TWVzc2FnZSIsIkVEQSIsIm9ubWVzc2FnZSIsInRlcm1pbmF0ZSIsIl9wYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uSW5XZWJXb3JrZXIiLCJfcmVzdWx0IiwiX2Vycm9yIiwicHJlZGljdGVkVmVyc3VzUmVmZXJlbmNlU2NhdHRlclBsb3QiLCJzYW1wbGVzTmFtZXMiLCJyZWZlcmVuY2UiLCJwcmVkaWN0aW9uIiwiZGZSZWZlcmVuY2VQcmVkaWN0aW9uIiwidGl0bGUiLCJ4Iiwic2hvd1JlZ3Jlc3Npb25MaW5lIiwibWFya2VyVHlwZSIsImxhYmVscyIsInJlZ3Jlc3Npb25Db2VmZmljaWVudHNCYXJDaGFydCIsInJlZ3Jlc3Npb25Db2VmZnMiLCJuYW1lc09mUHJlZGljdG9ycyIsInByZWRpY3Rvck5hbWVzQ29sdW1uIiwiZGZSZWdyQ29lZnMiLCJzcGxpdCIsInZhbHVlQWdnclR5cGUiLCJzY29yZXNTY2F0dGVyUGxvdCIsInhTY29yZXMiLCJ5U2NvcmVzIiwic2NvcmVzQ29sdW1ucyIsInNjb3JlcyIsImluZGV4IiwiU1ZNX0dFTl9GRUFUVVJFU19JTkRFWCIsIlNWTV9HRU5fTEFCRUxTX0lOREVYIiwiU1ZNX0ZFQVRVUkVfTkFNRSIsIlNWTV9MQUJFTF9OQU1FIiwiY2Fyc0RhdGFmcmFtZSIsInRlc3REYXRhRm9yQmluYXJ5Q2xhc3NpZmljYXRpb24iLCJrZXJuZWwiLCJrZXJuZWxQYXJhbXMiLCJzYW1wbGVzQ291bnQiLCJmZWF0dXJlc0NvdW50IiwibWluIiwidmlvbGF0b3JzUGVyY2VudGFnZSIsImNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzIiwia2VybmVsUGFyYW1zQ29sIiwiX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyIiwiZGYiLCJMSU5FQVIiLCJQT0xZTk9NSUFMIiwiUkJGIiwiU0lHTU9JRCIsIkNPTkZVU0lPTl9NQVRSX1NJWkUiLCJOT1JNQUxJWkVEX0RBVEFfSU5ERVgiLCJNRUFOU19JTkRFWCIsIlNURF9ERVZTX0lOREVYIiwiTU9ERUxfUEFSQU1TX0lOREVYIiwiTU9ERUxfV0VJR0hUU19JTkRFWCIsIlBSRURJQ1RFRF9MQUJFTFNfSU5ERVgiLCJDT1JSRUNUTkVTU19JTkRFWCIsIkNPTkZVU0lPTl9NQVRSSVhfSU5ERVgiLCJUUlVFX1BPU0lUSVZFX0lOREVYIiwiRkFMU0VfTkVHQVRJVkVfSU5ERVgiLCJGQUxTRV9QT1NJVElWRV9JTkRFWCIsIlRSVUVfTkVHQVRJVkVfSU5ERVgiLCJSQkZfU0lHTUFfSU5ERVgiLCJQT0xZTk9NSUFMX0NfSU5ERVgiLCJQT0xZTk9NSUFMX0RfSU5ERVgiLCJTSUdNT0lEX0tBUFBBX0lOREVYIiwiU0lHTU9JRF9USEVUQV9JTkRFWCIsIkdBTU1BX0lORklNVU1fTElNSVQiLCJSQkZfU0lHTUFfSU5GSU1VTV9MSU1JVCIsIlBPTFlOT01JQUxfQ19JTkZJTVVNX0xJTUlUIiwiUE9MWU5PTUlBTF9EX0lORklNVU1fTElNSVQiLCJXUk9OR19HQU1NQV9NRVNTQUdFIiwiV1JPTkdfUkJGX1NJR01BX01FU1NBR0UiLCJXUk9OR19QT0xZTk9NSUFMX0NfTUVTU0FHRSIsIldST05HX1BPTFlOT01JQUxfRF9NRVNTQUdFIiwiV1JPTkdfS0VSTkVMX01FU1NBR0UiLCJMQUJFTFMiLCJQUkVESUNURUQiLCJDT1JSRUNUTkVTUyIsIkNPTkZVU0lPTl9NQVRSSVhfTkFNRSIsIk1FQU4iLCJTVERfREVWIiwiTU9ERUxfUEFSQU1TX05BTUUiLCJNT0RFTF9XRUlHSFRTX05BTUUiLCJHQU1NQSIsIktFUk5FTCIsIktFUk5FTF9QQVJBTVMiLCJLRVJORUxfUEFSQU1fMSIsIktFUk5FTF9QQVJBTV8yIiwiRkVBVFVSRVNfQ09VTlRfTkFNRSIsIlRSQUlOX1NBTVBMRVNfQ09VTlRfTkFNRSIsIlRSQUlOX0VSUk9SIiwiS0VSTkVMX1RZUEVfVE9fTkFNRV9NQVAiLCJQT1NJVElWRV9OQU1FIiwiTkVHQVRJVkVfTkFNRSIsIlBSRURJQ1RFRF9QT1NJVElWRV9OQU1FIiwiUFJFRElDVEVEX05FR0FUSVZFX05BTUUiLCJTRU5TSVRJVklUWSIsIlNQRUNJRklDSVRZIiwiQkFMQU5DRURfQUNDVVJBQ1kiLCJQT1NJVElWRV9QUkVESUNUSVZFX1ZBTFVFIiwiTkVHQVRJVkVfUFJFRElDVElWRV9WQUxVRSIsIk1MX1JFUE9SVCIsIk1MX1JFUE9SVF9QUkVESUNURURfTEFCRUxTIiwiTUxfUkVQT1JUX1RSQUlOX0xBQkVMUyIsIk1MX1JFUE9SVF9DT1JSRUNUTkVTUyIsIlBSRURJQ1RJT04iLCJCWVRFUyIsIklOVFNfQ09VTlQiLCJLRVJfUEFSQU1TX0NPVU5UIiwiTU9ERUxfS0VSTkVMX0lOREVYIiwiU0FNUExFU19DT1VOVF9JTkRFWCIsIkZFQVRVUkVTX0NPVU5UX0lOREVYIiwiSU5JVF9WQUxVRSIsIkxTX1NWTV9BRERfQ09OU1QiLCJnZXRUcmFpbmVkTW9kZWwiLCJoeXBlcnBhcmFtZXRlcnMiLCJwcmVkaWN0X2NvbHVtbiIsImJ5TmFtZSIsImRhdGFzZXQiLCJnYW1tYSIsInNpZ21hIiwiY1BhcmFtIiwiZFBhcmFtIiwiY2hlY2tIeXBlcnBhcmFtZXRlcnMiLCJrZXJuZWxQYXJhbXNBcnJheSIsImthcHBhIiwidGhldGEiLCJ0cmFpbkNvbHMiLCJtb2RlbFBhcmFtc0NvdW50IiwicHJlY29tcHV0ZWRXZWlnaHRzQ291bnQiLCJjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50IiwiX3RyYWluQW5kQW5hbHl6ZUxTU1ZNSW5XZWJXb3JrZXIiLCJtb2RlbCIsInRyYWluR2FtbWEiLCJrZXJuZWxUeXBlIiwidHJhaW5MYWJlbHMiLCJub3JtYWxpemVkVHJhaW5EYXRhIiwibWVhbnMiLCJzdGREZXZzIiwibW9kZWxQYXJhbXMiLCJtb2RlbFdlaWdodHMiLCJwcmVkaWN0ZWRMYWJlbHMiLCJjb3JyZWN0bmVzcyIsImNvbmZ1c2lvbk1hdHJpeCIsInRyYWluRXJyb3IiLCJ0cmFpblNhbXBsZXNDb3VudCIsIlRQIiwiVE4iLCJGUCIsIkZOIiwiTiIsIlRQUiIsIlROUiIsIlBQViIsIk5QViIsIkFDQyIsIkJBIiwic2Vuc2l0aXZpdHkiLCJzcGVjaWZpY2l0eSIsImJhbGFuY2VkQWNjdXJhY3kiLCJwb3NpdGl2ZVByZWRpY2l0dmVWYWx1ZSIsIm5lZ2F0aXZlUHJlZGljaXR2ZVZhbHVlIiwiZXZhbHVhdGVBY2N1cmFjeSIsInRyYWluQW5kQW5hbHl6ZU1vZGVsIiwic2hvd1RyYWluUmVwb3J0IiwiZGZWaWV3IiwiYWRkVmlld2VyIiwiZ2V0TW9kZWxJbmZvIiwiY29sb3IiLCJnZXRDb25mdXNpb25NYXRyaXhERiIsImdldFBhY2tlZE1vZGVsIiwiZGF0YUNvbHMiLCJVaW50OEFycmF5IiwiYnVmZmVyIiwib2Zmc2V0IiwiaW50cyIsImZsb2F0cyIsInNldCIsImdldFByZWRpY3Rpb24iLCJwYWNrZWRNb2RlbCIsIm1vZGVsQnl0ZXMiLCJoZWFkZXIiLCJnZXRVbnBhY2tlZE1vZGVsIiwicmVzIiwibm9ybWFsaXplZERhdGEiLCJwcmVjb21wdXRlZFdlaWdodHMiLCJ0YXJnZXREYXRhIiwiX3ByZWRpY3RCeUxTU1ZNSW5XZWJXb3JrZXIiLCJfcGFja2FnZSIsImluZm8iLCJ3ZWJSb290IiwiaW5pdCIsImluaXRFREEiLCJfaW5pdEVEQUFQSSIsIlBDQSIsImNlbnRlciIsInNjYWxlIiwicGNhVGFibGUiLCJyZW5hbWVQQ0Fjb2x1bW5zIiwiY2VudGVyTnVtIiwic2NhbGVOdW0iLCJfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlciIsImNvbXB1dGVQQ0EiLCJQTFMiLCJwbHNSZXN1bHRzIiwicGxzT3V0cHV0IiwidmlldyIsInhMb2FkaW5ncyIsImxvYWRpbmdDb2xzIiwibG9hZGluZ0xhYmVscyIsImRmTG9hZGluZ3MiLCJsb2FkaW5nU2NhdHRlclBsb3QiLCJhZGRQTFN2aXN1YWxpemF0aW9uIiwiZGVtb011bHRpdmFyaWF0ZUFuYWx5c2lzIiwiZGVtb1NjcmlwdCIsImNhcnMiLCJzb3VyY2VDYXJzIiwiZGlhbG9nIiwiYXZhaWxhYmxlIiwiY2hlY2tlZCIsIm9uT0siLCJzaG93IiwiY2xvc2UiLCJ0ZXN0RGF0YUxpbmVhclNlcGFyYWJsZSIsInRlc3REYXRhTGluZWFyTm9uU2VwYXJhYmxlIiwidHJhaW5MaW5lYXJLZXJuZWxTVk0iLCJ0b1Nob3dSZXBvcnQiLCJ0cmFpbmVkTW9kZWwiLCJhcHBseUxpbmVhcktlcm5lbFNWTSIsInRyYWluUkJGa2VybmVsU1ZNIiwiYXBwbHlSQkZrZXJuZWxTVk0iLCJ0cmFpblBvbHlub21pYWxLZXJuZWxTVk0iLCJjIiwiZCIsImFwcGx5UG9seW5vbWlhbEtlcm5lbFNWTSIsInRyYWluU2lnbW9pZEtlcm5lbFNWTSIsImFwcGx5U2lnbW9pZEtlcm5lbFNWTSJdLCJzb3VyY2VSb290IjoiIn0=