@datagrok/eda 1.0.3

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.
Files changed (55) hide show
  1. package/README.md +3 -0
  2. package/detectors.js +9 -0
  3. package/dist/111.js +2 -0
  4. package/dist/146.js +2 -0
  5. package/dist/155.js +2 -0
  6. package/dist/355.js +2 -0
  7. package/dist/584.js +2 -0
  8. package/dist/604.js +2 -0
  9. package/dist/632.js +2 -0
  10. package/dist/645.js +2 -0
  11. package/dist/93.js +2 -0
  12. package/dist/d711f70338306e5bddc4.wasm +0 -0
  13. package/dist/package-test.js +2 -0
  14. package/dist/package.js +2 -0
  15. package/package.json +49 -0
  16. package/package.png +0 -0
  17. package/scripts/command.txt +1 -0
  18. package/scripts/exportForTS.py +862 -0
  19. package/scripts/exportForTSConstants.py +93 -0
  20. package/scripts/func.json +1 -0
  21. package/scripts/module.json +11 -0
  22. package/src/EDAtools.ts +46 -0
  23. package/src/EDAui.ts +118 -0
  24. package/src/dataGenerators.ts +74 -0
  25. package/src/demos.ts +38 -0
  26. package/src/package-test.ts +12 -0
  27. package/src/package.ts +248 -0
  28. package/src/svm.ts +485 -0
  29. package/src/utils.ts +51 -0
  30. package/tsconfig.json +71 -0
  31. package/wasm/EDA.js +443 -0
  32. package/wasm/EDA.wasm +0 -0
  33. package/wasm/EDAAPI.js +131 -0
  34. package/wasm/EDAForWebWorker.js +21 -0
  35. package/wasm/PCA/PCA.cpp +151 -0
  36. package/wasm/PCA/PCA.h +48 -0
  37. package/wasm/PLS/PLS.h +64 -0
  38. package/wasm/PLS/pls.cpp +393 -0
  39. package/wasm/callWasm.js +475 -0
  40. package/wasm/callWasmForWebWorker.js +706 -0
  41. package/wasm/dataGenerators.h +169 -0
  42. package/wasm/dataMining.h +116 -0
  43. package/wasm/pcaExport.cpp +64 -0
  44. package/wasm/plsExport.cpp +75 -0
  45. package/wasm/svm.h +608 -0
  46. package/wasm/svmApi.cpp +323 -0
  47. package/wasm/workers/errorWorker.js +13 -0
  48. package/wasm/workers/generateDatasetWorker.js +13 -0
  49. package/wasm/workers/normalizeDatasetWorker.js +13 -0
  50. package/wasm/workers/partialLeastSquareRegressionWorker.js +13 -0
  51. package/wasm/workers/predictByLSSVMWorker.js +13 -0
  52. package/wasm/workers/principalComponentAnalysisWorker.js +13 -0
  53. package/wasm/workers/trainAndAnalyzeLSSVMWorker.js +13 -0
  54. package/wasm/workers/trainLSSVMWorker.js +13 -0
  55. package/webpack.config.js +37 -0
@@ -0,0 +1,2 @@
1
+ var eda;(()=>{"use strict";var e={m:{},d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},u:e=>e+".js"};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var r=n.getElementsByTagName("script");if(r.length)for(var o=r.length-1;o>-1&&!t;)t=r[o--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),e.b=document.baseURI||self.location.href;var t={};e.r(t),e.d(t,{PCA:()=>Pt,PLS:()=>Ft,_package:()=>St,applyLinearKernelSVM:()=>Tt,applyPolynomialKernelSVM:()=>Mt,applyRBFkernelSVM:()=>xt,applySigmoidKernelSVM:()=>$t,demoScript:()=>It,info:()=>kt,init:()=>Dt,testDataLinearNonSeparable:()=>Lt,testDataLinearSeparable:()=>Et,trainLinearKernelSVM:()=>Rt,trainPolynomialKernelSVM:()=>Nt,trainRBFkernelSVM:()=>Vt,trainSigmoidKernelSVM:()=>Bt});const n=grok,r=ui,o=DG;var a;function i(e){return t=this,n=void 0,o=function*(){yield new Promise((t=>setTimeout(t,e)))},new((r=void 0)||(r=Promise))((function(e,a){function i(e){try{l(o.next(e))}catch(e){a(e)}}function s(e){try{l(o.throw(e))}catch(e){a(e)}}function l(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r((function(e){e(n)}))).then(i,s)}l((o=o.apply(t,n||[])).next())}));var t,n,r,o}!function(e){e.notNull=function(e,t){if(null==e)throw new Error(`${null==t?"Value":t} not defined`)}}(a||(a={}));var s=function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{l(r.next(e))}catch(e){a(e)}}function s(e){try{l(r.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}l((r=r.apply(e,t||[])).next())}))};class l{constructor(e,t){this.name="",this.description="",this._currentStep=0,this._isStopped=!1,this._isCancelled=!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.h1(""),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._activity=r.panel([],"tutorials-root-description"),this._progressDiv=r.divV([],"tutorials-root-progress"),this._progress=r.element("progress"),this._progressSteps=r.divText(""),this.name=e,this.description=t,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._header),this._headerDiv.append(this._stopStartBtn)}_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 e;this._activity.append(r.div(this.description,"tutorials-root-description"));for(let t=0;t<this.stepNumber;t++){const n=r.iconFA("clock"),o=r.div(this._steps[t].name,"grok-tutorial-entry-instruction"),a=r.div(null===(e=this._steps[t].options)||void 0===e?void 0:e.description,"grok-tutorial-step-description hidden"),i=r.divH([n,o],"grok-tutorial-entry");this._activity.append(i,a)}}_initRoot(){n.shell.windows.showContextPanel=!0,n.shell.windows.showHelp=!1,n.shell.dockManager.dock(this._root,o.DOCK_TYPE.RIGHT,null,this.name,.3).container.containerElement.classList.add("tutorials-demo-script-container"),this._addHeader(),this._root.append(this._mainHeader),this._addDescription(),this._root.append(this._activity)}_startScript(){var e,t;return s(this,void 0,void 0,(function*(){const n=this._activity.getElementsByClassName("grok-tutorial-entry"),r=this._activity.getElementsByClassName("grok-icon"),o=this._activity.getElementsByClassName("grok-tutorial-step-description");for(let a=this._currentStep;a<this.stepNumber&&!this._isStopped&&!this._isCancelled;a++){r[a].className="grok-icon far fa-spinner-third fa-spin",o[a].classList.remove("hidden"),o[a].classList.add("visible");const s=n[a];yield this._steps[a].func(),this._scrollTo(this._root,s.offsetTop-this._mainHeader.offsetHeight),yield i((null===(e=this._steps[a].options)||void 0===e?void 0:e.delay)?null===(t=this._steps[a].options)||void 0===t?void 0:t.delay:2e3),r[a].className="grok-icon far fa-check",this._progress.value++,this._progressSteps.innerText=`Step: ${this._progress.value} of ${this.stepNumber}`,this._currentStep++}this._currentStep===this.stepNumber&&this._stopStartBtn.replaceWith(this._restartBtn)}))}_scrollTo(e,t){e.focus(),e.scrollTop=t}_changeStopState(){const e=this._stopStartBtn.getElementsByClassName("grok-icon");e[0].className="grok-icon fas fa-play",this._isStopped=!this._isStopped,this._isStopped||(e[0].className="grok-icon fal fa-pause",this._startScript())}_restartScript(){const e=Array.from(n.shell.dockManager.rootNode.children)[1];e.container.containerElement.classList.contains("tutorials-demo-script-container")&&(n.shell.dockManager.close(e),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.h1(""),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"}cancelScript(){this._isCancelled=!0,l.currentObject=null}step(e,t,n){return this._steps[this.steps.length]={name:e,func:t,options:n},this}start(){return s(this,void 0,void 0,(function*(){this._initRoot(),this._startScript()}))}}l.currentObject=null,Int32Array,Float32Array,DG.Column.fromInt32Array,DG.Column.fromFloat32Array;const u="num",c="floatColumn",m="intColumn",d="floatColumns",f="newFloatColumns",p="intColumns",h="newIntColumns",y="newFloatColumn",w="newIntColumn",v="column",g="_callResult",b="numOfRows",C="numOfColumns",_="ref",A="value",S="tableFromColumns",k="objects",D="int",P="double",F={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array};function I(e,t){let n,r=[],o=0;for(const a in e){const i=e[a],s=i.type;if(a!==g){switch(s){case u:case D:case P:i.data=t[o],o++;break;case m:case c:let r,a=t[o];r=a.type===D&&s===m||a.type===P&&s===c?a.getRawData():new F[s](a.getRawData()),i.data={array:r,numOfRows:r.length},o++;break;case w:case y:let l=0;n=i[b][_],l=e[n].type===u?e[n].data:e[n].data[i[b][A]],i.data={numOfRows:l},o++;break;case p:case d:let v=[];for(let e of t[o].toList())e.type===D&&s===m||e.type===P&&s===c?v.push(e.getRawData()):v.push(new F[s](e.getRawData()));i.data={arrays:v,numOfRows:v[0].length,numOfColumns:v.length},o++;break;case h:case f:let g=0,S=0;n=i[b][_],g=e[n].type===u?e[n].data:e[n].data[i[b][A]],n=i[C][_],S=e[n].type===u?e[n].data:e[n].data[i[C][A]],i.data={numOfRows:g,numOfColumns:S},o++;break;default:return}r.push(i)}}return r}function E(e,t){e.arguments._callResult=t.callResult,function(e,t){const n={newFloatColumns:DG.Column.fromFloat32Array,newIntColumns:DG.Column.fromInt32Array,newFloatColumn:DG.Column.fromFloat32Array,newIntColumn:DG.Column.fromInt32Array};let r=0;for(const o in e){const a=e[o];switch(a.type){case u:case D:case P:case m:case c:case d:case p:break;case y:case w:let e;null==a.name?e=(0).toString():s=a.name,a.column=n[a.type](e,t[r].array);break;case h:case f:let o=[],i=t[r].arrays.length,s=[];if(null==a.names)for(let e=1;e<=i;e++)s.push(e.toString());else s=a.names;for(let e=0;e<i;e++)o.push(n[a.type](s[e],t[r].arrays[e]));a.columns=o}r++}}(e.arguments,t.args);let n=function(e){let t=e.output;const n={newFloatColumns:"columns",newIntColumns:"columns",newFloatColumn:"column",newIntColumn:"column"};switch(t.type){case u:case D:case P:return e.arguments[t.source];case v:return e.arguments[t.source].column;case S:return DG.DataFrame.fromColumns(e.arguments[t.source].columns);case k:let r=[];for(let o of t.source){let t=e.arguments[o];r.push(t[n[t.type]])}return r}}(e);return function(e){for(const t in e){const n=e[t];switch(n.type){case u:case D:case P:case m:case c:case p:case d:break;case w:case y:n.column=null;break;case h:case f:n.columns=null}}}(e.arguments),n}const L=1,R=1,T=1,V=0,x=100,N=1e8,M="components must be positive.",B="components must not be greater than feautures count.",$="min must be less than max.",O="features must be positive.",j="samples must be positive.",H="violators percentage must be from the range from 0 to 100.",G="dataframe is too big.";function z(e,t){if(t<L)throw new Error(M);if(t>e.length)throw new Error(B);if(e.length*e.byIndex(0).length>N)throw new Error(G)}var W=function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{l(r.next(e))}catch(e){a(e)}}function s(e){try{l(r.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}l((r=r.apply(e,t||[])).next())}))};function U(t,n,r,o){return W(this,void 0,void 0,(function*(){let t;z(n,o);let a=async function(t,n,r,o){return new Promise(((t,a)=>{const i=new Worker(new URL(e.p+e.u(93),e.b));i.postMessage(I(EDA.partialLeastSquareRegression.arguments,[n,r,o])),i.onmessage=function(e){i.terminate(),t(E(EDA.partialLeastSquareRegression,e.data))}}))}(0,n,r,o);return yield a.then((e=>{t=e}),(e=>{throw new Error(`Error: ${e}`)})),t}))}function K(e,t,r,a){let i=n.shell.getTableView(e.name);i.addViewer(function(e,t){t.name=e.name+"(predicted)";let n=o.DataFrame.fromColumns([e,t]);return n.name="Reference vs. Predicted",o.Viewer.scatterPlot(n,{title:n.name,x:e.name,y:t.name,showRegressionLine:!0,markerType:"circle"})}(r,a[0])),i.addViewer(function(e,t){t.name="regression coefficient";let n=[];for(const t of e)n.push(t.name);let r=o.Column.fromStrings("feature",n),a=o.DataFrame.fromColumns([r,t]);return a.name="Regression Coefficients",o.Viewer.barChart(a,{title:a.name,split:"feature",value:"regression coefficient",valueAggrType:"avg"})}(t,a[1])),i.addViewer(function(e,t){let n=[];for(let t=0;t<e.length;t++)e[t].name=`x.score.t${t+1}`,n.push(e[t]);for(let e=0;e<t.length;e++)t[e].name=`y.score.u${e+1}`,n.push(t[e]);let r=o.DataFrame.fromColumns(n);return r.name="Scores",o.Viewer.scatterPlot(r,{title:r.name,x:e[0].name,y:t[0].name,markerType:"circle"})}(a[2],a[3])),i.addViewer(function(e,t){let n=[],r=[];for(let t of e)r.push(t.name);n.push(o.Column.fromStrings("labels",r));for(let e=0;e<t.length;e++)t[e].name=`x.loading.p${e+1}`,n.push(t[e]);let a=o.DataFrame.fromColumns(n);return a.name="Loadings",o.Viewer.scatterPlot(a,{title:a.name,x:t[0].name,y:t[t.length-1].name,markerType:"circle",labels:"labels"})}(t,a[4]))}var Y=function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{l(r.next(e))}catch(e){a(e)}}function s(e){try{l(r.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}l((r=r.apply(e,t||[])).next())}))},q=function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{l(r.next(e))}catch(e){a(e)}}function s(e){try{l(r.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}l((r=r.apply(e,t||[])).next())}))};const J=0,Q=1,X="Feature #",Z="Label";function ee(){return o.DataFrame.fromColumns([o.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"]),o.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])),o.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])),o.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])),o.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])),o.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])),o.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])),o.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])),o.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])),o.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])),o.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])),o.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])),o.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])),o.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])),o.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])),o.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])),o.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 te(t,n,r,a,i,s,l,u){return q(this,void 0,void 0,(function*(){!function(e,t,n,r,o){if(n>=r)throw new Error($);if(t<T)throw new Error(O);if(e<R)throw new Error(j);if(o<V||o>x)throw new Error(H)}(a,i,s,l,u);const c=o.Column.fromList("double","kernelParams",n);let m,d=async function(t,n,r,o,a,i,s){return new Promise(((l,u)=>{const c=new Worker(new URL(e.p+e.u(584),e.b));c.postMessage(I(EDA.generateDataset.arguments,[t,n,r,o,a,i,s])),c.onmessage=function(e){c.terminate(),l(E(EDA.generateDataset,e.data))}}))}(t,c,a,i,s,l,u);yield d.then((e=>{m=e}),(e=>{throw new Error(`Error: ${e}`)})),m[Q].name=Z;for(const e of m[J])e.name=X+e.name;const f=o.DataFrame.fromColumns(m[J]);return f.name=r,f.columns.add(m[Q]),f}))}var ne=function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{l(r.next(e))}catch(e){a(e)}}function s(e){try{l(r.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}l((r=r.apply(e,t||[])).next())}))};const re=0,oe=1,ae=2,ie=3,se=4,le=0,ue=1,ce=2,me=3,de=4,fe=5,pe=6,he=7,ye=0,we=1,ve=2,ge=3,be=0,Ce=0,_e=1,Ae=0,Se=1,ke=0,De=0,Pe=0,Fe=0,Ie="gamma must be strictly positive.",Ee="sigma must be strictly positive.",Le="c must be strictly positive.",Re="d must be strictly positive.",Te="incorrect kernel.",Ve="Labels",xe="predicted",Ne="correctness",Me="Confusion matrix",Be="mean",$e="std dev",Oe="alpha",je="weight",He="gamma",Ge="kernel",ze="kernel params",We="kernel param 1",Ue="kernel param 2",Ke="features count",Ye="train samples count",qe="Train error,%",Je=["linear","polynomial","RBF","sigmoid"],Qe="positive (P)",Xe="negative (N)",Ze="predicted positive (PP)",et="predicted negative (PN)",tt="Sensitivity",nt="Specificity",rt="Balanced accuracy",ot="Positive predicitve value",at="Negative predicitve value",it="Model report",st="Predicted labels",lt="Train labels",ut="Prediction correctness",ct="prediction",mt=4,dt=3,ft=2,pt=0,ht=1,yt=2,wt=0,vt=1;function gt(t,n,r){return ne(this,void 0,void 0,(function*(){let a=n.columns,i=a.byName(r);return a.remove(r),yield function(t,n,r){return ne(this,void 0,void 0,(function*(){!function(e){if(e.gamma<=ke)throw new Error(Ie);switch(e.kernel){case re:return;case ae:if(e.sigma<=De)throw new Error(Ee);return;case oe:if(e.cParam<=Pe)throw new Error(Le);if(e.dParam<=Fe)throw new Error(Re);return;case ie:return;default:throw new Error(Te)}}(t);const a=[wt,wt];switch(t.kernel){case re:break;case ae:a[be]=t.sigma;break;case oe:a[Ce]=t.cParam,a[_e]=t.dParam;break;case ie:a[Ae]=t.kappa,a[Se]=t.theta;break;default:throw new Error(Te)}let i,s=o.Column.fromList("double",ze,a),l=n.toList(),u=l[0].length+vt,c=l.length+vt,m=se,d=async function(t,n,r,o,a,i,s,l){return new Promise(((u,c)=>{const m=new Worker(new URL(e.p+e.u(111),e.b));m.postMessage(I(EDA.trainAndAnalyzeLSSVM.arguments,[t,n,r,o,a,i,s,l])),m.onmessage=function(e){m.terminate(),u(E(EDA.trainAndAnalyzeLSSVM,e.data))}}))}(t.gamma,t.kernel,s,u,c,m,n,r);yield d.then((e=>{i=e}),(e=>{throw new Error(`Error: ${e}`)})),i[ue].name=Be,i[ce].name=$e,i[me].name=Oe,i[de].name=je,i[fe].name=xe,i[pe].name=Ne,i[he].name=Me;let f={trainGamma:t.gamma,kernelType:t.kernel,kernelParams:s,trainLabels:r,normalizedTrainData:o.DataFrame.fromColumns(i[le]),means:i[ue],stdDevs:i[ce],modelParams:i[me],modelWeights:i[de],predictedLabels:i[fe],correctness:i[pe],confusionMatrix:i[he],trainError:void 0,featuresCount:l.length,trainSamplesCount:l[0].length};return function(e){let t=e.confusionMatrix.getRawData(),n=t[ye],r=t[ge],o=t[ve],a=t[we],i=n+a,s=o+r,l=n/i,u=r/s,c=n/(n+o),m=r/(r+a),d=(n+r)/(i+s),f=(l+u)/2;e.sensitivity=l,e.specificity=u,e.balancedAccuracy=f,e.positivePredicitveValue=c,e.negativePredicitveValue=m,e.trainError=100*(1-d)}(f),f}))}(t,a,i)}))}function bt(e,t){e.name=it,e.columns.add(t.trainLabels),e.columns.add(t.predictedLabels),e.columns.add(t.correctness);let r=n.shell.addTableView(e);r.addViewer(o.Viewer.form(function(e){let t=e.kernelParams.getRawData();return o.DataFrame.fromColumns([o.Column.fromList("double",He,[e.trainGamma]),o.Column.fromStrings(Ge,[Je[e.kernelType]]),o.Column.fromList("double",We,[t[0]]),o.Column.fromList("double",Ue,[t[1]]),o.Column.fromList("double",Ke,[e.featuresCount]),o.Column.fromList("double",Ye,[e.trainSamplesCount]),o.Column.fromList("double",qe,[e.trainError]),o.Column.fromList("double",rt,[e.balancedAccuracy]),o.Column.fromList("double",tt,[e.sensitivity]),o.Column.fromList("double",nt,[e.specificity]),o.Column.fromList("double",ot,[e.positivePredicitveValue]),o.Column.fromList("double",at,[e.negativePredicitveValue])])}(t))),r.addViewer(o.Viewer.scatterPlot(e,{title:st,color:t.predictedLabels.name})),r.addViewer(o.Viewer.scatterPlot(e,{title:lt,color:t.trainLabels.name})),r.addViewer(o.Viewer.grid(function(e){let t=e.confusionMatrix.getRawData();return o.DataFrame.fromColumns([o.Column.fromStrings("",[Qe,Xe]),o.Column.fromList("int",Ze,[t[ye],t[ve]]),o.Column.fromList("int",et,[t[we],t[ge]])])}(t))),r.addViewer(o.Viewer.scatterPlot(e,{title:ut,color:t.correctness.name}))}function Ct(e){let t=e.normalizedTrainData.columns,n=e.trainSamplesCount,r=e.featuresCount,o=new Uint8Array(mt*(dt+ft+n+r+r+n+vt+r+vt+r*n)),a=o.buffer,i=0,s=new Int32Array(a,i,dt);s[pt]=e.kernelType,s[ht]=n,s[yt]=r,i+=dt*mt;let l=new Float32Array(a,i,ft);l.set(e.kernelParams.getRawData()),i+=ft*mt,l=new Float32Array(a,i,n),l.set(e.trainLabels.getRawData()),i+=n*mt,l=new Float32Array(a,i,r),l.set(e.means.getRawData()),i+=r*mt,l=new Float32Array(a,i,r),l.set(e.stdDevs.getRawData()),i+=r*mt,l=new Float32Array(a,i,n+vt),l.set(e.modelParams.getRawData()),i+=(n+vt)*mt,l=new Float32Array(a,i,r+vt),l.set(e.modelWeights.getRawData()),i+=(r+vt)*mt;for(const e of t)l=new Float32Array(a,i,r),l.set(e.getRawData()),i+=r*mt;return o}function _t(t,n){return ne(this,void 0,void 0,(function*(){let r=function(e){let t=e.buffer,n=0,r=new Int32Array(t,n,dt);n+=dt*mt;let a=r[ht],i=r[yt];const s=o.Column.fromFloat32Array(ze,new Float32Array(t,n,ft));n+=ft*mt;const l=o.Column.fromFloat32Array(Ve,new Float32Array(t,n,a));n+=a*mt;const u=o.Column.fromFloat32Array(Be,new Float32Array(t,n,i));n+=i*mt;const c=o.Column.fromFloat32Array($e,new Float32Array(t,n,i));n+=i*mt;const m=o.Column.fromFloat32Array(Oe,new Float32Array(t,n,a+vt));n+=(a+vt)*mt;const d=o.Column.fromFloat32Array(je,new Float32Array(t,n,i+vt));n+=(i+vt)*mt;let f=[];for(let e=0;e<a;e++)f.push(o.Column.fromFloat32Array(e.toString(),new Float32Array(t,n,i))),n+=i*mt;const p=o.DataFrame.fromColumns(f);return{kernelType:r[pt],kernelParams:s,trainLabels:l,means:u,stdDevs:c,modelParams:m,modelWeights:d,normalizedTrainData:p}}(new Uint8Array(n)),a=yield function(t,n){return ne(this,void 0,void 0,(function*(){let r,o=async function(t,n,r,o,a,i,s,l,u){return new Promise(((c,m)=>{const d=new Worker(new URL(e.p+e.u(604),e.b));d.postMessage(I(EDA.predictByLSSVM.arguments,[t,n,r,o,a,i,s,l,u])),d.onmessage=function(e){d.terminate(),c(E(EDA.predictByLSSVM,e.data))}}))}(t.kernelType,t.kernelParams,t.normalizedTrainData.columns,t.trainLabels,t.means,t.stdDevs,t.modelParams,t.modelWeights,n);return yield o.then((e=>{r=e}),(e=>{throw new Error(`Error: ${e}`)})),r}))}(r,t.columns);return a.name=ct,o.DataFrame.fromColumns([a])}))}var At=function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{l(r.next(e))}catch(e){a(e)}}function s(e){try{l(r.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}l((r=r.apply(e,t||[])).next())}))};const St=new o.Package;function kt(){n.shell.info(St.webRoot)}function Dt(){return At(this,void 0,void 0,(function*(){yield async function(){await initEDA()}()}))}function Pt(t,n,r,o,a){return At(this,void 0,void 0,(function*(){return function(e){for(const t of e.columns.toList())t.name="_PCA"+t.name;return e}(yield function(t,n,r,o,a){return W(this,void 0,void 0,(function*(){z(n,r);let t,i=async function(t,n,r,o,a){return new Promise(((t,i)=>{const s=new Worker(new URL(e.p+e.u(155),e.b));s.postMessage(I(EDA.principalComponentAnalysis.arguments,[n,r,o,a])),s.onmessage=function(e){s.terminate(),t(E(EDA.principalComponentAnalysis,e.data))}}))}(0,n,r,o?1:0,a?1:0);return yield i.then((e=>{t=e}),(e=>{throw new Error(`Error: ${e}`)})),t}))}(0,n,r,o,a))}))}function Ft(e,t,n,r){return At(this,void 0,void 0,(function*(){const o=yield U(0,t,n,r);K(e,t,n,o)}))}function It(){return At(this,void 0,void 0,(function*(){const e=new l("Multivariate analysis","Provides partial least sqaure regression analysis of the given data."),t=ee(),a=t.columns.byName("price"),i=t.columns.remove("price").remove("model"),s=yield U(0,i,a,3),u=ee();n.shell.addTableView(u),u.name="Cars",n.shell.getTableView(u.name),yield e.step("Run",(()=>At(this,void 0,void 0,(function*(){}))),{description:"Test dataframe is loaded, and multivariate analysis is performed.",delay:0}).step("Study",(()=>At(this,void 0,void 0,(function*(){K(u,i,a,s)}))),{description:"Investigate results.",delay:4e3}).step("Try",(()=>At(this,void 0,void 0,(function*(){const e={items:1e4,features:100,components:3},t=o.Property.js("items",o.TYPE.INT),a=o.Property.js("features",o.TYPE.INT),i=o.Property.js("components",o.TYPE.INT);r.dialog({title:"Set"}).add(r.input.form(e,[t,a,i])).addButton("Run",(()=>At(this,void 0,void 0,(function*(){return yield function(e,t,r){return Y(this,void 0,void 0,(function*(){if(e<=0||t<=0||r<=0||r>t)return void(new o.Balloon).error("Incorrect inputs.");const a="Reference",i=n.data.testData("random walk",e,t);i.name=`${e} x ${t}`;for(const e of i.columns)e.name="Feature "+e.name;i.columns.byIndex(0).name=a,n.shell.addTableView(i);let s=i.columns.byName(a),l=i.columns.remove(a);K(i,l,s,yield U(0,l,s,r)),i.columns.add(s)}))}(e.items,e.features,e.components)})))).show()}))),{description:"Random walk test dataframe of the given size is generated, and its multivariate analysis is performed."}).start()}))}function Et(e,t,n,r,o,a){return At(this,void 0,void 0,(function*(){return yield te(re,[0,0],e,t,n,r,o,a)}))}function Lt(e,t,n,r,o,a,i){return At(this,void 0,void 0,(function*(){return yield te(ae,[t,0],e,n,r,o,a,i)}))}function Rt(e,t,n,r){return At(this,void 0,void 0,(function*(){const o=yield gt({gamma:n,kernel:re},e,t);return r&&bt(e,o),Ct(o)}))}function Tt(e,t){return At(this,void 0,void 0,(function*(){return yield _t(e,t)}))}function Vt(e,t,n,r,o){return At(this,void 0,void 0,(function*(){const a=yield gt({gamma:n,kernel:ae,sigma:r},e,t);return o&&bt(e,a),Ct(a)}))}function xt(e,t){return At(this,void 0,void 0,(function*(){return yield _t(e,t)}))}function Nt(e,t,n,r,o,a){return At(this,void 0,void 0,(function*(){const i=yield gt({gamma:n,kernel:oe,cParam:r,dParam:o},e,t);return a&&bt(e,i),Ct(i)}))}function Mt(e,t){return At(this,void 0,void 0,(function*(){return yield _t(e,t)}))}function Bt(e,t,n,r,o,a){return At(this,void 0,void 0,(function*(){const i=yield gt({gamma:n,kernel:ie,kappa:r,theta:o},e,t);return a&&bt(e,i),Ct(i)}))}function $t(e,t){return At(this,void 0,void 0,(function*(){return yield _t(e,t)}))}eda=t})();
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFPQyxNQUFPQSxHQUFTbkYsRUFBSXlFLEdBRzlHLE9BRkkyRyxHQUNBM0QsR0FBZ0J6SCxFQUFJcUwsR0FDakJ2RCxHQUFldUQsRUFDMUIsR0FDSixDQU9PLFNBQVNTLEdBQXNCOUwsRUFBSXlGLEdBQ3RDLE9BQU8sR0FBVXBXLFVBQU0sT0FBUSxHQUFRLFlBQ25DLGFBQWFpWixHQUFjdEksRUFBSXlGLEVBQ25DLEdBQ0osQyIsInNvdXJjZXMiOlsid2VicGFjazovL2VkYS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZ2V0IGphdmFzY3JpcHQgY2h1bmsgZmlsZW5hbWUiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9lZGEvZXh0ZXJuYWwgdmFyIFwiZ3Jva1wiIiwid2VicGFjazovL2VkYS9leHRlcm5hbCB2YXIgXCJ1aVwiIiwid2VicGFjazovL2VkYS9leHRlcm5hbCB2YXIgXCJER1wiIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL3R1dG9yaWFscy9zcmMvZGVtby1zY3JpcHQuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vd2FzbS9jYWxsV2FzbS5qcyIsIndlYnBhY2s6Ly9lZGEvLi93YXNtL2NhbGxXYXNtRm9yV2ViV29ya2VyLmpzIiwid2VicGFjazovL2VkYS8uL3NyYy91dGlscy50cyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvRURBdG9vbHMudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vd2FzbS9FREFBUEkuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL0VEQXVpLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9kZW1vcy50cyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvZGF0YUdlbmVyYXRvcnMudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3N2bS50cyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvcGFja2FnZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgcmVxdWlyZSBzY29wZVxudmFyIF9fd2VicGFja19yZXF1aXJlX18gPSB7fTtcblxuLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbl9fd2VicGFja19yZXF1aXJlX18ubSA9IF9fd2VicGFja19tb2R1bGVzX187XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIi8vIFRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gcmVmZXJlbmNlIGFzeW5jIGNodW5rc1xuX193ZWJwYWNrX3JlcXVpcmVfXy51ID0gKGNodW5rSWQpID0+IHtcblx0Ly8gcmV0dXJuIHVybCBmb3IgZmlsZW5hbWVzIGJhc2VkIG9uIHRlbXBsYXRlXG5cdHJldHVybiBcIlwiICsgY2h1bmtJZCArIFwiLmpzXCI7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsInZhciBzY3JpcHRVcmw7XG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5nLmltcG9ydFNjcmlwdHMpIHNjcmlwdFVybCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbiArIFwiXCI7XG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7XG5pZiAoIXNjcmlwdFVybCAmJiBkb2N1bWVudCkge1xuXHRpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdClcblx0XHRzY3JpcHRVcmwgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcblx0aWYgKCFzY3JpcHRVcmwpIHtcblx0XHR2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO1xuXHRcdGlmKHNjcmlwdHMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgaSA9IHNjcmlwdHMubGVuZ3RoIC0gMTtcblx0XHRcdHdoaWxlIChpID4gLTEgJiYgIXNjcmlwdFVybCkgc2NyaXB0VXJsID0gc2NyaXB0c1tpLS1dLnNyYztcblx0XHR9XG5cdH1cbn1cbi8vIFdoZW4gc3VwcG9ydGluZyBicm93c2VycyB3aGVyZSBhbiBhdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIHlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0LnB1YmxpY1BhdGggbWFudWFsbHkgdmlhIGNvbmZpZ3VyYXRpb25cbi8vIG9yIHBhc3MgYW4gZW1wdHkgc3RyaW5nIChcIlwiKSBhbmQgc2V0IHRoZSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyB2YXJpYWJsZSBmcm9tIHlvdXIgY29kZSB0byB1c2UgeW91ciBvd24gbG9naWMuXG5pZiAoIXNjcmlwdFVybCkgdGhyb3cgbmV3IEVycm9yKFwiQXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIik7XG5zY3JpcHRVcmwgPSBzY3JpcHRVcmwucmVwbGFjZSgvIy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcPy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcL1teXFwvXSskLywgXCIvXCIpO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gc2NyaXB0VXJsOyIsIl9fd2VicGFja19yZXF1aXJlX18uYiA9IGRvY3VtZW50LmJhc2VVUkkgfHwgc2VsZi5sb2NhdGlvbi5ocmVmO1xuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2FkaW5nIGNodW5rc1xuLy8gdW5kZWZpbmVkID0gY2h1bmsgbm90IGxvYWRlZCwgbnVsbCA9IGNodW5rIHByZWxvYWRlZC9wcmVmZXRjaGVkXG4vLyBbcmVzb2x2ZSwgcmVqZWN0LCBQcm9taXNlXSA9IGNodW5rIGxvYWRpbmcsIDAgPSBjaHVuayBsb2FkZWRcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdDM1OTogMFxufTtcblxuLy8gbm8gY2h1bmsgb24gZGVtYW5kIGxvYWRpbmdcblxuLy8gbm8gcHJlZmV0Y2hpbmdcblxuLy8gbm8gcHJlbG9hZGVkXG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3RcblxuLy8gbm8gb24gY2h1bmtzIGxvYWRlZFxuXG4vLyBubyBqc29ucCBmdW5jdGlvbiIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSBncm9rOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSB1aTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gREc7IiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5leHBvcnQgY29uc3QgdGVzdHMgPSB7fTtcbmNvbnN0IGF1dG9UZXN0c0NhdE5hbWUgPSAnQXV0byBUZXN0cyc7XG5jb25zdCB3YXNSZWdpc3RlcmVkID0ge307XG5leHBvcnQgbGV0IGN1cnJlbnRDYXRlZ29yeTtcbmV4cG9ydCB2YXIgYXNzdXJlO1xuKGZ1bmN0aW9uIChhc3N1cmUpIHtcbiAgICBmdW5jdGlvbiBub3ROdWxsKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWUgPT0gbnVsbCA/ICdWYWx1ZScgOiBuYW1lfSBub3QgZGVmaW5lZGApO1xuICAgIH1cbiAgICBhc3N1cmUubm90TnVsbCA9IG5vdE51bGw7XG59KShhc3N1cmUgfHwgKGFzc3VyZSA9IHt9KSk7XG5leHBvcnQgY2xhc3MgVGVzdENvbnRleHQge1xuICAgIGNvbnN0cnVjdG9yKGNhdGNoVW5oYW5kbGVkLCByZXBvcnQpIHtcbiAgICAgICAgdGhpcy5jYXRjaFVuaGFuZGxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVwb3J0ID0gZmFsc2U7XG4gICAgICAgIGlmIChjYXRjaFVuaGFuZGxlZCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhpcy5jYXRjaFVuaGFuZGxlZCA9IGNhdGNoVW5oYW5kbGVkO1xuICAgICAgICBpZiAocmVwb3J0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aGlzLnJlcG9ydCA9IHJlcG9ydDtcbiAgICB9XG4gICAgO1xufVxuZXhwb3J0IGNsYXNzIFRlc3Qge1xuICAgIGNvbnN0cnVjdG9yKGNhdGVnb3J5LCBuYW1lLCB0ZXN0LCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiAob3B0aW9ucyA9IHt9KTtcbiAgICAgICAgKF9hID0gb3B0aW9ucy50aW1lb3V0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAob3B0aW9ucy50aW1lb3V0ID0gMzAwMDApO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLnRlc3QgPSAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB5aWVsZCB0ZXN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gdGVzdEV2ZW50KGV2ZW50LCBoYW5kbGVyLCB0cmlnZ2VyLCBtcyA9IDApIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgc3ViO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgc3ViID0gZXZlbnQuc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcihhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCdPSycpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9yc1xuICAgICAgICAgICAgICAgIHJlamVjdCgndGltZW91dCcpO1xuICAgICAgICAgICAgfSwgbXMpO1xuICAgICAgICAgICAgdHJpZ2dlcigpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KG5hbWUsIHRlc3QsIG9wdGlvbnMpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPSBbXTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzLnB1c2gobmV3IFRlc3QoY3VycmVudENhdGVnb3J5LCBuYW1lLCB0ZXN0LCBvcHRpb25zKSk7XG59XG4vKiBUZXN0cyB0d28gb2JqZWN0cyBmb3IgZXF1YWxpdHksIHRocm93cyBhbiBleGNlcHRpb24gaWYgdGhleSBhcmUgbm90IGVxdWFsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdChhY3R1YWwsIGV4cGVjdGVkID0gdHJ1ZSwgZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IpXG4gICAgICAgIGVycm9yID0gYCR7ZXJyb3J9LCBgO1xuICAgIGVsc2VcbiAgICAgICAgZXJyb3IgPSAnJztcbiAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yfUV4cGVjdGVkIFwiJHtleHBlY3RlZH1cIiwgZ290IFwiJHthY3R1YWx9XCJgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RGbG9hdChhY3R1YWwsIGV4cGVjdGVkLCB0b2xlcmFuY2UgPSAwLjAwMSwgZXJyb3IpIHtcbiAgICBpZiAoKGFjdHVhbCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZICYmIGV4cGVjdGVkID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpIHx8XG4gICAgICAgIChhY3R1YWwgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKSB8fFxuICAgICAgICAoYWN0dWFsID09PSBOdW1iZXIuTmFOICYmIGV4cGVjdGVkID09PSBOdW1iZXIuTmFOKSB8fCAoaXNOYU4oYWN0dWFsKSAmJiBpc05hTihleHBlY3RlZCkpKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgYXJlRXF1YWwgPSBNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPCB0b2xlcmFuY2U7XG4gICAgZXhwZWN0KGFyZUVxdWFsLCB0cnVlLCBgJHtlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJ30gKHRvbGVyYW5jZSA9ICR7dG9sZXJhbmNlfSlgKTtcbiAgICBpZiAoIWFyZUVxdWFsKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0VGFibGUoYWN0dWFsLCBleHBlY3RlZCwgZXJyb3IpIHtcbiAgICBjb25zdCBleHBlY3RlZFJvd0NvdW50ID0gZXhwZWN0ZWQucm93Q291bnQ7XG4gICAgY29uc3QgYWN0dWFsUm93Q291bnQgPSBhY3R1YWwucm93Q291bnQ7XG4gICAgZXhwZWN0KGFjdHVhbFJvd0NvdW50LCBleHBlY3RlZFJvd0NvdW50LCBgJHtlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJ30sIHJvdyBjb3VudGApO1xuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGV4cGVjdGVkLmNvbHVtbnMpIHtcbiAgICAgICAgY29uc3QgYWN0dWFsQ29sdW1uID0gYWN0dWFsLmNvbHVtbnMuYnlOYW1lKGNvbHVtbi5uYW1lKTtcbiAgICAgICAgaWYgKGFjdHVhbENvbHVtbiA9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gJHtjb2x1bW4ubmFtZX0gbm90IGZvdW5kYCk7XG4gICAgICAgIGlmIChhY3R1YWxDb2x1bW4udHlwZSAhPSBjb2x1bW4udHlwZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7Y29sdW1uLm5hbWV9IHR5cGUgZXhwZWN0ZWQgJHtjb2x1bW4udHlwZX0gZ290ICR7YWN0dWFsQ29sdW1uLnR5cGV9YCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwZWN0ZWRSb3dDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbHVtbi5nZXQoaSk7XG4gICAgICAgICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbENvbHVtbi5nZXQoaSk7XG4gICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT0gREcuVFlQRS5GTE9BVClcbiAgICAgICAgICAgICAgICBleHBlY3RGbG9hdChhY3R1YWxWYWx1ZSwgdmFsdWUsIDAuMDAwMSwgZXJyb3IpO1xuICAgICAgICAgICAgZWxzZSBpZiAoY29sdW1uLnR5cGUgPT0gREcuVFlQRS5EQVRFX1RJTUUpXG4gICAgICAgICAgICAgICAgZXhwZWN0KGFjdHVhbFZhbHVlLmlzU2FtZSh2YWx1ZSksIHRydWUsIGVycm9yKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBleHBlY3QoYWN0dWFsVmFsdWUsIHZhbHVlLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0T2JqZWN0KGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgICBmb3IgKGNvbnN0IFtleHBlY3RlZEtleSwgZXhwZWN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXhwZWN0ZWQpKSB7XG4gICAgICAgIGlmICghYWN0dWFsLmhhc093blByb3BlcnR5KGV4cGVjdGVkS2V5KSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgcHJvcGVydHkgXCIke2V4cGVjdGVkS2V5fVwiIG5vdCBmb3VuZGApO1xuICAgICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbFtleHBlY3RlZEtleV07XG4gICAgICAgIGlmIChhY3R1YWxWYWx1ZSBpbnN0YW5jZW9mIEFycmF5ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgICAgICAgIGV4cGVjdEFycmF5KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgICAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgICAgIGVsc2UgaWYgKE51bWJlci5pc0Zpbml0ZShhY3R1YWxWYWx1ZSkgJiYgTnVtYmVyLmlzRmluaXRlKGV4cGVjdGVkVmFsdWUpKVxuICAgICAgICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgICAgICBlbHNlIGlmIChhY3R1YWxWYWx1ZSAhPSBleHBlY3RlZFZhbHVlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAoJHtleHBlY3RlZFZhbHVlfSkgZm9yIGtleSAnJHtleHBlY3RlZEtleX0nLCBnb3QgKCR7YWN0dWFsVmFsdWV9KWApO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RBcnJheShhY3R1YWwsIGV4cGVjdGVkKSB7XG4gICAgY29uc3QgYWN0dWFsTGVuZ3RoID0gYWN0dWFsLmxlbmd0aDtcbiAgICBjb25zdCBleHBlY3RlZExlbmd0aCA9IGV4cGVjdGVkLmxlbmd0aDtcbiAgICBpZiAoYWN0dWFsTGVuZ3RoICE9IGV4cGVjdGVkTGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXlzIGFyZSBvZiBkaWZmZXJlbnQgbGVuZ3RoOiBhY3R1YWwgYXJyYXkgbGVuZ3RoIGlzICR7YWN0dWFsTGVuZ3RofSBgICtcbiAgICAgICAgICAgIGBhbmQgZXhwZWN0ZWQgYXJyYXkgbGVuZ3RoIGlzICR7ZXhwZWN0ZWRMZW5ndGh9YCk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0dWFsTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIEFycmF5ICYmIGV4cGVjdGVkW2ldIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICAgICAgICBleHBlY3RBcnJheShhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsW2ldIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkW2ldIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgICAgICAgICAgZXhwZWN0T2JqZWN0KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuICAgICAgICBlbHNlIGlmIChhY3R1YWxbaV0gIT0gZXhwZWN0ZWRbaV0pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWRbaV19IGF0IHBvc2l0aW9uICR7aX0sIGdvdCAke2FjdHVhbFtpXX1gKTtcbiAgICB9XG59XG4vKiBEZWZpbmVzIGEgdGVzdCBzdWl0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXRlZ29yeShjYXRlZ29yeSwgdGVzdHMpIHtcbiAgICBjdXJyZW50Q2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0ZXN0cygpO1xufVxuLyogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYmVmb3JlKGJlZm9yZSkge1xuICAgIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICAgICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYmVmb3JlID0gYmVmb3JlO1xufVxuLyogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0ZXN0cyBpbiB0aGlzIGNhdGVnb3J5IGFyZSBleGVjdXRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlcihhZnRlcikge1xuICAgIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICAgICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYWZ0ZXIgPSBhZnRlcjtcbn1cbmZ1bmN0aW9uIGFkZE5hbWVzcGFjZShzLCBmKSB7XG4gICAgcmV0dXJuIHMucmVwbGFjZShuZXcgUmVnRXhwKGYubmFtZSwgJ2dpJyksIGYubnFOYW1lKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbml0QXV0b1Rlc3RzKHBhY2thZ2VJZCwgbW9kdWxlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbW9kdWxlVGVzdHMgPSBtb2R1bGUgPyBtb2R1bGUudGVzdHMgOiB0ZXN0cztcbiAgICAgICAgaWYgKG1vZHVsZVRlc3RzW2F1dG9UZXN0c0NhdE5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW9kdWxlQXV0b1Rlc3RzID0gW107XG4gICAgICAgIGNvbnN0IHBhY2tGdW5jdGlvbnMgPSB5aWVsZCBncm9rLmRhcGkuZnVuY3Rpb25zLmZpbHRlcihgcGFja2FnZS5pZCA9IFwiJHtwYWNrYWdlSWR9XCJgKS5saXN0KCk7XG4gICAgICAgIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoLy4qXFwvXFwvXFxzKnNraXBbOlxcc10qKC4qKSQvKTtcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIHBhY2tGdW5jdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RzID0gZi5vcHRpb25zWyd0ZXN0J107XG4gICAgICAgICAgICBpZiAoISh0ZXN0cyAmJiBBcnJheS5pc0FycmF5KHRlc3RzKSAmJiB0ZXN0cy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNraXBSZWFzb25zID0gdGVzdHNbaV0ubWF0Y2gocmVnKTtcbiAgICAgICAgICAgICAgICBsZXQgc2tpcFJlYXNvbjtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcFJlYXNvbnMgJiYgKHNraXBSZWFzb25zID09PSBudWxsIHx8IHNraXBSZWFzb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBza2lwUmVhc29ucy5sZW5ndGgpID4gMSlcbiAgICAgICAgICAgICAgICAgICAgc2tpcFJlYXNvbiA9IHNraXBSZWFzb25zWzFdO1xuICAgICAgICAgICAgICAgIG1vZHVsZUF1dG9UZXN0cy5wdXNoKG5ldyBUZXN0KGF1dG9UZXN0c0NhdE5hbWUsIHRlc3RzLmxlbmd0aCA9PT0gMSA/IGYubmFtZSA6IGAke2YubmFtZX0gJHtpICsgMX1gLCAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIGdyb2suZnVuY3Rpb25zLmV2YWwoYWRkTmFtZXNwYWNlKHRlc3RzW2ldLCBmKSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMgIT09IHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBgRmFpbGVkOiAke3Rlc3RzW2ldfWA7XG4gICAgICAgICAgICAgICAgfSksIHsgc2tpcFJlYXNvbjogc2tpcFJlYXNvbiB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgd2FzUmVnaXN0ZXJlZFtwYWNrYWdlSWRdID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFtb2R1bGVBdXRvVGVzdHMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBtb2R1bGVUZXN0c1thdXRvVGVzdHNDYXROYW1lXSA9IHsgdGVzdHM6IG1vZHVsZUF1dG9UZXN0cyB9O1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJ1blRlc3RzKG9wdGlvbnMpIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgdmFyIF9lO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHBhY2thZ2VfID0gKF9iID0gKF9hID0gZ3Jvay5mdW5jdGlvbnMuZ2V0Q3VycmVudENhbGwoKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZ1bmMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5wYWNrYWdlO1xuICAgICAgICB5aWVsZCBpbml0QXV0b1Rlc3RzKHBhY2thZ2VfLmlkKTtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBjb25zb2xlLmxvZyhgUnVubmluZyB0ZXN0c2ApO1xuICAgICAgICBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiAob3B0aW9ucyA9IHt9KTtcbiAgICAgICAgKF9jID0gKF9lID0gb3B0aW9ucykudGVzdENvbnRleHQpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IChfZS50ZXN0Q29udGV4dCA9IG5ldyBUZXN0Q29udGV4dCgpKTtcbiAgICAgICAgZ3Jvay5zaGVsbC5sYXN0RXJyb3IgPSAnJztcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGVzdHMpKSB7XG4gICAgICAgICAgICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXRlZ29yeSkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZXkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXRlZ29yeS50b0xvd2VyQ2FzZSgpKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgU3RhcnRlZCAke2tleX0gY2F0ZWdvcnlgKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJlZm9yZSlcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdmFsdWUuYmVmb3JlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmJlZm9yZVN0YXR1cyA9IHgudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHQgPSAoX2QgPSB2YWx1ZS50ZXN0cykgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogW107XG4gICAgICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICByZXMucHVzaCh5aWVsZCBleGVjVGVzdCh0W2ldLCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudGVzdCkpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9ICh5aWVsZCBQcm9taXNlLmFsbChyZXMpKS5maWx0ZXIoKGQpID0+IGQucmVzdWx0ICE9ICdza2lwcGVkJyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5hZnRlcilcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdmFsdWUuYWZ0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuYWZ0ZXJTdGF0dXMgPSB4LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUuYWZ0ZXJTdGF0dXMpXG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKHsgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2luaXQnLCByZXN1bHQ6IHZhbHVlLmFmdGVyU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgaWYgKHZhbHVlLmJlZm9yZVN0YXR1cylcbiAgICAgICAgICAgICAgICBkYXRhLnB1c2goeyBjYXRlZ29yeToga2V5LCBuYW1lOiAnaW5pdCcsIHJlc3VsdDogdmFsdWUuYmVmb3JlU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKC4uLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnRlc3RDb250ZXh0LmNhdGNoVW5oYW5kbGVkKSB7XG4gICAgICAgICAgICB5aWVsZCBkZWxheSgxMDAwKTtcbiAgICAgICAgICAgIGlmIChncm9rLnNoZWxsLmxhc3RFcnJvci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6ICdVbmhhbmRsZWQgZXhjZXB0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdleGNlcHRpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiBncm9rLnNoZWxsLmxhc3RFcnJvciwgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnRlc3RDb250ZXh0LnJlcG9ydCkge1xuICAgICAgICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IERHLkxvZ2dlcigpO1xuICAgICAgICAgICAgY29uc3Qgc3VjY2Vzc2Z1bCA9IHJlc3VsdHMuZmlsdGVyKChyKSA9PiByLnN1Y2Nlc3MpLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IHNraXBwZWQgPSByZXN1bHRzLmZpbHRlcigocikgPT4gci5za2lwcGVkKS5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBmYWlsZWQgPSByZXN1bHRzLmZpbHRlcigocikgPT4gIXIuc3VjY2Vzcyk7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9ICdQYWNrYWdlIEBwYWNrYWdlIHRlc3RlZDogQHN1Y2Nlc3NmdWwgc3VjY2Vzc2Z1bCwgQHNraXBwZWQgc2tpcHBlZCwgQGZhaWxlZCBmYWlsZWQgdGVzdHMnO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWw6IHN1Y2Nlc3NmdWwsXG4gICAgICAgICAgICAgICAgc2tpcHBlZDogc2tpcHBlZCxcbiAgICAgICAgICAgICAgICBmYWlsZWQ6IGZhaWxlZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgcGFja2FnZTogcGFja2FnZV9cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHIgb2YgZmFpbGVkKVxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocGFyYW1zLCB7IFtgJHtyLmNhdGVnb3J5fSB8ICR7ci5uYW1lfWBdOiByLnJlc3VsdCB9KTtcbiAgICAgICAgICAgIGxvZ2dlci5sb2coZGVzY3JpcHRpb24sIHBhcmFtcywgJ3BhY2thZ2UtdGVzdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBleGVjVGVzdCh0LCBwcmVkaWNhdGUpIHtcbiAgICB2YXIgX2EsIF9iLCBfYztcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcjtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gcHJlZGljYXRlICE9IHVuZGVmaW5lZCAmJiAoIXQubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocHJlZGljYXRlLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgICAgY29uc3Qgc2tpcCA9ICgoX2EgPSB0Lm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5za2lwUmVhc29uKSB8fCBmaWx0ZXI7XG4gICAgICAgIGNvbnN0IHNraXBSZWFzb24gPSBmaWx0ZXIgPyAnc2tpcHBlZCcgOiAoX2IgPSB0Lm9wdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5za2lwUmVhc29uO1xuICAgICAgICBpZiAoIXNraXApXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgU3RhcnRlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfWApO1xuICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoc2tpcClcbiAgICAgICAgICAgICAgICByID0geyBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IHNraXBSZWFzb24sIG1zOiAwLCBza2lwcGVkOiB0cnVlIH07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgciA9IHsgc3VjY2VzczogdHJ1ZSwgcmVzdWx0OiAoX2MgPSB5aWVsZCB0LnRlc3QoKSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogJ09LJywgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHIgPSB7IHN1Y2Nlc3M6IGZhbHNlLCByZXN1bHQ6IHgudG9TdHJpbmcoKSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RvcCA9IG5ldyBEYXRlKCk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgci5tcyA9IHN0b3AgLSBzdGFydDtcbiAgICAgICAgaWYgKCFza2lwKVxuICAgICAgICAgICAgY29uc29sZS5sb2coYEZpbmlzaGVkICR7dC5jYXRlZ29yeX0gJHt0Lm5hbWV9IGZvciAke3IubXN9IG1zYCk7XG4gICAgICAgIHIuY2F0ZWdvcnkgPSB0LmNhdGVnb3J5O1xuICAgICAgICByLm5hbWUgPSB0Lm5hbWU7XG4gICAgICAgIHJldHVybiByO1xuICAgIH0pO1xufVxuLyogV2FpdHMgW21zXSBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxheShtcykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXdhaXRDaGVjayhjaGVja0hhbmRsZXIsIGVycm9yID0gJ1RpbWVvdXQgZXhjZWVkZWQnLCB3YWl0ID0gNTAwLCBpbnRlcnZhbCA9IDUwKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvcikpO1xuICAgICAgICAgICAgfSwgd2FpdCk7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCBpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGVja0hhbmRsZXIoKSkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgaW50ZXJ2YWwpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0RpYWxvZ1ByZXNlbnQoZGlhbG9nVGl0bGUpIHtcbiAgICBjb25zdCBkaWFsb2dzID0gREcuRGlhbG9nLmdldE9wZW5EaWFsb2dzKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWFsb2dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChkaWFsb2dzW2ldLnRpdGxlID09IGRpYWxvZ1RpdGxlKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0Vmlld2VyKHYsIGRmLCBkZXRlY3RTZW1hbnRpY1R5cGVzID0gZmFsc2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoZGV0ZWN0U2VtYW50aWNUeXBlcylcbiAgICAgICAgICAgIHlpZWxkIGdyb2suZGF0YS5kZXRlY3RTZW1hbnRpY1R5cGVzKGRmKTtcbiAgICAgICAgY29uc3QgdHYgPSBncm9rLnNoZWxsLmFkZFRhYmxlVmlldyhkZik7XG4gICAgICAgIGNvbnN0IHZpZXdlck5hbWUgPSBgW25hbWU9dmlld2VyLSR7di5yZXBsYWNlKC9cXHMrL2csICctJyl9IGldYDtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSBgJHt2aWV3ZXJOYW1lfSBjYW52YXMsJHt2aWV3ZXJOYW1lfSBzdmcsJHt2aWV3ZXJOYW1lfSBpbWcsXG4gICAgJHt2aWV3ZXJOYW1lfSBpbnB1dCwke3ZpZXdlck5hbWV9IGgxLCR7dmlld2VyTmFtZX0gYWA7XG4gICAgICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHZpZXdlciA9IHR2LmFkZFZpZXdlcih2KTtcbiAgICAgICAgICAgIHlpZWxkIGF3YWl0Q2hlY2soKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgIT09IG51bGwsICdjYW5ub3QgbG9hZCB2aWV3ZXInLCAzMDAwKTtcbiAgICAgICAgICAgIHJlcy5wdXNoKEFycmF5LmZyb20odHYudmlld2VycykubGVuZ3RoKTtcbiAgICAgICAgICAgIEFycmF5LmZyb20oZGYucm93KDApLmNlbGxzKS5mb3JFYWNoKChjKSA9PiBjLnZhbHVlID0gbnVsbCk7XG4gICAgICAgICAgICBkZi5yb3dzLnNlbGVjdCgocm93KSA9PiByb3cuaWR4ID4gMSAmJiByb3cuaWR4IDwgNyk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gNzsgaSA8IDEyOyBpKyspXG4gICAgICAgICAgICAgICAgZGYuZmlsdGVyLnNldChpLCBmYWxzZSk7XG4gICAgICAgICAgICBkZi5jdXJyZW50Um93SWR4ID0gMTtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gdmlld2VyLmdldE9wdGlvbnModHJ1ZSkubG9vaztcbiAgICAgICAgICAgIGNvbnN0IG5ld1Byb3BzID0ge307XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwcm9wcykuZmlsdGVyKChrKSA9PiB0eXBlb2YgcHJvcHNba10gPT09ICdib29sZWFuJykuZm9yRWFjaCgoaykgPT4gbmV3UHJvcHNba10gPSAhcHJvcHNba10pO1xuICAgICAgICAgICAgdmlld2VyLnNldE9wdGlvbnMobmV3UHJvcHMpO1xuICAgICAgICAgICAgeWllbGQgZGVsYXkoMjUwKTtcbiAgICAgICAgICAgIGNvbnN0IGxheW91dCA9IHR2LnNhdmVMYXlvdXQoKTtcbiAgICAgICAgICAgIGNvbnN0IG9sZFByb3BzID0gdmlld2VyLmdldE9wdGlvbnMoKS5sb29rO1xuICAgICAgICAgICAgdHYucmVzZXRMYXlvdXQoKTtcbiAgICAgICAgICAgIHJlcy5wdXNoKEFycmF5LmZyb20odHYudmlld2VycykubGVuZ3RoKTtcbiAgICAgICAgICAgIHR2LmxvYWRMYXlvdXQobGF5b3V0KTtcbiAgICAgICAgICAgIHlpZWxkIGF3YWl0Q2hlY2soKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgIT09IG51bGwsICdjYW5ub3QgbG9hZCB2aWV3ZXIgZnJvbSBsYXlvdXQnLCAzMDAwKTtcbiAgICAgICAgICAgIHlpZWxkIGRlbGF5KDI1MCk7XG4gICAgICAgICAgICByZXMucHVzaChBcnJheS5mcm9tKHR2LnZpZXdlcnMpLmxlbmd0aCk7XG4gICAgICAgICAgICB2aWV3ZXIgPSBBcnJheS5mcm9tKHR2LnZpZXdlcnMpLmZpbmQoKHYpID0+IHYudHlwZSAhPT0gJ0dyaWQnKTtcbiAgICAgICAgICAgIGV4cGVjdEFycmF5KHJlcywgWzIsIDEsIDJdKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeSh2aWV3ZXIuZ2V0T3B0aW9ucygpLmxvb2spLCBKU09OLnN0cmluZ2lmeShvbGRQcm9wcykpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHYuY2xvc2UoKTtcbiAgICAgICAgICAgIGdyb2suc2hlbGwuY2xvc2VUYWJsZShkZik7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRHVnpkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluUmxjM1F1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3TzBGQlFVRXNUMEZCVHl4TFFVRkxMRWxCUVVrc1RVRkJUU3h0UWtGQmJVSXNRMEZCUXp0QlFVTXhReXhQUVVGUExFdEJRVXNzUlVGQlJTeE5RVUZOTEdsQ1FVRnBRaXhEUVVGRE8wRkJTM1JETEUxQlFVMHNRMEZCUXl4TlFVRk5MRXRCUVVzc1IwRkxaQ3hGUVVGRkxFTkJRVU03UVVGRlVDeE5RVUZOTEdkQ1FVRm5RaXhIUVVGSExGbEJRVmtzUTBGQlF6dEJRVU4wUXl4TlFVRk5MR0ZCUVdFc1IwRkJOa0lzUlVGQlJTeERRVUZETzBGQlEyNUVMRTFCUVUwc1EwRkJReXhKUVVGSkxHVkJRWFZDTEVOQlFVTTdRVUZGYmtNc1RVRkJUU3hMUVVGWExFMUJRVTBzUTBGTGRFSTdRVUZNUkN4WFFVRnBRaXhOUVVGTk8wbEJRM0pDTEZOQlFXZENMRTlCUVU4c1EwRkJReXhMUVVGVkxFVkJRVVVzU1VGQllUdFJRVU12UXl4SlFVRkpMRXRCUVVzc1NVRkJTU3hKUVVGSk8xbEJRMllzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4SFFVRkhMRWxCUVVrc1NVRkJTU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hqUVVGakxFTkJRVU1zUTBGQlF6dEpRVU53UlN4RFFVRkRPMGxCU0dVc1kwRkJUeXhWUVVkMFFpeERRVUZCTzBGQlEwZ3NRMEZCUXl4RlFVeG5RaXhOUVVGTkxFdEJRVTRzVFVGQlRTeFJRVXQwUWp0QlFWRkVMRTFCUVUwc1QwRkJUeXhYUVVGWE8wbEJTWFJDTEZsQlFWa3NZMEZCZDBJc1JVRkJSU3hOUVVGblFqdFJRVWgwUkN4dFFrRkJZeXhIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU4wUWl4WFFVRk5MRWRCUVVjc1MwRkJTeXhEUVVGRE8xRkJSMklzU1VGQlNTeGpRVUZqTEV0QlFVc3NVMEZCVXp0WlFVRkZMRWxCUVVrc1EwRkJReXhqUVVGakxFZEJRVWNzWTBGQll5eERRVUZETzFGQlEzWkZMRWxCUVVrc1RVRkJUU3hMUVVGTExGTkJRVk03V1VGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJRenRKUVVOcVJDeERRVUZETzBsQlFVRXNRMEZCUXp0RFFVTklPMEZCUlVRc1RVRkJUU3hQUVVGUExFbEJRVWs3U1VGTlppeFpRVUZaTEZGQlFXZENMRVZCUVVVc1NVRkJXU3hGUVVGRkxFbEJRWGRDTEVWQlFVVXNUMEZCY1VJN08xRkJRM3BHTEVsQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1VVRkJVU3hEUVVGRE8xRkJRM3BDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMnBDTEU5QlFVOHNZVUZCVUN4UFFVRlBMR05CUVZBc1QwRkJUeXhKUVVGUUxFOUJRVThzUjBGQlN5eEZRVUZGTEVWQlFVTTdVVUZEWml4TlFVRkJMRTlCUVU4c1EwRkJReXhQUVVGUExHOURRVUZtTEU5QlFVOHNRMEZCUXl4UFFVRlBMRWRCUVVzc1MwRkJTeXhGUVVGRE8xRkJRekZDTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1QwRkJUeXhEUVVGRE8xRkJRM1pDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1IwRkJkVUlzUlVGQlJUdFpRVU51UXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGRExFTkJRVThzVDBGQlR5eEZRVUZGTEUxQlFVMHNSVUZCUlN4RlFVRkZPMmRDUVVNelF5eEpRVUZKTEUxQlFVMHNSMEZCUnl4RlFVRkZMRU5CUVVNN1owSkJRMmhDTEVsQlFVazdiMEpCUTBZc1RVRkJUU3hIUVVGSExFMUJRVTBzU1VGQlNTeEZRVUZGTEVOQlFVTTdhVUpCUTNaQ08yZENRVUZETEU5QlFVOHNRMEZCVFN4RlFVRkZPMjlDUVVObUxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0cFFrRkRXRHRuUWtGRFJDeFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRiRUlzUTBGQlF5eERRVUZCTEVOQlFVTXNRMEZCUXp0UlFVTk1MRU5CUVVNc1EwRkJRU3hEUVVGRE8wbEJRMG9zUTBGQlF6dERRVU5HTzBGQlJVUXNUVUZCVFN4VlFVRm5RaXhUUVVGVExFTkJRVWtzUzBGQmIwSXNSVUZEY2tRc1QwRkJNRUlzUlVGQlJTeFBRVUZ0UWl4RlFVRkZMRXRCUVdFc1EwRkJRenM3VVVGREwwUXNTVUZCU1N4SFFVRnBRaXhEUVVGRE8xRkJRM1JDTEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1EwRkJReXhQUVVGUExFVkJRVVVzVFVGQlRTeEZRVUZGTEVWQlFVVTdXVUZEY2tNc1IwRkJSeXhIUVVGSExFdEJRVXNzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1JVRkJSVHRuUWtGRE4wSXNTVUZCU1R0dlFrRkRSaXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdhVUpCUTJZN1owSkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdiMEpCUTFZc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJsQ1FVTllPMmRDUVVORUxFZEJRVWNzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXp0blFrRkRiRUlzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTJoQ0xFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEwZ3NWVUZCVlN4RFFVRkRMRWRCUVVjc1JVRkJSVHRuUWtGRFpDeEhRVUZITEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN1owSkJRMnhDTEhkRVFVRjNSRHRuUWtGRGVFUXNUVUZCVFN4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8xbEJRM0JDTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRaUVVOUUxFOUJRVThzUlVGQlJTeERRVUZETzFGQlExb3NRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRUQ3hEUVVGRE8wTkJRVUU3UVVGRlJDeE5RVUZOTEZWQlFWVXNTVUZCU1N4RFFVRkRMRWxCUVZrc1JVRkJSU3hKUVVGM1FpeEZRVUZGTEU5QlFYRkNPMGxCUTJoR0xFbEJRVWtzUzBGQlN5eERRVUZETEdWQlFXVXNRMEZCUXl4SlFVRkpMRk5CUVZNN1VVRkRja01zUzBGQlN5eERRVUZETEdWQlFXVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVNNVFpeEpRVUZKTEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJReXhMUVVGTExFbEJRVWtzVTBGQlV6dFJRVU16UXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zUzBGQlN5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTndReXhMUVVGTExFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTXNTMEZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eGxRVUZsTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEzSkdMRU5CUVVNN1FVRkZSQ3huUmtGQlowWTdRVUZEYUVZc1RVRkJUU3hWUVVGVkxFMUJRVTBzUTBGQlF5eE5RVUZYTEVWQlFVVXNWMEZCWjBJc1NVRkJTU3hGUVVGRkxFdEJRV003U1VGRGRFVXNTVUZCU1N4TFFVRkxPMUZCUTFBc1MwRkJTeXhIUVVGSExFZEJRVWNzUzBGQlN5eEpRVUZKTEVOQlFVTTdPMUZCUTJ4Q0xFdEJRVXNzUjBGQlJ5eEZRVUZGTEVOQlFVTTdTVUZEYUVJc1NVRkJTU3hOUVVGTkxFdEJRVXNzVVVGQlVUdFJRVU55UWl4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExFZEJRVWNzUzBGQlN5eGhRVUZoTEZGQlFWRXNWMEZCVnl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRM1pGTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1YwRkJWeXhEUVVGRExFMUJRV01zUlVGQlJTeFJRVUZuUWl4RlFVRkZMRk5CUVZNc1IwRkJSeXhMUVVGTExFVkJRVVVzUzBGQll6dEpRVU0zUml4SlFVRkpMRU5CUVVNc1RVRkJUU3hMUVVGTExFMUJRVTBzUTBGQlF5eHBRa0ZCYVVJc1NVRkJTU3hSUVVGUkxFdEJRVXNzVFVGQlRTeERRVUZETEdsQ1FVRnBRaXhEUVVGRE8xRkJRemxGTEVOQlFVTXNUVUZCVFN4TFFVRkxMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNTVUZCU1N4UlFVRlJMRXRCUVVzc1RVRkJUU3hEUVVGRExHbENRVUZwUWl4RFFVRkRPMUZCUXpsRkxFTkJRVU1zVFVGQlRTeExRVUZMTEUxQlFVMHNRMEZCUXl4SFFVRkhMRWxCUVVrc1VVRkJVU3hMUVVGTExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRNVVlzVDBGQlR6dEpRVU5VTEUxQlFVMHNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeEhRVUZITEZGQlFWRXNRMEZCUXl4SFFVRkhMRk5CUVZNc1EwRkJRenRKUVVONlJDeE5RVUZOTEVOQlFVTXNVVUZCVVN4RlFVRkZMRWxCUVVrc1JVRkJSU3hIUVVGSExFdEJRVXNzWVVGQlRDeExRVUZMTEdOQlFVd3NTMEZCU3l4SFFVRkpMRVZCUVVVc2FVSkJRV2xDTEZOQlFWTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRjRVVzU1VGQlNTeERRVUZETEZGQlFWRTdVVUZEV0N4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExGbEJRVmtzVVVGQlVTeFRRVUZUTEUxQlFVMHNhVUpCUVdsQ0xGTkJRVk1zUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZEZEVZc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeFhRVUZYTEVOQlFVTXNUVUZCYVVJc1JVRkJSU3hSUVVGdFFpeEZRVUZGTEV0QlFXTTdTVUZEYUVZc1RVRkJUU3huUWtGQlowSXNSMEZCUnl4UlFVRlJMRU5CUVVNc1VVRkJVU3hEUVVGRE8wbEJRek5ETEUxQlFVMHNZMEZCWXl4SFFVRkhMRTFCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU03U1VGRGRrTXNUVUZCVFN4RFFVRkRMR05CUVdNc1JVRkJSU3huUWtGQlowSXNSVUZCUlN4SFFVRkhMRXRCUVVzc1lVRkJUQ3hMUVVGTExHTkJRVXdzUzBGQlN5eEhRVUZKTEVWQlFVVXNZVUZCWVN4RFFVRkRMRU5CUVVNN1NVRkZkRVVzUzBGQlN5eE5RVUZOTEUxQlFVMHNTVUZCU1N4UlFVRlJMRU5CUVVNc1QwRkJUeXhGUVVGRk8xRkJRM0pETEUxQlFVMHNXVUZCV1N4SFFVRkhMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVONFJDeEpRVUZKTEZsQlFWa3NTVUZCU1N4SlFVRkpPMWxCUTNSQ0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNWVUZCVlN4TlFVRk5MRU5CUVVNc1NVRkJTU3haUVVGWkxFTkJRVU1zUTBGQlF6dFJRVU55UkN4SlFVRkpMRmxCUVZrc1EwRkJReXhKUVVGSkxFbEJRVWtzVFVGQlRTeERRVUZETEVsQlFVazdXVUZEYkVNc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eFZRVUZWTEUxQlFVMHNRMEZCUXl4SlFVRkpMR3RDUVVGclFpeE5RVUZOTEVOQlFVTXNTVUZCU1N4UlFVRlJMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eERRVUZETzFGQlEycEhMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4blFrRkJaMElzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTjZReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRelZDTEUxQlFVMHNWMEZCVnl4SFFVRkhMRmxCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEZUVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTenRuUWtGRE9VSXNWMEZCVnl4RFFVRkRMRmRCUVZjc1JVRkJSU3hMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMmxDUVVNMVF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4SlFVRkpMRWxCUVVrc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTzJkQ1FVTjJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hKUVVGSkxFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdPMmRDUVVVdlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RlFVRkZMRXRCUVVzc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFRRVU55UXp0TFFVTkdPMEZCUTBnc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeFpRVUZaTEVOQlFVTXNUVUZCT0VJc1JVRkJSU3hSUVVGblF6dEpRVU16Uml4TFFVRkxMRTFCUVUwc1EwRkJReXhYUVVGWExFVkJRVVVzWVVGQllTeERRVUZETEVsQlFVa3NUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU1zUlVGQlJUdFJRVU51UlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExHTkJRV01zUTBGQlF5eFhRVUZYTEVOQlFVTTdXVUZEY2tNc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eHpRa0ZCYzBJc1YwRkJWeXhoUVVGaExFTkJRVU1zUTBGQlF6dFJRVVZzUlN4TlFVRk5MRmRCUVZjc1IwRkJSeXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdVVUZEZUVNc1NVRkJTU3hYUVVGWExGbEJRVmtzUzBGQlN5eEpRVUZKTEdGQlFXRXNXVUZCV1N4TFFVRkxPMWxCUTJoRkxGZEJRVmNzUTBGQlF5eFhRVUZYTEVWQlFVVXNZVUZCWVN4RFFVRkRMRU5CUVVNN1lVRkRja01zU1VGQlNTeFhRVUZYTEZsQlFWa3NUVUZCVFN4SlFVRkpMR0ZCUVdFc1dVRkJXU3hOUVVGTk8xbEJRM1pGTEZsQlFWa3NRMEZCUXl4WFFVRlhMRVZCUVVVc1lVRkJZU3hEUVVGRExFTkJRVU03WVVGRGRFTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1VVRkJVU3hEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1lVRkJZU3hEUVVGRE8xbEJRM0pGTEZkQlFWY3NRMEZCUXl4WFFVRlhMRVZCUVVVc1lVRkJZU3hEUVVGRExFTkJRVU03WVVGRGNrTXNTVUZCU1N4WFFVRlhMRWxCUVVrc1lVRkJZVHRaUVVOdVF5eE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMR0ZCUVdFc1lVRkJZU3hqUVVGakxGZEJRVmNzVjBGQlZ5eFhRVUZYTEVkQlFVY3NRMEZCUXl4RFFVRkRPMHRCUTJwSE8wRkJRMGdzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4WFFVRlhMRU5CUVVNc1RVRkJjMElzUlVGQlJTeFJRVUYzUWp0SlFVTXhSU3hOUVVGTkxGbEJRVmtzUjBGQlJ5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRPMGxCUTI1RExFMUJRVTBzWTBGQll5eEhRVUZITEZGQlFWRXNRMEZCUXl4TlFVRk5MRU5CUVVNN1NVRkZka01zU1VGQlNTeFpRVUZaTEVsQlFVa3NZMEZCWXl4RlFVRkZPMUZCUTJ4RExFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNNRVJCUVRCRUxGbEJRVmtzUjBGQlJ6dFpRVU4yUml4blEwRkJaME1zWTBGQll5eEZRVUZGTEVOQlFVTXNRMEZCUXp0TFFVTnlSRHRKUVVWRUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhaUVVGWkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdVVUZEY2tNc1NVRkJTU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEZsQlFWa3NTMEZCU3l4SlFVRkpMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zV1VGQldTeExRVUZMTzFsQlF6VkVMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WVVGRGFrTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExGbEJRVmtzVFVGQlRTeEpRVUZKTEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJXU3hOUVVGTk8xbEJRMjVGTEZsQlFWa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRiRU1zU1VGQlNTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU12UWl4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExGbEJRVmtzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eFRRVUZUTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03UzBGRGFrWTdRVUZEU0N4RFFVRkRPMEZCUlVRc01rSkJRVEpDTzBGQlF6TkNMRTFCUVUwc1ZVRkJWU3hSUVVGUkxFTkJRVU1zVVVGQlowSXNSVUZCUlN4TFFVRnBRanRKUVVNeFJDeGxRVUZsTEVkQlFVY3NVVUZCVVN4RFFVRkRPMGxCUXpOQ0xFdEJRVXNzUlVGQlJTeERRVUZETzBGQlExWXNRMEZCUXp0QlFVVkVMSFZHUVVGMVJqdEJRVU4yUml4TlFVRk5MRlZCUVZVc1RVRkJUU3hEUVVGRExFMUJRVEpDTzBsQlEyaEVMRWxCUVVrc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eEpRVUZKTEZOQlFWTTdVVUZEY2tNc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTTVRaXhMUVVGTExFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJRenRCUVVONlF5eERRVUZETzBGQlJVUXNjMFpCUVhOR08wRkJRM1JHTEUxQlFVMHNWVUZCVlN4TFFVRkxMRU5CUVVNc1MwRkJNRUk3U1VGRE9VTXNTVUZCU1N4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFbEJRVWtzVTBGQlV6dFJRVU55UXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzBsQlF6bENMRXRCUVVzc1EwRkJReXhsUVVGbExFTkJRVU1zUTBGQlF5eExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRPMEZCUTNaRExFTkJRVU03UVVGRlJDeFRRVUZUTEZsQlFWa3NRMEZCUXl4RFFVRlRMRVZCUVVVc1EwRkJWVHRKUVVONlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEZGtRc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlowSXNZVUZCWVN4RFFVRkRMRk5CUVdsQ0xFVkJRVVVzVFVGQldUczdVVUZEYWtVc1NVRkJTU3hoUVVGaExFTkJRVU1zVTBGQlV5eERRVUZETzFsQlFVVXNUMEZCVHp0UlFVTnlReXhOUVVGTkxGZEJRVmNzUjBGQlJ5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXp0UlFVTnNSQ3hKUVVGSkxGZEJRVmNzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhMUVVGTExGTkJRVk1zUlVGQlJUdFpRVU12UXl4aFFVRmhMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETzFsQlEyaERMRTlCUVU4N1UwRkRVanRSUVVORUxFMUJRVTBzWlVGQlpTeEhRVUZITEVWQlFVVXNRMEZCUXp0UlFVTXpRaXhOUVVGTkxHRkJRV0VzUjBGQlJ5eE5RVUZOTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUTBGQlF5eHBRa0ZCYVVJc1UwRkJVeXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0UlFVTTNSaXhOUVVGTkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEUxQlFVMHNRMEZCUXl3d1FrRkJNRUlzUTBGQlF5eERRVUZETzFGQlEyNUVMRXRCUVVzc1RVRkJUU3hEUVVGRExFbEJRVWtzWVVGQllTeEZRVUZGTzFsQlF6ZENMRTFCUVUwc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRhRU1zU1VGQlNTeERRVUZETEVOQlFVTXNTMEZCU3l4SlFVRkpMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJRenRuUWtGQlJTeFRRVUZUTzFsQlF5OUVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzJkQ1FVTnlReXhOUVVGTkxGZEJRVmNzUjBGQlNTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRlpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzJkQ1FVTndSQ3hKUVVGSkxGVkJRVlVzUTBGQlF6dG5Ra0ZEWml4SlFVRkpMRmRCUVZjc1NVRkJTU3hEUVVGQkxGZEJRVmNzWVVGQldDeFhRVUZYTEhWQ1FVRllMRmRCUVZjc1EwRkJSU3hOUVVGTkxFbEJRVWNzUTBGQlF6dHZRa0ZCUlN4VlFVRlZMRWRCUVVjc1YwRkJWeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTjRSU3hsUVVGbExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMR2RDUVVGblFpeEZRVUZGTEV0QlFVc3NRMEZCUXl4TlFVRk5MRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hGUVVGRkxFZEJRVk1zUlVGQlJUdHZRa0ZETjBjc1RVRkJUU3hIUVVGSExFZEJRVWNzVFVGQlRTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03YjBKQlEycEZMRFJEUVVFMFF6dHZRa0ZETlVNc1NVRkJTU3hIUVVGSExFdEJRVXNzU1VGQlNUdDNRa0ZCUlN4TlFVRk5MRmRCUVZjc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTTdaMEpCUTJoRUxFTkJRVU1zUTBGQlFTeEZRVUZGTEVWQlFVTXNWVUZCVlN4RlFVRkZMRlZCUVZVc1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU12UWp0VFFVTkdPMUZCUTBRc1lVRkJZU3hEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTm9ReXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEUxQlFVMDdXVUZCUlN4UFFVRlBPMUZCUTNCRExGZEJRVmNzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhIUVVGSExFVkJRVU1zUzBGQlN5eEZRVUZGTEdWQlFXVXNSVUZCUXl4RFFVRkRPMGxCUXpORUxFTkJRVU03UTBGQlFUdEJRVVZFTEUxQlFVMHNWVUZCWjBJc1VVRkJVU3hEUVVGRExFOUJRWFZGT3pzN08xRkJRM0JITEUxQlFVMHNVVUZCVVN4SFFVRkhMRTFCUVVFc1RVRkJRU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEdOQlFXTXNSVUZCUlN3d1EwRkJSU3hKUVVGSkxEQkRRVUZGTEU5QlFVOHNRMEZCUXp0UlFVTm9SU3hOUVVGTkxHRkJRV0VzUTBGQlF5eFJRVUZSTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkRha01zVFVGQlRTeFBRVUZQTEVkQlEzVkVMRVZCUVVVc1EwRkJRenRSUVVOMlJTeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMR1ZCUVdVc1EwRkJReXhEUVVGRE8xRkJRemRDTEU5QlFVOHNZVUZCVUN4UFFVRlBMR05CUVZBc1QwRkJUeXhKUVVGUUxFOUJRVThzUjBGQlN5eEZRVUZGTEVWQlFVTTdVVUZEWml4WlFVRkJMRTlCUVZFc1JVRkJReXhYUVVGWExIVkRRVUZZTEZkQlFWY3NSMEZCU3l4SlFVRkpMRmRCUVZjc1JVRkJSU3hGUVVGRE8xRkJRek5ETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1UwRkJVeXhIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU14UWl4TFFVRkxMRTFCUVUwc1EwRkJReXhIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVsQlFVa3NUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJUdFpRVU5vUkN4SlFVRkpMRU5CUVVFc1QwRkJUeXhoUVVGUUxFOUJRVThzZFVKQlFWQXNUMEZCVHl4RFFVRkZMRkZCUVZFc1MwRkJTU3hUUVVGVExFVkJRVVU3WjBKQlEyeERMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRMRTlCUVU4c1lVRkJVQ3hQUVVGUExIVkNRVUZRTEU5QlFVOHNRMEZCUlN4UlFVRlJMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU03YjBKQlEyaEZMRk5CUVZNN1lVRkRXanRaUVVORUxFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNWMEZCVnl4SFFVRkhMRmRCUVZjc1EwRkJReXhEUVVGRE8xbEJRM1pETEVsQlFVazdaMEpCUTBZc1NVRkJTU3hMUVVGTExFTkJRVU1zVFVGQlRUdHZRa0ZEWkN4TlFVRk5MRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dGhRVU40UWp0WlFVRkRMRTlCUVU4c1EwRkJUU3hGUVVGRk8yZENRVU5tTEV0QlFVc3NRMEZCUXl4WlFVRlpMRWRCUVVjc1EwRkJReXhEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETzJGQlEyNURPMWxCUTBRc1RVRkJUU3hEUVVGRExFZEJRVWNzVFVGQlFTeExRVUZMTEVOQlFVTXNTMEZCU3l4dFEwRkJTU3hGUVVGRkxFTkJRVU03V1VGRE5VSXNUVUZCVFN4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRE8xbEJRMllzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZPMmRDUVVNdlFpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4UFFVRlBMR0ZCUVZBc1QwRkJUeXgxUWtGQlVDeFBRVUZQTEVOQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOb1JDeE5RVUZOTEVsQlFVa3NSMEZCUnl4RFFVRkRMRTFCUVUwc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1NVRkJTU3hUUVVGVExFTkJRVU1zUTBGQlF6dFpRVU16UlN4SlFVRkpPMmRDUVVOR0xFbEJRVWtzUzBGQlN5eERRVUZETEV0QlFVczdiMEpCUTJJc1RVRkJUU3hMUVVGTExFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdZVUZEZGtJN1dVRkJReXhQUVVGUExFTkJRVTBzUlVGQlJUdG5Ra0ZEWml4TFFVRkxMRU5CUVVNc1YwRkJWeXhIUVVGSExFTkJRVU1zUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0aFFVTnNRenRaUVVORUxFbEJRVWtzUzBGQlN5eERRVUZETEZkQlFWYzdaMEpCUTI1Q0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUXl4UlFVRlJMRVZCUVVVc1IwRkJSeXhGUVVGRkxFbEJRVWtzUlVGQlJTeE5RVUZOTEVWQlFVVXNUVUZCVFN4RlFVRkZMRXRCUVVzc1EwRkJReXhYUVVGWExFVkJRVVVzVDBGQlR5eEZRVUZGTEV0QlFVc3NSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFOUJRVThzUlVGQlJTeExRVUZMTEVWQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpkSExFbEJRVWtzUzBGQlN5eERRVUZETEZsQlFWazdaMEpCUTNCQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUXl4UlFVRlJMRVZCUVVVc1IwRkJSeXhGUVVGRkxFbEJRVWtzUlVGQlJTeE5RVUZOTEVWQlFVVXNUVUZCVFN4RlFVRkZMRXRCUVVzc1EwRkJReXhaUVVGWkxFVkJRVVVzVDBGQlR5eEZRVUZGTEV0QlFVc3NSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFOUJRVThzUlVGQlJTeExRVUZMTEVWQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpsSExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRUUVVOMlFqdFJRVU5FTEVsQlFVa3NUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhqUVVGakxFVkJRVVU3V1VGRGRFTXNUVUZCVFN4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03V1VGRGJFSXNTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RlFVRkZPMmRDUVVOdVF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRPMjlDUVVOWUxGRkJRVkVzUlVGQlJTeHpRa0ZCYzBJN2IwSkJRMmhETEVsQlFVa3NSVUZCUlN4WlFVRlpPMjlDUVVOc1FpeE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhUUVVGVExFVkJRVVVzVDBGQlR5eEZRVUZGTEV0QlFVc3NSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFOUJRVThzUlVGQlJTeExRVUZMTzJsQ1FVTndSU3hEUVVGRExFTkJRVU03WVVGRFNqdFRRVU5HTzFGQlEwUXNTVUZCU1N4UFFVRlBMRU5CUVVNc1YwRkJWeXhEUVVGRExFMUJRVTBzUlVGQlJUdFpRVU01UWl4TlFVRk5MRTFCUVUwc1IwRkJSeXhKUVVGSkxFVkJRVVVzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0WlFVTXZRaXhOUVVGTkxGVkJRVlVzUjBGQlJ5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRE8xbEJRek5FTEUxQlFVMHNUMEZCVHl4SFFVRkhMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTTdXVUZEZUVRc1RVRkJUU3hOUVVGTkxFZEJRVWNzVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1dVRkRha1FzVFVGQlRTeFhRVUZYTEVkQlFVY3NlVVpCUVhsR0xFTkJRVU03V1VGRE9VY3NUVUZCVFN4TlFVRk5MRWRCUVVjN1owSkJRMklzVlVGQlZTeEZRVUZGTEZWQlFWVTdaMEpCUTNSQ0xFOUJRVThzUlVGQlJTeFBRVUZQTzJkQ1FVTm9RaXhOUVVGTkxFVkJRVVVzVFVGQlRTeERRVUZETEUxQlFVMDdaMEpCUTNKQ0xFOUJRVThzUlVGQlJTeFJRVUZSTzJGQlEyeENMRU5CUVVNN1dVRkRSaXhMUVVGTExFMUJRVTBzUTBGQlF5eEpRVUZKTEUxQlFVMDdaMEpCUVVVc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExGRkJRVkVzVFVGQlRTeERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZETEVOQlFVTXNRMEZCUXp0WlFVTjZSaXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEZkQlFWY3NSVUZCUlN4TlFVRk5MRVZCUVVVc1owSkJRV2RDTEVOQlFVTXNRMEZCUXp0VFFVTnVSRHRSUVVORUxFOUJRVThzVDBGQlR5eERRVUZET3p0RFFVTm9RanRCUVVWRUxGTkJRV1VzVVVGQlVTeERRVUZETEVOQlFVOHNSVUZCUlN4VFFVRTJRanM3TzFGQlF6VkVMRWxCUVVrc1EwRkJkVWNzUTBGQlF6dFJRVU0xUnl4TlFVRk5MRTFCUVUwc1IwRkJSeXhUUVVGVExFbEJRVWtzVTBGQlV5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXl4VFFVRlRMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzSkhMRTFCUVUwc1NVRkJTU3hIUVVGSExFTkJRVUVzVFVGQlFTeERRVUZETEVOQlFVTXNUMEZCVHl3d1EwRkJSU3hWUVVGVkxFdEJRVWtzVFVGQlRTeERRVUZETzFGQlF6ZERMRTFCUVUwc1ZVRkJWU3hIUVVGSExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGQkxFTkJRVU1zUTBGQlF5eFBRVUZQTERCRFFVRkZMRlZCUVZVc1EwRkJRenRSUVVNNVJDeEpRVUZKTEVOQlFVTXNTVUZCU1R0WlFVTlFMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNVVUZCVVN4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eERRVUZETzFGQlEycEVMRTFCUVUwc1MwRkJTeXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTTdVVUZEZWtJc1NVRkJTVHRaUVVOR0xFbEJRVWtzU1VGQlNUdG5Ra0ZEVGl4RFFVRkRMRWRCUVVjc1JVRkJReXhQUVVGUExFVkJRVVVzU1VGQlNTeEZRVUZGTEUxQlFVMHNSVUZCUlN4VlFVRlhMRVZCUVVVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeFBRVUZQTEVWQlFVVXNTVUZCU1N4RlFVRkRMRU5CUVVNN08yZENRVVV2UkN4RFFVRkRMRWRCUVVjc1JVRkJReXhQUVVGUExFVkJRVVVzU1VGQlNTeEZRVUZGTEUxQlFVMHNSVUZCUlN4TlFVRkJMRTFCUVUwc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeHRRMEZCU1N4SlFVRkpMRVZCUVVVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeFBRVUZQTEVWQlFVVXNTMEZCU3l4RlFVRkRMRU5CUVVNN1UwRkRPVVU3VVVGQlF5eFBRVUZQTEVOQlFVMHNSVUZCUlR0WlFVTm1MRU5CUVVNc1IwRkJSeXhGUVVGRExFOUJRVThzUlVGQlJTeExRVUZMTEVWQlFVVXNUVUZCVFN4RlFVRkZMRU5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVU1zUTBGQlF6dFRRVU51UlR0UlFVTkVMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTTdVVUZEZUVJc1lVRkJZVHRSUVVOaUxFTkJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NTVUZCU1N4SFFVRkhMRXRCUVVzc1EwRkJRenRSUVVOd1FpeEpRVUZKTEVOQlFVTXNTVUZCU1R0WlFVTlFMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTXNVVUZCVVN4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxGRkJRVkVzUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkRha1VzUTBGQlF5eERRVUZETEZGQlFWRXNSMEZCUnl4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRE8xRkJRM2hDTEVOQlFVTXNRMEZCUXl4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6dFJRVU5vUWl4UFFVRlBMRU5CUVVNc1EwRkJRenM3UTBGRFZqdEJRVVZFTERaQ1FVRTJRanRCUVVNM1FpeE5RVUZOTEZWQlFXZENMRXRCUVVzc1EwRkJReXhGUVVGVk96dFJRVU53UXl4TlFVRk5MRWxCUVVrc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZET1VNc1EwRkJRenREUVVGQk8wRkJSVVFzVFVGQlRTeFZRVUZuUWl4VlFVRlZMRU5CUVVNc1dVRkJNa0lzUlVGRE1VUXNVVUZCWjBJc2EwSkJRV3RDTEVWQlFVVXNUMEZCWlN4SFFVRkhMRVZCUVVVc1YwRkJiVUlzUlVGQlJUczdVVUZETjBVc1QwRkJUeXhKUVVGSkxFOUJRVThzUTBGQlF5eERRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5MRVZCUVVVc1JVRkJSVHRaUVVOeVF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RlFVRkZPMmRDUVVOa0xHRkJRV0VzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXp0blFrRkRNVUlzVFVGQlRTeERRVUZETEVsQlFVa3NTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRE0wSXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8xbEJRMVFzWVVGQllUdFpRVU5pTEUxQlFVMHNWVUZCVlN4SFFVRlpMRmRCUVZjc1EwRkJReXhIUVVGSExFVkJRVVU3WjBKQlF6TkRMRWxCUVVrc1dVRkJXU3hGUVVGRkxFVkJRVVU3YjBKQlEyeENMR0ZCUVdFc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dHZRa0ZETVVJc1QwRkJUeXhGUVVGRkxFTkJRVU03YVVKQlExZzdXVUZEU0N4RFFVRkRMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU03VVVGRFppeERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTk1MRU5CUVVNN1EwRkJRVHRCUVVWRUxFMUJRVTBzVlVGQlZTeGxRVUZsTEVOQlFVTXNWMEZCYlVJN1NVRkRha1FzVFVGQlRTeFBRVUZQTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhqUVVGakxFVkJRVVVzUTBGQlF6dEpRVU16UXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFJRVU4yUXl4SlFVRkpMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVsQlFVa3NWMEZCVnp0WlFVTnFReXhQUVVGUExFbEJRVWtzUTBGQlF6dExRVU5tTzBsQlEwUXNUMEZCVHl4TFFVRkxMRU5CUVVNN1FVRkRaaXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZuUWl4VlFVRlZMRU5CUVVNc1EwRkJVeXhGUVVGRkxFVkJRV2RDTEVWQlFVVXNjMEpCUVN0Q0xFdEJRVXM3TzFGQlEyaEhMRWxCUVVrc2JVSkJRVzFDTzFsQlFVVXNUVUZCVFN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRMnBGTEUxQlFVMHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zV1VGQldTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNaRExFMUJRVTBzVlVGQlZTeEhRVUZITEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRE8xRkJReTlFTEUxQlFVMHNVVUZCVVN4SFFVRkhMRWRCUVVjc1ZVRkJWU3hYUVVGWExGVkJRVlVzVVVGQlVTeFZRVUZWTzAxQlEycEZMRlZCUVZVc1ZVRkJWU3hWUVVGVkxFOUJRVThzVlVGQlZTeEpRVUZKTEVOQlFVTTdVVUZEZUVRc1RVRkJUU3hIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETzFGQlEyWXNTVUZCU1R0WlFVTkdMRWxCUVVrc1RVRkJUU3hIUVVGSExFVkJRVVVzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkROMElzVFVGQlRTeFZRVUZWTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1VVRkJVU3hEUVVGRExHRkJRV0VzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4SlFVRkpMRVZCUXpsRUxHOUNRVUZ2UWl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8xbEJRemxDTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03V1VGRGVFTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0WlFVTXpSQ3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTndSQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJUdG5Ra0ZCUlN4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1dVRkRja1FzUlVGQlJTeERRVUZETEdGQlFXRXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRja0lzVFVGQlRTeExRVUZMTEVkQlFVY3NUVUZCVFN4RFFVRkRMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTTdXVUZETTBNc1RVRkJUU3hSUVVGUkxFZEJRVFJDTEVWQlFVVXNRMEZCUXp0WlFVTTNReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNUMEZCVHl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzVTBGQlV5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTjRSeXhOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMWxCUXpWQ0xFMUJRVTBzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTJwQ0xFMUJRVTBzVFVGQlRTeEhRVUZITEVWQlFVVXNRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJRenRaUVVNdlFpeE5RVUZOTEZGQlFWRXNSMEZCUnl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETzFsQlF6RkRMRVZCUVVVc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dFpRVU5xUWl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFsQlEzaERMRVZCUVVVc1EwRkJReXhWUVVGVkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEZEVJc1RVRkJUU3hWUVVGVkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNVVUZCVVN4RFFVRkRMR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eEpRVUZKTEVWQlF6bEVMR2REUVVGblF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUXpGRExFMUJRVTBzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTJwQ0xFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRlRU1zVFVGQlRTeEhRVUZITEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NTMEZCU3l4TlFVRk5MRU5CUVVVc1EwRkJRenRaUVVOb1JTeFhRVUZYTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpWQ0xFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTTdVMEZETlVVN1owSkJRVk03V1VGRFVpeEZRVUZGTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1dVRkRXQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFWVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRUUVVNelFqdEpRVU5JTEVOQlFVTTdRMEZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENBcUlHRnpJR2R5YjJzZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyZHliMnNuTzF4dWFXMXdiM0owSUNvZ1lYTWdSRWNnWm5KdmJTQW5aR0YwWVdkeWIyc3RZWEJwTDJSbkp6dGNibWx0Y0c5eWRDQjdUMkp6WlhKMllXSnNaU3dnVTNWaWMyTnlhWEIwYVc5dWZTQm1jbTl0SUNkeWVHcHpKenRjYm1sdGNHOXlkQ0JVYVcxbGIzVjBJRDBnVG05a1pVcFRMbFJwYldWdmRYUTdYRzVwYlhCdmNuUWdlMFJoZEdGR2NtRnRaWDBnWm5KdmJTQW5aR0YwWVdkeWIyc3RZWEJwTDJSbkp6dGNibHh1Wlhod2IzSjBJR052Ym5OMElIUmxjM1J6T2lCN1hHNGdJRnRyWlhrNklITjBjbWx1WjEwNklIdGNiaUFnSUNCMFpYTjBjejg2SUZSbGMzUmJYU3dnWW1WbWIzSmxQem9nS0NrZ1BUNGdVSEp2YldselpUeDJiMmxrUGl3Z1lXWjBaWEkvT2lBb0tTQTlQaUJRY205dGFYTmxQSFp2YVdRK0xGeHVJQ0FnSUdKbFptOXlaVk4wWVhSMWN6ODZJSE4wY21sdVp5d2dZV1owWlhKVGRHRjBkWE0vT2lCemRISnBibWRjYmlBZ2ZWeHVmU0E5SUh0OU8xeHVYRzVqYjI1emRDQmhkWFJ2VkdWemRITkRZWFJPWVcxbElEMGdKMEYxZEc4Z1ZHVnpkSE1uTzF4dVkyOXVjM1FnZDJGelVtVm5hWE4wWlhKbFpEb2dlMXRyWlhrNklITjBjbWx1WjEwNklHSnZiMnhsWVc1OUlEMGdlMzA3WEc1bGVIQnZjblFnYkdWMElHTjFjbkpsYm5SRFlYUmxaMjl5ZVRvZ2MzUnlhVzVuTzF4dVhHNWxlSEJ2Y25RZ2JtRnRaWE53WVdObElHRnpjM1Z5WlNCN1hHNGdJR1Y0Y0c5eWRDQm1kVzVqZEdsdmJpQnViM1JPZFd4c0tIWmhiSFZsT2lCaGJua3NJRzVoYldVL09pQnpkSEpwYm1jcElIdGNiaUFnSUNCcFppQW9kbUZzZFdVZ1BUMGdiblZzYkNsY2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnSkh0dVlXMWxJRDA5SUc1MWJHd2dQeUFuVm1Gc2RXVW5JRG9nYm1GdFpYMGdibTkwSUdSbFptbHVaV1JnS1R0Y2JpQWdmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElGUmxjM1JQY0hScGIyNXpJSHRjYmlBZ2RHbHRaVzkxZEQ4NklHNTFiV0psY2p0Y2JpQWdkVzVvWVc1a2JHVmtSWGhqWlhCMGFXOXVWR2x0Wlc5MWREODZJRzUxYldKbGNqdGNiaUFnYzJ0cGNGSmxZWE52Ymo4NklITjBjbWx1Wnp0Y2JuMWNibHh1Wlhod2IzSjBJR05zWVhOeklGUmxjM1JEYjI1MFpYaDBJSHRjYmlBZ1kyRjBZMmhWYm1oaGJtUnNaV1FnUFNCMGNuVmxPMXh1SUNCeVpYQnZjblFnUFNCbVlXeHpaVHRjYmx4dUlDQmpiMjV6ZEhKMVkzUnZjaWhqWVhSamFGVnVhR0Z1Wkd4bFpEODZJR0p2YjJ4bFlXNHNJSEpsY0c5eWREODZJR0p2YjJ4bFlXNHBJSHRjYmlBZ0lDQnBaaUFvWTJGMFkyaFZibWhoYm1Sc1pXUWdJVDA5SUhWdVpHVm1hVzVsWkNrZ2RHaHBjeTVqWVhSamFGVnVhR0Z1Wkd4bFpDQTlJR05oZEdOb1ZXNW9ZVzVrYkdWa08xeHVJQ0FnSUdsbUlDaHlaWEJ2Y25RZ0lUMDlJSFZ1WkdWbWFXNWxaQ2tnZEdocGN5NXlaWEJ2Y25RZ1BTQnlaWEJ2Y25RN1hHNGdJSDA3WEc1OVhHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCVVpYTjBJSHRjYmlBZ2RHVnpkRG9nS0NrZ1BUNGdVSEp2YldselpUeGhibmsrTzF4dUlDQnVZVzFsT2lCemRISnBibWM3WEc0Z0lHTmhkR1ZuYjNKNU9pQnpkSEpwYm1jN1hHNGdJRzl3ZEdsdmJuTS9PaUJVWlhOMFQzQjBhVzl1Y3p0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2loallYUmxaMjl5ZVRvZ2MzUnlhVzVuTENCdVlXMWxPaUJ6ZEhKcGJtY3NJSFJsYzNRNklDZ3BJRDArSUZCeWIyMXBjMlU4WVc1NVBpd2diM0IwYVc5dWN6ODZJRlJsYzNSUGNIUnBiMjV6S1NCN1hHNGdJQ0FnZEdocGN5NWpZWFJsWjI5eWVTQTlJR05oZEdWbmIzSjVPMXh1SUNBZ0lIUm9hWE11Ym1GdFpTQTlJRzVoYldVN1hHNGdJQ0FnYjNCMGFXOXVjeUEvUHowZ2UzMDdYRzRnSUNBZ2IzQjBhVzl1Y3k1MGFXMWxiM1YwSUQ4L1BTQXpNREF3TUR0Y2JpQWdJQ0IwYUdsekxtOXdkR2x2Ym5NZ1BTQnZjSFJwYjI1ek8xeHVJQ0FnSUhSb2FYTXVkR1Z6ZENBOUlHRnplVzVqSUNncE9pQlFjbTl0YVhObFBHRnVlVDRnUFQ0Z2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtHRnplVzVqSUNoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lDQWdiR1YwSUhKbGMzVnNkQ0E5SUNjbk8xeHVJQ0FnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNBZ0lISmxjM1ZzZENBOUlHRjNZV2wwSUhSbGMzUW9LVHRjYmlBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlRvZ1lXNTVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVnFaV04wS0dVcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSEpsYzI5c2RtVW9jbVZ6ZFd4MEtUdGNiaUFnSUNBZ0lIMHBPMXh1SUNBZ0lIMDdYRzRnSUgxY2JuMWNibHh1Wlhod2IzSjBJR0Z6ZVc1aklHWjFibU4wYVc5dUlIUmxjM1JGZG1WdWREeFVQaWhsZG1WdWREb2dUMkp6WlhKMllXSnNaVHhVUGl4Y2JpQWdhR0Z1Wkd4bGNqb2dLR0Z5WjNNNklGUXBJRDArSUhadmFXUXNJSFJ5YVdkblpYSTZJQ2dwSUQwK0lIWnZhV1FzSUcxek9pQnVkVzFpWlhJZ1BTQXdLVG9nVUhKdmJXbHpaVHh6ZEhKcGJtYytJSHRjYmlBZ2JHVjBJSE4xWWpvZ1UzVmljMk55YVhCMGFXOXVPMXh1SUNCeVpYUjFjbTRnYm1WM0lGQnliMjFwYzJVb0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1SUNBZ0lITjFZaUE5SUdWMlpXNTBMbk4xWW5OamNtbGlaU2dvWVhKbmN5a2dQVDRnZTF4dUlDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdhR0Z1Wkd4bGNpaGhjbWR6S1R0Y2JpQWdJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNBZ0lDQWdjbVZxWldOMEtHVXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdjM1ZpTG5WdWMzVmljMk55YVdKbEtDazdYRzRnSUNBZ0lDQnlaWE52YkhabEtDZFBTeWNwTzF4dUlDQWdJSDBwTzF4dUlDQWdJSE5sZEZScGJXVnZkWFFvS0NrZ1BUNGdlMXh1SUNBZ0lDQWdjM1ZpTG5WdWMzVmljMk55YVdKbEtDazdYRzRnSUNBZ0lDQXZMeUJsYzJ4cGJuUXRaR2x6WVdKc1pTMXVaWGgwTFd4cGJtVWdjSEpsWm1WeUxYQnliMjFwYzJVdGNtVnFaV04wTFdWeWNtOXljMXh1SUNBZ0lDQWdjbVZxWldOMEtDZDBhVzFsYjNWMEp5azdYRzRnSUNBZ2ZTd2diWE1wTzF4dUlDQWdJSFJ5YVdkblpYSW9LVHRjYmlBZ2ZTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCMFpYTjBLRzVoYldVNklITjBjbWx1Wnl3Z2RHVnpkRG9nS0NrZ1BUNGdVSEp2YldselpUeGhibmsrTENCdmNIUnBiMjV6UHpvZ1ZHVnpkRTl3ZEdsdmJuTXBPaUIyYjJsa0lIdGNiaUFnYVdZZ0tIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjBnUFQwZ2RXNWtaV1pwYm1Wa0tWeHVJQ0FnSUhSbGMzUnpXMk4xY25KbGJuUkRZWFJsWjI5eWVWMGdQU0I3ZlR0Y2JpQWdhV1lnS0hSbGMzUnpXMk4xY25KbGJuUkRZWFJsWjI5eWVWMHVkR1Z6ZEhNZ1BUMGdkVzVrWldacGJtVmtLVnh1SUNBZ0lIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjB1ZEdWemRITWdQU0JiWFR0Y2JpQWdkR1Z6ZEhOYlkzVnljbVZ1ZEVOaGRHVm5iM0o1WFM1MFpYTjBjeUV1Y0hWemFDaHVaWGNnVkdWemRDaGpkWEp5Wlc1MFEyRjBaV2R2Y25rc0lHNWhiV1VzSUhSbGMzUXNJRzl3ZEdsdmJuTXBLVHRjYm4xY2JseHVMeW9nVkdWemRITWdkSGR2SUc5aWFtVmpkSE1nWm05eUlHVnhkV0ZzYVhSNUxDQjBhSEp2ZDNNZ1lXNGdaWGhqWlhCMGFXOXVJR2xtSUhSb1pYa2dZWEpsSUc1dmRDQmxjWFZoYkM0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmxlSEJsWTNRb1lXTjBkV0ZzT2lCaGJua3NJR1Y0Y0dWamRHVmtPaUJoYm5rZ1BTQjBjblZsTENCbGNuSnZjajg2SUhOMGNtbHVaeWs2SUhadmFXUWdlMXh1SUNCcFppQW9aWEp5YjNJcFhHNGdJQ0FnWlhKeWIzSWdQU0JnSkh0bGNuSnZjbjBzSUdBN1hHNGdJR1ZzYzJVZ1pYSnliM0lnUFNBbkp6dGNiaUFnYVdZZ0tHRmpkSFZoYkNBaFBUMGdaWGh3WldOMFpXUXBYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dBa2UyVnljbTl5ZlVWNGNHVmpkR1ZrSUZ3aUpIdGxlSEJsWTNSbFpIMWNJaXdnWjI5MElGd2lKSHRoWTNSMVlXeDlYQ0pnS1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1Y0Y0dWamRFWnNiMkYwS0dGamRIVmhiRG9nYm5WdFltVnlMQ0JsZUhCbFkzUmxaRG9nYm5WdFltVnlMQ0IwYjJ4bGNtRnVZMlVnUFNBd0xqQXdNU3dnWlhKeWIzSS9PaUJ6ZEhKcGJtY3BPaUIyYjJsa0lIdGNiaUFnYVdZZ0tDaGhZM1IxWVd3Z1BUMDlJRTUxYldKbGNpNVFUMU5KVkVsV1JWOUpUa1pKVGtsVVdTQW1KaUJsZUhCbFkzUmxaQ0E5UFQwZ1RuVnRZbVZ5TGxCUFUwbFVTVlpGWDBsT1JrbE9TVlJaS1NCOGZGeHVJQ0FnSUNBZ0tHRmpkSFZoYkNBOVBUMGdUblZ0WW1WeUxrNUZSMEZVU1ZaRlgwbE9Sa2xPU1ZSWklDWW1JR1Y0Y0dWamRHVmtJRDA5UFNCT2RXMWlaWEl1VGtWSFFWUkpWa1ZmU1U1R1NVNUpWRmtwSUh4OFhHNGdJQ0FnSUNBb1lXTjBkV0ZzSUQwOVBTQk9kVzFpWlhJdVRtRk9JQ1ltSUdWNGNHVmpkR1ZrSUQwOVBTQk9kVzFpWlhJdVRtRk9LU0I4ZkNBb2FYTk9ZVTRvWVdOMGRXRnNLU0FtSmlCcGMwNWhUaWhsZUhCbFkzUmxaQ2twS1Z4dUlDQWdJSEpsZEhWeWJqdGNiaUFnWTI5dWMzUWdZWEpsUlhGMVlXd2dQU0JOWVhSb0xtRmljeWhoWTNSMVlXd2dMU0JsZUhCbFkzUmxaQ2tnUENCMGIyeGxjbUZ1WTJVN1hHNGdJR1Y0Y0dWamRDaGhjbVZGY1hWaGJDd2dkSEoxWlN3Z1lDUjdaWEp5YjNJZ1B6OGdKeWQ5SUNoMGIyeGxjbUZ1WTJVZ1BTQWtlM1J2YkdWeVlXNWpaWDBwWUNrN1hHNGdJR2xtSUNnaFlYSmxSWEYxWVd3cFhHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JGZUhCbFkzUmxaQ0FrZTJWNGNHVmpkR1ZrZlN3Z1oyOTBJQ1I3WVdOMGRXRnNmU0FvZEc5c1pYSmhibU5sSUQwZ0pIdDBiMnhsY21GdVkyVjlLV0FwTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaWGh3WldOMFZHRmliR1VvWVdOMGRXRnNPaUJFWVhSaFJuSmhiV1VzSUdWNGNHVmpkR1ZrT2lCRVlYUmhSbkpoYldVc0lHVnljbTl5UHpvZ2MzUnlhVzVuS1RvZ2RtOXBaQ0I3WEc0Z0lHTnZibk4wSUdWNGNHVmpkR1ZrVW05M1EyOTFiblFnUFNCbGVIQmxZM1JsWkM1eWIzZERiM1Z1ZER0Y2JpQWdZMjl1YzNRZ1lXTjBkV0ZzVW05M1EyOTFiblFnUFNCaFkzUjFZV3d1Y205M1EyOTFiblE3WEc0Z0lHVjRjR1ZqZENoaFkzUjFZV3hTYjNkRGIzVnVkQ3dnWlhod1pXTjBaV1JTYjNkRGIzVnVkQ3dnWUNSN1pYSnliM0lnUHo4Z0p5ZDlMQ0J5YjNjZ1kyOTFiblJnS1R0Y2JseHVJQ0JtYjNJZ0tHTnZibk4wSUdOdmJIVnRiaUJ2WmlCbGVIQmxZM1JsWkM1amIyeDFiVzV6S1NCN1hHNGdJQ0FnWTI5dWMzUWdZV04wZFdGc1EyOXNkVzF1SUQwZ1lXTjBkV0ZzTG1OdmJIVnRibk11WW5sT1lXMWxLR052YkhWdGJpNXVZVzFsS1R0Y2JpQWdJQ0JwWmlBb1lXTjBkV0ZzUTI5c2RXMXVJRDA5SUc1MWJHd3BYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFTnZiSFZ0YmlBa2UyTnZiSFZ0Ymk1dVlXMWxmU0J1YjNRZ1ptOTFibVJnS1R0Y2JpQWdJQ0JwWmlBb1lXTjBkV0ZzUTI5c2RXMXVMblI1Y0dVZ0lUMGdZMjlzZFcxdUxuUjVjR1VwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRU52YkhWdGJpQWtlMk52YkhWdGJpNXVZVzFsZlNCMGVYQmxJR1Y0Y0dWamRHVmtJQ1I3WTI5c2RXMXVMblI1Y0dWOUlHZHZkQ0FrZTJGamRIVmhiRU52YkhWdGJpNTBlWEJsZldBcE8xeHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1pYaHdaV04wWldSU2IzZERiM1Z1ZERzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQjJZV3gxWlNBOUlHTnZiSFZ0Ymk1blpYUW9hU2s3WEc0Z0lDQWdJQ0JqYjI1emRDQmhZM1IxWVd4V1lXeDFaU0E5SUdGamRIVmhiRU52YkhWdGJpNW5aWFFvYVNrN1hHNGdJQ0FnSUNCcFppQW9ZMjlzZFcxdUxuUjVjR1VnUFQwZ1JFY3VWRmxRUlM1R1RFOUJWQ2xjYmlBZ0lDQWdJQ0FnWlhod1pXTjBSbXh2WVhRb1lXTjBkV0ZzVm1Gc2RXVXNJSFpoYkhWbExDQXdMakF3TURFc0lHVnljbTl5S1R0Y2JpQWdJQ0FnSUdWc2MyVWdhV1lnS0dOdmJIVnRiaTUwZVhCbElEMDlJRVJITGxSWlVFVXVSRUZVUlY5VVNVMUZLVnh1SUNBZ0lDQWdJQ0JsZUhCbFkzUW9ZV04wZFdGc1ZtRnNkV1V1YVhOVFlXMWxLSFpoYkhWbEtTd2dkSEoxWlN3Z1pYSnliM0lwTzF4dUlDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQmxlSEJsWTNRb1lXTjBkV0ZzVm1Gc2RXVXNJSFpoYkhWbExDQmxjbkp2Y2lrN1hHNGdJQ0FnZlZ4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCbGVIQmxZM1JQWW1wbFkzUW9ZV04wZFdGc09pQjdJRnRyWlhrNklITjBjbWx1WjEwNklHRnVlU0I5TENCbGVIQmxZM1JsWkRvZ2V5QmJhMlY1T2lCemRISnBibWRkT2lCaGJua2dmU2tnZTF4dUlDQm1iM0lnS0dOdmJuTjBJRnRsZUhCbFkzUmxaRXRsZVN3Z1pYaHdaV04wWldSV1lXeDFaVjBnYjJZZ1QySnFaV04wTG1WdWRISnBaWE1vWlhod1pXTjBaV1FwS1NCN1hHNGdJQ0FnYVdZZ0tDRmhZM1IxWVd3dWFHRnpUM2R1VUhKdmNHVnlkSGtvWlhod1pXTjBaV1JMWlhrcEtWeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCRmVIQmxZM1JsWkNCd2NtOXdaWEowZVNCY0lpUjdaWGh3WldOMFpXUkxaWGw5WENJZ2JtOTBJR1p2ZFc1a1lDazdYRzVjYmlBZ0lDQmpiMjV6ZENCaFkzUjFZV3hXWVd4MVpTQTlJR0ZqZEhWaGJGdGxlSEJsWTNSbFpFdGxlVjA3WEc0Z0lDQWdhV1lnS0dGamRIVmhiRlpoYkhWbElHbHVjM1JoYm1ObGIyWWdRWEp5WVhrZ0ppWWdaWGh3WldOMFpXUldZV3gxWlNCcGJuTjBZVzVqWlc5bUlFRnljbUY1S1Z4dUlDQWdJQ0FnWlhod1pXTjBRWEp5WVhrb1lXTjBkV0ZzVm1Gc2RXVXNJR1Y0Y0dWamRHVmtWbUZzZFdVcE8xeHVJQ0FnSUdWc2MyVWdhV1lnS0dGamRIVmhiRlpoYkhWbElHbHVjM1JoYm1ObGIyWWdUMkpxWldOMElDWW1JR1Y0Y0dWamRHVmtWbUZzZFdVZ2FXNXpkR0Z1WTJWdlppQlBZbXBsWTNRcFhHNGdJQ0FnSUNCbGVIQmxZM1JQWW1wbFkzUW9ZV04wZFdGc1ZtRnNkV1VzSUdWNGNHVmpkR1ZrVm1Gc2RXVXBPMXh1SUNBZ0lHVnNjMlVnYVdZZ0tFNTFiV0psY2k1cGMwWnBibWwwWlNoaFkzUjFZV3hXWVd4MVpTa2dKaVlnVG5WdFltVnlMbWx6Um1sdWFYUmxLR1Y0Y0dWamRHVmtWbUZzZFdVcEtWeHVJQ0FnSUNBZ1pYaHdaV04wUm14dllYUW9ZV04wZFdGc1ZtRnNkV1VzSUdWNGNHVmpkR1ZrVm1Gc2RXVXBPMXh1SUNBZ0lHVnNjMlVnYVdZZ0tHRmpkSFZoYkZaaGJIVmxJQ0U5SUdWNGNHVmpkR1ZrVm1Gc2RXVXBYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFVjRjR1ZqZEdWa0lDZ2tlMlY0Y0dWamRHVmtWbUZzZFdWOUtTQm1iM0lnYTJWNUlDY2tlMlY0Y0dWamRHVmtTMlY1ZlNjc0lHZHZkQ0FvSkh0aFkzUjFZV3hXWVd4MVpYMHBZQ2s3WEc0Z0lIMWNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdWNGNHVmpkRUZ5Y21GNUtHRmpkSFZoYkRvZ1FYSnlZWGxNYVd0bFBHRnVlVDRzSUdWNGNHVmpkR1ZrT2lCQmNuSmhlVXhwYTJVOFlXNTVQaWtnZTF4dUlDQmpiMjV6ZENCaFkzUjFZV3hNWlc1bmRHZ2dQU0JoWTNSMVlXd3ViR1Z1WjNSb08xeHVJQ0JqYjI1emRDQmxlSEJsWTNSbFpFeGxibWQwYUNBOUlHVjRjR1ZqZEdWa0xteGxibWQwYUR0Y2JseHVJQ0JwWmlBb1lXTjBkV0ZzVEdWdVozUm9JQ0U5SUdWNGNHVmpkR1ZrVEdWdVozUm9LU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQkJjbkpoZVhNZ1lYSmxJRzltSUdScFptWmxjbVZ1ZENCc1pXNW5kR2c2SUdGamRIVmhiQ0JoY25KaGVTQnNaVzVuZEdnZ2FYTWdKSHRoWTNSMVlXeE1aVzVuZEdoOUlHQWdLMXh1SUNBZ0lDQWdZR0Z1WkNCbGVIQmxZM1JsWkNCaGNuSmhlU0JzWlc1bmRHZ2dhWE1nSkh0bGVIQmxZM1JsWkV4bGJtZDBhSDFnS1R0Y2JpQWdmVnh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dZV04wZFdGc1RHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQnBaaUFvWVdOMGRXRnNXMmxkSUdsdWMzUmhibU5sYjJZZ1FYSnlZWGtnSmlZZ1pYaHdaV04wWldSYmFWMGdhVzV6ZEdGdVkyVnZaaUJCY25KaGVTbGNiaUFnSUNBZ0lHVjRjR1ZqZEVGeWNtRjVLR0ZqZEhWaGJGdHBYU3dnWlhod1pXTjBaV1JiYVYwcE8xeHVJQ0FnSUdWc2MyVWdhV1lnS0dGamRIVmhiRnRwWFNCcGJuTjBZVzVqWlc5bUlFOWlhbVZqZENBbUppQmxlSEJsWTNSbFpGdHBYU0JwYm5OMFlXNWpaVzltSUU5aWFtVmpkQ2xjYmlBZ0lDQWdJR1Y0Y0dWamRFOWlhbVZqZENoaFkzUjFZV3hiYVYwc0lHVjRjR1ZqZEdWa1cybGRLVHRjYmlBZ0lDQmxiSE5sSUdsbUlDaGhZM1IxWVd4YmFWMGdJVDBnWlhod1pXTjBaV1JiYVYwcFhHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVWNGNHVmpkR1ZrSUNSN1pYaHdaV04wWldSYmFWMTlJR0YwSUhCdmMybDBhVzl1SUNSN2FYMHNJR2R2ZENBa2UyRmpkSFZoYkZ0cFhYMWdLVHRjYmlBZ2ZWeHVmVnh1WEc0dktpQkVaV1pwYm1WeklHRWdkR1Z6ZENCemRXbDBaUzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCallYUmxaMjl5ZVNoallYUmxaMjl5ZVRvZ2MzUnlhVzVuTENCMFpYTjBjem9nS0NrZ1BUNGdkbTlwWkNrNklIWnZhV1FnZTF4dUlDQmpkWEp5Wlc1MFEyRjBaV2R2Y25rZ1BTQmpZWFJsWjI5eWVUdGNiaUFnZEdWemRITW9LVHRjYm4xY2JseHVMeW9nUkdWbWFXNWxjeUJoSUdaMWJtTjBhVzl1SUhSdklHSmxJR1Y0WldOMWRHVmtJR0psWm05eVpTQjBhR1VnZEdWemRITWdhVzRnZEdocGN5QmpZWFJsWjI5eWVTQmhjbVVnWlhobFkzVjBaV1F1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1ltVm1iM0psS0dKbFptOXlaVG9nS0NrZ1BUNGdVSEp2YldselpUeDJiMmxrUGlrNklIWnZhV1FnZTF4dUlDQnBaaUFvZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTQTlQU0IxYm1SbFptbHVaV1FwWEc0Z0lDQWdkR1Z6ZEhOYlkzVnljbVZ1ZEVOaGRHVm5iM0o1WFNBOUlIdDlPMXh1SUNCMFpYTjBjMXRqZFhKeVpXNTBRMkYwWldkdmNubGRMbUpsWm05eVpTQTlJR0psWm05eVpUdGNibjFjYmx4dUx5b2dSR1ZtYVc1bGN5QmhJR1oxYm1OMGFXOXVJSFJ2SUdKbElHVjRaV04xZEdWa0lHRm1kR1Z5SUhSb1pTQjBaWE4wY3lCcGJpQjBhR2x6SUdOaGRHVm5iM0o1SUdGeVpTQmxlR1ZqZFhSbFpDNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJoWm5SbGNpaGhablJsY2pvZ0tDa2dQVDRnVUhKdmJXbHpaVHgyYjJsa1BpazZJSFp2YVdRZ2UxeHVJQ0JwWmlBb2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYU0E5UFNCMWJtUmxabWx1WldRcFhHNGdJQ0FnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTQTlJSHQ5TzF4dUlDQjBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkTG1GbWRHVnlJRDBnWVdaMFpYSTdYRzU5WEc1Y2JtWjFibU4wYVc5dUlHRmtaRTVoYldWemNHRmpaU2h6T2lCemRISnBibWNzSUdZNklFUkhMa1oxYm1NcE9pQnpkSEpwYm1jZ2UxeHVJQ0J5WlhSMWNtNGdjeTV5WlhCc1lXTmxLRzVsZHlCU1pXZEZlSEFvWmk1dVlXMWxMQ0FuWjJrbktTd2daaTV1Y1U1aGJXVXBPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1lYTjVibU1nWm5WdVkzUnBiMjRnYVc1cGRFRjFkRzlVWlhOMGN5aHdZV05yWVdkbFNXUTZJSE4wY21sdVp5d2diVzlrZFd4bFB6b2dZVzU1S1NCN1hHNGdJR2xtSUNoM1lYTlNaV2RwYzNSbGNtVmtXM0JoWTJ0aFoyVkpaRjBwSUhKbGRIVnlianRjYmlBZ1kyOXVjM1FnYlc5a2RXeGxWR1Z6ZEhNZ1BTQnRiMlIxYkdVZ1B5QnRiMlIxYkdVdWRHVnpkSE1nT2lCMFpYTjBjenRjYmlBZ2FXWWdLRzF2WkhWc1pWUmxjM1J6VzJGMWRHOVVaWE4wYzBOaGRFNWhiV1ZkSUNFOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQjNZWE5TWldkcGMzUmxjbVZrVzNCaFkydGhaMlZKWkYwZ1BTQjBjblZsTzF4dUlDQWdJSEpsZEhWeWJqdGNiaUFnZlZ4dUlDQmpiMjV6ZENCdGIyUjFiR1ZCZFhSdlZHVnpkSE1nUFNCYlhUdGNiaUFnWTI5dWMzUWdjR0ZqYTBaMWJtTjBhVzl1Y3lBOUlHRjNZV2wwSUdkeWIyc3VaR0Z3YVM1bWRXNWpkR2x2Ym5NdVptbHNkR1Z5S0dCd1lXTnJZV2RsTG1sa0lEMGdYQ0lrZTNCaFkydGhaMlZKWkgxY0ltQXBMbXhwYzNRb0tUdGNiaUFnWTI5dWMzUWdjbVZuSUQwZ2JtVjNJRkpsWjBWNGNDZ3ZMaXBjWEM5Y1hDOWNYSE1xYzJ0cGNGczZYRnh6WFNvb0xpb3BKQzhwTzF4dUlDQm1iM0lnS0dOdmJuTjBJR1lnYjJZZ2NHRmphMFoxYm1OMGFXOXVjeWtnZTF4dUlDQWdJR052Ym5OMElIUmxjM1J6SUQwZ1ppNXZjSFJwYjI1eld5ZDBaWE4wSjEwN1hHNGdJQ0FnYVdZZ0tDRW9kR1Z6ZEhNZ0ppWWdRWEp5WVhrdWFYTkJjbkpoZVNoMFpYTjBjeWtnSmlZZ2RHVnpkSE11YkdWdVozUm9LU2tnWTI5dWRHbHVkV1U3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0IwWlhOMGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjMnRwY0ZKbFlYTnZibk1nUFNBb2RHVnpkSE5iYVYwZ1lYTWdjM1J5YVc1bktTNXRZWFJqYUNoeVpXY3BPMXh1SUNBZ0lDQWdiR1YwSUhOcmFYQlNaV0Z6YjI0N1hHNGdJQ0FnSUNCcFppQW9jMnRwY0ZKbFlYTnZibk1nSmlZZ2MydHBjRkpsWVhOdmJuTS9MbXhsYm1kMGFDQStJREVwSUhOcmFYQlNaV0Z6YjI0Z1BTQnphMmx3VW1WaGMyOXVjMXN4WFR0Y2JpQWdJQ0FnSUcxdlpIVnNaVUYxZEc5VVpYTjBjeTV3ZFhOb0tHNWxkeUJVWlhOMEtHRjFkRzlVWlhOMGMwTmhkRTVoYldVc0lIUmxjM1J6TG14bGJtZDBhQ0E5UFQwZ01TQS9JR1l1Ym1GdFpTQTZJR0FrZTJZdWJtRnRaWDBnSkh0cElDc2dNWDFnTENCaGMzbHVZeUFvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElISmxjeUE5SUdGM1lXbDBJR2R5YjJzdVpuVnVZM1JwYjI1ekxtVjJZV3dvWVdSa1RtRnRaWE53WVdObEtIUmxjM1J6VzJsZExDQm1LU2s3WEc0Z0lDQWdJQ0FnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCdWJ5MTBhSEp2ZHkxc2FYUmxjbUZzWEc0Z0lDQWdJQ0FnSUdsbUlDaHlaWE1nSVQwOUlIUnlkV1VwSUhSb2NtOTNJR0JHWVdsc1pXUTZJQ1I3ZEdWemRITmJhVjE5WUR0Y2JpQWdJQ0FnSUgwc0lIdHphMmx3VW1WaGMyOXVPaUJ6YTJsd1VtVmhjMjl1ZlNrcE8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCM1lYTlNaV2RwYzNSbGNtVmtXM0JoWTJ0aFoyVkpaRjBnUFNCMGNuVmxPMXh1SUNCcFppQW9JVzF2WkhWc1pVRjFkRzlVWlhOMGN5NXNaVzVuZEdncElISmxkSFZ5Ymp0Y2JpQWdiVzlrZFd4bFZHVnpkSE5iWVhWMGIxUmxjM1J6UTJGMFRtRnRaVjBnUFNCN2RHVnpkSE02SUcxdlpIVnNaVUYxZEc5VVpYTjBjMzA3WEc1OVhHNWNibVY0Y0c5eWRDQmhjM2x1WXlCbWRXNWpkR2x2YmlCeWRXNVVaWE4wY3lodmNIUnBiMjV6UHpvZ2UyTmhkR1ZuYjNKNVB6b2djM1J5YVc1bkxDQjBaWE4wUHpvZ2MzUnlhVzVuTENCMFpYTjBRMjl1ZEdWNGREODZJRlJsYzNSRGIyNTBaWGgwZlNrZ2UxeHVJQ0JqYjI1emRDQndZV05yWVdkbFh5QTlJR2R5YjJzdVpuVnVZM1JwYjI1ekxtZGxkRU4xY25KbGJuUkRZV3hzS0NrL0xtWjFibU0vTG5CaFkydGhaMlU3WEc0Z0lHRjNZV2wwSUdsdWFYUkJkWFJ2VkdWemRITW9jR0ZqYTJGblpWOHVhV1FwTzF4dUlDQmpiMjV6ZENCeVpYTjFiSFJ6T2lCN0lHTmhkR1ZuYjNKNVB6b2djM1J5YVc1bkxDQnVZVzFsUHpvZ2MzUnlhVzVuTENCemRXTmpaWE56T2lCaWIyOXNaV0Z1TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxjM1ZzZERvZ2MzUnlhVzVuTENCdGN6b2diblZ0WW1WeUxDQnphMmx3Y0dWa09pQmliMjlzWldGdUlIMWJYU0E5SUZ0ZE8xeHVJQ0JqYjI1emIyeGxMbXh2WnloZ1VuVnVibWx1WnlCMFpYTjBjMkFwTzF4dUlDQnZjSFJwYjI1eklEOC9QU0I3ZlR0Y2JpQWdiM0IwYVc5dWN5RXVkR1Z6ZEVOdmJuUmxlSFFnUHo4OUlHNWxkeUJVWlhOMFEyOXVkR1Y0ZENncE8xeHVJQ0JuY205ckxuTm9aV3hzTG14aGMzUkZjbkp2Y2lBOUlDY25PMXh1SUNCbWIzSWdLR052Ym5OMElGdHJaWGtzSUhaaGJIVmxYU0J2WmlCUFltcGxZM1F1Wlc1MGNtbGxjeWgwWlhOMGN5a3BJSHRjYmlBZ0lDQnBaaUFvYjNCMGFXOXVjejh1WTJGMFpXZHZjbmtnSVQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ0lDQnBaaUFvSVd0bGVTNTBiMHh2ZDJWeVEyRnpaU2dwTG5OMFlYSjBjMWRwZEdnb2IzQjBhVzl1Y3o4dVkyRjBaV2R2Y25rdWRHOU1iM2RsY2tOaGMyVW9LU2twWEc0Z0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dUlDQWdJSDFjYmlBZ0lDQmpiMjV6YjJ4bExteHZaeWhnVTNSaGNuUmxaQ0FrZTJ0bGVYMGdZMkYwWldkdmNubGdLVHRjYmlBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnYVdZZ0tIWmhiSFZsTG1KbFptOXlaU2xjYmlBZ0lDQWdJQ0FnWVhkaGFYUWdkbUZzZFdVdVltVm1iM0psS0NrN1hHNGdJQ0FnZlNCallYUmphQ0FvZURvZ1lXNTVLU0I3WEc0Z0lDQWdJQ0IyWVd4MVpTNWlaV1p2Y21WVGRHRjBkWE1nUFNCNExuUnZVM1J5YVc1bktDazdYRzRnSUNBZ2ZWeHVJQ0FnSUdOdmJuTjBJSFFnUFNCMllXeDFaUzUwWlhOMGN5QS9QeUJiWFR0Y2JpQWdJQ0JqYjI1emRDQnlaWE1nUFNCYlhUdGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElIUXViR1Z1WjNSb095QnBLeXNwWEc0Z0lDQWdJQ0J5WlhNdWNIVnphQ2hoZDJGcGRDQmxlR1ZqVkdWemRDaDBXMmxkTENCdmNIUnBiMjV6UHk1MFpYTjBLU2s3WEc0Z0lDQWdZMjl1YzNRZ1pHRjBZU0E5SUNoaGQyRnBkQ0JRY205dGFYTmxMbUZzYkNoeVpYTXBLUzVtYVd4MFpYSW9LR1FwSUQwK0lHUXVjbVZ6ZFd4MElDRTlJQ2R6YTJsd2NHVmtKeWs3WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUdsbUlDaDJZV3gxWlM1aFpuUmxjaWxjYmlBZ0lDQWdJQ0FnWVhkaGFYUWdkbUZzZFdVdVlXWjBaWElvS1R0Y2JpQWdJQ0I5SUdOaGRHTm9JQ2g0T2lCaGJua3BJSHRjYmlBZ0lDQWdJSFpoYkhWbExtRm1kR1Z5VTNSaGRIVnpJRDBnZUM1MGIxTjBjbWx1WnlncE8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb2RtRnNkV1V1WVdaMFpYSlRkR0YwZFhNcFhHNGdJQ0FnSUNCa1lYUmhMbkIxYzJnb2UyTmhkR1ZuYjNKNU9pQnJaWGtzSUc1aGJXVTZJQ2RwYm1sMEp5d2djbVZ6ZFd4ME9pQjJZV3gxWlM1aFpuUmxjbE4wWVhSMWN5d2djM1ZqWTJWemN6b2dabUZzYzJVc0lHMXpPaUF3TENCemEybHdjR1ZrT2lCbVlXeHpaWDBwTzF4dUlDQWdJR2xtSUNoMllXeDFaUzVpWldadmNtVlRkR0YwZFhNcFhHNGdJQ0FnSUNCa1lYUmhMbkIxYzJnb2UyTmhkR1ZuYjNKNU9pQnJaWGtzSUc1aGJXVTZJQ2RwYm1sMEp5d2djbVZ6ZFd4ME9pQjJZV3gxWlM1aVpXWnZjbVZUZEdGMGRYTXNJSE4xWTJObGMzTTZJR1poYkhObExDQnRjem9nTUN3Z2MydHBjSEJsWkRvZ1ptRnNjMlY5S1R0Y2JpQWdJQ0J5WlhOMWJIUnpMbkIxYzJnb0xpNHVaR0YwWVNrN1hHNGdJSDFjYmlBZ2FXWWdLRzl3ZEdsdmJuTXVkR1Z6ZEVOdmJuUmxlSFF1WTJGMFkyaFZibWhoYm1Sc1pXUXBJSHRjYmlBZ0lDQmhkMkZwZENCa1pXeGhlU2d4TURBd0tUdGNiaUFnSUNCcFppQW9aM0p2YXk1emFHVnNiQzVzWVhOMFJYSnliM0l1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUNBZ2NtVnpkV3gwY3k1d2RYTm9LSHRjYmlBZ0lDQWdJQ0FnWTJGMFpXZHZjbms2SUNkVmJtaGhibVJzWldRZ1pYaGpaWEIwYVc5dWN5Y3NYRzRnSUNBZ0lDQWdJRzVoYldVNklDZGxlR05sY0hScGIyNXpKeXhjYmlBZ0lDQWdJQ0FnY21WemRXeDBPaUJuY205ckxuTm9aV3hzTG14aGMzUkZjbkp2Y2l3Z2MzVmpZMlZ6Y3pvZ1ptRnNjMlVzSUcxek9pQXdMQ0J6YTJsd2NHVmtPaUJtWVd4elpWeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lHbG1JQ2h2Y0hScGIyNXpMblJsYzNSRGIyNTBaWGgwTG5KbGNHOXlkQ2tnZTF4dUlDQWdJR052Ym5OMElHeHZaMmRsY2lBOUlHNWxkeUJFUnk1TWIyZG5aWElvS1R0Y2JpQWdJQ0JqYjI1emRDQnpkV05qWlhOelpuVnNJRDBnY21WemRXeDBjeTVtYVd4MFpYSW9LSElwSUQwK0lISXVjM1ZqWTJWemN5a3ViR1Z1WjNSb08xeHVJQ0FnSUdOdmJuTjBJSE5yYVhCd1pXUWdQU0J5WlhOMWJIUnpMbVpwYkhSbGNpZ29jaWtnUFQ0Z2NpNXphMmx3Y0dWa0tTNXNaVzVuZEdnN1hHNGdJQ0FnWTI5dWMzUWdabUZwYkdWa0lEMGdjbVZ6ZFd4MGN5NW1hV3gwWlhJb0tISXBJRDArSUNGeUxuTjFZMk5sYzNNcE8xeHVJQ0FnSUdOdmJuTjBJR1JsYzJOeWFYQjBhVzl1SUQwZ0oxQmhZMnRoWjJVZ1FIQmhZMnRoWjJVZ2RHVnpkR1ZrT2lCQWMzVmpZMlZ6YzJaMWJDQnpkV05qWlhOelpuVnNMQ0JBYzJ0cGNIQmxaQ0J6YTJsd2NHVmtMQ0JBWm1GcGJHVmtJR1poYVd4bFpDQjBaWE4wY3ljN1hHNGdJQ0FnWTI5dWMzUWdjR0Z5WVcxeklEMGdlMXh1SUNBZ0lDQWdjM1ZqWTJWemMyWjFiRG9nYzNWalkyVnpjMloxYkN4Y2JpQWdJQ0FnSUhOcmFYQndaV1E2SUhOcmFYQndaV1FzWEc0Z0lDQWdJQ0JtWVdsc1pXUTZJR1poYVd4bFpDNXNaVzVuZEdnc1hHNGdJQ0FnSUNCd1lXTnJZV2RsT2lCd1lXTnJZV2RsWDF4dUlDQWdJSDA3WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0J5SUc5bUlHWmhhV3hsWkNrZ1QySnFaV04wTG1GemMybG5iaWh3WVhKaGJYTXNJSHRiWUNSN2NpNWpZWFJsWjI5eWVYMGdmQ0FrZTNJdWJtRnRaWDFnWFRvZ2NpNXlaWE4xYkhSOUtUdGNiaUFnSUNCc2IyZG5aWEl1Ykc5bktHUmxjMk55YVhCMGFXOXVMQ0J3WVhKaGJYTXNJQ2R3WVdOcllXZGxMWFJsYzNSbFpDY3BPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnlaWE4xYkhSek8xeHVmVnh1WEc1aGMzbHVZeUJtZFc1amRHbHZiaUJsZUdWalZHVnpkQ2gwT2lCVVpYTjBMQ0J3Y21Wa2FXTmhkR1U2SUhOMGNtbHVaeUI4SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0JzWlhRZ2Nqb2dleUJqWVhSbFoyOXllVDg2SUhOMGNtbHVaeXdnYm1GdFpUODZJSE4wY21sdVp5d2djM1ZqWTJWemN6b2dZbTl2YkdWaGJpd2djbVZ6ZFd4ME9pQnpkSEpwYm1jc0lHMXpPaUJ1ZFcxaVpYSXNJSE5yYVhCd1pXUTZJR0p2YjJ4bFlXNGdmVHRjYmlBZ1kyOXVjM1FnWm1sc2RHVnlJRDBnY0hKbFpHbGpZWFJsSUNFOUlIVnVaR1ZtYVc1bFpDQW1KaUFvSVhRdWJtRnRaUzUwYjB4dmQyVnlRMkZ6WlNncExuTjBZWEowYzFkcGRHZ29jSEpsWkdsallYUmxMblJ2VEc5M1pYSkRZWE5sS0NrcEtUdGNiaUFnWTI5dWMzUWdjMnRwY0NBOUlIUXViM0IwYVc5dWN6OHVjMnRwY0ZKbFlYTnZiaUI4ZkNCbWFXeDBaWEk3WEc0Z0lHTnZibk4wSUhOcmFYQlNaV0Z6YjI0Z1BTQm1hV3gwWlhJZ1B5QW5jMnRwY0hCbFpDY2dPaUIwTG05d2RHbHZibk0vTG5OcmFYQlNaV0Z6YjI0N1hHNGdJR2xtSUNnaGMydHBjQ2xjYmlBZ0lDQmpiMjV6YjJ4bExteHZaeWhnVTNSaGNuUmxaQ0FrZTNRdVkyRjBaV2R2Y25sOUlDUjdkQzV1WVcxbGZXQXBPMXh1SUNCamIyNXpkQ0J6ZEdGeWRDQTlJRzVsZHlCRVlYUmxLQ2s3WEc0Z0lIUnllU0I3WEc0Z0lDQWdhV1lnS0hOcmFYQXBYRzRnSUNBZ0lDQnlJRDBnZTNOMVkyTmxjM002SUhSeWRXVXNJSEpsYzNWc2REb2djMnRwY0ZKbFlYTnZiaUVzSUcxek9pQXdMQ0J6YTJsd2NHVmtPaUIwY25WbGZUdGNiaUFnSUNCbGJITmxYRzRnSUNBZ0lDQnlJRDBnZTNOMVkyTmxjM002SUhSeWRXVXNJSEpsYzNWc2REb2dZWGRoYVhRZ2RDNTBaWE4wS0NrZ1B6OGdKMDlMSnl3Z2JYTTZJREFzSUhOcmFYQndaV1E2SUdaaGJITmxmVHRjYmlBZ2ZTQmpZWFJqYUNBb2VEb2dZVzU1S1NCN1hHNGdJQ0FnY2lBOUlIdHpkV05qWlhOek9pQm1ZV3h6WlN3Z2NtVnpkV3gwT2lCNExuUnZVM1J5YVc1bktDa3NJRzF6T2lBd0xDQnphMmx3Y0dWa09pQm1ZV3h6WlgwN1hHNGdJSDFjYmlBZ1kyOXVjM1FnYzNSdmNDQTlJRzVsZHlCRVlYUmxLQ2s3WEc0Z0lDOHZJRUIwY3kxcFoyNXZjbVZjYmlBZ2NpNXRjeUE5SUhOMGIzQWdMU0J6ZEdGeWREdGNiaUFnYVdZZ0tDRnphMmx3S1Z4dUlDQWdJR052Ym5OdmJHVXViRzluS0dCR2FXNXBjMmhsWkNBa2UzUXVZMkYwWldkdmNubDlJQ1I3ZEM1dVlXMWxmU0JtYjNJZ0pIdHlMbTF6ZlNCdGMyQXBPMXh1SUNCeUxtTmhkR1ZuYjNKNUlEMGdkQzVqWVhSbFoyOXllVHRjYmlBZ2NpNXVZVzFsSUQwZ2RDNXVZVzFsTzF4dUlDQnlaWFIxY200Z2NqdGNibjFjYmx4dUx5b2dWMkZwZEhNZ1cyMXpYU0J0YVd4c2FYTmxZMjl1WkhNZ0tpOWNibVY0Y0c5eWRDQmhjM2x1WXlCbWRXNWpkR2x2YmlCa1pXeGhlU2h0Y3pvZ2JuVnRZbVZ5S1NCN1hHNGdJR0YzWVdsMElHNWxkeUJRY205dGFYTmxLQ2h5S1NBOVBpQnpaWFJVYVcxbGIzVjBLSElzSUcxektTazdYRzU5WEc1Y2JtVjRjRzl5ZENCaGMzbHVZeUJtZFc1amRHbHZiaUJoZDJGcGRFTm9aV05yS0dOb1pXTnJTR0Z1Wkd4bGNqb2dLQ2tnUFQ0Z1ltOXZiR1ZoYml4Y2JpQWdaWEp5YjNJNklITjBjbWx1WnlBOUlDZFVhVzFsYjNWMElHVjRZMlZsWkdWa0p5d2dkMkZwZERvZ2JuVnRZbVZ5SUQwZ05UQXdMQ0JwYm5SbGNuWmhiRG9nYm5WdFltVnlJRDBnTlRBcE9pQlFjbTl0YVhObFBIWnZhV1ErSUh0Y2JpQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2JpQWdJQ0J6WlhSVWFXMWxiM1YwS0NncElEMCtJSHRjYmlBZ0lDQWdJR05zWldGeVNXNTBaWEoyWVd3b2FXNTBaWEoyWVd4SlpDazdYRzRnSUNBZ0lDQnlaV3BsWTNRb2JtVjNJRVZ5Y205eUtHVnljbTl5S1NrN1hHNGdJQ0FnZlN3Z2QyRnBkQ2s3WEc0Z0lDQWdMeThnUUhSekxXbG5ibTl5WlZ4dUlDQWdJR052Ym5OMElHbHVkR1Z5ZG1Gc1NXUTZJRlJwYldWdmRYUWdQU0J6WlhSSmJuUmxjblpoYkNnb0tTQTlQaUI3WEc0Z0lDQWdJQ0JwWmlBb1kyaGxZMnRJWVc1a2JHVnlLQ2twSUh0Y2JpQWdJQ0FnSUNBZ1kyeGxZWEpKYm5SbGNuWmhiQ2hwYm5SbGNuWmhiRWxrS1R0Y2JpQWdJQ0FnSUNBZ2NtVnpiMngyWlNncE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwc0lHbHVkR1Z5ZG1Gc0tUdGNiaUFnZlNrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJwYzBScFlXeHZaMUJ5WlhObGJuUW9aR2xoYkc5blZHbDBiR1U2SUhOMGNtbHVaeWs2SUdKdmIyeGxZVzRnZTF4dUlDQmpiMjV6ZENCa2FXRnNiMmR6SUQwZ1JFY3VSR2xoYkc5bkxtZGxkRTl3Wlc1RWFXRnNiMmR6S0NrN1hHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWkdsaGJHOW5jeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUdsbUlDaGthV0ZzYjJkelcybGRMblJwZEd4bElEMDlJR1JwWVd4dloxUnBkR3hsS1Z4dUlDQWdJQ0FnY21WMGRYSnVJSFJ5ZFdVN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUdaaGJITmxPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1lYTjVibU1nWm5WdVkzUnBiMjRnZEdWemRGWnBaWGRsY2loMk9pQnpkSEpwYm1jc0lHUm1PaUJFUnk1RVlYUmhSbkpoYldVc0lHUmxkR1ZqZEZObGJXRnVkR2xqVkhsd1pYTTZJR0p2YjJ4bFlXNGdQU0JtWVd4elpTazZJRkJ5YjIxcGMyVThkbTlwWkQ0Z2UxeHVJQ0JwWmlBb1pHVjBaV04wVTJWdFlXNTBhV05VZVhCbGN5a2dZWGRoYVhRZ1ozSnZheTVrWVhSaExtUmxkR1ZqZEZObGJXRnVkR2xqVkhsd1pYTW9aR1lwTzF4dUlDQmpiMjV6ZENCMGRpQTlJR2R5YjJzdWMyaGxiR3d1WVdSa1ZHRmliR1ZXYVdWM0tHUm1LVHRjYmlBZ1kyOXVjM1FnZG1sbGQyVnlUbUZ0WlNBOUlHQmJibUZ0WlQxMmFXVjNaWEl0Skh0MkxuSmxjR3hoWTJVb0wxeGNjeXN2Wnl3Z0p5MG5LWDBnYVYxZ08xeHVJQ0JqYjI1emRDQnpaV3hsWTNSdmNpQTlJR0FrZTNacFpYZGxjazVoYldWOUlHTmhiblpoY3l3a2UzWnBaWGRsY2s1aGJXVjlJSE4yWnl3a2UzWnBaWGRsY2s1aGJXVjlJR2x0Wnl4Y2JpQWdJQ0FrZTNacFpYZGxjazVoYldWOUlHbHVjSFYwTENSN2RtbGxkMlZ5VG1GdFpYMGdhREVzSkh0MmFXVjNaWEpPWVcxbGZTQmhZRHRjYmlBZ1kyOXVjM1FnY21WeklEMGdXMTA3WEc0Z0lIUnllU0I3WEc0Z0lDQWdiR1YwSUhacFpYZGxjaUE5SUhSMkxtRmtaRlpwWlhkbGNpaDJLVHRjYmlBZ0lDQmhkMkZwZENCaGQyRnBkRU5vWldOcktDZ3BJRDArSUdSdlkzVnRaVzUwTG5GMVpYSjVVMlZzWldOMGIzSW9jMlZzWldOMGIzSXBJQ0U5UFNCdWRXeHNMRnh1SUNBZ0lDQWdKMk5oYm01dmRDQnNiMkZrSUhacFpYZGxjaWNzSURNd01EQXBPMXh1SUNBZ0lISmxjeTV3ZFhOb0tFRnljbUY1TG1aeWIyMG9kSFl1ZG1sbGQyVnljeWt1YkdWdVozUm9LVHRjYmlBZ0lDQkJjbkpoZVM1bWNtOXRLR1JtTG5KdmR5Z3dLUzVqWld4c2N5a3VabTl5UldGamFDZ29ZeWtnUFQ0Z1l5NTJZV3gxWlNBOUlHNTFiR3dwTzF4dUlDQWdJR1JtTG5KdmQzTXVjMlZzWldOMEtDaHliM2NwSUQwK0lISnZkeTVwWkhnZ1BpQXhJQ1ltSUhKdmR5NXBaSGdnUENBM0tUdGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdOenNnYVNBOElERXlPeUJwS3lzcElHUm1MbVpwYkhSbGNpNXpaWFFvYVN3Z1ptRnNjMlVwTzF4dUlDQWdJR1JtTG1OMWNuSmxiblJTYjNkSlpIZ2dQU0F4TzF4dUlDQWdJR052Ym5OMElIQnliM0J6SUQwZ2RtbGxkMlZ5TG1kbGRFOXdkR2x2Ym5Nb2RISjFaU2t1Ykc5dmF6dGNiaUFnSUNCamIyNXpkQ0J1WlhkUWNtOXdjem9nVW1WamIzSmtQSE4wY21sdVp5d2dZbTl2YkdWaGJqNGdQU0I3ZlR0Y2JpQWdJQ0JQWW1wbFkzUXVhMlY1Y3lod2NtOXdjeWt1Wm1sc2RHVnlLQ2hyS1NBOVBpQjBlWEJsYjJZZ2NISnZjSE5iYTEwZ1BUMDlJQ2RpYjI5c1pXRnVKeWt1Wm05eVJXRmphQ2dvYXlrZ1BUNGdibVYzVUhKdmNITmJhMTBnUFNBaGNISnZjSE5iYTEwcE8xeHVJQ0FnSUhacFpYZGxjaTV6WlhSUGNIUnBiMjV6S0c1bGQxQnliM0J6S1R0Y2JpQWdJQ0JoZDJGcGRDQmtaV3hoZVNneU5UQXBPMXh1SUNBZ0lHTnZibk4wSUd4aGVXOTFkQ0E5SUhSMkxuTmhkbVZNWVhsdmRYUW9LVHRjYmlBZ0lDQmpiMjV6ZENCdmJHUlFjbTl3Y3lBOUlIWnBaWGRsY2k1blpYUlBjSFJwYjI1ektDa3ViRzl2YXp0Y2JpQWdJQ0IwZGk1eVpYTmxkRXhoZVc5MWRDZ3BPMXh1SUNBZ0lISmxjeTV3ZFhOb0tFRnljbUY1TG1aeWIyMG9kSFl1ZG1sbGQyVnljeWt1YkdWdVozUm9LVHRjYmlBZ0lDQjBkaTVzYjJGa1RHRjViM1YwS0d4aGVXOTFkQ2s3WEc0Z0lDQWdZWGRoYVhRZ1lYZGhhWFJEYUdWamF5Z29LU0E5UGlCa2IyTjFiV1Z1ZEM1eGRXVnllVk5sYkdWamRHOXlLSE5sYkdWamRHOXlLU0FoUFQwZ2JuVnNiQ3hjYmlBZ0lDQWdJQ2RqWVc1dWIzUWdiRzloWkNCMmFXVjNaWElnWm5KdmJTQnNZWGx2ZFhRbkxDQXpNREF3S1R0Y2JpQWdJQ0JoZDJGcGRDQmtaV3hoZVNneU5UQXBPMXh1SUNBZ0lISmxjeTV3ZFhOb0tFRnljbUY1TG1aeWIyMG9kSFl1ZG1sbGQyVnljeWt1YkdWdVozUm9LVHRjYmlBZ0lDQjJhV1YzWlhJZ1BTQkJjbkpoZVM1bWNtOXRLSFIyTG5acFpYZGxjbk1wTG1acGJtUW9LSFlwSUQwK0lIWXVkSGx3WlNBaFBUMGdKMGR5YVdRbktTRTdYRzRnSUNBZ1pYaHdaV04wUVhKeVlYa29jbVZ6TENCYk1pd2dNU3dnTWwwcE8xeHVJQ0FnSUdWNGNHVmpkQ2hLVTA5T0xuTjBjbWx1WjJsbWVTaDJhV1YzWlhJdVoyVjBUM0IwYVc5dWN5Z3BMbXh2YjJzcExDQktVMDlPTG5OMGNtbHVaMmxtZVNodmJHUlFjbTl3Y3lrcE8xeHVJQ0I5SUdacGJtRnNiSGtnZTF4dUlDQWdJSFIyTG1Oc2IzTmxLQ2s3WEc0Z0lDQWdaM0p2YXk1emFHVnNiQzVqYkc5elpWUmhZbXhsS0dSbUtUdGNiaUFnZlZ4dWZWeHVJbDE5IiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0Jztcbi8qKiBEZW1vIHNjcmlwdCBjbGFzcy4gQ291bGQgYmUgdXNlZCBmb3IgY3JlYXRpbmcgZGVtbyBzY3JpcHRzIHRvIHNob3cgdGhlIHBsYXRmb3JtIGNhcGFiaWxpdGllcyAqL1xuZXhwb3J0IGNsYXNzIERlbW9TY3JpcHQge1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMubmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gJyc7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGVwID0gMDtcbiAgICAgICAgdGhpcy5faXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzQ2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3Jvb3QgPSB1aS5kaXYoW10sIHsgaWQ6ICdkZW1vLXNjcmlwdCcsXG4gICAgICAgICAgICBjbGFzc2VzOiAndHV0b3JpYWxzLXJvb3QgdHV0b3JpYWxzLXRyYWNrIGRlbW8tYXBwLXNjcmlwdCcgfSk7XG4gICAgICAgIHRoaXMuX3N0ZXBzID0gW107XG4gICAgICAgIHRoaXMuX21haW5IZWFkZXIgPSB1aS5wYW5lbChbXSwgJ3R1dG9yaWFscy1tYWluLWhlYWRlcicpO1xuICAgICAgICB0aGlzLl9oZWFkZXIgPSB1aS5oMSgnJyk7XG4gICAgICAgIHRoaXMuX2hlYWRlckRpdiA9IHVpLmRpdkgoW10sICd0dXRvcmlhbHMtcm9vdC1oZWFkZXInKTtcbiAgICAgICAgdGhpcy5fc3RvcFN0YXJ0QnRuID0gdWkuYnV0dG9uKHVpLmljb25GQSgncGF1c2UnKSwgKCkgPT4gdGhpcy5fY2hhbmdlU3RvcFN0YXRlKCksICdQbGF5IC8gcGF1c2UnKTtcbiAgICAgICAgdGhpcy5fcmVzdGFydEJ0biA9IHVpLmJ1dHRvbih1aS5pY29uRkEoJ3JlZG8nKSwgKCkgPT4gdGhpcy5fcmVzdGFydFNjcmlwdCgpLCAnUmVzdGFydCcpO1xuICAgICAgICB0aGlzLl9hY3Rpdml0eSA9IHVpLnBhbmVsKFtdLCAndHV0b3JpYWxzLXJvb3QtZGVzY3JpcHRpb24nKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NEaXYgPSB1aS5kaXZWKFtdLCAndHV0b3JpYWxzLXJvb3QtcHJvZ3Jlc3MnKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MgPSB1aS5lbGVtZW50KCdwcm9ncmVzcycpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc1N0ZXBzID0gdWkuZGl2VGV4dCgnJyk7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubWF4ID0gMDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudmFsdWUgPSAxO1xuICAgICAgICBEZW1vU2NyaXB0LmN1cnJlbnRPYmplY3QgPSB0aGlzO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyBkZW1vIHNjcmlwdCBzdGVwcyAqL1xuICAgIGdldCBzdGVwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZXBzO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyB0aGUgYW1vdW50IG9mIGRlbW8gc2NyaXB0IHN0ZXBzICovXG4gICAgZ2V0IHN0ZXBOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGVwcy5sZW5ndGg7XG4gICAgfVxuICAgIC8qKiBBZGRzIHNjcmlwdCBoZWFkZXIgKi9cbiAgICBfYWRkSGVhZGVyKCkge1xuICAgICAgICB0aGlzLl9jcmVhdGVIZWFkZXJEaXYoKTtcbiAgICAgICAgdGhpcy5fY3JlYXRlUHJvZ3Jlc3NEaXYoKTtcbiAgICAgICAgdGhpcy5fbWFpbkhlYWRlci5hcHBlbmQodGhpcy5faGVhZGVyRGl2LCB0aGlzLl9wcm9ncmVzc0Rpdik7XG4gICAgfVxuICAgIC8qKiBDcmVhdGVzIHNjcmlwdCBoZWFkZXIgZGl2ICovXG4gICAgX2NyZWF0ZUhlYWRlckRpdigpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyLmlubmVyVGV4dCA9IHRoaXMubmFtZTtcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2LmFwcGVuZCh0aGlzLl9oZWFkZXIpO1xuICAgICAgICB0aGlzLl9oZWFkZXJEaXYuYXBwZW5kKHRoaXMuX3N0b3BTdGFydEJ0bik7XG4gICAgfVxuICAgIC8qKiBDcmVhdGVzIHNjcmlwdCBwcm9ncmVzcyBkaXYgKi9cbiAgICBfY3JlYXRlUHJvZ3Jlc3NEaXYoKSB7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLm1heCA9IHRoaXMuc3RlcE51bWJlcjtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NEaXYuYXBwZW5kKHRoaXMuX3Byb2dyZXNzKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NTdGVwcyA9IHVpLmRpdlRleHQoYFN0ZXA6ICR7dGhpcy5fcHJvZ3Jlc3MudmFsdWV9IG9mICR7dGhpcy5zdGVwTnVtYmVyfWApO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc0Rpdi5hcHBlbmQodGhpcy5fcHJvZ3Jlc3NTdGVwcyk7XG4gICAgfVxuICAgIC8qKiBBZGRzIGRlc2NyaXB0aW9uIG9mIHRoZSBzY3JpcHQgKi9cbiAgICBfYWRkRGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5fYWN0aXZpdHkuYXBwZW5kKHVpLmRpdih0aGlzLmRlc2NyaXB0aW9uLCAndHV0b3JpYWxzLXJvb3QtZGVzY3JpcHRpb24nKSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGVwTnVtYmVyOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RydWN0aW9uSW5kaWNhdG9yID0gdWkuaWNvbkZBKCdjbG9jaycpO1xuICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25EaXYgPSB1aS5kaXYodGhpcy5fc3RlcHNbaV0ubmFtZSwgJ2dyb2stdHV0b3JpYWwtZW50cnktaW5zdHJ1Y3Rpb24nKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdGVwRGVzY3JpcHRpb24gPSB1aS5kaXYoKF9hID0gdGhpcy5fc3RlcHNbaV0ub3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRlc2NyaXB0aW9uLCAnZ3Jvay10dXRvcmlhbC1zdGVwLWRlc2NyaXB0aW9uIGhpZGRlbicpO1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSB1aS5kaXZIKFtcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbkluZGljYXRvcixcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbkRpdixcbiAgICAgICAgICAgIF0sICdncm9rLXR1dG9yaWFsLWVudHJ5Jyk7XG4gICAgICAgICAgICB0aGlzLl9hY3Rpdml0eS5hcHBlbmQoZW50cnksIGN1cnJlbnRTdGVwRGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKiBJbml0aWFsaXplcyB0aGUgcm9vdCBvZiB0aGUgZGVtbyBzY3JpcHQgKi9cbiAgICBfaW5pdFJvb3QoKSB7XG4gICAgICAgIGdyb2suc2hlbGwud2luZG93cy5zaG93Q29udGV4dFBhbmVsID0gdHJ1ZTtcbiAgICAgICAgZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dIZWxwID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBncm9rLnNoZWxsLmRvY2tNYW5hZ2VyLmRvY2sodGhpcy5fcm9vdCwgREcuRE9DS19UWVBFLlJJR0hULCBudWxsLCB0aGlzLm5hbWUsIDAuMyk7XG4gICAgICAgIG5vZGUuY29udGFpbmVyLmNvbnRhaW5lckVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndHV0b3JpYWxzLWRlbW8tc2NyaXB0LWNvbnRhaW5lcicpO1xuICAgICAgICB0aGlzLl9hZGRIZWFkZXIoKTtcbiAgICAgICAgdGhpcy5fcm9vdC5hcHBlbmQodGhpcy5fbWFpbkhlYWRlcik7XG4gICAgICAgIHRoaXMuX2FkZERlc2NyaXB0aW9uKCk7XG4gICAgICAgIHRoaXMuX3Jvb3QuYXBwZW5kKHRoaXMuX2FjdGl2aXR5KTtcbiAgICB9XG4gICAgLyoqIFN0YXJ0cyB0aGUgZGVtbyBzY3JpcHQgYWN0aW9ucyAqL1xuICAgIF9zdGFydFNjcmlwdCgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5fYWN0aXZpdHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ3Jvay10dXRvcmlhbC1lbnRyeScpO1xuICAgICAgICAgICAgY29uc3QgZW50cnlJbmRpY2F0b3JzID0gdGhpcy5fYWN0aXZpdHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ3Jvay1pY29uJyk7XG4gICAgICAgICAgICBjb25zdCBlbnRyeUluc3RydWN0aW9ucyA9IHRoaXMuX2FjdGl2aXR5LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2dyb2stdHV0b3JpYWwtc3RlcC1kZXNjcmlwdGlvbicpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2N1cnJlbnRTdGVwOyBpIDwgdGhpcy5zdGVwTnVtYmVyOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNTdG9wcGVkIHx8IHRoaXMuX2lzQ2FuY2VsbGVkKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBlbnRyeUluZGljYXRvcnNbaV0uY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYXIgZmEtc3Bpbm5lci10aGlyZCBmYS1zcGluJztcbiAgICAgICAgICAgICAgICBlbnRyeUluc3RydWN0aW9uc1tpXS5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICBlbnRyeUluc3RydWN0aW9uc1tpXS5jbGFzc0xpc3QuYWRkKCd2aXNpYmxlJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFN0ZXAgPSBlbnRyeVtpXTtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLl9zdGVwc1tpXS5mdW5jKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsVG8odGhpcy5fcm9vdCwgY3VycmVudFN0ZXAub2Zmc2V0VG9wIC0gdGhpcy5fbWFpbkhlYWRlci5vZmZzZXRIZWlnaHQpO1xuICAgICAgICAgICAgICAgIHlpZWxkIGRlbGF5KCgoX2EgPSB0aGlzLl9zdGVwc1tpXS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVsYXkpID8gKF9iID0gdGhpcy5fc3RlcHNbaV0ub3B0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmRlbGF5IDogMjAwMCk7XG4gICAgICAgICAgICAgICAgZW50cnlJbmRpY2F0b3JzW2ldLmNsYXNzTmFtZSA9ICdncm9rLWljb24gZmFyIGZhLWNoZWNrJztcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzcy52YWx1ZSsrO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzU3RlcHMuaW5uZXJUZXh0ID0gYFN0ZXA6ICR7dGhpcy5fcHJvZ3Jlc3MudmFsdWV9IG9mICR7dGhpcy5zdGVwTnVtYmVyfWA7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0ZXArKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RlcCA9PT0gdGhpcy5zdGVwTnVtYmVyKVxuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3BTdGFydEJ0bi5yZXBsYWNlV2l0aCh0aGlzLl9yZXN0YXJ0QnRuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNjcm9sbHMgdG8gdGhlIGN1cnJlbnQgc3RlcFxuICAgICAqIEBwYXJhbSBlbGVtZW50IC0gQ3VycmVudCBzdGVwIGVsZW1lbnQgaW4gcm9vdFxuICAgICAqIEBwYXJhbSB5IC0geSBjb29yZGluYXRlIG9mIHRoZSBlbGVtZW50XG4gICAgICovXG4gICAgX3Njcm9sbFRvKGVsZW1lbnQsIHkpIHtcbiAgICAgICAgZWxlbWVudC5mb2N1cygpO1xuICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IHk7XG4gICAgfVxuICAgIC8qKiBDaGFuZ2VzIHRoZSBzdGF0ZSBvZiB0aGUgZGVtbyBzY3JpcHQgKHN0b3AvcGxheSkgKi9cbiAgICBfY2hhbmdlU3RvcFN0YXRlKCkge1xuICAgICAgICBjb25zdCBpY29uID0gdGhpcy5fc3RvcFN0YXJ0QnRuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2dyb2staWNvbicpO1xuICAgICAgICBpY29uWzBdLmNsYXNzTmFtZSA9ICdncm9rLWljb24gZmFzIGZhLXBsYXknO1xuICAgICAgICB0aGlzLl9pc1N0b3BwZWQgPSAhdGhpcy5faXNTdG9wcGVkO1xuICAgICAgICBpZiAoIXRoaXMuX2lzU3RvcHBlZCkge1xuICAgICAgICAgICAgaWNvblswXS5jbGFzc05hbWUgPSAnZ3Jvay1pY29uIGZhbCBmYS1wYXVzZSc7XG4gICAgICAgICAgICB0aGlzLl9zdGFydFNjcmlwdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKiBSZXN0YXJ0cyB0aGUgc2NyaXB0ICovXG4gICAgX3Jlc3RhcnRTY3JpcHQoKSB7XG4gICAgICAgIGNvbnN0IHNjcmlwdERvY2tOb2RlID0gQXJyYXkuZnJvbShncm9rLnNoZWxsLmRvY2tNYW5hZ2VyLnJvb3ROb2RlLmNoaWxkcmVuKVsxXTtcbiAgICAgICAgaWYgKHNjcmlwdERvY2tOb2RlLmNvbnRhaW5lci5jb250YWluZXJFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygndHV0b3JpYWxzLWRlbW8tc2NyaXB0LWNvbnRhaW5lcicpKSB7XG4gICAgICAgICAgICBncm9rLnNoZWxsLmRvY2tNYW5hZ2VyLmNsb3NlKHNjcmlwdERvY2tOb2RlKTtcbiAgICAgICAgICAgIGdyb2suc2hlbGwuY2xvc2VBbGwoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jbGVhclJvb3QoKTtcbiAgICAgICAgdGhpcy5fc2V0SW5pdFBhcmFtcygpO1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICAgIC8qKiBDbGVhcnMgdGhlIHJvb3QgZWxlbWVudCAqL1xuICAgIF9jbGVhclJvb3QoKSB7XG4gICAgICAgIHRoaXMuX3Jvb3QgPSB1aS5kaXYoW10sIHsgaWQ6ICdkZW1vLXNjcmlwdCcsIGNsYXNzZXM6ICd0dXRvcmlhbHMtcm9vdCB0dXRvcmlhbHMtdHJhY2sgZGVtby1hcHAtc2NyaXB0JyB9KTtcbiAgICAgICAgdGhpcy5fbWFpbkhlYWRlciA9IHVpLnBhbmVsKFtdLCAndHV0b3JpYWxzLW1haW4taGVhZGVyJyk7XG4gICAgICAgIHRoaXMuX2hlYWRlciA9IHVpLmgxKCcnKTtcbiAgICAgICAgdGhpcy5faGVhZGVyRGl2ID0gdWkuZGl2SChbXSwgJ3R1dG9yaWFscy1yb290LWhlYWRlcicpO1xuICAgICAgICB0aGlzLl9hY3Rpdml0eSA9IHVpLnBhbmVsKFtdLCAndHV0b3JpYWxzLXJvb3QtZGVzY3JpcHRpb24nKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NEaXYgPSB1aS5kaXZWKFtdLCAndHV0b3JpYWxzLXJvb3QtcHJvZ3Jlc3MnKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MgPSB1aS5lbGVtZW50KCdwcm9ncmVzcycpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc1N0ZXBzID0gdWkuZGl2VGV4dCgnJyk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLm1heCA9IDA7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLnZhbHVlID0gMTtcbiAgICB9XG4gICAgLyoqIFNldHMgaW5pdGlhbCBwYXJhbWV0ZXJzICovXG4gICAgX3NldEluaXRQYXJhbXMoKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGVwID0gMDtcbiAgICAgICAgdGhpcy5faXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzQ2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGljb24gPSB0aGlzLl9zdG9wU3RhcnRCdG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ3Jvay1pY29uJyk7XG4gICAgICAgIGljb25bMF0uY2xhc3NOYW1lID0gJ2dyb2staWNvbiBmYWwgZmEtcGF1c2UnO1xuICAgIH1cbiAgICAvKiogQ2FuY2VscyB0aGUgc2NyaXB0ICovXG4gICAgY2FuY2VsU2NyaXB0KCkge1xuICAgICAgICB0aGlzLl9pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIERlbW9TY3JpcHQuY3VycmVudE9iamVjdCA9IG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBuZXcgc3RlcCB0byBzY3JpcHRcbiAgICAgKiBAcGFyYW0gbmFtZSAtIFN0ZXAgbmFtZVxuICAgICAqIEBwYXJhbSBmdW5jIC0gU3RlcCBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gU3RlcCBvcHRpb25zIChkZXNjcmlwdGlvbiBhbmQgZGVsYXkgYWZ0ZXIgc3RlcCBlbmRzKVxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIGN1cnJlbnQgZGVtbyBzY3JpcHQgb2JqZWN0XG4gICAgICovXG4gICAgc3RlcChuYW1lLCBmdW5jLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX3N0ZXBzW3RoaXMuc3RlcHMubGVuZ3RoXSA9IHtcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBmdW5jOiBmdW5jLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKiBTdGFydHMgdGhlIGRlbW8gc2NyaXB0ICovXG4gICAgc3RhcnQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0Um9vdCgpO1xuICAgICAgICAgICAgdGhpcy5fc3RhcnRTY3JpcHQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuRGVtb1NjcmlwdC5jdXJyZW50T2JqZWN0ID0gbnVsbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpHVnRieTF6WTNKcGNIUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKa1pXMXZMWE5qY21sd2RDNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenM3T3pzN096czdRVUZCUVN4UFFVRlBMRXRCUVVzc1JVRkJSU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRPMEZCUTNSRExFOUJRVThzUzBGQlN5eEZRVUZGTEUxQlFVMHNhVUpCUVdsQ0xFTkJRVU03UVVGRGRFTXNUMEZCVHl4TFFVRkxMRWxCUVVrc1RVRkJUU3h0UWtGQmJVSXNRMEZCUXp0QlFVVXhReXhQUVVGUExFVkJRVU1zUzBGQlN5eEZRVUZETEUxQlFVMHNiME5CUVc5RExFTkJRVU03UVVGbGVrUXNiVWRCUVcxSE8wRkJRMjVITEUxQlFVMHNUMEZCVHl4VlFVRlZPMGxCTmtKeVFpeFpRVUZaTEVsQlFWa3NSVUZCUlN4WFFVRnRRanRSUVRWQ04wTXNVMEZCU1N4SFFVRlhMRVZCUVVVc1EwRkJRenRSUVVOc1FpeG5Ra0ZCVnl4SFFVRlhMRVZCUVVVc1EwRkJRenRSUVVscVFpeHBRa0ZCV1N4SFFVRlhMRU5CUVVNc1EwRkJRenRSUVVONlFpeGxRVUZWTEVkQlFWa3NTMEZCU3l4RFFVRkRPMUZCUXpWQ0xHbENRVUZaTEVkQlFWa3NTMEZCU3l4RFFVRkRPMUZCUlRsQ0xGVkJRVXNzUjBGQmJVSXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVVXNZVUZCWVR0WlFVTXpSQ3hQUVVGUExFVkJRVVVzWjBSQlFXZEVMRVZCUVVNc1EwRkJReXhEUVVGRE8xRkJSWFJFTEZkQlFVMHNSMEZCVnl4RlFVRkZMRU5CUVVNN1VVRkZjRUlzWjBKQlFWY3NSMEZCYlVJc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVWQlFVVXNkVUpCUVhWQ0xFTkJRVU1zUTBGQlF6dFJRVU53UlN4WlFVRlBMRWRCUVhWQ0xFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkRlRU1zWlVGQlZTeEhRVUZ0UWl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUlVGQlJTeDFRa0ZCZFVJc1EwRkJReXhEUVVGRE8xRkJRMnhGTEd0Q1FVRmhMRWRCUVhOQ0xFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zUlVGRGNrVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RlFVRkZMRVZCUVVVc1kwRkJZeXhEUVVGRExFTkJRVU03VVVGRGVrTXNaMEpCUVZjc1IwRkJjMElzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhqUVVGakxFVkJRVVVzUlVGQlJTeFRRVUZUTEVOQlFVTXNRMEZCUXp0UlFVVjBSeXhqUVVGVExFZEJRVzFDTEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hGUVVGRkxEUkNRVUUwUWl4RFFVRkRMRU5CUVVNN1VVRkZka1VzYVVKQlFWa3NSMEZCYlVJc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVWQlFVVXNlVUpCUVhsQ0xFTkJRVU1zUTBGQlF6dFJRVU4wUlN4alFVRlRMRWRCUVhkQ0xFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNN1VVRkRlRVFzYlVKQlFXTXNSMEZCYlVJc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVbDBSQ3hKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTnFRaXhKUVVGSkxFTkJRVU1zVjBGQlZ5eEhRVUZITEZkQlFWY3NRMEZCUXp0UlFVVXZRaXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRka0lzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJSWHBDTEZWQlFWVXNRMEZCUXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRE8wbEJRMnhETEVOQlFVTTdTVUZGUkN4blEwRkJaME03U1VGRGFFTXNTVUZCU1N4TFFVRkxPMUZCUTFBc1QwRkJUeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBsQlEzSkNMRU5CUVVNN1NVRkZSQ3c0UTBGQk9FTTdTVUZET1VNc1NVRkJTU3hWUVVGVk8xRkJRMW9zVDBGQlR5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVNMVFpeERRVUZETzBsQlIwUXNlVUpCUVhsQ08wbEJRMnBDTEZWQlFWVTdVVUZEYUVJc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RlFVRkZMRU5CUVVNN1VVRkRlRUlzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhGUVVGRkxFTkJRVU03VVVGRE1VSXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNSVUZCUlN4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03U1VGRE9VUXNRMEZCUXp0SlFVVkVMR2REUVVGblF6dEpRVU40UWl4blFrRkJaMEk3VVVGRGRFSXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXp0UlFVTnVReXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGRmNrTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4RFFVRkRPMGxCUXpkRExFTkJRVU03U1VGRlJDeHJRMEZCYTBNN1NVRkRNVUlzYTBKQlFXdENPMUZCUTNoQ0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU03VVVGRGNrTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUTNwRExFbEJRVWtzUTBGQlF5eGpRVUZqTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTMEZCU3l4UFFVRlBMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF5eERRVUZETzFGQlJYaEdMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1EwRkJRenRKUVVOb1JDeERRVUZETzBsQlJVUXNjVU5CUVhGRE8wbEJRemRDTEdWQlFXVTdPMUZCUTNKQ0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZkQlFWY3NSVUZCUlN3MFFrRkJORUlzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGT1VVc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZEZUVNc1RVRkJUU3h2UWtGQmIwSXNSMEZCUnl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFsQlEyaEVMRTFCUVUwc1kwRkJZeXhIUVVGSExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNhVU5CUVdsRExFTkJRVU1zUTBGQlF6dFpRVU4wUml4TlFVRk5MSE5DUVVGelFpeEhRVUZITEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJRU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c01FTkJRVVVzVjBGQlZ5eEZRVU4yUlN4MVEwRkJkVU1zUTBGQlF5eERRVUZETzFsQlF6TkRMRTFCUVUwc1MwRkJTeXhIUVVGSExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTTdaMEpCUTNCQ0xHOUNRVUZ2UWp0blFrRkRjRUlzWTBGQll6dGhRVU5tTEVWQlFVVXNjVUpCUVhGQ0xFTkJRVU1zUTBGQlF6dFpRVVV4UWl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVWQlFVVXNjMEpCUVhOQ0xFTkJRVU1zUTBGQlF6dFRRVU4wUkR0SlFVTklMRU5CUVVNN1NVRkZSQ3c0UTBGQk9FTTdTVUZEZEVNc1UwRkJVenRSUVVObUxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMR2RDUVVGblFpeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTXpReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4UlFVRlJMRWRCUVVjc1MwRkJTeXhEUVVGRE8xRkJSWEJETEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhGUVVGRkxFVkJRVVVzUTBGQlF5eFRRVUZUTEVOQlFVTXNTMEZCU3l4RlFVRkZMRWxCUVVrc1JVRkJSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUXk5R0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4cFEwRkJhVU1zUTBGQlF5eERRVUZETzFGQlJXcEdMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF6dFJRVU5zUWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1VVRkZjRU1zU1VGQlNTeERRVUZETEdWQlFXVXNSVUZCUlN4RFFVRkRPMUZCUTNaQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dEpRVU53UXl4RFFVRkRPMGxCUlVRc2NVTkJRWEZETzBsQlEzWkNMRmxCUVZrN096dFpRVU40UWl4TlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEhOQ1FVRnpRaXhEUVVGRExIRkNRVUZ4UWl4RFFVRkRMRU5CUVVNN1dVRkRNMFVzVFVGQlRTeGxRVUZsTEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXh6UWtGQmMwSXNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRaUVVNelJTeE5RVUZOTEdsQ1FVRnBRaXhIUVVGSExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU1zWjBOQlFXZERMRU5CUVVNc1EwRkJRenRaUVVWc1J5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3WjBKQlEzaEVMRWxCUVVrc1NVRkJTU3hEUVVGRExGVkJRVlVzU1VGQlNTeEpRVUZKTEVOQlFVTXNXVUZCV1R0dlFrRkRkRU1zVFVGQlRUdG5Ra0ZGVWl4bFFVRmxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eEhRVUZITEhkRFFVRjNReXhEUVVGRE8yZENRVU40UlN4cFFrRkJhVUlzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzJkQ1FVTm9SQ3hwUWtGQmFVSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMmRDUVVVNVF5eE5RVUZOTEZkQlFWY3NSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGdFFpeERRVUZETzJkQ1FVVXZReXhOUVVGTkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03WjBKQlF6VkNMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUlN4WFFVRlhMRU5CUVVNc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1owSkJRMnhHTEUxQlFVMHNTMEZCU3l4RFFVRkRMRU5CUVVFc1RVRkJRU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c01FTkJRVVVzUzBGQlN5eEZRVUZETEVOQlFVTXNRMEZCUXl4TlFVRkJMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl3d1EwRkJSU3hMUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMmRDUVVWdVJpeGxRVUZsTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhIUVVGSExIZENRVUYzUWl4RFFVRkRPMmRDUVVONFJDeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8yZENRVU4yUWl4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExGTkJRVk1zUjBGQlJ5eFRRVUZUTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1MwRkJTeXhQUVVGUExFbEJRVWtzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0blFrRkZkRVlzU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlN4RFFVRkRPMkZCUTNKQ08xbEJSVVFzU1VGQlNTeEpRVUZKTEVOQlFVTXNXVUZCV1N4TFFVRkxMRWxCUVVrc1EwRkJReXhWUVVGVk8yZENRVU4yUXl4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN08wdEJRM0JFTzBsQlJVUTdPenM3VDBGSlJ6dEpRVU5MTEZOQlFWTXNRMEZCUXl4UFFVRjFRaXhGUVVGRkxFTkJRVk03VVVGRGJFUXNUMEZCVHl4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8xRkJRMmhDTEU5QlFVOHNRMEZCUXl4VFFVRlRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRM2hDTEVOQlFVTTdTVUZGUkN4MVJFRkJkVVE3U1VGREwwTXNaMEpCUVdkQ08xRkJRM1JDTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU03VVVGRGNFVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGTkJRVk1zUjBGQlJ5eDFRa0ZCZFVJc1EwRkJRenRSUVVNMVF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF6dFJRVVZ1UXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUlVGQlJUdFpRVU53UWl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eEhRVUZITEhkQ1FVRjNRaXhEUVVGRE8xbEJRemRETEVsQlFVa3NRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJRenRUUVVOeVFqdEpRVU5JTEVOQlFVTTdTVUZGUkN3d1FrRkJNRUk3U1VGRGJFSXNZMEZCWXp0UlFVTndRaXhOUVVGTkxHTkJRV01zUjBGQlJ5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVjBGQlZ5eERRVUZETEZGQlFWRXNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU12UlN4SlFVRkpMR05CUVdNc1EwRkJReXhUUVVGVExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1UwRkJVeXhEUVVGRExGRkJRVkVzUTBGQlF5eHBRMEZCYVVNc1EwRkJReXhGUVVGRk8xbEJRMjVITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1YwRkJWeXhEUVVGRExFdEJRVXNzUTBGQlF5eGpRVUZqTEVOQlFVTXNRMEZCUXp0WlFVTTNReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMU5CUTNaQ08xRkJRMFFzU1VGQlNTeERRVUZETEZWQlFWVXNSVUZCUlN4RFFVRkRPMUZCUTJ4Q0xFbEJRVWtzUTBGQlF5eGpRVUZqTEVWQlFVVXNRMEZCUXp0UlFVTjBRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdTVUZEWml4RFFVRkRPMGxCUlVRc09FSkJRVGhDTzBsQlEzUkNMRlZCUVZVN1VVRkRhRUlzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUlN4aFFVRmhMRVZCUVVVc1QwRkJUeXhGUVVGRkxHZEVRVUZuUkN4RlFVRkRMRU5CUVVNc1EwRkJRenRSUVVWNFJ5eEpRVUZKTEVOQlFVTXNWMEZCVnl4SFFVRkhMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeEZRVUZGTEhWQ1FVRjFRaXhEUVVGRExFTkJRVU03VVVGRGVrUXNTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNwQ0xFbEJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFVkJRVVVzZFVKQlFYVkNMRU5CUVVNc1EwRkJRenRSUVVWMlJDeEpRVUZKTEVOQlFVTXNVMEZCVXl4SFFVRkhMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeEZRVUZGTERSQ1FVRTBRaXhEUVVGRExFTkJRVU03VVVGRk5VUXNTVUZCU1N4RFFVRkRMRmxCUVZrc1IwRkJSeXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNSVUZCUlN4NVFrRkJlVUlzUTBGQlF5eERRVUZETzFGQlF6TkVMRWxCUVVrc1EwRkJReXhUUVVGVExFZEJRVWNzUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenRSUVVONFF5eEpRVUZKTEVOQlFVTXNZMEZCWXl4SFFVRkhMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdVVUZGY2tNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNaQ0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVNelFpeERRVUZETzBsQlJVUXNPRUpCUVRoQ08wbEJRM1JDTEdOQlFXTTdVVUZEY0VJc1NVRkJTU3hEUVVGRExGbEJRVmtzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEZEVJc1NVRkJTU3hEUVVGRExGVkJRVlVzUjBGQlJ5eExRVUZMTEVOQlFVTTdVVUZEZUVJc1NVRkJTU3hEUVVGRExGbEJRVmtzUjBGQlJ5eExRVUZMTEVOQlFVTTdVVUZGTVVJc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4elFrRkJjMElzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXp0UlFVTndSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNVMEZCVXl4SFFVRkhMSGRDUVVGM1FpeERRVUZETzBsQlF5OURMRU5CUVVNN1NVRkhSQ3g1UWtGQmVVSTdTVUZEZWtJc1dVRkJXVHRSUVVOV0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTNwQ0xGVkJRVlVzUTBGQlF5eGhRVUZoTEVkQlFVY3NTVUZCU1N4RFFVRkRPMGxCUTJ4RExFTkJRVU03U1VGRlJEczdPenM3TzA5QlRVYzdTVUZEU0N4SlFVRkpMRU5CUVVNc1NVRkJXU3hGUVVGRkxFbEJRWGxDTEVWQlFVVXNUMEZCWjBRN1VVRkROVVlzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITzFsQlF5OUNMRWxCUVVrc1JVRkJSU3hKUVVGSk8xbEJRMVlzU1VGQlNTeEZRVUZGTEVsQlFVazdXVUZEVml4UFFVRlBMRVZCUVVVc1QwRkJUenRUUVVOcVFpeERRVUZETzFGQlEwWXNUMEZCVHl4SlFVRkpMRU5CUVVNN1NVRkRaQ3hEUVVGRE8wbEJSVVFzTmtKQlFUWkNPMGxCUTNaQ0xFdEJRVXM3TzFsQlExUXNTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8xbEJRMnBDTEVsQlFVa3NRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJRenRSUVVOMFFpeERRVUZETzB0QlFVRTdPMEZCTDA1TkxIZENRVUZoTEVkQlFYTkNMRWxCUVVrc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0FxSUdGeklFUkhJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzlrWnljN1hHNXBiWEJ2Y25RZ0tpQmhjeUIxYVNCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdmRXa25PMXh1YVcxd2IzSjBJQ29nWVhNZ1ozSnZheUJtY205dElDZGtZWFJoWjNKdmF5MWhjR2t2WjNKdmF5YzdYRzVjYm1sdGNHOXlkQ0I3WkdWc1lYbDlJR1p5YjIwZ0owQmtZWFJoWjNKdmF5MXNhV0p5WVhKcFpYTXZkWFJwYkhNdmMzSmpMM1JsYzNRbk8xeHVYRzVjYmk4cUtpQlVlWEJsSUdadmNpQjdRR3hwYm1zZ1JHVnRiMU5qY21sd2RIMGdjM1JsY0NBcUwxeHVaWGh3YjNKMElIUjVjR1VnVTNSbGNDQTlJSHRjYmlBZ2JtRnRaVG9nYzNSeWFXNW5PMXh1SUNCbWRXNWpPaUFvS1NBOVBpQlFjbTl0YVhObFBIWnZhV1ErTzF4dVhHNGdJQzhxS2lCVGRHVndJRzl3ZEdsdmJuTTZJR1JsYzJOeWFYQjBhVzl1SUdGdVpDQmtaV3hoZVNBb2FXNGdiWE1wSUdGbWRHVnlJR1oxYm1OMGFXOXVJR1Z1WkhNZ0tpOWNiaUFnYjNCMGFXOXVjejg2SUh0Y2JpQWdJQ0JrWlhOamNtbHdkR2x2Ymo4NklITjBjbWx1Wnp0Y2JpQWdJQ0JrWld4aGVUODZJRzUxYldKbGNqdGNiaUFnZlZ4dWZUdGNibHh1THlvcUlFUmxiVzhnYzJOeWFYQjBJR05zWVhOekxpQkRiM1ZzWkNCaVpTQjFjMlZrSUdadmNpQmpjbVZoZEdsdVp5QmtaVzF2SUhOamNtbHdkSE1nZEc4Z2MyaHZkeUIwYUdVZ2NHeGhkR1p2Y20wZ1kyRndZV0pwYkdsMGFXVnpJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdSR1Z0YjFOamNtbHdkQ0I3WEc0Z0lHNWhiV1U2SUhOMGNtbHVaeUE5SUNjbk8xeHVJQ0JrWlhOamNtbHdkR2x2YmpvZ2MzUnlhVzVuSUQwZ0p5YzdYRzVjYmlBZ2MzUmhkR2xqSUdOMWNuSmxiblJQWW1wbFkzUTZJRVJsYlc5VFkzSnBjSFFnZkNCdWRXeHNJRDBnYm5Wc2JEdGNibHh1SUNCd2NtbDJZWFJsSUY5amRYSnlaVzUwVTNSbGNEb2diblZ0WW1WeUlEMGdNRHRjYmlBZ2NISnBkbUYwWlNCZmFYTlRkRzl3Y0dWa09pQmliMjlzWldGdUlEMGdabUZzYzJVN1hHNGdJSEJ5YVhaaGRHVWdYMmx6UTJGdVkyVnNiR1ZrT2lCaWIyOXNaV0Z1SUQwZ1ptRnNjMlU3WEc1Y2JpQWdjSEpwZG1GMFpTQmZjbTl2ZERvZ1NGUk5URVJwZGtWc1pXMWxiblFnUFNCMWFTNWthWFlvVzEwc0lIdHBaRG9nSjJSbGJXOHRjMk55YVhCMEp5eGNiaUFnSUNCamJHRnpjMlZ6T2lBbmRIVjBiM0pwWVd4ekxYSnZiM1FnZEhWMGIzSnBZV3h6TFhSeVlXTnJJR1JsYlc4dFlYQndMWE5qY21sd2RDZDlLVHRjYmx4dUlDQndjbWwyWVhSbElGOXpkR1Z3Y3pvZ1UzUmxjRnRkSUQwZ1cxMDdYRzVjYmlBZ2NISnBkbUYwWlNCZmJXRnBia2hsWVdSbGNqb2dTRlJOVEVScGRrVnNaVzFsYm5RZ1BTQjFhUzV3WVc1bGJDaGJYU3dnSjNSMWRHOXlhV0ZzY3kxdFlXbHVMV2hsWVdSbGNpY3BPMXh1SUNCd2NtbDJZWFJsSUY5b1pXRmtaWEk2SUVoVVRVeElaV0ZrYVc1blJXeGxiV1Z1ZENBOUlIVnBMbWd4S0NjbktUdGNiaUFnY0hKcGRtRjBaU0JmYUdWaFpHVnlSR2wyT2lCSVZFMU1SR2wyUld4bGJXVnVkQ0E5SUhWcExtUnBka2dvVzEwc0lDZDBkWFJ2Y21saGJITXRjbTl2ZEMxb1pXRmtaWEluS1R0Y2JpQWdjSEpwZG1GMFpTQmZjM1J2Y0ZOMFlYSjBRblJ1T2lCSVZFMU1RblYwZEc5dVJXeGxiV1Z1ZENBOUlIVnBMbUoxZEhSdmJpaDFhUzVwWTI5dVJrRW9KM0JoZFhObEp5a3NYRzRnSUNBZ0tDa2dQVDRnZEdocGN5NWZZMmhoYm1kbFUzUnZjRk4wWVhSbEtDa3NJQ2RRYkdGNUlDOGdjR0YxYzJVbktUdGNiaUFnY0hKcGRtRjBaU0JmY21WemRHRnlkRUowYmpvZ1NGUk5URUoxZEhSdmJrVnNaVzFsYm5RZ1BTQjFhUzVpZFhSMGIyNG9kV2t1YVdOdmJrWkJLQ2R5WldSdkp5a3NJQ2dwSUQwK0lIUm9hWE11WDNKbGMzUmhjblJUWTNKcGNIUW9LU3dnSjFKbGMzUmhjblFuS1R0Y2JseHVJQ0J3Y21sMllYUmxJRjloWTNScGRtbDBlVG9nU0ZSTlRFUnBka1ZzWlcxbGJuUWdQU0IxYVM1d1lXNWxiQ2hiWFN3Z0ozUjFkRzl5YVdGc2N5MXliMjkwTFdSbGMyTnlhWEIwYVc5dUp5azdYRzVjYmlBZ2NISnBkbUYwWlNCZmNISnZaM0psYzNORWFYWTZJRWhVVFV4RWFYWkZiR1Z0Wlc1MElEMGdkV2t1WkdsMlZpaGJYU3dnSjNSMWRHOXlhV0ZzY3kxeWIyOTBMWEJ5YjJkeVpYTnpKeWs3WEc0Z0lIQnlhWFpoZEdVZ1gzQnliMmR5WlhOek9pQklWRTFNVUhKdlozSmxjM05GYkdWdFpXNTBJRDBnZFdrdVpXeGxiV1Z1ZENnbmNISnZaM0psYzNNbktUdGNiaUFnY0hKcGRtRjBaU0JmY0hKdlozSmxjM05UZEdWd2N6b2dTRlJOVEVScGRrVnNaVzFsYm5RZ1BTQjFhUzVrYVhaVVpYaDBLQ2NuS1R0Y2JseHVYRzRnSUdOdmJuTjBjblZqZEc5eUtHNWhiV1U2SUhOMGNtbHVaeXdnWkdWelkzSnBjSFJwYjI0NklITjBjbWx1WnlrZ2UxeHVJQ0FnSUhSb2FYTXVibUZ0WlNBOUlHNWhiV1U3WEc0Z0lDQWdkR2hwY3k1a1pYTmpjbWx3ZEdsdmJpQTlJR1JsYzJOeWFYQjBhVzl1TzF4dVhHNGdJQ0FnZEdocGN5NWZjSEp2WjNKbGMzTXViV0Y0SUQwZ01EdGNiaUFnSUNCMGFHbHpMbDl3Y205bmNtVnpjeTUyWVd4MVpTQTlJREU3WEc1Y2JpQWdJQ0JFWlcxdlUyTnlhWEIwTG1OMWNuSmxiblJQWW1wbFkzUWdQU0IwYUdsek8xeHVJQ0I5WEc1Y2JpQWdMeW9xSUZKbGRIVnlibk1nWkdWdGJ5QnpZM0pwY0hRZ2MzUmxjSE1nS2k5Y2JpQWdaMlYwSUhOMFpYQnpLQ2s2SUZOMFpYQmJYU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WDNOMFpYQnpPMXh1SUNCOVhHNWNiaUFnTHlvcUlGSmxkSFZ5Ym5NZ2RHaGxJR0Z0YjNWdWRDQnZaaUJrWlcxdklITmpjbWx3ZENCemRHVndjeUFxTDF4dUlDQm5aWFFnYzNSbGNFNTFiV0psY2lncE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxsOXpkR1Z3Y3k1c1pXNW5kR2c3WEc0Z0lIMWNibHh1WEc0Z0lDOHFLaUJCWkdSeklITmpjbWx3ZENCb1pXRmtaWElnS2k5Y2JpQWdjSEpwZG1GMFpTQmZZV1JrU0dWaFpHVnlLQ2s2SUhadmFXUWdlMXh1SUNBZ0lIUm9hWE11WDJOeVpXRjBaVWhsWVdSbGNrUnBkaWdwTzF4dUlDQWdJSFJvYVhNdVgyTnlaV0YwWlZCeWIyZHlaWE56UkdsMktDazdYRzRnSUNBZ2RHaHBjeTVmYldGcGJraGxZV1JsY2k1aGNIQmxibVFvZEdocGN5NWZhR1ZoWkdWeVJHbDJMQ0IwYUdsekxsOXdjbTluY21WemMwUnBkaWs3WEc0Z0lIMWNibHh1SUNBdktpb2dRM0psWVhSbGN5QnpZM0pwY0hRZ2FHVmhaR1Z5SUdScGRpQXFMMXh1SUNCd2NtbDJZWFJsSUY5amNtVmhkR1ZJWldGa1pYSkVhWFlvS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdkR2hwY3k1ZmFHVmhaR1Z5TG1sdWJtVnlWR1Y0ZENBOUlIUm9hWE11Ym1GdFpUdGNiaUFnSUNCMGFHbHpMbDlvWldGa1pYSkVhWFl1WVhCd1pXNWtLSFJvYVhNdVgyaGxZV1JsY2lrN1hHNWNiaUFnSUNCMGFHbHpMbDlvWldGa1pYSkVhWFl1WVhCd1pXNWtLSFJvYVhNdVgzTjBiM0JUZEdGeWRFSjBiaWs3WEc0Z0lIMWNibHh1SUNBdktpb2dRM0psWVhSbGN5QnpZM0pwY0hRZ2NISnZaM0psYzNNZ1pHbDJJQ292WEc0Z0lIQnlhWFpoZEdVZ1gyTnlaV0YwWlZCeWIyZHlaWE56UkdsMktDazZJSFp2YVdRZ2UxeHVJQ0FnSUhSb2FYTXVYM0J5YjJkeVpYTnpMbTFoZUNBOUlIUm9hWE11YzNSbGNFNTFiV0psY2p0Y2JpQWdJQ0IwYUdsekxsOXdjbTluY21WemMwUnBkaTVoY0hCbGJtUW9kR2hwY3k1ZmNISnZaM0psYzNNcE8xeHVJQ0FnSUhSb2FYTXVYM0J5YjJkeVpYTnpVM1JsY0hNZ1BTQjFhUzVrYVhaVVpYaDBLR0JUZEdWd09pQWtlM1JvYVhNdVgzQnliMmR5WlhOekxuWmhiSFZsZlNCdlppQWtlM1JvYVhNdWMzUmxjRTUxYldKbGNuMWdLVHRjYmx4dUlDQWdJSFJvYVhNdVgzQnliMmR5WlhOelJHbDJMbUZ3Y0dWdVpDaDBhR2x6TGw5d2NtOW5jbVZ6YzFOMFpYQnpLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtpQkJaR1J6SUdSbGMyTnlhWEIwYVc5dUlHOW1JSFJvWlNCelkzSnBjSFFnS2k5Y2JpQWdjSEpwZG1GMFpTQmZZV1JrUkdWelkzSnBjSFJwYjI0b0tUb2dkbTlwWkNCN1hHNGdJQ0FnZEdocGN5NWZZV04wYVhacGRIa3VZWEJ3Wlc1a0tIVnBMbVJwZGloMGFHbHpMbVJsYzJOeWFYQjBhVzl1TENBbmRIVjBiM0pwWVd4ekxYSnZiM1F0WkdWelkzSnBjSFJwYjI0bktTazdYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFJvYVhNdWMzUmxjRTUxYldKbGNqc2dhU3NyS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0JwYm5OMGNuVmpkR2x2YmtsdVpHbGpZWFJ2Y2lBOUlIVnBMbWxqYjI1R1FTZ25ZMnh2WTJzbktUdGNiaUFnSUNBZ0lHTnZibk4wSUdsdWMzUnlkV04wYVc5dVJHbDJJRDBnZFdrdVpHbDJLSFJvYVhNdVgzTjBaWEJ6VzJsZExtNWhiV1VzSUNkbmNtOXJMWFIxZEc5eWFXRnNMV1Z1ZEhKNUxXbHVjM1J5ZFdOMGFXOXVKeWs3WEc0Z0lDQWdJQ0JqYjI1emRDQmpkWEp5Wlc1MFUzUmxjRVJsYzJOeWFYQjBhVzl1SUQwZ2RXa3VaR2wyS0hSb2FYTXVYM04wWlhCelcybGRMbTl3ZEdsdmJuTS9MbVJsYzJOeWFYQjBhVzl1TEZ4dUlDQWdJQ0FnSUNBblozSnZheTEwZFhSdmNtbGhiQzF6ZEdWd0xXUmxjMk55YVhCMGFXOXVJR2hwWkdSbGJpY3BPMXh1SUNBZ0lDQWdZMjl1YzNRZ1pXNTBjbmtnUFNCMWFTNWthWFpJS0Z0Y2JpQWdJQ0FnSUNBZ2FXNXpkSEoxWTNScGIyNUpibVJwWTJGMGIzSXNYRzRnSUNBZ0lDQWdJR2x1YzNSeWRXTjBhVzl1UkdsMkxGeHVJQ0FnSUNBZ1hTd2dKMmR5YjJzdGRIVjBiM0pwWVd3dFpXNTBjbmtuS1R0Y2JseHVJQ0FnSUNBZ2RHaHBjeTVmWVdOMGFYWnBkSGt1WVhCd1pXNWtLR1Z1ZEhKNUxDQmpkWEp5Wlc1MFUzUmxjRVJsYzJOeWFYQjBhVzl1S1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBdktpb2dTVzVwZEdsaGJHbDZaWE1nZEdobElISnZiM1FnYjJZZ2RHaGxJR1JsYlc4Z2MyTnlhWEIwSUNvdlhHNGdJSEJ5YVhaaGRHVWdYMmx1YVhSU2IyOTBLQ2s2SUhadmFXUWdlMXh1SUNBZ0lHZHliMnN1YzJobGJHd3VkMmx1Wkc5M2N5NXphRzkzUTI5dWRHVjRkRkJoYm1Wc0lEMGdkSEoxWlR0Y2JpQWdJQ0JuY205ckxuTm9aV3hzTG5kcGJtUnZkM011YzJodmQwaGxiSEFnUFNCbVlXeHpaVHRjYmx4dUlDQWdJR052Ym5OMElHNXZaR1VnUFNCbmNtOXJMbk5vWld4c0xtUnZZMnROWVc1aFoyVnlMbVJ2WTJzb2RHaHBjeTVmY205dmRDd2dSRWN1UkU5RFMxOVVXVkJGTGxKSlIwaFVMQ0J1ZFd4c0xDQjBhR2x6TG01aGJXVXNJREF1TXlrN1hHNGdJQ0FnYm05a1pTNWpiMjUwWVdsdVpYSXVZMjl1ZEdGcGJtVnlSV3hsYldWdWRDNWpiR0Z6YzB4cGMzUXVZV1JrS0NkMGRYUnZjbWxoYkhNdFpHVnRieTF6WTNKcGNIUXRZMjl1ZEdGcGJtVnlKeWs3WEc1Y2JpQWdJQ0IwYUdsekxsOWhaR1JJWldGa1pYSW9LVHRjYmlBZ0lDQjBhR2x6TGw5eWIyOTBMbUZ3Y0dWdVpDaDBhR2x6TGw5dFlXbHVTR1ZoWkdWeUtUdGNibHh1SUNBZ0lIUm9hWE11WDJGa1pFUmxjMk55YVhCMGFXOXVLQ2s3WEc0Z0lDQWdkR2hwY3k1ZmNtOXZkQzVoY0hCbGJtUW9kR2hwY3k1ZllXTjBhWFpwZEhrcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xSUZOMFlYSjBjeUIwYUdVZ1pHVnRieUJ6WTNKcGNIUWdZV04wYVc5dWN5QXFMMXh1SUNCd2NtbDJZWFJsSUdGemVXNWpJRjl6ZEdGeWRGTmpjbWx3ZENncE9pQlFjbTl0YVhObFBIWnZhV1ErSUh0Y2JpQWdJQ0JqYjI1emRDQmxiblJ5ZVNBOUlIUm9hWE11WDJGamRHbDJhWFI1TG1kbGRFVnNaVzFsYm5SelFubERiR0Z6YzA1aGJXVW9KMmR5YjJzdGRIVjBiM0pwWVd3dFpXNTBjbmtuS1R0Y2JpQWdJQ0JqYjI1emRDQmxiblJ5ZVVsdVpHbGpZWFJ2Y25NZ1BTQjBhR2x6TGw5aFkzUnBkbWwwZVM1blpYUkZiR1Z0Wlc1MGMwSjVRMnhoYzNOT1lXMWxLQ2RuY205ckxXbGpiMjRuS1R0Y2JpQWdJQ0JqYjI1emRDQmxiblJ5ZVVsdWMzUnlkV04wYVc5dWN5QTlJSFJvYVhNdVgyRmpkR2wyYVhSNUxtZGxkRVZzWlcxbGJuUnpRbmxEYkdGemMwNWhiV1VvSjJkeWIyc3RkSFYwYjNKcFlXd3RjM1JsY0Mxa1pYTmpjbWx3ZEdsdmJpY3BPMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SUhSb2FYTXVYMk4xY25KbGJuUlRkR1Z3T3lCcElEd2dkR2hwY3k1emRHVndUblZ0WW1WeU95QnBLeXNwSUh0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6TGw5cGMxTjBiM0J3WldRZ2ZId2dkR2hwY3k1ZmFYTkRZVzVqWld4c1pXUXBYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVYRzRnSUNBZ0lDQmxiblJ5ZVVsdVpHbGpZWFJ2Y25OYmFWMHVZMnhoYzNOT1lXMWxJRDBnSjJkeWIyc3RhV052YmlCbVlYSWdabUV0YzNCcGJtNWxjaTEwYUdseVpDQm1ZUzF6Y0dsdUp6dGNiaUFnSUNBZ0lHVnVkSEo1U1c1emRISjFZM1JwYjI1elcybGRMbU5zWVhOelRHbHpkQzV5WlcxdmRtVW9KMmhwWkdSbGJpY3BPMXh1SUNBZ0lDQWdaVzUwY25sSmJuTjBjblZqZEdsdmJuTmJhVjB1WTJ4aGMzTk1hWE4wTG1Ga1pDZ25kbWx6YVdKc1pTY3BPMXh1WEc0Z0lDQWdJQ0JqYjI1emRDQmpkWEp5Wlc1MFUzUmxjQ0E5SUdWdWRISjVXMmxkSUdGeklFaFVUVXhFYVhaRmJHVnRaVzUwTzF4dVhHNGdJQ0FnSUNCaGQyRnBkQ0IwYUdsekxsOXpkR1Z3YzF0cFhTNW1kVzVqS0NrN1hHNGdJQ0FnSUNCMGFHbHpMbDl6WTNKdmJHeFVieWgwYUdsekxsOXliMjkwTENCamRYSnlaVzUwVTNSbGNDNXZabVp6WlhSVWIzQWdMU0IwYUdsekxsOXRZV2x1U0dWaFpHVnlMbTltWm5ObGRFaGxhV2RvZENrN1hHNGdJQ0FnSUNCaGQyRnBkQ0JrWld4aGVTaDBhR2x6TGw5emRHVndjMXRwWFM1dmNIUnBiMjV6UHk1a1pXeGhlU0EvSUhSb2FYTXVYM04wWlhCelcybGRMbTl3ZEdsdmJuTS9MbVJsYkdGNUlTQTZJREl3TURBcE8xeHVYRzRnSUNBZ0lDQmxiblJ5ZVVsdVpHbGpZWFJ2Y25OYmFWMHVZMnhoYzNOT1lXMWxJRDBnSjJkeWIyc3RhV052YmlCbVlYSWdabUV0WTJobFkyc25PMXh1SUNBZ0lDQWdkR2hwY3k1ZmNISnZaM0psYzNNdWRtRnNkV1VyS3p0Y2JpQWdJQ0FnSUhSb2FYTXVYM0J5YjJkeVpYTnpVM1JsY0hNdWFXNXVaWEpVWlhoMElEMGdZRk4wWlhBNklDUjdkR2hwY3k1ZmNISnZaM0psYzNNdWRtRnNkV1Y5SUc5bUlDUjdkR2hwY3k1emRHVndUblZ0WW1WeWZXQTdYRzVjYmlBZ0lDQWdJSFJvYVhNdVgyTjFjbkpsYm5SVGRHVndLeXM3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0hSb2FYTXVYMk4xY25KbGJuUlRkR1Z3SUQwOVBTQjBhR2x6TG5OMFpYQk9kVzFpWlhJcFhHNGdJQ0FnSUNCMGFHbHpMbDl6ZEc5d1UzUmhjblJDZEc0dWNtVndiR0ZqWlZkcGRHZ29kR2hwY3k1ZmNtVnpkR0Z5ZEVKMGJpazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nVTJOeWIyeHNjeUIwYnlCMGFHVWdZM1Z5Y21WdWRDQnpkR1Z3WEc0Z0lDQXFJRUJ3WVhKaGJTQmxiR1Z0Wlc1MElDMGdRM1Z5Y21WdWRDQnpkR1Z3SUdWc1pXMWxiblFnYVc0Z2NtOXZkRnh1SUNBZ0tpQkFjR0Z5WVcwZ2VTQXRJSGtnWTI5dmNtUnBibUYwWlNCdlppQjBhR1VnWld4bGJXVnVkRnh1SUNBZ0tpOWNiaUFnY0hKcGRtRjBaU0JmYzJOeWIyeHNWRzhvWld4bGJXVnVkRG9nU0ZSTlRFUnBka1ZzWlcxbGJuUXNJSGs2SUc1MWJXSmxjaWs2SUhadmFXUWdlMXh1SUNBZ0lHVnNaVzFsYm5RdVptOWpkWE1vS1R0Y2JpQWdJQ0JsYkdWdFpXNTBMbk5qY205c2JGUnZjQ0E5SUhrN1hHNGdJSDFjYmx4dUlDQXZLaW9nUTJoaGJtZGxjeUIwYUdVZ2MzUmhkR1VnYjJZZ2RHaGxJR1JsYlc4Z2MyTnlhWEIwSUNoemRHOXdMM0JzWVhrcElDb3ZYRzRnSUhCeWFYWmhkR1VnWDJOb1lXNW5aVk4wYjNCVGRHRjBaU2dwT2lCMmIybGtJSHRjYmlBZ0lDQmpiMjV6ZENCcFkyOXVJRDBnZEdocGN5NWZjM1J2Y0ZOMFlYSjBRblJ1TG1kbGRFVnNaVzFsYm5SelFubERiR0Z6YzA1aGJXVW9KMmR5YjJzdGFXTnZiaWNwTzF4dUlDQWdJR2xqYjI1Yk1GMHVZMnhoYzNOT1lXMWxJRDBnSjJkeWIyc3RhV052YmlCbVlYTWdabUV0Y0d4aGVTYzdYRzRnSUNBZ2RHaHBjeTVmYVhOVGRHOXdjR1ZrSUQwZ0lYUm9hWE11WDJselUzUnZjSEJsWkR0Y2JseHVJQ0FnSUdsbUlDZ2hkR2hwY3k1ZmFYTlRkRzl3Y0dWa0tTQjdYRzRnSUNBZ0lDQnBZMjl1V3pCZExtTnNZWE56VG1GdFpTQTlJQ2RuY205ckxXbGpiMjRnWm1Gc0lHWmhMWEJoZFhObEp6dGNiaUFnSUNBZ0lIUm9hWE11WDNOMFlYSjBVMk55YVhCMEtDazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdMeW9xSUZKbGMzUmhjblJ6SUhSb1pTQnpZM0pwY0hRZ0tpOWNiaUFnY0hKcGRtRjBaU0JmY21WemRHRnlkRk5qY21sd2RDZ3BPaUIyYjJsa0lIdGNiaUFnSUNCamIyNXpkQ0J6WTNKcGNIUkViMk5yVG05a1pTQTlJRUZ5Y21GNUxtWnliMjBvWjNKdmF5NXphR1ZzYkM1a2IyTnJUV0Z1WVdkbGNpNXliMjkwVG05a1pTNWphR2xzWkhKbGJpbGJNVjA3WEc0Z0lDQWdhV1lnS0hOamNtbHdkRVJ2WTJ0T2IyUmxMbU52Ym5SaGFXNWxjaTVqYjI1MFlXbHVaWEpGYkdWdFpXNTBMbU5zWVhOelRHbHpkQzVqYjI1MFlXbHVjeWduZEhWMGIzSnBZV3h6TFdSbGJXOHRjMk55YVhCMExXTnZiblJoYVc1bGNpY3BLU0I3WEc0Z0lDQWdJQ0JuY205ckxuTm9aV3hzTG1SdlkydE5ZVzVoWjJWeUxtTnNiM05sS0hOamNtbHdkRVJ2WTJ0T2IyUmxLVHRjYmlBZ0lDQWdJR2R5YjJzdWMyaGxiR3d1WTJ4dmMyVkJiR3dvS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdkR2hwY3k1ZlkyeGxZWEpTYjI5MEtDazdYRzRnSUNBZ2RHaHBjeTVmYzJWMFNXNXBkRkJoY21GdGN5Z3BPMXh1SUNBZ0lIUm9hWE11YzNSaGNuUW9LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtpQkRiR1ZoY25NZ2RHaGxJSEp2YjNRZ1pXeGxiV1Z1ZENBcUwxeHVJQ0J3Y21sMllYUmxJRjlqYkdWaGNsSnZiM1FvS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdkR2hwY3k1ZmNtOXZkQ0E5SUhWcExtUnBkaWhiWFN3Z2UybGtPaUFuWkdWdGJ5MXpZM0pwY0hRbkxDQmpiR0Z6YzJWek9pQW5kSFYwYjNKcFlXeHpMWEp2YjNRZ2RIVjBiM0pwWVd4ekxYUnlZV05ySUdSbGJXOHRZWEJ3TFhOamNtbHdkQ2Q5S1R0Y2JseHVJQ0FnSUhSb2FYTXVYMjFoYVc1SVpXRmtaWElnUFNCMWFTNXdZVzVsYkNoYlhTd2dKM1IxZEc5eWFXRnNjeTF0WVdsdUxXaGxZV1JsY2ljcE8xeHVJQ0FnSUhSb2FYTXVYMmhsWVdSbGNpQTlJSFZwTG1neEtDY25LVHRjYmlBZ0lDQjBhR2x6TGw5b1pXRmtaWEpFYVhZZ1BTQjFhUzVrYVhaSUtGdGRMQ0FuZEhWMGIzSnBZV3h6TFhKdmIzUXRhR1ZoWkdWeUp5azdYRzVjYmlBZ0lDQjBhR2x6TGw5aFkzUnBkbWwwZVNBOUlIVnBMbkJoYm1Wc0tGdGRMQ0FuZEhWMGIzSnBZV3h6TFhKdmIzUXRaR1Z6WTNKcGNIUnBiMjRuS1R0Y2JseHVJQ0FnSUhSb2FYTXVYM0J5YjJkeVpYTnpSR2wySUQwZ2RXa3VaR2wyVmloYlhTd2dKM1IxZEc5eWFXRnNjeTF5YjI5MExYQnliMmR5WlhOekp5azdYRzRnSUNBZ2RHaHBjeTVmY0hKdlozSmxjM01nUFNCMWFTNWxiR1Z0Wlc1MEtDZHdjbTluY21WemN5Y3BPMXh1SUNBZ0lIUm9hWE11WDNCeWIyZHlaWE56VTNSbGNITWdQU0IxYVM1a2FYWlVaWGgwS0NjbktUdGNibHh1SUNBZ0lIUm9hWE11WDNCeWIyZHlaWE56TG0xaGVDQTlJREE3WEc0Z0lDQWdkR2hwY3k1ZmNISnZaM0psYzNNdWRtRnNkV1VnUFNBeE8xeHVJQ0I5WEc1Y2JpQWdMeW9xSUZObGRITWdhVzVwZEdsaGJDQndZWEpoYldWMFpYSnpJQ292WEc0Z0lIQnlhWFpoZEdVZ1gzTmxkRWx1YVhSUVlYSmhiWE1vS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdkR2hwY3k1ZlkzVnljbVZ1ZEZOMFpYQWdQU0F3TzF4dUlDQWdJSFJvYVhNdVgybHpVM1J2Y0hCbFpDQTlJR1poYkhObE8xeHVJQ0FnSUhSb2FYTXVYMmx6UTJGdVkyVnNiR1ZrSUQwZ1ptRnNjMlU3WEc1Y2JpQWdJQ0JqYjI1emRDQnBZMjl1SUQwZ2RHaHBjeTVmYzNSdmNGTjBZWEowUW5SdUxtZGxkRVZzWlcxbGJuUnpRbmxEYkdGemMwNWhiV1VvSjJkeWIyc3RhV052YmljcE8xeHVJQ0FnSUdsamIyNWJNRjB1WTJ4aGMzTk9ZVzFsSUQwZ0oyZHliMnN0YVdOdmJpQm1ZV3dnWm1FdGNHRjFjMlVuTzF4dUlDQjlYRzVjYmx4dUlDQXZLaW9nUTJGdVkyVnNjeUIwYUdVZ2MyTnlhWEIwSUNvdlhHNGdJR05oYm1ObGJGTmpjbWx3ZENncE9pQjJiMmxrSUh0Y2JpQWdJQ0IwYUdsekxsOXBjME5oYm1ObGJHeGxaQ0E5SUhSeWRXVTdYRzRnSUNBZ1JHVnRiMU5qY21sd2RDNWpkWEp5Wlc1MFQySnFaV04wSUQwZ2JuVnNiRHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQlpHUnpJR0VnYm1WM0lITjBaWEFnZEc4Z2MyTnlhWEIwWEc0Z0lDQXFJRUJ3WVhKaGJTQnVZVzFsSUMwZ1UzUmxjQ0J1WVcxbFhHNGdJQ0FxSUVCd1lYSmhiU0JtZFc1aklDMGdVM1JsY0NCbWRXNWpkR2x2Ymx4dUlDQWdLaUJBY0dGeVlXMGdiM0IwYVc5dWN5QXRJRk4wWlhBZ2IzQjBhVzl1Y3lBb1pHVnpZM0pwY0hScGIyNGdZVzVrSUdSbGJHRjVJR0ZtZEdWeUlITjBaWEFnWlc1a2N5bGNiaUFnSUNvZ1FISmxkSFZ5Ym5NZ1VtVjBkWEp1Y3lCMGFHVWdZM1Z5Y21WdWRDQmtaVzF2SUhOamNtbHdkQ0J2WW1wbFkzUmNiaUFnSUNvdlhHNGdJSE4wWlhBb2JtRnRaVG9nYzNSeWFXNW5MQ0JtZFc1ak9pQW9LU0E5UGlCUWNtOXRhWE5sUEhadmFXUStMQ0J2Y0hScGIyNXpQem9nZTJSbGMyTnlhWEIwYVc5dVB6b2djM1J5YVc1bkxDQmtaV3hoZVQ4NklHNTFiV0psY24wcE9pQjBhR2x6SUh0Y2JpQWdJQ0IwYUdsekxsOXpkR1Z3YzF0MGFHbHpMbk4wWlhCekxteGxibWQwYUYwZ1BTQjdYRzRnSUNBZ0lDQnVZVzFsT2lCdVlXMWxMRnh1SUNBZ0lDQWdablZ1WXpvZ1puVnVZeXhjYmlBZ0lDQWdJRzl3ZEdsdmJuTTZJRzl3ZEdsdmJuTXNYRzRnSUNBZ2ZUdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN6dGNiaUFnZlZ4dVhHNGdJQzhxS2lCVGRHRnlkSE1nZEdobElHUmxiVzhnYzJOeWFYQjBJQ292WEc0Z0lHRnplVzVqSUhOMFlYSjBLQ2s2SUZCeWIyMXBjMlU4ZG05cFpENGdlMXh1SUNBZ0lIUm9hWE11WDJsdWFYUlNiMjkwS0NrN1hHNGdJQ0FnZEdocGN5NWZjM1JoY25SVFkzSnBjSFFvS1R0Y2JpQWdmVnh1ZlZ4dUlsMTkiLCIvLyBSdW50aW1lIHN5c3RlbSBmb3IgZXhwb3J0ZWQgQy9DKystZnVuY3Rpb25zIGNhbGwuXG4vLyBJdCB3YXMgcHJldmlvdXNlbHkgZGV2ZWxvcGVkIGFuZCBkb2VzIE5PVCBwcm92aWRlIGNhbGwgd2FzbS1mdW5jdGlvbnMgaW4gV2ViV29ya2Vycy5cblxuLy8gdHlwZS10by1oZWFwIGNvcnJlc3BvbmRlbmNlXG5jb25zdCBoZWFwTWFwID0ge1wiaTMyXCI6IFwiSEVBUDMyXCIsIC8vIEludDMyQXJyYXlcbiAgICAgICAgICAgICAgICAgXCJmMzJcIjogXCJIRUFQRjMyXCIgLy8gRmxvYXQzMkFycmF5XG4gICAgICAgICAgICAgICAgfTtcblxuLy8gdHlwZSBzaWduYXR1cmUgdG8gdHlwZWQgYXJyYXkgLGFwcFxuY29uc3QgdHlwZU1hcCA9IHtcImkzMlwiOiBJbnQzMkFycmF5LCAvLyBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgIFwiZjMyXCI6IEZsb2F0MzJBcnJheSAvLyBGbG9hdDMyQXJyYXlcbiAgICAgICAgICAgICAgICB9OyBcbiBcbi8vIHR5cGUtdG8tc2hpZnQgbWFwXG5jb25zdCBzaGlmdE1hcCA9IHtcImkzMlwiOiAyLCAvLyBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgICBcImYzMlwiOiAyIC8vIEZsb2F0MzJBcnJheVxuICAgICAgICAgICAgICAgICB9O1xuXG4vLyB0eXBlLXRvLWNvbHVtbl9jcmVhdG9yIG1hcFxuY29uc3QgdHlwZVRvQ29sdW1uQ3JlYXRvck1hcCA9IHtcImkzMlwiOiBERy5Db2x1bW4uZnJvbUludDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZjMyXCI6IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5fTtcbiBcblxuLy8gQ0xBU1NFUyBUSEFUIEFSRSBVU0VEIEJZIENQUC1XUkFQUEVSXG5cbi8vIHNpbXBsZSBhcmd1bWVudDogYSBudW1iZXIgXG5jbGFzcyBBcmd7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7ICAgICAgICBcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZQYXJhbXMoYXJyT2ZQYXJhbXMpIHtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlR5cGVzKGFyck9mVHlwZXMpIHtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTsgICAgICAgIFxuICAgIH1cblxuICAgIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSkge31cblxuICAgIGlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCl7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBmcmVlQnVmZmVyKG1vZHVsZSkge31cbn1cblxuLy8gY29sdW1uIGFyZ3VtZW50XG5jbGFzcyBBcmdDb2x1bW4gZXh0ZW5kcyBBcmcge1xuXG4gICAgY29uc3RydWN0b3IoZGF0YSwgdGFyZ2V0VHlwZSwgdG9VcGRhdGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcihkYXRhKTtcbiAgICAgICAgdGhpcy50eXBlID0gdGFyZ2V0VHlwZTtcbiAgICAgICAgdGhpcy50b1VwZGF0ZSA9IHRvVXBkYXRlO1xuICAgICAgICB0aGlzLmJ1ZiA9IDA7ICAgIFxuICAgICAgICB0aGlzLm51bU9mUm93cyA9IGRhdGEubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlBhcmFtcyhhcnJPZlBhcmFtcykge1xuICAgICAgICBhcnJPZlBhcmFtcy5wdXNoKHRoaXMuYnVmKTtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLm51bU9mUm93cyk7XG4gICAgfVxuXG4gICAgY29tcGxlbWVudEFyck9mVHlwZXMoYXJyT2ZUeXBlcykge1xuICAgICAgICBhcnJPZlR5cGVzLnB1c2goJ251bWJlcicpO1xuICAgICAgICBhcnJPZlR5cGVzLnB1c2goJ251bWJlcicpOyAgICAgICAgXG4gICAgfVxuXG4gICAgYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXIobW9kdWxlKSB7XG4gICAgICAgIHRoaXMuYnVmID0gbW9kdWxlLl9tYWxsb2ModGhpcy5udW1PZlJvd3MgKiB0eXBlTWFwW3RoaXMudHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgIH1cblxuICAgIGlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCl7XG4gICAgICAgIHJldHVybiAodGhpcy5idWYgIT0gMCk7XG4gICAgfVxuXG4gICAgcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTsgICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBhcnJheSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgY29sID0gdGhpcy5kYXRhO1xuXG4gICAgICAgICAgICBpZigoKGNvbC50eXBlID09ICdpbnQnKSAmJiAodHlwZSA9PSAnaTMyJykpIFxuICAgICAgICAgICAgICAgfHwgKChjb2wudHlwZSA9PSAnZG91YmxlJykgJiYgKHR5cGUgPT0gJ2YzMicpKSlcbiAgICAgICAgICAgICAgYXJyYXkgPSBjb2wuZ2V0UmF3RGF0YSgpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpO1xuXG4gICAgICAgICAgICBpZihhcnJheSkgXG4gICAgICAgICAgICAgIGhlYXAuc2V0KGFycmF5LCB0aGlzLmJ1ZiA+PiBzaGlmdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgYnVmZmVyID0gdGhpcy5idWY7XG4gICAgICAgICAgICBsZXQgYnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICAgICAgbGV0IGFycmF5ID0gdGhpcy5kYXRhLmdldFJhd0RhdGEoKTtcblxuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRoaXMubnVtT2ZSb3dzOyBpKyspXG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBoZWFwW2J1ZmZlciAvIGJ5dGVzICsgaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmcmVlQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgbW9kdWxlLl9mcmVlKHRoaXMuYnVmKTtcbiAgICAgICAgICAgdGhpcy5idWYgPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbi8vIG5ldyBjb2x1bW4gYXJndW1lbnQ6IGEgbmV3IGNvbHVtbiBpcyBjcmVhdGVkXG5jbGFzcyBBcmdOZXdDb2x1bW4gZXh0ZW5kcyBBcmdDb2x1bW4ge1xuICAgIGNvbnN0cnVjdG9yKHRhcmdldFR5cGUsIG51bU9mUm93cykge1xuICAgICAgICBzdXBlcihbXSwgdGFyZ2V0VHlwZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMubnVtT2ZSb3dzID0gbnVtT2ZSb3dzO1xuICAgIH1cblxuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgYnVmID0gdGhpcy5idWY7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBjb2x1bW5DcmVhdG9yID0gdHlwZVRvQ29sdW1uQ3JlYXRvck1hcFt0eXBlXTsgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGFyciA9IG5ldyB0eXBlTWFwW3R5cGVdKHRoaXMubnVtT2ZSb3dzKTsgICAgICAgICAgICBcblxuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICBhcnJbaV0gPSBoZWFwW2J1ZiAvIGFyci5CWVRFU19QRVJfRUxFTUVOVCArIGldO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBjb2x1bW5DcmVhdG9yKCduYW1lJywgYXJyKTtcblxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhcnIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBUaGlzIG1ha2VzIG1pc3Rha2UsIHdoZW4gdGhpcy5udW1PZlJvd3MgPSA1IChUT0RPOiBpbnZlc3RpZ2F0ZSB3aHkpXG4gICAgICAgICAgICAvL3RoaXMuZGF0YSA9IGNvbHVtbkNyZWF0b3IoJ25hbWUnLCBuZXcgdHlwZU1hcFt0eXBlXShoZWFwLmJ1ZmZlciwgdGhpcy5idWYsIHRoaXMubnVtT2ZSb3dzKSk7XG5cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kYXRhLmdldFJhd0RhdGEoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGFuIGFycmF5IG9mIGNvbHVtbnMgYXJndW1lbnRcbmNsYXNzIEFyZ0NvbHVtbnMgZXh0ZW5kcyBBcmcge1xuXG4gICAgY29uc3RydWN0b3IoZGF0YSwgdGFyZ2V0VHlwZSwgdG9VcGRhdGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcihkYXRhKTtcbiAgICAgICAgdGhpcy50eXBlID0gdGFyZ2V0VHlwZTtcbiAgICAgICAgdGhpcy50b1VwZGF0ZSA9IHRvVXBkYXRlO1xuICAgICAgICB0aGlzLmJ1ZiA9IDA7ICAgIFxuICAgICAgICB0aGlzLm51bU9mQ29sdW1ucyA9IGRhdGEubGVuZ3RoO1xuICAgICAgICB0aGlzLm51bU9mUm93cyA9IGRhdGFbMF0ubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlBhcmFtcyhhcnJPZlBhcmFtcykge1xuICAgICAgICBhcnJPZlBhcmFtcy5wdXNoKHRoaXMuYnVmKTtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLm51bU9mUm93cyk7XG4gICAgICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5udW1PZkNvbHVtbnMpO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlR5cGVzKGFyck9mVHlwZXMpIHtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTsgICAgICAgIFxuICAgIH1cblxuICAgIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICB0aGlzLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKHRoaXMubnVtT2ZSb3dzICogdGhpcy5udW1PZkNvbHVtbnMgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0eXBlTWFwW3RoaXMudHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgIH1cblxuICAgIGlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCl7XG4gICAgICAgIHJldHVybiAodGhpcy5idWYgIT0gMCk7XG4gICAgfVxuXG4gICAgcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgIGxldCBudW1PZkJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcHV0IGNvbHVtbnMgZGF0YSB0byBidWZmZXJcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLm51bU9mQ29sdW1uczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgY29sID0gdGhpcy5kYXRhW2ldO1xuXG4gICAgICAgICAgICAgICAgaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gJ2kzMicpKSBcbiAgICAgICAgICAgICAgICAgICB8fCAoKGNvbC50eXBlID09ICdkb3VibGUnKSAmJiAodHlwZSA9PSAnZjMyJykpKVxuICAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBjb2wuZ2V0UmF3RGF0YSgpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gbmV3IHR5cGVNYXBbdHlwZV0oY29sLmdldFJhd0RhdGEoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBkYXRhIGFycmF5XG4gICAgICAgICAgICAgICAgaWYoYXJyYXkgIT0gbnVsbCkgXG4gICAgICAgICAgICAgICAgICAgIGhlYXAuc2V0KGFycmF5LCAodGhpcy5idWYgKyBpICogdGhpcy5udW1PZlJvd3MgKiBudW1PZkJ5dGVzKSA+PiBzaGlmdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLnRvVXBkYXRlICYmIHRoaXMuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKSkge1xuICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgIGxldCBudW1PZlJvd3MgPSB0aGlzLm51bU9mUm93cztcbiAgICAgICAgICAgIGxldCBudW1PZkNvbHMgPSB0aGlzLm51bU9mQ29sdW1uczsgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGFyciA9IG5ldyB0eXBlTWFwW3R5cGVdKGhlYXAuYnVmZmVyLCB0aGlzLmJ1ZiwgbnVtT2ZSb3dzICogbnVtT2ZDb2xzKTtcbiAgICAgICBcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHM7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBjb2xEYXRhID0gdGhpcy5kYXRhW2ldLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgbnVtT2ZSb3dzOyBqKyspXG4gICAgICAgICAgICAgICAgICBjb2xEYXRhW2pdID0gYXJyW2ogKyBpICogbnVtT2ZSb3dzXTsgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnJlZUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgIG1vZHVsZS5fZnJlZSh0aGlzLmJ1Zik7XG4gICAgICAgICAgIHRoaXMuYnVmID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG4vLyBhbiBhcnJheSBvZiBuZXcgY29sdW1uczogbmV3IGNvbHVtbnMgYXJlIGNyZWF0ZWRcbmNsYXNzIEFyZ05ld0NvbHVtbnMgZXh0ZW5kcyBBcmdDb2x1bW5zIHtcblxuICAgIGNvbnN0cnVjdG9yKHRhcmdldFR5cGUsIG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKSB7XG4gICAgICAgIHN1cGVyKFtbXV0sIHRhcmdldFR5cGUsIHRydWUpOyAgXG4gICAgICAgIHRoaXMuZGF0YSA9IFtdOyAgICAgICAgXG4gICAgICAgIHRoaXMubnVtT2ZDb2x1bW5zID0gbnVtT2ZDb2x1bW5zO1xuICAgICAgICB0aGlzLm51bU9mUm93cyA9IG51bU9mUm93cztcbiAgICB9XG5cbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlKSB7IH1cblxuICAgIGdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLnRvVXBkYXRlICYmIHRoaXMuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKSkge1xuICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgIGxldCBudW1PZlJvd3MgPSB0aGlzLm51bU9mUm93cztcbiAgICAgICAgICAgIGxldCBudW1PZkNvbHMgPSB0aGlzLm51bU9mQ29sdW1ucztcbiAgICAgICAgICAgIGxldCBudW1PZkJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDsgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGNvbHVtbkNyZWF0b3IgPSB0eXBlVG9Db2x1bW5DcmVhdG9yTWFwW3R5cGVdO1xuICAgICAgICAgICAgbGV0IGJ1ZiA9IHRoaXMuYnVmO1xuXG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gbmV3IHR5cGVNYXBbdHlwZV0obnVtT2ZSb3dzKTtcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBudW1PZlJvd3M7IGorKylcbiAgICAgICAgICAgICAgICAgICAgYXJyW2pdID0gaGVhcFtidWYgLyBudW1PZkJ5dGVzICsgaiArIGkgKiBudW1PZlJvd3NdO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKGNvbHVtbkNyZWF0b3IoKGkgKyAxKS50b1N0cmluZygpLCBhcnIpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY3JlYXRlIGNvbHVtbnM6IGhlcmUsIG1heSBiZSBhIHByb2JsZW0gd2hlbiBudW1PZlJvd3MgPSA1ICAgICAgICAgICAgXG4gICAgICAgICAgICAvKmZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHM7IGkrKylcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEucHVzaChjb2x1bW5DcmVhdG9yKChpICsgMSkudG9TdHJpbmcoKSwgbmV3IHR5cGVNYXBbdHlwZV0oaGVhcC5idWZmZXIsIFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZiArIGkgKiBudW1PZlJvd3MgKiBudW1PZkJ5dGVzLCBudW1PZlJvd3MpKSk7Ki9cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gYSB3cmFwcGVyIGZvciBleHBvcnRlZCBDL0MrKy1mdW5jdGlvbiBjYWxsXG5mdW5jdGlvbiBjcHBGdW5jV3JhcHBlcihtb2R1bGUsIGNGdW5jTmFtZSwgcmV0dXJuVHlwZSwgYXJncylcbntcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgLy8gYWxsb2NhdGUgbWVtb3J5IGZvciBidWZmZXJzXG4gICAgZm9yKGxldCBhcmcgb2YgYXJncykgICAgICAgICBcbiAgICAgICAgYXJnLmFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSk7XG4gICAgXG4gICAgbGV0IGlzRW5vdWdoT2ZNZW1vcnlBbGxvY2F0ZWQgPSB0cnVlO1xuXG4gICAgLy8gY2hlY2sgbWVtb3J5IGFsbG9jYXRpb25cbiAgICBmb3IobGV0IGFyZyBvZiBhcmdzKVxuICAgICAgICBpc0Vub3VnaE9mTWVtb3J5QWxsb2NhdGVkICY9IGFyZy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpOyAgXG4gICAgXG4gICAgLy8gcnVuIGV4cG9ydGVkIGZ1bmN0aW9uIGlmIGVub3VnaCBvZiBtZW1vcnkgaXMgYWxsb2NhdGVkXG4gICAgaWYoaXNFbm91Z2hPZk1lbW9yeUFsbG9jYXRlZCkge1xuXG4gICAgICAgIGxldCBwYXJhbXMgPSBbXTsgLy8gYXJndW1lbnRzIHRoYXQgYXJlIHB1dCB0byB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25cbiAgICAgICAgbGV0IHR5cGVzID0gW107IC8vIHRoZWlyIHR5cGVzXG5cbiAgICAgICAgLy8gcHJlcGFyZSBkYXRhIHRoYXQgaXMgcHV0IHRvIGV4cG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIGZvcihsZXQgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgIGFyZy5jb21wbGVtZW50QXJyT2ZQYXJhbXMocGFyYW1zKTtcbiAgICAgICAgICAgIGFyZy5jb21wbGVtZW50QXJyT2ZUeXBlcyh0eXBlcyk7XG4gICAgICAgICAgICBhcmcucHV0RGF0YVRvQnVmZmVyKG1vZHVsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXh0ZW5kZWRUeXBlT2ZSZXR1cm4gPSAocmV0dXJuVHlwZSA9PSAnbnVtJykgPyAnbnVtYmVyJyA6IG51bGw7ICAgXG4gICAgICAgIFxuICAgICAgICAvLyBjYWxsIGV4cG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIGlmKGV4dGVuZGVkVHlwZU9mUmV0dXJuKVxuICAgICAgICAgICAgcmVzdWx0ID0gbW9kdWxlLmNjYWxsKGNGdW5jTmFtZSwgZXh0ZW5kZWRUeXBlT2ZSZXR1cm4sIHR5cGVzLCBwYXJhbXMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXN1bHQgPSBtb2R1bGUuY2NhbGwoY0Z1bmNOYW1lLCBleHRlbmRlZFR5cGVPZlJldHVybiwgdHlwZXMsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAvLyB1cGRhdGUgYW5kIGdldCBkYXRhIGZyb20gYnVmZmVycyBpZiByZXF1aXJlZFxuICAgICAgICBmb3IobGV0IGFyZyBvZiBhcmdzKVxuICAgICAgICAgICAgYXJnLmdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSk7ICAgICAgIFxuICAgIH1cblxuICAgIC8vIGNsZWFyIGJ1ZmZlcnNcbiAgICBmb3IobGV0IGFyZyBvZiBhcmdzKSAgICAgICAgIFxuICAgICAgICBhcmcuZnJlZUJ1ZmZlcihtb2R1bGUpO1xuXG4gICAgaWYocmVzdWx0ICE9IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHJlc3VsdDsgICAgXG59IC8vIGNwcEZ1bmNXcmFwcGVyXG5cblxuLy8gQSBMQVlFUiBCRVRXRUVOIEpTIEFORCBDUFAtV1JBUFBFUlxuXG4vLyBQYXJhbWV0ZXJzIGNyZWF0b3JcbmxldCBQYXJhbSA9IHtcbiAgICBpbnRDb2x1bW4gKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbihjb2x1bW4sICdpMzInKTtcbiAgICB9LFxuICAgIFxuICAgIG5ld0ludENvbHVtbiAobnVtT2ZSb3dzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnTmV3Q29sdW1uKCdpMzInLCBudW1PZlJvd3MpO1xuICAgIH0sXG5cbiAgICBpbnRDb2x1bW5zKGNvbHVtbnMpe1xuICAgICAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbnMoY29sdW1ucy50b0xpc3QoKSwgJ2kzMicpO1xuICAgIH0sXG5cbiAgICBuZXdJbnRDb2x1bW5zKG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnTmV3Q29sdW1ucygnaTMyJywgbnVtT2ZSb3dzLCBudW1PZkNvbHVtbnMpO1xuICAgIH0sXG5cbiAgICBmbG9hdENvbHVtbiAoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnQ29sdW1uKGNvbHVtbiwgJ2YzMicpO1xuICAgIH0sXG5cbiAgICBuZXdGbG9hdENvbHVtbiAobnVtT2ZSb3dzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnTmV3Q29sdW1uKCdmMzInLCBudW1PZlJvd3MpO1xuICAgIH0sXG5cbiAgICBmbG9hdENvbHVtbnMoY29sdW1ucyl7XG4gICAgICAgIHJldHVybiBuZXcgQXJnQ29sdW1ucyhjb2x1bW5zLnRvTGlzdCgpLCAnZjMyJyk7XG4gICAgfSxcblxuICAgIG5ld0Zsb2F0Q29sdW1ucyhudW1PZlJvd3MsIG51bU9mQ29sdW1ucykge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ05ld0NvbHVtbnMoJ2YzMicsIG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKTtcbiAgICB9LFxuXG4gICAgaW50KG51bWJlcikge1xuICAgICAgICByZXR1cm4gbmV3IEFyZyhudW1iZXIpO1xuICAgIH0sXG5cbiAgICBudW0obnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnKG51bWJlcik7XG4gICAgfVxufTtcblxuLy8gUmV0dXJuIHZhbHVlIGNyZWF0b3JcbmxldCBSZXR1cm4gPSB7XG4gICAgdGFibGVGcm9tQ29sdW1ucyhhcmdDb2x1bW5zKSB7XG4gICAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoYXJnQ29sdW1ucy5kYXRhKTtcbiAgICB9LFxuXG4gICAgbnVtKG51bWJlcikge1xuICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH0sXG5cbiAgICBpbnQobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfSxcblxuICAgIGRvdWJsZShudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9LFxuXG4gICAgY29sdW1uKGFyZ0NvbHVtbikge1xuICAgICAgICByZXR1cm4gYXJnQ29sdW1uLmRhdGE7XG4gICAgfVxufTtcblxuLy8gVGhlIG1haW4gdG9vbCB0aGF0IGNvbWJpbmVzIGFsbCB0b2dldGhlclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGxXYXNtKG1vZHVsZSwgZnVuY05hbWUsIGlucHV0cykge1xuXG4gICAgbGV0IHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICAvLyBnZXQgc3BlY2lmaWNhdGlvbiBvZiBleHBvcnRlZCBDL0MrKy1mdW5jdGlvblxuICAgIGxldCBmdW5jU3BlY2lmaWNhdGlvbiA9IG1vZHVsZVtmdW5jTmFtZV07XG5cbiAgICAvLyBnZXQgYXJndW1uZXRzXG4gICAgbGV0IGFyZ3MgPSBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHM7IFxuXG4gICAgLy8gYXJyYXkgb2YgYXJndW1lbnRzIHRoYXQgZnVydGhlciBhcmUgdXNlZCBieSBjcHAtd3JhcHBlclxuICAgIGxldCBjcHBGdW5jSW5wdXQgPSBbXTtcblxuICAgIC8vIGNvbXBsZXRlIGFuIGlucHV0IGZvciBjcHBcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yKGxldCBrZXkgaW4gYXJncyl7XG4gICAgICAgIGxldCBhcmcgPSBhcmdzW2tleV07IFxuICAgICAgICBcbiAgICAgICAgLy8gc2tpcCBhdXhpbGlyeSBlbGVtZW50XG4gICAgICAgIGlmKGtleSA9PSAnX2NhbGxSZXN1bHQnKSAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBhbiBhcmd1bWVudFxuICAgICAgICBzd2l0Y2goYXJnLnR5cGUpe1xuICAgICAgICAgICAgY2FzZSAnZmxvYXRDb2x1bW5zJzpcbiAgICAgICAgICAgIGNhc2UgJ2ludCc6XG4gICAgICAgICAgICBjYXNlICdudW0nOlxuICAgICAgICAgICAgY2FzZSAnZmxvYXRDb2x1bW4nOlxuICAgICAgICAgICAgY2FzZSAnaW50Q29sdW1uJzpcbiAgICAgICAgICAgIGNhc2UgJ2ludENvbHVtbnMnOlxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKGlucHV0c1tpXSk7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV3RmxvYXRDb2x1bW5zJzpcbiAgICAgICAgICAgIGNhc2UgJ25ld0ludENvbHVtbnMnOlxuICAgICAgICAgICAgICAgIGxldCB2YWwxID0gYXJnc1sgYXJnWydudW1PZlJvd3MnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZSb3dzJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGxldCB2YWwyID0gYXJnc1sgYXJnWydudW1PZkNvbHVtbnMnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZDb2x1bW5zJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKHZhbDEsIHZhbDIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV3RmxvYXRDb2x1bW4nOlxuICAgICAgICAgICAgY2FzZSAnbmV3SW50Q29sdW1uJzpcbiAgICAgICAgICAgICAgICBsZXQgdmFsID0gYXJnc1sgYXJnWydudW1PZlJvd3MnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZSb3dzJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKHZhbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IC8vIHN3aXRjaFxuXG4gICAgICAgIGNwcEZ1bmNJbnB1dC5wdXNoKGFyZ3Nba2V5XS5kYXRhKTtcblxuICAgIH0gLy8gZm9yIGtleSAgICBcblxuICAgIC8vIENBTEwgRVhQT1JURUQgQ1BQLUZVTkNUSU9OXG4gICAgbGV0IGNhbGxSZXN1bHQgPSBjcHBGdW5jV3JhcHBlcihtb2R1bGUsIGZ1bmNOYW1lLCAnbnVtJywgY3BwRnVuY0lucHV0KTtcblxuICAgIGNvbnNvbGUubG9nKCdDKystZnVuY3Rpb24gY2FsbCByZXN1bHQ6ICcgKyBjYWxsUmVzdWx0KTtcblxuICAgIC8vIHN0b3JlIHJlc3VsdCB0aGF0IGlzIHJldHVybmVkIGJ5IGV4cG9ydGVkIGNwcC1mdW5jdGlvblxuICAgIGFyZ3MuX2NhbGxSZXN1bHQgPSBQYXJhbS5udW0oY2FsbFJlc3VsdCk7XG5cbiAgICAvLyBjcmVhdGUgb3V0cHV0XG4gICAgbGV0IG91dHB1dCA9IGZ1bmNTcGVjaWZpY2F0aW9uLm91dHB1dDtcblxuICAgIGxldCBmaW5pc2ggPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuICAgIGNvbnNvbGUubG9nKGBUaW1lIGZvciBDL0MrKy1mdW5jdGlvbiBpcyAke2ZpbmlzaCAtIHN0YXJ0fSBtcy5gKVxuXG4gICAgLy8gaWYgYSBzaW5nbGUgb2JqZWN0IG11c3QgYmUgcmV0dXJuZWRcbiAgICBpZihvdXRwdXRbJ3R5cGUnXSAhPSAnb2JqZWN0cycpXG4gICAgICByZXR1cm4gUmV0dXJuW291dHB1dFsndHlwZSddXShhcmdzW291dHB1dFsnc291cmNlJ11dLmRhdGEpO1xuXG4gICAgbGV0IGFycmF5VG9SZXR1cm4gPSBbXTtcblxuICAgIC8vIHB1c2ggZGF0YSBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnRzXG4gICAgZm9yKGxldCBuYW1lIG9mIG91dHB1dFsnc291cmNlJ10pXG4gICAgICBhcnJheVRvUmV0dXJuLnB1c2goYXJnc1tuYW1lXS5kYXRhLmRhdGEpO1xuXG4gICAgcmV0dXJuIGFycmF5VG9SZXR1cm47XG4gIH0gLy8gY2FsbFdhc20iLCIvLyBVdGlsaXRpZXMgZm9yIGNhbGxpbmcgd2FzbS1mdW5jdGlvbnMgdmlhIHdlYndvcmtlci5cblxuLy8gV2UgdXNlIGFuIGFwcHJvYWNoIHRoYXQgaXMgd2VsbCBkZXNjcmliZWQgaGVyZTpcbi8vIGh0dHBzOi8vYmVjb21pbmdodW1hbi5haS9wYXNzaW5nLWFuZC1yZXR1cm5pbmctd2ViYXNzZW1ibHktYXJyYXktcGFyYW1ldGVycy1hMGY1NzJjNjVkOTdcbi8vIEl0IGhhcyBiZWVuIG1vZGlmaWVkIGZvciB1c2FnZSBpbiBEQVRBR1JPSy5cblxuLy8gQ29uc3RhbnRzIGZvciB3YXNtLWZ1bmN0aW9ucyBpbiB3ZWJ3b3JrZXJzIHJ1bnRpbWUgc3lzdGVtXG5jb25zdCBUWVBFID0gJ3R5cGUnO1xuY29uc3QgTlVNX1RZUEUgPSAnbnVtJztcbmNvbnN0IEZMT0FUX0NPTFVNTl9UWVBFID0gJ2Zsb2F0Q29sdW1uJztcbmNvbnN0IElOVF9DT0xVTU5fVFlQRSA9ICdpbnRDb2x1bW4nO1xuY29uc3QgRkxPQVRfQ09MVU1OU19UWVBFID0gJ2Zsb2F0Q29sdW1ucyc7XG5jb25zdCBORVdfRkxPQVRfQ09MVU1OU19UWVBFID0gJ25ld0Zsb2F0Q29sdW1ucyc7XG5jb25zdCBJTlRfQ09MVU1OU19UWVBFID0gJ2ludENvbHVtbnMnO1xuY29uc3QgTkVXX0lOVF9DT0xVTU5TX1RZUEUgPSAnbmV3SW50Q29sdW1ucyc7XG5jb25zdCBORVdfRkxPQVRfQ09MVU1OX1RZUEUgPSAnbmV3RmxvYXRDb2x1bW4nO1xuY29uc3QgTkVXX0lOVF9DT0xVTU5fVFlQRSA9ICduZXdJbnRDb2x1bW4nO1xuY29uc3QgQ09MVU1OID0gJ2NvbHVtbic7XG5jb25zdCBDQUxMX1JFU1VMVCA9ICdfY2FsbFJlc3VsdCc7XG5jb25zdCBOVU1fT0ZfUk9XUyA9ICdudW1PZlJvd3MnO1xuY29uc3QgTlVNX09GX0NPTFVNTlMgPSAnbnVtT2ZDb2x1bW5zJztcbmNvbnN0IFJFRiA9ICdyZWYnO1xuY29uc3QgVkFMVUUgPSAndmFsdWUnO1xuY29uc3QgVEFCTEVfT0ZfQ09MVU1OUyA9ICd0YWJsZUZyb21Db2x1bW5zJztcbmNvbnN0IE9CSkVDVFMgPSAnb2JqZWN0cyc7XG5jb25zdCBJTlRfVFlQRSA9ICdpbnQnO1xuY29uc3QgRE9VQkxFX1RZUEUgPSAnZG91YmxlJztcbmNvbnN0IE5VTUJFUiA9ICdudW1iZXInO1xuXG4vLyBUeXBlLXRvLWhlYXAgY29ycmVzcG9uZGVuY2UuXG4vLyBJdCBpcyByZXF1aXJlZCBmb3IgSlMtbW9kdWxlIGdlbmVyYXRlZCBieSBFbXNjcmlwdGVuLFxuLy8gYW5kIGl0IGlzIHVzZWQsIHdoZW4gcGFzc2luZyBhcnJheSBkYXRhIHRvL2Zyb20gd2FzbS1mdW5jdGlvbnMuXG4vLyBNb3JlIGluZm8gY2FuIGJlIGZvdW5kIGF0IHRoZSBmb2xsb3dpbmcgbGluazpcbi8vIGh0dHBzOi8vYmVjb21pbmdodW1hbi5haS9wYXNzaW5nLWFuZC1yZXR1cm5pbmctd2ViYXNzZW1ibHktYXJyYXktcGFyYW1ldGVycy1hMGY1NzJjNjVkOTdcbmNvbnN0IGhlYXBNYXAgPSB7XG4gICAgICAgICAgICAgICAgICdpbnRDb2x1bW4nOiBcIkhFQVAzMlwiLFxuICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW4nOiBcIkhFQVBGMzJcIixcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1ucyc6IFwiSEVBUEYzMlwiLFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW5zJzogXCJIRUFQRjMyXCIsXG4gICAgICAgICAgICAgICAgICdpbnRDb2x1bW5zJzogXCJIRUFQMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbnMnOiBcIkhFQVAzMlwiLFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiBcIkhFQVBGMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbic6IFwiSEVBUDMyXCJcbiAgICAgICAgICAgICAgICB9O1xuXG4vLyBUeXBlIHNpZ25hdHVyZSB0byB0eXBlZCBhcnJheSBtYXAuXG4vLyBJdCBpcyB1c2VkLCB3aGVuIG1hbmlwdWxhdGluZyBjb2x1bW4ocykuXG5jb25zdCB0eXBlTWFwID0ge1xuICAgICAgICAgICAgICAgICAnaW50Q29sdW1uJzogSW50MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1uJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW5zJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW5zJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnaW50Q29sdW1ucyc6IEludDMyQXJyYXksICBcbiAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbnMnOiBJbnQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiBGbG9hdDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgfTsgXG5cbi8vIFR5cGUtdG8tc2hpZnQgbWFwLlxuLy8gSXQgaXMgdXNlZCwgd2hlbiBwYXNzaW5nIGFycmF5IHRvL2Zyb20gd2FzbS1mdW5jdGlvbnMuXG4vLyBNb3JlIGluZm8gY2FuIGJlIGZvdW5kIGF0IHRoZSBmb2xsb3dpbmcgbGluazpcbi8vIGh0dHBzOi8vYmVjb21pbmdodW1hbi5haS9wYXNzaW5nLWFuZC1yZXR1cm5pbmctd2ViYXNzZW1ibHktYXJyYXktcGFyYW1ldGVycy1hMGY1NzJjNjVkOTcgXG5jb25zdCBzaGlmdE1hcCA9IHsnaW50Q29sdW1uJzogMiwgXG4gICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW4nOiAyLCBcbiAgICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbnMnOiAyLCAgXG4gICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW5zJzogMiwgXG4gICAgICAgICAgICAgICAgICAnaW50Q29sdW1ucyc6IDIsICBcbiAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogMixcbiAgICAgICAgICAgICAgICAgICduZXdGbG9hdENvbHVtbic6IDIsXG4gICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogMlxuICAgICAgICAgICAgICAgICB9OyAgICAgICAgIFxuXG4vLyBHZXQgaW5wdXQgZm9yIEMrKy1mdW5jdGlvbi5cbi8vIFRoaXMgZnVuY3Rpb24gdGFrZXMgc3BlY2lmaWNhdGlvbiBvZiBhcmd1bWVudHMgKGFyZ3NTcGVjaWZpY2F0aW9uKSAmIGlucHV0IGRhdGEgKGlucHV0VmFscylcbi8vIGFuZCByZXR1cm5zIGlucHV0IHRoYXQgd2lsbCBiZSBmdXJ0aGVyIHVzZWQgaW4gY3BwL3dhc20tZnVuY3Rpb24uXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3BwSW5wdXQoYXJnc1NwZWNpZmljYXRpb24sIGlucHV0VmFscykge1xuICAgIGxldCBjcHBGdW5jSW5wdXQgPSBbXTtcbiAgICBsZXQgcmVmO1xuXG4gICAgLy8gY29tcGxldGUgYW4gaW5wdXQgZm9yIGNwcFxuICAgIGxldCBpID0gMDtcbiAgICBmb3IoY29uc3Qga2V5IGluIGFyZ3NTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NTcGVjaWZpY2F0aW9uW2tleV07IFxuICAgICAgICBjb25zdCB0eXBlID0gYXJnLnR5cGU7XG4gICAgICAgIFxuICAgICAgICAvLyBza2lwIGF1eGlsaXJ5IGVsZW1lbnRcbiAgICAgICAgaWYoa2V5ID09PSBDQUxMX1JFU1VMVCkgICAgICAgICAgICAgXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAvLyBoZXJlLCB3ZSBjb25zaWRlciBlYWNoIHR5cGUgb2YgaW5wdXRcbiAgICAgICAgc3dpdGNoKHR5cGUpIHsgICAgICAgICAgIFxuIFxuICAgICAgICAgICAgLy8gbnVtYmVyc1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IGlucHV0VmFsc1tpXTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtblxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5O1xuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBPSyBpZiB0eXBlIG9mIGNvbHVtbiBhbmQgdGFyZ2V0IHR5cGUgY29pbnNpZGVcbiAgICAgICAgICAgICAgICAvL2FycmF5ID0gaW5wdXRWYWxzW2ldLmdldFJhd0RhdGEoKTtcblxuICAgICAgICAgICAgICAgIGxldCBjb2wgPSBpbnB1dFZhbHNbaV07XG5cbiAgICAgICAgICAgICAgICAvLyBoZXJlLCB3ZSBjaGVjayB0eXBlcyBhbmQgcGVyZm9ybSBhbiBhcHByb3ByaWF0ZSB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICBpZiggKCAoY29sLnR5cGUgPT09IElOVF9UWVBFKSAmJiAodHlwZSA9PT0gSU5UX0NPTFVNTl9UWVBFKSApIFxuICAgICAgICAgICAgICAgICAgIHx8ICggKGNvbC50eXBlID09PSBET1VCTEVfVFlQRSkgJiYgKHR5cGUgPT09IEZMT0FUX0NPTFVNTl9UWVBFKSApIClcbiAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpO1xuXG4gICAgICAgICAgICAgICAgLyppZigoKGNvbC50eXBlID09ICdpbnQnKSAmJiAodHlwZSA9PSBJTlRfQ09MVU1OX1RZUEUpKSBcbiAgICAgICAgICAgICAgICAgICAgIHx8ICgoY29sLnR5cGUgPT0gJ2RvdWJsZScpICYmICh0eXBlID09IEZMT0FUX0NPTFVNTl9UWVBFKSkpXG4gICAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gbmV3IHR5cGVNYXBbdHlwZV0oY29sLmdldFJhd0RhdGEoKSk7Ki9cblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHR5cGVzXG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSB7ICdhcnJheSc6IGFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVtT2ZSb3dzJzogYXJyYXkubGVuZ3RofTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uIFxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IDA7ICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgcmVmID0gYXJnW05VTV9PRl9ST1dTXVtSRUZdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0udHlwZSA9PT0gTlVNX1RZUEUpXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YVthcmdbTlVNX09GX1JPV1NdW1ZBTFVFXV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geydudW1PZlJvd3MnOiB2YWx9O1xuXG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW5zIG9yIGNvbHVtbl9saXN0XG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5cyA9IFtdOyAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgT0sgaWYgdHlwZSBvZiBjb2x1bW5zIGFuZCB0YXJnZXQgdHlwZSBjb2luc2lkZVxuICAgICAgICAgICAgICAgIC8vZm9yKGxldCBjb2wgb2YgaW5wdXRWYWxzW2ldLnRvTGlzdCgpKVxuICAgICAgICAgICAgICAgIC8vICBhcnJheXMucHVzaChjb2wuZ2V0UmF3RGF0YSgpKTtcblxuICAgICAgICAgICAgICAgIC8vIGhlcmUsIHdlIGNoZWNrIHR5cGVzIGFuZCBwZXJmb3JtIGFuIGFwcHJvcHJpYXRlIHRyYW5zZm9ybVxuICAgICAgICAgICAgICAgIGZvcihsZXQgY29sIG9mIGlucHV0VmFsc1tpXS50b0xpc3QoKSlcbiAgICAgICAgICAgICAgICAgIGlmKCAoIChjb2wudHlwZSA9PT0gSU5UX1RZUEUpICYmICh0eXBlID09PSBJTlRfQ09MVU1OX1RZUEUpICkgXG4gICAgICAgICAgICAgICAgICAgIHx8ICggKGNvbC50eXBlID09PSBET1VCTEVfVFlQRSkgJiYgKHR5cGUgPT09IEZMT0FUX0NPTFVNTl9UWVBFKSApIClcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2goY29sLmdldFJhd0RhdGEoKSk7XG4gICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGFycmF5cy5wdXNoKG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvKmZvcihsZXQgY29sIG9mIGlucHV0VmFsc1tpXS50b0xpc3QoKSlcbiAgICAgICAgICAgICAgICAgICAgaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gSU5UX0NPTFVNTl9UWVBFKSkgXG4gICAgICAgICAgICAgICAgICAgICAgfHwgKChjb2wudHlwZSA9PSAnZG91YmxlJykgJiYgKHR5cGUgPT0gRkxPQVRfQ09MVU1OX1RZUEUpKSlcbiAgICAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChjb2wuZ2V0UmF3RGF0YSgpKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgIGFycmF5cy5wdXNoKG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpKTsqL1xuXG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSB7ICdhcnJheXMnOiBhcnJheXMsXG4gICAgICAgICAgICAgICAgICAgICdudW1PZlJvd3MnOiBhcnJheXNbMF0ubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAnbnVtT2ZDb2x1bW5zJzogYXJyYXlzLmxlbmd0aH07XG5cbiAgICAgICAgICAgICAgICBpKys7ICBcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbnMgb3IgbmV3IGNvbHVtbl9saXN0XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGxldCB2YWwxID0gMDtcbiAgICAgICAgICAgICAgICBsZXQgdmFsMiA9IDA7XG5cbiAgICAgICAgICAgICAgICByZWYgPSBhcmdbTlVNX09GX1JPV1NdW1JFRl07XG5cbiAgICAgICAgICAgICAgICBpZiAoYXJnc1NwZWNpZmljYXRpb25bcmVmXS50eXBlID09PSBOVU1fVFlQRSlcbiAgICAgICAgICAgICAgICAgICAgdmFsMSA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbDEgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGFbYXJnW05VTV9PRl9ST1dTXVtWQUxVRV1dO1xuXG4gICAgICAgICAgICAgICAgcmVmID0gYXJnW05VTV9PRl9DT0xVTU5TXVtSRUZdO1xuXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnUmVmOicpO1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2cocmVmKTtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYXJnc1NwZWNpZmljYXRpb25bcmVmXS50eXBlID09PSBOVU1fVFlQRSlcbiAgICAgICAgICAgICAgICAgICAgdmFsMiA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbDIgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGFbYXJnW05VTV9PRl9DT0xVTU5TXVtWQUxVRV1dOyAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geydudW1PZlJvd3MnOiB2YWwxLFxuICAgICAgICAgICAgICAgICAgJ251bU9mQ29sdW1ucyc6IHZhbDJ9O1xuXG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIFxuXG4gICAgICAgICAgICBkZWZhdWx0OiBcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIFRPRE86IHNwZWNpZnkgYmVoYXZpb3VyICAgICAgICAgICBcbiAgICAgICAgICAgIH0gLy8gc3dpdGNoICAgICAgICBcblxuICAgICAgICBjcHBGdW5jSW5wdXQucHVzaChhcmcpO1xuICAgIH0gLy8gZm9yIGtleVxuXG4gICAgLy9jb25zb2xlLmxvZygnY3BwRnVuY0lucHV0OicpO1xuICAgIC8vY29uc29sZS5sb2coY3BwRnVuY0lucHV0KTtcblxuICAgIHJldHVybiBjcHBGdW5jSW5wdXQ7XG59IC8vIGdldENwcElucHV0XG5cbi8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgYnVmZmVycyBmb3IgYXJyYXkgZGF0YVxuZnVuY3Rpb24gYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXIobW9kdWxlLCBpbnB1dHMpIHtcbiAgICBmb3IoY29uc3QgYXJnIG9mIGlucHV0cykgeyBcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuXG4gICAgICAgIHN3aXRjaCh0eXBlKSB7IC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6IFxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbiAmIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGFyZy5kYXRhLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKGFyZy5kYXRhLm51bU9mUm93cyAqIHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW5zICYgbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTogICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6ICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOiAvLyBhbGxvY2F0aW9uIG1lbW9yeSBmb3IgY29sdW1ucyB0aGF0IGFyZSBjcmVhdGVkXG4gICAgICAgICAgICAgICAgYXJnLmRhdGEuYnVmID0gbW9kdWxlLl9tYWxsb2MoYXJnLmRhdGEubnVtT2ZSb3dzICogYXJnLmRhdGEubnVtT2ZDb2x1bW5zIFxuICAgICAgICAgICAgICAgICAgICAqIHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhazsgXG4gICAgICAgIH0gIFxuICAgIH1cbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKCdpbnB1dHMgYWZ0ZXIgbWVtb3J5IGFsbG9jYXRpb246Jyk7XG4gICAgLy9jb25zb2xlLmxvZyhpbnB1dHMpO1xufSAvLyBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlclxuXG4vLyBHZXQgYXJyYXkgb2YgdmFsdWVzIHRoYXQgYXJlIHB1dCB0byB3YXNtLWZ1bmN0aW9uLlxuZnVuY3Rpb24gZ2V0QXJyT2ZXYXNtUGFyYW1zKGlucHV0cykge1xuICAgIGxldCBwYXJhbXMgPSBbXTtcblxuICAgIC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgc3dpdGNoIChhcmcudHlwZSkge1xuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4gJiBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5idWYpOyAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5udW1PZlJvd3MpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5zICYgbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTogXG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEuYnVmKTtcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5udW1PZlJvd3MpO1xuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhLm51bU9mQ29sdW1ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xufSAvLyBnZXRBcnJPZldhc21QYXJhbXNcblxuLy8gR2V0IGFycmF5IG9mIHR5cGVzIHRoYXQgYXJlIHB1dCB0byB3YXNtLWZ1bmN0aW9uLlxuZnVuY3Rpb24gZ2V0QXJyT2ZXYXNtVHlwZXMoaW5wdXRzKSB7XG4gICAgbGV0IHR5cGVzID0gW107XG5cbiAgICBmb3IoY29uc3QgYXJnIG9mIGlucHV0cykge1xuICAgICAgICBzd2l0Y2ggKGFyZy50eXBlKSB7IC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbiAmIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5zICYgbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXM7XG59IC8vIGdldEFyck9mV2FzbVR5cGVzXG5cbi8vIFB1dCBhcnJheSBkYXRhIHRvIGJ1ZmZlclxuZnVuY3Rpb24gcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSwgaW5wdXRzKSB7XG4gICAgbGV0IHNoaWZ0O1xuICAgIGxldCBoZWFwOyAgICBcbiAgICBcbiAgICBmb3IoY29uc3QgYXJnIG9mIGlucHV0cykge1xuICAgICAgICBjb25zdCB0eXBlID0gYXJnLnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7IC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgc2hpZnQgPSBzaGlmdE1hcFt0eXBlXTtcbiAgICAgICAgICAgICAgICBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dOyAgXG4gICAgICAgICAgICAgICAgaGVhcC5zZXQoYXJnLmRhdGEuYXJyYXksIGFyZy5kYXRhLmJ1ZiA+PiBzaGlmdCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICAgICAgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgICAgICBsZXQgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7XG4gICAgICAgICAgICAgICAgbGV0IGJ1ZiA9IGFyZy5kYXRhLmJ1ZjtcbiAgICAgICAgICAgICAgICBsZXQgbnVtT2ZDb2x1bW5zID0gYXJnLmRhdGEubnVtT2ZDb2x1bW5zO1xuICAgICAgICAgICAgICAgIGxldCBudW1PZlJvd3MgPSBhcmcuZGF0YS5udW1PZlJvd3M7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5cyA9IGFyZy5kYXRhLmFycmF5cztcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHVtbnM7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgaGVhcC5zZXQoYXJyYXlzW2ldLCAoYnVmICsgaSAqIG51bU9mUm93cyAqIG51bU9mQnl0ZXMpID4+IHNoaWZ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW4ocylcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufSAvLyBwdXREYXRhVG9CdWZmZXJcblxuLy8gR2V0IGFycmF5IGRhdGEgZnJvbSBidWZmZXIuXG5mdW5jdGlvbiBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUsIGlucHV0cykge1xuXG4gICAgbGV0IGhlYXA7XG4gICAgbGV0IG51bU9mUm93cztcbiAgICBsZXQgbnVtT2ZDb2xzO1xuICAgIGxldCBudW1PZkJ5dGVzOyAgICBcbiAgICBsZXQgYnVmO1xuXG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBudW1iZXJcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1uKHMpXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTogIFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOiAgICAgICAgICBcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtblxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgICAgICBudW1PZlJvd3MgPSBhcmcuZGF0YS5udW1PZlJvd3M7XG4gICAgICAgICAgICAgICAgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7ICAgIFxuICAgICAgICAgICAgICAgIGJ1ZiA9IGFyZy5kYXRhLmJ1ZjtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgdHlwZU1hcFt0eXBlXShudW1PZlJvd3MpO1xuXG4gICAgICAgICAgICAgICAgZm9yKGxldCBqID0gMDsgaiA8IG51bU9mUm93czsgaisrKVxuICAgICAgICAgICAgICAgICAgICBhcnJheVtqXSA9IGhlYXBbYnVmIC8gbnVtT2ZCeXRlcyArIGpdO1xuXG4gICAgICAgICAgICAgICAgYXJnLmFycmF5ID0gYXJyYXk7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6IFxuICAgICAgICAgICAgICAgIGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICAgICAgbnVtT2ZSb3dzID0gYXJnLmRhdGEubnVtT2ZSb3dzO1xuICAgICAgICAgICAgICAgIG51bU9mQ29scyA9IGFyZy5kYXRhLm51bU9mQ29sdW1ucztcbiAgICAgICAgICAgICAgICBudW1PZkJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDsgICAgXG4gICAgICAgICAgICAgICAgYnVmID0gYXJnLmRhdGEuYnVmO1xuICAgICAgICAgICAgICAgIGxldCBhcnJheXMgPSBbXTtcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSBuZXcgdHlwZU1hcFt0eXBlXShudW1PZlJvd3MpO1xuXG4gICAgICAgICAgICAgICAgICAgZm9yKGxldCBqID0gMDsgaiA8IG51bU9mUm93czsgaisrKVxuICAgICAgICAgICAgICAgICAgICAgIGFycltqXSA9IGhlYXBbYnVmIC8gbnVtT2ZCeXRlcyArIGogKyBpICogbnVtT2ZSb3dzXTsgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChhcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFyZy5hcnJheXMgPSBhcnJheXM7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9ICAgICAgICAgICAgXG59IC8vIGdldERhdGFGcm9tQnVmZmVyXG5cbi8vIENsZWFyIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGFycmF5IGRhdGFcbmZ1bmN0aW9uIGNsZWFyTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSwgaW5wdXRzKSB7XG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIFxuICAgICAgICBzd2l0Y2goYXJnLnR5cGUpIHsgLy8gcHJvY2VzcyBlYWNoIHR5cGUgb2YgaW5wdXRcblxuICAgICAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGVhY2ggbm9uLW51bWJlciBjYXNlXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgbW9kdWxlLl9mcmVlKGFyZy5kYXRhLmJ1Zik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrOyBcbiAgICAgICAgfSAgICBcbn0gLy8gY2xlYXJNZW1vcnlGb3JCdWZmZXJcblxuLy8gRXh0cmFjdCBuZXdseSBjcmVhdGVkIGRhdGE6IG5ldyBjb2x1bW4ocykgYXJlIGNyZWF0ZWRcbmZ1bmN0aW9uIGV4dHJhY3ROZXdseUNyZWF0ZWREYXRhKGZ1bmNTcGVjaWZpY2F0aW9uQXJncywgYXJnc0FmdGVyV2FzbUNhbGwpIHtcbiAgICAvLyB0eXBlLXRvLWNvbHVtbl9jcmVhdG9yIG1hcFxuICAgIGNvbnN0IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXAgPSB7J25ld0Zsb2F0Q29sdW1ucyc6IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbnMnOiBERy5Db2x1bW4uZnJvbUludDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiBERy5Db2x1bW4uZnJvbUludDMyQXJyYXl9O1xuXG4gICAgbGV0IGkgPSAwO1xuXG4gICAgZm9yKGNvbnN0IGtleSBpbiBmdW5jU3BlY2lmaWNhdGlvbkFyZ3MpIFxuICAgIHtcbiAgICAgICAgY29uc3QgYXJnID0gZnVuY1NwZWNpZmljYXRpb25BcmdzW2tleV07XG5cbiAgICAgICAgc3dpdGNoKGFyZy50eXBlKXsgLy8gUHJvY2VzcyBlYWNoIHR5cGVcblxuICAgICAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbihzKVxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGxldCBuYW1lO1xuXG4gICAgICAgICAgICAgICAgLy8gc3BlY2lmeSBuYW1lIGZvciBjb2x1bW5cbiAgICAgICAgICAgICAgICBpZihhcmcubmFtZSA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSAoMCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBlbHNlIFxuICAgICAgICAgICAgICAgICAgICBuYW1lcyA9IGFyZy5uYW1lO1xuXG4gICAgICAgICAgICAgICAgYXJnLmNvbHVtbiA9IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXBbYXJnLnR5cGVdKG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3NBZnRlcldhc21DYWxsW2ldLmFycmF5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBsZXQgbGVuZ3RoID0gYXJnc0FmdGVyV2FzbUNhbGxbaV0uYXJyYXlzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgIGxldCBuYW1lcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgLy8gc3BlY2lmeSBuYW1lIGZvciBjb2x1bW5cbiAgICAgICAgICAgICAgICBpZihhcmcubmFtZXMgPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGsgPSAxOyBrIDw9IGxlbmd0aDsgaysrKVxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMucHVzaCgoaykudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgZWxzZSBuYW1lcyA9IGFyZy5uYW1lcztcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBsZW5ndGg7IGorKylcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHR5cGVUb0NvbHVtbkNyZWF0b3JNYXBbYXJnLnR5cGVdKG5hbWVzW2pdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FmdGVyV2FzbUNhbGxbaV0uYXJyYXlzW2pdKSk7XG5cbiAgICAgICAgICAgICAgICBhcmcuY29sdW1ucyA9IGNvbHVtbnM7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaSsrO1xuICAgIH1cbn0gLy8gZXh0cmFjdE5ld2x5Q3JlYXRlZERhdGFcblxuLy8gR2V0IG91dHB1dCBkYXRhOiBvdmVyYWxsIG91dHB1dCBpcyBjcmVhdGVkXG5mdW5jdGlvbiBnZXRPdXRwdXQoZnVuY1NwZWNpZmljYXRpb24pIHsgIFxuICAgIGxldCBvdXRwdXQgPSBmdW5jU3BlY2lmaWNhdGlvbi5vdXRwdXQ7XG4gICAgXG4gICAgY29uc3QgdHlwZVRvRGF0YUZpZWxkTWFwID0geyduZXdGbG9hdENvbHVtbnMnOiAnY29sdW1ucycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogJ2NvbHVtbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiAnY29sdW1uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbic6ICdjb2x1bW4nfTtcblxuICAgIHN3aXRjaChvdXRwdXQudHlwZSkge1xuXG4gICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzW291dHB1dC5zb3VyY2VdO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDT0xVTU46XG4gICAgICAgICAgICByZXR1cm4gZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzW291dHB1dC5zb3VyY2VdLmNvbHVtbjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgVEFCTEVfT0ZfQ09MVU1OUzpcbiAgICAgICAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzW291dHB1dC5zb3VyY2VdLmNvbHVtbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBPQkpFQ1RTOlxuICAgICAgICAgICAgbGV0IGFycmF5VG9SZXR1cm4gPSBbXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcHVzaCBkYXRhIG9mIHRoZSByZXF1aXJlZCBhcmd1bWVudHNcbiAgICAgICAgICAgIGZvcihsZXQgbmFtZSBvZiBvdXRwdXQuc291cmNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyZyA9IGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tuYW1lXTtcbiAgICAgICAgICAgICAgICBhcnJheVRvUmV0dXJuLnB1c2goYXJnW3R5cGVUb0RhdGFGaWVsZE1hcFthcmcudHlwZV1dKTtcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgIHJldHVybiBhcnJheVRvUmV0dXJuO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxufSAvLyBnZXRPdXRwdXRcblxuLy8gQ2xlYXIgbmV3bHkgY3JlYXRlZCBkYXRhIGZpZWxkcyAobmV3IGNvbHVtbihzKSlcbmZ1bmN0aW9uIGNsZWFyTmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbkFyZ3MpIHsgXG4gICAgZm9yKGNvbnN0IGtleSBpbiBmdW5jU3BlY2lmaWNhdGlvbkFyZ3MpIHtcbiAgICAgICAgY29uc3QgYXJnID0gZnVuY1NwZWNpZmljYXRpb25BcmdzW2tleV07XG5cbiAgICAgICAgc3dpdGNoIChhcmcudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGFyZy5jb2x1bW4gPSBudWxsOyAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuY29sdW1ucyA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59IC8vIGNsZWFyTmV3bHlDcmVhdGVkRGF0YVxuXG4vLyBUSEUgTUFJTiBGVU5DVElPTjogYSB3cmFwcGVyIGZvciBDKystZnVuY3Rpb24gY2FsbFxuZXhwb3J0IGZ1bmN0aW9uIGNwcFdyYXBwZXIobW9kdWxlLCBhcmdzLCBjcHBGdW5jTmFtZSwgcmV0dXJuVHlwZSkge1xuICAgIC8vIGFsbG9jYXRlIG1lbW9yeSBmb3IgYXJyYXlzIHRoYXQgYXJlIHBhc3NlZCB0byBDKystZnVuY3Rpb25cbiAgICBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUsIGFyZ3MpO1xuXG4gICAgLy8gcHV0IGRhdGEgKGp1c3QgY29sdW1uKHMpKSB0byBhbGxvY2F0ZWQgYnVmZmVyc1xuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUsIGFyZ3MpO1xuXG4gICAgLy8gY3JlYXRlIGFycmF5IG9mIHBhcmFtZXRlcnMgdGhhdCBhcmUgcGFzc2VkIHRvIEMrKy1mdW5jdGlvblxuICAgIGxldCBwYXJhbXMgPSBnZXRBcnJPZldhc21QYXJhbXMoYXJncyk7XG5cbiAgICAvL2NvbnNvbGUubG9nKCdwYXJhbXM6Jyk7XG4gICAgLy9jb25zb2xlLmxvZyhwYXJhbXMpO1xuXG4gICAgLy8gY3JlYXRlIGFycmF5IG9mIHBhcmFtZXRlcnMnIHR5cGVzIHRoYXQgYXJlIHBhc3NlZCB0byBDKystZnVuY3Rpb25cbiAgICBsZXQgdHlwZXMgPSBnZXRBcnJPZldhc21UeXBlcyhhcmdzKTtcbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKCd0eXBlczonKTtcbiAgICAvL2NvbnNvbGUubG9nKHR5cGVzKTtcblxuICAgIC8vIGNhbGwgd2FzbS1mdW5jdGlvblxuICAgIGxldCByZXN1bHQgPSBtb2R1bGUuY2NhbGwoY3BwRnVuY05hbWUsIHJldHVyblR5cGUsIHR5cGVzLCBwYXJhbXMpO1xuICAgIFxuICAgIC8vY29uc29sZS5sb2cocmVzdWx0KTtcblxuICAgIC8vIGdldCBkYXRhIGZyb20gYnVmZmVycyAoanVzdCBjb2x1bW4ocykpXG4gICAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlLCBhcmdzKTsgICAgICAgIFxuXG4gICAgLy8gY2xlYXIgbWVtb3J5IHRoYXQgd2FzIHByZXZpb3VzZWx5IGFsbG9jYXRlZFxuICAgIGNsZWFyTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSwgYXJncyk7XG5cbiAgICAvL2NvbnNvbGUubG9nKCdkb25lJyk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBHZXQgdGhlIHJlcXVpcmVkIG91dHB1dC5cbi8vIEl0IHRha2VzIGEgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZnVuY3Rpb24gYW5kIHRoZSBkYXRhIGNvbXB1dGVkXG4vLyBhbmQgZXh0cmFjdHMgdGhlIHJlcXVpcmVkIHJlc3VsdHMuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzdWx0KGZ1bmNTcGVjaWZpY2F0aW9uLCBkYXRhRnJvbVdlYldvcmtlcikge1xuICAgIGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50cy5fY2FsbFJlc3VsdCA9IGRhdGFGcm9tV2ViV29ya2VyLmNhbGxSZXN1bHQ7ICBcblxuICAgIGV4dHJhY3ROZXdseUNyZWF0ZWREYXRhKGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50cywgZGF0YUZyb21XZWJXb3JrZXIuYXJncyk7ICAgIFxuXG4gICAgbGV0IG91dFB1dCA9IGdldE91dHB1dChmdW5jU3BlY2lmaWNhdGlvbik7XG5cbiAgICAvLyBCZWxvdywgd2UgcmVtb3ZlIG5ld2x5IGNyZWF0ZWQgY29sdW1uKHMpLCB3aGljaCBhcmUgY3JlYXRlZCBhdCB0aGUgZXh0cmFjdGlvbi1zdGVwLlxuICAgIC8vIEl0IGlzIGVzcGVjaWFsbHkgcmVxdWlyZWQsIHdoZW4gbXVsdGlwbGUgY2FsbCBvZiB3YXNtLWZ1bmN0aW9ucyBpbiB3ZWJ3b3JrZXIuXG4gICAgY2xlYXJOZXdseUNyZWF0ZWREYXRhKGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gb3V0UHV0O1xufSIsIi8vIElucHV0cyBjb3JyZWN0bmVzcyBjaGVjayB0b29sc1xuLy9MaW1pdGF0aW9uIGNvbnN0YW50c1xuY29uc3QgQ09NUF9NSU4gPSAxO1xuY29uc3QgU0FNUExFU19DT1VOVF9NSU4gPSAxO1xuY29uc3QgRkVBVFVSRVNfQ09VTlRfTUlOID0gMTtcbmNvbnN0IFBFUkNFTlRBR0VfTUlOID0gMDtcbmNvbnN0IFBFUkNFTlRBR0VfTUFYID0gMTAwO1xuY29uc3QgTUFYX0VMRU1FTlRTX0NPVU5UID0gMTAwMDAwMDAwO1xuLy8gRXJyb3IgbWVzc2FnZXNcbmNvbnN0IENPTVBfUE9TSVRWRV9NRVMgPSAnY29tcG9uZW50cyBtdXN0IGJlIHBvc2l0aXZlLic7XG5jb25zdCBDT01QX0VYQ0VTUyA9ICdjb21wb25lbnRzIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBmZWF1dHVyZXMgY291bnQuJztcbmNvbnN0IElOQ09SRVJSRUNUX01JTl9NQVhfTUVTID0gJ21pbiBtdXN0IGJlIGxlc3MgdGhhbiBtYXguJztcbmNvbnN0IElOQ09SRVJSRUNUX0ZFQVRVUkVTX01FUyA9ICdmZWF0dXJlcyBtdXN0IGJlIHBvc2l0aXZlLic7XG5jb25zdCBJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyA9ICdzYW1wbGVzIG11c3QgYmUgcG9zaXRpdmUuJztcbmNvbnN0IElOQ09SRVJSRUNUX1BFUkNFTlRBR0VfTUVTID0gJ3Zpb2xhdG9ycyBwZXJjZW50YWdlIG11c3QgYmUgZnJvbSB0aGUgcmFuZ2UgZnJvbSAwIHRvIDEwMC4nO1xuY29uc3QgREFUQUZSQU1FX0lTX1RPT19CSUdfTUVTID0gJ2RhdGFmcmFtZSBpcyB0b28gYmlnLic7XG4vLyBDaGVjayBjb21wb25lbnRzIGNvdW50IChQQ0EsIFBMUylcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NvbXBvbmVuZXRzKGZlYXR1cmVzLCBjb21wb25lbnRzKSB7XG4gICAgaWYgKGNvbXBvbmVudHMgPCBDT01QX01JTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKENPTVBfUE9TSVRWRV9NRVMpO1xuICAgIGlmIChjb21wb25lbnRzID4gZmVhdHVyZXMubGVuZ3RoKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoQ09NUF9FWENFU1MpO1xuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggKiBmZWF0dXJlcy5ieUluZGV4KDApLmxlbmd0aCA+IE1BWF9FTEVNRU5UU19DT1VOVClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKERBVEFGUkFNRV9JU19UT09fQklHX01FUyk7XG59XG4vLyBDaGVjayBpbnB1dHMgb2YgZGF0YSBmb3IgU1ZNIHRlc3RpbmcgZ2VuZXJhdG9yXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tHZW5lcmF0b3JTVk1pbnB1dHMoc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICAgIGlmIChtaW4gPj0gbWF4KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfTUlOX01BWF9NRVMpO1xuICAgIGlmIChmZWF0dXJlc0NvdW50IDwgRkVBVFVSRVNfQ09VTlRfTUlOKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfRkVBVFVSRVNfTUVTKTtcbiAgICBpZiAoc2FtcGxlc0NvdW50IDwgU0FNUExFU19DT1VOVF9NSU4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyk7XG4gICAgaWYgKCh2aW9sYXRvcnNQZXJjZW50YWdlIDwgUEVSQ0VOVEFHRV9NSU4pIHx8ICh2aW9sYXRvcnNQZXJjZW50YWdlID4gUEVSQ0VOVEFHRV9NQVgpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfUEVSQ0VOVEFHRV9NRVMpO1xufVxuIiwiLy8gRXhwbG9yYXRvcnkgZGF0YSBhbmFseXNpcyAoRURBKSB0b29sc1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlciwgX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25JbldlYldvcmtlciB9IGZyb20gJy4uL3dhc20vRURBQVBJJztcbmltcG9ydCB7IGNoZWNrQ29tcG9uZW5ldHMgfSBmcm9tICcuL3V0aWxzJztcbi8vIFByaW5jaXBhbCBjb21wb25lbnRzIGFuYWx5c2lzIChQQ0EpXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVBDQSh0YWJsZSwgZmVhdHVyZXMsIGNvbXBvbmVudHMsIGNlbnRlciwgc2NhbGUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjaGVja0NvbXBvbmVuZXRzKGZlYXR1cmVzLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3QgY2VudGVyTnVtID0gY2VudGVyID8gMSA6IDA7XG4gICAgICAgIGNvbnN0IHNjYWxlTnVtID0gc2NhbGUgPyAxIDogMDtcbiAgICAgICAgbGV0IF9vdXRwdXQ7XG4gICAgICAgIGxldCBfcHJvbWlzZSA9IF9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpc0luV2ViV29ya2VyKHRhYmxlLCBmZWF0dXJlcywgY29tcG9uZW50cywgY2VudGVyTnVtLCBzY2FsZU51bSk7XG4gICAgICAgIHlpZWxkIF9wcm9taXNlLnRoZW4oX3Jlc3VsdCA9PiB7IF9vdXRwdXQgPSBfcmVzdWx0OyB9LCBfZXJyb3IgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke19lcnJvcn1gKTsgfSk7XG4gICAgICAgIHJldHVybiBfb3V0cHV0O1xuICAgIH0pO1xufVxuLy8gUGFydGlhbCBsZWFzdCBzcXVhcmUgcmVncmVzc2lvbiAoUExTKVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVQTFModGFibGUsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY2hlY2tDb21wb25lbmV0cyhmZWF0dXJlcywgY29tcG9uZW50cyk7XG4gICAgICAgIGxldCBfb3V0cHV0O1xuICAgICAgICBsZXQgX3Byb21pc2UgPSBfcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbkluV2ViV29ya2VyKHRhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50cyk7XG4gICAgICAgIHlpZWxkIF9wcm9taXNlLnRoZW4oX3Jlc3VsdCA9PiB7IF9vdXRwdXQgPSBfcmVzdWx0OyB9LCBfZXJyb3IgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke19lcnJvcn1gKTsgfSk7XG4gICAgICAgIHJldHVybiBfb3V0cHV0O1xuICAgIH0pO1xufVxuIiwiLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LlxuLy8gSmF2YVNjcmlwdCBBUEkgZm9yIGNhbGwgd2FzbS1mdW5jdGlvbnMgZnJvbSB0aGUgbW9kdWxlIEVEQVxuXG4vLyBJbXBvcnRzIGZvciBjYWxsIHdhc20gcnVudGltZS1zeXN0ZW06IGluIHRoZSBtYWluIHN0cmVhbSBhbmQgaW4gd2Vid29ya2Vyc1xuaW1wb3J0IHtjYWxsV2FzbX0gZnJvbSAnLi4vd2FzbS9jYWxsV2FzbSc7XG5pbXBvcnQge2dldENwcElucHV0LCBnZXRSZXN1bHR9IGZyb20gJy4uL3dhc20vY2FsbFdhc21Gb3JXZWJXb3JrZXInO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX2luaXRFREFBUEkoKSB7XG4gIGF3YWl0IGluaXRFREEoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpcyh0YWJsZSwgY29sdW1ucywgY29tcG9uZW50c0NvdW50LCBjZW50ZXJOdW0sIHNjYWxlTnVtKSB7XG4gIHJldHVybiBjYWxsV2FzbShFREEsICdwcmluY2lwYWxDb21wb25lbnRBbmFseXNpcycsIFtjb2x1bW5zLCBjb21wb25lbnRzQ291bnQsIGNlbnRlck51bSwgc2NhbGVOdW1dKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpc0luV2ViV29ya2VyKHRhYmxlLCBjb2x1bW5zLCBjb21wb25lbnRzQ291bnQsIGNlbnRlck51bSwgc2NhbGVOdW0pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpc1dvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzJ10uYXJndW1lbnRzLFtjb2x1bW5zLCBjb21wb25lbnRzQ291bnQsIGNlbnRlck51bSwgc2NhbGVOdW1dKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsncHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXMnXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9lcnJvcihkZiwgY29sMSwgY29sMikge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAnZXJyb3InLCBbY29sMSwgY29sMl0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX2Vycm9ySW5XZWJXb3JrZXIoZGYsIGNvbDEsIGNvbDIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9lcnJvcldvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ2Vycm9yJ10uYXJndW1lbnRzLFtjb2wxLCBjb2wyXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ2Vycm9yJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbih0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHNDb3VudCkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAncGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbicsIFtmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50c0NvdW50XSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbkluV2ViV29ya2VyKHRhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50c0NvdW50KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbldvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb24nXS5hcmd1bWVudHMsW2ZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzQ291bnRdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsncGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbiddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX2dlbmVyYXRlRGF0YXNldChrZXJuZWwsIGtlcm5lbFBhcmFtcywgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAnZ2VuZXJhdGVEYXRhc2V0JywgW2tlcm5lbCwga2VybmVsUGFyYW1zLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfZ2VuZXJhdGVEYXRhc2V0SW5XZWJXb3JrZXIoa2VybmVsLCBrZXJuZWxQYXJhbXMsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9nZW5lcmF0ZURhdGFzZXRXb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydnZW5lcmF0ZURhdGFzZXQnXS5hcmd1bWVudHMsW2tlcm5lbCwga2VybmVsUGFyYW1zLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ2dlbmVyYXRlRGF0YXNldCddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX25vcm1hbGl6ZURhdGFzZXQoZGF0YSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAnbm9ybWFsaXplRGF0YXNldCcsIFtkYXRhXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfbm9ybWFsaXplRGF0YXNldEluV2ViV29ya2VyKGRhdGEpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9ub3JtYWxpemVEYXRhc2V0V29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsnbm9ybWFsaXplRGF0YXNldCddLmFyZ3VtZW50cyxbZGF0YV0pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWydub3JtYWxpemVEYXRhc2V0J10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfdHJhaW5MU1NWTShnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBkYXRhc2V0LCBsYWJlbHMpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3RyYWluTFNTVk0nLCBbZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgZGF0YXNldCwgbGFiZWxzXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfdHJhaW5MU1NWTUluV2ViV29ya2VyKGdhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGRhdGFzZXQsIGxhYmVscykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL3RyYWluTFNTVk1Xb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWyd0cmFpbkxTU1ZNJ10uYXJndW1lbnRzLFtnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBkYXRhc2V0LCBsYWJlbHNdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsndHJhaW5MU1NWTSddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX3ByZWRpY3RCeUxTU1ZNKGtlcm5lbCwga2VybmVsUGFyYW1zLCBub3JtYWxpemVkRGF0YSwgbGFiZWxzLCBtZWFucywgc3RkRGV2cywgbW9kZWxQYXJhbXMsIHByZWNvbXB1dGVkV2VpZ2h0cywgdGFyZ2V0RGF0YSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAncHJlZGljdEJ5TFNTVk0nLCBba2VybmVsLCBrZXJuZWxQYXJhbXMsIG5vcm1hbGl6ZWREYXRhLCBsYWJlbHMsIG1lYW5zLCBzdGREZXZzLCBtb2RlbFBhcmFtcywgcHJlY29tcHV0ZWRXZWlnaHRzLCB0YXJnZXREYXRhXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfcHJlZGljdEJ5TFNTVk1JbldlYldvcmtlcihrZXJuZWwsIGtlcm5lbFBhcmFtcywgbm9ybWFsaXplZERhdGEsIGxhYmVscywgbWVhbnMsIHN0ZERldnMsIG1vZGVsUGFyYW1zLCBwcmVjb21wdXRlZFdlaWdodHMsIHRhcmdldERhdGEpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9wcmVkaWN0QnlMU1NWTVdvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ3ByZWRpY3RCeUxTU1ZNJ10uYXJndW1lbnRzLFtrZXJuZWwsIGtlcm5lbFBhcmFtcywgbm9ybWFsaXplZERhdGEsIGxhYmVscywgbWVhbnMsIHN0ZERldnMsIG1vZGVsUGFyYW1zLCBwcmVjb21wdXRlZFdlaWdodHMsIHRhcmdldERhdGFdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsncHJlZGljdEJ5TFNTVk0nXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF90cmFpbkFuZEFuYWx5emVMU1NWTShnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50LCBkYXRhc2V0LCBsYWJlbHMpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3RyYWluQW5kQW5hbHl6ZUxTU1ZNJywgW2dhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQsIGRhdGFzZXQsIGxhYmVsc10pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3RyYWluQW5kQW5hbHl6ZUxTU1ZNSW5XZWJXb3JrZXIoZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvdHJhaW5BbmRBbmFseXplTFNTVk1Xb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWyd0cmFpbkFuZEFuYWx5emVMU1NWTSddLmFyZ3VtZW50cyxbZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3RyYWluQW5kQW5hbHl6ZUxTU1ZNJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbiIsIi8vIEN1c3RvbSBVSSBmb3IgRXhwbG9yYXRvcnkgZGF0YSBhbmFseXNpcyAoRURBKSB0b29sc1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuLy8gUmVuYW1lIFBDQSBjb2x1bW5zXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lUENBY29sdW1ucyhwY2FUYWJsZSkge1xuICAgIGZvciAoY29uc3QgY29sIG9mIHBjYVRhYmxlLmNvbHVtbnMudG9MaXN0KCkpXG4gICAgICAgIGNvbC5uYW1lID0gJ19QQ0EnICsgY29sLm5hbWU7XG4gICAgcmV0dXJuIHBjYVRhYmxlO1xufVxuLy8gUHJlZGljdGVkIHZzIFJlZmVyZW5jZSBzY2F0dGVyIHBsb3RcbmV4cG9ydCBmdW5jdGlvbiBwcmVkaWN0ZWRWZXJzdXNSZWZlcmVuY2VTY2F0dGVyUGxvdChyZWZlcmVuY2UsIHByZWRpY3Rpb24pIHtcbiAgICBwcmVkaWN0aW9uLm5hbWUgPSByZWZlcmVuY2UubmFtZSArICcocHJlZGljdGVkKSc7XG4gICAgbGV0IGRmUmVmZXJlbmNlUHJlZGljdGlvbiA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbcmVmZXJlbmNlLCBwcmVkaWN0aW9uXSk7XG4gICAgZGZSZWZlcmVuY2VQcmVkaWN0aW9uLm5hbWUgPSAnUmVmZXJlbmNlIHZzLiBQcmVkaWN0ZWQnO1xuICAgIHJldHVybiBERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGZSZWZlcmVuY2VQcmVkaWN0aW9uLCB7IHRpdGxlOiBkZlJlZmVyZW5jZVByZWRpY3Rpb24ubmFtZSxcbiAgICAgICAgeDogcmVmZXJlbmNlLm5hbWUsXG4gICAgICAgIHk6IHByZWRpY3Rpb24ubmFtZSxcbiAgICAgICAgc2hvd1JlZ3Jlc3Npb25MaW5lOiB0cnVlLFxuICAgICAgICBtYXJrZXJUeXBlOiAnY2lyY2xlJ1xuICAgIH0pO1xufVxuLy8gUmVncmVzc2lvbiBDb2VmZmljaWVudHMgQmFyIENoYXJ0XG5leHBvcnQgZnVuY3Rpb24gcmVncmVzc2lvbkNvZWZmaWNpZW50c0JhckNoYXJ0KGZlYXR1cmVzLCByZWdyZXNzaW9uQ29lZmZzKSB7XG4gICAgcmVncmVzc2lvbkNvZWZmcy5uYW1lID0gJ3JlZ3Jlc3Npb24gY29lZmZpY2llbnQnO1xuICAgIGxldCBuYW1lc09mUHJlZGljdG9ycyA9IFtdO1xuICAgIGZvciAoY29uc3QgY29sIG9mIGZlYXR1cmVzKVxuICAgICAgICBuYW1lc09mUHJlZGljdG9ycy5wdXNoKGNvbC5uYW1lKTtcbiAgICBsZXQgcHJlZGljdG9yTmFtZXNDb2x1bW4gPSBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ2ZlYXR1cmUnLCBuYW1lc09mUHJlZGljdG9ycyk7XG4gICAgbGV0IGRmUmVnckNvZWZzID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtwcmVkaWN0b3JOYW1lc0NvbHVtbiwgcmVncmVzc2lvbkNvZWZmc10pO1xuICAgIGRmUmVnckNvZWZzLm5hbWUgPSAnUmVncmVzc2lvbiBDb2VmZmljaWVudHMnO1xuICAgIHJldHVybiBERy5WaWV3ZXIuYmFyQ2hhcnQoZGZSZWdyQ29lZnMsIHsgdGl0bGU6IGRmUmVnckNvZWZzLm5hbWUsIHNwbGl0OiAnZmVhdHVyZScsXG4gICAgICAgIHZhbHVlOiAncmVncmVzc2lvbiBjb2VmZmljaWVudCcsIHZhbHVlQWdnclR5cGU6ICdhdmcnIH0pO1xufVxuLy8gU2NvcmVzIFNjYXR0ZXIgUGxvdFxuZXhwb3J0IGZ1bmN0aW9uIHNjb3Jlc1NjYXR0ZXJQbG90KHhTY29yZXMsIHlTY29yZXMpIHtcbiAgICBsZXQgc2NvcmVzQ29sdW1ucyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeFNjb3Jlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB4U2NvcmVzW2ldLm5hbWUgPSBgeC5zY29yZS50JHtpICsgMX1gO1xuICAgICAgICBzY29yZXNDb2x1bW5zLnB1c2goeFNjb3Jlc1tpXSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeVNjb3Jlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB5U2NvcmVzW2ldLm5hbWUgPSBgeS5zY29yZS51JHtpICsgMX1gO1xuICAgICAgICBzY29yZXNDb2x1bW5zLnB1c2goeVNjb3Jlc1tpXSk7XG4gICAgfVxuICAgIGxldCBzY29yZXMgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoc2NvcmVzQ29sdW1ucyk7XG4gICAgc2NvcmVzLm5hbWUgPSAnU2NvcmVzJztcbiAgICAvL2dyb2suc2hlbGwuYWRkVGFibGVWaWV3KHNjb3Jlcyk7XG4gICAgcmV0dXJuIERHLlZpZXdlci5zY2F0dGVyUGxvdChzY29yZXMsIHsgdGl0bGU6IHNjb3Jlcy5uYW1lLFxuICAgICAgICB4OiB4U2NvcmVzWzBdLm5hbWUsXG4gICAgICAgIHk6IHlTY29yZXNbMF0ubmFtZSxcbiAgICAgICAgbWFya2VyVHlwZTogJ2NpcmNsZSdcbiAgICB9KTtcbn1cbi8vIExvYWRpbmcgU2NhdHRlciBQbG90XG5leHBvcnQgZnVuY3Rpb24gbG9hZGluZ1NjYXR0ZXJQbG90KGZlYXR1cmVzLCB4TG9hZGluZ3MpIHtcbiAgICBsZXQgbG9hZGluZ0NvbHMgPSBbXTtcbiAgICBsZXQgbG9hZGluZ0xhYmVscyA9IFtdO1xuICAgIGZvciAobGV0IGNvbCBvZiBmZWF0dXJlcylcbiAgICAgICAgbG9hZGluZ0xhYmVscy5wdXNoKGNvbC5uYW1lKTtcbiAgICBsb2FkaW5nQ29scy5wdXNoKERHLkNvbHVtbi5mcm9tU3RyaW5ncygnbGFiZWxzJywgbG9hZGluZ0xhYmVscykpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeExvYWRpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHhMb2FkaW5nc1tpXS5uYW1lID0gYHgubG9hZGluZy5wJHtpICsgMX1gO1xuICAgICAgICBsb2FkaW5nQ29scy5wdXNoKHhMb2FkaW5nc1tpXSk7XG4gICAgfVxuICAgIGxldCBkZkxvYWRpbmdzID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGxvYWRpbmdDb2xzKTtcbiAgICBkZkxvYWRpbmdzLm5hbWUgPSAnTG9hZGluZ3MnO1xuICAgIHJldHVybiBERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGZMb2FkaW5ncywgeyB0aXRsZTogZGZMb2FkaW5ncy5uYW1lLFxuICAgICAgICB4OiB4TG9hZGluZ3NbMF0ubmFtZSxcbiAgICAgICAgeTogeExvYWRpbmdzW3hMb2FkaW5ncy5sZW5ndGggLSAxXS5uYW1lLFxuICAgICAgICBtYXJrZXJUeXBlOiAnY2lyY2xlJyxcbiAgICAgICAgbGFiZWxzOiAnbGFiZWxzJ1xuICAgIH0pO1xufVxuLy8gQWRkIFBMUyB2aXN1YWxpemF0aW9uXG5leHBvcnQgZnVuY3Rpb24gYWRkUExTdmlzdWFsaXphdGlvbih0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIHBsc091dHB1dCkge1xuICAgIGxldCB2aWV3ID0gZ3Jvay5zaGVsbC5nZXRUYWJsZVZpZXcodGFibGUubmFtZSk7XG4gICAgLy8gMS4gUHJlZGljdGVkIHZzIFJlZmVyZW5jZSBzY2F0dGVyIHBsb3RcbiAgICB2aWV3LmFkZFZpZXdlcihwcmVkaWN0ZWRWZXJzdXNSZWZlcmVuY2VTY2F0dGVyUGxvdChwcmVkaWN0LCBwbHNPdXRwdXRbMF0pKTtcbiAgICAvLyAyLiBSZWdyZXNzaW9uIENvZWZmaWNpZW50cyBCYXIgQ2hhcnRcbiAgICB2aWV3LmFkZFZpZXdlcihyZWdyZXNzaW9uQ29lZmZpY2llbnRzQmFyQ2hhcnQoZmVhdHVyZXMsIHBsc091dHB1dFsxXSkpO1xuICAgIC8vIDMuIFNjb3JlcyBTY2F0dGVyIFBsb3RcbiAgICB2aWV3LmFkZFZpZXdlcihzY29yZXNTY2F0dGVyUGxvdChwbHNPdXRwdXRbMl0sIHBsc091dHB1dFszXSkpO1xuICAgIC8vIDQuIExvYWRpbmcgU2NhdHRlciBQbG90XG4gICAgdmlldy5hZGRWaWV3ZXIobG9hZGluZ1NjYXR0ZXJQbG90KGZlYXR1cmVzLCBwbHNPdXRwdXRbNF0pKTtcbn1cbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuLyogRG8gbm90IGNoYW5nZSB0aGVzZSBpbXBvcnQgbGluZXMgdG8gbWF0Y2ggZXh0ZXJuYWwgbW9kdWxlcyBpbiB3ZWJwYWNrIGNvbmZpZ3VyYXRpb24gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IGNvbXB1dGVQTFMgfSBmcm9tICcuL0VEQXRvb2xzJztcbmltcG9ydCB7IGFkZFBMU3Zpc3VhbGl6YXRpb24gfSBmcm9tICcuL0VEQXVpJztcbi8vIERlbW8gbXVsdGl2YXJpYXRlIGFuYWx5c2lzIChQTFMpXG5leHBvcnQgZnVuY3Rpb24gZGVtb1BMUyhyb3dDb3VudCwgY29sQ291bnQsIGNvbXBvbmVudHNDb3VudCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIC8vIGNoZWNrIGlucHV0c1xuICAgICAgICBpZiAoKHJvd0NvdW50IDw9IDApIHx8IChjb2xDb3VudCA8PSAwKSB8fCAoY29tcG9uZW50c0NvdW50IDw9IDApIHx8IChjb21wb25lbnRzQ291bnQgPiBjb2xDb3VudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhbCA9IG5ldyBERy5CYWxsb29uO1xuICAgICAgICAgICAgYmFsLmVycm9yKCdJbmNvcnJlY3QgaW5wdXRzLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZ1cnRoZXIsIGN1c3RvbSBpbnRlcmZhY2UgaXMgcHJvdmlkZWRcbiAgICAgICAgY29uc3QgUFJFRElDVCA9ICdSZWZlcmVuY2UnO1xuICAgICAgICBjb25zdCBiaWdEZW1vVGFibGUgPSBncm9rLmRhdGEudGVzdERhdGEoJ3JhbmRvbSB3YWxrJywgcm93Q291bnQsIGNvbENvdW50KTtcbiAgICAgICAgYmlnRGVtb1RhYmxlLm5hbWUgPSBgJHtyb3dDb3VudH0geCAke2NvbENvdW50fWA7XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIGJpZ0RlbW9UYWJsZS5jb2x1bW5zKVxuICAgICAgICAgICAgY29sLm5hbWUgPSAnRmVhdHVyZSAnICsgY29sLm5hbWU7XG4gICAgICAgIGJpZ0RlbW9UYWJsZS5jb2x1bW5zLmJ5SW5kZXgoMCkubmFtZSA9IFBSRURJQ1Q7XG4gICAgICAgIGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGJpZ0RlbW9UYWJsZSk7XG4gICAgICAgIGxldCBwcmVkaWN0ID0gYmlnRGVtb1RhYmxlLmNvbHVtbnMuYnlOYW1lKFBSRURJQ1QpO1xuICAgICAgICBsZXQgZmVhdHVyZXMgPSBiaWdEZW1vVGFibGUuY29sdW1ucy5yZW1vdmUoUFJFRElDVCk7XG4gICAgICAgIGNvbnN0IHBsc1Jlc3VsdHMgPSB5aWVsZCBjb21wdXRlUExTKGJpZ0RlbW9UYWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHNDb3VudCk7XG4gICAgICAgIGFkZFBMU3Zpc3VhbGl6YXRpb24oYmlnRGVtb1RhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgcGxzUmVzdWx0cyk7XG4gICAgICAgIGJpZ0RlbW9UYWJsZS5jb2x1bW5zLmFkZChwcmVkaWN0KTtcbiAgICB9KTtcbn1cbiIsIi8vIFRlc3QgZGF0YSBnZW5lcmF0aW9uIHRvb2xzXG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBjaGVja0dlbmVyYXRvclNWTWlucHV0cyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyIH0gZnJvbSAnLi4vd2FzbS9FREFBUEknO1xuY29uc3QgU1ZNX0dFTl9GRUFUVVJFU19JTkRFWCA9IDA7XG5jb25zdCBTVk1fR0VOX0xBQkVMU19JTkRFWCA9IDE7XG5jb25zdCBTVk1fRkVBVFVSRV9OQU1FID0gJ0ZlYXR1cmUgIyc7XG5jb25zdCBTVk1fTEFCRUxfTkFNRSA9ICdMYWJlbCc7XG4vLyBSZXR1cm5zIHRoZSBkYXRhZnJhbWUgXCJjYXJzXCJcbmV4cG9ydCBmdW5jdGlvbiBjYXJzRGF0YWZyYW1lKCkge1xuICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ21vZGVsJywgWydhbGZhcm9tZW8nLCAnYXVkaScsICdibXcnLCAnY2hldnJvbGV0JywgJ2RvZGdlMScsICdkb2RnZTInLCAnaG9uZGExJywgJ2hvbmRhMicsICdpc3V6dScsICdqYWd1YXInLCAnbWF6ZGEnLCAnbWVyY2VkZXMnLCAnbWVyY3VyeScsICdtaXRzdWJpc2hpJywgJ25pc3NhbjEnLCAnbmlzc2FuMicsICdwZXVnb3QnLCAncGx5bW91dGgnLCAncG9yc2NoZScsICdzYWFiJywgJ3N1YmFydScsICd0b3lvdGExJywgJ3RveW90YTInLCAndG95b3RhMycsICd0b3lvdGE0JywgJ3ZvbGtzd2FnZW4xJywgJ3ZvbGtzd2FnZW4yJywgJ3ZvbHZvMScsICd2b2x2bzInLCAndm9sdm8zJ10pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ2RpZXNlbCcsIG5ldyBJbnQzMkFycmF5KFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAwLCAxXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3R1cmJvJywgbmV3IEludDMyQXJyYXkoWzAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDFdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgndHdvLmRvb3JzJywgbmV3IEludDMyQXJyYXkoWzEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDBdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnaGF0Y2hiYWNrJywgbmV3IEludDMyQXJyYXkoWzEsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDBdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KCd3aGVlbC5iYXNlJywgbmV3IEZsb2F0MzJBcnJheShbOTQuNSwgMTA1LjgwMDAwMzA1MTc1NzgxLCAxMDEuMTk5OTk2OTQ4MjQyMTksIDk0LjUsIDkzLjY5OTk5Njk0ODI0MjE5LCA5My42OTk5OTY5NDgyNDIxOSwgOTMuNjk5OTk2OTQ4MjQyMTksIDk2LjUsIDk0LjMwMDAwMzA1MTc1NzgxLCAxMTMsIDkzLjA5OTk5ODQ3NDEyMTEsIDExNS41OTk5OTg0NzQxMjExLCAxMDIuNjk5OTk2OTQ4MjQyMTksIDkzLjY5OTk5Njk0ODI0MjE5LCA5NC41LCA5NC41LCA5My42OTk5OTY5NDgyNDIxOSwgMTE0LjE5OTk5Njk0ODI0MjE5LCA4OS41LCA5OS4wOTk5OTg0NzQxMjExLCA5Ny4xOTk5OTY5NDgyNDIxOSwgOTUuNjk5OTk2OTQ4MjQyMTksIDk1LjY5OTk5Njk0ODI0MjE5LCA5OC40MDAwMDE1MjU4Nzg5LCAxMDIuNDAwMDAxNTI1ODc4OSwgOTcuMzAwMDAzMDUxNzU3ODEsIDEwMC40MDAwMDE1MjU4Nzg5LCAxMDQuMzAwMDAzMDUxNzU3ODEsIDEwOS4wOTk5OTg0NzQxMjExLCAxMDkuMDk5OTk4NDc0MTIxMV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ2xlbmd0aCcsIG5ldyBGbG9hdDMyQXJyYXkoWzE3MS4xOTk5OTY5NDgyNDIyLCAxOTIuNjk5OTk2OTQ4MjQyMiwgMTc2LjgwMDAwMzA1MTc1NzgsIDE1OC44MDAwMDMwNTE3NTc4LCAxNTcuMzAwMDAzMDUxNzU3OCwgMTU3LjMwMDAwMzA1MTc1NzgsIDE1MCwgMTc1LjM5OTk5Mzg5NjQ4NDM4LCAxNzAuNjk5OTk2OTQ4MjQyMiwgMTk5LjYwMDAwNjEwMzUxNTYyLCAxNjYuODAwMDAzMDUxNzU3OCwgMjAyLjYwMDAwNjEwMzUxNTYyLCAxNzguMzk5OTkzODk2NDg0MzgsIDE1Ny4zMDAwMDMwNTE3NTc4LCAxNzAuMTk5OTk2OTQ4MjQyMiwgMTY1LjMwMDAwMzA1MTc1NzgsIDE1Ny4zMDAwMDMwNTE3NTc4LCAxOTguODk5OTkzODk2NDg0MzgsIDE2OC44OTk5OTM4OTY0ODQzOCwgMTg2LjYwMDAwNjEwMzUxNTYyLCAxNzIsIDE1OC42OTk5OTY5NDgyNDIyLCAxNjYuMzAwMDAzMDUxNzU3OCwgMTc2LjE5OTk5Njk0ODI0MjIsIDE3NS42MDAwMDYxMDM1MTU2MiwgMTcxLjY5OTk5Njk0ODI0MjIsIDE4MC4xOTk5OTY5NDgyNDIyLCAxODguODAwMDAzMDUxNzU3OCwgMTg4LjgwMDAwMzA1MTc1NzgsIDE4OC44MDAwMDMwNTE3NTc4XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSgnd2lkdGgnLCBuZXcgRmxvYXQzMkFycmF5KFs2NS41LCA3MS40MDAwMDE1MjU4Nzg5LCA2NC44MDAwMDMwNTE3NTc4MSwgNjMuNTk5OTk4NDc0MTIxMDk0LCA2My43OTk5OTkyMzcwNjA1NSwgNjMuNzk5OTk5MjM3MDYwNTUsIDY0LCA2NS4xOTk5OTY5NDgyNDIxOSwgNjEuNzk5OTk5MjM3MDYwNTUsIDY5LjU5OTk5ODQ3NDEyMTEsIDY0LjE5OTk5Njk0ODI0MjE5LCA3MS42OTk5OTY5NDgyNDIxOSwgNjgsIDY0LjQwMDAwMTUyNTg3ODksIDYzLjc5OTk5OTIzNzA2MDU1LCA2My43OTk5OTkyMzcwNjA1NSwgNjMuNzk5OTk5MjM3MDYwNTUsIDY4LjQwMDAwMTUyNTg3ODksIDY1LCA2Ni41LCA2NS40MDAwMDE1MjU4Nzg5LCA2My41OTk5OTg0NzQxMjEwOTQsIDY0LjQwMDAwMTUyNTg3ODksIDY1LjU5OTk5ODQ3NDEyMTEsIDY2LjUsIDY1LjUsIDY2LjkwMDAwMTUyNTg3ODksIDY3LjE5OTk5Njk0ODI0MjE5LCA2OC44MDAwMDMwNTE3NTc4MSwgNjguOTAwMDAxNTI1ODc4OV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ2hlaWdodCcsIG5ldyBGbG9hdDMyQXJyYXkoWzUyLjQwMDAwMTUyNTg3ODkwNiwgNTUuNzAwMDAwNzYyOTM5NDUsIDU0LjI5OTk5OTIzNzA2MDU1LCA1MiwgNTAuNzk5OTk5MjM3MDYwNTUsIDUwLjU5OTk5ODQ3NDEyMTA5NCwgNTIuNTk5OTk4NDc0MTIxMDk0LCA1NC4wOTk5OTg0NzQxMjEwOTQsIDUzLjUsIDUyLjc5OTk5OTIzNzA2MDU1LCA1NC4wOTk5OTg0NzQxMjEwOTQsIDU2LjI5OTk5OTIzNzA2MDU1LCA1NC43OTk5OTkyMzcwNjA1NSwgNTAuNzk5OTk5MjM3MDYwNTUsIDUzLjUsIDU0LjUsIDUwLjU5OTk5ODQ3NDEyMTA5NCwgNTguNzAwMDAwNzYyOTM5NDUsIDUxLjU5OTk5ODQ3NDEyMTA5NCwgNTYuMDk5OTk4NDc0MTIxMDk0LCA1Mi41LCA1NC41LCA1MywgNTIsIDU0LjkwMDAwMTUyNTg3ODkwNiwgNTUuNzAwMDAwNzYyOTM5NDUsIDU1LjA5OTk5ODQ3NDEyMTA5NCwgNTYuMjAwMDAwNzYyOTM5NDUsIDU1LjUsIDU1LjVdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnY3VyYi53ZWlnaHQnLCBuZXcgSW50MzJBcnJheShbMjgyMywgMjg0NCwgMjM5NSwgMTkwOSwgMjEyOCwgMTk2NywgMTk1NiwgMjMwNCwgMjMzNywgNDA2NiwgMTk1MCwgMzc3MCwgMjkxMCwgMTkxOCwgMjAyNCwgMTk1MSwgMTk2NywgMzQzMCwgMjgwMCwgMjY5NSwgMjE5MCwgMTk4NSwgMjI3NSwgMjU1MSwgMjQ4MCwgMjI2MSwgMjY2MSwgMjkxMiwgMzA0OSwgMzIxN10pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdlbmcuc2l6ZScsIG5ldyBJbnQzMkFycmF5KFsxNTIsIDEzNiwgMTA4LCA5MCwgOTgsIDkwLCA5MiwgMTEwLCAxMTEsIDI1OCwgOTEsIDE4MywgMTQwLCA5MiwgOTcsIDk3LCA5MCwgMTUyLCAxOTQsIDEyMSwgMTA4LCA5MiwgMTEwLCAxNDYsIDExMCwgOTcsIDEzNiwgMTQxLCAxNDEsIDE0NV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdob3JzZXBvd2VyJywgbmV3IEludDMyQXJyYXkoWzE1NCwgMTEwLCAxMDEsIDcwLCAxMDIsIDY4LCA3NiwgODYsIDc4LCAxNzYsIDY4LCAxMjMsIDE3NSwgNjgsIDY5LCA2OSwgNjgsIDk1LCAyMDcsIDExMCwgODIsIDYyLCA1NiwgMTE2LCA3MywgNTIsIDExMCwgMTE0LCAxNjAsIDEwNl0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdwZWFrLnJwbScsIG5ldyBJbnQzMkFycmF5KFs1MDAwLCA1NTAwLCA1ODAwLCA1NDAwLCA1NTAwLCA1NTAwLCA2MDAwLCA1ODAwLCA0ODAwLCA0NzUwLCA1MDAwLCA0MzUwLCA1MDAwLCA1NTAwLCA1MjAwLCA1MjAwLCA1NTAwLCA0MTUwLCA1OTAwLCA1MjUwLCA0NDAwLCA0ODAwLCA0NTAwLCA0ODAwLCA0NTAwLCA0ODAwLCA1NTAwLCA1NDAwLCA1MzAwLCA0ODAwXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3N5bWJvbCcsIG5ldyBJbnQzMkFycmF5KFsxLCAxLCAyLCAwLCAxLCAxLCAxLCAwLCAwLCAwLCAxLCAtMSwgMSwgMiwgMSwgMSwgMSwgMCwgMywgMiwgMCwgMSwgMCwgMiwgLTEsIDIsIDAsIC0yLCAtMSwgLTFdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnY2l0eS5tcGcnLCBuZXcgSW50MzJBcnJheShbMTksIDE5LCAyMywgMzgsIDI0LCAzMSwgMzAsIDI3LCAyNCwgMTUsIDMxLCAyMiwgMTksIDM3LCAzMSwgMzEsIDMxLCAyNSwgMTcsIDIxLCAyOCwgMzUsIDM0LCAyNCwgMzAsIDM3LCAxOSwgMjMsIDE5LCAyNl0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdoaWdod2F5Lm1wZycsIG5ldyBJbnQzMkFycmF5KFsyNiwgMjUsIDI5LCA0MywgMzAsIDM4LCAzNCwgMzMsIDI5LCAxOSwgMzgsIDI1LCAyNCwgNDEsIDM3LCAzNywgMzgsIDI1LCAyNSwgMjgsIDMzLCAzOSwgMzYsIDMwLCAzMywgNDYsIDI0LCAyOCwgMjUsIDI3XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3ByaWNlJywgbmV3IEludDMyQXJyYXkoWzE2NTAwLCAxNzcxMCwgMTY0MzAsIDY1NzUsIDc5NTcsIDYyMjksIDcxMjksIDg4NDUsIDY3ODUsIDM1NTUwLCA3Mzk1LCAzMTYwMCwgMTY1MDMsIDUzODksIDczNDksIDcyOTksIDYyMjksIDEzODYwLCAzNzAyOCwgMTIxNzAsIDc3NzUsIDUzNDgsIDc4OTgsIDk5ODksIDEwNjk4LCA3Nzc1LCAxMzI5NSwgMTI5NDAsIDE5MDQ1LCAyMjQ3MF0pKSxcbiAgICBdKTtcbn0gLy8gY2Fyc0RhdGFmcmFtZVxuLy8gR2VuZXJhdGUgZGF0YXNldCBmb3IgdGVzdGluZyBiaW5hcnkgY2xhc3NpZmllcnNcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uKGtlcm5lbCwga2VybmVsUGFyYW1zLCBuYW1lLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gY2hlY2sgaW5wdXRzXG4gICAgICAgIGNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzKHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpO1xuICAgICAgICAvLyBrZXJuZWwgcGFyYW1zIGNvbHVtblxuICAgICAgICBjb25zdCBrZXJuZWxQYXJhbXNDb2wgPSBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsICdrZXJuZWxQYXJhbXMnLCBrZXJuZWxQYXJhbXMpO1xuICAgICAgICAvLyBDQUxMIFdBU00tQ09NUFVUQVRJT05TICBcbiAgICAgICAgbGV0IF9vdXRwdXQ7XG4gICAgICAgIGxldCBfcHJvbWlzZSA9IF9nZW5lcmF0ZURhdGFzZXRJbldlYldvcmtlcihrZXJuZWwsIGtlcm5lbFBhcmFtc0NvbCwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgICAgIHlpZWxkIF9wcm9taXNlLnRoZW4oX3Jlc3VsdCA9PiB7IF9vdXRwdXQgPSBfcmVzdWx0OyB9LCBfZXJyb3IgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke19lcnJvcn1gKTsgfSk7XG4gICAgICAgIC8vIFJlbmFtZSBsYWJlbHMgY29sdW1uXG4gICAgICAgIF9vdXRwdXRbU1ZNX0dFTl9MQUJFTFNfSU5ERVhdLm5hbWUgPSBTVk1fTEFCRUxfTkFNRTtcbiAgICAgICAgLy8gUmVuYW1lIGZlYXR1cmUgY29sdW1uc1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBfb3V0cHV0W1NWTV9HRU5fRkVBVFVSRVNfSU5ERVhdKVxuICAgICAgICAgICAgY29sLm5hbWUgPSBTVk1fRkVBVFVSRV9OQU1FICsgY29sLm5hbWU7XG4gICAgICAgIC8vIENyZWF0ZSBkYXRhZnJhbWVcbiAgICAgICAgY29uc3QgZGYgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoX291dHB1dFtTVk1fR0VOX0ZFQVRVUkVTX0lOREVYXSk7XG4gICAgICAgIGRmLm5hbWUgPSBuYW1lO1xuICAgICAgICBkZi5jb2x1bW5zLmFkZChfb3V0cHV0W1NWTV9HRU5fTEFCRUxTX0lOREVYXSk7XG4gICAgICAgIHJldHVybiBkZjtcbiAgICB9KTtcbn0gLy8gdGVzdERhdGFGb3JNYWNoaW5lTGVhcm5pbmdcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuLyogU3VwcG9ydCB2ZWN0b3IgbWFjaGluZSAoU1ZNKSB0b29scy5cbiAgIEl0J3MgZGV2ZWxvcGVkIGZvciBhcHBseWluZyBpbiBjb21iaW5hdGlvbiB3aXRoIERBVEFHUk9LIHByZWRpY3RpdmUgdG9vbHMuXG5cbiAgIFRyYWluaW5nICYgcHJlZGljdGluZyBhcmUgcHJvdmlkZWQgYnkgd2FzbS1jb21wdXRhdGlvbnMuXG5cbiAgIExlYXN0IHNxdWFyZSBzdXBwb3J0IHZlY3RvciBtYWNoaW5lIChMUy1TVk0pIGlzIGltcGxlbWVudGVkOlxuICAgICBbMV0gU3V5a2VucywgSi4sIFZhbmRld2FsbGUsIEouIFwiTGVhc3QgU3F1YXJlcyBTdXBwb3J0IFZlY3RvciBNYWNoaW5lIENsYXNzaWZpZXJzXCIsXG4gICAgICAgICAgIE5ldXJhbCBQcm9jZXNzaW5nIExldHRlcnMgOSwgMjkzLTMwMCAoMTk5OSkuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDIzL0E6MTAxODYyODYwOTc0MlxuKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IF90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyLCBfcHJlZGljdEJ5TFNTVk1JbldlYldvcmtlciB9IGZyb20gJy4uL3dhc20vRURBQVBJJztcbi8vIDEuIENPTlNUQU5UU1xuLy8ga2VybmVsIHR5cGVzXG5leHBvcnQgY29uc3QgTElORUFSID0gMDtcbmV4cG9ydCBjb25zdCBQT0xZTk9NSUFMID0gMTtcbmV4cG9ydCBjb25zdCBSQkYgPSAyO1xuZXhwb3J0IGNvbnN0IFNJR01PSUQgPSAzO1xuLy8gb3V0cHV0LXJlbGF0ZWRcbmNvbnN0IENPTkZVU0lPTl9NQVRSX1NJWkUgPSA0O1xuY29uc3QgTk9STUFMSVpFRF9EQVRBX0lOREVYID0gMDtcbmNvbnN0IE1FQU5TX0lOREVYID0gMTtcbmNvbnN0IFNURF9ERVZTX0lOREVYID0gMjtcbmNvbnN0IE1PREVMX1BBUkFNU19JTkRFWCA9IDM7XG5jb25zdCBNT0RFTF9XRUlHSFRTX0lOREVYID0gNDtcbmNvbnN0IFBSRURJQ1RFRF9MQUJFTFNfSU5ERVggPSA1O1xuY29uc3QgQ09SUkVDVE5FU1NfSU5ERVggPSA2O1xuY29uc3QgQ09ORlVTSU9OX01BVFJJWF9JTkRFWCA9IDc7XG5jb25zdCBUUlVFX1BPU0lUSVZFX0lOREVYID0gMDtcbmNvbnN0IEZBTFNFX05FR0FUSVZFX0lOREVYID0gMTtcbmNvbnN0IEZBTFNFX1BPU0lUSVZFX0lOREVYID0gMjtcbmNvbnN0IFRSVUVfTkVHQVRJVkVfSU5ERVggPSAzO1xuLy8ga2VybmVsIHBhcmFtZXRlcnMgaW5kZWNlc1xuY29uc3QgUkJGX1NJR01BX0lOREVYID0gMDtcbmNvbnN0IFBPTFlOT01JQUxfQ19JTkRFWCA9IDA7XG5jb25zdCBQT0xZTk9NSUFMX0RfSU5ERVggPSAxO1xuY29uc3QgU0lHTU9JRF9LQVBQQV9JTkRFWCA9IDA7XG5jb25zdCBTSUdNT0lEX1RIRVRBX0lOREVYID0gMTtcbi8vIGh5cGVycGFyYW1ldGVycyBsaW1pdHNcbmNvbnN0IEdBTU1BX0lORklNVU1fTElNSVQgPSAwO1xuY29uc3QgUkJGX1NJR01BX0lORklNVU1fTElNSVQgPSAwO1xuY29uc3QgUE9MWU5PTUlBTF9DX0lORklNVU1fTElNSVQgPSAwO1xuY29uc3QgUE9MWU5PTUlBTF9EX0lORklNVU1fTElNSVQgPSAwO1xuLy8gZXJyb3IgbWVzc2FnZXNcbmNvbnN0IFdST05HX0dBTU1BX01FU1NBR0UgPSAnZ2FtbWEgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4nO1xuY29uc3QgV1JPTkdfUkJGX1NJR01BX01FU1NBR0UgPSAnc2lnbWEgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4nO1xuY29uc3QgV1JPTkdfUE9MWU5PTUlBTF9DX01FU1NBR0UgPSAnYyBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlLic7XG5jb25zdCBXUk9OR19QT0xZTk9NSUFMX0RfTUVTU0FHRSA9ICdkIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUuJztcbmNvbnN0IFdST05HX0tFUk5FTF9NRVNTQUdFID0gJ2luY29ycmVjdCBrZXJuZWwuJztcbi8vIG5hbWVzXG5jb25zdCBMQUJFTFMgPSAnTGFiZWxzJztcbmNvbnN0IFBSRURJQ1RFRCA9ICdwcmVkaWN0ZWQnO1xuY29uc3QgQ09SUkVDVE5FU1MgPSAnY29ycmVjdG5lc3MnO1xuY29uc3QgQ09ORlVTSU9OX01BVFJJWF9OQU1FID0gJ0NvbmZ1c2lvbiBtYXRyaXgnO1xuY29uc3QgTUVBTiA9ICdtZWFuJztcbmNvbnN0IFNURF9ERVYgPSAnc3RkIGRldic7XG5jb25zdCBNT0RFTF9QQVJBTVNfTkFNRSA9ICdhbHBoYSc7XG5jb25zdCBNT0RFTF9XRUlHSFRTX05BTUUgPSAnd2VpZ2h0JztcbmNvbnN0IEdBTU1BID0gJ2dhbW1hJztcbmNvbnN0IEtFUk5FTCA9ICdrZXJuZWwnO1xuY29uc3QgS0VSTkVMX1BBUkFNUyA9ICdrZXJuZWwgcGFyYW1zJztcbmNvbnN0IEtFUk5FTF9QQVJBTV8xID0gJ2tlcm5lbCBwYXJhbSAxJztcbmNvbnN0IEtFUk5FTF9QQVJBTV8yID0gJ2tlcm5lbCBwYXJhbSAyJztcbmNvbnN0IEZFQVRVUkVTX0NPVU5UX05BTUUgPSAnZmVhdHVyZXMgY291bnQnO1xuY29uc3QgVFJBSU5fU0FNUExFU19DT1VOVF9OQU1FID0gJ3RyYWluIHNhbXBsZXMgY291bnQnO1xuY29uc3QgVFJBSU5fRVJST1IgPSAnVHJhaW4gZXJyb3IsJSc7XG5jb25zdCBLRVJORUxfVFlQRV9UT19OQU1FX01BUCA9IFsnbGluZWFyJywgJ3BvbHlub21pYWwnLCAnUkJGJywgJ3NpZ21vaWQnXTtcbmNvbnN0IFBPU0lUSVZFX05BTUUgPSAncG9zaXRpdmUgKFApJztcbmNvbnN0IE5FR0FUSVZFX05BTUUgPSAnbmVnYXRpdmUgKE4pJztcbmNvbnN0IFBSRURJQ1RFRF9QT1NJVElWRV9OQU1FID0gJ3ByZWRpY3RlZCBwb3NpdGl2ZSAoUFApJztcbmNvbnN0IFBSRURJQ1RFRF9ORUdBVElWRV9OQU1FID0gJ3ByZWRpY3RlZCBuZWdhdGl2ZSAoUE4pJztcbmNvbnN0IFNFTlNJVElWSVRZID0gJ1NlbnNpdGl2aXR5JztcbmNvbnN0IFNQRUNJRklDSVRZID0gJ1NwZWNpZmljaXR5JztcbmNvbnN0IEJBTEFOQ0VEX0FDQ1VSQUNZID0gJ0JhbGFuY2VkIGFjY3VyYWN5JztcbmNvbnN0IFBPU0lUSVZFX1BSRURJQ1RJVkVfVkFMVUUgPSAnUG9zaXRpdmUgcHJlZGljaXR2ZSB2YWx1ZSc7XG5jb25zdCBORUdBVElWRV9QUkVESUNUSVZFX1ZBTFVFID0gJ05lZ2F0aXZlIHByZWRpY2l0dmUgdmFsdWUnO1xuY29uc3QgTUxfUkVQT1JUID0gJ01vZGVsIHJlcG9ydCc7XG5jb25zdCBNTF9SRVBPUlRfUFJFRElDVEVEX0xBQkVMUyA9ICdQcmVkaWN0ZWQgbGFiZWxzJztcbmNvbnN0IE1MX1JFUE9SVF9UUkFJTl9MQUJFTFMgPSAnVHJhaW4gbGFiZWxzJztcbmNvbnN0IE1MX1JFUE9SVF9DT1JSRUNUTkVTUyA9ICdQcmVkaWN0aW9uIGNvcnJlY3RuZXNzJztcbmNvbnN0IFBSRURJQ1RJT04gPSAncHJlZGljdGlvbic7XG4vLyBQYWNrL3VucGFjayBjb25zdGFudHNcbmNvbnN0IEJZVEVTID0gNDtcbmNvbnN0IElOVFNfQ09VTlQgPSAzO1xuY29uc3QgS0VSX1BBUkFNU19DT1VOVCA9IDI7XG5jb25zdCBNT0RFTF9LRVJORUxfSU5ERVggPSAwO1xuY29uc3QgU0FNUExFU19DT1VOVF9JTkRFWCA9IDE7XG5jb25zdCBGRUFUVVJFU19DT1VOVF9JTkRFWCA9IDI7XG4vLyBtaXNjXG5jb25zdCBJTklUX1ZBTFVFID0gMDsgLy8gYW55IG51bWJlciBjYW4gYmUgdXNlZFxuY29uc3QgTFNfU1ZNX0FERF9DT05TVCA9IDE7IC8vIHNlZSBbMV0gZm9yIG1vcmUgZGV0YWlsc1xuLy8gMi4gVE9PTFNcbi8vIENoZWNrIExTLVNWTSBsZWFybmluZyBoeXBlcnBhcmFtZXRlcnNcbmZ1bmN0aW9uIGNoZWNrSHlwZXJwYXJhbWV0ZXJzKGh5cGVycGFyYW1ldGVycykge1xuICAgIC8vIGNoZWNrIGdhbW1hXG4gICAgaWYgKGh5cGVycGFyYW1ldGVycy5nYW1tYSA8PSBHQU1NQV9JTkZJTVVNX0xJTUlUKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoV1JPTkdfR0FNTUFfTUVTU0FHRSk7XG4gICAgLy8gY2hlY2sga2VybmVsICYgaXRzIHBhcmFtZXRlcnNcbiAgICBzd2l0Y2ggKGh5cGVycGFyYW1ldGVycy5rZXJuZWwpIHtcbiAgICAgICAgY2FzZSBMSU5FQVI6IC8vIHRoZSBjYXNlIG9mIGxpbmVhciBrZXJuZWxcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBSQkY6IC8vIHRoZSBjYXNlIG9mIFJCRiBrZXJuZWxcbiAgICAgICAgICAgIGlmIChoeXBlcnBhcmFtZXRlcnMuc2lnbWEgPD0gUkJGX1NJR01BX0lORklNVU1fTElNSVQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX1JCRl9TSUdNQV9NRVNTQUdFKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBQT0xZTk9NSUFMOiAvLyB0aGUgY2FzZSBvZiBwb2x5bm9taWFsIGtlcm5lbFxuICAgICAgICAgICAgLy8gY2hlY2sgY1xuICAgICAgICAgICAgaWYgKGh5cGVycGFyYW1ldGVycy5jUGFyYW0gPD0gUE9MWU5PTUlBTF9DX0lORklNVU1fTElNSVQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX1BPTFlOT01JQUxfQ19NRVNTQUdFKTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGRcbiAgICAgICAgICAgIGlmIChoeXBlcnBhcmFtZXRlcnMuZFBhcmFtIDw9IFBPTFlOT01JQUxfRF9JTkZJTVVNX0xJTUlUKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihXUk9OR19QT0xZTk9NSUFMX0RfTUVTU0FHRSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgU0lHTU9JRDogLy8gdGhlIGNhc2Ugb2YgcG9seW5vbWlhbCBrZXJuZWxcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdDogLy8gaW5jb3JyZWN0IGtlcm5lbFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX0tFUk5FTF9NRVNTQUdFKTtcbiAgICB9IC8vIHN3aXRjaCAgICBcbn0gLy8gY2hlY2tIeXBlcnBhcmFtZXRlcnNcbi8vIFJldHVybmVzIGxhYmVscyBwcmVkaWN0ZWQgYnkgdGhlIG1vZGVsIHNwZWNpZmllZFxuZnVuY3Rpb24gcHJlZGljdChtb2RlbCwgZGF0YXNldCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCBfb3V0cHV0O1xuICAgICAgICBsZXQgX3Byb21pc2UgPSBfcHJlZGljdEJ5TFNTVk1JbldlYldvcmtlcihtb2RlbC5rZXJuZWxUeXBlLCBtb2RlbC5rZXJuZWxQYXJhbXMsIG1vZGVsLm5vcm1hbGl6ZWRUcmFpbkRhdGEuY29sdW1ucywgbW9kZWwudHJhaW5MYWJlbHMsIG1vZGVsLm1lYW5zLCBtb2RlbC5zdGREZXZzLCBtb2RlbC5tb2RlbFBhcmFtcywgbW9kZWwubW9kZWxXZWlnaHRzLCBkYXRhc2V0KTtcbiAgICAgICAgeWllbGQgX3Byb21pc2UudGhlbihfcmVzdWx0ID0+IHsgX291dHB1dCA9IF9yZXN1bHQ7IH0sIF9lcnJvciA9PiB7IHRocm93IG5ldyBFcnJvcihgRXJyb3I6ICR7X2Vycm9yfWApOyB9KTtcbiAgICAgICAgcmV0dXJuIF9vdXRwdXQ7XG4gICAgfSk7XG59IC8vIHByZWRpY3Rcbi8vIEV2YWx1YXRlIGFjY3VyYWN5IG9mIHRoZSBtb2RlbFxuZnVuY3Rpb24gZXZhbHVhdGVBY2N1cmFjeShtb2RlbCkge1xuICAgIGxldCBkYXRhID0gbW9kZWwuY29uZnVzaW9uTWF0cml4LmdldFJhd0RhdGEoKTtcbiAgICAvLyBoZXJlLCB0aGUgY2xhc3NpYyBub3RhdGlvbiBpcyB1c2VkIChzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2Vuc2l0aXZpdHlfYW5kX3NwZWNpZmljaXR5KVxuICAgIGxldCBUUCA9IGRhdGFbVFJVRV9QT1NJVElWRV9JTkRFWF07IC8vIHRydWUgcG9zaXRpdmVcbiAgICBsZXQgVE4gPSBkYXRhW1RSVUVfTkVHQVRJVkVfSU5ERVhdOyAvLyB0cnVlIG5lZ2F0aXZlXG4gICAgbGV0IEZQID0gZGF0YVtGQUxTRV9QT1NJVElWRV9JTkRFWF07IC8vIGZhbHNlIHBvc2l0aXZlXG4gICAgbGV0IEZOID0gZGF0YVtGQUxTRV9ORUdBVElWRV9JTkRFWF07IC8vIGZhbHNlIG5lZ2F0aXZlXG4gICAgbGV0IFAgPSBUUCArIEZOOyAvLyBwb3NpdGl2ZVxuICAgIGxldCBOID0gRlAgKyBUTjsgLy8gbmVnYXRpdmVcbiAgICBsZXQgVFBSID0gVFAgLyBQOyAvLyB0cnVlIHBvc2l0aXZlIHJhdGVcbiAgICBsZXQgVE5SID0gVE4gLyBOOyAvLyB0cnVlIG5lZ2F0aXZlIHJhdGVcbiAgICBsZXQgUFBWID0gVFAgLyAoVFAgKyBGUCk7IC8vIHBvc2l0aXZlIHByZWRpY2l0dmUgdmFsdWVcbiAgICBsZXQgTlBWID0gVE4gLyAoVE4gKyBGTik7IC8vIG5lZ2F0aXZlIHByZWRpY2l0dmUgdmFsdWVcbiAgICBsZXQgQUNDID0gKFRQICsgVE4pIC8gKFAgKyBOKTsgLy8gYWNjdXJhY3lcbiAgICBsZXQgQkEgPSAoVFBSICsgVE5SKSAvIDI7IC8vIGJhbGFuY2VkIGFjY3VyYWN5XG4gICAgbW9kZWwuc2Vuc2l0aXZpdHkgPSBUUFI7XG4gICAgbW9kZWwuc3BlY2lmaWNpdHkgPSBUTlI7XG4gICAgbW9kZWwuYmFsYW5jZWRBY2N1cmFjeSA9IEJBO1xuICAgIG1vZGVsLnBvc2l0aXZlUHJlZGljaXR2ZVZhbHVlID0gUFBWO1xuICAgIG1vZGVsLm5lZ2F0aXZlUHJlZGljaXR2ZVZhbHVlID0gTlBWO1xuICAgIG1vZGVsLnRyYWluRXJyb3IgPSAoMSAtIEFDQykgKiAxMDA7IC8vIHRyYWluIGVycm9yLCAlXG59IC8vIGV2YWx1YXRlQWNjdXJhY3lcbi8vIFJldHVybnMgdHJhaW5lZCBMUy1TVk0gbW9kZWwuXG5mdW5jdGlvbiB0cmFpbkFuZEFuYWx5emVNb2RlbChoeXBlcnBhcmFtZXRlcnMsIGRhdGFzZXQsIGxhYmVscykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIC8vIGNoZWNrIGNvcnJlY3RuZXNzIG9mIGh5cGVycGFyYW1ldGVyIGdhbW1hXG4gICAgICAgIGNoZWNrSHlwZXJwYXJhbWV0ZXJzKGh5cGVycGFyYW1ldGVycyk7XG4gICAgICAgIC8vIGNyZWF0ZSBkZWZhdWx0IGtlcm5lbCBwYXJhbXMgYXJyYXlcbiAgICAgICAgY29uc3Qga2VybmVsUGFyYW1zQXJyYXkgPSBbSU5JVF9WQUxVRSwgSU5JVF9WQUxVRV07XG4gICAgICAgIC8vIGZpbGwga2VybmVsUGFyYW1zXG4gICAgICAgIHN3aXRjaCAoaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCkge1xuICAgICAgICAgICAgY2FzZSBMSU5FQVI6IC8vIG5vIGtlcm5lbCBwYXJhbWV0ZXJzIGluIHRoZSBjYXNlIG9mIGxpbmVhciBrZXJuZWxcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUkJGOiAvLyBzaWdtYSBwYXJhbWV0ZXIgaW4gdGhlIGNhc2Ugb2YgUkJGLWtlcm5lbFxuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1JCRl9TSUdNQV9JTkRFWF0gPSBoeXBlcnBhcmFtZXRlcnMuc2lnbWE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBPTFlOT01JQUw6IC8vIHNpZ21hIHBhcmFtZXRlciBpbiB0aGUgY2FzZSBvZiBwb2x5bm9taWFsIGtlcm5lbFxuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1BPTFlOT01JQUxfQ19JTkRFWF0gPSBoeXBlcnBhcmFtZXRlcnMuY1BhcmFtO1xuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1BPTFlOT01JQUxfRF9JTkRFWF0gPSBoeXBlcnBhcmFtZXRlcnMuZFBhcmFtO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTSUdNT0lEOiAvLyBzaWdtYSBwYXJhbWV0ZXIgaW4gdGhlIGNhc2Ugb2Ygc2lnbW9pZCBrZXJuZWxcbiAgICAgICAgICAgICAgICBrZXJuZWxQYXJhbXNBcnJheVtTSUdNT0lEX0tBUFBBX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy5rYXBwYTtcbiAgICAgICAgICAgICAgICBrZXJuZWxQYXJhbXNBcnJheVtTSUdNT0lEX1RIRVRBX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy50aGV0YTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIGluY29ycmVjdCBrZXJuZWwgXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX0tFUk5FTF9NRVNTQUdFKTtcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgICAgIC8vIGNyZWF0ZSBrZXJuZWwgcGFyYW1zIGNvbHVtblxuICAgICAgICBsZXQga2VybmVsUGFyYW1zID0gREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBLRVJORUxfUEFSQU1TLCBrZXJuZWxQYXJhbXNBcnJheSk7XG4gICAgICAgIC8vIGNvbXB1dGUgc2l6ZSBvZiBtb2RlbCBwYXJhbXMgJiBwcmVjb21wdXRlZCB3ZWlndGhzXG4gICAgICAgIGxldCB0cmFpbkNvbHMgPSBkYXRhc2V0LnRvTGlzdCgpO1xuICAgICAgICBsZXQgbW9kZWxQYXJhbXNDb3VudCA9IHRyYWluQ29sc1swXS5sZW5ndGggKyBMU19TVk1fQUREX0NPTlNUO1xuICAgICAgICBsZXQgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQgPSB0cmFpbkNvbHMubGVuZ3RoICsgTFNfU1ZNX0FERF9DT05TVDtcbiAgICAgICAgbGV0IGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQgPSBDT05GVVNJT05fTUFUUl9TSVpFO1xuICAgICAgICAvLyBjYWxsIHdlYmFzc2VtYmx5IHRyYWluaW5nIGZ1bmN0aW9uXG4gICAgICAgIGxldCBvdXRwdXQ7XG4gICAgICAgIGxldCBfcHJvbWlzZSA9IF90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyKGh5cGVycGFyYW1ldGVycy5nYW1tYSwgaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKTtcbiAgICAgICAgeWllbGQgX3Byb21pc2UudGhlbihfcmVzdWx0ID0+IHsgb3V0cHV0ID0gX3Jlc3VsdDsgfSwgX2Vycm9yID0+IHsgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogJHtfZXJyb3J9YCk7IH0pO1xuICAgICAgICAvLyByZW5hbWUgb3V0cHV0IGNvbHVtbnNcbiAgICAgICAgb3V0cHV0W01FQU5TX0lOREVYXS5uYW1lID0gTUVBTjtcbiAgICAgICAgb3V0cHV0W1NURF9ERVZTX0lOREVYXS5uYW1lID0gU1REX0RFVjtcbiAgICAgICAgb3V0cHV0W01PREVMX1BBUkFNU19JTkRFWF0ubmFtZSA9IE1PREVMX1BBUkFNU19OQU1FO1xuICAgICAgICBvdXRwdXRbTU9ERUxfV0VJR0hUU19JTkRFWF0ubmFtZSA9IE1PREVMX1dFSUdIVFNfTkFNRTtcbiAgICAgICAgb3V0cHV0W1BSRURJQ1RFRF9MQUJFTFNfSU5ERVhdLm5hbWUgPSBQUkVESUNURUQ7XG4gICAgICAgIG91dHB1dFtDT1JSRUNUTkVTU19JTkRFWF0ubmFtZSA9IENPUlJFQ1RORVNTO1xuICAgICAgICBvdXRwdXRbQ09ORlVTSU9OX01BVFJJWF9JTkRFWF0ubmFtZSA9IENPTkZVU0lPTl9NQVRSSVhfTkFNRTtcbiAgICAgICAgLy8gY29tcGxldGUgbW9kZWxcbiAgICAgICAgbGV0IG1vZGVsID0ge1xuICAgICAgICAgICAgdHJhaW5HYW1tYTogaHlwZXJwYXJhbWV0ZXJzLmdhbW1hLFxuICAgICAgICAgICAga2VybmVsVHlwZTogaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCxcbiAgICAgICAgICAgIGtlcm5lbFBhcmFtczoga2VybmVsUGFyYW1zLFxuICAgICAgICAgICAgdHJhaW5MYWJlbHM6IGxhYmVscyxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRUcmFpbkRhdGE6IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhvdXRwdXRbTk9STUFMSVpFRF9EQVRBX0lOREVYXSksXG4gICAgICAgICAgICBtZWFuczogb3V0cHV0W01FQU5TX0lOREVYXSxcbiAgICAgICAgICAgIHN0ZERldnM6IG91dHB1dFtTVERfREVWU19JTkRFWF0sXG4gICAgICAgICAgICBtb2RlbFBhcmFtczogb3V0cHV0W01PREVMX1BBUkFNU19JTkRFWF0sXG4gICAgICAgICAgICBtb2RlbFdlaWdodHM6IG91dHB1dFtNT0RFTF9XRUlHSFRTX0lOREVYXSxcbiAgICAgICAgICAgIHByZWRpY3RlZExhYmVsczogb3V0cHV0W1BSRURJQ1RFRF9MQUJFTFNfSU5ERVhdLFxuICAgICAgICAgICAgY29ycmVjdG5lc3M6IG91dHB1dFtDT1JSRUNUTkVTU19JTkRFWF0sXG4gICAgICAgICAgICBjb25mdXNpb25NYXRyaXg6IG91dHB1dFtDT05GVVNJT05fTUFUUklYX0lOREVYXSxcbiAgICAgICAgICAgIHRyYWluRXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGZlYXR1cmVzQ291bnQ6IHRyYWluQ29scy5sZW5ndGgsXG4gICAgICAgICAgICB0cmFpblNhbXBsZXNDb3VudDogdHJhaW5Db2xzWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICBldmFsdWF0ZUFjY3VyYWN5KG1vZGVsKTtcbiAgICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH0pO1xufSAvLyB0cmFpbkFuZEFuYWx5emVNb2RlbFxuLy8gV3JhcHBlciBmb3IgY29tYmluaW5nIHRoZSBmdW5jdGlvbiBcInRyYWluQW5kQW5hbHl6ZU1vZGVsXCIgd2l0aCBEYXRhZ3JvayBwcmVkaWNpdHZlIHRvb2xzXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhaW5lZE1vZGVsKGh5cGVycGFyYW1ldGVycywgZGYsIHByZWRpY3RfY29sdW1uKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IGNvbHVtbnMgPSBkZi5jb2x1bW5zO1xuICAgICAgICBsZXQgbGFiZWxzID0gY29sdW1ucy5ieU5hbWUocHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBjb2x1bW5zLnJlbW92ZShwcmVkaWN0X2NvbHVtbik7XG4gICAgICAgIHJldHVybiB5aWVsZCB0cmFpbkFuZEFuYWx5emVNb2RlbChoeXBlcnBhcmFtZXRlcnMsIGNvbHVtbnMsIGxhYmVscyk7XG4gICAgfSk7XG59XG4vLyBSZXR1cm5zIGRhdGFmcmFtZSB3aXRoIHNob3J0IGluZm8gYWJvdXQgbW9kZWxcbmZ1bmN0aW9uIGdldE1vZGVsSW5mbyhtb2RlbCkge1xuICAgIGxldCBrZXJuZWxQYXJhbXMgPSBtb2RlbC5rZXJuZWxQYXJhbXMuZ2V0UmF3RGF0YSgpO1xuICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEdBTU1BLCBbbW9kZWwudHJhaW5HYW1tYV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoS0VSTkVMLCBbS0VSTkVMX1RZUEVfVE9fTkFNRV9NQVBbbW9kZWwua2VybmVsVHlwZV1dKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBLRVJORUxfUEFSQU1fMSwgW2tlcm5lbFBhcmFtc1swXV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEtFUk5FTF9QQVJBTV8yLCBba2VybmVsUGFyYW1zWzFdXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgRkVBVFVSRVNfQ09VTlRfTkFNRSwgW21vZGVsLmZlYXR1cmVzQ291bnRdKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBUUkFJTl9TQU1QTEVTX0NPVU5UX05BTUUsIFttb2RlbC50cmFpblNhbXBsZXNDb3VudF0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFRSQUlOX0VSUk9SLCBbbW9kZWwudHJhaW5FcnJvcl0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEJBTEFOQ0VEX0FDQ1VSQUNZLCBbbW9kZWwuYmFsYW5jZWRBY2N1cmFjeV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFNFTlNJVElWSVRZLCBbbW9kZWwuc2Vuc2l0aXZpdHldKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBTUEVDSUZJQ0lUWSwgW21vZGVsLnNwZWNpZmljaXR5XSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgUE9TSVRJVkVfUFJFRElDVElWRV9WQUxVRSwgW21vZGVsLnBvc2l0aXZlUHJlZGljaXR2ZVZhbHVlXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgTkVHQVRJVkVfUFJFRElDVElWRV9WQUxVRSwgW21vZGVsLm5lZ2F0aXZlUHJlZGljaXR2ZVZhbHVlXSlcbiAgICBdKTtcbn1cbi8vIEdldCBkYXRhZnJhbWUgd2l0aCBjb25mdXNpb24gbWF0cml4XG5mdW5jdGlvbiBnZXRDb25mdXNpb25NYXRyaXhERihtb2RlbCkge1xuICAgIGxldCBkYXRhID0gbW9kZWwuY29uZnVzaW9uTWF0cml4LmdldFJhd0RhdGEoKTtcbiAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtcbiAgICAgICAgREcuQ29sdW1uLmZyb21TdHJpbmdzKCcnLCBbUE9TSVRJVkVfTkFNRSwgTkVHQVRJVkVfTkFNRV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2ludCcsIFBSRURJQ1RFRF9QT1NJVElWRV9OQU1FLCBbZGF0YVtUUlVFX1BPU0lUSVZFX0lOREVYXSwgZGF0YVtGQUxTRV9QT1NJVElWRV9JTkRFWF1dKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdpbnQnLCBQUkVESUNURURfTkVHQVRJVkVfTkFNRSwgW2RhdGFbRkFMU0VfTkVHQVRJVkVfSU5ERVhdLCBkYXRhW1RSVUVfTkVHQVRJVkVfSU5ERVhdXSlcbiAgICBdKTtcbn1cbi8vIFNob3cgdHJhaW5pbmcgcmVwb3J0XG5leHBvcnQgZnVuY3Rpb24gc2hvd1RyYWluUmVwb3J0KGRmLCBtb2RlbCkge1xuICAgIGRmLm5hbWUgPSBNTF9SRVBPUlQ7XG4gICAgZGYuY29sdW1ucy5hZGQobW9kZWwudHJhaW5MYWJlbHMpO1xuICAgIGRmLmNvbHVtbnMuYWRkKG1vZGVsLnByZWRpY3RlZExhYmVscyk7XG4gICAgZGYuY29sdW1ucy5hZGQobW9kZWwuY29ycmVjdG5lc3MpO1xuICAgIGxldCBkZlZpZXcgPSBncm9rLnNoZWxsLmFkZFRhYmxlVmlldyhkZik7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuZm9ybShnZXRNb2RlbEluZm8obW9kZWwpKSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHsgdGl0bGU6IE1MX1JFUE9SVF9QUkVESUNURURfTEFCRUxTLFxuICAgICAgICBjb2xvcjogbW9kZWwucHJlZGljdGVkTGFiZWxzLm5hbWVcbiAgICB9KSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHsgdGl0bGU6IE1MX1JFUE9SVF9UUkFJTl9MQUJFTFMsXG4gICAgICAgIGNvbG9yOiBtb2RlbC50cmFpbkxhYmVscy5uYW1lXG4gICAgfSkpO1xuICAgIGRmVmlldy5hZGRWaWV3ZXIoREcuVmlld2VyLmdyaWQoZ2V0Q29uZnVzaW9uTWF0cml4REYobW9kZWwpKSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHsgdGl0bGU6IE1MX1JFUE9SVF9DT1JSRUNUTkVTUyxcbiAgICAgICAgY29sb3I6IG1vZGVsLmNvcnJlY3RuZXNzLm5hbWVcbiAgICB9KSk7XG59IC8vIHNob3dUcmFpblJlcG9ydFxuLy8gUmV0dXJucyB0cmFpbmVkIG1vZGVsIHBhY2tlZCBpbnRvIFVJbnQ4QXJyYXlcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrZWRNb2RlbChtb2RlbCkge1xuICAgIC8vIGdldCBwcmluY2lwYWwgZGF0YVxuICAgIGxldCBkYXRhQ29scyA9IG1vZGVsLm5vcm1hbGl6ZWRUcmFpbkRhdGEuY29sdW1ucztcbiAgICBsZXQgc2FtcGxlc0NvdW50ID0gbW9kZWwudHJhaW5TYW1wbGVzQ291bnQ7XG4gICAgbGV0IGZlYXR1cmVzQ291bnQgPSBtb2RlbC5mZWF0dXJlc0NvdW50O1xuICAgIC8qbGV0IGJ1ZmZlclNpemUgPSBCWVRFUyAqICg3ICsgZmVhdHVyZXNDb3VudCAqIHNhbXBsZXNDb3VudFxuICAgICAgKyAzICogZmVhdHVyZXNDb3VudCArIDIgKiBzYW1wbGVzQ291bnQpOyovXG4gICAgLy8gY29tcHV0ZSBzaXplIG9mIHBhY2tlZCBtb2RlbFxuICAgIGxldCBidWZmZXJTaXplID0gQllURVMgKiAoSU5UU19DT1VOVCArIEtFUl9QQVJBTVNfQ09VTlQgK1xuICAgICAgICBzYW1wbGVzQ291bnQgKyBmZWF0dXJlc0NvdW50ICsgZmVhdHVyZXNDb3VudCArIHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1RcbiAgICAgICAgKyBmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCArIGZlYXR1cmVzQ291bnQgKiBzYW1wbGVzQ291bnQpO1xuICAgIC8vIHBhY2tlZCBtb2RlbFxuICAgIGxldCByZXN1bHQgPSBuZXcgVWludDhBcnJheShidWZmZXJTaXplKTtcbiAgICBsZXQgYnVmZmVyID0gcmVzdWx0LmJ1ZmZlcjtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAvLyBwYWNrIGtlcm5lbCB0eXBlIGFuZCBzaXplc1xuICAgIGxldCBpbnRzID0gbmV3IEludDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIElOVFNfQ09VTlQpO1xuICAgIGludHNbTU9ERUxfS0VSTkVMX0lOREVYXSA9IG1vZGVsLmtlcm5lbFR5cGU7XG4gICAgaW50c1tTQU1QTEVTX0NPVU5UX0lOREVYXSA9IHNhbXBsZXNDb3VudDtcbiAgICBpbnRzW0ZFQVRVUkVTX0NPVU5UX0lOREVYXSA9IGZlYXR1cmVzQ291bnQ7XG4gICAgb2Zmc2V0ICs9IElOVFNfQ09VTlQgKiBCWVRFUztcbiAgICAvLyBwYWNrIGtlcm5lbCBwYXJhbWV0ZXJzXG4gICAgbGV0IGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIEtFUl9QQVJBTVNfQ09VTlQpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwua2VybmVsUGFyYW1zLmdldFJhd0RhdGEoKSk7XG4gICAgb2Zmc2V0ICs9IEtFUl9QQVJBTVNfQ09VTlQgKiBCWVRFUztcbiAgICAvLyBwYWNrIHBhY2sgbGFiZWxzIG9mIHRyYWluaW5nIGRhdGFcbiAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBzYW1wbGVzQ291bnQpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwudHJhaW5MYWJlbHMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gc2FtcGxlc0NvdW50ICogQllURVM7XG4gICAgLy8gcGFjayBtZWFuIHZhbHVlcyBvZiB0cmFpbmluZyBkYXRhXG4gICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgZmVhdHVyZXNDb3VudCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC5tZWFucy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgLy8gcGFjayBzdGFuZGFyZCBkZXZpYXRpb25zIG9mIHRyYWluaW5nIGRhdGFcbiAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLnN0ZERldnMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gZmVhdHVyZXNDb3VudCAqIEJZVEVTO1xuICAgIC8vIHBhY2sgbW9kZWwgcGFyYW10ZXJzXG4gICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC5tb2RlbFBhcmFtcy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSAoc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkgKiBCWVRFUztcbiAgICAvLyBwYWNrIG1vZGVsJ3MgcHJlY29tcHV0ZWQgd2VpZ2h0c1xuICAgIGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQgKyBMU19TVk1fQUREX0NPTlNUKTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLm1vZGVsV2VpZ2h0cy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSAoZmVhdHVyZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gcGFjayB0cmFpbmluZyBkYXRhc2V0XG4gICAgZm9yIChjb25zdCBjb2wgb2YgZGF0YUNvbHMpIHtcbiAgICAgICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgZmVhdHVyZXNDb3VudCk7XG4gICAgICAgIGZsb2F0cy5zZXQoY29sLmdldFJhd0RhdGEoKSk7XG4gICAgICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59IC8vIGdldFBhY2tlZE1vZGVsXG4vLyBSZXR1cm5zIHVucGFja2VkIG1vZGVsXG5mdW5jdGlvbiBnZXRVbnBhY2tlZE1vZGVsKHBhY2tlZE1vZGVsKSB7XG4gICAgbGV0IG1vZGVsQnl0ZXMgPSBwYWNrZWRNb2RlbC5idWZmZXI7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgLy8gZXh0cmFjdCBrZXJuZWwgdHlwZSBhbmQgc2l6ZXNcbiAgICBsZXQgaGVhZGVyID0gbmV3IEludDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBJTlRTX0NPVU5UKTtcbiAgICBvZmZzZXQgKz0gSU5UU19DT1VOVCAqIEJZVEVTO1xuICAgIGxldCBzYW1wbGVzQ291bnQgPSBoZWFkZXJbU0FNUExFU19DT1VOVF9JTkRFWF07XG4gICAgbGV0IGZlYXR1cmVzQ291bnQgPSBoZWFkZXJbRkVBVFVSRVNfQ09VTlRfSU5ERVhdO1xuICAgIC8vIGV4dHJhY3QgcGFyYW1ldGVycyBvZiBrZXJuZWxcbiAgICBjb25zdCBrZXJuZWxQYXJhbXMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShLRVJORUxfUEFSQU1TLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgS0VSX1BBUkFNU19DT1VOVCkpO1xuICAgIG9mZnNldCArPSBLRVJfUEFSQU1TX0NPVU5UICogQllURVM7XG4gICAgLy8gZXh0cmFjdCB0cmFpbmluZyBsYWJlbHNcbiAgICBjb25zdCB0cmFpbkxhYmVscyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KExBQkVMUywgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIHNhbXBsZXNDb3VudCkpO1xuICAgIG9mZnNldCArPSBzYW1wbGVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IG1lYW4gdmFsdWVzIG9mIHRyYWluaW5nIGRhdGFcbiAgICBjb25zdCBtZWFucyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KE1FQU4sIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KSk7XG4gICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IHN0YW5kYXJkIGRldmlhdGlvbnMgb2YgdHJhaW5pbmcgZGF0YVxuICAgIGNvbnN0IHN0ZERldnMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShTVERfREVWLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgZmVhdHVyZXNDb3VudCkpO1xuICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgLy8gZXh0cmFjdCBwYXJhbWV0ZXJzIG9mIG1vZGVsXG4gICAgY29uc3QgbW9kZWxQYXJhbXMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShNT0RFTF9QQVJBTVNfTkFNRSwgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpKTtcbiAgICBvZmZzZXQgKz0gKHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gZXh0cmFjdCBtb2RlbCdzIHByZWNvbXB1dGVkIHdlaWdodHNcbiAgICBjb25zdCBtb2RlbFdlaWdodHMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShNT0RFTF9XRUlHSFRTX05BTUUsIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkpO1xuICAgIG9mZnNldCArPSAoZmVhdHVyZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gZXh0cmFjdCB0cmFpbmluZyBkYXRhIGNvbHVtbnNcbiAgICBsZXQgZGF0YUNvbHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNhbXBsZXNDb3VudDsgaSsrKSB7XG4gICAgICAgIGRhdGFDb2xzLnB1c2goREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoaS50b1N0cmluZygpLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgZmVhdHVyZXNDb3VudCkpKTtcbiAgICAgICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZFRyYWluRGF0YSA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhkYXRhQ29scyk7XG4gICAgbGV0IG1vZGVsID0geyBrZXJuZWxUeXBlOiBoZWFkZXJbTU9ERUxfS0VSTkVMX0lOREVYXSxcbiAgICAgICAga2VybmVsUGFyYW1zOiBrZXJuZWxQYXJhbXMsXG4gICAgICAgIHRyYWluTGFiZWxzOiB0cmFpbkxhYmVscyxcbiAgICAgICAgbWVhbnM6IG1lYW5zLFxuICAgICAgICBzdGREZXZzOiBzdGREZXZzLFxuICAgICAgICBtb2RlbFBhcmFtczogbW9kZWxQYXJhbXMsXG4gICAgICAgIG1vZGVsV2VpZ2h0czogbW9kZWxXZWlnaHRzLFxuICAgICAgICBub3JtYWxpemVkVHJhaW5EYXRhOiBub3JtYWxpemVkVHJhaW5EYXRhXG4gICAgfTtcbiAgICByZXR1cm4gbW9kZWw7XG59IC8vIGdldFVucGFja2VkTW9kZWxcbi8vIFdyYXBwZXIgZm9yIGNvbWJpbmluZyB0aGUgZnVuY3Rpb24gXCJwcmVkaWN0XCIgd2l0aCBEYXRhZ3JvayBwcmVkaWNpdHZlIHRvb2xzXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJlZGljdGlvbihkZiwgcGFja2VkTW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgbW9kZWwgPSBnZXRVbnBhY2tlZE1vZGVsKG5ldyBVaW50OEFycmF5KHBhY2tlZE1vZGVsKSk7XG4gICAgICAgIGxldCByZXMgPSB5aWVsZCBwcmVkaWN0KG1vZGVsLCBkZi5jb2x1bW5zKTtcbiAgICAgICAgcmVzLm5hbWUgPSBQUkVESUNUSU9OO1xuICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtyZXNdKTtcbiAgICB9KTtcbn0gLy8gZ2V0UHJlZGljdGlvblxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG4vKiBEbyBub3QgY2hhbmdlIHRoZXNlIGltcG9ydCBsaW5lcyB0byBtYXRjaCBleHRlcm5hbCBtb2R1bGVzIGluIHdlYnBhY2sgY29uZmlndXJhdGlvbiAqL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IERlbW9TY3JpcHQgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3R1dG9yaWFscy9zcmMvZGVtby1zY3JpcHQnO1xuaW1wb3J0IHsgX2luaXRFREFBUEkgfSBmcm9tICcuLi93YXNtL0VEQUFQSSc7XG5pbXBvcnQgeyBjb21wdXRlUENBLCBjb21wdXRlUExTIH0gZnJvbSAnLi9FREF0b29scyc7XG5pbXBvcnQgeyByZW5hbWVQQ0Fjb2x1bW5zLCBhZGRQTFN2aXN1YWxpemF0aW9uIH0gZnJvbSAnLi9FREF1aSc7XG5pbXBvcnQgeyBkZW1vUExTIH0gZnJvbSAnLi9kZW1vcyc7XG5pbXBvcnQgeyBjYXJzRGF0YWZyYW1lLCB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uIH0gZnJvbSAnLi9kYXRhR2VuZXJhdG9ycyc7XG5pbXBvcnQgeyBMSU5FQVIsIFJCRiwgUE9MWU5PTUlBTCwgU0lHTU9JRCwgZ2V0VHJhaW5lZE1vZGVsLCBnZXRQcmVkaWN0aW9uLCBzaG93VHJhaW5SZXBvcnQsIGdldFBhY2tlZE1vZGVsIH0gZnJvbSAnLi9zdm0nO1xuZXhwb3J0IGNvbnN0IF9wYWNrYWdlID0gbmV3IERHLlBhY2thZ2UoKTtcbi8vbmFtZTogaW5mb1xuZXhwb3J0IGZ1bmN0aW9uIGluZm8oKSB7XG4gICAgZ3Jvay5zaGVsbC5pbmZvKF9wYWNrYWdlLndlYlJvb3QpO1xufVxuLy90YWdzOiBpbml0XG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfaW5pdEVEQUFQSSgpO1xuICAgIH0pO1xufVxuLy90b3AtbWVudTogVG9vbHMgfCBEYXRhIFNjaWVuY2UgfCBQQ0Fcbi8vbmFtZTogUENBXG4vL2Rlc2NyaXB0aW9uOiBQcmluY2lwYWwgY29tcG9uZW50IGFuYWx5c2lzIChQQ0EpLlxuLy9pbnB1dDogZGF0YWZyYW1lIHRhYmxlXG4vL2lucHV0OiBjb2x1bW5fbGlzdCBmZWF0dXJlc1xuLy9pbnB1dDogaW50IGNvbXBvbmVudHMgPSAyXG4vL2lucHV0OiBib29sIGNlbnRlciA9IHRydWVcbi8vaW5wdXQ6IGJvb2wgc2NhbGUgPSB0cnVlXG4vL291dHB1dDogZGF0YWZyYW1lIHJlc3VsdCB7YWN0aW9uOmpvaW4odGFibGUpfVxuZXhwb3J0IGZ1bmN0aW9uIFBDQSh0YWJsZSwgZmVhdHVyZXMsIGNvbXBvbmVudHMsIGNlbnRlciwgc2NhbGUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4gcmVuYW1lUENBY29sdW1ucyh5aWVsZCBjb21wdXRlUENBKHRhYmxlLCBmZWF0dXJlcywgY29tcG9uZW50cywgY2VudGVyLCBzY2FsZSkpO1xuICAgIH0pO1xufVxuLy90b3AtbWVudTogVG9vbHMgfCBEYXRhIFNjaWVuY2UgfCBQTFNcbi8vbmFtZTogUExTXG4vL2Rlc2NyaXB0aW9uOiBQYXJ0aWFsIGxlYXN0IHNxdWFyZSByZWdyZXNzaW9uIChQTFMpLlxuLy9pbnB1dDogZGF0YWZyYW1lIHRhYmxlXG4vL2lucHV0OiBjb2x1bW5fbGlzdCBmZWF0dXJlc1xuLy9pbnB1dDogY29sdW1uIHByZWRpY3Rcbi8vaW5wdXQ6IGludCBjb21wb25lbnRzID0gM1xuZXhwb3J0IGZ1bmN0aW9uIFBMUyh0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBwbHNSZXN1bHRzID0geWllbGQgY29tcHV0ZVBMUyh0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHMpO1xuICAgICAgICBhZGRQTFN2aXN1YWxpemF0aW9uKHRhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgcGxzUmVzdWx0cyk7XG4gICAgfSk7XG59XG4vL25hbWU6IE1WQSBkZW1vXG4vL2Rlc2NyaXB0aW9uOiBNdWx0aXZhcmlhdGUgYW5hbHlzaXMgKFBMUykgZGVtby5cbi8vbWV0YS5kZW1vUGF0aDogRGF0YSBhbmFseXNpcyB8IE11bHRpdmFyaWF0ZSBhbmFseXNpc1xuZXhwb3J0IGZ1bmN0aW9uIGRlbW9TY3JpcHQoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZGVtb1NjcmlwdCA9IG5ldyBEZW1vU2NyaXB0KCdNdWx0aXZhcmlhdGUgYW5hbHlzaXMnLCAnUHJvdmlkZXMgcGFydGlhbCBsZWFzdCBzcWF1cmUgcmVncmVzc2lvbiBhbmFseXNpcyBvZiB0aGUgZ2l2ZW4gZGF0YS4nKTtcbiAgICAgICAgY29uc3QgY2FycyA9IGNhcnNEYXRhZnJhbWUoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IDM7XG4gICAgICAgIGNvbnN0IHByZWRpY3QgPSBjYXJzLmNvbHVtbnMuYnlOYW1lKCdwcmljZScpO1xuICAgICAgICBjb25zdCBmZWF0dXJlcyA9IGNhcnMuY29sdW1ucy5yZW1vdmUoJ3ByaWNlJykucmVtb3ZlKCdtb2RlbCcpO1xuICAgICAgICBjb25zdCBwbHNPdXRwdXQgPSB5aWVsZCBjb21wdXRlUExTKGNhcnMsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3Qgc291cmNlQ2FycyA9IGNhcnNEYXRhZnJhbWUoKTtcbiAgICAgICAgZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoc291cmNlQ2Fycyk7XG4gICAgICAgIHNvdXJjZUNhcnMubmFtZSA9ICdDYXJzJztcbiAgICAgICAgbGV0IHZpZXcgPSBncm9rLnNoZWxsLmdldFRhYmxlVmlldyhzb3VyY2VDYXJzLm5hbWUpO1xuICAgICAgICB5aWVsZCBkZW1vU2NyaXB0XG4gICAgICAgICAgICAuc3RlcCgnUnVuJywgKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyB9KSwgeyBkZXNjcmlwdGlvbjogJ1Rlc3QgZGF0YWZyYW1lIGlzIGxvYWRlZCwgYW5kIG11bHRpdmFyaWF0ZSBhbmFseXNpcyBpcyBwZXJmb3JtZWQuJywgZGVsYXk6IDAgfSlcbiAgICAgICAgICAgIC5zdGVwKCdTdHVkeScsICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsgYWRkUExTdmlzdWFsaXphdGlvbihzb3VyY2VDYXJzLCBmZWF0dXJlcywgcHJlZGljdCwgcGxzT3V0cHV0KTsgfSksIHsgZGVzY3JpcHRpb246ICdJbnZlc3RpZ2F0ZSByZXN1bHRzLicsIGRlbGF5OiA0MDAwIH0pXG4gICAgICAgICAgICAuc3RlcCgnVHJ5JywgKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0geyBpdGVtczogMTAwMDAsIGZlYXR1cmVzOiAxMDAsIGNvbXBvbmVudHM6IDMgfTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zUHJvcCA9IERHLlByb3BlcnR5LmpzKCdpdGVtcycsIERHLlRZUEUuSU5UKTtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVzUHJvcCA9IERHLlByb3BlcnR5LmpzKCdmZWF0dXJlcycsIERHLlRZUEUuSU5UKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHNQcm9wID0gREcuUHJvcGVydHkuanMoJ2NvbXBvbmVudHMnLCBERy5UWVBFLklOVCk7XG4gICAgICAgICAgICB1aS5kaWFsb2coeyB0aXRsZTogJ1NldCcgfSlcbiAgICAgICAgICAgICAgICAuYWRkKHVpLmlucHV0LmZvcm0ocGFyYW1zLCBbaXRlbXNQcm9wLCBmZWF0dXJlc1Byb3AsIGNvbXBvbmVudHNQcm9wXSkpXG4gICAgICAgICAgICAgICAgLmFkZEJ1dHRvbignUnVuJywgKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyByZXR1cm4geWllbGQgZGVtb1BMUyhwYXJhbXMuaXRlbXMsIHBhcmFtcy5mZWF0dXJlcywgcGFyYW1zLmNvbXBvbmVudHMpOyB9KSlcbiAgICAgICAgICAgICAgICAuc2hvdygpO1xuICAgICAgICB9KSwgeyBkZXNjcmlwdGlvbjogJ1JhbmRvbSB3YWxrIHRlc3QgZGF0YWZyYW1lIG9mIHRoZSBnaXZlbiBzaXplIGlzIGdlbmVyYXRlZCwgYW5kIGl0cyBtdWx0aXZhcmlhdGUgYW5hbHlzaXMgaXMgcGVyZm9ybWVkLicgfSlcbiAgICAgICAgICAgIC5zdGFydCgpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBHZW5lcmF0ZSBsaW5lYXIgc2VwYXJhYmxlIGRhdGFzZXRcbi8vZGVzY3JpcHRpb246IEdlbmVyYXRlcyBsaW5lYXIgc2VwYXJibGUgZGF0YXNldCBmb3IgdGVzdGluZyBiaW5hcnkgY2xhc3NpZmljYXRvcnMuXG4vL2lucHV0OiBzdHJpbmcgbmFtZSA9ICdEYXRhJyB7Y2FwdGlvbjogbmFtZTsgY2F0ZWdvcnk6IERhdGFzZXR9XG4vL2lucHV0OiBpbnQgc2FtcGxlc0NvdW50ID0gMTAwMCB7Y2FwdGlvbjogc2FtcGxlczsgY2F0ZWdvcnk6IFNpemV9XG4vL2lucHV0OiBpbnQgZmVhdHVyZXNDb3VudCA9IDIge2NhcHRpb246IGZlYXR1cmVzOyBjYXRlZ29yeTogU2l6ZX1cbi8vaW5wdXQ6IGRvdWJsZSBtaW4gPSAtMzkge2NhcHRpb246IG1pbjsgY2F0ZWdvcnk6IFJhbmdlfVxuLy9pbnB1dDogZG91YmxlIG1heCA9IDE3MyB7Y2FwdGlvbjogbWF4OyBjYXRlZ29yeTogUmFuZ2V9XG4vL2lucHV0OiBkb3VibGUgdmlvbGF0b3JzUGVyY2VudGFnZSA9IDUge2NhcHRpb246IHZpb2xhdG9yczsgdW5pdHM6ICU7IGNhdGVnb3J5OiBEYXRhc2V0fVxuLy9vdXRwdXQ6IGRhdGFmcmFtZSBkZlxuZXhwb3J0IGZ1bmN0aW9uIHRlc3REYXRhTGluZWFyU2VwYXJhYmxlKG5hbWUsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgdGVzdERhdGFGb3JCaW5hcnlDbGFzc2lmaWNhdGlvbihMSU5FQVIsIFswLCAwXSwgbmFtZSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgfSk7XG59XG4vL25hbWU6IEdlbmVyYXRlIGxpbmVhciBub24tc2VwYXJhYmxlIGRhdGFzZXRcbi8vZGVzY3JpcHRpb246IEdlbmVyYXRlcyBsaW5lYXIgbm9uLXNlcGFyYmxlIGRhdGFzZXQgZm9yIHRlc3RpbmcgYmluYXJ5IGNsYXNzaWZpY2F0b3JzLlxuLy9pbnB1dDogc3RyaW5nIG5hbWUgPSAnRGF0YScge2NhcHRpb246IG5hbWU7IGNhdGVnb3J5OiBEYXRhc2V0fVxuLy9pbnB1dDogZG91YmxlIHNpZ21hID0gOTAgIHtjYXB0aW9uOiBzaWdtYTsgY2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc30gW1JCRi1rZXJuZWwgcGFyYW1hdGVyXVxuLy9pbnB1dDogaW50IHNhbXBsZXNDb3VudCA9IDEwMDAge2NhcHRpb246IHNhbXBsZXM7IGNhdGVnb3J5OiBTaXplfVxuLy9pbnB1dDogaW50IGZlYXR1cmVzQ291bnQgPSAyIHtjYXB0aW9uOiBmZWF0dXJlczsgY2F0ZWdvcnk6IFNpemV9XG4vL2lucHV0OiBkb3VibGUgbWluID0gLTM5IHtjYXB0aW9uOiBtaW47IGNhdGVnb3J5OiBSYW5nZX1cbi8vaW5wdXQ6IGRvdWJsZSBtYXggPSAxNzMge2NhcHRpb246IG1heDsgY2F0ZWdvcnk6IFJhbmdlfVxuLy9pbnB1dDogZG91YmxlIHZpb2xhdG9yc1BlcmNlbnRhZ2UgPSA1IHtjYXB0aW9uOiB2aW9sYXRvcnM7IHVuaXRzOiAlOyBjYXRlZ29yeTogRGF0YXNldH1cbi8vb3V0cHV0OiBkYXRhZnJhbWUgZGZcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0RGF0YUxpbmVhck5vblNlcGFyYWJsZShuYW1lLCBzaWdtYSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uKFJCRiwgW3NpZ21hLCAwXSwgbmFtZSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgfSk7XG59XG4vL25hbWU6IHRyYWluTGluZWFyS2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBsaW5lYXIga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkb3VibGUgZ2FtbWEgPSAxLjAge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBib29sIHRvU2hvd1JlcG9ydCA9IGZhbHNlIHtjYXB0aW9uOiB0byBzaG93IHJlcG9ydDsgY2F0ZWdvcnk6IFJlcG9ydH1cbi8vb3V0cHV0OiBkeW5hbWljIG1vZGVsXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5MaW5lYXJLZXJuZWxTVk0oZGYsIHByZWRpY3RfY29sdW1uLCBnYW1tYSwgdG9TaG93UmVwb3J0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdHJhaW5lZE1vZGVsID0geWllbGQgZ2V0VHJhaW5lZE1vZGVsKHsgZ2FtbWE6IGdhbW1hLCBrZXJuZWw6IExJTkVBUiB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogYXBwbHlMaW5lYXJLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IGxpbmVhciBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMaW5lYXJLZXJuZWxTVk0oZGYsIG1vZGVsKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHlpZWxkIGdldFByZWRpY3Rpb24oZGYsIG1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogdHJhaW5SQkZrZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IFJCRi1rZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiB0cmFpblxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vaW5wdXQ6IGRvdWJsZSBnYW1tYSA9IDEuMCB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGRvdWJsZSBzaWdtYSA9IDEuNSB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGJvb2wgdG9TaG93UmVwb3J0ID0gZmFsc2Uge2NhcHRpb246IHRvIHNob3cgcmVwb3J0OyBjYXRlZ29yeTogUmVwb3J0fVxuLy9vdXRwdXQ6IGR5bmFtaWMgbW9kZWxcbmV4cG9ydCBmdW5jdGlvbiB0cmFpblJCRmtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4sIGdhbW1hLCBzaWdtYSwgdG9TaG93UmVwb3J0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdHJhaW5lZE1vZGVsID0geWllbGQgZ2V0VHJhaW5lZE1vZGVsKHsgZ2FtbWE6IGdhbW1hLCBrZXJuZWw6IFJCRiwgc2lnbWE6IHNpZ21hIH0sIGRmLCBwcmVkaWN0X2NvbHVtbik7XG4gICAgICAgIGlmICh0b1Nob3dSZXBvcnQpXG4gICAgICAgICAgICBzaG93VHJhaW5SZXBvcnQoZGYsIHRyYWluZWRNb2RlbCk7XG4gICAgICAgIHJldHVybiBnZXRQYWNrZWRNb2RlbCh0cmFpbmVkTW9kZWwpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBhcHBseVJCRmtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogUkJGLWtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IGFwcGx5XG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IGR5bmFtaWMgbW9kZWxcbi8vb3V0cHV0OiBkYXRhZnJhbWUgdGFibGVcbmV4cG9ydCBmdW5jdGlvbiBhcHBseVJCRmtlcm5lbFNWTShkZiwgbW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgZ2V0UHJlZGljdGlvbihkZiwgbW9kZWwpO1xuICAgIH0pO1xufVxuLy9uYW1lOiB0cmFpblBvbHlub21pYWxLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IHBvbHlub21pYWwga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkb3VibGUgZ2FtbWEgPSAxLjAge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgYyA9IDEge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgZCA9IDIge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBib29sIHRvU2hvd1JlcG9ydCA9IGZhbHNlIHtjYXB0aW9uOiB0byBzaG93IHJlcG9ydDsgY2F0ZWdvcnk6IFJlcG9ydH1cbi8vb3V0cHV0OiBkeW5hbWljIG1vZGVsXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNKGRmLCBwcmVkaWN0X2NvbHVtbiwgZ2FtbWEsIGMsIGQsIHRvU2hvd1JlcG9ydCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBQT0xZTk9NSUFMLCBjUGFyYW06IGMsIGRQYXJhbTogZCB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn0gLy8gdHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNXG4vL25hbWU6IGFwcGx5UG9seW5vbWlhbEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogcG9seW5vbWlhbCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlQb2x5bm9taWFsS2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4vL25hbWU6IHRyYWluU2lnbW9pZEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogc2lnbW9pZCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiB0cmFpblxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vaW5wdXQ6IGRvdWJsZSBnYW1tYSA9IDEuMCB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGRvdWJsZSBrYXBwYSA9IDEge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgdGhldGEgPSAxIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogYm9vbCB0b1Nob3dSZXBvcnQgPSBmYWxzZSB7Y2FwdGlvbjogdG8gc2hvdyByZXBvcnQ7IGNhdGVnb3J5OiBSZXBvcnR9XG4vL291dHB1dDogZHluYW1pYyBtb2RlbFxuZXhwb3J0IGZ1bmN0aW9uIHRyYWluU2lnbW9pZEtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4sIGdhbW1hLCBrYXBwYSwgdGhldGEsIHRvU2hvd1JlcG9ydCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBTSUdNT0lELCBrYXBwYToga2FwcGEsIHRoZXRhOiB0aGV0YSB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn0gLy8gdHJhaW5TaWdtb2lkS2VybmVsU1ZNXG4vL25hbWU6IGFwcGx5U2lnbW9pZEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogc2lnbW9pZCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlTaWdtb2lkS2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4iXSwibmFtZXMiOlsiX193ZWJwYWNrX3JlcXVpcmVfXyIsImV4cG9ydHMiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImNodW5rSWQiLCJnIiwiZ2xvYmFsVGhpcyIsInRoaXMiLCJGdW5jdGlvbiIsImUiLCJ3aW5kb3ciLCJvYmoiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJzY3JpcHRVcmwiLCJpbXBvcnRTY3JpcHRzIiwibG9jYXRpb24iLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsZW5ndGgiLCJpIiwiRXJyb3IiLCJyZXBsYWNlIiwicCIsImIiLCJiYXNlVVJJIiwic2VsZiIsImhyZWYiLCJncm9rIiwidWkiLCJERyIsImFzc3VyZSIsImRlbGF5IiwibXMiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsImdlbmVyYXRvciIsIlByb21pc2UiLCJzZXRUaW1lb3V0IiwiUCIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIm5vdE51bGwiLCJuYW1lIiwiRGVtb1NjcmlwdCIsImNvbnN0cnVjdG9yIiwiZGVzY3JpcHRpb24iLCJfY3VycmVudFN0ZXAiLCJfaXNTdG9wcGVkIiwiX2lzQ2FuY2VsbGVkIiwiX3Jvb3QiLCJpZCIsImNsYXNzZXMiLCJfc3RlcHMiLCJfbWFpbkhlYWRlciIsIl9oZWFkZXIiLCJfaGVhZGVyRGl2IiwiX3N0b3BTdGFydEJ0biIsIl9jaGFuZ2VTdG9wU3RhdGUiLCJfcmVzdGFydEJ0biIsIl9yZXN0YXJ0U2NyaXB0IiwiX2FjdGl2aXR5IiwiX3Byb2dyZXNzRGl2IiwiX3Byb2dyZXNzIiwiX3Byb2dyZXNzU3RlcHMiLCJtYXgiLCJjdXJyZW50T2JqZWN0Iiwic3RlcHMiLCJzdGVwTnVtYmVyIiwiX2FkZEhlYWRlciIsIl9jcmVhdGVIZWFkZXJEaXYiLCJfY3JlYXRlUHJvZ3Jlc3NEaXYiLCJhcHBlbmQiLCJpbm5lclRleHQiLCJfYWRkRGVzY3JpcHRpb24iLCJfYSIsImluc3RydWN0aW9uSW5kaWNhdG9yIiwiaW5zdHJ1Y3Rpb25EaXYiLCJjdXJyZW50U3RlcERlc2NyaXB0aW9uIiwib3B0aW9ucyIsImVudHJ5IiwiX2luaXRSb290IiwiY29udGFpbmVyIiwiY29udGFpbmVyRWxlbWVudCIsImNsYXNzTGlzdCIsImFkZCIsIl9zdGFydFNjcmlwdCIsIl9iIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImVudHJ5SW5kaWNhdG9ycyIsImVudHJ5SW5zdHJ1Y3Rpb25zIiwiY2xhc3NOYW1lIiwicmVtb3ZlIiwiY3VycmVudFN0ZXAiLCJmdW5jIiwiX3Njcm9sbFRvIiwib2Zmc2V0VG9wIiwib2Zmc2V0SGVpZ2h0IiwicmVwbGFjZVdpdGgiLCJlbGVtZW50IiwieSIsImZvY3VzIiwic2Nyb2xsVG9wIiwiaWNvbiIsInNjcmlwdERvY2tOb2RlIiwiQXJyYXkiLCJmcm9tIiwiY29udGFpbnMiLCJfY2xlYXJSb290IiwiX3NldEluaXRQYXJhbXMiLCJzdGFydCIsImNhbmNlbFNjcmlwdCIsIkludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJDb2x1bW4iLCJmcm9tSW50MzJBcnJheSIsImZyb21GbG9hdDMyQXJyYXkiLCJOVU1fVFlQRSIsIkZMT0FUX0NPTFVNTl9UWVBFIiwiSU5UX0NPTFVNTl9UWVBFIiwiRkxPQVRfQ09MVU1OU19UWVBFIiwiTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRSIsIklOVF9DT0xVTU5TX1RZUEUiLCJORVdfSU5UX0NPTFVNTlNfVFlQRSIsIk5FV19GTE9BVF9DT0xVTU5fVFlQRSIsIk5FV19JTlRfQ09MVU1OX1RZUEUiLCJDT0xVTU4iLCJDQUxMX1JFU1VMVCIsIk5VTV9PRl9ST1dTIiwiTlVNX09GX0NPTFVNTlMiLCJSRUYiLCJWQUxVRSIsIlRBQkxFX09GX0NPTFVNTlMiLCJPQkpFQ1RTIiwiSU5UX1RZUEUiLCJET1VCTEVfVFlQRSIsImFyZ3NTcGVjaWZpY2F0aW9uIiwiaW5wdXRWYWxzIiwicmVmIiwiY3BwRnVuY0lucHV0IiwiYXJnIiwidHlwZSIsImRhdGEiLCJhcnJheSIsImNvbCIsImdldFJhd0RhdGEiLCJ2YWwiLCJhcnJheXMiLCJ0b0xpc3QiLCJwdXNoIiwidmFsMSIsInZhbDIiLCJmdW5jU3BlY2lmaWNhdGlvbiIsImRhdGFGcm9tV2ViV29ya2VyIiwiYXJndW1lbnRzIiwiX2NhbGxSZXN1bHQiLCJjYWxsUmVzdWx0IiwiZnVuY1NwZWNpZmljYXRpb25BcmdzIiwiYXJnc0FmdGVyV2FzbUNhbGwiLCJ0eXBlVG9Db2x1bW5DcmVhdG9yTWFwIiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJuYW1lcyIsImNvbHVtbiIsImNvbHVtbnMiLCJrIiwiaiIsImV4dHJhY3ROZXdseUNyZWF0ZWREYXRhIiwiYXJncyIsIm91dFB1dCIsIm91dHB1dCIsInR5cGVUb0RhdGFGaWVsZE1hcCIsInNvdXJjZSIsIkRhdGFGcmFtZSIsImZyb21Db2x1bW5zIiwiYXJyYXlUb1JldHVybiIsImdldE91dHB1dCIsImNsZWFyTmV3bHlDcmVhdGVkRGF0YSIsIkNPTVBfTUlOIiwiU0FNUExFU19DT1VOVF9NSU4iLCJGRUFUVVJFU19DT1VOVF9NSU4iLCJQRVJDRU5UQUdFX01JTiIsIlBFUkNFTlRBR0VfTUFYIiwiTUFYX0VMRU1FTlRTX0NPVU5UIiwiQ09NUF9QT1NJVFZFX01FUyIsIkNPTVBfRVhDRVNTIiwiSU5DT1JFUlJFQ1RfTUlOX01BWF9NRVMiLCJJTkNPUkVSUkVDVF9GRUFUVVJFU19NRVMiLCJJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyIsIklOQ09SRVJSRUNUX1BFUkNFTlRBR0VfTUVTIiwiREFUQUZSQU1FX0lTX1RPT19CSUdfTUVTIiwiY2hlY2tDb21wb25lbmV0cyIsImZlYXR1cmVzIiwiY29tcG9uZW50cyIsImJ5SW5kZXgiLCJjb21wdXRlUExTIiwidGFibGUiLCJwcmVkaWN0IiwiX291dHB1dCIsIl9wcm9taXNlIiwiYXN5bmMiLCJjb21wb25lbnRzQ291bnQiLCJ3b3JrZXIiLCJXb3JrZXIiLCJVUkwiLCJwb3N0TWVzc2FnZSIsIkVEQSIsIm9ubWVzc2FnZSIsInRlcm1pbmF0ZSIsIl9wYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uSW5XZWJXb3JrZXIiLCJfcmVzdWx0IiwiX2Vycm9yIiwiYWRkUExTdmlzdWFsaXphdGlvbiIsInBsc091dHB1dCIsInZpZXciLCJhZGRWaWV3ZXIiLCJyZWZlcmVuY2UiLCJwcmVkaWN0aW9uIiwiZGZSZWZlcmVuY2VQcmVkaWN0aW9uIiwidGl0bGUiLCJ4Iiwic2hvd1JlZ3Jlc3Npb25MaW5lIiwibWFya2VyVHlwZSIsInByZWRpY3RlZFZlcnN1c1JlZmVyZW5jZVNjYXR0ZXJQbG90IiwicmVncmVzc2lvbkNvZWZmcyIsIm5hbWVzT2ZQcmVkaWN0b3JzIiwicHJlZGljdG9yTmFtZXNDb2x1bW4iLCJkZlJlZ3JDb2VmcyIsInNwbGl0IiwidmFsdWVBZ2dyVHlwZSIsInJlZ3Jlc3Npb25Db2VmZmljaWVudHNCYXJDaGFydCIsInhTY29yZXMiLCJ5U2NvcmVzIiwic2NvcmVzQ29sdW1ucyIsInNjb3JlcyIsInNjb3Jlc1NjYXR0ZXJQbG90IiwieExvYWRpbmdzIiwibG9hZGluZ0NvbHMiLCJsb2FkaW5nTGFiZWxzIiwiZGZMb2FkaW5ncyIsImxhYmVscyIsImxvYWRpbmdTY2F0dGVyUGxvdCIsIlNWTV9HRU5fRkVBVFVSRVNfSU5ERVgiLCJTVk1fR0VOX0xBQkVMU19JTkRFWCIsIlNWTV9GRUFUVVJFX05BTUUiLCJTVk1fTEFCRUxfTkFNRSIsImNhcnNEYXRhZnJhbWUiLCJ0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uIiwia2VybmVsIiwia2VybmVsUGFyYW1zIiwic2FtcGxlc0NvdW50IiwiZmVhdHVyZXNDb3VudCIsIm1pbiIsInZpb2xhdG9yc1BlcmNlbnRhZ2UiLCJjaGVja0dlbmVyYXRvclNWTWlucHV0cyIsImtlcm5lbFBhcmFtc0NvbCIsIl9nZW5lcmF0ZURhdGFzZXRJbldlYldvcmtlciIsImRmIiwiTElORUFSIiwiUE9MWU5PTUlBTCIsIlJCRiIsIlNJR01PSUQiLCJDT05GVVNJT05fTUFUUl9TSVpFIiwiTk9STUFMSVpFRF9EQVRBX0lOREVYIiwiTUVBTlNfSU5ERVgiLCJTVERfREVWU19JTkRFWCIsIk1PREVMX1BBUkFNU19JTkRFWCIsIk1PREVMX1dFSUdIVFNfSU5ERVgiLCJQUkVESUNURURfTEFCRUxTX0lOREVYIiwiQ09SUkVDVE5FU1NfSU5ERVgiLCJDT05GVVNJT05fTUFUUklYX0lOREVYIiwiVFJVRV9QT1NJVElWRV9JTkRFWCIsIkZBTFNFX05FR0FUSVZFX0lOREVYIiwiRkFMU0VfUE9TSVRJVkVfSU5ERVgiLCJUUlVFX05FR0FUSVZFX0lOREVYIiwiUkJGX1NJR01BX0lOREVYIiwiUE9MWU5PTUlBTF9DX0lOREVYIiwiUE9MWU5PTUlBTF9EX0lOREVYIiwiU0lHTU9JRF9LQVBQQV9JTkRFWCIsIlNJR01PSURfVEhFVEFfSU5ERVgiLCJHQU1NQV9JTkZJTVVNX0xJTUlUIiwiUkJGX1NJR01BX0lORklNVU1fTElNSVQiLCJQT0xZTk9NSUFMX0NfSU5GSU1VTV9MSU1JVCIsIlBPTFlOT01JQUxfRF9JTkZJTVVNX0xJTUlUIiwiV1JPTkdfR0FNTUFfTUVTU0FHRSIsIldST05HX1JCRl9TSUdNQV9NRVNTQUdFIiwiV1JPTkdfUE9MWU5PTUlBTF9DX01FU1NBR0UiLCJXUk9OR19QT0xZTk9NSUFMX0RfTUVTU0FHRSIsIldST05HX0tFUk5FTF9NRVNTQUdFIiwiTEFCRUxTIiwiUFJFRElDVEVEIiwiQ09SUkVDVE5FU1MiLCJDT05GVVNJT05fTUFUUklYX05BTUUiLCJNRUFOIiwiU1REX0RFViIsIk1PREVMX1BBUkFNU19OQU1FIiwiTU9ERUxfV0VJR0hUU19OQU1FIiwiR0FNTUEiLCJLRVJORUwiLCJLRVJORUxfUEFSQU1TIiwiS0VSTkVMX1BBUkFNXzEiLCJLRVJORUxfUEFSQU1fMiIsIkZFQVRVUkVTX0NPVU5UX05BTUUiLCJUUkFJTl9TQU1QTEVTX0NPVU5UX05BTUUiLCJUUkFJTl9FUlJPUiIsIktFUk5FTF9UWVBFX1RPX05BTUVfTUFQIiwiUE9TSVRJVkVfTkFNRSIsIk5FR0FUSVZFX05BTUUiLCJQUkVESUNURURfUE9TSVRJVkVfTkFNRSIsIlBSRURJQ1RFRF9ORUdBVElWRV9OQU1FIiwiU0VOU0lUSVZJVFkiLCJTUEVDSUZJQ0lUWSIsIkJBTEFOQ0VEX0FDQ1VSQUNZIiwiUE9TSVRJVkVfUFJFRElDVElWRV9WQUxVRSIsIk5FR0FUSVZFX1BSRURJQ1RJVkVfVkFMVUUiLCJNTF9SRVBPUlQiLCJNTF9SRVBPUlRfUFJFRElDVEVEX0xBQkVMUyIsIk1MX1JFUE9SVF9UUkFJTl9MQUJFTFMiLCJNTF9SRVBPUlRfQ09SUkVDVE5FU1MiLCJQUkVESUNUSU9OIiwiQllURVMiLCJJTlRTX0NPVU5UIiwiS0VSX1BBUkFNU19DT1VOVCIsIk1PREVMX0tFUk5FTF9JTkRFWCIsIlNBTVBMRVNfQ09VTlRfSU5ERVgiLCJGRUFUVVJFU19DT1VOVF9JTkRFWCIsIklOSVRfVkFMVUUiLCJMU19TVk1fQUREX0NPTlNUIiwiZ2V0VHJhaW5lZE1vZGVsIiwiaHlwZXJwYXJhbWV0ZXJzIiwicHJlZGljdF9jb2x1bW4iLCJieU5hbWUiLCJkYXRhc2V0IiwiZ2FtbWEiLCJzaWdtYSIsImNQYXJhbSIsImRQYXJhbSIsImNoZWNrSHlwZXJwYXJhbWV0ZXJzIiwia2VybmVsUGFyYW1zQXJyYXkiLCJrYXBwYSIsInRoZXRhIiwidHJhaW5Db2xzIiwibW9kZWxQYXJhbXNDb3VudCIsInByZWNvbXB1dGVkV2VpZ2h0c0NvdW50IiwiY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCIsIl90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyIiwibW9kZWwiLCJ0cmFpbkdhbW1hIiwia2VybmVsVHlwZSIsInRyYWluTGFiZWxzIiwibm9ybWFsaXplZFRyYWluRGF0YSIsIm1lYW5zIiwic3RkRGV2cyIsIm1vZGVsUGFyYW1zIiwibW9kZWxXZWlnaHRzIiwicHJlZGljdGVkTGFiZWxzIiwiY29ycmVjdG5lc3MiLCJjb25mdXNpb25NYXRyaXgiLCJ0cmFpbkVycm9yIiwidHJhaW5TYW1wbGVzQ291bnQiLCJUUCIsIlROIiwiRlAiLCJGTiIsIk4iLCJUUFIiLCJUTlIiLCJQUFYiLCJOUFYiLCJBQ0MiLCJCQSIsInNlbnNpdGl2aXR5Iiwic3BlY2lmaWNpdHkiLCJiYWxhbmNlZEFjY3VyYWN5IiwicG9zaXRpdmVQcmVkaWNpdHZlVmFsdWUiLCJuZWdhdGl2ZVByZWRpY2l0dmVWYWx1ZSIsImV2YWx1YXRlQWNjdXJhY3kiLCJ0cmFpbkFuZEFuYWx5emVNb2RlbCIsInNob3dUcmFpblJlcG9ydCIsImRmVmlldyIsImdldE1vZGVsSW5mbyIsImNvbG9yIiwiZ2V0Q29uZnVzaW9uTWF0cml4REYiLCJnZXRQYWNrZWRNb2RlbCIsImRhdGFDb2xzIiwiVWludDhBcnJheSIsImJ1ZmZlciIsIm9mZnNldCIsImludHMiLCJmbG9hdHMiLCJzZXQiLCJnZXRQcmVkaWN0aW9uIiwicGFja2VkTW9kZWwiLCJtb2RlbEJ5dGVzIiwiaGVhZGVyIiwiZ2V0VW5wYWNrZWRNb2RlbCIsInJlcyIsIm5vcm1hbGl6ZWREYXRhIiwicHJlY29tcHV0ZWRXZWlnaHRzIiwidGFyZ2V0RGF0YSIsIl9wcmVkaWN0QnlMU1NWTUluV2ViV29ya2VyIiwiX3BhY2thZ2UiLCJpbmZvIiwid2ViUm9vdCIsImluaXQiLCJpbml0RURBIiwiX2luaXRFREFBUEkiLCJQQ0EiLCJjZW50ZXIiLCJzY2FsZSIsInBjYVRhYmxlIiwicmVuYW1lUENBY29sdW1ucyIsImNlbnRlck51bSIsInNjYWxlTnVtIiwiX3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzSW5XZWJXb3JrZXIiLCJjb21wdXRlUENBIiwiUExTIiwicGxzUmVzdWx0cyIsImRlbW9TY3JpcHQiLCJjYXJzIiwic291cmNlQ2FycyIsInBhcmFtcyIsIml0ZW1zIiwiaXRlbXNQcm9wIiwiZmVhdHVyZXNQcm9wIiwiY29tcG9uZW50c1Byb3AiLCJhZGRCdXR0b24iLCJyb3dDb3VudCIsImNvbENvdW50IiwiZXJyb3IiLCJQUkVESUNUIiwiYmlnRGVtb1RhYmxlIiwiZGVtb1BMUyIsInNob3ciLCJ0ZXN0RGF0YUxpbmVhclNlcGFyYWJsZSIsInRlc3REYXRhTGluZWFyTm9uU2VwYXJhYmxlIiwidHJhaW5MaW5lYXJLZXJuZWxTVk0iLCJ0b1Nob3dSZXBvcnQiLCJ0cmFpbmVkTW9kZWwiLCJhcHBseUxpbmVhcktlcm5lbFNWTSIsInRyYWluUkJGa2VybmVsU1ZNIiwiYXBwbHlSQkZrZXJuZWxTVk0iLCJ0cmFpblBvbHlub21pYWxLZXJuZWxTVk0iLCJjIiwiZCIsImFwcGx5UG9seW5vbWlhbEtlcm5lbFNWTSIsInRyYWluU2lnbW9pZEtlcm5lbFNWTSIsImFwcGx5U2lnbW9pZEtlcm5lbFNWTSJdLCJzb3VyY2VSb290IjoiIn0=