@datagrok/eda 1.1.25 → 1.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/settings.json +5 -0
- package/CHANGELOG.md +12 -0
- package/README.md +1 -0
- package/dist/05e5e0770f54f07e9474.wasm +0 -0
- package/dist/111.js +2 -0
- package/dist/111.js.map +1 -0
- package/dist/153.js +2 -0
- package/dist/153.js.map +1 -0
- package/dist/23.js +2 -2
- package/dist/23.js.map +1 -0
- package/dist/234.js +2 -0
- package/dist/234.js.map +1 -0
- package/dist/242.js +2 -0
- package/dist/242.js.map +1 -0
- package/dist/260.js +2 -0
- package/dist/260.js.map +1 -0
- package/dist/317.js +2 -0
- package/dist/317.js.map +1 -0
- package/dist/33.js +2 -0
- package/dist/33.js.map +1 -0
- package/dist/348.js +2 -0
- package/dist/348.js.map +1 -0
- package/dist/377.js +2 -0
- package/dist/377.js.map +1 -0
- package/dist/412.js +2 -0
- package/dist/412.js.map +1 -0
- package/dist/415.js +2 -0
- package/dist/415.js.map +1 -0
- package/dist/531.js +2 -0
- package/dist/531.js.map +1 -0
- package/dist/583.js +2 -0
- package/dist/583.js.map +1 -0
- package/dist/589.js +2 -0
- package/dist/589.js.map +1 -0
- package/dist/603.js +2 -0
- package/dist/603.js.map +1 -0
- package/dist/656.js +2 -0
- package/dist/656.js.map +1 -0
- package/dist/682.js +2 -0
- package/dist/682.js.map +1 -0
- package/dist/705.js +2 -0
- package/dist/705.js.map +1 -0
- package/dist/731.js +2 -0
- package/dist/731.js.map +1 -0
- package/dist/738.js +3 -0
- package/dist/738.js.map +1 -0
- package/dist/763.js +2 -0
- package/dist/763.js.map +1 -0
- package/dist/778.js +2 -0
- package/dist/778.js.map +1 -0
- package/dist/783.js +2 -0
- package/dist/783.js.map +1 -0
- package/dist/793.js +2 -0
- package/dist/793.js.map +1 -0
- package/dist/907.js +2 -0
- package/dist/907.js.map +1 -0
- package/dist/91.js +2 -0
- package/dist/91.js.map +1 -0
- package/dist/950.js +2 -0
- package/dist/950.js.map +1 -0
- package/dist/package-test.js +2 -2
- package/dist/package-test.js.map +1 -0
- package/dist/package.js +2 -2
- package/dist/package.js.map +1 -0
- package/package.json +92 -92
- package/scripts/command.txt +1 -1
- package/scripts/func.json +1 -1
- package/scripts/module.json +1 -1
- package/src/missing-values-imputation/ui.ts +80 -66
- package/src/package.ts +288 -38
- package/src/pls/pls-tools.ts +16 -15
- package/src/regression.ts +232 -0
- package/src/svm.ts +78 -38
- package/tsconfig.json +4 -4
- package/wasm/EDA.js +65 -1
- package/wasm/EDA.wasm +0 -0
- package/wasm/EDAAPI.js +30 -0
- package/wasm/EDAForWebWorker.js +1 -1
- package/wasm/callWasm.js +384 -393
- package/wasm/regression-api.cpp +66 -0
- package/wasm/regression.h +128 -0
- package/wasm/workers/fitLinearRegressionParamsWithDataNormalizingWorker.js +13 -0
- package/wasm/workers/fitLinearRegressionParamsWorker.js +13 -0
- package/webpack.config.js +1 -1
- package/dist/208.js +0 -2
- package/dist/221.js +0 -2
- package/dist/231.js +0 -2
- package/dist/261.js +0 -2
- package/dist/282.js +0 -2
- package/dist/334.js +0 -2
- package/dist/356.js +0 -2
- package/dist/36.js +0 -2
- package/dist/367.js +0 -2
- package/dist/374.js +0 -2
- package/dist/40.js +0 -2
- package/dist/413.js +0 -2
- package/dist/42.js +0 -2
- package/dist/427.js +0 -2
- package/dist/467.js +0 -2
- package/dist/523.js +0 -3
- package/dist/533.js +0 -2
- package/dist/590.js +0 -2
- package/dist/65.js +0 -2
- package/dist/694.js +0 -2
- package/dist/729.js +0 -2
- package/dist/796.js +0 -2
- package/dist/902.js +0 -2
- package/dist/910.js +0 -2
- package/dist/972.js +0 -2
- package/dist/f5343e2c2e15952ce916.wasm +0 -0
- /package/dist/{523.js.LICENSE.txt → 738.js.LICENSE.txt} +0 -0
package/dist/523.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
/*! For license information please see 523.js.LICENSE.txt */
|
|
2
|
-
(self.webpackChunkeda=self.webpackChunkeda||[]).push([[523],{7905:(e,n,t)=>{"use strict";e=t.hmd(e);var r,i=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(e={}){var n,t,i=void 0!==e?e:{};i.ready=new Promise((function(e,r){n=e,t=r}));var a,s=Object.assign({},i),o="object"==typeof window,u="function"==typeof importScripts,l=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(o||u)&&(u?l=self.location.href:"undefined"!=typeof document&&document.currentScript&&(l=document.currentScript.src),r&&(l=r),l=0!==l.indexOf("blob:")?l.substr(0,l.replace(/[?#].*/,"").lastIndexOf("/")+1):"",u&&(a=e=>{var n=new XMLHttpRequest;return n.open("GET",e,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)})),i.print||console.log.bind(console);var c,f,h=i.printErr||console.warn.bind(console);Object.assign(i,s),s=null,i.arguments&&i.arguments,i.thisProgram&&i.thisProgram,i.quit&&i.quit,i.wasmBinary&&(c=i.wasmBinary),i.noExitRuntime,"object"!=typeof WebAssembly&&I("no native wasm support detected");var d,p,g,m=!1;function y(){var e=f.buffer;i.HEAP8=d=new Int8Array(e),i.HEAP16=new Int16Array(e),i.HEAP32=new Int32Array(e),i.HEAPU8=p=new Uint8Array(e),i.HEAPU16=new Uint16Array(e),i.HEAPU32=g=new Uint32Array(e),i.HEAPF32=new Float32Array(e),i.HEAPF64=new Float64Array(e)}var w=[],b=[],v=[],x=0,A=null,S=null;function I(e){i.onAbort&&i.onAbort(e),h(e="Aborted("+e+")"),m=!0,e+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(e);throw t(n),n}var E,M;function N(e){return e.startsWith("data:application/octet-stream;base64,")}function k(e){try{if(e==E&&c)return new Uint8Array(c);if(a)return a(e);throw"both async and sync fetching of the wasm failed"}catch(e){I(e)}}function P(e,n,t){return function(e){return c||!o&&!u||"function"!=typeof fetch?Promise.resolve().then((function(){return k(e)})):fetch(e,{credentials:"same-origin"}).then((function(n){if(!n.ok)throw"failed to load wasm binary file at '"+e+"'";return n.arrayBuffer()})).catch((function(){return k(e)}))}(e).then((function(e){return WebAssembly.instantiate(e,n)})).then((function(e){return e})).then(t,(function(e){h("failed to asynchronously prepare wasm: "+e),I(e)}))}function D(e){for(;e.length>0;)e.shift()(i)}function C(e){this.excPtr=e,this.ptr=e-24,this.set_type=function(e){g[this.ptr+4>>2]=e},this.get_type=function(){return g[this.ptr+4>>2]},this.set_destructor=function(e){g[this.ptr+8>>2]=e},this.get_destructor=function(){return g[this.ptr+8>>2]},this.set_caught=function(e){e=e?1:0,d[this.ptr+12>>0]=e},this.get_caught=function(){return 0!=d[this.ptr+12>>0]},this.set_rethrown=function(e){e=e?1:0,d[this.ptr+13>>0]=e},this.get_rethrown=function(){return 0!=d[this.ptr+13>>0]},this.init=function(e,n){this.set_adjusted_ptr(0),this.set_type(e),this.set_destructor(n)},this.set_adjusted_ptr=function(e){g[this.ptr+16>>2]=e},this.get_adjusted_ptr=function(){return g[this.ptr+16>>2]},this.get_exception_ptr=function(){if($(this.get_type()))return g[this.excPtr>>2];var e=this.get_adjusted_ptr();return 0!==e?e:this.excPtr}}function U(e){var n=f.buffer;try{return f.grow(e-n.byteLength+65535>>>16),y(),1}catch(e){}}function R(e){return i["_"+e]}N(E="wasmDbscan.wasm")||(M=E,E=i.locateFile?i.locateFile(M,l):l+M);var B="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function O(e,n,t,r,i){var a={string:e=>{var n=0;return null!=e&&0!==e&&(n=function(e){var n=function(e){for(var n=0,t=0;t<e.length;++t){var r=e.charCodeAt(t);r<=127?n++:r<=2047?n+=2:r>=55296&&r<=57343?(n+=4,++t):n+=3}return n}(e)+1,t=G(n);return function(e,n,t){!function(e,n,t,r){if(!(r>0))return 0;for(var i=t+r-1,a=0;a<e.length;++a){var s=e.charCodeAt(a);if(s>=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&e.charCodeAt(++a)),s<=127){if(t>=i)break;n[t++]=s}else if(s<=2047){if(t+1>=i)break;n[t++]=192|s>>6,n[t++]=128|63&s}else if(s<=65535){if(t+2>=i)break;n[t++]=224|s>>12,n[t++]=128|s>>6&63,n[t++]=128|63&s}else{if(t+3>=i)break;n[t++]=240|s>>18,n[t++]=128|s>>12&63,n[t++]=128|s>>6&63,n[t++]=128|63&s}}n[t]=0}(e,p,n,t)}(e,t,n),t}(e)),n},array:e=>{var n,t,r=G(e.length);return n=e,t=r,d.set(n,t),r}},s=R(e),o=[],u=0;if(r)for(var l=0;l<r.length;l++){var c=a[t[l]];c?(0===u&&(u=T()),o[l]=c(r[l])):o[l]=r[l]}var f=s.apply(null,o);return function(e){return 0!==u&&L(u),function(e){return"string"===n?(t=e)?function(e,n,t){for(var r=n+t,i=n;e[i]&&!(i>=r);)++i;if(i-n>16&&e.buffer&&B)return B.decode(e.subarray(n,i));for(var a="";n<i;){var s=e[n++];if(128&s){var o=63&e[n++];if(192!=(224&s)){var u=63&e[n++];if((s=224==(240&s)?(15&s)<<12|o<<6|u:(7&s)<<18|o<<12|u<<6|63&e[n++])<65536)a+=String.fromCharCode(s);else{var l=s-65536;a+=String.fromCharCode(55296|l>>10,56320|1023&l)}}else a+=String.fromCharCode((31&s)<<6|o)}else a+=String.fromCharCode(s)}return a}(p,t,r):"":"boolean"===n?Boolean(e):e;var t,r}(e)}(f)}var _,z={__cxa_throw:function(e,n,t){throw new C(e).init(n,t),e},abort:function(){I("")},emscripten_memcpy_big:function(e,n,t){p.copyWithin(e,n,n+t)},emscripten_resize_heap:function(e){var n,t=p.length,r=2147483648;if((e>>>=0)>r)return!1;for(var i=1;i<=4;i*=2){var a=t*(1+.2/i);if(a=Math.min(a,e+100663296),U(Math.min(r,(n=Math.max(e,a))+(65536-n%65536)%65536)))return!0}return!1}},T=(function(){var e,n,r,a,s={env:z,wasi_snapshot_preview1:z};function o(e,n){var t,r=e.exports;return i.asm=r,f=i.asm.memory,y(),i.asm.__indirect_function_table,t=i.asm.__wasm_call_ctors,b.unshift(t),function(e){if(x--,i.monitorRunDependencies&&i.monitorRunDependencies(x),0==x&&(null!==A&&(clearInterval(A),A=null),S)){var n=S;S=null,n()}}(),r}if(x++,i.monitorRunDependencies&&i.monitorRunDependencies(x),i.instantiateWasm)try{return i.instantiateWasm(s,o)}catch(e){h("Module.instantiateWasm callback failed with error: "+e),t(e)}(e=c,n=E,r=s,a=function(e){o(e.instance)},e||"function"!=typeof WebAssembly.instantiateStreaming||N(n)||"function"!=typeof fetch?P(n,r,a):fetch(n,{credentials:"same-origin"}).then((function(e){return WebAssembly.instantiateStreaming(e,r).then(a,(function(e){return h("wasm streaming compile failed: "+e),h("falling back to ArrayBuffer instantiation"),P(n,r,a)}))}))).catch(t)}(),i._dbscan=function(){return(i._dbscan=i.asm.dbscan).apply(null,arguments)},i._malloc=function(){return(i._malloc=i.asm.malloc).apply(null,arguments)},i._free=function(){return(i._free=i.asm.free).apply(null,arguments)},function(){return(T=i.asm.stackSave).apply(null,arguments)}),L=function(){return(L=i.asm.stackRestore).apply(null,arguments)},G=function(){return(G=i.asm.stackAlloc).apply(null,arguments)},$=function(){return($=i.asm.__cxa_is_pointer_type).apply(null,arguments)};function F(){function e(){_||(_=!0,i.calledRun=!0,m||(D(b),n(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),function(){if(i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)e=i.postRun.shift(),v.unshift(e);var e;D(v)}()))}x>0||(function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)e=i.preRun.shift(),w.unshift(e);var e;D(w)}(),x>0||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),e()}),1)):e()))}if(i.ccall=O,i.cwrap=function(e,n,t,r){var i=!t||t.every((e=>"number"===e||"boolean"===e));return"string"!==n&&i&&!r?R(e):function(){return O(e,n,t,arguments)}},S=function e(){_||F(),_||(S=e)},i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return F(),e.ready});"object"==typeof exports?e.exports=i:"function"==typeof define&&t.amdO?define([],(function(){return i})):"object"==typeof exports&&(exports.exportCppDbscanLib=i)},6814:(e,n,t)=>{"use strict";t.d(n,{cZ:()=>i,kK:()=>r}),t(7862);const r=e=>null==e;function i(e,n,t,r){if(t>e[e.length-1])return;const i=e.findIndex((e=>t<e));e.pop(),e.splice(i,0,t),n.pop(),n.splice(i,0,r)}},7523:(e,n,t)=>{"use strict";class r extends Float32Array{}var i=t(1040),a=t(1811),s=t(3979),o=t(5697);function u(e=!1,n="Assertion error."){if(!e)throw new Error(n)}var l=t(489);const c={[i.CF.Euclidean]:function(e,n){let t=0;const r=e.length;if(r!==n.length)throw new Error("The dimensionality of the vectors must match");for(let i=0;i<r;++i)t+=Math.pow(e[i]-n[i],2);return Math.sqrt(t)}},f={[i.W.Levenshtein]:a.T,[i.W.JaroWinkler]:s.H$,[i.W.Manhattan]:function(e,n){if(e.length!==n.length)return 1;{let t=0;for(let r=1;r<e.length;r++)t+=e[r]==n[r]?0:1;return t/e.length}},[i.W.Onehot]:function(e,n){return e===n?0:1}},h={[i.gk.Tanimoto]:o.KR,[i.gk.Dice]:o._h,[i.gk.Asymmetric]:o.yU,[i.gk.BraunBlanquet]:o.Dz,[i.gk.Cosine]:o.Zd,[i.gk.Kulczynski]:o.s,[i.gk.McConnaughey]:o.aW,[i.gk.RogotGoldberg]:o.MI,[i.gk.Russel]:o.fX,[i.gk.Sokal]:o.NB,[i.gk.Hamming]:o.UX,[i.gk.Euclidean]:o.WI},d={[i.gd.TanimotoIntArray]:o.FV},p={[i.Yc.Difference]:o.bX},g={[i.gj.CommonItems]:o.Jv},m={[i.Qe.Vector]:{[i.CF.Euclidean]:c[i.CF.Euclidean]},[i.Qe.String]:{[i.W.Levenshtein]:f[i.W.Levenshtein],[i.W.JaroWinkler]:f[i.W.JaroWinkler],[i.W.Manhattan]:f[i.W.Manhattan],[i.W.Onehot]:f[i.W.Onehot]},[i.Qe.BitArray]:{[i.gk.Tanimoto]:h[i.gk.Tanimoto],[i.gk.Dice]:h[i.gk.Dice],[i.gk.Asymmetric]:h[i.gk.Asymmetric],[i.gk.BraunBlanquet]:h[i.gk.BraunBlanquet],[i.gk.Cosine]:h[i.gk.Cosine],[i.gk.Kulczynski]:h[i.gk.Kulczynski],[i.gk.McConnaughey]:h[i.gk.McConnaughey],[i.gk.RogotGoldberg]:h[i.gk.RogotGoldberg],[i.gk.Russel]:h[i.gk.Russel],[i.gk.Sokal]:h[i.gk.Sokal]},[i.Qe.MacroMolecule]:{[l.U.HAMMING]:l.o[l.U.HAMMING],[l.U.LEVENSHTEIN]:l.o[l.U.LEVENSHTEIN],[l.U.NEEDLEMANN_WUNSCH]:l.o[l.U.NEEDLEMANN_WUNSCH],[l.U.MONOMER_CHEMICAL_DISTANCE]:l.o[l.U.MONOMER_CHEMICAL_DISTANCE]},[i.Qe.Number]:{[i.Yc.Difference]:p[i.Yc.Difference]},[i.Qe.IntArray]:{[i.gd.TanimotoIntArray]:d[i.gd.TanimotoIntArray]},[i.Qe.NumberArray]:{[i.gj.CommonItems]:g[i.gj.CommonItems]}},y=Object.keys(m).reduce(((e,n)=>{for(const t of Object.keys(m[n]))e[t]=n;return e}),{});class w{constructor(e){this.method=e,this.dataType=y[e]}metricNeedsArgs(e){return y[e]==i.Qe.MacroMolecule.toString()||y[e]==i.Qe.Number.toString()||function(e){return y[e]==i.Qe.NumberArray.toString()}(e)}getMeasure(e){const n=m;if(!n.hasOwnProperty(this.dataType)||!n[this.dataType].hasOwnProperty(this.method))throw new Error(`Unknown measure ${this.method} for data type ${this.dataType}`);return this.metricNeedsArgs(this.method)?n[this.dataType][this.method](e):n[this.dataType][this.method]}static getMetricByDataType(e){return Object.keys(m[e])}static get availableMeasures(){return Object.keys(m)}}t(6814);var b=t(7862);class v{constructor(e=!0,n=!0){const r=navigator.hardwareConcurrency;this._workerCount=e?Math.max(r-2,1):1,this._workers=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(t.p+t.u(65),t.b)))),this._terminateOnComplete=n}async calc(e,n,t=!0,r){return await this.calcMulti([e],[n],t,[r??{}],[1],b.y.MANHATTAN)}async calcMulti(e,n,t=!0,r=[{}],i=[1],a=b.y.MANHATTAN){if(e.length<1)throw new Error("values must contain at least one array");if(n.length!==e.length||r.length!==e.length||i.length!==e.length)throw new Error("values, fnNames, weights and opts must have the same length");return new Promise((async(s,o)=>{try{const o=e[0].length,u=new Array(this._workerCount),l=o*(o-1)/2;this._workerCount=Math.min(this._workerCount,l);const c=l/this._workerCount,f=new Float32Array(l);let h=0,d=1,p=0,g=Number.MIN_VALUE;for(let t=0;t<this._workerCount;t++){const s=Math.floor(t*c),m=t===this._workerCount-1?l:Math.floor((t+1)*c),y=h,w=d;t!==this._workerCount-1&&(h=o-2-Math.floor(Math.sqrt(-8*m+4*o*(o-1)-7)/2-.5),d=m-o*h+Math.floor((h+1)*(h+2)/2)),this._workers[t].postMessage({values:e,fnNames:n,startRow:y,startCol:w,chunckSize:m-s,opts:r,weights:i,aggregationMethod:a}),u[t]=new Promise(((e,n)=>{this._workers[t].onmessage=({data:{error:r,distanceMatrixData:i,min:a,max:o}})=>{this._terminateOnComplete&&setTimeout((()=>this._workers[t].terminate())),r?n(r):(f.set(i,s),a<p&&(p=a),o>g&&(g=o),e())}}))}await Promise.all(u),t&&f.forEach(((e,n)=>{f[n]=(e-p)/(g-p)})),s(f)}catch(e){o(e)}}))}terminate(){this._workers.forEach((e=>e.terminate()))}}function x(e,n){return Math.floor(n()*e)}function A(e){return e()}function S(e){const n=[];for(let t=0;t<e;t++)n.push(void 0);return n}function I(e){return S(e).map(((e,n)=>n))}function E(e,n){return S(e).map((()=>n))}function M(e){return E(e,0)}function N(e){return function(e){return e.reduce(((e,n)=>e+n))}(e)/e.length}function k(e){let n=0;for(let t=0;t<e.length;t++)n=e[t]>n?e[t]:n;return n}function P(e,n,t){const r=M(e);for(let i=0;i<e;i++){let e=!0;for(;e;){const a=x(n,t);let s=!1;for(let e=0;e<i;e++)if(a===r[e]){s=!0;break}s||(e=!1),r[i]=a}}return r}function D(e,n,t){const r=[];let i=0;if(e.length!==n*t)throw new Error("Array dimensions must match input length.");for(let a=0;a<n;a++){const n=[];for(let r=0;r<t;r++)n.push(e[i]),i+=1;r.push(n)}return r}function C(e,n){const t=t=>S(e).map((()=>E(n,t))),r=[];return r.push(t(-1)),r.push(t(1/0)),r.push(t(0)),r}function U(e,n,t){const r=M(e);for(let i=0;i<e;i++){let e=!0,a=0;for(;e;){a=x(n,t);let s=!1;for(let e=0;e<i;e++)if(a===r[e]){s=!0;break}s||(e=!1)}r[i]=a}return r}function R(e,n,t,r,i){n=Math.floor(n);const a=e[0][n];if(t>=e[1][n][0])return 0;for(let e=0;e<a.length;e++)if(r===a[e])return 0;return B(e,n,t,r,i)}function B(e,n,t,r,i){const a=e[0][n],s=e[1][n],o=e[2][n];if(t>=s[0])return 0;s[0]=t,a[0]=r,o[0]=i;let u=0,l=0;for(;;){const n=2*u+1,r=n+1,i=e[0][0].length;if(n>=i)break;if(r>=i){if(!(s[n]>t))break;l=n}else if(s[n]>=s[r]){if(!(t<s[n]))break;l=n}else{if(!(t<s[r]))break;l=r}s[u]=s[l],a[u]=a[l],o[u]=o[l],u=l}return s[u]=t,a[u]=r,o[u]=i,1}function O(e,n,t,r,i){const a=C(n,r);for(let r=0;r<n;r++)for(let n=0;n<t;n++){if(e[0][r][n]<0)continue;const t=e[0][r][n],s=e[2][r][n],o=A(i);R(a,r,o,t,s),R(a,t,o,r,s),e[2][r][n]=0}return a}function _(e){const n=e[0],t=e[1];for(let e=0;e<n.length;e++){const r=n[e],i=t[e];for(let e=0;e<r.length-1;e++){const n=r.length-e-1,t=i.length-e-1,a=r[0];r[0]=r[n],r[n]=a;const s=i[0];i[0]=i[t],i[t]=s,z(i,r,t,0)}}return{indices:n,weights:t}}function z(e,n,t,r){for(;2*r+1<t;){const i=2*r+1,a=i+1;let s=r;if(e[s]<e[i]&&(s=i),a<t&&e[s]<e[a]&&(s=a),s===r)break;{const t=e[r];e[r]=e[s],e[s]=t;const i=n[r];n[r]=n[s],n[s]=i,r=s}}}function T(e,n){const t=e[0][n],r=e[1][n],i=e[2][n];let a=1/0,s=-1;for(let e=0;e>t.length;e++)1===i[e]&&r[e]<a&&(a=r[e],s=e);return s>=0?(i[s]=0,Math.floor(t[s])):-1}class L{constructor(e,n,t,r){if(this.entries=new Map,this.nRows=0,this.nCols=0,e.length!==n.length||e.length!==t.length)throw new Error("rows, cols and values arrays must all have the same length");this.nRows=r[0],this.nCols=r[1];for(let r=0;r<t.length;r++){const i=e[r],a=n[r];this.checkDims(i,a);const s=this.makeKey(i,a);this.entries.set(s,{value:t[r],row:i,col:a})}}makeKey(e,n){return`${e}:${n}`}checkDims(e,n){if(!(e<this.nRows&&n<this.nCols))throw new Error("row and/or col specified outside of matrix dimensions")}set(e,n,t){this.checkDims(e,n);const r=this.makeKey(e,n);this.entries.has(r)?this.entries.get(r).value=t:this.entries.set(r,{value:t,row:e,col:n})}get(e,n,t=0){const r=this.makeKey(e,n);return this.entries.has(r)?this.entries.get(r).value:t}getAll(e=!0){const n=new Array(this.entries.size).fill(null);let t=0;return this.entries.forEach((e=>{n[t++]=e})),e&&n.sort(((e,n)=>e.row===n.row?e.col-n.col:e.row-n.row)),n}getDims(){return[this.nRows,this.nCols]}getRows(){return Array.from(this.entries,(([e,n])=>n.row))}getCols(){return Array.from(this.entries,(([e,n])=>n.col))}getValues(){return Array.from(this.entries,(([e,n])=>n.value))}forEach(e){this.entries.forEach((n=>e(n.value,n.row,n.col)))}map(e){const n=new Float32Array(this.entries.size);let t=0;this.entries.forEach((r=>{n[t++]=e(r.value,r.row,r.col)}));const r=[this.nRows,this.nCols];return new L(this.getRows(),this.getCols(),n,r)}toArray(){const e=S(this.nRows).map((()=>M(this.nCols)));return this.entries.forEach((n=>{e[n.row][n.col]=n.value})),e}}function G(e){const n=e.getRows(),t=e.getCols(),r=e.getValues(),i=t.length,a=new Int32Array(i),s=new Int32Array(i),o=new Float32Array(i);a.set(n),s.set(t),o.set(r);const u=[e.nCols,e.nRows];return new L(s,a,o,u)}function $(e,n){return q(e,n,((e,n)=>e*n))}function F(e,n){return q(e,n,((e,n)=>e+n))}function j(e,n){return q(e,n,((e,n)=>e-n))}function Y(e,n){return e.map((e=>e*n))}function W(e){const n=new Set,t=e.getValues(),r=e.getRows(),i=e.getCols();for(let e=0;e<t.length;e++)0===t[e]&&n.add(e);const a=(e,t)=>!n.has(t),s=t.filter(a),o=r.filter(a),u=i.filter(a);return new L(o,u,s,e.getDims())}function K(e,n="l2"){const t=V[n],r=new Map;e.forEach(((e,n,t)=>{const i=r.get(n)||[];i.push(t),r.set(n,i)}));const i=new L([],[],[],e.getDims());for(const n of r.keys()){const a=r.get(n).sort(),s=t(a.map((t=>e.get(n,t))));for(let e=0;e<s.length;e++)i.set(n,a[e],s[e])}return i}const V={max:e=>{let n=-1/0;for(let t=0;t<e.length;t++)n=e[t]>n?e[t]:n;return e.map((e=>e/n))},l1:e=>{let n=0;for(let t=0;t<e.length;t++)n+=e[t];return e.map((e=>e/n))},l2:e=>{let n=0;for(let t=0;t<e.length;t++)n+=e[t]**2;return e.map((e=>Math.sqrt(e**2/n)))}};function q(e,n,t){const r=new Set,i=[],a=[],s=[],o=(r,o)=>{i.push(r),a.push(o);const u=t(e.get(r,o),n.get(r,o));s.push(u)},u=e.getValues(),l=e.getRows(),c=e.getCols();for(let e=0;e<u.length;e++){const n=l[e],t=c[e],i=`${n}:${t}`;r.add(i),o(n,t)}const f=n.getValues(),h=n.getRows(),d=n.getCols();for(let e=0;e<f.length;e++){const n=h[e],t=d[e],i=`${n}:${t}`;r.has(i)||o(n,t)}const p=[e.nRows,e.nCols];return new L(i,a,s,p)}function H(e){const n=[];e.forEach(((e,t,r)=>{n.push({value:e,row:t,col:r})})),n.sort(((e,n)=>e.row===n.row?e.col-n.col:e.row-n.row));const t=[],r=[],i=[];let a=-1;for(let e=0;e<n.length;e++){const{row:s,col:o,value:u}=n[e];s!==a&&(a=s,i.push(e)),t.push(o),r.push(u)}return{indices:t,values:r,indptr:i}}class Z{constructor(e,n,t,r){this.hyperplanes=e,this.offsets=n,this.children=t,this.indices=r}}function X(e,n,t,r){const i=Math.max(10,n),a=I(t).map(((n,t)=>function(e,n=30,t,r){return Q(e,I(e.length),n,t,r)}(e,i,t,r))),s=a.map((e=>function(e,n){const t=ee(e),r=ne(e),i=I(t).map((()=>e.hyperplane?1:0)),a=M(t),s=I(t).map((()=>[-1,-1])),o=I(r).map((()=>I(n).map((()=>-1))));return J(e,i,a,s,o,0,0),new Z(i,a,s,o)}(e,i)));return s}function Q(e,n,t=30,r,i){if(n.length>t){const a=function(e,n,t){const r=x(n.length,t);let i=x(n.length,t);i+=r===i?1:0,i%=n.length;const a=n[r],s=n[i];let o=0,u=0;u=e[a]-e[s],o-=u*(e[a]+e[s])/2;let l=0,c=0;const f=M(n.length);for(let r=0;r<n.length;r++){let i=o;i+=u*e[n[r]],0===i?(f[r]=x(2,t),0===f[r]?l+=1:c+=1):i>0?(f[r]=0,l+=1):(f[r]=1,c+=1)}const h=M(l),d=M(c);l=0,c=0;for(let e=0;e<f.length;e++)0===f[e]?(h[l]=n[e],l+=1):(d[c]=n[e],c+=1);return{indicesLeft:h,indicesRight:d,hyperplane:u,offset:o}}(e,n,i),{indicesLeft:s,indicesRight:o,hyperplane:u,offset:l}=a;return{leftChild:Q(e,s,t,r+1,i),rightChild:Q(e,o,t,r+1,i),isLeaf:!1,hyperplane:u,offset:l}}return{indices:n,isLeaf:!0}}function J(e,n,t,r,i,a,s){if(e.isLeaf)return r[a][0]=-s,i[s].splice(0,e.indices.length,...e.indices),{nodeNum:a,leafNum:s+=1};{n[a]=e.hyperplane,t[a]=e.offset,r[a][0]=a+1;const o=a;let u=J(e.leftChild,n,t,r,i,a+1,s);return a=u.nodeNum,s=u.leafNum,r[o][1]=a+1,u=J(e.rightChild,n,t,r,i,a+1,s),{nodeNum:u.nodeNum,leafNum:u.leafNum}}}function ee(e){return e.isLeaf?1:1+ee(e.leftChild)+ee(e.rightChild)}function ne(e){return e.isLeaf?1:ne(e.leftChild)+ne(e.rightChild)}function te(e,n,t,r){let i=n;return i+=e*t,0===i?x(2,r):i>0?0:1}function re(e,n,t){let r=0;for(;n.children[r][0]>0;)r=0===te(n.hyperplanes[r],n.offsets[r],e,t)?n.children[r][0]:n.children[r][1];const i=-1*n.children[r][0];return n.indices[i]}var ie=t(7531),ae=t(1353),se=t(8188);const oe=1e-5,ue=.001;class le{get neighbors(){return this.nNeighbors}constructor(e={}){this.learningRate=1,this.localConnectivity=1,this.minDist=.1,this.nComponents=2,this.nEpochs=0,this.nNeighbors=15,this.negativeSampleRate=5,this.random=Math.random,this.repulsionStrength=1,this.setOpMixRatio=1,this.spread=1,this.transformQueueSize=4,this.targetMetric="categorical",this.targetWeight=.5,this.targetNNeighbors=15,this.distanceFn=ce,this.isInitialized=!1,this.rpForest=[],this.embedding=[],this.optimizationState=new fe;const n=n=>{void 0!==e[n]&&(this[n]=e[n])};n("distanceFn"),n("learningRate"),n("localConnectivity"),n("minDist"),n("nComponents"),n("nEpochs"),n("nNeighbors"),n("negativeSampleRate"),n("random"),n("repulsionStrength"),n("setOpMixRatio"),n("spread"),n("transformQueueSize"),this.targetNNeighbors=e.nNeighbors||this.nNeighbors||this.targetNNeighbors}fit(e){return this.initializeFit(e),this.optimizeLayout(),this.embedding}async fitAsync(e,n=(()=>!0)){return this.initializeFit(e),await this.optimizeLayoutAsync(n),this.embedding}setSupervisedProjection(e,n={}){this.Y=e,this.targetMetric=n.targetMetric||this.targetMetric,this.targetWeight=n.targetWeight||this.targetWeight,this.targetNNeighbors=n.targetNNeighbors||this.targetNNeighbors}setPrecomputedKNN(e,n){this.knnIndices=e,this.knnDistances=n}initializeFit(e){if(e.length<=this.nNeighbors)throw new Error(`Not enough data points (${e.length}) to create nNeighbors: ${this.nNeighbors}. Add more data points or adjust the configuration.`);if(this.X===e&&this.isInitialized)return this.getNEpochs();if(this.X=e,!this.knnIndices&&!this.knnDistances){const n=this.nearestNeighbors(e);this.knnIndices=n.knnIndices,this.knnDistances=n.knnDistances}this.graph=this.fuzzySimplicialSet(e,this.nNeighbors,this.setOpMixRatio),this.makeSearchFns(),this.searchGraph=this.makeSearchGraph(e),this.processGraphForSupervisedProjection();const{head:n,tail:t,epochsPerSample:r}=this.initializeSimplicialSetEmbedding();return this.optimizationState.head=n,this.optimizationState.tail=t,this.optimizationState.epochsPerSample=r,this.initializeOptimization(),this.prepareForOptimizationLoop(),this.isInitialized=!0,this.getNEpochs()}makeSearchFns(){const{initFromTree:e,initFromRandom:n}=(t=this.distanceFn,{initFromRandom:function(e,n,r,i,a){for(let s=0;s<r.length;s++){const o=P(e,n.length,a);for(let e=0;e<o.length;e++)o[e]<0||R(i,s,t(n[o[e]],r[s]),o[e],1)}},initFromTree:function(e,n,r,i,a){for(let s=0;s<r.length;s++){const o=re(r[s],e,a);for(let e=0;e<o.length;e++){if(o[e]<0)return;R(i,s,t(n[o[e]],r[s]),o[e],1)}}}});var t;this.initFromTree=e,this.initFromRandom=n,this.search=function(e){return function(n,t,r,i){const{indices:a,indptr:s}=H(t);for(let t=0;t<i.length;t++){const o=new Set(r[0][t]);for(;;){const u=T(r,t);if(-1===u)break;const l=a.slice(s[u],s[u+1]);for(const a of l)a===u||-1===a||o.has(a)||(B(r,t,e(n[a],i[t]),a,1),o.add(a))}}return r}}(this.distanceFn)}makeSearchGraph(e){const n=this.knnIndices,t=this.knnDistances,r=[e.length,e.length],i=new L([],[],[],r);for(let e=0;e<n.length;e++){const r=n[e],a=t[e];for(let n=0;n<r.length;n++){const t=r[n],s=a[n];s>0&&i.set(e,t,s)}}return q(i,G(i),((e,n)=>e>n?e:n))}transform(e){const n=this.X;if(void 0===n||0===n.length)throw new Error("No data has been fit.");let t=Math.floor(this.nNeighbors*this.transformQueueSize);t=Math.min(n.length,t);const r=function(e,n,t,r,i,a,s){const o=C(t.length,r);if(i(r,n,t,o,s),e)for(const r of e)a(r,n,t,o,s);return o}(this.rpForest,n,e,t,this.initFromRandom,this.initFromTree,this.random),i=this.search(n,this.searchGraph,r,e);let{indices:a,weights:s}=_(i);a=a.map((e=>e.slice(0,this.nNeighbors))),s=s.map((e=>e.slice(0,this.nNeighbors)));const o=Math.max(0,this.localConnectivity-1),{sigmas:u,rhos:l}=this.smoothKNNDistance(s,this.nNeighbors,o),{rows:c,cols:f,vals:h}=this.computeMembershipStrengths(a,s,u,l),d=[e.length,n.length];let p=new L(c,f,h,d);const g=H(K(p,"l1")),m=e.length,y=function(e,n,t){const r=M(e.length).map((e=>M(t[0].length)));for(let i=0;i<e.length;i++)for(let a=0;a<e[0].length;a++)for(let s=0;s<t[0].length;s++){const o=e[i][a];r[i][s]+=n[i][a]*t[o][s]}return r}(D(g.indices,m,this.nNeighbors),D(g.values,m,this.nNeighbors),this.embedding),w=this.nEpochs?this.nEpochs/3:p.nRows<=1e4?100:30,b=p.getValues().reduce(((e,n)=>n>e?n:e),0);p=p.map((e=>e<b/w?0:e)),p=W(p);const v=this.makeEpochsPerSample(p.getValues(),w),x=p.getRows(),A=p.getCols();return this.assignOptimizationStateParameters({headEmbedding:y,tailEmbedding:this.embedding,head:x,tail:A,currentEpoch:0,nEpochs:w,nVertices:p.getDims()[1],epochsPerSample:v}),this.prepareForOptimizationLoop(),this.optimizeLayout()}processGraphForSupervisedProjection(){const{Y:e,X:n}=this;if(e){if(e.length!==n.length)throw new Error("Length of X and y must be equal");if("categorical"===this.targetMetric){const n=this.targetWeight<1?1/(1-this.targetWeight)*2.5:1e12;this.graph=this.categoricalSimplicialSetIntersection(this.graph,e,n)}}}step(){const{currentEpoch:e}=this.optimizationState;return e<this.getNEpochs()&&this.optimizeLayoutStep(e),this.optimizationState.currentEpoch}getEmbedding(){return this.embedding}nearestNeighbors(e){const{distanceFn:n,nNeighbors:t}=this,r=function(e,n){return function(t,r,i,a=10,s=50,o=.001,u=.5,l=!0){const c=t.length,f=C(t.length,i);for(let r=0;r<t.length;r++){const a=U(i,t.length,n);for(let n=0;n<a.length;n++){const i=e(t[r],t[a[n]]);R(f,r,i,a[n],1),R(f,a[n],i,r,1)}}if(l)for(let n=0;n<r.length;n++)for(let i=0;i<r[n].length&&!(r[n][i]<0);i++)for(let a=i+1;a<r[n].length&&!(r[n][a]<0);a++){const s=e(t[r[n][i]],t[r[n][a]]);R(f,r[n][i],s,r[n][a],1),R(f,r[n][a],s,r[n][i],1)}for(let r=0;r<a;r++){const r=O(f,c,i,s,n);let a=0;for(let i=0;i<c;i++)for(let o=0;o<s;o++){const l=Math.floor(r[0][i][o]);if(!(l<0||A(n)<u))for(let n=0;n<s;n++){const s=Math.floor(r[0][i][n]),u=r[2][i][o],c=r[2][i][n];if(s<0||!u&&!c)continue;const h=e(t[l],t[s]);a+=R(f,l,h,s,1),a+=R(f,s,h,l,1)}}if(a<=o*i*t.length)break}return _(f)}}(n,this.random),i=5+Math.floor(.5==(a=e.length**.5/20)?0:Math.round(a));var a;const s=Math.max(5,Math.floor(Math.round((e=>Math.log(e)/Math.log(2))(e.length))));this.rpForest=X(e,t,i,this.random);const o=function(e){if(e.length>0){const n=[];for(const t of e)n.push(...t.indices);return n}return[[-1]]}(this.rpForest),{indices:u,weights:l}=r(e,o,t,s);return{knnIndices:u,knnDistances:l}}fuzzySimplicialSet(e,n,t=1){const{knnIndices:r=[],knnDistances:i=[],localConnectivity:a}=this,{sigmas:s,rhos:o}=this.smoothKNNDistance(i,n,a),{rows:u,cols:l,vals:c}=this.computeMembershipStrengths(r,i,s,o),f=[e.length,e.length],h=new L(u,l,c,f),d=G(h),p=$(h,d),g=j(F(h,d),p);return F(Y(g,t),Y(p,1-t))}categoricalSimplicialSetIntersection(e,n,t,r=1){let i=function(e,n,t=1,r=5){return e.map(((e,i,a)=>-1===n[i]||-1===n[a]?e*Math.exp(-t):n[i]!==n[a]?e*Math.exp(-r):e))}(e,n,r,t);return i=W(i),function(e){const n=G(e=K(e,"max"));return W(e=F(e,j(n,$(n,e))))}(i)}smoothKNNDistance(e,n,t=1,r=64,i=1){const a=Math.log(n)/Math.log(2)*i,s=M(e.length),o=M(e.length);for(let n=0;n<e.length;n++){let i=0,u=1/0,l=1;const c=e[n],f=c.filter((e=>e>0));if(f.length>=t){const e=Math.floor(t),r=t-e;e>0?(s[n]=f[e-1],r>oe&&(s[n]+=r*(f[e]-f[e-1]))):s[n]=r*f[0]}else f.length>0&&(s[n]=k(f));for(let t=0;t<r;t++){let t=0;for(let r=1;r<e[n].length;r++){const i=e[n][r]-s[n];t+=i>0?Math.exp(-i/l):1}if(Math.abs(t-a)<oe)break;t>a?(u=l,l=(i+u)/2):(i=l,u===1/0?l*=2:l=(i+u)/2)}if(o[n]=l,s[n]>0){const e=N(c);o[n]<ue*e&&(o[n]=ue*e)}else{const t=N(e.map(N));o[n]<ue*t&&(o[n]=ue*t)}}return{sigmas:o,rhos:s}}computeMembershipStrengths(e,n,t,r){const i=e.length,a=e[0].length,s=M(i*a),o=M(i*a),u=M(i*a);for(let l=0;l<i;l++)for(let i=0;i<a;i++){let c=0;-1!==e[l][i]&&(c=e[l][i]===l?0:n[l][i]-r[l]<=0?1:Math.exp(-(n[l][i]-r[l])/t[l]),s[l*a+i]=l,o[l*a+i]=e[l][i],u[l*a+i]=c)}return{rows:s,cols:o,vals:u}}initializeSimplicialSetEmbedding(){const e=this.getNEpochs(),{nComponents:n}=this,t=this.graph.getValues();let r=0;for(let e=0;e<t.length;e++){const n=t[e];r<t[e]&&(r=n)}const i=this.graph.map((n=>n<r/e?0:n));this.embedding=M(i.nRows).map((()=>M(n).map((()=>20*A(this.random)-10))));const a=[],s=[],o=[],u=i.getAll();for(let e=0;e<u.length;e++){const n=u[e];n.value&&(a.push(n.value),o.push(n.row),s.push(n.col))}return{head:s,tail:o,epochsPerSample:this.makeEpochsPerSample(a,e)}}makeEpochsPerSample(e,n){const t=E(e.length,-1),r=k(e),i=e.map((e=>e/r*n));return i.forEach(((e,r)=>{e>0&&(t[r]=n/i[r])})),t}assignOptimizationStateParameters(e){Object.assign(this.optimizationState,e)}prepareForOptimizationLoop(){const{repulsionStrength:e,learningRate:n,negativeSampleRate:t}=this,{epochsPerSample:r,headEmbedding:i,tailEmbedding:a}=this.optimizationState,s=i[0].length,o=i.length===a.length,u=r.map((e=>e/t)),l=[...u],c=[...r];this.assignOptimizationStateParameters({epochOfNextSample:c,epochOfNextNegativeSample:l,epochsPerNegativeSample:u,moveOther:o,initialAlpha:n,alpha:n,gamma:e,dim:s})}initializeOptimization(){const e=this.embedding,n=this.embedding,{head:t,tail:r,epochsPerSample:i}=this.optimizationState,a=this.getNEpochs(),s=this.graph.nCols,{a:o,b:u}=function(e,n){const t=function(e,n,t){return S(300).map(((e,t)=>0+t*((n-0)/299)))}(0,3*e).map((e=>e<n?1:e)),r=M(t.length).map(((r,i)=>t[i]>=n?Math.exp(-(t[i]-n)/e):r)),i={x:t,y:r},{parameterValues:a}=function(e,n,t={}){let{maxIterations:r=100,gradientDifference:i=.1,damping:a=0,errorTolerance:s=.01,minValues:o,maxValues:u,initialValues:l}=t;if(a<=0)throw new Error("The damping option must be a positive number");if(!e.x||!e.y)throw new Error("The data parameter must have x and y elements");if(!(0,ie.Z)(e.x)||e.x.length<2||!(0,ie.Z)(e.y)||e.y.length<2)throw new Error("The data parameter elements must be an array with more than 2 points");if(e.x.length!==e.y.length)throw new Error("The data parameter elements must have the same size");let c=l||new Array(n.length).fill(1),f=c.length;if(u=u||new Array(f).fill(Number.MAX_SAFE_INTEGER),o=o||new Array(f).fill(Number.MIN_SAFE_INTEGER),u.length!==o.length)throw new Error("minValues and maxValues must be the same size");if(!(0,ie.Z)(c))throw new Error("initialValues must be an array");let h,d=(0,ae.Z)(e,c,n),p=d<=s;for(h=0;h<r&&!p;h++){c=(0,se.Z)(e,c,a,i,n);for(let e=0;e<f;e++)c[e]=Math.min(Math.max(o[e],c[e]),u[e]);if(d=(0,ae.Z)(e,c,n),isNaN(d))break;p=d<=s}return{parameterValues:c,parameterError:d,iterations:h}}(i,(([e,n])=>t=>1/(1+e*t**(2*n))),{damping:1.5,initialValues:[.5,.5],gradientDifference:.1,maxIterations:100,errorTolerance:.01}),[s,o]=a;return{a:s,b:o}}(this.spread,this.minDist);this.assignOptimizationStateParameters({headEmbedding:e,tailEmbedding:n,head:t,tail:r,epochsPerSample:i,a:o,b:u,nEpochs:a,nVertices:s})}optimizeLayoutStep(e){const{optimizationState:n}=this,{head:t,tail:r,headEmbedding:i,tailEmbedding:a,epochsPerSample:s,epochOfNextSample:o,epochOfNextNegativeSample:u,epochsPerNegativeSample:l,moveOther:c,initialAlpha:f,alpha:h,gamma:d,a:p,b:g,dim:m,nEpochs:y,nVertices:w}=n;for(let n=0;n<s.length;n++){if(o[n]>e)continue;const f=t[n],y=r[n],b=i[f],v=a[y],A=de(b,v);let S=0;A>0&&(S=-2*p*g*Math.pow(A,g-1),S/=p*Math.pow(A,g)+1);for(let e=0;e<m;e++){const n=he(S*(b[e]-v[e]),4);b[e]+=n*h,c&&(v[e]+=-n*h)}o[n]+=s[n];const I=Math.floor((e-u[n])/l[n]);for(let e=0;e<I;e++){const e=x(w,this.random),n=a[e],t=de(b,n);let r=0;if(t>0)r=2*d*g,r/=(.001+t)*(p*Math.pow(t,g)+1);else if(f===e)continue;for(let e=0;e<m;e++){let t=4;r>0&&(t=he(r*(b[e]-n[e]),4)),b[e]+=t*h}}u[n]+=I*l[n]}return n.alpha=f*(1-e/y),n.currentEpoch+=1,i}optimizeLayoutAsync(e=(()=>!0)){return new Promise(((n,t)=>{const r=async()=>{try{const{nEpochs:t,currentEpoch:i}=this.optimizationState;this.embedding=this.optimizeLayoutStep(i);const a=this.optimizationState.currentEpoch,s=!1===e(a),o=a===t;if(s||o)return n(o);setTimeout((()=>r()),0)}catch(e){t(e)}};setTimeout((()=>r()),0)}))}optimizeLayout(e=(()=>!0)){let n=!1,t=[];for(;!n;){const{nEpochs:r,currentEpoch:i}=this.optimizationState;t=this.optimizeLayoutStep(i);const a=this.optimizationState.currentEpoch,s=!1===e(a);n=a===r||s}return t}getNEpochs(){const e=this.graph;if(this.nEpochs>0)return this.nEpochs;if(!e)return 200;const n=e.nRows;return n<=2500?500:n<=5e3?400:n<=7500?300:200}}function ce(e,n){return Math.abs(e-n)}class fe{constructor(){this.currentEpoch=0,this.headEmbedding=[],this.tailEmbedding=[],this.head=[],this.tail=[],this.epochsPerSample=[],this.epochOfNextSample=[],this.epochOfNextNegativeSample=[],this.epochsPerNegativeSample=[],this.moveOther=!0,this.initialAlpha=1,this.alpha=1,this.gamma=1,this.a=1.5769434603113077,this.b=.8950608779109733,this.dim=2,this.nEpochs=500,this.nVertices=0}}function he(e,n){return e>n?n:e<-n?-n:e}function de(e,n){let t=0;for(let r=0;r<e.length;r++)t+=Math.pow(e[r]-n[r],2);return t}var pe=t(2590),ge=t(9657),me=t(6377),ye=t.n(me);class we{assert(e,n){if(!e)throw n||"Assertion failed"}getopt(e,n,t){return e.hasOwnProperty(n)?e[n]:t}gaussRandom(){if(this.returnV)return this.returnV=!1,this.vValue;const e=2*this.random()-1,n=2*this.random()-1,t=e*e+n*n;if(0===t||t>1)return this.gaussRandom();const r=Math.sqrt(-2*Math.log(t)/t);return this.vValue=n*r,this.returnV=!0,e*r}randn(e,n){return e+this.gaussRandom()*n}zeros(e){if(void 0===e||isNaN(e))return new Float32Array;if("undefined"==typeof ArrayBuffer){const n=new Float32Array(e);for(let t=0;t<e;t++)n[t]=0;return n}return new Float32Array(e)}randn2d(e,n,t){const r=void 0!==t,i=new Array(e).fill(null).map((()=>new Float32Array(n)));if(r)for(let r=0;r<e;r++)i[r]=new Float32Array(n).fill(t);else for(let t=0;t<e;t++)for(let e=0;e<n;e++)i[t][e]=this.randn(0,1e-4);return i}l2(e,n){const t=e.length;let r=0;for(let i=0;i<t;i++){const t=e[i],a=n[i];r+=(t-a)*(t-a)}return r}xtod(e){const n=e.length,t=this.zeros(n*n);for(let r=0;r<n;r++)for(let i=r+1;i<n;i++){const a=this.l2(e[r],e[i]);t[r*n+i]=a,t[i*n+r]=a}return t}getIterSize(e){return e<=2e3?100:e<=3e3?90:e<=5e3?80:70}d2p(e,n,t,r){const i=(s=r,(e,n)=>s*e+n-Math.floor((e+2)*(e+1)/2)),a=new Float32Array(r*r);var s;for(let n=0;n<r;n++)for(let t=n+1;t<r;t++)a[n*r+t]=a[t*r+n]=e[i(n,t)];const o=r,u=Math.log(n),l=this.zeros(o*o),c=this.zeros(o);for(let e=0;e<o;e++){let n=-1/0,i=1/0,s=1,f=!1;const h=Math.floor(this.getIterSize(r)/5);let d=0;for(;!f;){let r=0;for(let n=0;n<o;n++){const t=e===n?0:Math.exp(-a[e*o+n]*s);c[n]=t,r+=t}let l=0;for(let e=0;e<o;e++){let n;n=0===r?0:c[e]/r,c[e]=n,n>1e-7&&(l-=n*Math.log(n))}l>u?(n=s,i===1/0?s*=2:s=(s+i)/2):(i=s,n===-1/0?s/=2:s=(s+n)/2),d++,Math.abs(l-u)<t&&(f=!0),d>=h&&(f=!0)}for(let n=0;n<o;n++)l[e*o+n]=c[n]}const f=this.zeros(o*o),h=2*o;for(let e=0;e<o;e++)for(let n=0;n<o;n++)f[e*o+n]=Math.max((l[e*o+n]+l[n*o+e])/h,1e-100);return f}sign(e){return e>0?1:e<0?-1:0}constructor(e){this.iter=0,this.random=Math.random,this.returnV=!1,this.vValue=0,e=e||{},this.perplexity=this.getopt(e,"perplexity",30),this.dim=this.getopt(e,"dim",2),this.epsilon=this.getopt(e,"epsilon",10),this.random=this.getopt(e,"random",Math.random)}initDataRaw(e){const n=e.length,t=e[0].length;this.assert(n>0," X is empty? You must have some data!"),this.assert(t>0," X[0] is empty? Where is the data?");const r=this.xtod(e);this.P=this.d2p(r,this.perplexity,1e-4,t),this.N=n,this.initSolution()}initDataDist(e,n){const t=e.length;this.assert(t>0," X is empty? You must have some data!"),console.time("distances to matrix"),this.P=this.d2p(e,this.perplexity,1e-4,n),console.timeEnd("distances to matrix"),this.N=n,this.initSolution()}initSolution(){this.Y=this.randn2d(this.N,this.dim),this.gains=this.randn2d(this.N,this.dim,1),this.ystep=this.randn2d(this.N,this.dim,0),this.iter=0}getSolution(){return this.Y}step(){this.iter+=1;const e=this.N,n=this.costGrad(this.Y),t=n.cost,r=n.grad,i=this.zeros(this.dim);for(let n=0;n<e;n++)for(let e=0;e<this.dim;e++){const t=r[n][e],a=this.ystep[n][e],s=this.gains[n][e];let o=this.sign(t)===this.sign(a)?.8*s:s+.2;o<.01&&(o=.01),this.gains[n][e]=o;const u=(this.iter<250?.5:.8)*a-this.epsilon*o*r[n][e];this.ystep[n][e]=u,this.Y[n][e]+=u,i[e]+=this.Y[n][e]}for(let n=0;n<e;n++)for(let t=0;t<this.dim;t++)this.Y[n][t]-=i[t]/e;return t}debugGrad(){const e=this.N,n=this.costGrad(this.Y).grad,t=1e-5;for(let r=0;r<e;r++)for(let e=0;e<this.dim;e++){const i=this.Y[r][e];this.Y[r][e]=i+t;const a=this.costGrad(this.Y);this.Y[r][e]=i-t;const s=this.costGrad(this.Y),o=n[r][e],u=(a.cost-s.cost)/(2*t);console.log(r+","+e+": gradcheck analytic: "+o+" vs. numerical: "+u),this.Y[r][e]=i}}costGrad(e){const n=this.N,t=this.dim,r=this.P,i=this.iter<100?4:1;this.quArr??(this.quArr=this.zeros(n*n));let a=0;for(let r=0;r<n;r++)for(let i=r+1;i<n;i++){const s=1/(1+new Array(t).reduce(((n,t,a)=>n+Math.pow(e[r][a]-e[i][a],2)),0));this.quArr[r*n+i]=s,this.quArr[i*n+r]=s,a+=2*s}let s=0;const o=new Array(n).fill(null).map((()=>new Float32Array(t).fill(0)));for(let u=0;u<n;u++)for(let l=u+1;l<n;l++){const c=Math.max(this.quArr[u*n+l]/a,1e-100);s+=-r[u*n+l]*Math.log(c)*2;const f=4*(i*r[u*n+l]-c)*this.quArr[u*n+l];for(let n=0;n<t;n++)o[u][n]+=f*(e[u][n]-e[l][n]),o[l][n]+=f*(e[l][n]-e[u][n])}return{cost:s,grad:o}}}t(7905);var be=function(e,n,t,r){return new(t||(t=Promise))((function(i,a){function s(e){try{u(r.next(e))}catch(e){a(e)}}function o(e){try{u(r.throw(e))}catch(e){a(e)}}function u(e){var n;e.done?i(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(s,o)}u((r=r.apply(e,n||[])).next())}))};let ve=null,xe=null;function Ae(){return be(this,void 0,void 0,(function*(){if(!ve&&(ve=yield navigator.gpu.requestAdapter({powerPreference:"high-performance"}),null==ve))return null;let e=!1;if(xe&&(xe.lost.then((()=>{e=!0})),yield new Promise((e=>setTimeout(e,10)))),!xe||e){const e=1e9,n=ve.limits,t=n.maxBufferSize,r=n.maxStorageBufferBindingSize;try{return xe=yield ve.requestDevice({requiredLimits:{maxBufferSize:Math.min(t,e),maxStorageBufferBindingSize:Math.min(r,e)}}),xe}catch(e){return console.error("Failed to create device with required limits",e),xe=yield ve.requestDevice(),xe}}return xe}))}var Se,Ie;(Ie=Se||(Se={})).EUCLIDEAN="EUCLIDEAN",Ie.MANHATTAN="MANHATTAN";const Ee={[Se.EUCLIDEAN]:function(e){return`\n var sum = 0.0;\n for (var i = 0u; i < ${e}; i = i + 1u) {\n sum = sum + distances[i] * distances[i] * computeInfo.weights[i] * computeInfo.weights[i];\n }\n return sqrt(sum);\n `},[Se.MANHATTAN]:function(e){return`\n var sum = 0.0;\n for (var i = 0u; i < ${e}; i = i + 1u) {\n sum = sum + abs(distances[i]) * computeInfo.weights[i];\n }\n return sum;\n `}};var Me,Ne;(Ne=Me||(Me={})).HAMMING="Hamming",Ne.EUCLIDEAN="Euclidean",Ne.MANHATTAN="Manhattan",Ne.TANIMOTO="Tanimoto",Ne.LEVENSTEIN="Levenshtein",Ne.NEEDLEMAN_WUNSCH="Needlemann-Wunsch",Ne.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance",Ne.SOKAL="Sokal",Ne.COSINE="Cosine",Ne.ASYMMETRIC="Asymmetric",Ne.Difference="Difference",Ne.OneHot="One-Hot";const ke={[Me.HAMMING]:function(e,n){return`\n let aLength: u32 = computeInfo.entrySizes[${n}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${n}][bIndex];\n let maxLength: u32 = max(aLength, bLength);\n let minLength: u32 = min(aLength, bLength);\n let sizeDiff: u32 = maxLength - minLength;\n \n let maxIntDistance = ceil(maxDistance * f32(maxLength)) - f32(sizeDiff);\n\n var diff: f32 = 0.0;\n for (var i = 0u; i < ${e}; i = i + 1u) {\n diff = diff + f32(a[i] != b[i]);\n if (diff > maxIntDistance) {\n return 1.0;\n }\n }\n diff += f32(sizeDiff);\n return diff / ${e};\n `},[Me.EUCLIDEAN]:function(e,n){return`\n var dist: f32 = 0.0;\n for (var i = 0u; i < ${e}; i = i + 1u) {\n dist = dist + f32(a[i] - b[i]) * f32(a[i] - b[i]);\n }\n return sqrt(dist);\n `},[Me.MANHATTAN]:function(e,n){return`\n var dist: f32 = 0.0;\n for (var i = 0u; i < ${e}; i = i + 1u) {\n dist = dist + abs(f32(a[i] - b[i]));\n }\n return dist;\n `},[Me.TANIMOTO]:function(e,n){return`\n var onBitsa: u32 = 0u;\n var onBitsb: u32 = 0u;\n for (var i = 0u; i < ${e}u; i = i + 1u) {\n onBitsa = onBitsa + countOneBits(a[i]);\n onBitsb = onBitsb + countOneBits(b[i]);\n }\n\n if (onBitsa == 0u && onBitsb == 0u) {\n return 0.0;\n }\n\n let totalOnBits = onBitsa + onBitsb;\n var commonBits: u32 = 0u;\n for (var i = 0u; i < ${e}u; i = i + 1u) {\n commonBits = commonBits + countOneBits(a[i] & b[i]);\n }\n\n return 1.0 - f32(commonBits) / f32(totalOnBits - commonBits);\n `},[Me.LEVENSTEIN]:function(e,n){return`\n let aLength: u32 = computeInfo.entrySizes[${n}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${n}][bIndex];\n let maxLength: u32 = max(aLength, bLength);\n let minLength: u32 = min(aLength, bLength);\n\n let maxIntDistance = ceil(maxDistance * f32(maxLength));\n\n // we will store two arrays as matrix and swap the working indices per pass.\n // this way we can reduce memory usage per computation to just O(aLength)\n // the grid will have aLength + 1 columns and bLength + 1 rows\n // this will be guaranteed by iteration, but the array sizes must be known at compile time, so we will use a fixed size of maxArraySize\n var dynamicPassMat: array<array<f32, ${e+1}u>, 2>; // initialize to 0\n \n var prevIndex: u32 = 0;\n var curIndex: u32 = 1; // we will swap these indices per pass\n\n // initialize the first row\n for (var i = 0u; i <= aLength; i = i + 1u) {\n dynamicPassMat[prevIndex][i] = f32(i);\n }\n\n // iterate over the rows\n for (var i = 1u; i <= bLength; i = i + 1u) {\n dynamicPassMat[curIndex][0] = f32(i);\n var minEntry: f32 = f32(maxLength);\n let prevRow = &dynamicPassMat[prevIndex];\n let curRow = &dynamicPassMat[curIndex];\n let bMon = u32(b[i - 1]);\n for (var j = 1u; j <= aLength; j = j + 1u) {\n var cost: f32 = f32(a[j - 1] != bMon);\n var res: f32 = min(\n min(\n (*prevRow)[j] + 1.0, // deletion\n (*curRow)[j - 1] + 1.0, // insertion\n ),\n (*prevRow)[j - 1] + cost // substitution\n );\n (*curRow)[j] = res;\n if (res < minEntry) {\n minEntry = res;\n }\n }\n // swap the indices\n let temp: u32 = prevIndex;\n prevIndex = curIndex;\n curIndex = temp;\n if (minEntry > maxIntDistance) {\n return 1.0;\n }\n }\n\n return dynamicPassMat[prevIndex][aLength] / f32(maxLength);\n `},[Me.NEEDLEMAN_WUNSCH]:function(e,n){return`\n let aLength: u32 = computeInfo.entrySizes[${n}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${n}][bIndex];\n let maxLength: u32 = max(aLength, bLength);\n let minLength: u32 = min(aLength, bLength);\n \n let maxIntDistance = ceil(maxDistance * f32(maxLength));\n // we will store two arrays as matrix and swap the working indices per pass.\n // this way we can reduce memory usage per computation to just O(aLength)\n // the grid will have aLength + 1 columns and bLength + 1 rows\n // this will be guaranteed by iteration, but the array sizes must be known at compile time, so we will use a fixed size of maxArraySize\n var dynamicPassMat: array<array<f32, ${e+1}u>, 2>; // initialize to 0\n \n // we need to keep track of which operation led to the current cell\n // i.e. whether we came from the left, top or diagonal to assign gap open/gap extend penalty\n var verticalGaps: array<u32, ${e+1}u>;\n var horizontalGaps: array<u32, ${e+1}u>;\n\n let gapOpenPenalty: f32 = suppInfo.gapOpenPenalty${n};\n let gapExtensionPenalty: f32 = suppInfo.gapExtensionPenalty${n};\n var prevIndex: u32 = 0;\n var curIndex: u32 = 1; // we will swap these indices per pass\n // initialize the first row\n for (var i = 0u; i <= aLength; i = i + 1u) {\n dynamicPassMat[prevIndex][i] = gapOpenPenalty + f32(i - 1) * gapExtensionPenalty;\n dynamicPassMat[curIndex][i] = 0.0;\n }\n dynamicPassMat[0][0] = 0.0;\n\n let simMatrix = &suppInfo.similarityMatrix${n}; // using pointers make things faster\n // iterate over the rows\n for (var i = 1u; i <= bLength; i = i + 1u) {\n let prevRow = &dynamicPassMat[prevIndex];\n let curRow = &dynamicPassMat[curIndex];\n (*curRow)[0] = gapOpenPenalty + f32(i - 1) * gapExtensionPenalty;\n var minEntry: f32 = f32(maxLength);\n let monB = u32(b[i - 1]);\n for (var j = 1u; j <= aLength; j = j + 1u) {\n let monA = u32(a[j - 1]);\n \n let cost: f32 = (*prevRow)[j - 1] + 1f - (*simMatrix)[monA][monB];\n var top = (*prevRow)[j]; // deletion\n if (verticalGaps[j] > 0) {\n top = top + gapExtensionPenalty;\n } else {\n top = top + gapOpenPenalty;\n }\n var left = (*curRow)[j - 1]; // insertion\n if (horizontalGaps[j - 1] > 0) {\n left = left + gapExtensionPenalty;\n } else {\n left = left + gapOpenPenalty;\n }\n var res: f32 = min(\n min(\n top, // deletion\n left, // insertion\n ),\n cost // substitution\n );\n (*curRow)[j] = res;\n if (res < minEntry) {\n minEntry = res;\n }\n // update the horizontal and vertical gaps\n if (res == cost) {\n verticalGaps[j] = 0;\n horizontalGaps[j] = 0;\n } else if (res == left) {\n verticalGaps[j] = 0;\n horizontalGaps[j] = 1;\n } else {\n verticalGaps[j] = 1;\n horizontalGaps[j] = 0;\n }\n }\n // swap the indices\n let temp: u32 = prevIndex;\n prevIndex = curIndex;\n curIndex = temp;\n if (minEntry > maxIntDistance) {\n return 1.0;\n }\n }\n return dynamicPassMat[prevIndex][aLength] / f32(maxLength);\n \n `},[Me.MONOMER_CHEMICAL_DISTANCE]:function(e,n){return`\n let aLength: u32 = computeInfo.entrySizes[${n}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${n}][bIndex];\n let maxLength: u32 = max(aLength, bLength);\n let minLength: u32 = min(aLength, bLength);\n let sizeDiff: u32 = maxLength - minLength;\n \n let maxIntDistance = ceil(maxDistance * f32(maxLength)) - f32(sizeDiff);\n\n let simMatrix = &(suppInfo.similarityMatrix${n}); // using pointers make things faster\n var diff: f32 = 0.0;\n for (var i = 0u; i < ${e}; i = i + 1u) {\n diff = diff + 1.0 - (*simMatrix)[u32(a[i])][u32(b[i])];\n if (diff > maxIntDistance) {\n return 1.0;\n }\n }\n diff += f32(sizeDiff);\n return diff / ${e};\n `},[Me.SOKAL]:function(e,n){return`\n var onBitsa: u32 = 0u;\n var onBitsb: u32 = 0u;\n for (var i = 0u; i < ${e}u; i = i + 1u) {\n onBitsa = onBitsa + countOneBits(a[i]);\n onBitsb = onBitsb + countOneBits(b[i]);\n }\n let total = onBitsa + onBitsb;\n if (total == 0u) {\n return 1.0;\n }\n var commonBits: u32 = 0u;\n for (var i = 0u; i < ${e}u; i = i + 1u) {\n commonBits = commonBits + countOneBits(a[i] & b[i]);\n }\n return 1.0 - f32(commonBits) / f32(total * 2 - commonBits * 3);\n `},[Me.COSINE]:function(e,n){return`\n var onBitsa: u32 = 0u;\n var onBitsb: u32 = 0u;\n for (var i = 0u; i < ${e}u; i = i + 1u) {\n onBitsa = onBitsa + countOneBits(a[i]);\n onBitsb = onBitsb + countOneBits(b[i]);\n }\n let total = onBitsa * onBitsb; // p.s. here total is taken by multiplying\n if (total == 0u) {\n return 1.0;\n }\n var commonBits: u32 = 0u;\n for (var i = 0u; i < ${e}u; i = i + 1u) {\n commonBits = commonBits + countOneBits(a[i] & b[i]);\n }\n return 1.0 - f32(commonBits) / sqrt(f32(total));\n `},[Me.ASYMMETRIC]:function(e,n){return`\n var onBitsa: u32 = 0u;\n var onBitsb: u32 = 0u;\n for (var i = 0u; i < ${e}u; i = i + 1u) {\n onBitsa = onBitsa + countOneBits(a[i]);\n onBitsb = onBitsb + countOneBits(b[i]);\n }\n let min = min(onBitsa, onBitsb);\n if (min == 0u) {\n return 1.0;\n }\n var commonBits: u32 = 0u;\n for (var i = 0u; i < ${e}u; i = i + 1u) {\n commonBits = commonBits + countOneBits(a[i] & b[i]);\n }\n return 1.0 - f32(commonBits) / f32(min);\n `},[Me.Difference]:function(e,n){return`\n let range = suppInfo.range${n};\n return f32(abs(f32(a[0]) - f32(b[0])) / range);\n `},[Me.OneHot]:function(e,n){return`\n let aLength: u32 = computeInfo.entrySizes[${n}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${n}][bIndex];\n if (aLength != bLength) {\n return 1.0;\n }\n for (var i = 0u; i < aLength; i = i + 1u) {\n if(a[i] != b[i]) {\n return 1.0;\n }\n }\n return 0.0;\n `}},Pe={[Me.HAMMING]:e=>Math.ceil(e/30),[Me.EUCLIDEAN]:e=>Math.ceil(e/30),[Me.MANHATTAN]:e=>Math.ceil(e/30),[Me.TANIMOTO]:e=>Math.ceil(e/60),[Me.SOKAL]:e=>Math.ceil(e/60),[Me.COSINE]:e=>Math.ceil(e/60),[Me.ASYMMETRIC]:e=>Math.ceil(e/60),[Me.LEVENSTEIN]:e=>Math.ceil(e*e/60),[Me.NEEDLEMAN_WUNSCH]:e=>Math.ceil(e*e/60),[Me.MONOMER_CHEMICAL_DISTANCE]:e=>Math.ceil(e/25),[Me.Difference]:e=>1,[Me.OneHot]:e=>Math.ceil(e/40)},De={STRING:new Set([Me.HAMMING,Me.LEVENSTEIN,Me.NEEDLEMAN_WUNSCH,Me.MONOMER_CHEMICAL_DISTANCE,Me.OneHot]),UINT32ARRAY:new Set([Me.HAMMING,Me.EUCLIDEAN,Me.MANHATTAN,Me.MONOMER_CHEMICAL_DISTANCE,Me.LEVENSTEIN,Me.NEEDLEMAN_WUNSCH,Me.TANIMOTO,Me.COSINE,Me.SOKAL,Me.ASYMMETRIC,Me.OneHot,Me.Difference]),INT32ARRAY:new Set([Me.EUCLIDEAN,Me.MANHATTAN,Me.OneHot,Me.Difference]),FLOAT32ARRAY:new Set([Me.EUCLIDEAN,Me.MANHATTAN,Me.Difference]),NUMBER:new Set([Me.EUCLIDEAN,Me.MANHATTAN,Me.Difference]),BITARRAY:new Set([Me.TANIMOTO,Me.COSINE,Me.SOKAL,Me.ASYMMETRIC])};var Ce,Ue,Re;function Be(e,n=15,t,r,i,a){return s=this,o=void 0,l=function*(){if(a.length!==e.length||a.length!==t.length||a.length!==i.length)throw new Error("Options, weigths and distance functions must be provided for each column");if(e.some((n=>n.length!==e[0].length)))throw new Error("All entry lists must be the same length");const s=Object.values(Me);if(t.some((e=>!s.includes(e))))throw new Error("Invalid distance metrics provided: "+t.join(", "));if(!Object.values(Se).includes(r))throw new Error("Invalid aggregation function provided: "+r);const o=e.length;if(0===o)throw new Error("No columns provided. Please provide at least one column of data.");const u=yield Ae();if(!u)return null;let l=!1;u.lost.then((()=>{l=!0}));const c=e[0].length,f=e.map(((e,n)=>function(e,n=Me.HAMMING,t,r={gapOpenPenalty:1,gapExtensionPenalty:.6}){var i,a;let s=null;const o=e.some((e=>"string"==typeof e))?(s="STRING",e.map((e=>new Uint32Array(e.split("").map((e=>e.charCodeAt(0))))))):e.some((e=>"number"==typeof e))?(s="NUMBER",e.map((e=>new Float32Array([e])))):"object"==typeof e[0]&&e.some((e=>"_data"in e&&"_length"in e))?(s="BITARRAY",e.map((e=>e._data))):e.some((e=>e instanceof Float32Array))?(s="FLOAT32ARRAY",e):e.some((e=>e instanceof Uint32Array))?(s="UINT32ARRAY",e):e.some((e=>e instanceof Int32Array))?(s="INT32ARRAY",e):void 0;if(!o||!s)throw new Error("Invalid entry type, could not determine entry type from input list");const u=o[0]instanceof Int32Array?"INT32ARRAY":o[0]instanceof Float32Array?"FLOAT32ARRAY":"UINT32ARRAY",l=new Uint32Array(o.map((e=>e.length)));if(!De[s]||!De[s].has(n))throw new Error(`Distance metric '${n}' not supported for entry type '${s}'`);const c=l.reduce(((e,n)=>Math.max(e,n)),0),f=Pe[n](c),h="INT32ARRAY"===u?Int32Array:"FLOAT32ARRAY"===u?Float32Array:Uint32Array,d=new h(o.length*c);o.forEach(((e,n)=>{d.set(e,n*c)}));let p="",g=0,m="FLOAT32ARRAY",y=null;if(n===Me.NEEDLEMAN_WUNSCH||n===Me.MONOMER_CHEMICAL_DISTANCE){let e=r.scoringMatrix&&r.alphabetIndexes?Object.keys(r.alphabetIndexes).reduce(((e,n)=>Math.max(e,n.charCodeAt(0))),0):-1;if(!r.alphabetIndexes||!r.scoringMatrix){for(let n=0;n<d.length;n++)d[n]>e&&(e=d[n]);r.scoringMatrix=new Array(e+1).fill(null).map((()=>new Array(e+1).fill(0))),r.alphabetIndexes={};for(let e=0;e<r.scoringMatrix.length;e++)r.scoringMatrix[e][e]=1,r.alphabetIndexes[String.fromCharCode(e)]=e}const n=(e+1)*(e+1),s=new Array(e+1).fill(null).map((()=>new Float32Array(e+1)));for(let n=0;n<e+1;n++)s[n][n]=1;const o=r.alphabetIndexes;for(const e of Object.keys(o))for(const n of Object.keys(o))e!==n&&(s[e.charCodeAt(0)][n.charCodeAt(0)]=r.scoringMatrix[o[e]][o[n]]);g=2+n,m="FLOAT32ARRAY",y=new Float32Array(g),y[0]=null!==(i=r.gapOpenPenalty)&&void 0!==i?i:1,y[1]=null!==(a=r.gapExtensionPenalty)&&void 0!==a?a:.6;let u=2;for(let e=0;e<s.length;e++)y.set(s[e],u),u+=s[e].length;p=`\n gapOpenPenalty${t}: f32,\n gapExtensionPenalty${t}: f32,\n similarityMatrix${t}: array<array<f32, ${e+1}>, ${e+1}>`}else if(n===Me.Difference){if(!r.range||"number"!=typeof r.range||r.range<=0){const e=d.reduce(((e,n)=>Math.min(e,n)),d[0]),n=d.reduce(((e,n)=>Math.max(e,n)),d[0]);r.range=n-e}r.range<=0&&(r.range=1),g=1,m="FLOAT32ARRAY",y=new Float32Array([r.range]),p=`\n range${t}: f32`}const w=d instanceof Int32Array?"i32":d instanceof Float32Array?"f32":"u32",b=`data${t}: array<array<${w}, ${c}>, ${o.length}>`;return{flatSourceArray:d,sourceArraySize:d.length,maxEntryLen:c,arraySizes:l,complexity:f,suppInfoBuffer:y,suppInfoSize:g,suppInfoType:m,suppInfoStructWgsl:p,entryType:s,dataTypeWGSL:w,dataStructWgsl:b,EncodedArrayConstructor:h}}(e,t[n],n,a[n])));1===o&&(r=Se.MANHATTAN);let h=f.map((e=>e.suppInfoStructWgsl)).filter((e=>!!e&&""!=e)).join(",\n"),d=!1;h&&""!=h.trim()||(d=!0,h="\ndummy: f32\n");const p=f.reduce(((e,n)=>e+n.complexity),0),g=f.map((e=>e.dataStructWgsl)).filter((e=>!!e&&""!=e)).join(",\n"),m=new Uint32Array(o*c);f.forEach(((e,n)=>{m.set(e.arraySizes,n*c)}));const y=1e4,w=Math.ceil(1e4/p),b=Math.ceil(Math.sqrt(Math.ceil(100))),v=10*b,x=new Array(c).fill(null).map((()=>new Uint32Array(n))),A=new Array(c).fill(null).map((()=>new Float32Array(n))),S=u.createShaderModule({label:"KNN compute shader",code:`\n // this struct will contain all the info about the computation, startAtEndAt will contain the start and end of the knnDistances and knnIndexes.\n // array of sizes for each entries, and the main data as arrays of arrays called data0, data1 and so on. good thing is that because the first entry is vec4<u32>,\n // there will be no paddings, so no need to worry about padding data. also, arrays and matrices get stucked together, so no padding there as well.\n // what we need to worry about is the padding of overall struct. the size of overall struct will be factor of 16 bytes, so keep that in mind.\n struct ComputeInfo {\n // the x coordinate will contain the start index of the knnDistances and knnIndexes, while y will contain the end index \n // the z coordinate will contain the start of the pair comparisons, while w will contain the end of the pair comparisons\n // just keep in mind that this vec4 will be in first 16 bytes of corresponding buffer.\n startAtEndAt: vec4<u32>,\n // the ACTUALLY sizes of each entry\n entrySizes: array<array<u32, ${c}>, ${o}>,\n // the weights for each entry\n weights: array<f32, ${o}>,\n // the data for each entry\n ${g} // an example of the dataWgsl would be:\n //data0: array<array<u32,20>,100>,\n //data1: array<array<u32,20>,100>\n };\n\n struct SuppInfo {\n // struct containing all the supplementary info, like scoring matrix, alphabet indexes, range, etc.\n ${h}\n };\n \n @group(0) @binding(0) var<storage, read_write> knnIndexes: array<array<u32, ${n}>, 10000>;\n @group(0) @binding(1) var<storage, read_write> knnDistances: array<array<f32, ${n}>, 10000>; // each time just compute for a subset of the list\n @group(0) @binding(2) var<storage, read_write> computeInfo: ComputeInfo;\n @group(0) @binding(3) var<storage, read_write> suppInfo: SuppInfo;\n \n @compute @workgroup_size(10, 10) fn calcKNN(\n @builtin(global_invocation_id) id: vec3<u32>\n ) {\n ${d?"let otherDummy = suppInfo.dummy * 2;":""} // just to make sure that the suppInfo is not optimized out\n let col = id.x; //* 10 + localId.x;\n let row = id.y; //* 10 + localId.y;\n let graphIndex = row * ${v} + col;\n let index = graphIndex + computeInfo.startAtEndAt.x; // add the starting index of the knnDistances and knnIndexes\n \n if (index >= min(${c}u, computeInfo.startAtEndAt.y)) {return;}\n \n let pairComparisonStartAt = computeInfo.startAtEndAt.z;\n let pairComparisonEndAt = min(computeInfo.startAtEndAt.w, ${c}u);\n \n \n // only clear the knnDistances and knnIndexes if we are at the start of the pair comparison\n if (pairComparisonStartAt == 0u) {\n for (var i = 0u; i < ${n}; i = i + 1u) {\n knnDistances[graphIndex][i] = 99999.0;\n knnIndexes[graphIndex][i] = 0u;\n }\n }\n \n for (var i: u32 = pairComparisonStartAt; i < pairComparisonEndAt; i = i + 1u) {\n if (i == index) {continue;}\n let dist = combinedDistance(index, i);\n insertKnn(graphIndex, dist, i);\n }\n \n }\n // this will generate the distance script for each distance metric and then combine them into one\n ${Oe(t,f.map((e=>e.maxEntryLen)),n,r)}\n \n fn insertKnn(knnIndex: u32, dist: f32, index: u32) {\n // small optimization, if the distance is larger than the last element in the knnDistances, we can skip\n if (dist >= knnDistances[knnIndex][${n} - 1u]) {return;}\n for (var i = 0u; i < ${n}; i = i + 1u) {\n if (dist < knnDistances[knnIndex][i]) {\n for (var j = ${n} - 1u; j > i; j = j - 1u) {\n knnDistances[knnIndex][j] = knnDistances[knnIndex][j - 1u];\n knnIndexes[knnIndex][j] = knnIndexes[knnIndex][j - 1u];\n }\n knnDistances[knnIndex][i] = dist;\n knnIndexes[knnIndex][i] = index;\n return;\n }\n }\n }\n `}),I=u.createComputePipeline({label:"hamming compute pipeline",layout:"auto",compute:{module:S,entryPoint:"calcKNN"}}),E=4+o*c+o+f.reduce(((e,n)=>e+n.sourceArraySize),0),M=f.reduce(((e,n)=>e+n.suppInfoSize),0),N=E*Uint32Array.BYTES_PER_ELEMENT;let k=N;const P=15&N;0!==P&&(k+=16-P);const D=u.createBuffer({label:"compute info buffer",size:k,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),C=D.getMappedRange();let U=0,R=y,B=0,O=w,_=0;new Uint32Array(C,_,4).set([U,R,B,O]),_+=4*Uint32Array.BYTES_PER_ELEMENT,new Uint32Array(C,_,m.length).set(m),_+=m.byteLength,new Float32Array(C,_,o).set(i),_+=o*Float32Array.BYTES_PER_ELEMENT;for(const e of f){const n=e.EncodedArrayConstructor,t=e.sourceArraySize;new n(C,_,t).set(e.flatSourceArray),_+=t*n.BYTES_PER_ELEMENT}D.unmap();const z=M*Uint32Array.BYTES_PER_ELEMENT;let T=z;const L=15&z;0!==L&&(T+=16-L),T=Math.max(T,16);const G=u.createBuffer({label:"supp info buffer",size:T,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),$=G.getMappedRange();let F=0;for(const e of f)e.suppInfoBuffer&&e.suppInfoBuffer.byteLength>0&&e.suppInfoSize>0&&(new("UINT32ARRAY"===e.suppInfoType?Uint32Array:Float32Array)($,F,e.suppInfoBuffer.length).set(e.suppInfoBuffer),F+=e.suppInfoBuffer.byteLength);0===F&&new Uint32Array($,0,4).set([1,1,1,1]),G.unmap();const j=n*Uint32Array.BYTES_PER_ELEMENT*y,Y=u.createBuffer({label:"buffer distances",size:j,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC}),W=u.createBuffer({label:"buffer indexes",size:j,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC}),K=n*Uint32Array.BYTES_PER_ELEMENT,V=u.createBindGroup({label:"bindGroup for knn buffer",layout:I.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:W}},{binding:1,resource:{buffer:Y}},{binding:2,resource:{buffer:D}},{binding:3,resource:{buffer:G}}]}),q=u.createBuffer({label:"result buffer distances",size:Y.size,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),H=u.createBuffer({label:"result buffer indexes",size:W.size,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST});for(let e=0;e<Math.ceil(c/y);e++){U=e*y,R=Math.min((e+1)*y,c);const t=Math.ceil(c/w);for(let e=0;e<t;e++){B=e*w,O=Math.min((e+1)*w,c),u.queue.writeBuffer(D,0,new Uint32Array([U,R,B,O]));const r=u.createCommandEncoder({label:"distance encoder"}),i=r.beginComputePass({label:"distance compute pass"});if(i.setPipeline(I),i.setBindGroup(0,V),i.dispatchWorkgroups(b,Math.ceil(y/b/100)),i.end(),e===t-1){r.copyBufferToBuffer(Y,0,q,0,q.size),r.copyBufferToBuffer(W,0,H,0,H.size);const e=r.finish();u.queue.submit([e]),yield u.queue.onSubmittedWorkDone(),yield q.mapAsync(GPUMapMode.READ),yield H.mapAsync(GPUMapMode.READ);const t=H.getMappedRange(),i=q.getMappedRange();for(let e=0;e<R-U;e++){const r=new Uint32Array(t,e*K,n),a=new Float32Array(i,e*K,n);x[U+e].set(r),A[U+e].set(a)}H.unmap(),q.unmap()}else{const e=r.finish();u.queue.submit([e]),yield u.queue.onSubmittedWorkDone()}if(l)return null}}return Y.destroy(),W.destroy(),D.destroy(),G.destroy(),q.destroy(),H.destroy(),l?null:{knnIndexes:x,knnDistances:A}},new((u=void 0)||(u=Promise))((function(e,n){function t(e){try{i(l.next(e))}catch(e){n(e)}}function r(e){try{i(l.throw(e))}catch(e){n(e)}}function i(n){var i;n.done?e(n.value):(i=n.value,i instanceof u?i:new u((function(e){e(i)}))).then(t,r)}i((l=l.apply(s,o||[])).next())}));var s,o,u,l}function Oe(e,n,t,r){return e.map(((e,r)=>`\n fn distanceScript${r}(aIndex: u32, bIndex: u32) -> f32 {\n let a = computeInfo.data${r}[aIndex];\n let b = computeInfo.data${r}[bIndex];\n let maxDistance: f32 = knnDistances[aIndex - computeInfo.startAtEndAt.x][${t} - 1u];\n ${ke[e](n[r],r)}\n }\n `)).join("\n")+"\n"+`\n fn combinedDistance(aIndex: u32, bIndex: u32) -> f32 {\n var distances: array<f32, ${e.length}>;\n ${e.map(((e,n)=>`distances[${n}] = distanceScript${n}(aIndex, bIndex);`)).join("\n")}\n ${Ee[r](e.length)}\n }\n \n `}!function(e){e.ADD="ADD",e.SUB="SUB",e.MULT="MULT"}(Ce||(Ce={})),function(e){e.SQUARE="SQUARE",e.INVERSE="INVERSE",e.TRANSPOSE="TRANSPOSE",e.NORM="NORM",e.COLUMN_NORM="COLUMN_NORM"}(Ue||(Ue={})),function(e){e.SCALARMULT="SCALARMULT",e.SCALARADD="SCALARADD",e.SCALARPOW="SCALARPOW"}(Re||(Re={}));var _e=function(e,n,t,r){return new(t||(t=Promise))((function(i,a){function s(e){try{u(r.next(e))}catch(e){a(e)}}function o(e){try{u(r.throw(e))}catch(e){a(e)}}function u(e){var n;e.done?i(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(s,o)}u((r=r.apply(e,n||[])).next())}))};function ze(e,n,t,r,i,a,s,o,u){return _e(this,void 0,void 0,(function*(){const l=Math.ceil(s/100),c=Math.ceil(Math.sqrt(l)),f=10*c,h=t[t.length-1],d=a[a.length-1],p=o[o.length-1],g=`\n struct SparseKNNStorage1 {\n indexes:array<i32, ${h}>,\n knnDistances: array<f32, ${h}>,\n offsets: array<u32, ${s+1}>\n }\n\n struct SparseKNNStorage2 {\n indexes:array<i32, ${d}>,\n knnDistances: array<f32, ${d}>,\n offsets: array<u32, ${s+1}>\n }\n\n struct ResKnn {\n knnIndexes: array<i32, ${p}>,\n knnDistances: array<f32, ${p}>\n }\n\n @group(0) @binding(0) var<storage, read_write> source1: SparseKNNStorage1;\n @group(0) @binding(1) var<storage, read_write> source2: SparseKNNStorage2;\n @group(0) @binding(2) var<storage, read_write> result: ResKnn;\n @group(0) @binding(3) var<storage, read_write> unionMatrixOffsets: array<u32, ${s+1}>;\n @compute @workgroup_size(10, 10) fn pairwiseOp(\n @builtin(global_invocation_id) id: vec3<u32>,\n ) {\n\n let col: u32 = id.x;\n let row: u32 = id.y;\n let workingIndex: u32 = row * ${f} + col;\n\n if (workingIndex >= ${s}) {\n return;\n }\n var curUnionOffset: u32 = unionMatrixOffsets[workingIndex]; // offset at which to start writing in union matrix\n\n let start1 = source1.offsets[workingIndex];\n let end1 = source1.offsets[workingIndex + 1];\n let start2 = source2.offsets[workingIndex];\n let end2 = source2.offsets[workingIndex + 1];\n // TODO: sort a copy of these arrays, will make operation faster\n for (var i: u32 = start1; i < end1; i++) {\n let val1: f32 = source1.knnDistances[i];\n var val2: f32 = 0.0;\n let curIndex: i32 = source1.indexes[i];\n for (var j: u32 = start2; j < end2; j++) {\n if (source2.indexes[j] == curIndex) {\n val2 = source2.knnDistances[j];\n break;\n }\n }\n \n result.knnIndexes[curUnionOffset] = curIndex;\n result.knnDistances[curUnionOffset] = val1 ${u} val2;\n curUnionOffset += 1;\n }\n\n if (curUnionOffset >= unionMatrixOffsets[workingIndex + 1]) {\n // small optimization applicable only to our case, but saves a good amount of time\n return;\n }\n\n // do the same for source2 but skip the indexes where they are already present in source1\n for (var i: u32 = start2; i < end2; i++) {\n let val1: f32 = source2.knnDistances[i];\n let curIndex: i32 = source2.indexes[i];\n var found = false;\n for (var j: u32 = start1; j < end1; j++) {\n if (source1.indexes[j] == curIndex) {\n found = true;\n break;\n }\n }\n if (!found) {\n result.knnIndexes[curUnionOffset] = curIndex;\n result.knnDistances[curUnionOffset] = val1 ${u} 0.0;\n curUnionOffset += 1;\n }\n }\n }\n`;let m=4*(2*h+s+1);const y=15&m;0!==y&&(m+=16-y);let w=4*(2*d+s+1);const b=15&w;0!==b&&(w+=16-b);let v=2*p*4;const x=15&v;0!==x&&(v+=16-x);const A=yield Ae();if(null==A)return;const S=A.createShaderModule({label:"pairwiseOpShader",code:g}),I=A.createComputePipeline({label:"pairwiseOpPipeline",layout:"auto",compute:{module:S,entryPoint:"pairwiseOp"}}),E=A.createBuffer({label:"source 1 buffer",size:m,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),M=E.getMappedRange();new Int32Array(M,0,h).set(e),new Float32Array(M,4*h,h).set(n),new Uint32Array(M,8*h,s+1).set(t),E.unmap();const N=A.createBuffer({label:"source 2 buffer",size:w,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),k=N.getMappedRange();new Int32Array(k,0,d).set(r),new Float32Array(k,4*d,d).set(i),new Uint32Array(k,8*d,s+1).set(a),N.unmap();const P=A.createBuffer({label:"res buffer",size:v,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}),D=A.createBuffer({label:"union matrix offsets buffer",size:4*(s+1),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),C=D.getMappedRange();new Uint32Array(C).set(o),D.unmap();const U=A.createBindGroup({label:"bindGroup for pairwise ops",layout:I.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:E}},{binding:1,resource:{buffer:N}},{binding:2,resource:{buffer:P}},{binding:3,resource:{buffer:D}}]}),R=A.createCommandEncoder({label:"matrix ops encoder"}),B=R.beginComputePass({label:"matrix ops compute pass"});B.setPipeline(I),B.setBindGroup(0,U),B.dispatchWorkgroups(c,c),B.end();const O=A.createBuffer({label:"result buffer",size:v,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST});R.copyBufferToBuffer(P,0,O,0,O.size);const _=R.finish();A.queue.submit([_]),yield A.queue.onSubmittedWorkDone(),yield O.mapAsync(GPUMapMode.READ);const z=O.getMappedRange(),T=new Int32Array(p),L=new Float32Array(p);return T.set(new Int32Array(z,0,p)),L.set(new Float32Array(z,4*p,p)),O.unmap(),O.destroy(),E.destroy(),N.destroy(),P.destroy(),D.destroy(),{resultKnnIndexes:T,resultKnnDistances:L}}))}const Te=Object.prototype.toString;function Le(e){const n=Te.call(e);return n.endsWith("Array]")&&!n.includes("Big")}function Ge(e,n,t,r){let i=0;const a=t(n);for(let n=0;n<e.x.length;n++)i+=Math.pow(e.y[n]-a(e.x[n]),2)/r[n];return i}var $e=t(938),Fe=t(4720);function je(e,n,t,r,i,a,s){let o=t,u=$e.Z.eye(n.length,n.length,o);const l=i(n);let c=new Float64Array(e.x.length);for(let n=0;n<e.x.length;n++)c[n]=l(e.x[n]);let f=function(e,n,t,r,i,a){const s=t.length,o=e.x.length;let u=$e.Z.zeros(s,o),l=0;for(let c=0;c<s;c++){if(0===r[c])continue;let s=r[c],f=t.slice();f[c]+=s;let h=i(f);if(a){f=t.slice(),f[c]-=s,s*=2;let n=i(f);for(let t=0;t<o;t++)u.set(l,t,(n(e.x[t])-h(e.x[t]))/s)}else for(let t=0;t<o;t++)u.set(l,t,(n[t]-h(e.x[t]))/s);l++}return u}(e,c,n,r,i,a),h=function(e,n){const t=e.x.length;let r=new $e.Z(t,1);for(let i=0;i<t;i++)r.set(i,0,e.y[i]-n[i]);return r}(e,c),d=(0,Fe.S)(u.add(f.mmul(f.transpose().scale("row",{scale:s})))),p=f.mmul(h.scale("row",{scale:s}));return{perturbations:d.mmul(p),jacobianWeightResidualError:p}}function Ye(e,n){const t=function(e,n,t){const r=(n-0)/299;return Array.from({length:300},((e,n)=>0+r*n))}(0,3*e).map((e=>e<n?1:e)),r=new Array(t.length).fill(0).map(((r,i)=>t[i]>=n?Math.exp(-(t[i]-n)/e):r)),i={x:t,y:r},{parameterValues:a}=function(e,n,t){let{checkTimeout:r,minValues:i,maxValues:a,parameters:s,weightSquare:o,damping:u,dampingStepUp:l,dampingStepDown:c,maxIterations:f,errorTolerance:h,centralDifference:d,gradientDifference:p,improvementThreshold:g}=function(e,n,t){let{timeout:r,minValues:i,maxValues:a,initialValues:s,weights:o=1,damping:u=.01,dampingStepUp:l=11,dampingStepDown:c=9,maxIterations:f=100,errorTolerance:h=1e-7,centralDifference:d=!1,gradientDifference:p=.1,improvementThreshold:g=.001}=t;if(u<=0)throw new Error("The damping option must be a positive number");if(!e.x||!e.y)throw new Error("The data parameter must have x and y elements");if(!Le(e.x)||e.x.length<2||!Le(e.y)||e.y.length<2)throw new Error("The data parameter elements must be an array with more than 2 points");if(e.x.length!==e.y.length)throw new Error("The data parameter elements must have the same size");if(!(s&&s.length>0))throw new Error("The initialValues option is mandatory and must be an array");let m,y,w=s,b=e.y.length,v=w.length;if(a=a||new Array(v).fill(Number.MAX_SAFE_INTEGER),i=i||new Array(v).fill(Number.MIN_SAFE_INTEGER),a.length!==i.length)throw new Error("minValues and maxValues must be the same size");if("number"==typeof p)p=new Array(w.length).fill(p);else{if(!Le(p))throw new Error("gradientDifference should be a number or array with length equal to the number of parameters");p.length!==v&&(p=new Array(v).fill(p[0]))}if("number"==typeof o){let e=1/o**2;m=()=>e}else{if(!Le(o))throw new Error("weights should be a number or array with length equal to the number of data points");if(o.length<e.x.length){let e=1/o[0]**2;m=()=>e}else m=e=>1/o[e]**2}if(void 0!==r){if("number"!=typeof r)throw new Error("timeout should be a number");let e=Date.now()+1e3*r;y=()=>Date.now()>e}else y=()=>!1;let x=new Array(e.x.length);for(let e=0;e<b;e++)x[e]=m(e);return{checkTimeout:y,minValues:i,maxValues:a,parameters:w,weightSquare:x,damping:u,dampingStepUp:l,dampingStepDown:c,maxIterations:f,errorTolerance:h,centralDifference:d,gradientDifference:p,improvementThreshold:g}}(e,0,t),m=Ge(e,s,n,o),y=m,w=s.slice(),b=m<=h,v=0;for(;v<f&&!b;v++){let f=m,{perturbations:v,jacobianWeightResidualError:x}=je(e,s,u,p,n,d,o);for(let e=0;e<s.length;e++)s[e]=Math.min(Math.max(i[e],s[e]-v.get(e,0)),a[e]);if(m=Ge(e,s,n,o),isNaN(m))break;if(m<y-h&&(y=m,w=s.slice()),u=(f-m)/v.transpose().mmul(v.mul(u).add(x)).get(0,0)>g?Math.max(u/c,1e-7):Math.min(u*l,1e7),r())throw new Error(`The execution time is over to ${t.timeout} seconds`);b=m<=h}return{parameterValues:w,parameterError:y,iterations:v}}(i,(([e,n])=>t=>1/(1+e*Math.pow(t,2*n))),{damping:1.5,initialValues:[.5,.5],gradientDifference:.1,maxIterations:100,errorTolerance:.01}),[s,o]=a;return{a:s,b:o}}function We(e){const n=new Uint32Array(e.length+1);let t=0;for(let r=0;r<e.length;r++)n[r]=t,t+=e[r];return n[e.length]=t,n}function Ke(e,n){for(let t=0;t<e.length;t++)e[t]=e[t]*n}function Ve(e,n,t=1){return r=this,i=void 0,s=function*(){const r=new Int32Array(e.length*e[0].length),i=new Float32Array(n.length*n[0].length);for(let t=0;t<e.length;t++)r.set(e[t],t*e[t].length),i.set(n[t],t*n[t].length);const a=yield function(e){return n=this,t=void 0,i=function*(){const n=e.length,t=Math.ceil(n/100),r=Math.ceil(Math.sqrt(t)),i=e[0].length,a=function(e,n,t,r=15){return`\n\n @group(0) @binding(0) var<storage, read_write> knnIndexes: array<array<i32, ${r}>, ${t}>;\n @group(0) @binding(1) var<storage, read_write> resTransposedSizes: array<atomic<u32>, ${t}>;\n // this array will store the union of knn and its transpose sizes per index. should be initialized to knnSize each.\n @group(0) @binding(2) var<storage, read_write> resUnionMatrixSizes: array<atomic<u32>, ${t}>;\n\n @compute @workgroup_size(${e}, ${e}) fn countTransposedCols(\n @builtin(global_invocation_id) id: vec3<u32>,\n ) {\n let col: u32 = id.x;\n let row: u32 = id.y;\n let workingIndex: u32 = row * ${n} + col;\n\n if (workingIndex >= ${t}) {\n return;\n }\n \n for (var i = 0u; i < ${r}u; i++) {\n let otherIndex: i32 = knnIndexes[workingIndex][i];\n if (otherIndex != -1 && otherIndex < ${t}) {\n atomicAdd(&resTransposedSizes[otherIndex], 1u);\n atomicAdd(&resUnionMatrixSizes[otherIndex], 1u);\n let otherIndexes = &knnIndexes[otherIndex];\n for(var j = 0u; j < ${r}; j++) {\n if ((*otherIndexes)[j] == i32(workingIndex)) {\n atomicSub(&resUnionMatrixSizes[workingIndex], 1u);\n // if same is found in other array, decrement by one;\n break;\n }\n }\n }\n\n }\n }\n `}(10,10*r,n,i),s=n*e[0].length,o=yield Ae();if(null==o)return;const u=o.createShaderModule({label:"transposedSizesCalulation",code:a}),l=o.createComputePipeline({label:"transposedSizesPipeline",layout:"auto",compute:{module:u,entryPoint:"countTransposedCols"}}),c=o.createBuffer({label:"indexes buffer",size:4*s,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),f=c.getMappedRange(),h=new Int32Array(f);for(let n=0;n<e.length;n++)h.set(e[n],n*e[n].length);c.unmap();const d=o.createBuffer({label:"transpose sizes buffer",size:4*e.length,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}),p=o.createBuffer({label:"union sizes buffer",size:4*e.length,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),g=p.getMappedRange();new Uint32Array(g).fill(i),p.unmap();const m=o.createBindGroup({label:"bindGroup for count ops",layout:l.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:c}},{binding:1,resource:{buffer:d}},{binding:2,resource:{buffer:p}}]}),y=o.createCommandEncoder({label:"matrix ops encoder"}),w=y.beginComputePass({label:"matrix ops compute pass"});w.setPipeline(l),w.setBindGroup(0,m),w.dispatchWorkgroups(r,r),w.end();const b=o.createBuffer({label:"result transpose sizes",size:d.size,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),v=o.createBuffer({label:"result union sizes",size:p.size,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST});y.copyBufferToBuffer(d,0,b,0,b.size),y.copyBufferToBuffer(p,0,v,0,v.size);const x=y.finish();o.queue.submit([x]),yield o.queue.onSubmittedWorkDone(),yield b.mapAsync(GPUMapMode.READ),yield v.mapAsync(GPUMapMode.READ);const A=b.getMappedRange(),S=v.getMappedRange(),I=new Uint32Array(e.length);I.set(new Uint32Array(A,0,e.length)),b.unmap();const E=new Uint32Array(e.length);E.set(new Uint32Array(S,0,e.length)),v.unmap();const M=E.reduce(((e,n)=>e+n),0);return v.destroy(),b.destroy(),d.destroy(),c.destroy(),p.destroy(),{resultTransposeSizesArray:I,resultUnionSizesArray:E,unionMatrixSize:M}},new((r=void 0)||(r=Promise))((function(e,a){function s(e){try{u(i.next(e))}catch(e){a(e)}}function o(e){try{u(i.throw(e))}catch(e){a(e)}}function u(n){var t;n.done?e(n.value):(t=n.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,o)}u((i=i.apply(n,t||[])).next())}));var n,t,r,i}(e),s=e.length,o=yield function(e,n,t,r=15){return i=this,a=void 0,o=function*(){const i=e.length,a=r*i,s=We(t.resultTransposeSizesArray),o=new Uint32Array(s.length);o.set(s);const u=new Int32Array(a).fill(0),l=new Float32Array(a).fill(0);for(let t=0;t<i;t++)for(let i=0;i<r;i++){const r=e[t][i],a=o[r];u[a]=t,l[a]=n[t][i],o[r]+=1}return{transposeKNNIndexes:u,transposeKNNDistances:l,transposeOffsets:s}},new((s=void 0)||(s=Promise))((function(e,n){function t(e){try{u(o.next(e))}catch(e){n(e)}}function r(e){try{u(o.throw(e))}catch(e){n(e)}}function u(n){var i;n.done?e(n.value):(i=n.value,i instanceof s?i:new s((function(e){e(i)}))).then(t,r)}u((o=o.apply(i,a||[])).next())}));var i,a,s,o}(e,n,a,n[0].length),u=We(new Uint32Array(s).fill(e[0].length)),l=We(a.resultUnionSizesArray),c=yield ze(r,i,u,o.transposeKNNIndexes,o.transposeKNNDistances,o.transposeOffsets,s,l,"*"),f=yield ze(r,i,u,o.transposeKNNIndexes,o.transposeKNNDistances,o.transposeOffsets,s,l,"+"),h=yield ze(f.resultKnnIndexes,f.resultKnnDistances,l,c.resultKnnIndexes,c.resultKnnDistances,l,s,l,"-");return 1!==t?(Ke(h.resultKnnDistances,t),Ke(c.resultKnnDistances,1-t),{res:yield ze(h.resultKnnIndexes,h.resultKnnDistances,l,c.resultKnnIndexes,c.resultKnnDistances,l,s,l,"+"),unionMatrixOffsets:l}):{res:h,unionMatrixOffsets:l,unionSizes:a.resultUnionSizesArray}},new((a=void 0)||(a=Promise))((function(e,n){function t(e){try{u(s.next(e))}catch(e){n(e)}}function o(e){try{u(s.throw(e))}catch(e){n(e)}}function u(n){var r;n.done?e(n.value):(r=n.value,r instanceof a?r:new a((function(e){e(r)}))).then(t,o)}u((s=s.apply(r,i||[])).next())}));var r,i,a,s}function qe(e,n=15,t=1,r=64,i=1){return a=this,s=void 0,u=function*(){const a=e.length,s=Math.ceil(a/100),o=Math.ceil(Math.sqrt(s)),u=function(e=10,n,t,r=15,i=1,a=64,s=1){const o=t.length;let u=0;for(let e=0;e<o;e++){let n=0;for(let i=0;i<r;i++)n+=t[e][i];u+=n/r}return` \n var<private> SMOOTH_K_TOLERANCE: f32 = 1e-5;\n var<private> MIN_K_DIST_SCALE: f32 = 1e-3;\n var<private> nNeighbors: u32 = ${r};\n var<private> localConnectivity: f32 = ${i}; \n var<private> nIter: u32 = ${a};\n var<private> bandwidth: u32 = ${s};\n var<private> meanDistances: f32 = ${u/o};\n var<private> targetValue: f32 = ${Math.log(r)/Math.log(2)*s};\n @group(0) @binding(0) var<storage, read_write> sigmas: array<f32, ${o}>;\n @group(0) @binding(1) var<storage, read_write> rhos: array<f32, ${o}>;\n @group(0) @binding(2) var<storage, read> distances: array<array<f32, ${r}>, ${o}>;\n @compute @workgroup_size(${e}, ${e}) fn smoothKNNDistance(\n @builtin(global_invocation_id) id: vec3<u32>,\n ) {\n let col: u32 = id.x;\n let row: u32 = id.y;\n let workingIndex: u32 = row * ${n} + col;\n\n if (workingIndex >= ${o}) {\n return;\n }\n\n var lo: f32 = 0.0;\n var hi: f32 = 1.0e+30; // treated as Infinity\n var mid: f32 = 1.0;\n\n var nonZeroDists: array<f32, ${r}>;\n var nonZeroDistsSize: u32 = 0;\n for (var j = 0u; j < nNeighbors; j = j + 1u) {\n if (distances[workingIndex][j] > 0.0) {\n nonZeroDists[nonZeroDistsSize] = distances[workingIndex][j];\n nonZeroDistsSize = nonZeroDistsSize + 1u;\n }\n }\n\n if (f32(nonZeroDistsSize) >= localConnectivity) {\n let index: u32 = u32(floor(localConnectivity));\n let interpolation: f32 = localConnectivity - f32(index);\n if (index > 0) {\n rhos[workingIndex] = nonZeroDists[index - 1];\n if (interpolation > SMOOTH_K_TOLERANCE) {\n rhos[workingIndex] += interpolation * (nonZeroDists[index] - nonZeroDists[index - 1]);\n }\n }\n else {\n rhos[workingIndex] = interpolation * nonZeroDists[0];\n }\n }\n else if (nonZeroDistsSize > 0u) {\n var maxDist: f32 = 0.0;\n for (var j = 0u; j < nonZeroDistsSize; j = j + 1u) {\n maxDist = max(nonZeroDists[j], maxDist);\n }\n rhos[workingIndex] = maxDist;\n }\n\n for (var n = 0u; n < nIter; n = n + 1u) {\n var psum: f32 = 0.0;\n for (var j = 1u; j < ${r}; j = j + 1u) {\n let d: f32 = distances[workingIndex][j] - rhos[workingIndex];\n if (d > 0.0) {\n psum += exp(0.0 - (d / mid));\n }\n else {\n psum += 1.0;\n }\n }\n\n if (abs(psum - targetValue) < SMOOTH_K_TOLERANCE) {\n break;\n }\n\n if (psum > targetValue) {\n hi = mid;\n mid = (lo + hi) / 2.0;\n }\n else {\n lo = mid;\n if (hi == 1.0e+30) {\n mid *= 2.0;\n }\n else {\n mid = (lo + hi) / 2.0;\n }\n }\n }\n\n sigmas[workingIndex] = mid;\n\n if (rhos[workingIndex] > 0.0) {\n var sum: f32 = 0.0;\n for (var j = 0u; j < ${r}; j = j + 1u) {\n sum += distances[workingIndex][j];\n }\n let meanIthDistances: f32 = sum / ${r}.0;\n if (sigmas[workingIndex] < MIN_K_DIST_SCALE * meanIthDistances) {\n sigmas[workingIndex] = MIN_K_DIST_SCALE * meanIthDistances;\n }\n }\n else {\n if (sigmas[workingIndex] < MIN_K_DIST_SCALE * meanDistances) {\n sigmas[workingIndex] = MIN_K_DIST_SCALE * meanDistances;\n }\n }\n }\n `}(10,10*o,e,n,t,r,i),l=a*e[0].length,c=yield Ae();if(null==c)return;const f=new Float32Array(a),h=new Float32Array(a),d=c.createShaderModule({label:"sigmaRhoCalulation",code:u}),p=c.createComputePipeline({label:"sigmaRhoPipeline",layout:"auto",compute:{module:d,entryPoint:"smoothKNNDistance"}}),g=c.createBuffer({label:"distance buffer",size:4*l,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),m=g.getMappedRange(),y=new Float32Array(m);for(let n=0;n<e.length;n++)y.set(e[n],n*e[n].length);g.unmap();const w=c.createBuffer({label:"buffer sigmas",size:4*a,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC}),b=c.createBuffer({label:"buffer Rhos",size:4*a,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC}),v=c.createBindGroup({label:"bindGroup for sigmarho buffers",layout:p.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:w}},{binding:1,resource:{buffer:b}},{binding:2,resource:{buffer:g}}]}),x=c.createCommandEncoder({label:"sigmarho encoder"}),A=x.beginComputePass({label:"sigmarho compute pass"});A.setPipeline(p),A.setBindGroup(0,v),A.dispatchWorkgroups(o,o),A.end();const S=c.createBuffer({label:"result buffer rhos",size:b.size,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),I=c.createBuffer({label:"result buffer sigmas",size:w.size,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST});x.copyBufferToBuffer(b,0,S,0,S.size),x.copyBufferToBuffer(w,0,I,0,I.size);const E=x.finish();return c.queue.submit([E]),yield c.queue.onSubmittedWorkDone(),yield S.mapAsync(GPUMapMode.READ),yield I.mapAsync(GPUMapMode.READ),h.set(new Float32Array(S.getMappedRange())),f.set(new Float32Array(I.getMappedRange())),S.unmap(),I.unmap(),g.destroy(),w.destroy(),b.destroy(),S.destroy(),I.destroy(),{resultRhos:h,resultSigmas:f}},new((o=void 0)||(o=Promise))((function(e,n){function t(e){try{i(u.next(e))}catch(e){n(e)}}function r(e){try{i(u.throw(e))}catch(e){n(e)}}function i(n){var i;n.done?e(n.value):(i=n.value,i instanceof o?i:new o((function(e){e(i)}))).then(t,r)}i((u=u.apply(a,s||[])).next())}));var a,s,o,u}var He=function(e,n,t,r){return new(t||(t=Promise))((function(i,a){function s(e){try{u(r.next(e))}catch(e){a(e)}}function o(e){try{u(r.throw(e))}catch(e){a(e)}}function u(e){var n;e.done?i(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(s,o)}u((r=r.apply(e,n||[])).next())}))};class Ze{constructor(){this.nComponents=2,this.gamma=1,this.alpha=1,this.entryLen=0,this.nNeighbours=15,this.spread=1,this.minDist=.1,this.negativeSampleRate=5,this.localConnectivity=1,this.setOpMixRatio=1}}class Xe{constructor(e,n){this.params=new Ze,this.knnIndexes=null,this.knnDistances=null,this.rhos=null,this.sigmas=null,this.membershipStrengths=null,this.params.entryLen=e,Object.assign(this.params,n)}setPrecomputedKNN(e,n){this.knnIndexes=e,this.knnDistances=n}initializeFit(){return He(this,void 0,void 0,(function*(){yield this.calcSmoothKNNDistances(),yield this.calcMembershipStrengths()}))}fit(){return He(this,void 0,void 0,(function*(){yield this.initializeFit();const e=yield this.initializeSimplicialSetEmbedding();if(!e)throw new Error("failed to compute umap simplistical set embeddings");const{head:n,tail:t,epochsPerSample:r,epochsPerNegativeSample:i,a,b:s,gamma:o,initialAlpha:u,nComponents:l,nEpochs:c,entryLen:f}=e,h=yield function(e,n,t,r,i,a,s,o,u,l,c,f){return h=this,d=void 0,g=function*(){const h=Math.ceil(e.length/100),d=Math.ceil(Math.sqrt(h)),p=10*d,g=yield Ae();if(!g)return;const m=1e7,y=e.length,w=function(e,n,t,r,i,a,s,o,u,l,c,f,h=1e5){return`\n// first define some functions\n\nfn rDist(ar1: array<f32, ${o}>, ar2: array<f32, ${o}>) -> f32 {\n var res = 0.0;\n for (var i1 = 0u; i1 < ${o}; i1++) {\n let diff = ar1[i1] - ar2[i1];\n res += pow(diff, 2);\n }\n return res;\n}\n\nfn clip(x: f32, clipValue: f32) -> f32 {\n if (x > clipValue) {\n return clipValue;\n }\n else if (x < 0.0 - clipValue) {\n return 0.0 - clipValue;\n }\n return x;\n}\n\nvar<private> randomSeedInt: u32 = 0;\nvar<private> nVertices: u32 = ${l};\nvar<private> initialAlpha: f32 = ${r};\nvar<private> gamma: f32 = ${i};\nvar<private> a: f32 = ${a};\nvar<private> b: f32 = ${s};\nvar<private> dim: u32 = ${o};\nvar<private> nEpochs: f32 = ${u};\nvar<private> moveOther: u32 = 1;\n\nfn random() -> u32 {\n randomSeedInt = (randomSeedInt ^ 61) ^ (randomSeedInt >> 16);\n randomSeedInt *= 9;\n randomSeedInt = randomSeedInt ^ (randomSeedInt >> 4);\n randomSeedInt *= 0x27d4eb2d;\n randomSeedInt = randomSeedInt ^ (randomSeedInt >> 15);\n return randomSeedInt;\n}\n\nfn randInt(maxVal: u32) -> u32 {\n let nextRandomNum = random();\n return u32(floor((f32(nextRandomNum) * (f32(maxVal) / 4294967296.0))));\n}\n\nstruct MatrixStorage {\n head: array<u32, ${e}>,\n tail: array<u32, ${e}>,\n}\n\nstruct EpochStorage {\n epochsPerSample: array<f32, ${e}>,\n epochOfNextSample: array<f32, ${e}>,\n epochsPerNegativeSample: array<f32, ${e}>,\n epochOfNextNegativeSample: array<f32, ${e}>\n}\n\nstruct EmbeddingStorage {\n // embeddings will be in range of -10 to 10, as atomics only can store i32 or u32, we will store them as floor(f32 * 100_000)\n headEmbeddings: array<array<atomic<i32>, ${o}>, ${n}>,\n tailEmbeddings: array<array<atomic<i32>, ${o}>, ${n}>\n}\n\nstruct ComputeInfo {\n n: f32,\n alpha: f32,\n randomNumbers: array<u32, ${e}>,\n //tailOffsets: array<u32, ${n+1}>\n}\n @group(0) @binding(0) var<storage, read_write> matrixStorage: MatrixStorage;\n @group(0) @binding(1) var<storage, read_write> epochStorage: EpochStorage;\n @group(0) @binding(2) var<storage, read_write> embedStorage: EmbeddingStorage;\n @group(0) @binding(3) var<storage, read_write> computeInfo: ComputeInfo;\n @compute @workgroup_size(${c}, ${c}) fn optimizeStep(\n @builtin(global_invocation_id) id: vec3<u32>,\n ) {\n let divisionFactor: f32 = ${h};\n let col: u32 = id.x;\n let row: u32 = id.y;\n let threadIndex: u32 = row * ${f} + col;\n let clipValue: f32 = 4.0;\n\n if (threadIndex >= ${e}) {\n return;\n }\n\n let workingIndex = threadIndex;\n //let startAtOffset = computeInfo.tailOffsets[threadIndex];\n //let endAtOffset = computeInfo.tailOffsets[threadIndex + 1];\n //for (var workingIndex = startAtOffset; workingIndex < endAtOffset; workingIndex++) {\n randomSeedInt = computeInfo.randomNumbers[workingIndex] * u32(computeInfo.n);\n\n let epochOfNextSample = epochStorage.epochOfNextSample[workingIndex];\n if (epochOfNextSample > computeInfo.n) {\n return;\n }\n\n let j = matrixStorage.head[workingIndex];\n let k = matrixStorage.tail[workingIndex];\n\n // as said before, we will store embeddings as floor(f32 * 100_000)\n var current: array<f32, ${o}>;\n var other: array<f32, ${o}>;\n for (var i = 0u; i < ${o}u; i++) {\n current[i] = f32(atomicLoad(&embedStorage.headEmbeddings[j][i])) / divisionFactor;\n other[i] = f32(atomicLoad(&embedStorage.tailEmbeddings[k][i])) / divisionFactor;\n }\n\n let distSquared = rDist(current, other);\n \n var gradCoeff: f32 = 0.0;\n if (distSquared > 0.0) {\n gradCoeff = (0.0 - 2.0) * ${a} * ${s} * pow(distSquared, b - 1.0);\n gradCoeff /= (a * pow(distSquared, b) + 1.0);\n }\n\n var gradBuff: array<i32, ${o}>;\n for (var d = 0u; d < ${o}u; d++) {\n let gradD = clip((gradCoeff * (current[d] - other[d])), clipValue);\n let toAdd = gradD * computeInfo.alpha;\n gradBuff[d] = i32(floor(toAdd * divisionFactor));\n current[d] += toAdd;\n other[d] -= toAdd;\n }\n\n for (var d = 0u; d < ${o}u; d++) {\n atomicAdd(&embedStorage.headEmbeddings[j][d], gradBuff[d]);\n atomicSub(&embedStorage.tailEmbeddings[k][d], gradBuff[d]);\n }\n\n epochStorage.epochOfNextSample[workingIndex] += epochStorage.epochsPerSample[workingIndex];\n var nNegSamples: i32 = i32(floor((computeInfo.n - epochStorage.epochOfNextNegativeSample[workingIndex]) / epochStorage.epochsPerNegativeSample[workingIndex]));\n\n for (var p = 0i; p < nNegSamples; p++) {\n let k1 = randInt(nVertices);\n var other1: array<f32, ${o}>;\n for (var i = 0u; i < ${o}u; i++) {\n other1[i] = f32(atomicLoad(&embedStorage.tailEmbeddings[k1][i])) / divisionFactor;\n }\n\n let distSquared1 = rDist(current, other1);\n\n var gradCoeff1: f32 = 0.0;\n if (distSquared1 > 0.0) {\n gradCoeff1 = 2.0 * gamma * b;\n gradCoeff1 /= (0.001 + distSquared1) * (a * pow(distSquared1, b) + 1);\n }\n else if (j == k1) {\n continue;\n }\n\n var gradDBuff: array<i32, ${o}>;\n for (var d = 0u; d < ${o}u; d++) {\n var gradD: f32 = 4.0;\n if (gradCoeff1 > 0.0) {\n gradD = clip(gradCoeff1 * (current[d] - other1[d]), clipValue);\n }\n\n gradDBuff[d] = i32(floor(gradD * computeInfo.alpha * divisionFactor));\n \n }\n for (var d = 0u; d < ${o}u; d++) {\n atomicAdd(&embedStorage.headEmbeddings[j][d], gradDBuff[d]);\n }\n }\n epochStorage.epochOfNextNegativeSample[workingIndex] += f32(nNegSamples) * epochStorage.epochsPerNegativeSample[workingIndex];\n //}\n }\n`}(y,t,0,a,s,o,u,l,c,f,10,p,m);let b=2*y*4;const v=15&b;0!==v&&(b+=16-v);let x=4*y*4;const A=15&x;0!==A&&(x+=16-A);let S=2*t*2*4;const I=15&S;0!==I&&(S+=16-I);let E=4*(2+y);const M=15&E;0!==M&&(E+=16-M);const N=g.createShaderModule({label:"optimizeShader",code:w}),k=g.createComputePipeline({label:"optimizePipeline",layout:"auto",compute:{module:N,entryPoint:"optimizeStep"}}),P=g.createBuffer({label:"matrix storage buffer",size:b,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),D=P.getMappedRange();new Uint32Array(D,0,y).set(e),new Uint32Array(D,4*y,y).set(n),P.unmap();const C=g.createBuffer({label:"epoch storage buffer",size:x,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),U=C.getMappedRange(),R=new Float32Array(U);R.set(r,0),R.set(r,y),R.set(i,2*y),R.set(i,3*y),C.unmap();const B=new Int32Array(t*l).map((()=>Math.floor((2*Math.random()-1)*m)));new Int32Array(t*l).set(B);const O=g.createBuffer({label:"embedding storage buffer",size:S,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),_=O.getMappedRange(),z=new Int32Array(_);z.set(B,0),z.set(B,B.length),O.unmap();const T=g.createBuffer({label:"compute info buffer",size:E,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),L=new Uint32Array(y).map((()=>Math.floor(Math.random()*m))),G=T.getMappedRange();new Float32Array(G,0,2).set([0,a]),new Uint32Array(G,8,y).set(L),T.unmap();const $=g.createBindGroup({label:"bindGroup for optimize",layout:k.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:P}},{binding:1,resource:{buffer:C}},{binding:2,resource:{buffer:O}},{binding:3,resource:{buffer:T}}]});let F=a;const j=g.createBuffer({label:"result buffer",size:O.size,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST});for(let e=0;e<c;e++){g.queue.writeBuffer(T,0,new Float32Array([e,F]),0);const n=g.createCommandEncoder({label:"matrix ops encoder"}),t=n.beginComputePass({label:"matrix ops compute pass"});t.setPipeline(k),t.setBindGroup(0,$),t.dispatchWorkgroups(d,d),t.end(),e===c-1&&n.copyBufferToBuffer(O,0,j,0,j.size);const r=n.finish();g.queue.submit([r]),yield g.queue.onSubmittedWorkDone(),F=a*(1-e/c)}yield j.mapAsync(GPUMapMode.READ);const Y=j.getMappedRange(),W=new Int32Array(Y,0,B.length);B.set(W),j.unmap();const K=new Array(l).fill(null).map((e=>new Float32Array(t)));for(let e=0;e<t;e++)for(let n=0;n<l;n++)K[n][e]=B[e*l+n]/m;return P.destroy(),C.destroy(),O.destroy(),T.destroy(),j.destroy(),K},new((p=void 0)||(p=Promise))((function(e,n){function t(e){try{i(g.next(e))}catch(e){n(e)}}function r(e){try{i(g.throw(e))}catch(e){n(e)}}function i(n){var i;n.done?e(n.value):(i=n.value,i instanceof p?i:new p((function(e){e(i)}))).then(t,r)}i((g=g.apply(h,d||[])).next())}));var h,d,p,g}(n,t,f,r,i,u,o,a,s,l,c,f);return h}))}calcSmoothKNNDistances(){return He(this,void 0,void 0,(function*(){if(!this.knnIndexes||!this.knnDistances)throw new Error("knn indexes and distances must be set before calling fit");const e=yield qe(this.knnDistances,this.params.nNeighbours,this.params.localConnectivity,64);if(!e)throw new Error("failed to compute smooth knn distances");this.rhos=e.resultRhos,this.sigmas=e.resultSigmas}))}calcMembershipStrengths(){return He(this,void 0,void 0,(function*(){if(!(this.knnIndexes&&this.knnDistances&&this.rhos&&this.sigmas))throw new Error("knn indexes, distances, rhos, and sigmas must be set before calling fit");const e=yield function(e,n,t){return r=this,i=void 0,s=function*(){const r=e.length,i=Math.ceil(r/100),a=Math.ceil(Math.sqrt(i)),s=function(e=10,n,t,r,i){const a=t.length,s=r.length,o=i.length;return`\n struct MembershipStrengthsInfo {\n knnDistances: array<array<f32, ${t[0].length}>, ${a}>,\n sigmas: array<f32, ${s}>,\n rhos: array<f32, ${o}>\n };\n var<private> nNeighbors: u32 = ${t[0].length};\n @group(0) @binding(0) var<storage, read> membershipStrengthsInfo: MembershipStrengthsInfo;\n @group(0) @binding(1) var<storage, read_write> resultKnnDistances: array<array<f32, ${t[0].length}>, ${a}>;\n @compute @workgroup_size(${e}, ${e}) fn computeMembershipStrengths(\n @builtin(global_invocation_id) id: vec3<u32>,\n ) {\n let col: u32 = id.x;\n let row: u32 = id.y;\n let workingIndex: u32 = row * ${n} + col;\n\n if (workingIndex >= ${a}) {\n return;\n }\n\n let workingResKnnDistances = &resultKnnDistances[workingIndex];\n let knnDistances = &membershipStrengthsInfo.knnDistances[workingIndex];\n for (var j = 0u; j < nNeighbors; j = j + 1u) {\n var val: f32 = 0.0;\n\n if ((*knnDistances)[j] - membershipStrengthsInfo.rhos[workingIndex] <= 0.0) {\n val = 1.0;\n } else {\n val = exp(0.0 - ((knnDistances[j] - membershipStrengthsInfo.rhos[workingIndex]) / membershipStrengthsInfo.sigmas[workingIndex])); \n }\n\n (*workingResKnnDistances)[j] = val;\n }\n }\n `}(10,10*a,e,n,t),o=r*e[0].length,u=yield Ae();if(null==u)return;const l=u.createShaderModule({label:"rowsColsValsCalulation",code:s}),c=u.createComputePipeline({label:"rowsColsValsPipeline",layout:"auto",compute:{module:l,entryPoint:"computeMembershipStrengths"}});let f=4*(t.length+n.length+o);const h=15&f;0!=h&&(f+=16-h);const d=u.createBuffer({label:"info buffer",size:f,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),p=d.getMappedRange(),g=new Float32Array(p);for(let n=0;n<e.length;n++)g.set(e[n],n*e[n].length);let m=e[0].length*e.length;g.set(n,m),m+=n.length,g.set(t,m),d.unmap();const y=u.createBuffer({label:"knn distance buffer",size:e[0].length*e.length*Float32Array.BYTES_PER_ELEMENT,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}),w=u.createBindGroup({label:"bindGroup for membership strhegths buffers",layout:c.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:d}},{binding:1,resource:{buffer:y}}]}),b=u.createCommandEncoder({label:"membership strengths encoder"}),v=b.beginComputePass({label:"membership strengths compute pass"});v.setPipeline(c),v.setBindGroup(0,w),v.dispatchWorkgroups(a,a),v.end();const x=u.createBuffer({label:"result buffer distances",size:y.size,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST});b.copyBufferToBuffer(y,0,x,0,x.size);const A=b.finish();u.queue.submit([A]),yield u.queue.onSubmittedWorkDone(),yield x.mapAsync(GPUMapMode.READ);const S=x.getMappedRange(),I=e[0].length*Float32Array.BYTES_PER_ELEMENT,E=new Array(e.length).fill(null).map(((n,t)=>{const r=new Float32Array(S,I*t,e[0].length),i=new Float32Array(e[0].length);return i.set(r),i}));return x.unmap(),x.destroy(),y.destroy(),d.destroy(),E},new((a=void 0)||(a=Promise))((function(e,n){function t(e){try{u(s.next(e))}catch(e){n(e)}}function o(e){try{u(s.throw(e))}catch(e){n(e)}}function u(n){var r;n.done?e(n.value):(r=n.value,r instanceof a?r:new a((function(e){e(r)}))).then(t,o)}u((s=s.apply(r,i||[])).next())}));var r,i,a,s}(this.knnDistances,this.sigmas,this.rhos);if(!e)throw new Error("failed to compute membership strengths");this.membershipStrengths=e}))}fuzzySimplicialSet(){return He(this,void 0,void 0,(function*(){if(!(this.knnIndexes&&this.knnDistances&&this.rhos&&this.sigmas&&this.membershipStrengths))throw new Error("knn indexes, distances, rhos, sigmas, and membership strengths must be set before calling fit");const e=yield Ve(this.knnIndexes,this.membershipStrengths,this.params.setOpMixRatio);if(!e)throw new Error("failed to compute pairwise multiply with transpose");return e}))}initializeSimplicialSetEmbedding(){return He(this,void 0,void 0,(function*(){const e=yield this.fuzzySimplicialSet();if(!(e&&e.res&&e.unionMatrixOffsets&&e.unionSizes))throw new Error("failed to compute fuzzy simplicial set");const n=yield function(e,n,t,r,i=5){return a=this,s=void 0,u=function*(){if(!e.unionSizes)return;const a=function(e){return e<=2500?1e3:e<=5e3?800:e<=7500?650:400}(n),s=e.res.resultKnnDistances.reduce(((e,n)=>Math.max(e,n))),o=s/a,u=new Uint32Array(e.unionSizes.length);u.set(e.unionSizes);let l=0;for(let n=0;n<e.unionSizes.length;n++){for(let t=0;t<e.unionSizes[n];t++){const r=l+t;e.res.resultKnnDistances[r]<o&&(e.res.resultKnnDistances[r]=0,u[n]--)}l+=e.unionSizes[n]}const c=We(u),f=c[c.length-1],h=new Float32Array(f),d=new Uint32Array(f),p=new Uint32Array(f);l=0;for(let n=0;n<e.unionSizes.length;n++)for(let t=0;t<e.unionSizes[n];t++){const r=e.unionMatrixOffsets[n]+t;0!=e.res.resultKnnDistances[r]&&(h[l]=e.res.resultKnnDistances[r],d[l]=e.res.resultKnnIndexes[r],p[l]=n,l+=1)}const g=new Float32Array(h.length).fill(-1),m=h.map((e=>e/s*a));m.forEach(((e,n)=>{e>0&&(g[n]=a/m[n])}));const{a:y,b:w}=Ye(t,r),b=g.map((e=>e/i));return{epochsPerSample:g,epochsPerNegativeSample:b,a:y,b:w,head:d,tail:p,entryLen:n,nEpochs:a,nComponents:2,initialAlpha:1,gamma:1}},new((o=void 0)||(o=Promise))((function(e,n){function t(e){try{i(u.next(e))}catch(e){n(e)}}function r(e){try{i(u.throw(e))}catch(e){n(e)}}function i(n){var i;n.done?e(n.value):(i=n.value,i instanceof o?i:new o((function(e){e(i)}))).then(t,r)}i((u=u.apply(a,s||[])).next())}));var a,s,o,u}(e,this.params.entryLen,this.params.spread,this.params.minDist,this.params.negativeSampleRate);if(!n)throw new Error("failed to compute umap simplistical set embeddings");return n}))}}class Qe{constructor(e){this.data=e.data,this.weights=e.weights,this.aggregationMethod=e.aggregationMethod}}class Je extends Qe{constructor(e){super(e);const n=e.randomSeed??Date(),t=ye()(n);e.dim=2,e.random=t,this.reducer=new we(e),this.iterations=e?.iterations??this.reducer.getIterSize(this.data[0].length),this.distanceFnames=e.distanceFnames,this.distanceFns=e.distanceFns,this.distanceFnArgs=e.distanceFnArgs,this.progressFunc=e.progressFunc}async transform(){if(this.data[0].length>1e4)throw new Error("Maximum number of samples for T-SNE is 10000");const e=new v(!0,!1);try{const n=await e.calcMulti(this.data,this.distanceFnames,!1,this.distanceFnArgs,this.weights,this.aggregationMethod);e.terminate(),this.reducer.initDataDist(n,this.data[0].length);for(let e=0;e<this.iterations;++e)this.reducer.step(),this.progressFunc&&this.progressFunc(e,this.iterations,[]);return this.reducer.getSolution()}catch(n){throw e.terminate(),n}}}class en extends Qe{constructor(e){const n=e.randomSeed??Date(),t=ye()(n);super(e),this.useWebGPU=!1,u("distanceFnames"in e),u("distanceFns"in e),this.distanceFnArgs=e.distanceFnArgs,this.distanceFns=e.distanceFns,this.progressFunc=e.progressFunc,this.useWebGPU=e.useWebGPU??!1,this.distanceFnames=e.distanceFnames,e.nComponents=2,this.vectors=new Array(this.data[0].length).fill(0).map(((e,n)=>n)),this.data[0].length<=(e.nNeighbors??15)&&(e.nNeighbors=this.data[0].length-1),e.random=t,this.reducer=new le(e)}async transform(e){let n;if(console.time("knn graph"),this.useWebGPU)try{n=await Be(this.data,this.reducer.neighbors,this.distanceFnames,this.aggregationMethod,this.weights,this.distanceFnArgs)}catch(e){console.error(e)}n||(this.useWebGPU&&console.error("WEBGPU KNN failed, falling back to multithreaded CPU implementation"),n=await(new pe._).multiColumnKNN(this.data,this.distanceFnames,this.reducer.neighbors,this.distanceFnArgs,this.weights,this.aggregationMethod)),console.timeEnd("knn graph"),this.useWebGPU?(this.webGPUReducer=new Xe(this.vectors.length,{nComponents:this.reducer.nComponents,gamma:this.reducer.repulsionStrength,alpha:this.reducer.learningRate,nNeighbours:this.reducer.neighbors,spread:this.reducer.spread,minDist:this.reducer.minDist,negativeSampleRate:this.reducer.negativeSampleRate,localConnectivity:this.reducer.localConnectivity,setOpMixRatio:this.reducer.setOpMixRatio}),this.webGPUReducer.setPrecomputedKNN(n.knnIndexes,n.knnDistances)):this.reducer.setPrecomputedKNN(n.knnIndexes,n.knnDistances),await new Promise((e=>{setTimeout((()=>{e()}),300)}));let t=null;console.time("fit");try{if(this.useWebGPU&&this.webGPUReducer){if(t=await this.webGPUReducer.fit(),!t)throw new Error("Failed to compute embedding");t=new Array(t[0].length).fill(null).map(((e,n)=>new Float32Array(t.map((e=>e[n])))))}}catch(e){console.error(e)}return t||(this.useWebGPU&&console.error("WEBGPU UMAP failed, falling back to CPU implementation"),t=await this.reducer.fitAsync(this.vectors,(e=>{this.progressFunc&&this.progressFunc(e,this.reducer.getNEpochs(),this.reducer.getEmbedding())}))),console.timeEnd("fit"),i=t,new Array(i.length).fill(0).map(((e,n)=>r.from(i[n])));var i}}const nn={UMAP:en,"t-SNE":Je};class tn{constructor(e,n,t,r,i,a){const s=[];for(let n=0;n<t.length;++n){const r=new w(t[n]).getMeasure(a.distanceFnArgs[n]);s.push(r);let i=2048;for(let t=0;t<e[n].length;++t)if(e[n][t]&&e[n][t]._length){i=e[n][t]._length;break}if(o=t[n],"BitArray"==y[o])for(let t=0;t<e[n].length;++t)e[n][t]&&e[n][t]._data?e[n][t]=new ge.Z(e[n][t]._data,e[n][t]._length):e[n][t]=new ge.Z(i)}var o;"UMAP"==n?this.reducer=new en({data:e,distanceFnames:t,distanceFns:s,distanceFnArgs:a.distanceFnArgs,weights:r,aggregationMethod:i,...a}):"t-SNE"==n&&(this.reducer=new Je({data:e,distanceFnames:t,distanceFns:s,distanceFnArgs:a.distanceFnArgs,weights:r,aggregationMethod:i,...a}))}async transform(e=!1){if(void 0===this.reducer)throw new Error("Reducer was not defined.");let n=await this.reducer.transform();return e&&(n=function(e){return new Array(e[0].length).fill(0).map(((n,t)=>new r(e.length).fill(0).map(((n,r)=>e[r][t]))))}(n)),n}static availableMetricsByType(e){return Object.keys(m[e])}static get availableMethods(){return Object.keys(nn)}static get availableMetrics(){let e=[];return Object.values(m).forEach((n=>{const t=Object.values(n);e=[...e,...t]})),e}}async function rn(e,n,t){e%5==0&&self.postMessage({epochNum:e,epochsLength:n,embedding:t})}self.onmessage=async({data:{columnsData:e,method:n,distanceMetrics:t,options:r,weights:i,aggregationMethod:a}})=>{let s;try{const o=await async function(e,n,t,r,i,a){const s=new tn(e,n,t,r,i,{...a,progressFunc:rn});return await s.transform(!0)}(e,n,t,i,a,r);s={embedding:o}}catch(e){s={error:e}}self.postMessage({error:s.error,embedding:s.embedding})}},6377:(e,n,t)=>{var r=t(4832),i=t(8652),a=t(801),s=t(2030),o=t(3618),u=t(9049),l=t(1971);l.alea=r,l.xor128=i,l.xorwow=a,l.xorshift7=s,l.xor4096=o,l.tychei=u,e.exports=l},4832:function(e,n,t){var r;!function(e,i,a){function s(e){var n,t=this,r=(n=4022871197,function(e){e=String(e);for(var t=0;t<e.length;t++){var r=.02519603282416938*(n+=e.charCodeAt(t));r-=n=r>>>0,n=(r*=n)>>>0,n+=4294967296*(r-=n)}return 2.3283064365386963e-10*(n>>>0)});t.next=function(){var e=2091639*t.s0+2.3283064365386963e-10*t.c;return t.s0=t.s1,t.s1=t.s2,t.s2=e-(t.c=0|e)},t.c=1,t.s0=r(" "),t.s1=r(" "),t.s2=r(" "),t.s0-=r(e),t.s0<0&&(t.s0+=1),t.s1-=r(e),t.s1<0&&(t.s1+=1),t.s2-=r(e),t.s2<0&&(t.s2+=1),r=null}function o(e,n){return n.c=e.c,n.s0=e.s0,n.s1=e.s1,n.s2=e.s2,n}function u(e,n){var t=new s(e),r=n&&n.state,i=t.next;return i.int32=function(){return 4294967296*t.next()|0},i.double=function(){return i()+11102230246251565e-32*(2097152*i()|0)},i.quick=i,r&&("object"==typeof r&&o(r,t),i.state=function(){return o(t,{})}),i}i&&i.exports?i.exports=u:t.amdD&&t.amdO?void 0===(r=function(){return u}.call(n,t,n,i))||(i.exports=r):this.alea=u}(0,e=t.nmd(e),t.amdD)},9049:function(e,n,t){var r;!function(e,i,a){function s(e){var n=this,t="";n.next=function(){var e=n.b,t=n.c,r=n.d,i=n.a;return e=e<<25^e>>>7^t,t=t-r|0,r=r<<24^r>>>8^i,i=i-e|0,n.b=e=e<<20^e>>>12^t,n.c=t=t-r|0,n.d=r<<16^t>>>16^i,n.a=i-e|0},n.a=0,n.b=0,n.c=-1640531527,n.d=1367130551,e===Math.floor(e)?(n.a=e/4294967296|0,n.b=0|e):t+=e;for(var r=0;r<t.length+20;r++)n.b^=0|t.charCodeAt(r),n.next()}function o(e,n){return n.a=e.a,n.b=e.b,n.c=e.c,n.d=e.d,n}function u(e,n){var t=new s(e),r=n&&n.state,i=function(){return(t.next()>>>0)/4294967296};return i.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=t.next,i.quick=i,r&&("object"==typeof r&&o(r,t),i.state=function(){return o(t,{})}),i}i&&i.exports?i.exports=u:t.amdD&&t.amdO?void 0===(r=function(){return u}.call(n,t,n,i))||(i.exports=r):this.tychei=u}(0,e=t.nmd(e),t.amdD)},8652:function(e,n,t){var r;!function(e,i,a){function s(e){var n=this,t="";n.x=0,n.y=0,n.z=0,n.w=0,n.next=function(){var e=n.x^n.x<<11;return n.x=n.y,n.y=n.z,n.z=n.w,n.w^=n.w>>>19^e^e>>>8},e===(0|e)?n.x=e:t+=e;for(var r=0;r<t.length+64;r++)n.x^=0|t.charCodeAt(r),n.next()}function o(e,n){return n.x=e.x,n.y=e.y,n.z=e.z,n.w=e.w,n}function u(e,n){var t=new s(e),r=n&&n.state,i=function(){return(t.next()>>>0)/4294967296};return i.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=t.next,i.quick=i,r&&("object"==typeof r&&o(r,t),i.state=function(){return o(t,{})}),i}i&&i.exports?i.exports=u:t.amdD&&t.amdO?void 0===(r=function(){return u}.call(n,t,n,i))||(i.exports=r):this.xor128=u}(0,e=t.nmd(e),t.amdD)},3618:function(e,n,t){var r;!function(e,i,a){function s(e){var n=this;n.next=function(){var e,t,r=n.w,i=n.X,a=n.i;return n.w=r=r+1640531527|0,t=i[a+34&127],e=i[a=a+1&127],t^=t<<13,e^=e<<17,t^=t>>>15,e^=e>>>12,t=i[a]=t^e,n.i=a,t+(r^r>>>16)|0},function(e,n){var t,r,i,a,s,o=[],u=128;for(n===(0|n)?(r=n,n=null):(n+="\0",r=0,u=Math.max(u,n.length)),i=0,a=-32;a<u;++a)n&&(r^=n.charCodeAt((a+32)%n.length)),0===a&&(s=r),r^=r<<10,r^=r>>>15,r^=r<<4,r^=r>>>13,a>=0&&(s=s+1640531527|0,i=0==(t=o[127&a]^=r+s)?i+1:0);for(i>=128&&(o[127&(n&&n.length||0)]=-1),i=127,a=512;a>0;--a)r=o[i+34&127],t=o[i=i+1&127],r^=r<<13,t^=t<<17,r^=r>>>15,t^=t>>>12,o[i]=r^t;e.w=s,e.X=o,e.i=i}(n,e)}function o(e,n){return n.i=e.i,n.w=e.w,n.X=e.X.slice(),n}function u(e,n){null==e&&(e=+new Date);var t=new s(e),r=n&&n.state,i=function(){return(t.next()>>>0)/4294967296};return i.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=t.next,i.quick=i,r&&(r.X&&o(r,t),i.state=function(){return o(t,{})}),i}i&&i.exports?i.exports=u:t.amdD&&t.amdO?void 0===(r=function(){return u}.call(n,t,n,i))||(i.exports=r):this.xor4096=u}(0,e=t.nmd(e),t.amdD)},2030:function(e,n,t){var r;!function(e,i,a){function s(e){var n=this;n.next=function(){var e,t,r=n.x,i=n.i;return e=r[i],t=(e^=e>>>7)^e<<24,t^=(e=r[i+1&7])^e>>>10,t^=(e=r[i+3&7])^e>>>3,t^=(e=r[i+4&7])^e<<7,e=r[i+7&7],t^=(e^=e<<13)^e<<9,r[i]=t,n.i=i+1&7,t},function(e,n){var t,r=[];if(n===(0|n))r[0]=n;else for(n=""+n,t=0;t<n.length;++t)r[7&t]=r[7&t]<<15^n.charCodeAt(t)+r[t+1&7]<<13;for(;r.length<8;)r.push(0);for(t=0;t<8&&0===r[t];++t);for(8==t?r[7]=-1:r[t],e.x=r,e.i=0,t=256;t>0;--t)e.next()}(n,e)}function o(e,n){return n.x=e.x.slice(),n.i=e.i,n}function u(e,n){null==e&&(e=+new Date);var t=new s(e),r=n&&n.state,i=function(){return(t.next()>>>0)/4294967296};return i.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=t.next,i.quick=i,r&&(r.x&&o(r,t),i.state=function(){return o(t,{})}),i}i&&i.exports?i.exports=u:t.amdD&&t.amdO?void 0===(r=function(){return u}.call(n,t,n,i))||(i.exports=r):this.xorshift7=u}(0,e=t.nmd(e),t.amdD)},801:function(e,n,t){var r;!function(e,i,a){function s(e){var n=this,t="";n.next=function(){var e=n.x^n.x>>>2;return n.x=n.y,n.y=n.z,n.z=n.w,n.w=n.v,(n.d=n.d+362437|0)+(n.v=n.v^n.v<<4^e^e<<1)|0},n.x=0,n.y=0,n.z=0,n.w=0,n.v=0,e===(0|e)?n.x=e:t+=e;for(var r=0;r<t.length+64;r++)n.x^=0|t.charCodeAt(r),r==t.length&&(n.d=n.x<<10^n.x>>>4),n.next()}function o(e,n){return n.x=e.x,n.y=e.y,n.z=e.z,n.w=e.w,n.v=e.v,n.d=e.d,n}function u(e,n){var t=new s(e),r=n&&n.state,i=function(){return(t.next()>>>0)/4294967296};return i.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=t.next,i.quick=i,r&&("object"==typeof r&&o(r,t),i.state=function(){return o(t,{})}),i}i&&i.exports?i.exports=u:t.amdD&&t.amdO?void 0===(r=function(){return u}.call(n,t,n,i))||(i.exports=r):this.xorwow=u}(0,e=t.nmd(e),t.amdD)},1971:function(e,n,t){var r;!function(i,a,s){var o,u=256,l=s.pow(u,6),c=s.pow(2,52),f=2*c,h=u-1;function d(e,n,t){var r=[],h=y(m((n=1==n?{entropy:!0}:n||{}).entropy?[e,w(a)]:null==e?function(){try{var e;return o&&(e=o.randomBytes)?e=e(u):(e=new Uint8Array(u),(i.crypto||i.msCrypto).getRandomValues(e)),w(e)}catch(e){var n=i.navigator,t=n&&n.plugins;return[+new Date,i,t,i.screen,w(a)]}}():e,3),r),d=new p(r),b=function(){for(var e=d.g(6),n=l,t=0;e<c;)e=(e+t)*u,n*=u,t=d.g(1);for(;e>=f;)e/=2,n/=2,t>>>=1;return(e+t)/n};return b.int32=function(){return 0|d.g(4)},b.quick=function(){return d.g(4)/4294967296},b.double=b,y(w(d.S),a),(n.pass||t||function(e,n,t,r){return r&&(r.S&&g(r,d),e.state=function(){return g(d,{})}),t?(s.random=e,n):e})(b,h,"global"in n?n.global:this==s,n.state)}function p(e){var n,t=e.length,r=this,i=0,a=r.i=r.j=0,s=r.S=[];for(t||(e=[t++]);i<u;)s[i]=i++;for(i=0;i<u;i++)s[i]=s[a=h&a+e[i%t]+(n=s[i])],s[a]=n;(r.g=function(e){for(var n,t=0,i=r.i,a=r.j,s=r.S;e--;)n=s[i=h&i+1],t=t*u+s[h&(s[i]=s[a=h&a+n])+(s[a]=n)];return r.i=i,r.j=a,t})(u)}function g(e,n){return n.i=e.i,n.j=e.j,n.S=e.S.slice(),n}function m(e,n){var t,r=[],i=typeof e;if(n&&"object"==i)for(t in e)try{r.push(m(e[t],n-1))}catch(e){}return r.length?r:"string"==i?e:e+"\0"}function y(e,n){for(var t,r=e+"",i=0;i<r.length;)n[h&i]=h&(t^=19*n[h&i])+r.charCodeAt(i++);return w(n)}function w(e){return String.fromCharCode.apply(0,e)}if(y(s.random(),a),e.exports){e.exports=d;try{o=t(5042)}catch(e){}}else void 0===(r=function(){return d}.call(n,t,n,e))||(e.exports=r)}("undefined"!=typeof self?self:this,[],Math)}}]);
|
|
3
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QSxLQUFPeUUsS0FDdkMsR0FDQXlGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvZGJzY2FuL3dhc20vd2FzbURic2Nhbi5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvZGlzdGFuY2UtbWF0cml4L3V0aWxzLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90eXBlLWRlY2xhcmF0aW9ucy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdmVjdG9yLW9wZXJhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL3R5cGVkLW1ldHJpY3MvdHlwZWQtbWV0cmljcy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvZGlzdGFuY2UtbWF0cml4L2Rpc3RhbmNlLW1hdHJpeC1zZXJ2aWNlLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy91bWFwL3V0aWxzLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy91bWFwL2hlYXAuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL3VtYXAvbWF0cml4LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy91bWFwL3RyZWUuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL3VtYXAvdW1hcC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvdW1hcC9ubl9kZXNjZW50LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1sZXZlbmJlcmctbWFycXVhcmR0L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvdC1zbmUvdC1zbmUuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL2Rpc3RhbmNlLW1hdHJpeC9wcm94eS5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvZ2V0R1BVRGV2aWNlLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS9tdWx0aS1jb2wtZGlzdGFuY2VzL3dlYkdQVS1hZ2dyZWdhdGlvbi5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvbXVsdGktY29sLWRpc3RhbmNlcy93ZWJHUFUtbXVsdGljb2wtZGlzdGFuY2VzLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS9tdWx0aS1jb2wta25uL211bHRpQ29sLUtOTi5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvdHlwZXMuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvd2ViR1BVL3ByZXByb2Nlc3Npbmcvd2ViR1BVLXByb2Nlc3MtaW5mby5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvdW1hcC9rbm4tc3BhcnNlLWluZm8uanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvd2ViR1BVL3VtYXAvcGFpcndpc2Utc3BhcnNlLW9wcy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvbGliLWVzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL25vZGVfbW9kdWxlcy9tbC1sZXZlbmJlcmctbWFycXVhcmR0L2xpYi1lc20vZXJyb3JDYWxjdWxhdGlvbi5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL25vZGVfbW9kdWxlcy9tbC1sZXZlbmJlcmctbWFycXVhcmR0L2xpYi1lc20vc3RlcC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL25vZGVfbW9kdWxlcy9tbC1sZXZlbmJlcmctbWFycXVhcmR0L2xpYi1lc20vZ3JhZGllbnRGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvdW1hcC91dGlscy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL25vZGVfbW9kdWxlcy9tbC1sZXZlbmJlcmctbWFycXVhcmR0L2xpYi1lc20vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9ub2RlX21vZHVsZXMvbWwtbGV2ZW5iZXJnLW1hcnF1YXJkdC9saWItZXNtL2NoZWNrT3B0aW9ucy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvdW1hcC9mdXp6eS1zaW1wbGljYWwtc2V0LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS91bWFwL3dnc2wva25uLXNwYXJzZS1pbmZvLndnc2wuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvd2ViR1BVL3VtYXAvc21vb3RoLWtubi1kaXN0YW5jZS5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvdW1hcC93Z3NsL3Ntb290aC1rbm4tZGlzdGFuY2Uud2dzbC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvdW1hcC9XRUJHUFUtVU1BUC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvdW1hcC9vcHRpbWl6YXRpb24tbG9vcC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvdW1hcC93Z3NsL29wdGltaXphdGlvbi1sb29wLndnc2wuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvd2ViR1BVL3VtYXAvbWVtYmVyc2hpcC1zdHJlbmd0aHMuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvd2ViR1BVL3VtYXAvd2dzbC9tZW1iZXJzaGlwLXN0cmVuZ3Rocy53Z3NsLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS91bWFwL3NpbXBsaWNhbC1zZXQtZW1iZWRkaW5nLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9tdWx0aS1jb2x1bW4tZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uL211bHRpLWNvbHVtbi1kaW0tcmVkdWNlci5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvbXVsdGktY29sdW1uLWRpbWVuc2lvbmFsaXR5LXJlZHVjdGlvbi9tdWxpdC1jb2x1bW4tZGltLXJlZHVjZXItd29ya2VyLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9zZWVkcmFuZG9tL2luZGV4LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9zZWVkcmFuZG9tL2xpYi9hbGVhLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9zZWVkcmFuZG9tL2xpYi90eWNoZWkuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL3NlZWRyYW5kb20vbGliL3hvcjEyOC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvc2VlZHJhbmRvbS9saWIveG9yNDA5Ni5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvc2VlZHJhbmRvbS9saWIveG9yc2hpZnQ3LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9zZWVkcmFuZG9tL2xpYi94b3J3b3cuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL3NlZWRyYW5kb20vc2VlZHJhbmRvbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcclxuZXhwb3J0IHZhciBleHBvcnRDcHBEYnNjYW5MaWIgPSAoKCkgPT4ge1xyXG4gIHZhciBfc2NyaXB0RGlyID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0ID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgOiB1bmRlZmluZWQ7XHJcbiAgXHJcbiAgcmV0dXJuIChcclxuZnVuY3Rpb24oZXhwb3J0Q3BwRGJzY2FuTGliID0ge30pICB7XHJcblxyXG4vLyBpbmNsdWRlOiBzaGVsbC5qc1xyXG4vLyBUaGUgTW9kdWxlIG9iamVjdDogT3VyIGludGVyZmFjZSB0byB0aGUgb3V0c2lkZSB3b3JsZC4gV2UgaW1wb3J0XHJcbi8vIGFuZCBleHBvcnQgdmFsdWVzIG9uIGl0LiBUaGVyZSBhcmUgdmFyaW91cyB3YXlzIE1vZHVsZSBjYW4gYmUgdXNlZDpcclxuLy8gMS4gTm90IGRlZmluZWQuIFdlIGNyZWF0ZSBpdCBoZXJlXHJcbi8vIDIuIEEgZnVuY3Rpb24gcGFyYW1ldGVyLCBmdW5jdGlvbihNb2R1bGUpIHsgLi5nZW5lcmF0ZWQgY29kZS4uIH1cclxuLy8gMy4gcHJlLXJ1biBhcHBlbmRlZCBpdCwgdmFyIE1vZHVsZSA9IHt9OyAuLmdlbmVyYXRlZCBjb2RlLi5cclxuLy8gNC4gRXh0ZXJuYWwgc2NyaXB0IHRhZyBkZWZpbmVzIHZhciBNb2R1bGUuXHJcbi8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgTW9kdWxlIGFscmVhZHkgZXhpc3RzIChlLmcuIGNhc2UgMyBhYm92ZSkuXHJcbi8vIFN1YnN0aXR1dGlvbiB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYWN0dWFsIGNvZGUgb24gbGF0ZXIgc3RhZ2Ugb2YgdGhlIGJ1aWxkLFxyXG4vLyB0aGlzIHdheSBDbG9zdXJlIENvbXBpbGVyIHdpbGwgbm90IG1hbmdsZSBpdCAoZS5nLiBjYXNlIDQuIGFib3ZlKS5cclxuLy8gTm90ZSB0aGF0IGlmIHlvdSB3YW50IHRvIHJ1biBjbG9zdXJlLCBhbmQgYWxzbyB0byB1c2UgTW9kdWxlXHJcbi8vIGFmdGVyIHRoZSBnZW5lcmF0ZWQgY29kZSwgeW91IHdpbGwgbmVlZCB0byBkZWZpbmUgICB2YXIgTW9kdWxlID0ge307XHJcbi8vIGJlZm9yZSB0aGUgY29kZS4gVGhlbiB0aGF0IG9iamVjdCB3aWxsIGJlIHVzZWQgaW4gdGhlIGNvZGUsIGFuZCB5b3VcclxuLy8gY2FuIGNvbnRpbnVlIHRvIHVzZSBNb2R1bGUgYWZ0ZXJ3YXJkcyBhcyB3ZWxsLlxyXG52YXIgTW9kdWxlID0gdHlwZW9mIGV4cG9ydENwcERic2NhbkxpYiAhPSAndW5kZWZpbmVkJyA/IGV4cG9ydENwcERic2NhbkxpYiA6IHt9O1xyXG5cclxuLy8gU2V0IHVwIHRoZSBwcm9taXNlIHRoYXQgaW5kaWNhdGVzIHRoZSBNb2R1bGUgaXMgaW5pdGlhbGl6ZWRcclxudmFyIHJlYWR5UHJvbWlzZVJlc29sdmUsIHJlYWR5UHJvbWlzZVJlamVjdDtcclxuTW9kdWxlWydyZWFkeSddID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgcmVhZHlQcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgcmVhZHlQcm9taXNlUmVqZWN0ID0gcmVqZWN0O1xyXG59KTtcclxuXHJcbi8vIC0tcHJlLWpzZXMgYXJlIGVtaXR0ZWQgYWZ0ZXIgdGhlIE1vZHVsZSBpbnRlZ3JhdGlvbiBjb2RlLCBzbyB0aGF0IHRoZXkgY2FuXHJcbi8vIHJlZmVyIHRvIE1vZHVsZSAoaWYgdGhleSBjaG9vc2U7IHRoZXkgY2FuIGFsc28gZGVmaW5lIE1vZHVsZSlcclxuXHJcblxyXG4vLyBTb21ldGltZXMgYW4gZXhpc3RpbmcgTW9kdWxlIG9iamVjdCBleGlzdHMgd2l0aCBwcm9wZXJ0aWVzXHJcbi8vIG1lYW50IHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBtb2R1bGUgZnVuY3Rpb25hbGl0eS4gSGVyZVxyXG4vLyB3ZSBjb2xsZWN0IHRob3NlIHByb3BlcnRpZXMgYW5kIHJlYXBwbHkgX2FmdGVyXyB3ZSBjb25maWd1cmVcclxuLy8gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQncyBkZWZhdWx0cyB0byBhdm9pZCBoYXZpbmcgdG8gYmUgc29cclxuLy8gZGVmZW5zaXZlIGR1cmluZyBpbml0aWFsaXphdGlvbi5cclxudmFyIG1vZHVsZU92ZXJyaWRlcyA9IE9iamVjdC5hc3NpZ24oe30sIE1vZHVsZSk7XHJcblxyXG52YXIgYXJndW1lbnRzXyA9IFtdO1xyXG52YXIgdGhpc1Byb2dyYW0gPSAnLi90aGlzLnByb2dyYW0nO1xyXG52YXIgcXVpdF8gPSAoc3RhdHVzLCB0b1Rocm93KSA9PiB7XHJcbiAgdGhyb3cgdG9UaHJvdztcclxufTtcclxuXHJcbi8vIERldGVybWluZSB0aGUgcnVudGltZSBlbnZpcm9ubWVudCB3ZSBhcmUgaW4uIFlvdSBjYW4gY3VzdG9taXplIHRoaXMgYnlcclxuLy8gc2V0dGluZyB0aGUgRU5WSVJPTk1FTlQgc2V0dGluZyBhdCBjb21waWxlIHRpbWUgKHNlZSBzZXR0aW5ncy5qcykuXHJcblxyXG4vLyBBdHRlbXB0IHRvIGF1dG8tZGV0ZWN0IHRoZSBlbnZpcm9ubWVudFxyXG52YXIgRU5WSVJPTk1FTlRfSVNfV0VCID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JztcclxudmFyIEVOVklST05NRU5UX0lTX1dPUktFUiA9IHR5cGVvZiBpbXBvcnRTY3JpcHRzID09ICdmdW5jdGlvbic7XHJcbi8vIE4uYi4gRWxlY3Ryb24uanMgZW52aXJvbm1lbnQgaXMgc2ltdWx0YW5lb3VzbHkgYSBOT0RFLWVudmlyb25tZW50LCBidXRcclxuLy8gYWxzbyBhIHdlYiBlbnZpcm9ubWVudC5cclxudmFyIEVOVklST05NRU5UX0lTX05PREUgPSB0eXBlb2YgcHJvY2VzcyA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucyA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlID09ICdzdHJpbmcnO1xyXG52YXIgRU5WSVJPTk1FTlRfSVNfU0hFTEwgPSAhRU5WSVJPTk1FTlRfSVNfV0VCICYmICFFTlZJUk9OTUVOVF9JU19OT0RFICYmICFFTlZJUk9OTUVOVF9JU19XT1JLRVI7XHJcblxyXG4vLyBgL2Agc2hvdWxkIGJlIHByZXNlbnQgYXQgdGhlIGVuZCBpZiBgc2NyaXB0RGlyZWN0b3J5YCBpcyBub3QgZW1wdHlcclxudmFyIHNjcmlwdERpcmVjdG9yeSA9ICcnO1xyXG5mdW5jdGlvbiBsb2NhdGVGaWxlKHBhdGgpIHtcclxuICBpZiAoTW9kdWxlWydsb2NhdGVGaWxlJ10pIHtcclxuICAgIHJldHVybiBNb2R1bGVbJ2xvY2F0ZUZpbGUnXShwYXRoLCBzY3JpcHREaXJlY3RvcnkpO1xyXG4gIH1cclxuICByZXR1cm4gc2NyaXB0RGlyZWN0b3J5ICsgcGF0aDtcclxufVxyXG5cclxuLy8gSG9va3MgdGhhdCBhcmUgaW1wbGVtZW50ZWQgZGlmZmVyZW50bHkgaW4gZGlmZmVyZW50IHJ1bnRpbWUgZW52aXJvbm1lbnRzLlxyXG52YXIgcmVhZF8sXHJcbiAgICByZWFkQXN5bmMsXHJcbiAgICByZWFkQmluYXJ5LFxyXG4gICAgc2V0V2luZG93VGl0bGU7XHJcblxyXG4vLyBOb3RlIHRoYXQgdGhpcyBpbmNsdWRlcyBOb2RlLmpzIHdvcmtlcnMgd2hlbiByZWxldmFudCAocHRocmVhZHMgaXMgZW5hYmxlZCkuXHJcbi8vIE5vZGUuanMgd29ya2VycyBhcmUgZGV0ZWN0ZWQgYXMgYSBjb21iaW5hdGlvbiBvZiBFTlZJUk9OTUVOVF9JU19XT1JLRVIgYW5kXHJcbi8vIEVOVklST05NRU5UX0lTX05PREUuXHJcbmlmIChFTlZJUk9OTUVOVF9JU19XRUIgfHwgRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7XHJcbiAgaWYgKEVOVklST05NRU5UX0lTX1dPUktFUikgeyAvLyBDaGVjayB3b3JrZXIsIG5vdCB3ZWIsIHNpbmNlIHdpbmRvdyBjb3VsZCBiZSBwb2x5ZmlsbGVkXHJcbiAgICBzY3JpcHREaXJlY3RvcnkgPSBzZWxmLmxvY2F0aW9uLmhyZWY7XHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCkgeyAvLyB3ZWJcclxuICAgIHNjcmlwdERpcmVjdG9yeSA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjO1xyXG4gIH1cclxuICAvLyBXaGVuIE1PRFVMQVJJWkUsIHRoaXMgSlMgbWF5IGJlIGV4ZWN1dGVkIGxhdGVyLCBhZnRlciBkb2N1bWVudC5jdXJyZW50U2NyaXB0XHJcbiAgLy8gaXMgZ29uZSwgc28gd2Ugc2F2ZWQgaXQsIGFuZCB3ZSB1c2UgaXQgaGVyZSBpbnN0ZWFkIG9mIGFueSBvdGhlciBpbmZvLlxyXG4gIGlmIChfc2NyaXB0RGlyKSB7XHJcbiAgICBzY3JpcHREaXJlY3RvcnkgPSBfc2NyaXB0RGlyO1xyXG4gIH1cclxuICAvLyBibG9iIHVybHMgbG9vayBsaWtlIGJsb2I6aHR0cDovL3NpdGUuY29tL2V0Yy9ldGMgYW5kIHdlIGNhbm5vdCBpbmZlciBhbnl0aGluZyBmcm9tIHRoZW0uXHJcbiAgLy8gb3RoZXJ3aXNlLCBzbGljZSBvZmYgdGhlIGZpbmFsIHBhcnQgb2YgdGhlIHVybCB0byBmaW5kIHRoZSBzY3JpcHQgZGlyZWN0b3J5LlxyXG4gIC8vIGlmIHNjcmlwdERpcmVjdG9yeSBkb2VzIG5vdCBjb250YWluIGEgc2xhc2gsIGxhc3RJbmRleE9mIHdpbGwgcmV0dXJuIC0xLFxyXG4gIC8vIGFuZCBzY3JpcHREaXJlY3Rvcnkgd2lsbCBjb3JyZWN0bHkgYmUgcmVwbGFjZWQgd2l0aCBhbiBlbXB0eSBzdHJpbmcuXHJcbiAgLy8gSWYgc2NyaXB0RGlyZWN0b3J5IGNvbnRhaW5zIGEgcXVlcnkgKHN0YXJ0aW5nIHdpdGggPykgb3IgYSBmcmFnbWVudCAoc3RhcnRpbmcgd2l0aCAjKSxcclxuICAvLyB0aGV5IGFyZSByZW1vdmVkIGJlY2F1c2UgdGhleSBjb3VsZCBjb250YWluIGEgc2xhc2guXHJcbiAgaWYgKHNjcmlwdERpcmVjdG9yeS5pbmRleE9mKCdibG9iOicpICE9PSAwKSB7XHJcbiAgICBzY3JpcHREaXJlY3RvcnkgPSBzY3JpcHREaXJlY3Rvcnkuc3Vic3RyKDAsIHNjcmlwdERpcmVjdG9yeS5yZXBsYWNlKC9bPyNdLiovLCBcIlwiKS5sYXN0SW5kZXhPZignLycpKzEpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBzY3JpcHREaXJlY3RvcnkgPSAnJztcclxuICB9XHJcblxyXG4gIC8vIERpZmZlcmVudGlhdGUgdGhlIFdlYiBXb3JrZXIgZnJvbSB0aGUgTm9kZSBXb3JrZXIgY2FzZSwgYXMgcmVhZGluZyBtdXN0XHJcbiAgLy8gYmUgZG9uZSBkaWZmZXJlbnRseS5cclxuICB7XHJcbi8vIGluY2x1ZGU6IHdlYl9vcl93b3JrZXJfc2hlbGxfcmVhZC5qc1xyXG5yZWFkXyA9ICh1cmwpID0+IHtcclxuICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICB4aHIub3BlbignR0VUJywgdXJsLCBmYWxzZSk7XHJcbiAgICAgIHhoci5zZW5kKG51bGwpO1xyXG4gICAgICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dDtcclxuICB9XHJcblxyXG4gIGlmIChFTlZJUk9OTUVOVF9JU19XT1JLRVIpIHtcclxuICAgIHJlYWRCaW5hcnkgPSAodXJsKSA9PiB7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIGZhbHNlKTtcclxuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcclxuICAgICAgICB4aHIuc2VuZChudWxsKTtcclxuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoLyoqIEB0eXBleyFBcnJheUJ1ZmZlcn0gKi8oeGhyLnJlc3BvbnNlKSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcmVhZEFzeW5jID0gKHVybCwgb25sb2FkLCBvbmVycm9yKSA9PiB7XHJcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTtcclxuICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInO1xyXG4gICAgeGhyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwIHx8ICh4aHIuc3RhdHVzID09IDAgJiYgeGhyLnJlc3BvbnNlKSkgeyAvLyBmaWxlIFVSTHMgY2FuIHJldHVybiAwXHJcbiAgICAgICAgb25sb2FkKHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIG9uZXJyb3IoKTtcclxuICAgIH07XHJcbiAgICB4aHIub25lcnJvciA9IG9uZXJyb3I7XHJcbiAgICB4aHIuc2VuZChudWxsKTtcclxuICB9XHJcblxyXG4vLyBlbmQgaW5jbHVkZTogd2ViX29yX3dvcmtlcl9zaGVsbF9yZWFkLmpzXHJcbiAgfVxyXG5cclxuICBzZXRXaW5kb3dUaXRsZSA9ICh0aXRsZSkgPT4gZG9jdW1lbnQudGl0bGUgPSB0aXRsZTtcclxufSBlbHNlXHJcbntcclxufVxyXG5cclxudmFyIG91dCA9IE1vZHVsZVsncHJpbnQnXSB8fCBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpO1xyXG52YXIgZXJyID0gTW9kdWxlWydwcmludEVyciddIHx8IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO1xyXG5cclxuLy8gTWVyZ2UgYmFjayBpbiB0aGUgb3ZlcnJpZGVzXHJcbk9iamVjdC5hc3NpZ24oTW9kdWxlLCBtb2R1bGVPdmVycmlkZXMpO1xyXG4vLyBGcmVlIHRoZSBvYmplY3QgaGllcmFyY2h5IGNvbnRhaW5lZCBpbiB0aGUgb3ZlcnJpZGVzLCB0aGlzIGxldHMgdGhlIEdDXHJcbi8vIHJlY2xhaW0gZGF0YSB1c2VkIGUuZy4gaW4gbWVtb3J5SW5pdGlhbGl6ZXJSZXF1ZXN0LCB3aGljaCBpcyBhIGxhcmdlIHR5cGVkIGFycmF5LlxyXG5tb2R1bGVPdmVycmlkZXMgPSBudWxsO1xyXG5cclxuLy8gRW1pdCBjb2RlIHRvIGhhbmRsZSBleHBlY3RlZCB2YWx1ZXMgb24gdGhlIE1vZHVsZSBvYmplY3QuIFRoaXMgYXBwbGllcyBNb2R1bGUueFxyXG4vLyB0byB0aGUgcHJvcGVyIGxvY2FsIHguIFRoaXMgaGFzIHR3byBiZW5lZml0czogZmlyc3QsIHdlIG9ubHkgZW1pdCBpdCBpZiBpdCBpc1xyXG4vLyBleHBlY3RlZCB0byBhcnJpdmUsIGFuZCBzZWNvbmQsIGJ5IHVzaW5nIGEgbG9jYWwgZXZlcnl3aGVyZSBlbHNlIHRoYXQgY2FuIGJlXHJcbi8vIG1pbmlmaWVkLlxyXG5cclxuaWYgKE1vZHVsZVsnYXJndW1lbnRzJ10pIGFyZ3VtZW50c18gPSBNb2R1bGVbJ2FyZ3VtZW50cyddO1xyXG5cclxuaWYgKE1vZHVsZVsndGhpc1Byb2dyYW0nXSkgdGhpc1Byb2dyYW0gPSBNb2R1bGVbJ3RoaXNQcm9ncmFtJ107XHJcblxyXG5pZiAoTW9kdWxlWydxdWl0J10pIHF1aXRfID0gTW9kdWxlWydxdWl0J107XHJcblxyXG4vLyBwZXJmb3JtIGFzc2VydGlvbnMgaW4gc2hlbGwuanMgYWZ0ZXIgd2Ugc2V0IHVwIG91dCgpIGFuZCBlcnIoKSwgYXMgb3RoZXJ3aXNlIGlmIGFuIGFzc2VydGlvbiBmYWlscyBpdCBjYW5ub3QgcHJpbnQgdGhlIG1lc3NhZ2VcclxuXHJcblxyXG4vLyBlbmQgaW5jbHVkZTogc2hlbGwuanNcclxuLy8gaW5jbHVkZTogcHJlYW1ibGUuanNcclxuLy8gPT09IFByZWFtYmxlIGxpYnJhcnkgc3R1ZmYgPT09XHJcblxyXG4vLyBEb2N1bWVudGF0aW9uIGZvciB0aGUgcHVibGljIEFQSXMgZGVmaW5lZCBpbiB0aGlzIGZpbGUgbXVzdCBiZSB1cGRhdGVkIGluOlxyXG4vLyAgICBzaXRlL3NvdXJjZS9kb2NzL2FwaV9yZWZlcmVuY2UvcHJlYW1ibGUuanMucnN0XHJcbi8vIEEgcHJlYnVpbHQgbG9jYWwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgYXQ6XHJcbi8vICAgIHNpdGUvYnVpbGQvdGV4dC9kb2NzL2FwaV9yZWZlcmVuY2UvcHJlYW1ibGUuanMudHh0XHJcbi8vIFlvdSBjYW4gYWxzbyBidWlsZCBkb2NzIGxvY2FsbHkgYXMgSFRNTCBvciBvdGhlciBmb3JtYXRzIGluIHNpdGUvXHJcbi8vIEFuIG9ubGluZSBIVE1MIHZlcnNpb24gKHdoaWNoIG1heSBiZSBvZiBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIEVtc2NyaXB0ZW4pXHJcbi8vICAgIGlzIHVwIGF0IGh0dHA6Ly9rcmlwa2VuLmdpdGh1Yi5pby9lbXNjcmlwdGVuLXNpdGUvZG9jcy9hcGlfcmVmZXJlbmNlL3ByZWFtYmxlLmpzLmh0bWxcclxuXHJcbnZhciB3YXNtQmluYXJ5O1xyXG5pZiAoTW9kdWxlWyd3YXNtQmluYXJ5J10pIHdhc21CaW5hcnkgPSBNb2R1bGVbJ3dhc21CaW5hcnknXTtcclxudmFyIG5vRXhpdFJ1bnRpbWUgPSBNb2R1bGVbJ25vRXhpdFJ1bnRpbWUnXSB8fCB0cnVlO1xyXG5cclxuaWYgKHR5cGVvZiBXZWJBc3NlbWJseSAhPSAnb2JqZWN0Jykge1xyXG4gIGFib3J0KCdubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkJyk7XHJcbn1cclxuXHJcbi8vIFdhc20gZ2xvYmFsc1xyXG5cclxudmFyIHdhc21NZW1vcnk7XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gUnVudGltZSBlc3NlbnRpYWxzXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuLy8gd2hldGhlciB3ZSBhcmUgcXVpdHRpbmcgdGhlIGFwcGxpY2F0aW9uLiBubyBjb2RlIHNob3VsZCBydW4gYWZ0ZXIgdGhpcy5cclxuLy8gc2V0IGluIGV4aXQoKSBhbmQgYWJvcnQoKVxyXG52YXIgQUJPUlQgPSBmYWxzZTtcclxuXHJcbi8vIHNldCBieSBleGl0KCkgYW5kIGFib3J0KCkuICBQYXNzZWQgdG8gJ29uRXhpdCcgaGFuZGxlci5cclxuLy8gTk9URTogVGhpcyBpcyBhbHNvIHVzZWQgYXMgdGhlIHByb2Nlc3MgcmV0dXJuIGNvZGUgY29kZSBpbiBzaGVsbCBlbnZpcm9ubWVudHNcclxuLy8gYnV0IG9ubHkgd2hlbiBub0V4aXRSdW50aW1lIGlzIGZhbHNlLlxyXG52YXIgRVhJVFNUQVRVUztcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oKiwgc3RyaW5nPSl9ICovXHJcbmZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIHRleHQpIHtcclxuICBpZiAoIWNvbmRpdGlvbikge1xyXG4gICAgLy8gVGhpcyBidWlsZCB3YXMgY3JlYXRlZCB3aXRob3V0IEFTU0VSVElPTlMgZGVmaW5lZC4gIGBhc3NlcnQoKWAgc2hvdWxkIG5vdFxyXG4gICAgLy8gZXZlciBiZSBjYWxsZWQgaW4gdGhpcyBjb25maWd1cmF0aW9uIGJ1dCBpbiBjYXNlIHRoZXJlIGFyZSBjYWxsZXJzIGluXHJcbiAgICAvLyB0aGUgd2lsZCBsZWF2ZSB0aGlzIHNpbXBsZSBhYm9ydCgpIGltcGxlbWVuYXRpb24gaGVyZSBmb3Igbm93LlxyXG4gICAgYWJvcnQodGV4dCk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBNZW1vcnkgbWFuYWdlbWVudFxyXG5cclxudmFyIEhFQVAsXHJcbi8qKiBAdHlwZSB7IUludDhBcnJheX0gKi9cclxuICBIRUFQOCxcclxuLyoqIEB0eXBlIHshVWludDhBcnJheX0gKi9cclxuICBIRUFQVTgsXHJcbi8qKiBAdHlwZSB7IUludDE2QXJyYXl9ICovXHJcbiAgSEVBUDE2LFxyXG4vKiogQHR5cGUgeyFVaW50MTZBcnJheX0gKi9cclxuICBIRUFQVTE2LFxyXG4vKiogQHR5cGUgeyFJbnQzMkFycmF5fSAqL1xyXG4gIEhFQVAzMixcclxuLyoqIEB0eXBlIHshVWludDMyQXJyYXl9ICovXHJcbiAgSEVBUFUzMixcclxuLyoqIEB0eXBlIHshRmxvYXQzMkFycmF5fSAqL1xyXG4gIEhFQVBGMzIsXHJcbi8qKiBAdHlwZSB7IUZsb2F0NjRBcnJheX0gKi9cclxuICBIRUFQRjY0O1xyXG5cclxuZnVuY3Rpb24gdXBkYXRlTWVtb3J5Vmlld3MoKSB7XHJcbiAgdmFyIGIgPSB3YXNtTWVtb3J5LmJ1ZmZlcjtcclxuICBNb2R1bGVbJ0hFQVA4J10gPSBIRUFQOCA9IG5ldyBJbnQ4QXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQMTYnXSA9IEhFQVAxNiA9IG5ldyBJbnQxNkFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUDMyJ10gPSBIRUFQMzIgPSBuZXcgSW50MzJBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVBVOCddID0gSEVBUFU4ID0gbmV3IFVpbnQ4QXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQVTE2J10gPSBIRUFQVTE2ID0gbmV3IFVpbnQxNkFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUFUzMiddID0gSEVBUFUzMiA9IG5ldyBVaW50MzJBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVBGMzInXSA9IEhFQVBGMzIgPSBuZXcgRmxvYXQzMkFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUEY2NCddID0gSEVBUEY2NCA9IG5ldyBGbG9hdDY0QXJyYXkoYik7XHJcbn1cclxuXHJcbi8vIGluY2x1ZGU6IHJ1bnRpbWVfaW5pdF90YWJsZS5qc1xyXG4vLyBJbiByZWd1bGFyIG5vbi1SRUxPQ0FUQUJMRSBtb2RlIHRoZSB0YWJsZSBpcyBleHBvcnRlZFxyXG4vLyBmcm9tIHRoZSB3YXNtIG1vZHVsZSBhbmQgdGhpcyB3aWxsIGJlIGFzc2lnbmVkIG9uY2VcclxuLy8gdGhlIGV4cG9ydHMgYXJlIGF2YWlsYWJsZS5cclxudmFyIHdhc21UYWJsZTtcclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBydW50aW1lX2luaXRfdGFibGUuanNcclxuLy8gaW5jbHVkZTogcnVudGltZV9zdGFja19jaGVjay5qc1xyXG4vLyBlbmQgaW5jbHVkZTogcnVudGltZV9zdGFja19jaGVjay5qc1xyXG4vLyBpbmNsdWRlOiBydW50aW1lX2Fzc2VydGlvbnMuanNcclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfYXNzZXJ0aW9ucy5qc1xyXG52YXIgX19BVFBSRVJVTl9fICA9IFtdOyAvLyBmdW5jdGlvbnMgY2FsbGVkIGJlZm9yZSB0aGUgcnVudGltZSBpcyBpbml0aWFsaXplZFxyXG52YXIgX19BVElOSVRfXyAgICA9IFtdOyAvLyBmdW5jdGlvbnMgY2FsbGVkIGR1cmluZyBzdGFydHVwXHJcbnZhciBfX0FURVhJVF9fICAgID0gW107IC8vIGZ1bmN0aW9ucyBjYWxsZWQgZHVyaW5nIHNodXRkb3duXHJcbnZhciBfX0FUUE9TVFJVTl9fID0gW107IC8vIGZ1bmN0aW9ucyBjYWxsZWQgYWZ0ZXIgdGhlIG1haW4oKSBpcyBjYWxsZWRcclxuXHJcbnZhciBydW50aW1lSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcbnZhciBydW50aW1lS2VlcGFsaXZlQ291bnRlciA9IDA7XHJcblxyXG5mdW5jdGlvbiBrZWVwUnVudGltZUFsaXZlKCkge1xyXG4gIHJldHVybiBub0V4aXRSdW50aW1lIHx8IHJ1bnRpbWVLZWVwYWxpdmVDb3VudGVyID4gMDtcclxufVxyXG5cclxuZnVuY3Rpb24gcHJlUnVuKCkge1xyXG4gIGlmIChNb2R1bGVbJ3ByZVJ1biddKSB7XHJcbiAgICBpZiAodHlwZW9mIE1vZHVsZVsncHJlUnVuJ10gPT0gJ2Z1bmN0aW9uJykgTW9kdWxlWydwcmVSdW4nXSA9IFtNb2R1bGVbJ3ByZVJ1biddXTtcclxuICAgIHdoaWxlIChNb2R1bGVbJ3ByZVJ1biddLmxlbmd0aCkge1xyXG4gICAgICBhZGRPblByZVJ1bihNb2R1bGVbJ3ByZVJ1biddLnNoaWZ0KCkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUUFJFUlVOX18pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbml0UnVudGltZSgpIHtcclxuICBydW50aW1lSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG5cclxuICBcclxuICBjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUSU5JVF9fKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcG9zdFJ1bigpIHtcclxuXHJcbiAgaWYgKE1vZHVsZVsncG9zdFJ1biddKSB7XHJcbiAgICBpZiAodHlwZW9mIE1vZHVsZVsncG9zdFJ1biddID09ICdmdW5jdGlvbicpIE1vZHVsZVsncG9zdFJ1biddID0gW01vZHVsZVsncG9zdFJ1biddXTtcclxuICAgIHdoaWxlIChNb2R1bGVbJ3Bvc3RSdW4nXS5sZW5ndGgpIHtcclxuICAgICAgYWRkT25Qb3N0UnVuKE1vZHVsZVsncG9zdFJ1biddLnNoaWZ0KCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBPU1RSVU5fXyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZE9uUHJlUnVuKGNiKSB7XHJcbiAgX19BVFBSRVJVTl9fLnVuc2hpZnQoY2IpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRPbkluaXQoY2IpIHtcclxuICBfX0FUSU5JVF9fLnVuc2hpZnQoY2IpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRPbkV4aXQoY2IpIHtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkT25Qb3N0UnVuKGNiKSB7XHJcbiAgX19BVFBPU1RSVU5fXy51bnNoaWZ0KGNiKTtcclxufVxyXG5cclxuLy8gaW5jbHVkZTogcnVudGltZV9tYXRoLmpzXHJcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvaW11bFxyXG5cclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9mcm91bmRcclxuXHJcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvY2x6MzJcclxuXHJcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvdHJ1bmNcclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBydW50aW1lX21hdGguanNcclxuLy8gQSBjb3VudGVyIG9mIGRlcGVuZGVuY2llcyBmb3IgY2FsbGluZyBydW4oKS4gSWYgd2UgbmVlZCB0b1xyXG4vLyBkbyBhc3luY2hyb25vdXMgd29yayBiZWZvcmUgcnVubmluZywgaW5jcmVtZW50IHRoaXMgYW5kXHJcbi8vIGRlY3JlbWVudCBpdC4gSW5jcmVtZW50aW5nIG11c3QgaGFwcGVuIGluIGEgcGxhY2UgbGlrZVxyXG4vLyBNb2R1bGUucHJlUnVuICh1c2VkIGJ5IGVtY2MgdG8gYWRkIGZpbGUgcHJlbG9hZGluZykuXHJcbi8vIE5vdGUgdGhhdCB5b3UgY2FuIGFkZCBkZXBlbmRlbmNpZXMgaW4gcHJlUnVuLCBldmVuIHRob3VnaFxyXG4vLyBpdCBoYXBwZW5zIHJpZ2h0IGJlZm9yZSBydW4gLSBydW4gd2lsbCBiZSBwb3N0cG9uZWQgdW50aWxcclxuLy8gdGhlIGRlcGVuZGVuY2llcyBhcmUgbWV0LlxyXG52YXIgcnVuRGVwZW5kZW5jaWVzID0gMDtcclxudmFyIHJ1bkRlcGVuZGVuY3lXYXRjaGVyID0gbnVsbDtcclxudmFyIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IG51bGw7IC8vIG92ZXJyaWRkZW4gdG8gdGFrZSBkaWZmZXJlbnQgYWN0aW9ucyB3aGVuIGFsbCBydW4gZGVwZW5kZW5jaWVzIGFyZSBmdWxmaWxsZWRcclxuXHJcbmZ1bmN0aW9uIGdldFVuaXF1ZVJ1bkRlcGVuZGVuY3koaWQpIHtcclxuICByZXR1cm4gaWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZFJ1bkRlcGVuZGVuY3koaWQpIHtcclxuICBydW5EZXBlbmRlbmNpZXMrKztcclxuXHJcbiAgaWYgKE1vZHVsZVsnbW9uaXRvclJ1bkRlcGVuZGVuY2llcyddKSB7XHJcbiAgICBNb2R1bGVbJ21vbml0b3JSdW5EZXBlbmRlbmNpZXMnXShydW5EZXBlbmRlbmNpZXMpO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZVJ1bkRlcGVuZGVuY3koaWQpIHtcclxuICBydW5EZXBlbmRlbmNpZXMtLTtcclxuXHJcbiAgaWYgKE1vZHVsZVsnbW9uaXRvclJ1bkRlcGVuZGVuY2llcyddKSB7XHJcbiAgICBNb2R1bGVbJ21vbml0b3JSdW5EZXBlbmRlbmNpZXMnXShydW5EZXBlbmRlbmNpZXMpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHJ1bkRlcGVuZGVuY2llcyA9PSAwKSB7XHJcbiAgICBpZiAocnVuRGVwZW5kZW5jeVdhdGNoZXIgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJJbnRlcnZhbChydW5EZXBlbmRlbmN5V2F0Y2hlcik7XHJcbiAgICAgIHJ1bkRlcGVuZGVuY3lXYXRjaGVyID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChkZXBlbmRlbmNpZXNGdWxmaWxsZWQpIHtcclxuICAgICAgdmFyIGNhbGxiYWNrID0gZGVwZW5kZW5jaWVzRnVsZmlsbGVkO1xyXG4gICAgICBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBudWxsO1xyXG4gICAgICBjYWxsYmFjaygpOyAvLyBjYW4gYWRkIGFub3RoZXIgZGVwZW5kZW5jaWVzRnVsZmlsbGVkXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKiogQHBhcmFtIHtzdHJpbmd8bnVtYmVyPX0gd2hhdCAqL1xyXG5mdW5jdGlvbiBhYm9ydCh3aGF0KSB7XHJcbiAgaWYgKE1vZHVsZVsnb25BYm9ydCddKSB7XHJcbiAgICBNb2R1bGVbJ29uQWJvcnQnXSh3aGF0KTtcclxuICB9XHJcblxyXG4gIHdoYXQgPSAnQWJvcnRlZCgnICsgd2hhdCArICcpJztcclxuICAvLyBUT0RPKHNiYyk6IFNob3VsZCB3ZSByZW1vdmUgcHJpbnRpbmcgYW5kIGxlYXZlIGl0IHVwIHRvIHdob2V2ZXJcclxuICAvLyBjYXRjaGVzIHRoZSBleGNlcHRpb24/XHJcbiAgZXJyKHdoYXQpO1xyXG5cclxuICBBQk9SVCA9IHRydWU7XHJcbiAgRVhJVFNUQVRVUyA9IDE7XHJcblxyXG4gIHdoYXQgKz0gJy4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby4nO1xyXG5cclxuICAvLyBVc2UgYSB3YXNtIHJ1bnRpbWUgZXJyb3IsIGJlY2F1c2UgYSBKUyBlcnJvciBtaWdodCBiZSBzZWVuIGFzIGEgZm9yZWlnblxyXG4gIC8vIGV4Y2VwdGlvbiwgd2hpY2ggbWVhbnMgd2UnZCBydW4gZGVzdHJ1Y3RvcnMgb24gaXQuIFdlIG5lZWQgdGhlIGVycm9yIHRvXHJcbiAgLy8gc2ltcGx5IG1ha2UgdGhlIHByb2dyYW0gc3RvcC5cclxuICAvLyBGSVhNRSBUaGlzIGFwcHJvYWNoIGRvZXMgbm90IHdvcmsgaW4gV2FzbSBFSCBiZWNhdXNlIGl0IGN1cnJlbnRseSBkb2VzIG5vdCBhc3N1bWVcclxuICAvLyBhbGwgUnVudGltZUVycm9ycyBhcmUgZnJvbSB0cmFwczsgaXQgZGVjaWRlcyB3aGV0aGVyIGEgUnVudGltZUVycm9yIGlzIGZyb21cclxuICAvLyBhIHRyYXAgb3Igbm90IGJhc2VkIG9uIGEgaGlkZGVuIGZpZWxkIHdpdGhpbiB0aGUgb2JqZWN0LiBTbyBhdCB0aGUgbW9tZW50XHJcbiAgLy8gd2UgZG9uJ3QgaGF2ZSBhIHdheSBvZiB0aHJvd2luZyBhIHdhc20gdHJhcCBmcm9tIEpTLiBUT0RPIE1ha2UgYSBKUyBBUEkgdGhhdFxyXG4gIC8vIGFsbG93cyB0aGlzIGluIHRoZSB3YXNtIHNwZWMuXHJcblxyXG4gIC8vIFN1cHByZXNzIGNsb3N1cmUgY29tcGlsZXIgd2FybmluZyBoZXJlLiBDbG9zdXJlIGNvbXBpbGVyJ3MgYnVpbHRpbiBleHRlcm5cclxuICAvLyBkZWZpbnRpb24gZm9yIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciBjbGFpbXMgaXQgdGFrZXMgbm8gYXJndW1lbnRzIGV2ZW5cclxuICAvLyB0aG91Z2ggaXQgY2FuLlxyXG4gIC8vIFRPRE8oaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWNvbXBpbGVyL3B1bGwvMzkxMyk6IFJlbW92ZSBpZi93aGVuIHVwc3RyZWFtIGNsb3N1cmUgZ2V0cyBmaXhlZC5cclxuICAvKiogQHN1cHByZXNzIHtjaGVja1R5cGVzfSAqL1xyXG4gIHZhciBlID0gbmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcih3aGF0KTtcclxuXHJcbiAgcmVhZHlQcm9taXNlUmVqZWN0KGUpO1xyXG4gIC8vIFRocm93IHRoZSBlcnJvciB3aGV0aGVyIG9yIG5vdCBNT0RVTEFSSVpFIGlzIHNldCBiZWNhdXNlIGFib3J0IGlzIHVzZWRcclxuICAvLyBpbiBjb2RlIHBhdGhzIGFwYXJ0IGZyb20gaW5zdGFudGlhdGlvbiB3aGVyZSBhbiBleGNlcHRpb24gaXMgZXhwZWN0ZWRcclxuICAvLyB0byBiZSB0aHJvd24gd2hlbiBhYm9ydCBpcyBjYWxsZWQuXHJcbiAgdGhyb3cgZTtcclxufVxyXG5cclxuLy8gaW5jbHVkZTogbWVtb3J5cHJvZmlsZXIuanNcclxuLy8gZW5kIGluY2x1ZGU6IG1lbW9yeXByb2ZpbGVyLmpzXHJcbi8vIGluY2x1ZGU6IFVSSVV0aWxzLmpzXHJcbi8vIFByZWZpeCBvZiBkYXRhIFVSSXMgZW1pdHRlZCBieSBTSU5HTEVfRklMRSBhbmQgcmVsYXRlZCBvcHRpb25zLlxyXG52YXIgZGF0YVVSSVByZWZpeCA9ICdkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsJztcclxuXHJcbi8vIEluZGljYXRlcyB3aGV0aGVyIGZpbGVuYW1lIGlzIGEgYmFzZTY0IGRhdGEgVVJJLlxyXG5mdW5jdGlvbiBpc0RhdGFVUkkoZmlsZW5hbWUpIHtcclxuICAvLyBQcmVmaXggb2YgZGF0YSBVUklzIGVtaXR0ZWQgYnkgU0lOR0xFX0ZJTEUgYW5kIHJlbGF0ZWQgb3B0aW9ucy5cclxuICByZXR1cm4gZmlsZW5hbWUuc3RhcnRzV2l0aChkYXRhVVJJUHJlZml4KTtcclxufVxyXG5cclxuLy8gSW5kaWNhdGVzIHdoZXRoZXIgZmlsZW5hbWUgaXMgZGVsaXZlcmVkIHZpYSBmaWxlIHByb3RvY29sIChhcyBvcHBvc2VkIHRvIGh0dHAvaHR0cHMpXHJcbmZ1bmN0aW9uIGlzRmlsZVVSSShmaWxlbmFtZSkge1xyXG4gIHJldHVybiBmaWxlbmFtZS5zdGFydHNXaXRoKCdmaWxlOi8vJyk7XHJcbn1cclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBVUklVdGlscy5qc1xyXG4vLyBpbmNsdWRlOiBydW50aW1lX2V4Y2VwdGlvbnMuanNcclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfZXhjZXB0aW9ucy5qc1xyXG52YXIgd2FzbUJpbmFyeUZpbGU7XHJcbiAgd2FzbUJpbmFyeUZpbGUgPSAnd2FzbURic2Nhbi53YXNtJztcclxuICBpZiAoIWlzRGF0YVVSSSh3YXNtQmluYXJ5RmlsZSkpIHtcclxuICAgIHdhc21CaW5hcnlGaWxlID0gbG9jYXRlRmlsZSh3YXNtQmluYXJ5RmlsZSk7XHJcbiAgfVxyXG5cclxuZnVuY3Rpb24gZ2V0QmluYXJ5KGZpbGUpIHtcclxuICB0cnkge1xyXG4gICAgaWYgKGZpbGUgPT0gd2FzbUJpbmFyeUZpbGUgJiYgd2FzbUJpbmFyeSkge1xyXG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkod2FzbUJpbmFyeSk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVhZEJpbmFyeSkge1xyXG4gICAgICByZXR1cm4gcmVhZEJpbmFyeShmaWxlKTtcclxuICAgIH1cclxuICAgIHRocm93IFwiYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWRcIjtcclxuICB9XHJcbiAgY2F0Y2ggKGVycikge1xyXG4gICAgYWJvcnQoZXJyKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEJpbmFyeVByb21pc2UoYmluYXJ5RmlsZSkge1xyXG4gIC8vIElmIHdlIGRvbid0IGhhdmUgdGhlIGJpbmFyeSB5ZXQsIHRyeSB0byBsb2FkIGl0IGFzeW5jaHJvbm91c2x5LlxyXG4gIC8vIEZldGNoIGhhcyBzb21lIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zIG92ZXIgWEhSLCBsaWtlIGl0IGNhbid0IGJlIHVzZWQgb24gYSBmaWxlOi8vIHVybC5cclxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9mZXRjaC9wdWxsLzkyI2lzc3VlY29tbWVudC0xNDA2NjU5MzJcclxuICAvLyBDb3Jkb3ZhIG9yIEVsZWN0cm9uIGFwcHMgYXJlIHR5cGljYWxseSBsb2FkZWQgZnJvbSBhIGZpbGU6Ly8gdXJsLlxyXG4gIC8vIFNvIHVzZSBmZXRjaCBpZiBpdCBpcyBhdmFpbGFibGUgYW5kIHRoZSB1cmwgaXMgbm90IGEgZmlsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBYSFIuXHJcbiAgaWYgKCF3YXNtQmluYXJ5ICYmIChFTlZJUk9OTUVOVF9JU19XRUIgfHwgRU5WSVJPTk1FTlRfSVNfV09SS0VSKSkge1xyXG4gICAgaWYgKHR5cGVvZiBmZXRjaCA9PSAnZnVuY3Rpb24nXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZldGNoKGJpbmFyeUZpbGUsIHsgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicgfSkudGhlbihmdW5jdGlvbihyZXNwb25zZSkge1xyXG4gICAgICAgIGlmICghcmVzcG9uc2VbJ29rJ10pIHtcclxuICAgICAgICAgIHRocm93IFwiZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnXCIgKyBiaW5hcnlGaWxlICsgXCInXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNwb25zZVsnYXJyYXlCdWZmZXInXSgpO1xyXG4gICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gZ2V0QmluYXJ5KGJpbmFyeUZpbGUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIE90aGVyd2lzZSwgZ2V0QmluYXJ5IHNob3VsZCBiZSBhYmxlIHRvIGdldCBpdCBzeW5jaHJvbm91c2x5XHJcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKSB7IHJldHVybiBnZXRCaW5hcnkoYmluYXJ5RmlsZSk7IH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKGJpbmFyeUZpbGUsIGltcG9ydHMsIHJlY2VpdmVyKSB7XHJcbiAgcmV0dXJuIGdldEJpbmFyeVByb21pc2UoYmluYXJ5RmlsZSkudGhlbihmdW5jdGlvbihiaW5hcnkpIHtcclxuICAgIHJldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW5hcnksIGltcG9ydHMpO1xyXG4gIH0pLnRoZW4oZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICByZXR1cm4gaW5zdGFuY2U7XHJcbiAgfSkudGhlbihyZWNlaXZlciwgZnVuY3Rpb24ocmVhc29uKSB7XHJcbiAgICBlcnIoJ2ZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICcgKyByZWFzb24pO1xyXG5cclxuICAgIGFib3J0KHJlYXNvbik7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluc3RhbnRpYXRlQXN5bmMoYmluYXJ5LCBiaW5hcnlGaWxlLCBpbXBvcnRzLCBjYWxsYmFjaykge1xyXG4gIGlmICghYmluYXJ5ICYmXHJcbiAgICAgIHR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyA9PSAnZnVuY3Rpb24nICYmXHJcbiAgICAgICFpc0RhdGFVUkkoYmluYXJ5RmlsZSkgJiZcclxuICAgICAgdHlwZW9mIGZldGNoID09ICdmdW5jdGlvbicpIHtcclxuICAgIHJldHVybiBmZXRjaChiaW5hcnlGaWxlLCB7IGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nIH0pLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcclxuICAgICAgLy8gU3VwcHJlc3MgY2xvc3VyZSB3YXJuaW5nIGhlcmUgc2luY2UgdGhlIHVwc3RyZWFtIGRlZmluaXRpb24gZm9yXHJcbiAgICAgIC8vIGluc3RhbnRpYXRlU3RyZWFtaW5nIG9ubHkgYWxsb3dzIFByb21pc2U8UmVwc3BvbnNlPiByYXRoZXIgdGhhblxyXG4gICAgICAvLyBhbiBhY3R1YWwgUmVzcG9uc2UuXHJcbiAgICAgIC8vIFRPRE8oaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWNvbXBpbGVyL3B1bGwvMzkxMyk6IFJlbW92ZSBpZi93aGVuIHVwc3RyZWFtIGNsb3N1cmUgaXMgZml4ZWQuXHJcbiAgICAgIC8qKiBAc3VwcHJlc3Mge2NoZWNrVHlwZXN9ICovXHJcbiAgICAgIHZhciByZXN1bHQgPSBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhyZXNwb25zZSwgaW1wb3J0cyk7XHJcblxyXG4gICAgICByZXR1cm4gcmVzdWx0LnRoZW4oXHJcbiAgICAgICAgY2FsbGJhY2ssXHJcbiAgICAgICAgZnVuY3Rpb24ocmVhc29uKSB7XHJcbiAgICAgICAgICAvLyBXZSBleHBlY3QgdGhlIG1vc3QgY29tbW9uIGZhaWx1cmUgY2F1c2UgdG8gYmUgYSBiYWQgTUlNRSB0eXBlIGZvciB0aGUgYmluYXJ5LFxyXG4gICAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSBmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiBzaG91bGQgd29yay5cclxuICAgICAgICAgIGVycignd2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICcgKyByZWFzb24pO1xyXG4gICAgICAgICAgZXJyKCdmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbicpO1xyXG4gICAgICAgICAgcmV0dXJuIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSwgaW1wb3J0cywgY2FsbGJhY2spO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKGJpbmFyeUZpbGUsIGltcG9ydHMsIGNhbGxiYWNrKTtcclxuICB9XHJcbn1cclxuXHJcbi8vIENyZWF0ZSB0aGUgd2FzbSBpbnN0YW5jZS5cclxuLy8gUmVjZWl2ZXMgdGhlIHdhc20gaW1wb3J0cywgcmV0dXJucyB0aGUgZXhwb3J0cy5cclxuZnVuY3Rpb24gY3JlYXRlV2FzbSgpIHtcclxuICAvLyBwcmVwYXJlIGltcG9ydHNcclxuICB2YXIgaW5mbyA9IHtcclxuICAgICdlbnYnOiB3YXNtSW1wb3J0cyxcclxuICAgICd3YXNpX3NuYXBzaG90X3ByZXZpZXcxJzogd2FzbUltcG9ydHMsXHJcbiAgfTtcclxuICAvLyBMb2FkIHRoZSB3YXNtIG1vZHVsZSBhbmQgY3JlYXRlIGFuIGluc3RhbmNlIG9mIHVzaW5nIG5hdGl2ZSBzdXBwb3J0IGluIHRoZSBKUyBlbmdpbmUuXHJcbiAgLy8gaGFuZGxlIGEgZ2VuZXJhdGVkIHdhc20gaW5zdGFuY2UsIHJlY2VpdmluZyBpdHMgZXhwb3J0cyBhbmRcclxuICAvLyBwZXJmb3JtaW5nIG90aGVyIG5lY2Vzc2FyeSBzZXR1cFxyXG4gIC8qKiBAcGFyYW0ge1dlYkFzc2VtYmx5Lk1vZHVsZT19IG1vZHVsZSovXHJcbiAgZnVuY3Rpb24gcmVjZWl2ZUluc3RhbmNlKGluc3RhbmNlLCBtb2R1bGUpIHtcclxuICAgIHZhciBleHBvcnRzID0gaW5zdGFuY2UuZXhwb3J0cztcclxuXHJcbiAgICBNb2R1bGVbJ2FzbSddID0gZXhwb3J0cztcclxuXHJcbiAgICB3YXNtTWVtb3J5ID0gTW9kdWxlWydhc20nXVsnbWVtb3J5J107XHJcbiAgICB1cGRhdGVNZW1vcnlWaWV3cygpO1xyXG5cclxuICAgIHdhc21UYWJsZSA9IE1vZHVsZVsnYXNtJ11bJ19faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUnXTtcclxuXHJcbiAgICBhZGRPbkluaXQoTW9kdWxlWydhc20nXVsnX193YXNtX2NhbGxfY3RvcnMnXSk7XHJcblxyXG4gICAgcmVtb3ZlUnVuRGVwZW5kZW5jeSgnd2FzbS1pbnN0YW50aWF0ZScpO1xyXG5cclxuICAgIHJldHVybiBleHBvcnRzO1xyXG4gIH1cclxuICAvLyB3YWl0IGZvciB0aGUgcHRocmVhZCBwb29sIChpZiBhbnkpXHJcbiAgYWRkUnVuRGVwZW5kZW5jeSgnd2FzbS1pbnN0YW50aWF0ZScpO1xyXG5cclxuICAvLyBQcmVmZXIgc3RyZWFtaW5nIGluc3RhbnRpYXRpb24gaWYgYXZhaWxhYmxlLlxyXG4gIGZ1bmN0aW9uIHJlY2VpdmVJbnN0YW50aWF0aW9uUmVzdWx0KHJlc3VsdCkge1xyXG4gICAgLy8gJ3Jlc3VsdCcgaXMgYSBSZXN1bHRPYmplY3Qgb2JqZWN0IHdoaWNoIGhhcyBib3RoIHRoZSBtb2R1bGUgYW5kIGluc3RhbmNlLlxyXG4gICAgLy8gcmVjZWl2ZUluc3RhbmNlKCkgd2lsbCBzd2FwIGluIHRoZSBleHBvcnRzICh0byBNb2R1bGUuYXNtKSBzbyB0aGV5IGNhbiBiZSBjYWxsZWRcclxuICAgIC8vIFRPRE86IER1ZSB0byBDbG9zdXJlIHJlZ3Jlc3Npb24gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWNvbXBpbGVyL2lzc3Vlcy8zMTkzLCB0aGUgYWJvdmUgbGluZSBubyBsb25nZXIgb3B0aW1pemVzIG91dCBkb3duIHRvIHRoZSBmb2xsb3dpbmcgbGluZS5cclxuICAgIC8vIFdoZW4gdGhlIHJlZ3Jlc3Npb24gaXMgZml4ZWQsIGNhbiByZXN0b3JlIHRoZSBhYm92ZSBQVEhSRUFEUy1lbmFibGVkIHBhdGguXHJcbiAgICByZWNlaXZlSW5zdGFuY2UocmVzdWx0WydpbnN0YW5jZSddKTtcclxuICB9XHJcblxyXG4gIC8vIFVzZXIgc2hlbGwgcGFnZXMgY2FuIHdyaXRlIHRoZWlyIG93biBNb2R1bGUuaW5zdGFudGlhdGVXYXNtID0gZnVuY3Rpb24oaW1wb3J0cywgc3VjY2Vzc0NhbGxiYWNrKSBjYWxsYmFja1xyXG4gIC8vIHRvIG1hbnVhbGx5IGluc3RhbnRpYXRlIHRoZSBXYXNtIG1vZHVsZSB0aGVtc2VsdmVzLiBUaGlzIGFsbG93cyBwYWdlcyB0b1xyXG4gIC8vIHJ1biB0aGUgaW5zdGFudGlhdGlvbiBwYXJhbGxlbCB0byBhbnkgb3RoZXIgYXN5bmMgc3RhcnR1cCBhY3Rpb25zIHRoZXkgYXJlXHJcbiAgLy8gcGVyZm9ybWluZy5cclxuICAvLyBBbHNvIHB0aHJlYWRzIGFuZCB3YXNtIHdvcmtlcnMgaW5pdGlhbGl6ZSB0aGUgd2FzbSBpbnN0YW5jZSB0aHJvdWdoIHRoaXNcclxuICAvLyBwYXRoLlxyXG4gIGlmIChNb2R1bGVbJ2luc3RhbnRpYXRlV2FzbSddKSB7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIE1vZHVsZVsnaW5zdGFudGlhdGVXYXNtJ10oaW5mbywgcmVjZWl2ZUluc3RhbmNlKTtcclxuICAgIH0gY2F0Y2goZSkge1xyXG4gICAgICBlcnIoJ01vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICcgKyBlKTtcclxuICAgICAgICAvLyBJZiBpbnN0YW50aWF0aW9uIGZhaWxzLCByZWplY3QgdGhlIG1vZHVsZSByZWFkeSBwcm9taXNlLlxyXG4gICAgICAgIHJlYWR5UHJvbWlzZVJlamVjdChlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIElmIGluc3RhbnRpYXRpb24gZmFpbHMsIHJlamVjdCB0aGUgbW9kdWxlIHJlYWR5IHByb21pc2UuXHJcbiAgaW5zdGFudGlhdGVBc3luYyh3YXNtQmluYXJ5LCB3YXNtQmluYXJ5RmlsZSwgaW5mbywgcmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHQpLmNhdGNoKHJlYWR5UHJvbWlzZVJlamVjdCk7XHJcbiAgcmV0dXJuIHt9OyAvLyBubyBleHBvcnRzIHlldDsgd2UnbGwgZmlsbCB0aGVtIGluIGxhdGVyXHJcbn1cclxuXHJcbi8vIEdsb2JhbHMgdXNlZCBieSBKUyBpNjQgY29udmVyc2lvbnMgKHNlZSBtYWtlU2V0VmFsdWUpXHJcbnZhciB0ZW1wRG91YmxlO1xyXG52YXIgdGVtcEk2NDtcclxuXHJcbi8vIGluY2x1ZGU6IHJ1bnRpbWVfZGVidWcuanNcclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfZGVidWcuanNcclxuLy8gPT09IEJvZHkgPT09XHJcblxyXG5cclxuLy8gZW5kIGluY2x1ZGU6IHByZWFtYmxlLmpzXHJcblxyXG4gIC8qKiBAY29uc3RydWN0b3IgKi9cclxuICBmdW5jdGlvbiBFeGl0U3RhdHVzKHN0YXR1cykge1xyXG4gICAgICB0aGlzLm5hbWUgPSAnRXhpdFN0YXR1cyc7XHJcbiAgICAgIHRoaXMubWVzc2FnZSA9ICdQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCcgKyBzdGF0dXMgKyAnKSc7XHJcbiAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgfVxyXG5cclxuICBmdW5jdGlvbiBjYWxsUnVudGltZUNhbGxiYWNrcyhjYWxsYmFja3MpIHtcclxuICAgICAgd2hpbGUgKGNhbGxiYWNrcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gUGFzcyB0aGUgbW9kdWxlIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cclxuICAgICAgICBjYWxsYmFja3Muc2hpZnQoKShNb2R1bGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcHRyXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gZ2V0VmFsdWUocHRyLCB0eXBlID0gJ2k4Jykge1xyXG4gICAgaWYgKHR5cGUuZW5kc1dpdGgoJyonKSkgdHlwZSA9ICcqJztcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdpMSc6IHJldHVybiBIRUFQOFsoKHB0cik+PjApXTtcclxuICAgICAgY2FzZSAnaTgnOiByZXR1cm4gSEVBUDhbKChwdHIpPj4wKV07XHJcbiAgICAgIGNhc2UgJ2kxNic6IHJldHVybiBIRUFQMTZbKChwdHIpPj4xKV07XHJcbiAgICAgIGNhc2UgJ2kzMic6IHJldHVybiBIRUFQMzJbKChwdHIpPj4yKV07XHJcbiAgICAgIGNhc2UgJ2k2NCc6IHJldHVybiBIRUFQMzJbKChwdHIpPj4yKV07XHJcbiAgICAgIGNhc2UgJ2Zsb2F0JzogcmV0dXJuIEhFQVBGMzJbKChwdHIpPj4yKV07XHJcbiAgICAgIGNhc2UgJ2RvdWJsZSc6IHJldHVybiBIRUFQRjY0WygocHRyKT4+MyldO1xyXG4gICAgICBjYXNlICcqJzogcmV0dXJuIEhFQVBVMzJbKChwdHIpPj4yKV07XHJcbiAgICAgIGRlZmF1bHQ6IGFib3J0KCdpbnZhbGlkIHR5cGUgZm9yIGdldFZhbHVlOiAnICsgdHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHB0clxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gc2V0VmFsdWUocHRyLCB2YWx1ZSwgdHlwZSA9ICdpOCcpIHtcclxuICAgIGlmICh0eXBlLmVuZHNXaXRoKCcqJykpIHR5cGUgPSAnKic7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnaTEnOiBIRUFQOFsoKHB0cik+PjApXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnaTgnOiBIRUFQOFsoKHB0cik+PjApXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnaTE2JzogSEVBUDE2WygocHRyKT4+MSldID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBjYXNlICdpMzInOiBIRUFQMzJbKChwdHIpPj4yKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2k2NCc6ICh0ZW1wSTY0ID0gW3ZhbHVlPj4+MCwodGVtcERvdWJsZT12YWx1ZSwoKyhNYXRoLmFicyh0ZW1wRG91YmxlKSkpID49IDEuMCA/ICh0ZW1wRG91YmxlID4gMC4wID8gKChNYXRoLm1pbigoKyhNYXRoLmZsb29yKCh0ZW1wRG91YmxlKS80Mjk0OTY3Mjk2LjApKSksIDQyOTQ5NjcyOTUuMCkpfDApPj4+MCA6ICh+figoKyhNYXRoLmNlaWwoKHRlbXBEb3VibGUgLSArKCgofn4odGVtcERvdWJsZSkpKT4+PjApKS80Mjk0OTY3Mjk2LjApKSkpKT4+PjApIDogMCldLEhFQVAzMlsoKHB0cik+PjIpXSA9IHRlbXBJNjRbMF0sSEVBUDMyWygoKHB0cikrKDQpKT4+MildID0gdGVtcEk2NFsxXSk7IGJyZWFrO1xyXG4gICAgICBjYXNlICdmbG9hdCc6IEhFQVBGMzJbKChwdHIpPj4yKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2RvdWJsZSc6IEhFQVBGNjRbKChwdHIpPj4zKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJyonOiBIRUFQVTMyWygocHRyKT4+MildID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OiBhYm9ydCgnaW52YWxpZCB0eXBlIGZvciBzZXRWYWx1ZTogJyArIHR5cGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEBjb25zdHJ1Y3RvciAqL1xyXG4gIGZ1bmN0aW9uIEV4Y2VwdGlvbkluZm8oZXhjUHRyKSB7XHJcbiAgICAgIHRoaXMuZXhjUHRyID0gZXhjUHRyO1xyXG4gICAgICB0aGlzLnB0ciA9IGV4Y1B0ciAtIDI0O1xyXG4gIFxyXG4gICAgICB0aGlzLnNldF90eXBlID0gZnVuY3Rpb24odHlwZSkge1xyXG4gICAgICAgIEhFQVBVMzJbKCgodGhpcy5wdHIpKyg0KSk+PjIpXSA9IHR5cGU7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuZ2V0X3R5cGUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gSEVBUFUzMlsoKCh0aGlzLnB0cikrKDQpKT4+MildO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLnNldF9kZXN0cnVjdG9yID0gZnVuY3Rpb24oZGVzdHJ1Y3Rvcikge1xyXG4gICAgICAgIEhFQVBVMzJbKCgodGhpcy5wdHIpKyg4KSk+PjIpXSA9IGRlc3RydWN0b3I7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuZ2V0X2Rlc3RydWN0b3IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gSEVBUFUzMlsoKCh0aGlzLnB0cikrKDgpKT4+MildO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLnNldF9jYXVnaHQgPSBmdW5jdGlvbiAoY2F1Z2h0KSB7XHJcbiAgICAgICAgY2F1Z2h0ID0gY2F1Z2h0ID8gMSA6IDA7XHJcbiAgICAgICAgSEVBUDhbKCgodGhpcy5wdHIpKygxMikpPj4wKV0gPSBjYXVnaHQ7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuZ2V0X2NhdWdodCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gSEVBUDhbKCgodGhpcy5wdHIpKygxMikpPj4wKV0gIT0gMDtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5zZXRfcmV0aHJvd24gPSBmdW5jdGlvbiAocmV0aHJvd24pIHtcclxuICAgICAgICByZXRocm93biA9IHJldGhyb3duID8gMSA6IDA7XHJcbiAgICAgICAgSEVBUDhbKCgodGhpcy5wdHIpKygxMykpPj4wKV0gPSByZXRocm93bjtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5nZXRfcmV0aHJvd24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEhFQVA4WygoKHRoaXMucHRyKSsoMTMpKT4+MCldICE9IDA7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIC8vIEluaXRpYWxpemUgbmF0aXZlIHN0cnVjdHVyZSBmaWVsZHMuIFNob3VsZCBiZSBjYWxsZWQgb25jZSBhZnRlciBhbGxvY2F0ZWQuXHJcbiAgICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uKHR5cGUsIGRlc3RydWN0b3IpIHtcclxuICAgICAgICB0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCk7XHJcbiAgICAgICAgdGhpcy5zZXRfdHlwZSh0eXBlKTtcclxuICAgICAgICB0aGlzLnNldF9kZXN0cnVjdG9yKGRlc3RydWN0b3IpO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHRoaXMuc2V0X2FkanVzdGVkX3B0ciA9IGZ1bmN0aW9uKGFkanVzdGVkUHRyKSB7XHJcbiAgICAgICAgSEVBUFUzMlsoKCh0aGlzLnB0cikrKDE2KSk+PjIpXSA9IGFkanVzdGVkUHRyO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLmdldF9hZGp1c3RlZF9wdHIgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gSEVBUFUzMlsoKCh0aGlzLnB0cikrKDE2KSk+PjIpXTtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgLy8gR2V0IHBvaW50ZXIgd2hpY2ggaXMgZXhwZWN0ZWQgdG8gYmUgcmVjZWl2ZWQgYnkgY2F0Y2ggY2xhdXNlIGluIEMrKyBjb2RlLiBJdCBtYXkgYmUgYWRqdXN0ZWRcclxuICAgICAgLy8gd2hlbiB0aGUgcG9pbnRlciBpcyBjYXN0ZWQgdG8gc29tZSBvZiB0aGUgZXhjZXB0aW9uIG9iamVjdCBiYXNlIGNsYXNzZXMgKGUuZy4gd2hlbiB2aXJ0dWFsXHJcbiAgICAgIC8vIGluaGVyaXRhbmNlIGlzIHVzZWQpLiBXaGVuIGEgcG9pbnRlciBpcyB0aHJvd24gdGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgdGhyb3duIHBvaW50ZXJcclxuICAgICAgLy8gaXRzZWxmLlxyXG4gICAgICB0aGlzLmdldF9leGNlcHRpb25fcHRyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gV29yayBhcm91bmQgYSBmYXN0Y29tcCBidWcsIHRoaXMgY29kZSBpcyBzdGlsbCBpbmNsdWRlZCBmb3Igc29tZSByZWFzb24gaW4gYSBidWlsZCB3aXRob3V0XHJcbiAgICAgICAgLy8gZXhjZXB0aW9ucyBzdXBwb3J0LlxyXG4gICAgICAgIHZhciBpc1BvaW50ZXIgPSBfX19jeGFfaXNfcG9pbnRlcl90eXBlKHRoaXMuZ2V0X3R5cGUoKSk7XHJcbiAgICAgICAgaWYgKGlzUG9pbnRlcikge1xyXG4gICAgICAgICAgcmV0dXJuIEhFQVBVMzJbKCh0aGlzLmV4Y1B0cik+PjIpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGFkanVzdGVkID0gdGhpcy5nZXRfYWRqdXN0ZWRfcHRyKCk7XHJcbiAgICAgICAgaWYgKGFkanVzdGVkICE9PSAwKSByZXR1cm4gYWRqdXN0ZWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhjUHRyO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIFxyXG4gIHZhciBleGNlcHRpb25MYXN0ID0gMDtcclxuICBcclxuICB2YXIgdW5jYXVnaHRFeGNlcHRpb25Db3VudCA9IDA7XHJcbiAgZnVuY3Rpb24gX19fY3hhX3Rocm93KHB0ciwgdHlwZSwgZGVzdHJ1Y3Rvcikge1xyXG4gICAgICB2YXIgaW5mbyA9IG5ldyBFeGNlcHRpb25JbmZvKHB0cik7XHJcbiAgICAgIC8vIEluaXRpYWxpemUgRXhjZXB0aW9uSW5mbyBjb250ZW50IGFmdGVyIGl0IHdhcyBhbGxvY2F0ZWQgaW4gX19jeGFfYWxsb2NhdGVfZXhjZXB0aW9uLlxyXG4gICAgICBpbmZvLmluaXQodHlwZSwgZGVzdHJ1Y3Rvcik7XHJcbiAgICAgIGV4Y2VwdGlvbkxhc3QgPSBwdHI7XHJcbiAgICAgIHVuY2F1Z2h0RXhjZXB0aW9uQ291bnQrKztcclxuICAgICAgdGhyb3cgZXhjZXB0aW9uTGFzdDtcclxuICAgIH1cclxuXHJcbiAgZnVuY3Rpb24gX2Fib3J0KCkge1xyXG4gICAgICBhYm9ydCgnJyk7XHJcbiAgICB9XHJcblxyXG4gIGZ1bmN0aW9uIF9lbXNjcmlwdGVuX21lbWNweV9iaWcoZGVzdCwgc3JjLCBudW0pIHtcclxuICAgICAgSEVBUFU4LmNvcHlXaXRoaW4oZGVzdCwgc3JjLCBzcmMgKyBudW0pO1xyXG4gICAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRIZWFwTWF4KCkge1xyXG4gICAgICAvLyBTdGF5IG9uZSBXYXNtIHBhZ2Ugc2hvcnQgb2YgNEdCOiB3aGlsZSBlLmcuIENocm9tZSBpcyBhYmxlIHRvIGFsbG9jYXRlXHJcbiAgICAgIC8vIGZ1bGwgNEdCIFdhc20gbWVtb3JpZXMsIHRoZSBzaXplIHdpbGwgd3JhcCBiYWNrIHRvIDAgYnl0ZXMgaW4gV2FzbSBzaWRlXHJcbiAgICAgIC8vIGZvciBhbnkgY29kZSB0aGF0IGRlYWxzIHdpdGggaGVhcCBzaXplcywgd2hpY2ggd291bGQgcmVxdWlyZSBzcGVjaWFsXHJcbiAgICAgIC8vIGNhc2luZyBhbGwgaGVhcCBzaXplIHJlbGF0ZWQgY29kZSB0byB0cmVhdCAwIHNwZWNpYWxseS5cclxuICAgICAgcmV0dXJuIDIxNDc0ODM2NDg7XHJcbiAgICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gZW1zY3JpcHRlbl9yZWFsbG9jX2J1ZmZlcihzaXplKSB7XHJcbiAgICAgIHZhciBiID0gd2FzbU1lbW9yeS5idWZmZXI7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8gcm91bmQgc2l6ZSBncm93IHJlcXVlc3QgdXAgdG8gd2FzbSBwYWdlIHNpemUgKGZpeGVkIDY0S0IgcGVyIHNwZWMpXHJcbiAgICAgICAgd2FzbU1lbW9yeS5ncm93KChzaXplIC0gYi5ieXRlTGVuZ3RoICsgNjU1MzUpID4+PiAxNik7IC8vIC5ncm93KCkgdGFrZXMgYSBkZWx0YSBjb21wYXJlZCB0byB0aGUgcHJldmlvdXMgc2l6ZVxyXG4gICAgICAgIHVwZGF0ZU1lbW9yeVZpZXdzKCk7XHJcbiAgICAgICAgcmV0dXJuIDEgLypzdWNjZXNzKi87XHJcbiAgICAgIH0gY2F0Y2goZSkge1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGltcGxpY2l0IDAgcmV0dXJuIHRvIHNhdmUgY29kZSBzaXplIChjYWxsZXIgd2lsbCBjYXN0IFwidW5kZWZpbmVkXCIgaW50byAwXHJcbiAgICAgIC8vIGFueWhvdylcclxuICAgIH1cclxuICBmdW5jdGlvbiBfZW1zY3JpcHRlbl9yZXNpemVfaGVhcChyZXF1ZXN0ZWRTaXplKSB7XHJcbiAgICAgIHZhciBvbGRTaXplID0gSEVBUFU4Lmxlbmd0aDtcclxuICAgICAgcmVxdWVzdGVkU2l6ZSA9IHJlcXVlc3RlZFNpemUgPj4+IDA7XHJcbiAgICAgIC8vIFdpdGggbXVsdGl0aHJlYWRlZCBidWlsZHMsIHJhY2VzIGNhbiBoYXBwZW4gKGFub3RoZXIgdGhyZWFkIG1pZ2h0IGluY3JlYXNlIHRoZSBzaXplXHJcbiAgICAgIC8vIGluIGJldHdlZW4pLCBzbyByZXR1cm4gYSBmYWlsdXJlLCBhbmQgbGV0IHRoZSBjYWxsZXIgcmV0cnkuXHJcbiAgXHJcbiAgICAgIC8vIE1lbW9yeSByZXNpemUgcnVsZXM6XHJcbiAgICAgIC8vIDEuICBBbHdheXMgaW5jcmVhc2UgaGVhcCBzaXplIHRvIGF0IGxlYXN0IHRoZSByZXF1ZXN0ZWQgc2l6ZSwgcm91bmRlZCB1cFxyXG4gICAgICAvLyAgICAgdG8gbmV4dCBwYWdlIG11bHRpcGxlLlxyXG4gICAgICAvLyAyYS4gSWYgTUVNT1JZX0dST1dUSF9MSU5FQVJfU1RFUCA9PSAtMSwgZXhjZXNzaXZlbHkgcmVzaXplIHRoZSBoZWFwXHJcbiAgICAgIC8vICAgICBnZW9tZXRyaWNhbGx5OiBpbmNyZWFzZSB0aGUgaGVhcCBzaXplIGFjY29yZGluZyB0b1xyXG4gICAgICAvLyAgICAgTUVNT1JZX0dST1dUSF9HRU9NRVRSSUNfU1RFUCBmYWN0b3IgKGRlZmF1bHQgKzIwJSksIEF0IG1vc3RcclxuICAgICAgLy8gICAgIG92ZXJyZXNlcnZlIGJ5IE1FTU9SWV9HUk9XVEhfR0VPTUVUUklDX0NBUCBieXRlcyAoZGVmYXVsdCA5Nk1CKS5cclxuICAgICAgLy8gMmIuIElmIE1FTU9SWV9HUk9XVEhfTElORUFSX1NURVAgIT0gLTEsIGV4Y2Vzc2l2ZWx5IHJlc2l6ZSB0aGUgaGVhcFxyXG4gICAgICAvLyAgICAgbGluZWFybHk6IGluY3JlYXNlIHRoZSBoZWFwIHNpemUgYnkgYXQgbGVhc3RcclxuICAgICAgLy8gICAgIE1FTU9SWV9HUk9XVEhfTElORUFSX1NURVAgYnl0ZXMuXHJcbiAgICAgIC8vIDMuICBNYXggc2l6ZSBmb3IgdGhlIGhlYXAgaXMgY2FwcGVkIGF0IDIwNDhNQi1XQVNNX1BBR0VfU0laRSwgb3IgYnlcclxuICAgICAgLy8gICAgIE1BWElNVU1fTUVNT1JZLCBvciBieSBBU0FOIGxpbWl0LCBkZXBlbmRpbmcgb24gd2hpY2ggaXMgc21hbGxlc3RcclxuICAgICAgLy8gNC4gIElmIHdlIHdlcmUgdW5hYmxlIHRvIGFsbG9jYXRlIGFzIG11Y2ggbWVtb3J5LCBpdCBtYXkgYmUgZHVlIHRvXHJcbiAgICAgIC8vICAgICBvdmVyLWVhZ2VyIGRlY2lzaW9uIHRvIGV4Y2Vzc2l2ZWx5IHJlc2VydmUgZHVlIHRvICgzKSBhYm92ZS5cclxuICAgICAgLy8gICAgIEhlbmNlIGlmIGFuIGFsbG9jYXRpb24gZmFpbHMsIGN1dCBkb3duIG9uIHRoZSBhbW91bnQgb2YgZXhjZXNzXHJcbiAgICAgIC8vICAgICBncm93dGgsIGluIGFuIGF0dGVtcHQgdG8gc3VjY2VlZCB0byBwZXJmb3JtIGEgc21hbGxlciBhbGxvY2F0aW9uLlxyXG4gIFxyXG4gICAgICAvLyBBIGxpbWl0IGlzIHNldCBmb3IgaG93IG11Y2ggd2UgY2FuIGdyb3cuIFdlIHNob3VsZCBub3QgZXhjZWVkIHRoYXRcclxuICAgICAgLy8gKHRoZSB3YXNtIGJpbmFyeSBzcGVjaWZpZXMgaXQsIHNvIGlmIHdlIHRyaWVkLCB3ZSdkIGZhaWwgYW55aG93KS5cclxuICAgICAgdmFyIG1heEhlYXBTaXplID0gZ2V0SGVhcE1heCgpO1xyXG4gICAgICBpZiAocmVxdWVzdGVkU2l6ZSA+IG1heEhlYXBTaXplKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIGxldCBhbGlnblVwID0gKHgsIG11bHRpcGxlKSA9PiB4ICsgKG11bHRpcGxlIC0geCAlIG11bHRpcGxlKSAlIG11bHRpcGxlO1xyXG4gIFxyXG4gICAgICAvLyBMb29wIHRocm91Z2ggcG90ZW50aWFsIGhlYXAgc2l6ZSBpbmNyZWFzZXMuIElmIHdlIGF0dGVtcHQgYSB0b28gZWFnZXJcclxuICAgICAgLy8gcmVzZXJ2YXRpb24gdGhhdCBmYWlscywgY3V0IGRvd24gb24gdGhlIGF0dGVtcHRlZCBzaXplIGFuZCByZXNlcnZlIGFcclxuICAgICAgLy8gc21hbGxlciBidW1wIGluc3RlYWQuIChtYXggMyB0aW1lcywgY2hvc2VuIHNvbWV3aGF0IGFyYml0cmFyaWx5KVxyXG4gICAgICBmb3IgKHZhciBjdXREb3duID0gMTsgY3V0RG93biA8PSA0OyBjdXREb3duICo9IDIpIHtcclxuICAgICAgICB2YXIgb3Zlckdyb3duSGVhcFNpemUgPSBvbGRTaXplICogKDEgKyAwLjIgLyBjdXREb3duKTsgLy8gZW5zdXJlIGdlb21ldHJpYyBncm93dGhcclxuICAgICAgICAvLyBidXQgbGltaXQgb3ZlcnJlc2VydmluZyAoZGVmYXVsdCB0byBjYXBwaW5nIGF0ICs5Nk1CIG92ZXJncm93dGggYXQgbW9zdClcclxuICAgICAgICBvdmVyR3Jvd25IZWFwU2l6ZSA9IE1hdGgubWluKG92ZXJHcm93bkhlYXBTaXplLCByZXF1ZXN0ZWRTaXplICsgMTAwNjYzMjk2ICk7XHJcbiAgXHJcbiAgICAgICAgdmFyIG5ld1NpemUgPSBNYXRoLm1pbihtYXhIZWFwU2l6ZSwgYWxpZ25VcChNYXRoLm1heChyZXF1ZXN0ZWRTaXplLCBvdmVyR3Jvd25IZWFwU2l6ZSksIDY1NTM2KSk7XHJcbiAgXHJcbiAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gZW1zY3JpcHRlbl9yZWFsbG9jX2J1ZmZlcihuZXdTaXplKTtcclxuICAgICAgICBpZiAocmVwbGFjZW1lbnQpIHtcclxuICBcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldENGdW5jKGlkZW50KSB7XHJcbiAgICAgIHZhciBmdW5jID0gTW9kdWxlWydfJyArIGlkZW50XTsgLy8gY2xvc3VyZSBleHBvcnRlZCBmdW5jdGlvblxyXG4gICAgICByZXR1cm4gZnVuYztcclxuICAgIH1cclxuICBcclxuICBcclxuICBmdW5jdGlvbiB3cml0ZUFycmF5VG9NZW1vcnkoYXJyYXksIGJ1ZmZlcikge1xyXG4gICAgICBIRUFQOC5zZXQoYXJyYXksIGJ1ZmZlcik7XHJcbiAgICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gbGVuZ3RoQnl0ZXNVVEY4KHN0cikge1xyXG4gICAgICB2YXIgbGVuID0gMDtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAvLyBHb3RjaGE6IGNoYXJDb2RlQXQgcmV0dXJucyBhIDE2LWJpdCB3b3JkIHRoYXQgaXMgYSBVVEYtMTYgZW5jb2RlZCBjb2RlXHJcbiAgICAgICAgLy8gdW5pdCwgbm90IGEgVW5pY29kZSBjb2RlIHBvaW50IG9mIHRoZSBjaGFyYWN0ZXIhIFNvIGRlY29kZVxyXG4gICAgICAgIC8vIFVURjE2LT5VVEYzMi0+VVRGOC5cclxuICAgICAgICAvLyBTZWUgaHR0cDovL3VuaWNvZGUub3JnL2ZhcS91dGZfYm9tLmh0bWwjdXRmMTYtM1xyXG4gICAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSk7IC8vIHBvc3NpYmx5IGEgbGVhZCBzdXJyb2dhdGVcclxuICAgICAgICBpZiAoYyA8PSAweDdGKSB7XHJcbiAgICAgICAgICBsZW4rKztcclxuICAgICAgICB9IGVsc2UgaWYgKGMgPD0gMHg3RkYpIHtcclxuICAgICAgICAgIGxlbiArPSAyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYyA+PSAweEQ4MDAgJiYgYyA8PSAweERGRkYpIHtcclxuICAgICAgICAgIGxlbiArPSA0OyArK2k7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxlbiArPSAzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbGVuO1xyXG4gICAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIHN0cmluZ1RvVVRGOEFycmF5KHN0ciwgaGVhcCwgb3V0SWR4LCBtYXhCeXRlc1RvV3JpdGUpIHtcclxuICAgICAgLy8gUGFyYW1ldGVyIG1heEJ5dGVzVG9Xcml0ZSBpcyBub3Qgb3B0aW9uYWwuIE5lZ2F0aXZlIHZhbHVlcywgMCwgbnVsbCxcclxuICAgICAgLy8gdW5kZWZpbmVkIGFuZCBmYWxzZSBlYWNoIGRvbid0IHdyaXRlIG91dCBhbnkgYnl0ZXMuXHJcbiAgICAgIGlmICghKG1heEJ5dGVzVG9Xcml0ZSA+IDApKVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gIFxyXG4gICAgICB2YXIgc3RhcnRJZHggPSBvdXRJZHg7XHJcbiAgICAgIHZhciBlbmRJZHggPSBvdXRJZHggKyBtYXhCeXRlc1RvV3JpdGUgLSAxOyAvLyAtMSBmb3Igc3RyaW5nIG51bGwgdGVybWluYXRvci5cclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAvLyBHb3RjaGE6IGNoYXJDb2RlQXQgcmV0dXJucyBhIDE2LWJpdCB3b3JkIHRoYXQgaXMgYSBVVEYtMTYgZW5jb2RlZCBjb2RlXHJcbiAgICAgICAgLy8gdW5pdCwgbm90IGEgVW5pY29kZSBjb2RlIHBvaW50IG9mIHRoZSBjaGFyYWN0ZXIhIFNvIGRlY29kZVxyXG4gICAgICAgIC8vIFVURjE2LT5VVEYzMi0+VVRGOC5cclxuICAgICAgICAvLyBTZWUgaHR0cDovL3VuaWNvZGUub3JnL2ZhcS91dGZfYm9tLmh0bWwjdXRmMTYtM1xyXG4gICAgICAgIC8vIEZvciBVVEY4IGJ5dGUgc3RydWN0dXJlLCBzZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VVEYtOCNEZXNjcmlwdGlvblxyXG4gICAgICAgIC8vIGFuZCBodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjI3OS50eHRcclxuICAgICAgICAvLyBhbmQgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM2MjlcclxuICAgICAgICB2YXIgdSA9IHN0ci5jaGFyQ29kZUF0KGkpOyAvLyBwb3NzaWJseSBhIGxlYWQgc3Vycm9nYXRlXHJcbiAgICAgICAgaWYgKHUgPj0gMHhEODAwICYmIHUgPD0gMHhERkZGKSB7XHJcbiAgICAgICAgICB2YXIgdTEgPSBzdHIuY2hhckNvZGVBdCgrK2kpO1xyXG4gICAgICAgICAgdSA9IDB4MTAwMDAgKyAoKHUgJiAweDNGRikgPDwgMTApIHwgKHUxICYgMHgzRkYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodSA8PSAweDdGKSB7XHJcbiAgICAgICAgICBpZiAob3V0SWR4ID49IGVuZElkeCkgYnJlYWs7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IHU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh1IDw9IDB4N0ZGKSB7XHJcbiAgICAgICAgICBpZiAob3V0SWR4ICsgMSA+PSBlbmRJZHgpIGJyZWFrO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweEMwIHwgKHUgPj4gNik7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAodSAmIDYzKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHUgPD0gMHhGRkZGKSB7XHJcbiAgICAgICAgICBpZiAob3V0SWR4ICsgMiA+PSBlbmRJZHgpIGJyZWFrO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweEUwIHwgKHUgPj4gMTIpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKCh1ID4+IDYpICYgNjMpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKHUgJiA2Myk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChvdXRJZHggKyAzID49IGVuZElkeCkgYnJlYWs7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4RjAgfCAodSA+PiAxOCk7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAoKHUgPj4gMTIpICYgNjMpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKCh1ID4+IDYpICYgNjMpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKHUgJiA2Myk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIE51bGwtdGVybWluYXRlIHRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIuXHJcbiAgICAgIGhlYXBbb3V0SWR4XSA9IDA7XHJcbiAgICAgIHJldHVybiBvdXRJZHggLSBzdGFydElkeDtcclxuICAgIH1cclxuICBmdW5jdGlvbiBzdHJpbmdUb1VURjgoc3RyLCBvdXRQdHIsIG1heEJ5dGVzVG9Xcml0ZSkge1xyXG4gICAgICByZXR1cm4gc3RyaW5nVG9VVEY4QXJyYXkoc3RyLCBIRUFQVTgsb3V0UHRyLCBtYXhCeXRlc1RvV3JpdGUpO1xyXG4gICAgfVxyXG4gIGZ1bmN0aW9uIHN0cmluZ1RvVVRGOE9uU3RhY2soc3RyKSB7XHJcbiAgICAgIHZhciBzaXplID0gbGVuZ3RoQnl0ZXNVVEY4KHN0cikgKyAxO1xyXG4gICAgICB2YXIgcmV0ID0gc3RhY2tBbGxvYyhzaXplKTtcclxuICAgICAgc3RyaW5nVG9VVEY4KHN0ciwgcmV0LCBzaXplKTtcclxuICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuICBcclxuICB2YXIgVVRGOERlY29kZXIgPSB0eXBlb2YgVGV4dERlY29kZXIgIT0gJ3VuZGVmaW5lZCcgPyBuZXcgVGV4dERlY29kZXIoJ3V0ZjgnKSA6IHVuZGVmaW5lZDtcclxuICBcclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSBwb2ludGVyICdpZHgnIHRvIGEgbnVsbC10ZXJtaW5hdGVkIFVURjgtZW5jb2RlZCBzdHJpbmcgaW4gdGhlIGdpdmVuXHJcbiAgICAgKiBhcnJheSB0aGF0IGNvbnRhaW5zIHVpbnQ4IHZhbHVlcywgcmV0dXJucyBhIGNvcHkgb2YgdGhhdCBzdHJpbmcgYXMgYVxyXG4gICAgICogSmF2YXNjcmlwdCBTdHJpbmcgb2JqZWN0LlxyXG4gICAgICogaGVhcE9yQXJyYXkgaXMgZWl0aGVyIGEgcmVndWxhciBhcnJheSwgb3IgYSBKYXZhU2NyaXB0IHR5cGVkIGFycmF5IHZpZXcuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcj19IG1heEJ5dGVzVG9SZWFkXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBVVEY4QXJyYXlUb1N0cmluZyhoZWFwT3JBcnJheSwgaWR4LCBtYXhCeXRlc1RvUmVhZCkge1xyXG4gICAgICB2YXIgZW5kSWR4ID0gaWR4ICsgbWF4Qnl0ZXNUb1JlYWQ7XHJcbiAgICAgIHZhciBlbmRQdHIgPSBpZHg7XHJcbiAgICAgIC8vIFRleHREZWNvZGVyIG5lZWRzIHRvIGtub3cgdGhlIGJ5dGUgbGVuZ3RoIGluIGFkdmFuY2UsIGl0IGRvZXNuJ3Qgc3RvcCBvblxyXG4gICAgICAvLyBudWxsIHRlcm1pbmF0b3IgYnkgaXRzZWxmLiAgQWxzbywgdXNlIHRoZSBsZW5ndGggaW5mbyB0byBhdm9pZCBydW5uaW5nIHRpbnlcclxuICAgICAgLy8gc3RyaW5ncyB0aHJvdWdoIFRleHREZWNvZGVyLCBzaW5jZSAuc3ViYXJyYXkoKSBhbGxvY2F0ZXMgZ2FyYmFnZS5cclxuICAgICAgLy8gKEFzIGEgdGlueSBjb2RlIHNhdmUgdHJpY2ssIGNvbXBhcmUgZW5kUHRyIGFnYWluc3QgZW5kSWR4IHVzaW5nIGEgbmVnYXRpb24sXHJcbiAgICAgIC8vIHNvIHRoYXQgdW5kZWZpbmVkIG1lYW5zIEluZmluaXR5KVxyXG4gICAgICB3aGlsZSAoaGVhcE9yQXJyYXlbZW5kUHRyXSAmJiAhKGVuZFB0ciA+PSBlbmRJZHgpKSArK2VuZFB0cjtcclxuICBcclxuICAgICAgaWYgKGVuZFB0ciAtIGlkeCA+IDE2ICYmIGhlYXBPckFycmF5LmJ1ZmZlciAmJiBVVEY4RGVjb2Rlcikge1xyXG4gICAgICAgIHJldHVybiBVVEY4RGVjb2Rlci5kZWNvZGUoaGVhcE9yQXJyYXkuc3ViYXJyYXkoaWR4LCBlbmRQdHIpKTtcclxuICAgICAgfVxyXG4gICAgICB2YXIgc3RyID0gJyc7XHJcbiAgICAgIC8vIElmIGJ1aWxkaW5nIHdpdGggVGV4dERlY29kZXIsIHdlIGhhdmUgYWxyZWFkeSBjb21wdXRlZCB0aGUgc3RyaW5nIGxlbmd0aFxyXG4gICAgICAvLyBhYm92ZSwgc28gdGVzdCBsb29wIGVuZCBjb25kaXRpb24gYWdhaW5zdCB0aGF0XHJcbiAgICAgIHdoaWxlIChpZHggPCBlbmRQdHIpIHtcclxuICAgICAgICAvLyBGb3IgVVRGOCBieXRlIHN0cnVjdHVyZSwgc2VlOlxyXG4gICAgICAgIC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTgjRGVzY3JpcHRpb25cclxuICAgICAgICAvLyBodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjI3OS50eHRcclxuICAgICAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzYyOVxyXG4gICAgICAgIHZhciB1MCA9IGhlYXBPckFycmF5W2lkeCsrXTtcclxuICAgICAgICBpZiAoISh1MCAmIDB4ODApKSB7IHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHUwKTsgY29udGludWU7IH1cclxuICAgICAgICB2YXIgdTEgPSBoZWFwT3JBcnJheVtpZHgrK10gJiA2MztcclxuICAgICAgICBpZiAoKHUwICYgMHhFMCkgPT0gMHhDMCkgeyBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKHUwICYgMzEpIDw8IDYpIHwgdTEpOyBjb250aW51ZTsgfVxyXG4gICAgICAgIHZhciB1MiA9IGhlYXBPckFycmF5W2lkeCsrXSAmIDYzO1xyXG4gICAgICAgIGlmICgodTAgJiAweEYwKSA9PSAweEUwKSB7XHJcbiAgICAgICAgICB1MCA9ICgodTAgJiAxNSkgPDwgMTIpIHwgKHUxIDw8IDYpIHwgdTI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHUwID0gKCh1MCAmIDcpIDw8IDE4KSB8ICh1MSA8PCAxMikgfCAodTIgPDwgNikgfCAoaGVhcE9yQXJyYXlbaWR4KytdICYgNjMpO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBpZiAodTAgPCAweDEwMDAwKSB7XHJcbiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1MCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhciBjaCA9IHUwIC0gMHgxMDAwMDtcclxuICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgwMCB8IChjaCA+PiAxMCksIDB4REMwMCB8IChjaCAmIDB4M0ZGKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9XHJcbiAgXHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGEgcG9pbnRlciAncHRyJyB0byBhIG51bGwtdGVybWluYXRlZCBVVEY4LWVuY29kZWQgc3RyaW5nIGluIHRoZVxyXG4gICAgICogZW1zY3JpcHRlbiBIRUFQLCByZXR1cm5zIGEgY29weSBvZiB0aGF0IHN0cmluZyBhcyBhIEphdmFzY3JpcHQgU3RyaW5nIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcHRyXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcj19IG1heEJ5dGVzVG9SZWFkIC0gQW4gb3B0aW9uYWwgbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIHRoZVxyXG4gICAgICogICBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byByZWFkLiBZb3UgY2FuIG9taXQgdGhpcyBwYXJhbWV0ZXIgdG8gc2NhbiB0aGVcclxuICAgICAqICAgc3RyaW5nIHVudGlsIHRoZSBmaXJzdCBcdTAwMDAgYnl0ZS4gSWYgbWF4Qnl0ZXNUb1JlYWQgaXMgcGFzc2VkLCBhbmQgdGhlIHN0cmluZ1xyXG4gICAgICogICBhdCBbcHRyLCBwdHIrbWF4Qnl0ZXNUb1JlYWRyWyBjb250YWlucyBhIG51bGwgYnl0ZSBpbiB0aGUgbWlkZGxlLCB0aGVuIHRoZVxyXG4gICAgICogICBzdHJpbmcgd2lsbCBjdXQgc2hvcnQgYXQgdGhhdCBieXRlIGluZGV4IChpLmUuIG1heEJ5dGVzVG9SZWFkIHdpbGwgbm90XHJcbiAgICAgKiAgIHByb2R1Y2UgYSBzdHJpbmcgb2YgZXhhY3QgbGVuZ3RoIFtwdHIsIHB0cittYXhCeXRlc1RvUmVhZFspIE4uQi4gbWl4aW5nXHJcbiAgICAgKiAgIGZyZXF1ZW50IHVzZXMgb2YgVVRGOFRvU3RyaW5nKCkgd2l0aCBhbmQgd2l0aG91dCBtYXhCeXRlc1RvUmVhZCBtYXkgdGhyb3dcclxuICAgICAqICAgSlMgSklUIG9wdGltaXphdGlvbnMgb2ZmLCBzbyBpdCBpcyB3b3J0aCB0byBjb25zaWRlciBjb25zaXN0ZW50bHkgdXNpbmcgb25lXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBVVEY4VG9TdHJpbmcocHRyLCBtYXhCeXRlc1RvUmVhZCkge1xyXG4gICAgICByZXR1cm4gcHRyID8gVVRGOEFycmF5VG9TdHJpbmcoSEVBUFU4LCBwdHIsIG1heEJ5dGVzVG9SZWFkKSA6ICcnO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xudWxsPX0gcmV0dXJuVHlwZVxyXG4gICAgICogQHBhcmFtIHtBcnJheT19IGFyZ1R5cGVzXHJcbiAgICAgKiBAcGFyYW0ge0FyZ3VtZW50c3xBcnJheT19IGFyZ3NcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0c1xyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gY2NhbGwoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBhcmdzLCBvcHRzKSB7XHJcbiAgICAgIC8vIEZvciBmYXN0IGxvb2t1cCBvZiBjb252ZXJzaW9uIGZ1bmN0aW9uc1xyXG4gICAgICB2YXIgdG9DID0ge1xyXG4gICAgICAgICdzdHJpbmcnOiAoc3RyKSA9PiB7XHJcbiAgICAgICAgICB2YXIgcmV0ID0gMDtcclxuICAgICAgICAgIGlmIChzdHIgIT09IG51bGwgJiYgc3RyICE9PSB1bmRlZmluZWQgJiYgc3RyICE9PSAwKSB7IC8vIG51bGwgc3RyaW5nXHJcbiAgICAgICAgICAgIC8vIGF0IG1vc3QgNCBieXRlcyBwZXIgVVRGLTggY29kZSBwb2ludCwgKzEgZm9yIHRoZSB0cmFpbGluZyAnXFwwJ1xyXG4gICAgICAgICAgICByZXQgPSBzdHJpbmdUb1VURjhPblN0YWNrKHN0cik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJ2FycmF5JzogKGFycikgPT4ge1xyXG4gICAgICAgICAgdmFyIHJldCA9IHN0YWNrQWxsb2MoYXJyLmxlbmd0aCk7XHJcbiAgICAgICAgICB3cml0ZUFycmF5VG9NZW1vcnkoYXJyLCByZXQpO1xyXG4gICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIGZ1bmN0aW9uIGNvbnZlcnRSZXR1cm5WYWx1ZShyZXQpIHtcclxuICAgICAgICBpZiAocmV0dXJuVHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgcmV0dXJuIFVURjhUb1N0cmluZyhyZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmV0dXJuVHlwZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gQm9vbGVhbihyZXQpO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgdmFyIGZ1bmMgPSBnZXRDRnVuYyhpZGVudCk7XHJcbiAgICAgIHZhciBjQXJncyA9IFtdO1xyXG4gICAgICB2YXIgc3RhY2sgPSAwO1xyXG4gICAgICBpZiAoYXJncykge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdmFyIGNvbnZlcnRlciA9IHRvQ1thcmdUeXBlc1tpXV07XHJcbiAgICAgICAgICBpZiAoY29udmVydGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChzdGFjayA9PT0gMCkgc3RhY2sgPSBzdGFja1NhdmUoKTtcclxuICAgICAgICAgICAgY0FyZ3NbaV0gPSBjb252ZXJ0ZXIoYXJnc1tpXSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjQXJnc1tpXSA9IGFyZ3NbaV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHZhciByZXQgPSBmdW5jLmFwcGx5KG51bGwsIGNBcmdzKTtcclxuICAgICAgZnVuY3Rpb24gb25Eb25lKHJldCkge1xyXG4gICAgICAgIGlmIChzdGFjayAhPT0gMCkgc3RhY2tSZXN0b3JlKHN0YWNrKTtcclxuICAgICAgICByZXR1cm4gY29udmVydFJldHVyblZhbHVlKHJldCk7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgcmV0ID0gb25Eb25lKHJldCk7XHJcbiAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gcmV0dXJuVHlwZVxyXG4gICAgICogQHBhcmFtIHtBcnJheT19IGFyZ1R5cGVzXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IG9wdHNcclxuICAgICAqL1xyXG4gIGZ1bmN0aW9uIGN3cmFwKGlkZW50LCByZXR1cm5UeXBlLCBhcmdUeXBlcywgb3B0cykge1xyXG4gICAgICAvLyBXaGVuIHRoZSBmdW5jdGlvbiB0YWtlcyBudW1iZXJzIGFuZCByZXR1cm5zIGEgbnVtYmVyLCB3ZSBjYW4ganVzdCByZXR1cm5cclxuICAgICAgLy8gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uXHJcbiAgICAgIHZhciBudW1lcmljQXJncyA9ICFhcmdUeXBlcyB8fCBhcmdUeXBlcy5ldmVyeSgodHlwZSkgPT4gdHlwZSA9PT0gJ251bWJlcicgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nKTtcclxuICAgICAgdmFyIG51bWVyaWNSZXQgPSByZXR1cm5UeXBlICE9PSAnc3RyaW5nJztcclxuICAgICAgaWYgKG51bWVyaWNSZXQgJiYgbnVtZXJpY0FyZ3MgJiYgIW9wdHMpIHtcclxuICAgICAgICByZXR1cm4gZ2V0Q0Z1bmMoaWRlbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gY2NhbGwoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBhcmd1bWVudHMsIG9wdHMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG52YXIgd2FzbUltcG9ydHMgPSB7XHJcbiAgXCJfX2N4YV90aHJvd1wiOiBfX19jeGFfdGhyb3csXHJcbiAgXCJhYm9ydFwiOiBfYWJvcnQsXHJcbiAgXCJlbXNjcmlwdGVuX21lbWNweV9iaWdcIjogX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyxcclxuICBcImVtc2NyaXB0ZW5fcmVzaXplX2hlYXBcIjogX2Vtc2NyaXB0ZW5fcmVzaXplX2hlYXBcclxufTtcclxudmFyIGFzbSA9IGNyZWF0ZVdhc20oKTtcclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgX19fd2FzbV9jYWxsX2N0b3JzID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfX193YXNtX2NhbGxfY3RvcnMgPSBNb2R1bGVbXCJhc21cIl1bXCJfX3dhc21fY2FsbF9jdG9yc1wiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9kYnNjYW4gPSBNb2R1bGVbXCJfZGJzY2FuXCJdID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfZGJzY2FuID0gTW9kdWxlW1wiX2Ric2NhblwiXSA9IE1vZHVsZVtcImFzbVwiXVtcImRic2NhblwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9fX2Vycm5vX2xvY2F0aW9uID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfX19lcnJub19sb2NhdGlvbiA9IE1vZHVsZVtcImFzbVwiXVtcIl9fZXJybm9fbG9jYXRpb25cIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBfbWFsbG9jID0gTW9kdWxlW1wiX21hbGxvY1wiXSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoX21hbGxvYyA9IE1vZHVsZVtcIl9tYWxsb2NcIl0gPSBNb2R1bGVbXCJhc21cIl1bXCJtYWxsb2NcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBfZnJlZSA9IE1vZHVsZVtcIl9mcmVlXCJdID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfZnJlZSA9IE1vZHVsZVtcIl9mcmVlXCJdID0gTW9kdWxlW1wiYXNtXCJdW1wiZnJlZVwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIHN0YWNrU2F2ZSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoc3RhY2tTYXZlID0gTW9kdWxlW1wiYXNtXCJdW1wic3RhY2tTYXZlXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgc3RhY2tSZXN0b3JlID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChzdGFja1Jlc3RvcmUgPSBNb2R1bGVbXCJhc21cIl1bXCJzdGFja1Jlc3RvcmVcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBzdGFja0FsbG9jID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChzdGFja0FsbG9jID0gTW9kdWxlW1wiYXNtXCJdW1wic3RhY2tBbGxvY1wiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9fX2N4YV9pc19wb2ludGVyX3R5cGUgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKF9fX2N4YV9pc19wb2ludGVyX3R5cGUgPSBNb2R1bGVbXCJhc21cIl1bXCJfX2N4YV9pc19wb2ludGVyX3R5cGVcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG5cclxuXHJcbi8vIGluY2x1ZGU6IHBvc3RhbWJsZS5qc1xyXG4vLyA9PT0gQXV0by1nZW5lcmF0ZWQgcG9zdGFtYmxlIHNldHVwIGVudHJ5IHN0dWZmID09PVxyXG5cclxuTW9kdWxlW1wiY2NhbGxcIl0gPSBjY2FsbDtcclxuTW9kdWxlW1wiY3dyYXBcIl0gPSBjd3JhcDtcclxuXHJcblxyXG52YXIgY2FsbGVkUnVuO1xyXG5cclxuZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gZnVuY3Rpb24gcnVuQ2FsbGVyKCkge1xyXG4gIC8vIElmIHJ1biBoYXMgbmV2ZXIgYmVlbiBjYWxsZWQsIGFuZCB3ZSBzaG91bGQgY2FsbCBydW4gKElOVk9LRV9SVU4gaXMgdHJ1ZSwgYW5kIE1vZHVsZS5ub0luaXRpYWxSdW4gaXMgbm90IGZhbHNlKVxyXG4gIGlmICghY2FsbGVkUnVuKSBydW4oKTtcclxuICBpZiAoIWNhbGxlZFJ1bikgZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gcnVuQ2FsbGVyOyAvLyB0cnkgdGhpcyBhZ2FpbiBsYXRlciwgYWZ0ZXIgbmV3IGRlcHMgYXJlIGZ1bGZpbGxlZFxyXG59O1xyXG5cclxuZnVuY3Rpb24gcnVuKCkge1xyXG5cclxuICBpZiAocnVuRGVwZW5kZW5jaWVzID4gMCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcHJlUnVuKCk7XHJcblxyXG4gIC8vIGEgcHJlUnVuIGFkZGVkIGEgZGVwZW5kZW5jeSwgcnVuIHdpbGwgYmUgY2FsbGVkIGxhdGVyXHJcbiAgaWYgKHJ1bkRlcGVuZGVuY2llcyA+IDApIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRvUnVuKCkge1xyXG4gICAgLy8gcnVuIG1heSBoYXZlIGp1c3QgYmVlbiBjYWxsZWQgdGhyb3VnaCBkZXBlbmRlbmNpZXMgYmVpbmcgZnVsZmlsbGVkIGp1c3QgaW4gdGhpcyB2ZXJ5IGZyYW1lLFxyXG4gICAgLy8gb3Igd2hpbGUgdGhlIGFzeW5jIHNldFN0YXR1cyB0aW1lIGJlbG93IHdhcyBoYXBwZW5pbmdcclxuICAgIGlmIChjYWxsZWRSdW4pIHJldHVybjtcclxuICAgIGNhbGxlZFJ1biA9IHRydWU7XHJcbiAgICBNb2R1bGVbJ2NhbGxlZFJ1biddID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoQUJPUlQpIHJldHVybjtcclxuXHJcbiAgICBpbml0UnVudGltZSgpO1xyXG5cclxuICAgIHJlYWR5UHJvbWlzZVJlc29sdmUoTW9kdWxlKTtcclxuICAgIGlmIChNb2R1bGVbJ29uUnVudGltZUluaXRpYWxpemVkJ10pIE1vZHVsZVsnb25SdW50aW1lSW5pdGlhbGl6ZWQnXSgpO1xyXG5cclxuICAgIHBvc3RSdW4oKTtcclxuICB9XHJcblxyXG4gIGlmIChNb2R1bGVbJ3NldFN0YXR1cyddKSB7XHJcbiAgICBNb2R1bGVbJ3NldFN0YXR1cyddKCdSdW5uaW5nLi4uJyk7XHJcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIE1vZHVsZVsnc2V0U3RhdHVzJ10oJycpO1xyXG4gICAgICB9LCAxKTtcclxuICAgICAgZG9SdW4oKTtcclxuICAgIH0sIDEpO1xyXG4gIH0gZWxzZVxyXG4gIHtcclxuICAgIGRvUnVuKCk7XHJcbiAgfVxyXG59XHJcblxyXG5pZiAoTW9kdWxlWydwcmVJbml0J10pIHtcclxuICBpZiAodHlwZW9mIE1vZHVsZVsncHJlSW5pdCddID09ICdmdW5jdGlvbicpIE1vZHVsZVsncHJlSW5pdCddID0gW01vZHVsZVsncHJlSW5pdCddXTtcclxuICB3aGlsZSAoTW9kdWxlWydwcmVJbml0J10ubGVuZ3RoID4gMCkge1xyXG4gICAgTW9kdWxlWydwcmVJbml0J10ucG9wKCkoKTtcclxuICB9XHJcbn1cclxuXHJcbnJ1bigpO1xyXG5cclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBwb3N0YW1ibGUuanNcclxuXHJcblxyXG4gIHJldHVybiBleHBvcnRDcHBEYnNjYW5MaWIucmVhZHlcclxufVxyXG5cclxuKTtcclxufSkoKTtcclxuaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JylcclxuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydENwcERic2NhbkxpYjtcclxuZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmVbJ2FtZCddKVxyXG4gIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7IHJldHVybiBleHBvcnRDcHBEYnNjYW5MaWI7IH0pO1xyXG5lbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXHJcbiAgZXhwb3J0c1tcImV4cG9ydENwcERic2NhbkxpYlwiXSA9IGV4cG9ydENwcERic2NhbkxpYjtcclxuIiwiaW1wb3J0IHsgRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMgfSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCBjb25zdCBpc05pbCA9ICh4KSA9PiB4ID09PSBudWxsIHx8IHggPT09IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRTbWFsbGVyKGRpc3RhbmNlc0FyLCBpbmRleGVzLCBudW0sIGluZGV4KSB7XG4gICAgaWYgKG51bSA+IGRpc3RhbmNlc0FyW2Rpc3RhbmNlc0FyLmxlbmd0aCAtIDFdKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgbmV3UG9zaXRpb24gPSBkaXN0YW5jZXNBci5maW5kSW5kZXgoKHYpID0+IG51bSA8IHYpO1xuICAgIGRpc3RhbmNlc0FyLnBvcCgpO1xuICAgIGRpc3RhbmNlc0FyLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgbnVtKTtcbiAgICBpbmRleGVzLnBvcCgpO1xuICAgIGluZGV4ZXMuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBpbmRleCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGFyZ2VyKGRpc3RhbmNlc0FyLCBpbmRleGVzLCBudW0sIGluZGV4KSB7XG4gICAgaWYgKG51bSA8IGRpc3RhbmNlc0FyW2Rpc3RhbmNlc0FyLmxlbmd0aCAtIDFdKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgbmV3UG9zaXRpb24gPSBkaXN0YW5jZXNBci5maW5kSW5kZXgoKHYpID0+IG51bSA+IHYpO1xuICAgIGRpc3RhbmNlc0FyLnBvcCgpO1xuICAgIGRpc3RhbmNlc0FyLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgbnVtKTtcbiAgICBpbmRleGVzLnBvcCgpO1xuICAgIGluZGV4ZXMuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBpbmRleCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QWdncmVnYXRpb25GdW5jdGlvbihhZ2dyZWdhdGlvbk1ldGhvZCwgd2VpZ2h0cykge1xuICAgIHN3aXRjaCAoYWdncmVnYXRpb25NZXRob2QpIHtcbiAgICAgICAgY2FzZSBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcy5NQU5IQVRUQU46XG4gICAgICAgICAgICByZXR1cm4gKHZzKSA9PiB2cy5yZWR1Y2UoKGFjYywgdmFsLCBpZHgpID0+IGFjYyArIHZhbCAqIHdlaWdodHNbaWR4XSwgMCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gKHZzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXVjbGlkZWFuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VtID0gdnMucmVkdWNlKChhY2MsIHZhbCwgaWR4KSA9PiBhY2MgKyAodmFsICogd2VpZ2h0c1tpZHhdKSAqKiAyLCAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHN1bSk7XG4gICAgICAgICAgICB9O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRYUnBiSE11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SjFkR2xzY3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hQUVVGUExFVkJRVFJDTERCQ1FVRXdRaXhGUVVGRExFMUJRVTBzVTBGQlV5eERRVUZETzBGQlJUbEZMRTFCUVUwc1EwRkJReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhMUVVGTExFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NVMEZCVXl4RFFVRkRPMEZCUlM5RUxFMUJRVTBzVlVGQlZTeGhRVUZoTEVOQlFVTXNWMEZCY1VJc1JVRkJSU3hQUVVGcFFpeEZRVUZGTEVkQlFWY3NSVUZCUlN4TFFVRmhPMGxCUTJoSExFbEJRVWtzUjBGQlJ5eEhRVUZITEZkQlFWY3NRMEZCUXl4WFFVRlhMRU5CUVVNc1RVRkJUU3hIUVVGRExFTkJRVU1zUTBGQlF6dFJRVU42UXl4UFFVRlBPMGxCUlZRc1RVRkJUU3hYUVVGWExFZEJRVWNzVjBGQlZ5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUXpGRUxGZEJRVmNzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTnNRaXhYUVVGWExFTkJRVU1zVFVGQlRTeERRVUZETEZkQlFWY3NSVUZCUlN4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGVFTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRMlFzVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJReXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEzaERMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzV1VGQldTeERRVUZETEZkQlFYRkNMRVZCUVVVc1QwRkJhVUlzUlVGQlJTeEhRVUZYTEVWQlFVVXNTMEZCWVR0SlFVTXZSaXhKUVVGSkxFZEJRVWNzUjBGQlJ5eFhRVUZYTEVOQlFVTXNWMEZCVnl4RFFVRkRMRTFCUVUwc1IwRkJReXhEUVVGRExFTkJRVU03VVVGRGVrTXNUMEZCVHp0SlFVVlVMRTFCUVUwc1YwRkJWeXhIUVVGSExGZEJRVmNzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTXhSQ3hYUVVGWExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdTVUZEYkVJc1YwRkJWeXhEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRM2hETEU5QlFVOHNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVOa0xFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU40UXl4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGVkxITkNRVUZ6UWl4RFFVTndReXhwUWtGQk5FTXNSVUZCUlN4UFFVRnBRanRKUVVVdlJDeFJRVUZSTEdsQ1FVRnBRaXhGUVVGRk8xRkJRM3BDTEV0QlFVc3NNRUpCUVRCQ0xFTkJRVU1zVTBGQlV6dFpRVU4yUXl4UFFVRlBMRU5CUVVNc1JVRkJXU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSVUZCUlN4RFFVRkRMRWRCUVVjc1IwRkJSeXhIUVVGSExFZEJRVWNzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM0pHTzFsQlEwVXNUMEZCVHl4RFFVRkRMRVZCUVZrc1JVRkJSU3hGUVVGRk8yZENRVU4wUWl4WlFVRlpPMmRDUVVOYUxFMUJRVTBzUjBGQlJ5eEhRVUZITEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUjBGQlJ5eEhRVUZITEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkROMFVzVDBGQlR5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM2hDTEVOQlFVTXNRMEZCUXp0TFFVTk1PMEZCUTBnc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3UkdsemRHRnVZMlZCWjJkeVpXZGhkR2x2YmsxbGRHaHZaQ3dnUkdsemRHRnVZMlZCWjJkeVpXZGhkR2x2YmsxbGRHaHZaSE45SUdaeWIyMGdKeTR2ZEhsd1pYTW5PMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdhWE5PYVd3Z1BTQW9lRG9nWVc1NUtTQTlQaUI0SUQwOVBTQnVkV3hzSUh4OElIZ2dQVDA5SUhWdVpHVm1hVzVsWkR0Y2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHbHVjMlZ5ZEZOdFlXeHNaWElvWkdsemRHRnVZMlZ6UVhJNklHNTFiV0psY2x0ZExDQnBibVJsZUdWek9pQnVkVzFpWlhKYlhTd2diblZ0T2lCdWRXMWlaWElzSUdsdVpHVjRPaUJ1ZFcxaVpYSXBJSHRjYmlBZ2FXWWdLRzUxYlNBK0lHUnBjM1JoYm1ObGMwRnlXMlJwYzNSaGJtTmxjMEZ5TG14bGJtZDBhQzB4WFNsY2JpQWdJQ0J5WlhSMWNtNDdYRzVjYmlBZ1kyOXVjM1FnYm1WM1VHOXphWFJwYjI0Z1BTQmthWE4wWVc1alpYTkJjaTVtYVc1a1NXNWtaWGdvS0hZcElEMCtJRzUxYlNBOElIWXBPMXh1SUNCa2FYTjBZVzVqWlhOQmNpNXdiM0FvS1R0Y2JpQWdaR2x6ZEdGdVkyVnpRWEl1YzNCc2FXTmxLRzVsZDFCdmMybDBhVzl1TENBd0xDQnVkVzBwTzF4dUlDQnBibVJsZUdWekxuQnZjQ2dwTzF4dUlDQnBibVJsZUdWekxuTndiR2xqWlNodVpYZFFiM05wZEdsdmJpd2dNQ3dnYVc1a1pYZ3BPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2FXNXpaWEowVEdGeVoyVnlLR1JwYzNSaGJtTmxjMEZ5T2lCdWRXMWlaWEpiWFN3Z2FXNWtaWGhsY3pvZ2JuVnRZbVZ5VzEwc0lHNTFiVG9nYm5WdFltVnlMQ0JwYm1SbGVEb2diblZ0WW1WeUtTQjdYRzRnSUdsbUlDaHVkVzBnUENCa2FYTjBZVzVqWlhOQmNsdGthWE4wWVc1alpYTkJjaTVzWlc1bmRHZ3RNVjBwWEc0Z0lDQWdjbVYwZFhKdU8xeHVYRzRnSUdOdmJuTjBJRzVsZDFCdmMybDBhVzl1SUQwZ1pHbHpkR0Z1WTJWelFYSXVabWx1WkVsdVpHVjRLQ2gyS1NBOVBpQnVkVzBnUGlCMktUdGNiaUFnWkdsemRHRnVZMlZ6UVhJdWNHOXdLQ2s3WEc0Z0lHUnBjM1JoYm1ObGMwRnlMbk53YkdsalpTaHVaWGRRYjNOcGRHbHZiaXdnTUN3Z2JuVnRLVHRjYmlBZ2FXNWtaWGhsY3k1d2IzQW9LVHRjYmlBZ2FXNWtaWGhsY3k1emNHeHBZMlVvYm1WM1VHOXphWFJwYjI0c0lEQXNJR2x1WkdWNEtUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdkbGRFRm5aM0psWjJGMGFXOXVSblZ1WTNScGIyNG9YRzRnSUdGblozSmxaMkYwYVc5dVRXVjBhRzlrT2lCRWFYTjBZVzVqWlVGblozSmxaMkYwYVc5dVRXVjBhRzlrTENCM1pXbG5hSFJ6T2lCdWRXMWlaWEpiWFZ4dUtUb2dLSFpoYkhWbGN6b2diblZ0WW1WeVcxMHBJRDArSUc1MWJXSmxjaUI3WEc0Z0lITjNhWFJqYUNBb1lXZG5jbVZuWVhScGIyNU5aWFJvYjJRcElIdGNiaUFnSUNCallYTmxJRVJwYzNSaGJtTmxRV2RuY21WbllYUnBiMjVOWlhSb2IyUnpMazFCVGtoQlZGUkJUanBjYmlBZ0lDQWdJSEpsZEhWeWJpQW9kbk02SUc1MWJXSmxjbHRkS1NBOVBpQjJjeTV5WldSMVkyVW9LR0ZqWXl3Z2RtRnNMQ0JwWkhncElEMCtJR0ZqWXlBcklIWmhiQ0FxSUhkbGFXZG9kSE5iYVdSNFhTd2dNQ2s3WEc0Z0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lISmxkSFZ5YmlBb2RuTTZJRzUxYldKbGNsdGRLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDOHZJR1YxWTJ4cFpHVmhibHh1SUNBZ0lDQWdJQ0JqYjI1emRDQnpkVzBnUFNCMmN5NXlaV1IxWTJVb0tHRmpZeXdnZG1Gc0xDQnBaSGdwSUQwK0lHRmpZeUFySUNoMllXd2dLaUIzWldsbmFIUnpXMmxrZUYwcElDb3FJRElzSURBcE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1RXRjBhQzV6Y1hKMEtITjFiU2s3WEc0Z0lDQWdJQ0I5TzF4dUlDQjlYRzU5WEc0aVhYMD0iLCIvKipcbiAqIERlbm90ZXMgYSB2ZWN0b3Igb2YgZmxvYXRpbmcgcG9pdCB2YWx1ZXMuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIFZlY3RvclxuICogQGV4dGVuZHMge0Zsb2F0MzJBcnJheX1cbiAqL1xuZXhwb3J0IGNsYXNzIFZlY3RvciBleHRlbmRzIEZsb2F0MzJBcnJheSB7XG59XG4vKipcbiAqIERlbm90ZXMgYSB0d28tZGltZW5zaW9uYWwgbWF0cml4LlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBNYXRyaXhcbiAqIEBleHRlbmRzIHtBcnJheTxWZWN0b3I+fVxuICovXG5leHBvcnQgY2xhc3MgTWF0cml4IGV4dGVuZHMgQXJyYXkge1xufVxuLyoqXG4gKiBEZW5vdGVzIGNhcnRlc2lhbiBjb29yZGluYXRlcy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgQ29vcmRpbmF0ZXNcbiAqIEBleHRlbmRzIHtNYXRyaXh9XG4gKi9cbmV4cG9ydCBjbGFzcyBDb29yZGluYXRlcyBleHRlbmRzIE1hdHJpeCB7XG59XG4vKipcbiAqIERlbm90ZXMgYW4gYXJyYXkgb2YgYXJiaXRyYXJ5LXR5cGVkIHZlY3RvcnMuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIFZlY3RvcnNcbiAqIEBleHRlbmRzIHtBcnJheTxhbnk+fVxuICovXG5leHBvcnQgY2xhc3MgVmVjdG9ycyBleHRlbmRzIEFycmF5IHtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRIbHdaUzFrWldOc1lYSmhkR2x2Ym5NdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUowZVhCbExXUmxZMnhoY21GMGFXOXVjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGRlFUczdPenM3TzBkQlRVYzdRVUZEU0N4TlFVRk5MRTlCUVU4c1RVRkJUeXhUUVVGUkxGbEJRVms3UTBGQlJ6dEJRVVV6UXpzN096czdPMGRCVFVjN1FVRkRTQ3hOUVVGTkxFOUJRVThzVFVGQlR5eFRRVUZSTEV0QlFXRTdRMEZCUnp0QlFVVTFRenM3T3pzN08wZEJUVWM3UVVGRFNDeE5RVUZOTEU5QlFVOHNWMEZCV1N4VFFVRlJMRTFCUVUwN1EwRkJSenRCUVVVeFF6czdPenM3TzBkQlRVYzdRVUZEU0N4TlFVRk5MRTlCUVU4c1QwRkJVU3hUUVVGUkxFdEJRVlU3UTBGQlJ5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQXFJR0Z6SUVSSElHWnliMjBnSjJSaGRHRm5jbTlyTFdGd2FTOWtaeWM3WEc1Y2JpOHFLbHh1SUNvZ1JHVnViM1JsY3lCaElIWmxZM1J2Y2lCdlppQm1iRzloZEdsdVp5QndiMmwwSUhaaGJIVmxjeTVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQVkyeGhjM01nVm1WamRHOXlYRzRnS2lCQVpYaDBaVzVrY3lCN1JteHZZWFF6TWtGeWNtRjVmVnh1SUNvdlhHNWxlSEJ2Y25RZ1kyeGhjM01nVm1WamRHOXlJR1Y0ZEdWdVpITWdSbXh2WVhRek1rRnljbUY1SUh0OVhHNWNiaThxS2x4dUlDb2dSR1Z1YjNSbGN5QmhJSFIzYnkxa2FXMWxibk5wYjI1aGJDQnRZWFJ5YVhndVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRR05zWVhOeklFMWhkSEpwZUZ4dUlDb2dRR1Y0ZEdWdVpITWdlMEZ5Y21GNVBGWmxZM1J2Y2o1OVhHNGdLaTljYm1WNGNHOXlkQ0JqYkdGemN5Qk5ZWFJ5YVhnZ1pYaDBaVzVrY3lCQmNuSmhlVHhXWldOMGIzSStJSHQ5WEc1Y2JpOHFLbHh1SUNvZ1JHVnViM1JsY3lCallYSjBaWE5wWVc0Z1kyOXZjbVJwYm1GMFpYTXVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUdOc1lYTnpJRU52YjNKa2FXNWhkR1Z6WEc0Z0tpQkFaWGgwWlc1a2N5QjdUV0YwY21sNGZWeHVJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdRMjl2Y21ScGJtRjBaWE1nWlhoMFpXNWtjeUJOWVhSeWFYZ2dlMzFjYmx4dUx5b3FYRzRnS2lCRVpXNXZkR1Z6SUdGdUlHRnljbUY1SUc5bUlHRnlZbWwwY21GeWVTMTBlWEJsWkNCMlpXTjBiM0p6TGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQmpiR0Z6Y3lCV1pXTjBiM0p6WEc0Z0tpQkFaWGgwWlc1a2N5QjdRWEp5WVhrOFlXNTVQbjFjYmlBcUwxeHVaWGh3YjNKMElHTnNZWE56SUZabFkzUnZjbk1nWlhoMFpXNWtjeUJCY25KaGVUeGhibmsrSUh0OVhHNWNiaThxS2x4dUlDb2dSR1Z1YjNSbGN5QmhJR1JwWTNScGIyNWhjbmtnWTI5dWRHRnBibWx1WnlCbWRXNWpkR2x2YmlCdmNIUnBiMjV6TGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQjBlWEJsSUU5d2RHbHZibk5jYmlBcUwxeHVaWGh3YjNKMElIUjVjR1VnVDNCMGFXOXVjeUE5SUh0YmJtRnRaVG9nYzNSeWFXNW5YVG9nWVc1NWZUdGNibHh1THlvcVhHNGdLaUJFWlc1dmRHVnpJR04xYzNSdmJTQmthWE4wWVc1alpTQnRaWFJ5YVdNZ1ltVjBkMlZsYmlCMGFHVWdkSGR2SUdkcGRtVnVJSFpsWTNSdmNuTXVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhSNWNHVWdSR2x6ZEdGdVkyVk5aWFJ5YVdOY2JpQXFJRUJ3WVhKaGJTQjdZVzU1ZlNCMk1TQlVhR1VnWm1seWMzUWdkbVZqZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRoYm5sOUlIWXlJRlJvWlNCelpXTnZibVFnZG1WamRHOXlMbHh1SUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5ZlNCRWFYTjBZVzVqWlNCaVpYUjNaV1Z1SUhSb1pYTmxJSFIzYnlCMlpXTjBiM0p6TGx4dUlDb3ZYRzVsZUhCdmNuUWdkSGx3WlNCRWFYTjBZVzVqWlUxbGRISnBZeUE5SUNoMk1Ub2dZVzU1TENCMk1qb2dZVzU1S1NBOVBpQW9iblZ0WW1WeUtUdGNibHh1THlvcVhHNGdLaUJFWlc1dmRHVnpJR0VnYzJsdGNHeGxJSE4wY21sdVp5QjBieUJ6ZEhKcGJtY2daR2xqZEdsdmJtRnllUzVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQWRIbHdaU0JUZEhKcGJtZEVhV04wYVc5dVlYSjVYRzRnS2k5Y2JtVjRjRzl5ZENCMGVYQmxJRk4wY21sdVowUnBZM1JwYjI1aGNua2dQU0I3VzJ0bGVUb2djM1J5YVc1blhUb2djM1J5YVc1bmZUdGNibHh1WEc1bGVIQnZjblFnZEhsd1pTQkRiMngxYlc1SmJuQjFkRTl3ZEdsdmJuTWdQU0I3WEc0Z0lDQWdabWxzZEdWeVB6b2dLR052YkRvZ1JFY3VRMjlzZFcxdUtTQTlQaUJpYjI5c1pXRnVJSHdnYm5Wc2JEdGNibjA3WEc0aVhYMD0iLCJpbXBvcnQgeyBWZWN0b3IgfSBmcm9tICcuL3R5cGUtZGVjbGFyYXRpb25zJztcbmltcG9ydCB7IHJhbmRvbUZsb2F0LCByYW5kb21JbnQgfSBmcm9tICcuL3JhbmRvbSc7XG4vKipcbiAqIEFzc2VydHMgYSBjb25kaXRpb24gYnkgdGhyb3dpbmcgYW4gRXJyb3IuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtib29sZWFufSBbY29uZGl0aW9uPWZhbHNlXSBDb25kaXRpb24gdG8gYXNzZXJ0LlxuICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlPSdBc3NlcnRpb24gZXJyb3IuJ10gTWVzc2FnZSB0byBvdXRwdXQuXG4gKiBAdGhyb3dzIHtFcnJvcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24gPSBmYWxzZSwgbWVzc2FnZSA9ICdBc3NlcnRpb24gZXJyb3IuJykge1xuICAgIGlmICghY29uZGl0aW9uKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4vKipcbiAqIENyZWF0ZXMgbmV3IHR3by1kaW1lbnNpb25hbCBhcnJheSBhbmQgZmlsbHMgaXQgd2l0aCB0aGUgdmFsdWUgZ2l2ZW4uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGRpbWVuc2lvbjEgVGhlIGZpcnN0IGRpbWVuc2lvbiBvZiB0aGUgY29vcmRpbmF0ZXMgKG51bWJlciBvZiByb3dzKS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1lbnNpb24yIFRoZSBzZWNvbmQgZGltZW5zaW9uIG9mIHRoZSBjb29yZGluYXRlcyAobnVtYmVyIG9mIGNvbHVtbnMpLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsPTBdIEEgdmFsdWUgdG8gZmlsbCB0aGUgY29vcmRpbmF0ZXMgd2l0aC5cbiAqIEByZXR1cm4ge0Nvb3JkaW5hdGVzfSBBIHR3by1kaW1lbnNpb25hbCBmaWxsZWQgd2l0aCB0aGUgdmFsdWUgZ2l2ZW4uXG4gKiBAdG9kbyBNaWdodCBiZSBzbG93IHNpbmNlIHVzZWQgQXJyYXkubWFwLiBQcm9iYWJseSBuZWVkcyBwZXJmb3JtYW5jZSByZXZpc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRDb29yZGluYXRlcyhkaW1lbnNpb24xLCBkaW1lbnNpb24yLCBmaWxsID0gMCkge1xuICAgIHJldHVybiBuZXcgQXJyYXkoZGltZW5zaW9uMSkuZmlsbChmaWxsKS5tYXAoKCkgPT4gKG5ldyBWZWN0b3IoZGltZW5zaW9uMikuZmlsbChmaWxsKSkpO1xufVxuLyoqXG4gKiBUcmFuc3Bvc2UgbWF0cml4LlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7TWF0cml4fSBtYXRyaXggVGhlIG1hdHJpeCB0byBiZSB0cmFuc3Bvc2VkLlxuICogQHJldHVybiB7TWF0cml4fSBUcmFuc3Bvc2VkIG1hdHJpeC5cbiAqIEB0b2RvIE1pZ2h0IGJlIHNsb3cgc2luY2UgdXNlZCBBcnJheS5tYXAuIFByb2JhYmx5IG5lZWRzIHBlcmZvcm1hbmNlIHJldmlzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlTWF0cml4KG1hdHJpeCkge1xuICAgIHJldHVybiBuZXcgQXJyYXkobWF0cml4WzBdLmxlbmd0aCkuZmlsbCgwKVxuICAgICAgICAubWFwKChfLCBpKSA9PiAobmV3IFZlY3RvcihtYXRyaXgubGVuZ3RoKS5maWxsKDApLm1hcCgoXywgaikgPT4gKG1hdHJpeFtqXVtpXSkpKSk7XG59XG4vKipcbiAqIEFkZHMgdHdvIHZlY3RvcnMgd2l0aCB0aGUgc2Vjb25kIG9uZSB0byBiZSBtdWx0aXBsaWVkIGJ5IHRoZSBnaXZlbiByYXRpby5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge1ZlY3Rvcn0gcCBUaGUgZmlyc3QgdmVjdG9yIHRvIGFkZC5cbiAqIEBwYXJhbSB7VmVjdG9yfSBxIFRoZSBzZWNvbmQgdmVjdG9yIHRvIGFkZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbXVsdGlwbGllcj0xXSBBIG11bHRpcGxpZXIgdG8gYmUgdXNlZCBiZWZvcmUgdGhlIHNlY29uZCB2ZWN0b3IgaXMgYWRkZWQuXG4gKiBAcmV0dXJuIHtWZWN0b3J9IE5ldyB2ZWN0b3IgY29udGFpbmVkIHRoZSByZXN1bHQgb2Ygb3BlcmF0aW9uIHArbXVsdGlwbGllcipxLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVjdG9yQWRkKHAsIHEsIG11bHRpcGxpZXIgPSAxKSB7XG4gICAgY29uc3Qgbkl0ZW1zID0gcC5sZW5ndGg7XG4gICAgYXNzZXJ0KG5JdGVtcyA9PSBxLmxlbmd0aCwgJ1ZlY3RvciBsZW5ndGhzIGRvIG5vdCBtYXRjaC4nKTtcbiAgICBjb25zdCB0b3RhbCA9IG5ldyBWZWN0b3Iobkl0ZW1zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHAubGVuZ3RoOyArK2kpXG4gICAgICAgIHRvdGFsW2ldID0gcFtpXSArIG11bHRpcGxpZXIgKiBxW2ldO1xuICAgIHJldHVybiB0b3RhbDtcbn1cbi8qKlxuICogU3VtcyB0aGUgdmVjdG9yJ3MgaXRlbXMuXG4gKlxuICogQHBhcmFtIHtWZWN0b3J9IHYgVGhlIHZlY3RvciB0byBiZSBzdW1tZWQuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB2ZWN0b3IncyBpdGVtcyBzdW0uXG4gKi9cbmZ1bmN0aW9uIGl0ZW1zU3VtKHYpIHtcbiAgICBsZXQgdG90YWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdi5sZW5ndGg7ICsraSlcbiAgICAgICAgdG90YWwgKz0gdltpXTtcbiAgICByZXR1cm4gdG90YWw7XG59XG4vKipcbiAqIFN1cWFyZXMgdGhlIHZlY3RvcidzIGl0ZW1zLlxuICpcbiAqIEBwYXJhbSB7VmVjdG9yfSB2IFRoZSB2ZWN0b3IgdG8gc3F1YXJlLlxuICogQHJldHVybiB7VmVjdG9yfSBBIG5ldyB2ZWN0b3IgY29udGFpbmluZyB0aGUgb3JpZ2luYWwncyBpdGVtcyBzcXVhcmVkLlxuICovXG5mdW5jdGlvbiB2ZWN0b3JTcXVhcmUodikge1xuICAgIGNvbnN0IG5JdGVtcyA9IHYubGVuZ3RoO1xuICAgIGNvbnN0IHRvdGFsID0gbmV3IFZlY3RvcihuSXRlbXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdi5sZW5ndGg7ICsraSlcbiAgICAgICAgdG90YWxbaV0gPSB2W2ldICogdltpXTtcbiAgICByZXR1cm4gdG90YWw7XG59XG5leHBvcnQgZnVuY3Rpb24gdmVjdG9yTGVuZ3RoKHYpIHtcbiAgICBsZXQgc3FyU3VtID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYubGVuZ3RoOyBpKyspXG4gICAgICAgIHNxclN1bSArPSB2W2ldICogdltpXTtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHNxclN1bSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdmVjdG9yRG90UHJvZHVjdCh2MSwgdjIpIHtcbiAgICBpZiAodjEubGVuZ3RoICE9IHYyLmxlbmd0aClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGltZW5zaW9uYWxpdHkgb2YgdGhlIHZlY3RvcnMgbXVzdCBtYXRjaCcpO1xuICAgIGxldCBwcm9kID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYxLmxlbmd0aDsgaSsrKVxuICAgICAgICBwcm9kICs9IHYxW2ldICogdjJbaV07XG4gICAgcmV0dXJuIHByb2Q7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBtYXRyaXggZmlsbGVkIHdpdGggcmFuZG9tIGZsb2F0aW5nIHBvaW50IHZhbHVlcy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMSBUaGUgZmlyc3QgZGltZW5zaW9uIG9mIHRoZSBtYXRyaXguXG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMiBUaGUgc2Vjb25kIGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4LlxuICogQHBhcmFtIHtudW1iZXJ9IFtzY2FsZT0xLl0gTWF4IHZhbHVlIGdpdmVuIGJ5IHJhbmRvbSBnZW5lcmF0b3IuXG4gKiBAcmV0dXJuIHtNYXRyaXh9IEEgbmV3IG1hdHJpeCBmaWxsZWQgd2l0aCByYW5kb20gZmxvYXRpbmcgcG9pbnQgIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbGxSYW5kb21NYXRyaXgoZGltZW5zaW9uMSwgZGltZW5zaW9uMiwgc2NhbGUgPSAxLikge1xuICAgIGNvbnN0IG1hdHJpeCA9IGluaXRDb29yZGluYXRlcyhkaW1lbnNpb24xLCBkaW1lbnNpb24yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbWVuc2lvbjE7ICsraSkge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRpbWVuc2lvbjI7ICsrailcbiAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IHJhbmRvbUZsb2F0KHNjYWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyBFdWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjdG9ycy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge1ZlY3Rvcn0gcCBUaGUgZmlyc3QgdmVjdG9yLlxuICogQHBhcmFtIHtWZWN0b3J9IHEgVGhlIHNlY29uZCB2ZWN0b3IuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEV1Y2xpZGVhbiBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBnaXZlbiB2ZWN0b3JzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlRXVjbGlkZWFuRGlzdGFuY2UocCwgcSkge1xuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIGNvbnN0IGxlbiA9IHAubGVuZ3RoO1xuICAgIGlmIChsZW4gIT09IHEubGVuZ3RoKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkaW1lbnNpb25hbGl0eSBvZiB0aGUgdmVjdG9ycyBtdXN0IG1hdGNoJyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgICAgcmVzdWx0ICs9IE1hdGgucG93KChwW2ldIC0gcVtpXSksIDIpO1xuICAgIHJldHVybiBNYXRoLnNxcnQocmVzdWx0KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIGRpc3RhbmNlIG1hdHJpeCB1c2luZyBhIGN1c3RvbSBkaXN0YW5jZSBmdW5jdGlvbi5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge1ZlY3RvcnN9IGRhdGEgSW5wdXQgdmVjdG9ycyB0byBjYWxjdWxhdGUgZGlzdGFuY2VzLlxuICogQHBhcmFtIHtEaXN0YW5jZU1ldHJpY30gZGlzdGFuY2UgQ3VzdG9tIGRpc3RhbmNlIGZ1bmN0aW9uLlxuICogQHJldHVybiB7TWF0cml4fSBDYWxjdWxhdGVkIGN1c3RvbSBkaXN0YW5jZSBtYXRyaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjRGlzdGFuY2VNYXRyaXgoZGF0YSwgZGlzdGFuY2UpIHtcbiAgICBjb25zdCBuSXRlbXMgPSBkYXRhLmxlbmd0aDtcbiAgICBjb25zdCBtYXRyaXggPSBpbml0Q29vcmRpbmF0ZXMobkl0ZW1zLCBuSXRlbXMsIDApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbkl0ZW1zOyArK2kpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgbkl0ZW1zOyArK2opIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSAoZGF0YVtpXSA9PSBudWxsKSB8fCAoZGF0YVtqXSA9PSBudWxsKSA/IDAgOiBkaXN0YW5jZShkYXRhW2ldLCBkYXRhW2pdKTtcbiAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtqXVtpXSA9IGQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIGRpc3RhbmNlIG1hdHJpeCB1c2luZyBhIGN1c3RvbSBkaXN0YW5jZSBmdW5jdGlvbi5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge1ZlY3RvcnN9IGRhdGEgSW5wdXQgdmVjdG9ycyB0byBjYWxjdWxhdGUgZGlzdGFuY2VzLlxuICogQHBhcmFtIHtEaXN0YW5jZU1ldHJpY30gZGlzdGFuY2UgQ3VzdG9tIGRpc3RhbmNlIGZ1bmN0aW9uLlxuICogQHJldHVybiB7TWF0cml4fSBDYWxjdWxhdGVkIGN1c3RvbSBkaXN0YW5jZSBtYXRyaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjTm9ybWFsaXplZERpc3RhbmNlTWF0cml4KGRhdGEsIGRpc3RhbmNlKSB7XG4gICAgY29uc3Qgbkl0ZW1zID0gZGF0YS5sZW5ndGg7XG4gICAgY29uc3QgbWF0cml4ID0gaW5pdENvb3JkaW5hdGVzKG5JdGVtcywgbkl0ZW1zLCAwKTtcbiAgICBsZXQgbWF4ID0gTnVtYmVyLk1JTl9WQUxVRTtcbiAgICBsZXQgbWluID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5JdGVtczsgKytpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBpOyBqIDwgbkl0ZW1zOyArK2opIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSAoZGF0YVtpXSA9PSBudWxsKSB8fCAoZGF0YVtqXSA9PSBudWxsIHx8IGkgPT09IGopID8gMCA6IGRpc3RhbmNlKGRhdGFbaV0sIGRhdGFbal0pO1xuICAgICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2pdW2ldID0gZDtcbiAgICAgICAgICAgIGlmIChkID4gbWF4KVxuICAgICAgICAgICAgICAgIG1heCA9IGQ7XG4gICAgICAgICAgICBpZiAoZCA8IG1pbilcbiAgICAgICAgICAgICAgICBtaW4gPSBkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbkl0ZW1zOyArK2kpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgbkl0ZW1zOyArK2opXG4gICAgICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbal1baV0gPSAobWF0cml4W2ldW2pdIC0gbWluKSAvIChtYXggLSBtaW4pO1xuICAgIH1cbiAgICByZXR1cm4gbWF0cml4O1xufVxuLyoqIEdlbmVyYXRlcyBhcnJheSBmcm9tIGEgcmFuZ2UgW2JlZ2luOyBlbmRdIG9yIFtiZWdpbjsgZW5kKSBpZiBlbmRFeGNsdXNpdmUuICoqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlblJhbmdlKGJlZ2luLCBlbmQsIGVuZEV4Y2x1c2l2ZSA9IGZhbHNlKSB7XG4gICAgY29uc3Qgbkl0ZW1zID0gZW5kIC0gYmVnaW4gKyAoZW5kRXhjbHVzaXZlID8gMCA6IDEpO1xuICAgIGNvbnN0IHNlcmllcyA9IG5ldyBJbnQzMkFycmF5KG5JdGVtcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSlcbiAgICAgICAgc2VyaWVzW2ldID0gYmVnaW4gKyBpO1xuICAgIHJldHVybiBzZXJpZXM7XG59XG4vKipcbiAqIFJldHVybnMgb3JkZXIgb2YgdmFsdWVzIGFzIGlmIHRoZXkgYXJlIHNvcnRlZC5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge2FueVtdfSB2YWx1ZXMgSW5wdXQgYXJyYXkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXZlcnNlPWZhbHNlXSBXaGV0aGVyIHRvIHJldHVybiByZXZlcnNlZCBvcmRlci5cbiAqIEByZXR1cm4ge251bWJlcltdfSBUaGUgb3JkZXIgY29tcHV0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcmdTb3J0KHZhbHVlcywgcmV2ZXJzZSA9IGZhbHNlKSB7XG4gICAgY29uc3Qgc29ydGZuID0gcmV2ZXJzZSA/IChhLCBiKSA9PiAoYlswXSAtIGFbMF0pIDogKGEsIGIpID0+IChhWzBdIC0gYlswXSk7XG4gICAgY29uc3QgZGVjb3IgPSAodiwgaSkgPT4gW3YsIGldOyAvLyBzZXQgaW5kZXggdG8gdmFsdWVcbiAgICBjb25zdCB1bmRlY29yID0gKGEpID0+IGFbMV07IC8vIGxlYXZlIG9ubHkgaW5kZXhcbiAgICBjb25zdCBfYXJnc29ydCA9IChhcnIpID0+IGFyci5tYXAoZGVjb3IpLnNvcnQoc29ydGZuKS5tYXAodW5kZWNvcik7XG4gICAgcmV0dXJuIF9hcmdzb3J0KHZhbHVlcyk7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGluZGV4ZXMgb2YgdGhlIG1vc3QgZGl2ZXJzZSBvYmplY3RzIGFjY29yZGluZyB0byB0aGUgZGlzdCBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCB0b3RhbCBudW1iZXIgb2Ygb2JqZWN0c1xuICogQHBhcmFtIHtudW1iZXJ9IG4gbnVtYmVyIG9mIGRpdmVyc2UgZWxlbWVudHMgdG8gZmluZFxuICogQHBhcmFtIHsoaTE6IG51bWJlciwgaTI6IG51bWJlcikgPT4gbnVtYmVyfSBkaXN0IGEgZnVuY3Rpb24gd2hpY2ggY2FsY3VsYXRlcyBkaXN0YW5jZSBiZXR3ZWVuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHdvIG9iamVjdHMgdXNpbmcgdGhlaXIgaW5kZXhlc1xuICogQHJldHVybnMge251bWJlcltdfSBUaGUgaW5kZXhlcyBvZiB0aGUgbW9zdCBkaXZlcnNlIG9iamVjdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpdmVyc2VTdWJzZXQobGVuZ3RoLCBuLCBkaXN0KSB7XG4gICAgZnVuY3Rpb24gbWF4QnkodmFsdWVzLCBvcmRlckJ5KSB7XG4gICAgICAgIGxldCBtYXhWYWx1ZSA9IG51bGw7XG4gICAgICAgIGxldCBtYXhPcmRlckJ5ID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudE9yZGVyQnkgPSBvcmRlckJ5KGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKG1heE9yZGVyQnkgPT0gbnVsbCB8fCBlbGVtZW50T3JkZXJCeSA+IG1heE9yZGVyQnkpIHtcbiAgICAgICAgICAgICAgICBtYXhWYWx1ZSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgbWF4T3JkZXJCeSA9IGVsZW1lbnRPcmRlckJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhWYWx1ZTtcbiAgICB9XG4gICAgY29uc3Qgc3Vic2V0ID0gW3JhbmRvbUludChsZW5ndGggLSAxKV07XG4gICAgY29uc3QgY29tcGxlbWVudCA9IG5ldyBTZXQoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICghc3Vic2V0LmluY2x1ZGVzKGkpKVxuICAgICAgICAgICAgY29tcGxlbWVudC5hZGQoaSk7XG4gICAgfVxuICAgIHdoaWxlIChzdWJzZXQubGVuZ3RoIDwgbikge1xuICAgICAgICBjb25zdCBpZHggPSBtYXhCeShjb21wbGVtZW50LnZhbHVlcygpLCAoaSkgPT4gTWF0aC5taW4uYXBwbHkoTWF0aCwgc3Vic2V0Lm1hcChmdW5jdGlvbiAodmFsLCBpbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIGRpc3QoaSwgdmFsKTtcbiAgICAgICAgfSkpKTtcbiAgICAgICAgaWYgKGlkeCkge1xuICAgICAgICAgICAgc3Vic2V0LnB1c2goaWR4KTtcbiAgICAgICAgICAgIGNvbXBsZW1lbnQuZGVsZXRlKGlkeCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN1YnNldDtcbn1cbi8qKlxuICogUmV0dXJucyBub3JtYWxpemVkIHZlY3Rvci5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge1ZlY3Rvcn0gZGF0YSBudW1lcmljYWwgYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShkYXRhKSB7XG4gICAgY29uc3QgbGVuID0gZGF0YS5sZW5ndGg7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgbGV0IHN1bU9mU3F1YXJlcyA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBzdW0gKz0gZGF0YVtpXTtcbiAgICAgICAgc3VtT2ZTcXVhcmVzICs9IE1hdGgucG93KGRhdGFbaV0sIDIpO1xuICAgIH1cbiAgICBjb25zdCBtZWFuID0gc3VtIC8gbGVuO1xuICAgIGNvbnN0IHN0ZERldkludmVyc2UgPSAxLjAgLyBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVzIC8gbGVuIC0gTWF0aC5wb3cobWVhbiwgMikpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICAgIGRhdGFbaV0gPSAoZGF0YVtpXSAtIG1lYW4pICogc3RkRGV2SW52ZXJzZTtcbiAgICByZXR1cm4gZGF0YTtcbn1cbi8qKlxuICogRmluZHMgc2V0IGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gbGlzdHMuXG4gKiBAcGFyYW0ge2FueVtdfSBhIFRoZSBmaXJzdCBsaXN0LlxuICogQHBhcmFtIHthbnlbXX0gYiBUaGUgc2Vjb25kIGxpc3QuXG4gKiBAcmV0dXJuIHthbnlbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldERpZmZlcmVuY2UoYSwgYikge1xuICAgIGNvbnN0IGJTZXQgPSBuZXcgU2V0KGIpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYS5maWx0ZXIoKHgpID0+ICFiU2V0Lmhhcyh4KSkpLnZhbHVlcygpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRtVmpkRzl5TFc5d1pYSmhkR2x2Ym5NdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUoyWldOMGIzSXRiM0JsY21GMGFXOXVjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeFBRVUZQTEVWQlFWTXNUVUZCVFN4RlFVRjFReXhOUVVGTkxIRkNRVUZ4UWl4RFFVRkRPMEZCUTNwR0xFOUJRVThzUlVGQlF5eFhRVUZYTEVWQlFVVXNVMEZCVXl4RlFVRkRMRTFCUVUwc1ZVRkJWU3hEUVVGRE8wRkJSV2hFT3pzN096czdPMGRCVDBjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzVFVGQlRTeERRVUZETEZsQlFYRkNMRXRCUVVzc1JVRkJSU3hWUVVGclFpeHJRa0ZCYTBJN1NVRkRja1lzU1VGQlNTeERRVUZETEZOQlFWTTdVVUZEV2l4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzBGQlF6ZENMRU5CUVVNN1FVRkZSRHM3T3pzN096czdSMEZSUnp0QlFVTklMRTFCUVUwc1ZVRkJWU3hsUVVGbExFTkJRVU1zVlVGQmEwSXNSVUZCUlN4VlFVRnJRaXhGUVVGRkxFOUJRV1VzUTBGQlF6dEpRVU4wUml4UFFVRlBMRWxCUVVrc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4SlFVRkpMRTFCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM3BHTEVOQlFVTTdRVUZGUkRzN096czdPenRIUVU5SE8wRkJRMGdzVFVGQlRTeFZRVUZWTEdWQlFXVXNRMEZCUXl4TlFVRmpPMGxCUXpWRExFOUJRVThzU1VGQlNTeExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRka01zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGRFWXNRMEZCUXp0QlFVVkVPenM3T3pzN096dEhRVkZITzBGQlEwZ3NUVUZCVFN4VlFVRlZMRk5CUVZNc1EwRkJReXhEUVVGVExFVkJRVVVzUTBGQlV5eEZRVUZGTEdGQlFYRkNMRU5CUVVNN1NVRkRjRVVzVFVGQlRTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVWNFFpeE5RVUZOTEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzT0VKQlFUaENMRU5CUVVNc1EwRkJRenRKUVVVelJDeE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEpRVVZxUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU03VVVGREwwSXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4VlFVRlZMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlJYUkRMRTlCUVU4c1MwRkJTeXhEUVVGRE8wRkJRMllzUTBGQlF6dEJRVVZFT3pzN096dEhRVXRITzBGQlEwZ3NVMEZCVXl4UlFVRlJMRU5CUVVNc1EwRkJVenRKUVVONlFpeEpRVUZKTEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkZaQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTTdVVUZETDBJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVVm9RaXhQUVVGUExFdEJRVXNzUTBGQlF6dEJRVU5tTEVOQlFVTTdRVUZGUkRzN096czdSMEZMUnp0QlFVTklMRk5CUVZNc1dVRkJXU3hEUVVGRExFTkJRVk03U1VGRE4wSXNUVUZCVFN4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF6dEpRVU40UWl4TlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0SlFVVnFReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTTdVVUZETDBJc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZGZWtJc1QwRkJUeXhMUVVGTExFTkJRVU03UVVGRFppeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMRmxCUVZrc1EwRkJReXhEUVVGVE8wbEJRM0JETEVsQlFVa3NUVUZCVFN4SFFVRlhMRU5CUVVNc1EwRkJRenRKUVVOMlFpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRlhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVN1VVRkRka01zVFVGQlRTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEZUVJc1QwRkJUeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUXpOQ0xFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNaMEpCUVdkQ0xFTkJRVU1zUlVGQlZTeEZRVUZGTEVWQlFWVTdTVUZEY2tRc1NVRkJTU3hGUVVGRkxFTkJRVU1zVFVGQlRTeEpRVUZKTEVWQlFVVXNRMEZCUXl4TlFVRk5PMUZCUTNoQ0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNPRU5CUVRoRExFTkJRVU1zUTBGQlF6dEpRVU5zUlN4SlFVRkpMRWxCUVVrc1IwRkJWeXhEUVVGRExFTkJRVU03U1VGRGNrSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJWeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRk8xRkJRM2hETEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTNoQ0xFOUJRVThzU1VGQlNTeERRVUZETzBGQlEyUXNRMEZCUXp0QlFVVkVPenM3T3pzN096dEhRVkZITzBGQlEwZ3NUVUZCVFN4VlFVRlZMR2RDUVVGblFpeERRVUZETEZWQlFXdENMRVZCUVVVc1ZVRkJhMElzUlVGQlJTeFJRVUZuUWl4RlFVRkZPMGxCUTNwR0xFMUJRVTBzVFVGQlRTeEhRVUZITEdWQlFXVXNRMEZCUXl4VlFVRlZMRVZCUVVVc1ZVRkJWU3hEUVVGRExFTkJRVU03U1VGRmRrUXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEZWQlFWVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRSUVVOdVF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVlVGQlZTeEZRVUZGTEVWQlFVVXNRMEZCUXp0WlFVTnFReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1YwRkJWeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzB0QlEzSkRPMGxCUTBRc1QwRkJUeXhOUVVGTkxFTkJRVU03UVVGRGFFSXNRMEZCUXp0QlFVVkVPenM3T3pzN08wZEJUMGM3UVVGRFNDeE5RVUZOTEZWQlFWVXNNRUpCUVRCQ0xFTkJRVU1zUTBGQlV5eEZRVUZGTEVOQlFWTTdTVUZETjBRc1NVRkJTU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEyWXNUVUZCVFN4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF6dEpRVVZ5UWl4SlFVRkpMRWRCUVVjc1MwRkJTeXhEUVVGRExFTkJRVU1zVFVGQlRUdFJRVU5zUWl4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExEaERRVUU0UXl4RFFVRkRMRU5CUVVNN1NVRkZiRVVzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTTdVVUZETVVJc1RVRkJUU3hKUVVGSkxGTkJRVUVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVa3NRMEZCUXl4RFFVRkJMRU5CUVVNN1NVRkZMMElzVDBGQlR5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRek5DTEVOQlFVTTdRVUZGUkRzN096czdPenRIUVU5SE8wRkJRMGdzVFVGQlRTeFZRVUZWTEd0Q1FVRnJRaXhEUVVGRExFbEJRV0VzUlVGQlJTeFJRVUYzUWp0SlFVTjRSU3hOUVVGTkxFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRPMGxCUXpOQ0xFMUJRVTBzVFVGQlRTeEhRVUZITEdWQlFXVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1RVRkJUU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlJXeEVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3VVVGREwwSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3V1VGRGJrTXNUVUZCVFN4RFFVRkRMRWRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNeFJpeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFRRVU5xUXp0TFFVTkdPMGxCUTBRc1QwRkJUeXhOUVVGTkxFTkJRVU03UVVGRGFFSXNRMEZCUXp0QlFVVkVPenM3T3pzN08wZEJUMGM3UVVGRFNDeE5RVUZOTEZWQlFWVXNORUpCUVRSQ0xFTkJRVU1zU1VGQllTeEZRVUZGTEZGQlFYZENPMGxCUTJ4R0xFMUJRVTBzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNN1NVRkRNMElzVFVGQlRTeE5RVUZOTEVkQlFVY3NaVUZCWlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hOUVVGTkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEYkVRc1NVRkJTU3hIUVVGSExFZEJRVWNzVFVGQlRTeERRVUZETEZOQlFWTXNRMEZCUXp0SlFVTXpRaXhKUVVGSkxFZEJRVWNzUjBGQlJ5eE5RVUZOTEVOQlFVTXNVMEZCVXl4RFFVRkRPMGxCUXpOQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVTdVVUZETDBJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRTFCUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJUdFpRVU12UWl4TlFVRk5MRU5CUVVNc1IwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEY2tjc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRhRU1zU1VGQlNTeERRVUZETEVkQlFVY3NSMEZCUnp0blFrRkJSU3hIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzSkNMRWxCUVVrc1EwRkJReXhIUVVGSExFZEJRVWM3WjBKQlFVVXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJRenRUUVVOMFFqdExRVU5HTzBsQlEwUXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRSUVVNdlFpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNN1dVRkRha01zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJRenRMUVVOd1JUdEpRVU5FTEU5QlFVOHNUVUZCVFN4RFFVRkRPMEZCUTJoQ0xFTkJRVU03UVVGRlJDeHJSa0ZCYTBZN1FVRkRiRVlzVFVGQlRTeFZRVUZWTEZGQlFWRXNRMEZCUXl4TFFVRmhMRVZCUVVVc1IwRkJWeXhGUVVGRkxGbEJRVmtzUjBGQlJ5eExRVUZMTzBsQlEzWkZMRTFCUVUwc1RVRkJUU3hIUVVGSExFZEJRVWNzUjBGQlJ5eExRVUZMTEVkQlFVY3NRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRjRVFzVFVGQlRTeE5RVUZOTEVkQlFVY3NTVUZCU1N4VlFVRlZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRmRFTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNN1VVRkROMElzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRmVFSXNUMEZCVHl4TlFVRk5MRU5CUVVNN1FVRkRhRUlzUTBGQlF6dEJRVVZFT3pzN096czdPMGRCVDBjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzVDBGQlR5eERRVUZETEUxQlFXRXNSVUZCUlN4UFFVRlBMRWRCUVVjc1MwRkJTenRKUVVOd1JDeE5RVUZOTEUxQlFVMHNSMEZCUnl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlVTeEZRVUZGTEVOQlFWRXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCVVN4RlFVRkZMRU5CUVZFc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEZGtjc1RVRkJUU3hMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZOTEVWQlFVVXNRMEZCVXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMSEZDUVVGeFFqdEpRVU5zUlN4TlFVRk5MRTlCUVU4c1IwRkJSeXhEUVVGRExFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zYlVKQlFXMUNPMGxCUTNaRUxFMUJRVTBzVVVGQlVTeEhRVUZITEVOQlFVTXNSMEZCVlN4RlFVRkZMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1NVRkRNVVVzVDBGQlR5eFJRVUZSTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1FVRkRNVUlzUTBGQlF6dEJRVVZFT3pzN096czdPMGRCVDBjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzWjBKQlFXZENMRU5CUVVNc1RVRkJZeXhGUVVGRkxFTkJRVk1zUlVGQlJTeEpRVUYzUXp0SlFVTnNSeXhUUVVGVExFdEJRVXNzUTBGQlF5eE5RVUZuUXl4RlFVRkZMRTlCUVRoQ08xRkJRemRGTEVsQlFVa3NVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJRenRSUVVOd1FpeEpRVUZKTEZWQlFWVXNSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkZkRUlzUzBGQlN5eE5RVUZOTEU5QlFVOHNTVUZCU1N4TlFVRk5MRVZCUVVVN1dVRkROVUlzVFVGQlRTeGpRVUZqTEVkQlFVY3NUMEZCVHl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xbEJRM2hETEVsQlFVa3NWVUZCVlN4SlFVRkpMRWxCUVVrc1NVRkJTU3hqUVVGakxFZEJRVWNzVlVGQlZTeEZRVUZGTzJkQ1FVTnlSQ3hSUVVGUkxFZEJRVWNzVDBGQlR5eERRVUZETzJkQ1FVTnVRaXhWUVVGVkxFZEJRVWNzWTBGQll5eERRVUZETzJGQlF6ZENPMU5CUTBZN1VVRkRSQ3hQUVVGUExGRkJRVkVzUTBGQlF6dEpRVU5zUWl4RFFVRkRPMGxCUlVRc1RVRkJUU3hOUVVGTkxFZEJRVWNzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGRrTXNUVUZCVFN4VlFVRlZMRWRCUVVjc1NVRkJTU3hIUVVGSExFVkJRVVVzUTBGQlF6dEpRVVUzUWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NUVUZCVFN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRk8xRkJReTlDTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU55UWl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzB0QlEzSkNPMGxCUlVRc1QwRkJUeXhOUVVGTkxFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNSVUZCUlR0UlFVTjRRaXhOUVVGTkxFZEJRVWNzUjBGQlJ5eExRVUZMTEVOQlEyWXNWVUZCVlN4RFFVRkRMRTFCUVUwc1JVRkJPRUlzUlVGREwwTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1JVRkJSU3hOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEZWQlFWTXNSMEZCUnl4RlFVRkZMRXRCUVVzN1dVRkRlRVFzVDBGQlR5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRM1JDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOUUxFbEJRVWtzUjBGQlJ5eEZRVUZGTzFsQlExQXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU5xUWl4VlFVRlZMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFOQlEzaENPMHRCUTBZN1NVRkRSQ3hQUVVGUExFMUJRVTBzUTBGQlF6dEJRVU5vUWl4RFFVRkRPMEZCUlVRN096czdPMGRCUzBjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzVTBGQlV5eERRVUZETEVsQlFWazdTVUZEY0VNc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXp0SlFVTjRRaXhKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEV2l4SlFVRkpMRmxCUVZrc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRmNrSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRSUVVNMVFpeEhRVUZITEVsQlFVa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMllzV1VGQldTeEpRVUZKTEZOQlFVRXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGSkxFTkJRVU1zUTBGQlFTeERRVUZETzB0QlF6bENPMGxCUlVRc1RVRkJUU3hKUVVGSkxFZEJRVWNzUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXp0SlFVTjJRaXhOUVVGTkxHRkJRV0VzUjBGQlJ5eEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzUjBGQlJ5eEhRVUZITEZOQlFVRXNTVUZCU1N4RlFVRkpMRU5CUVVNc1EwRkJRU3hEUVVGRExFTkJRVU03U1VGRmRFVXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNN1VVRkRNVUlzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMR0ZCUVdFc1EwRkJRenRKUVVVM1F5eFBRVUZQTEVsQlFVa3NRMEZCUXp0QlFVTmtMRU5CUVVNN1FVRkZSRHM3T3pzN1IwRkxSenRCUVVOSUxFMUJRVTBzVlVGQlZTeGhRVUZoTEVOQlFVTXNRMEZCVVN4RlFVRkZMRU5CUVZFN1NVRkRPVU1zVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGVFSXNUMEZCVHl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVOeVJTeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUh0TllYUnlhWGdzSUZabFkzUnZjaXdnUTI5dmNtUnBibUYwWlhNc0lGWmxZM1J2Y25Nc0lFUnBjM1JoYm1ObFRXVjBjbWxqZlNCbWNtOXRJQ2N1TDNSNWNHVXRaR1ZqYkdGeVlYUnBiMjV6Snp0Y2JtbHRjRzl5ZENCN2NtRnVaRzl0Um14dllYUXNJSEpoYm1SdmJVbHVkSDBnWm5KdmJTQW5MaTl5WVc1a2IyMG5PMXh1WEc0dktpcGNiaUFxSUVGemMyVnlkSE1nWVNCamIyNWthWFJwYjI0Z1lua2dkR2h5YjNkcGJtY2dZVzRnUlhKeWIzSXVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmU0JiWTI5dVpHbDBhVzl1UFdaaGJITmxYU0JEYjI1a2FYUnBiMjRnZEc4Z1lYTnpaWEowTGx4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlGdHRaWE56WVdkbFBTZEJjM05sY25ScGIyNGdaWEp5YjNJdUoxMGdUV1Z6YzJGblpTQjBieUJ2ZFhSd2RYUXVYRzRnS2lCQWRHaHliM2R6SUh0RmNuSnZjbjFjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHRnpjMlZ5ZENoamIyNWthWFJwYjI0NklHSnZiMnhsWVc0Z1BTQm1ZV3h6WlN3Z2JXVnpjMkZuWlRvZ2MzUnlhVzVuSUQwZ0owRnpjMlZ5ZEdsdmJpQmxjbkp2Y2k0bktTQjdYRzRnSUdsbUlDZ2hZMjl1WkdsMGFXOXVLVnh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lodFpYTnpZV2RsS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJEY21WaGRHVnpJRzVsZHlCMGQyOHRaR2x0Wlc1emFXOXVZV3dnWVhKeVlYa2dZVzVrSUdacGJHeHpJR2wwSUhkcGRHZ2dkR2hsSUhaaGJIVmxJR2RwZG1WdUxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCa2FXMWxibk5wYjI0eElGUm9aU0JtYVhKemRDQmthVzFsYm5OcGIyNGdiMllnZEdobElHTnZiM0prYVc1aGRHVnpJQ2h1ZFcxaVpYSWdiMllnY205M2N5a3VYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnWkdsdFpXNXphVzl1TWlCVWFHVWdjMlZqYjI1a0lHUnBiV1Z1YzJsdmJpQnZaaUIwYUdVZ1kyOXZjbVJwYm1GMFpYTWdLRzUxYldKbGNpQnZaaUJqYjJ4MWJXNXpLUzVjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCYlptbHNiRDB3WFNCQklIWmhiSFZsSUhSdklHWnBiR3dnZEdobElHTnZiM0prYVc1aGRHVnpJSGRwZEdndVhHNGdLaUJBY21WMGRYSnVJSHREYjI5eVpHbHVZWFJsYzMwZ1FTQjBkMjh0WkdsdFpXNXphVzl1WVd3Z1ptbHNiR1ZrSUhkcGRHZ2dkR2hsSUhaaGJIVmxJR2RwZG1WdUxseHVJQ29nUUhSdlpHOGdUV2xuYUhRZ1ltVWdjMnh2ZHlCemFXNWpaU0IxYzJWa0lFRnljbUY1TG0xaGNDNGdVSEp2WW1GaWJIa2dibVZsWkhNZ2NHVnlabTl5YldGdVkyVWdjbVYyYVhOcGIyNHVYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGJtbDBRMjl2Y21ScGJtRjBaWE1vWkdsdFpXNXphVzl1TVRvZ2JuVnRZbVZ5TENCa2FXMWxibk5wYjI0eU9pQnVkVzFpWlhJc0lHWnBiR3c2SUc1MWJXSmxjaUE5SURBcE9pQkRiMjl5WkdsdVlYUmxjeUI3WEc0Z0lISmxkSFZ5YmlCdVpYY2dRWEp5WVhrb1pHbHRaVzV6YVc5dU1Ta3VabWxzYkNobWFXeHNLUzV0WVhBb0tDa2dQVDRnS0c1bGR5QldaV04wYjNJb1pHbHRaVzV6YVc5dU1pa3VabWxzYkNobWFXeHNLU2twTzF4dWZWeHVYRzR2S2lwY2JpQXFJRlJ5WVc1emNHOXpaU0J0WVhSeWFYZ3VYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhCaGNtRnRJSHROWVhSeWFYaDlJRzFoZEhKcGVDQlVhR1VnYldGMGNtbDRJSFJ2SUdKbElIUnlZVzV6Y0c5elpXUXVYRzRnS2lCQWNtVjBkWEp1SUh0TllYUnlhWGg5SUZSeVlXNXpjRzl6WldRZ2JXRjBjbWw0TGx4dUlDb2dRSFJ2Wkc4Z1RXbG5hSFFnWW1VZ2MyeHZkeUJ6YVc1alpTQjFjMlZrSUVGeWNtRjVMbTFoY0M0Z1VISnZZbUZpYkhrZ2JtVmxaSE1nY0dWeVptOXliV0Z1WTJVZ2NtVjJhWE5wYjI0dVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUIwY21GdWMzQnZjMlZOWVhSeWFYZ29iV0YwY21sNE9pQk5ZWFJ5YVhncE9pQk5ZWFJ5YVhnZ2UxeHVJQ0J5WlhSMWNtNGdibVYzSUVGeWNtRjVLRzFoZEhKcGVGc3dYUzVzWlc1bmRHZ3BMbVpwYkd3b01DbGNiaUFnSUNBdWJXRndLQ2hmTENCcEtTQTlQaUFvYm1WM0lGWmxZM1J2Y2lodFlYUnlhWGd1YkdWdVozUm9LUzVtYVd4c0tEQXBMbTFoY0Nnb1h5d2dhaWtnUFQ0Z0tHMWhkSEpwZUZ0cVhWdHBYU2twS1NrN1hHNTlYRzVjYmk4cUtseHVJQ29nUVdSa2N5QjBkMjhnZG1WamRHOXljeUIzYVhSb0lIUm9aU0J6WldOdmJtUWdiMjVsSUhSdklHSmxJRzExYkhScGNHeHBaV1FnWW5rZ2RHaGxJR2RwZG1WdUlISmhkR2x2TGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQndZWEpoYlNCN1ZtVmpkRzl5ZlNCd0lGUm9aU0JtYVhKemRDQjJaV04wYjNJZ2RHOGdZV1JrTGx4dUlDb2dRSEJoY21GdElIdFdaV04wYjNKOUlIRWdWR2hsSUhObFkyOXVaQ0IyWldOMGIzSWdkRzhnWVdSa0xseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJRnR0ZFd4MGFYQnNhV1Z5UFRGZElFRWdiWFZzZEdsd2JHbGxjaUIwYnlCaVpTQjFjMlZrSUdKbFptOXlaU0IwYUdVZ2MyVmpiMjVrSUhabFkzUnZjaUJwY3lCaFpHUmxaQzVjYmlBcUlFQnlaWFIxY200Z2UxWmxZM1J2Y24wZ1RtVjNJSFpsWTNSdmNpQmpiMjUwWVdsdVpXUWdkR2hsSUhKbGMzVnNkQ0J2WmlCdmNHVnlZWFJwYjI0Z2NDdHRkV3gwYVhCc2FXVnlLbkV1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjJaV04wYjNKQlpHUW9jRG9nVm1WamRHOXlMQ0J4T2lCV1pXTjBiM0lzSUcxMWJIUnBjR3hwWlhJNklHNTFiV0psY2lBOUlERXBPaUJXWldOMGIzSWdlMXh1SUNCamIyNXpkQ0J1U1hSbGJYTWdQU0J3TG14bGJtZDBhRHRjYmx4dUlDQmhjM05sY25Rb2JrbDBaVzF6SUQwOUlIRXViR1Z1WjNSb0xDQW5WbVZqZEc5eUlHeGxibWQwYUhNZ1pHOGdibTkwSUcxaGRHTm9MaWNwTzF4dVhHNGdJR052Ym5OMElIUnZkR0ZzSUQwZ2JtVjNJRlpsWTNSdmNpaHVTWFJsYlhNcE8xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2NDNXNaVzVuZEdnN0lDc3JhU2xjYmlBZ0lDQjBiM1JoYkZ0cFhTQTlJSEJiYVYwZ0t5QnRkV3gwYVhCc2FXVnlJQ29nY1Z0cFhUdGNibHh1SUNCeVpYUjFjbTRnZEc5MFlXdzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1UzVnRjeUIwYUdVZ2RtVmpkRzl5SjNNZ2FYUmxiWE11WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHRXWldOMGIzSjlJSFlnVkdobElIWmxZM1J2Y2lCMGJ5QmlaU0J6ZFcxdFpXUXVYRzRnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5SUZSb1pTQjJaV04wYjNJbmN5QnBkR1Z0Y3lCemRXMHVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHbDBaVzF6VTNWdEtIWTZJRlpsWTNSdmNpazZJRzUxYldKbGNpQjdYRzRnSUd4bGRDQjBiM1JoYkNBOUlEQTdYRzVjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQjJMbXhsYm1kMGFEc2dLeXRwS1Z4dUlDQWdJSFJ2ZEdGc0lDczlJSFpiYVYwN1hHNWNiaUFnY21WMGRYSnVJSFJ2ZEdGc08xeHVmVnh1WEc0dktpcGNiaUFxSUZOMWNXRnlaWE1nZEdobElIWmxZM1J2Y2lkeklHbDBaVzF6TGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3Vm1WamRHOXlmU0IySUZSb1pTQjJaV04wYjNJZ2RHOGdjM0YxWVhKbExseHVJQ29nUUhKbGRIVnliaUI3Vm1WamRHOXlmU0JCSUc1bGR5QjJaV04wYjNJZ1kyOXVkR0ZwYm1sdVp5QjBhR1VnYjNKcFoybHVZV3duY3lCcGRHVnRjeUJ6Y1hWaGNtVmtMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQjJaV04wYjNKVGNYVmhjbVVvZGpvZ1ZtVmpkRzl5S1RvZ1ZtVmpkRzl5SUh0Y2JpQWdZMjl1YzNRZ2JrbDBaVzF6SUQwZ2RpNXNaVzVuZEdnN1hHNGdJR052Ym5OMElIUnZkR0ZzSUQwZ2JtVjNJRlpsWTNSdmNpaHVTWFJsYlhNcE8xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2RpNXNaVzVuZEdnN0lDc3JhU2xjYmlBZ0lDQjBiM1JoYkZ0cFhTQTlJSFpiYVYwZ0tpQjJXMmxkTzF4dVhHNGdJSEpsZEhWeWJpQjBiM1JoYkR0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSFpsWTNSdmNreGxibWQwYUNoMk9pQldaV04wYjNJcE9pQnVkVzFpWlhJZ2UxeHVJQ0JzWlhRZ2MzRnlVM1Z0T2lCdWRXMWlaWElnUFNBd08xeHVJQ0JtYjNJZ0tHeGxkQ0JwT2lCdWRXMWlaWElnUFNBd095QnBJRHdnZGk1c1pXNW5kR2c3SUdrckt5bGNiaUFnSUNCemNYSlRkVzBnS3owZ2RsdHBYU0FxSUhaYmFWMDdYRzRnSUhKbGRIVnliaUJOWVhSb0xuTnhjblFvYzNGeVUzVnRLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlIWmxZM1J2Y2tSdmRGQnliMlIxWTNRb2RqRTZJRlpsWTNSdmNpd2dkakk2SUZabFkzUnZjaWs2SUc1MWJXSmxjaUI3WEc0Z0lHbG1JQ2gyTVM1c1pXNW5kR2dnSVQwZ2RqSXViR1Z1WjNSb0tWeHVJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduVkdobElHUnBiV1Z1YzJsdmJtRnNhWFI1SUc5bUlIUm9aU0IyWldOMGIzSnpJRzExYzNRZ2JXRjBZMmduS1R0Y2JpQWdiR1YwSUhCeWIyUTZJRzUxYldKbGNpQTlJREE3WEc0Z0lHWnZjaUFvYkdWMElHazZJRzUxYldKbGNpQTlJREE3SUdrZ1BDQjJNUzVzWlc1bmRHZzdJR2tyS3lsY2JpQWdJQ0J3Y205a0lDczlJSFl4VzJsZElDb2dkakpiYVYwN1hHNGdJSEpsZEhWeWJpQndjbTlrTzF4dWZWeHVYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZU0J0WVhSeWFYZ2dabWxzYkdWa0lIZHBkR2dnY21GdVpHOXRJR1pzYjJGMGFXNW5JSEJ2YVc1MElIWmhiSFZsY3k1Y2JpQXFYRzRnS2lCQVpYaHdiM0owWEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ1pHbHRaVzV6YVc5dU1TQlVhR1VnWm1seWMzUWdaR2x0Wlc1emFXOXVJRzltSUhSb1pTQnRZWFJ5YVhndVhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdaR2x0Wlc1emFXOXVNaUJVYUdVZ2MyVmpiMjVrSUdScGJXVnVjMmx2YmlCdlppQjBhR1VnYldGMGNtbDRMbHh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUZ0elkyRnNaVDB4TGwwZ1RXRjRJSFpoYkhWbElHZHBkbVZ1SUdKNUlISmhibVJ2YlNCblpXNWxjbUYwYjNJdVhHNGdLaUJBY21WMGRYSnVJSHROWVhSeWFYaDlJRUVnYm1WM0lHMWhkSEpwZUNCbWFXeHNaV1FnZDJsMGFDQnlZVzVrYjIwZ1pteHZZWFJwYm1jZ2NHOXBiblFnSUhaaGJIVmxjeTVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHWnBiR3hTWVc1a2IyMU5ZWFJ5YVhnb1pHbHRaVzV6YVc5dU1Ub2diblZ0WW1WeUxDQmthVzFsYm5OcGIyNHlPaUJ1ZFcxaVpYSXNJSE5qWVd4bE9pQnVkVzFpWlhJZ1BTQXhMaWs2SUUxaGRISnBlQ0I3WEc0Z0lHTnZibk4wSUcxaGRISnBlQ0E5SUdsdWFYUkRiMjl5WkdsdVlYUmxjeWhrYVcxbGJuTnBiMjR4TENCa2FXMWxibk5wYjI0eUtUdGNibHh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHUnBiV1Z1YzJsdmJqRTdJQ3NyYVNrZ2UxeHVJQ0FnSUdadmNpQW9iR1YwSUdvZ1BTQXdPeUJxSUR3Z1pHbHRaVzV6YVc5dU1qc2dLeXRxS1Z4dUlDQWdJQ0FnYldGMGNtbDRXMmxkVzJwZElEMGdjbUZ1Wkc5dFJteHZZWFFvYzJOaGJHVXBPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnRZWFJ5YVhnN1hHNTlYRzVjYmk4cUtseHVJQ29nUTJGc1kzVnNZWFJsY3lCRmRXTnNhV1JsWVc0Z1pHbHpkR0Z1WTJVZ1ltVjBkMlZsYmlCMGQyOGdkbVZqZEc5eWN5NWNiaUFxWEc0Z0tpQkFaWGh3YjNKMFhHNGdLaUJBY0dGeVlXMGdlMVpsWTNSdmNuMGdjQ0JVYUdVZ1ptbHljM1FnZG1WamRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0V1pXTjBiM0o5SUhFZ1ZHaGxJSE5sWTI5dVpDQjJaV04wYjNJdVhHNGdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlJRVYxWTJ4cFpHVmhiaUJrYVhOMFlXNWpaU0JpWlhSM1pXVnVJSFJvWlNCbmFYWmxiaUIyWldOMGIzSnpMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1kyRnNZM1ZzWVhSbFJYVmpiR2xrWldGdVJHbHpkR0Z1WTJVb2NEb2dWbVZqZEc5eUxDQnhPaUJXWldOMGIzSXBPaUJ1ZFcxaVpYSWdlMXh1SUNCc1pYUWdjbVZ6ZFd4MElEMGdNRHRjYmlBZ1kyOXVjM1FnYkdWdUlEMGdjQzVzWlc1bmRHZzdYRzVjYmlBZ2FXWWdLR3hsYmlBaFBUMGdjUzVzWlc1bmRHZ3BYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkVWFHVWdaR2x0Wlc1emFXOXVZV3hwZEhrZ2IyWWdkR2hsSUhabFkzUnZjbk1nYlhWemRDQnRZWFJqYUNjcE8xeHVJQ0JjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnNaVzQ3SUNzcmFTbGNiaUFnSUNCeVpYTjFiSFFnS3owZ0tIQmJhVjBnTFNCeFcybGRLU0FxS2lBeU8xeHVJQ0JjYmlBZ2NtVjBkWEp1SUUxaGRHZ3VjM0Z5ZENoeVpYTjFiSFFwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZU0JrYVhOMFlXNWpaU0J0WVhSeWFYZ2dkWE5wYm1jZ1lTQmpkWE4wYjIwZ1pHbHpkR0Z1WTJVZ1puVnVZM1JwYjI0dVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRSEJoY21GdElIdFdaV04wYjNKemZTQmtZWFJoSUVsdWNIVjBJSFpsWTNSdmNuTWdkRzhnWTJGc1kzVnNZWFJsSUdScGMzUmhibU5sY3k1Y2JpQXFJRUJ3WVhKaGJTQjdSR2x6ZEdGdVkyVk5aWFJ5YVdOOUlHUnBjM1JoYm1ObElFTjFjM1J2YlNCa2FYTjBZVzVqWlNCbWRXNWpkR2x2Ymk1Y2JpQXFJRUJ5WlhSMWNtNGdlMDFoZEhKcGVIMGdRMkZzWTNWc1lYUmxaQ0JqZFhOMGIyMGdaR2x6ZEdGdVkyVWdiV0YwY21sNExseHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWTJGc1kwUnBjM1JoYm1ObFRXRjBjbWw0S0dSaGRHRTZJRlpsWTNSdmNuTXNJR1JwYzNSaGJtTmxPaUJFYVhOMFlXNWpaVTFsZEhKcFl5azZJRTFoZEhKcGVDQjdYRzRnSUdOdmJuTjBJRzVKZEdWdGN5QTlJR1JoZEdFdWJHVnVaM1JvTzF4dUlDQmpiMjV6ZENCdFlYUnlhWGdnUFNCcGJtbDBRMjl2Y21ScGJtRjBaWE1vYmtsMFpXMXpMQ0J1U1hSbGJYTXNJREFwTzF4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYmtsMFpXMXpPeUFySzJrcElIdGNiaUFnSUNCbWIzSWdLR3hsZENCcUlEMGdhU0FySURFN0lHb2dQQ0J1U1hSbGJYTTdJQ3NyYWlrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWkRvZ2JuVnRZbVZ5SUQwZ0tHUmhkR0ZiYVYwZ1BUMGdiblZzYkNrZ2ZId2dLR1JoZEdGYmFsMGdQVDBnYm5Wc2JDa2dQeUF3SURvZ1pHbHpkR0Z1WTJVb1pHRjBZVnRwWFN3Z1pHRjBZVnRxWFNrN1hHNGdJQ0FnSUNCdFlYUnlhWGhiYVYxYmFsMGdQU0J0WVhSeWFYaGJhbDFiYVYwZ1BTQmtPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2JXRjBjbWw0TzF4dWZWeHVYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZU0JrYVhOMFlXNWpaU0J0WVhSeWFYZ2dkWE5wYm1jZ1lTQmpkWE4wYjIwZ1pHbHpkR0Z1WTJVZ1puVnVZM1JwYjI0dVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRSEJoY21GdElIdFdaV04wYjNKemZTQmtZWFJoSUVsdWNIVjBJSFpsWTNSdmNuTWdkRzhnWTJGc1kzVnNZWFJsSUdScGMzUmhibU5sY3k1Y2JpQXFJRUJ3WVhKaGJTQjdSR2x6ZEdGdVkyVk5aWFJ5YVdOOUlHUnBjM1JoYm1ObElFTjFjM1J2YlNCa2FYTjBZVzVqWlNCbWRXNWpkR2x2Ymk1Y2JpQXFJRUJ5WlhSMWNtNGdlMDFoZEhKcGVIMGdRMkZzWTNWc1lYUmxaQ0JqZFhOMGIyMGdaR2x6ZEdGdVkyVWdiV0YwY21sNExseHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWTJGc1kwNXZjbTFoYkdsNlpXUkVhWE4wWVc1alpVMWhkSEpwZUNoa1lYUmhPaUJXWldOMGIzSnpMQ0JrYVhOMFlXNWpaVG9nUkdsemRHRnVZMlZOWlhSeWFXTXBPaUJOWVhSeWFYZ2dlMXh1SUNCamIyNXpkQ0J1U1hSbGJYTWdQU0JrWVhSaExteGxibWQwYUR0Y2JpQWdZMjl1YzNRZ2JXRjBjbWw0SUQwZ2FXNXBkRU52YjNKa2FXNWhkR1Z6S0c1SmRHVnRjeXdnYmtsMFpXMXpMQ0F3S1R0Y2JpQWdiR1YwSUcxaGVDQTlJRTUxYldKbGNpNU5TVTVmVmtGTVZVVTdYRzRnSUd4bGRDQnRhVzRnUFNCT2RXMWlaWEl1VFVGWVgxWkJURlZGTzF4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJRzVKZEdWdGN6c2dLeXRwS1NCN1hHNGdJQ0FnWm05eUlDaHNaWFFnYWlBOUlHazdJR29nUENCdVNYUmxiWE03SUNzcmFpa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1pEb2diblZ0WW1WeUlEMGdLR1JoZEdGYmFWMGdQVDBnYm5Wc2JDa2dmSHdnS0dSaGRHRmJhbDBnUFQwZ2JuVnNiQ0I4ZkNCcElEMDlQU0JxS1NBL0lEQWdPaUJrYVhOMFlXNWpaU2hrWVhSaFcybGRMQ0JrWVhSaFcycGRLVHRjYmlBZ0lDQWdJRzFoZEhKcGVGdHBYVnRxWFNBOUlHMWhkSEpwZUZ0cVhWdHBYU0E5SUdRN1hHNGdJQ0FnSUNCcFppQW9aQ0ErSUcxaGVDa2diV0Y0SUQwZ1pEdGNiaUFnSUNBZ0lHbG1JQ2hrSUR3Z2JXbHVLU0J0YVc0Z1BTQmtPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJRzVKZEdWdGN6c2dLeXRwS1NCN1hHNGdJQ0FnWm05eUlDaHNaWFFnYWlBOUlHa2dLeUF4T3lCcUlEd2dia2wwWlcxek95QXJLMm9wWEc0Z0lDQWdJQ0J0WVhSeWFYaGJhVjFiYWwwZ1BTQnRZWFJ5YVhoYmFsMWJhVjBnUFNBb2JXRjBjbWw0VzJsZFcycGRJQzBnYldsdUtTQXZJQ2h0WVhnZ0xTQnRhVzRwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ0WVhSeWFYZzdYRzU5WEc1Y2JpOHFLaUJIWlc1bGNtRjBaWE1nWVhKeVlYa2dabkp2YlNCaElISmhibWRsSUZ0aVpXZHBianNnWlc1a1hTQnZjaUJiWW1WbmFXNDdJR1Z1WkNrZ2FXWWdaVzVrUlhoamJIVnphWFpsTGlBcUtpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQm5aVzVTWVc1blpTaGlaV2RwYmpvZ2JuVnRZbVZ5TENCbGJtUTZJRzUxYldKbGNpd2daVzVrUlhoamJIVnphWFpsSUQwZ1ptRnNjMlVwT2lCSmJuUXpNa0Z5Y21GNUlIdGNiaUFnWTI5dWMzUWdia2wwWlcxeklEMGdaVzVrSUMwZ1ltVm5hVzRnS3lBb1pXNWtSWGhqYkhWemFYWmxJRDhnTUNBNklERXBPMXh1SUNCamIyNXpkQ0J6WlhKcFpYTWdQU0J1WlhjZ1NXNTBNekpCY25KaGVTaHVTWFJsYlhNcE8xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2JrbDBaVzF6T3lBcksya3BYRzRnSUNBZ2MyVnlhV1Z6VzJsZElEMGdZbVZuYVc0Z0t5QnBPMXh1WEc0Z0lISmxkSFZ5YmlCelpYSnBaWE03WEc1OVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QnZjbVJsY2lCdlppQjJZV3gxWlhNZ1lYTWdhV1lnZEdobGVTQmhjbVVnYzI5eWRHVmtMbHh1SUNwY2JpQXFJRUJsZUhCdmNuUmNiaUFxSUVCd1lYSmhiU0I3WVc1NVcxMTlJSFpoYkhWbGN5QkpibkIxZENCaGNuSmhlUzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm4wZ1czSmxkbVZ5YzJVOVptRnNjMlZkSUZkb1pYUm9aWElnZEc4Z2NtVjBkWEp1SUhKbGRtVnljMlZrSUc5eVpHVnlMbHh1SUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5VzExOUlGUm9aU0J2Y21SbGNpQmpiMjF3ZFhSbFpDNWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdGeVoxTnZjblFvZG1Gc2RXVnpPaUJoYm5sYlhTd2djbVYyWlhKelpTQTlJR1poYkhObEtUb2diblZ0WW1WeVcxMGdlMXh1SUNCamIyNXpkQ0J6YjNKMFptNGdQU0J5WlhabGNuTmxJRDhnS0dFNklHRnVlVnRkTENCaU9pQmhibmxiWFNrZ1BUNGdLR0piTUYwZ0xTQmhXekJkS1NBNklDaGhPaUJoYm5sYlhTd2dZam9nWVc1NVcxMHBJRDArSUNoaFd6QmRJQzBnWWxzd1hTazdYRzRnSUdOdmJuTjBJR1JsWTI5eUlEMGdLSFk2SUdGdWVTd2dhVG9nYm5WdFltVnlLU0E5UGlCYmRpd2dhVjA3SUM4dklITmxkQ0JwYm1SbGVDQjBieUIyWVd4MVpWeHVJQ0JqYjI1emRDQjFibVJsWTI5eUlEMGdLR0U2SUdGdWVWdGRLU0E5UGlCaFd6RmRPeUF2THlCc1pXRjJaU0J2Ym14NUlHbHVaR1Y0WEc0Z0lHTnZibk4wSUY5aGNtZHpiM0owSUQwZ0tHRnljam9nWVc1NVcxMHBJRDArSUdGeWNpNXRZWEFvWkdWamIzSXBMbk52Y25Rb2MyOXlkR1p1S1M1dFlYQW9kVzVrWldOdmNpazdYRzRnSUhKbGRIVnliaUJmWVhKbmMyOXlkQ2gyWVd4MVpYTXBPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2RHaGxJR2x1WkdWNFpYTWdiMllnZEdobElHMXZjM1FnWkdsMlpYSnpaU0J2WW1wbFkzUnpJR0ZqWTI5eVpHbHVaeUIwYnlCMGFHVWdaR2x6ZENCbWRXNWpkR2x2Ymx4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHeGxibWQwYUNCMGIzUmhiQ0J1ZFcxaVpYSWdiMllnYjJKcVpXTjBjMXh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUc0Z2JuVnRZbVZ5SUc5bUlHUnBkbVZ5YzJVZ1pXeGxiV1Z1ZEhNZ2RHOGdabWx1WkZ4dUlDb2dRSEJoY21GdElIc29hVEU2SUc1MWJXSmxjaXdnYVRJNklHNTFiV0psY2lrZ1BUNGdiblZ0WW1WeWZTQmthWE4wSUdFZ1puVnVZM1JwYjI0Z2QyaHBZMmdnWTJGc1kzVnNZWFJsY3lCa2FYTjBZVzVqWlNCaVpYUjNaV1Z1WEc0Z0tpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEhkdklHOWlhbVZqZEhNZ2RYTnBibWNnZEdobGFYSWdhVzVrWlhobGMxeHVJQ29nUUhKbGRIVnlibk1nZTI1MWJXSmxjbHRkZlNCVWFHVWdhVzVrWlhobGN5QnZaaUIwYUdVZ2JXOXpkQ0JrYVhabGNuTmxJRzlpYW1WamRITmNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdkbGRFUnBkbVZ5YzJWVGRXSnpaWFFvYkdWdVozUm9PaUJ1ZFcxaVpYSXNJRzQ2SUc1MWJXSmxjaXdnWkdsemREb2dLR2t4T2lCdWRXMWlaWElzSUdreU9pQnVkVzFpWlhJcElEMCtJRzUxYldKbGNpazZJRzUxYldKbGNsdGRJSHRjYmlBZ1puVnVZM1JwYjI0Z2JXRjRRbmtvZG1Gc2RXVnpPaUJKZEdWeVlXSnNaVWwwWlhKaGRHOXlQRzUxYldKbGNqNHNJRzl5WkdWeVFuazZJQ2hwT2lCdWRXMWlaWElwSUQwK0lHNTFiV0psY2lrZ2UxeHVJQ0FnSUd4bGRDQnRZWGhXWVd4MVpTQTlJRzUxYkd3N1hHNGdJQ0FnYkdWMElHMWhlRTl5WkdWeVFua2dQU0J1ZFd4c08xeHVYRzRnSUNBZ1ptOXlJQ2hqYjI1emRDQmxiR1Z0Wlc1MElHOW1JSFpoYkhWbGN5a2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1pXeGxiV1Z1ZEU5eVpHVnlRbmtnUFNCdmNtUmxja0o1S0dWc1pXMWxiblFwTzF4dUlDQWdJQ0FnYVdZZ0tHMWhlRTl5WkdWeVFua2dQVDBnYm5Wc2JDQjhmQ0JsYkdWdFpXNTBUM0prWlhKQ2VTQStJRzFoZUU5eVpHVnlRbmtwSUh0Y2JpQWdJQ0FnSUNBZ2JXRjRWbUZzZFdVZ1BTQmxiR1Z0Wlc1ME8xeHVJQ0FnSUNBZ0lDQnRZWGhQY21SbGNrSjVJRDBnWld4bGJXVnVkRTl5WkdWeVFuazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ0WVhoV1lXeDFaVHRjYmlBZ2ZWeHVYRzRnSUdOdmJuTjBJSE4xWW5ObGRDQTlJRnR5WVc1a2IyMUpiblFvYkdWdVozUm9JQzBnTVNsZE8xeHVJQ0JqYjI1emRDQmpiMjF3YkdWdFpXNTBJRDBnYm1WM0lGTmxkQ2dwTzF4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYkdWdVozUm9PeUFySzJrcElIdGNiaUFnSUNCcFppQW9JWE4xWW5ObGRDNXBibU5zZFdSbGN5aHBLU2xjYmlBZ0lDQWdJR052YlhCc1pXMWxiblF1WVdSa0tHa3BPMXh1SUNCOVhHNWNiaUFnZDJocGJHVWdLSE4xWW5ObGRDNXNaVzVuZEdnZ1BDQnVLU0I3WEc0Z0lDQWdZMjl1YzNRZ2FXUjRJRDBnYldGNFFua29YRzRnSUNBZ0lDQmpiMjF3YkdWdFpXNTBMblpoYkhWbGN5Z3BJR0Z6SUVsMFpYSmhZbXhsU1hSbGNtRjBiM0k4Ym5WdFltVnlQaXhjYmlBZ0lDQWdJQ2hwS1NBOVBpQk5ZWFJvTG0xcGJpNWhjSEJzZVNoTllYUm9MQ0J6ZFdKelpYUXViV0Z3S0daMWJtTjBhVzl1S0haaGJDd2dhVzVrWlhncElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHUnBjM1FvYVN3Z2RtRnNLVHRjYmlBZ0lDQWdJSDBwS1NrN1hHNGdJQ0FnYVdZZ0tHbGtlQ2tnZTF4dUlDQWdJQ0FnYzNWaWMyVjBMbkIxYzJnb2FXUjRLVHRjYmlBZ0lDQWdJR052YlhCc1pXMWxiblF1WkdWc1pYUmxLR2xrZUNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ6ZFdKelpYUTdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCdWIzSnRZV3hwZW1Wa0lIWmxZM1J2Y2k1Y2JpQXFJRnh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRSEJoY21GdElIdFdaV04wYjNKOUlHUmhkR0VnYm5WdFpYSnBZMkZzSUdGeWNtRjVYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCdWIzSnRZV3hwZW1Vb1pHRjBZVG9nVm1WamRHOXlLVG9nVm1WamRHOXlJSHRjYmlBZ1kyOXVjM1FnYkdWdUlEMGdaR0YwWVM1c1pXNW5kR2c3WEc0Z0lHeGxkQ0J6ZFcwZ1BTQXdPMXh1SUNCc1pYUWdjM1Z0VDJaVGNYVmhjbVZ6SUQwZ01EdGNibHh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHeGxianNnS3l0cEtTQjdYRzRnSUNBZ2MzVnRJQ3M5SUdSaGRHRmJhVjA3WEc0Z0lDQWdjM1Z0VDJaVGNYVmhjbVZ6SUNzOUlHUmhkR0ZiYVYwZ0tpb2dNanRjYmlBZ2ZWeHVYRzRnSUdOdmJuTjBJRzFsWVc0Z1BTQnpkVzBnTHlCc1pXNDdYRzRnSUdOdmJuTjBJSE4wWkVSbGRrbHVkbVZ5YzJVZ1BTQXhMakFnTHlCTllYUm9Mbk54Y25Rb2MzVnRUMlpUY1hWaGNtVnpJQzhnYkdWdUlDMGdiV1ZoYmlBcUtpQXlLVHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR3hsYmpzZ0t5dHBLVnh1SUNBZ0lHUmhkR0ZiYVYwZ1BTQW9aR0YwWVZ0cFhTQXRJRzFsWVc0cElDb2djM1JrUkdWMlNXNTJaWEp6WlR0Y2JseHVJQ0J5WlhSMWNtNGdaR0YwWVR0Y2JuMWNibHh1THlvcVhHNGdLaUJHYVc1a2N5QnpaWFFnWkdsbVptVnlaVzVqWlNCaVpYUjNaV1Z1SUhSM2J5QnNhWE4wY3k1Y2JpQXFJRUJ3WVhKaGJTQjdZVzU1VzExOUlHRWdWR2hsSUdacGNuTjBJR3hwYzNRdVhHNGdLaUJBY0dGeVlXMGdlMkZ1ZVZ0ZGZTQmlJRlJvWlNCelpXTnZibVFnYkdsemRDNWNiaUFxSUVCeVpYUjFjbTRnZTJGdWVWdGRmVnh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2MyVjBSR2xtWm1WeVpXNWpaU2hoT2lCaGJubGJYU3dnWWpvZ1lXNTVXMTBwT2lCaGJubGJYU0I3WEc0Z0lHTnZibk4wSUdKVFpYUWdQU0J1WlhjZ1UyVjBLR0lwTzF4dUlDQnlaWFIxY200Z1FYSnlZWGt1Wm5KdmJTaHVaWGNnVTJWMEtHRXVabWxzZEdWeUtDaDRLU0E5UGlBaFlsTmxkQzVvWVhNb2VDa3BLUzUyWVd4MVpYTW9LU2s3WEc1OVhHNGlYWDA9IiwiaW1wb3J0ICogYXMgZmwgZnJvbSAnZmFzdGVzdC1sZXZlbnNodGVpbic7XG5pbXBvcnQgeyBqYXJvV2lua2xlciB9IGZyb20gJ2phcm8td2lua2xlci10eXBlc2NyaXB0JztcbmltcG9ydCB7IGFzeW1tZXRyaWNEaXN0YW5jZSwgYnJhdW5CbGFucXVldERpc3RhbmNlLCBjb3NpbmVEaXN0YW5jZSwgZGljZURpc3RhbmNlLCBldWNsaWRlYW5EaXN0YW5jZSwgaGFtbWluZ0Rpc3RhbmNlLCBrdWxjenluc2tpRGlzdGFuY2UsIG1jQ29ubmF1Z2hleURpc3RhbmNlLCByb2dvdEdvbGRiZXJnRGlzdGFuY2UsIHJ1c3NlbERpc3RhbmNlLCBzb2thbERpc3RhbmNlLCB0YW5pbW90b0Rpc3RhbmNlLCBudW1lcmljRGlzdGFuY2UsIHRhbmltb3RvRGlzdGFuY2VJbnRBcnJheSwgaW52ZXJzZUNvbW1vbkl0ZW1zQ291bnQsIH0gZnJvbSAnLi4vZGlzdGFuY2UtbWV0cmljcy1tZXRob2RzJztcbmltcG9ydCB7IGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdmVjdG9yLW9wZXJhdGlvbnMnO1xuaW1wb3J0IHsgbW1EaXN0YW5jZUZ1bmN0aW9ucywgTW1EaXN0YW5jZUZ1bmN0aW9uc05hbWVzIH0gZnJvbSAnLi4vbWFjcm9tb2xlY3VsZS1kaXN0YW5jZS1mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRGlzdGFuY2VNZXRyaWNzU3ViamVjdHMsIEJpdEFycmF5TWV0cmljc05hbWVzLCBTdHJpbmdNZXRyaWNzTmFtZXMsIFZlY3Rvck1ldHJpY3NOYW1lcywgTnVtYmVyTWV0cmljc05hbWVzLCBJbnRBcnJheU1ldHJpY3NOYW1lcywgTnVtYmVyQXJyYXlNZXRyaWNzTmFtZXMgfSBmcm9tICcuL2NvbnN0cyc7XG5leHBvcnQgY29uc3QgdmVjdG9yRGlzdGFuY2VNZXRyaWNzTWV0aG9kcyA9IHtcbiAgICBbVmVjdG9yTWV0cmljc05hbWVzLkV1Y2xpZGVhbl06IGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlLFxufTtcbmV4cG9ydCBjb25zdCBzdHJpbmdEaXN0YW5jZU1ldHJpY3NNZXRob2RzID0ge1xuICAgIFtTdHJpbmdNZXRyaWNzTmFtZXMuTGV2ZW5zaHRlaW5dOiBmbC5kaXN0YW5jZSxcbiAgICBbU3RyaW5nTWV0cmljc05hbWVzLkphcm9XaW5rbGVyXTogamFyb1dpbmtsZXIsXG4gICAgW1N0cmluZ01ldHJpY3NOYW1lcy5NYW5oYXR0YW5dOiBtYW5oYXR0YW5EaXN0YW5jZSxcbiAgICBbU3RyaW5nTWV0cmljc05hbWVzLk9uZWhvdF06IGNhdGVnb3JpY2FsRGlzdGFuY2UsXG59O1xuZXhwb3J0IGNvbnN0IGJpdEFycmF5RGlzdGFuY2VNZXRyaWNzTWV0aG9kcyA9IHtcbiAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuVGFuaW1vdG9dOiB0YW5pbW90b0Rpc3RhbmNlLFxuICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5EaWNlXTogZGljZURpc3RhbmNlLFxuICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5Bc3ltbWV0cmljXTogYXN5bW1ldHJpY0Rpc3RhbmNlLFxuICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5CcmF1bkJsYW5xdWV0XTogYnJhdW5CbGFucXVldERpc3RhbmNlLFxuICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5Db3NpbmVdOiBjb3NpbmVEaXN0YW5jZSxcbiAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuS3VsY3p5bnNraV06IGt1bGN6eW5za2lEaXN0YW5jZSxcbiAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuTWNDb25uYXVnaGV5XTogbWNDb25uYXVnaGV5RGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLlJvZ290R29sZGJlcmddOiByb2dvdEdvbGRiZXJnRGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLlJ1c3NlbF06IHJ1c3NlbERpc3RhbmNlLFxuICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5Tb2thbF06IHNva2FsRGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkhhbW1pbmddOiBoYW1taW5nRGlzdGFuY2UsXG4gICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkV1Y2xpZGVhbl06IGV1Y2xpZGVhbkRpc3RhbmNlLFxufTtcbmV4cG9ydCBjb25zdCBpbnRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHMgPSB7XG4gICAgW0ludEFycmF5TWV0cmljc05hbWVzLlRhbmltb3RvSW50QXJyYXldOiB0YW5pbW90b0Rpc3RhbmNlSW50QXJyYXksXG59O1xuZXhwb3J0IGNvbnN0IG51bWJlckRpc3RhbmNlTWV0cmljc01ldGhvZHMgPSB7XG4gICAgW051bWJlck1ldHJpY3NOYW1lcy5EaWZmZXJlbmNlXTogbnVtZXJpY0Rpc3RhbmNlLFxufTtcbmV4cG9ydCBjb25zdCBudW1iZXJBcnJheURpc3RhbmNlTWV0cmljcyA9IHtcbiAgICBbTnVtYmVyQXJyYXlNZXRyaWNzTmFtZXMuQ29tbW9uSXRlbXNdOiBpbnZlcnNlQ29tbW9uSXRlbXNDb3VudCxcbn07XG5leHBvcnQgY29uc3QgQXZhaWxhYmxlTWV0cmljcyA9IHtcbiAgICBbRGlzdGFuY2VNZXRyaWNzU3ViamVjdHMuVmVjdG9yXToge1xuICAgICAgICBbVmVjdG9yTWV0cmljc05hbWVzLkV1Y2xpZGVhbl06IHZlY3RvckRpc3RhbmNlTWV0cmljc01ldGhvZHNbVmVjdG9yTWV0cmljc05hbWVzLkV1Y2xpZGVhbl0sXG4gICAgfSxcbiAgICBbRGlzdGFuY2VNZXRyaWNzU3ViamVjdHMuU3RyaW5nXToge1xuICAgICAgICBbU3RyaW5nTWV0cmljc05hbWVzLkxldmVuc2h0ZWluXTogc3RyaW5nRGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tTdHJpbmdNZXRyaWNzTmFtZXMuTGV2ZW5zaHRlaW5dLFxuICAgICAgICBbU3RyaW5nTWV0cmljc05hbWVzLkphcm9XaW5rbGVyXTogc3RyaW5nRGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tTdHJpbmdNZXRyaWNzTmFtZXMuSmFyb1dpbmtsZXJdLFxuICAgICAgICBbU3RyaW5nTWV0cmljc05hbWVzLk1hbmhhdHRhbl06IHN0cmluZ0Rpc3RhbmNlTWV0cmljc01ldGhvZHNbU3RyaW5nTWV0cmljc05hbWVzLk1hbmhhdHRhbl0sXG4gICAgICAgIFtTdHJpbmdNZXRyaWNzTmFtZXMuT25laG90XTogc3RyaW5nRGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tTdHJpbmdNZXRyaWNzTmFtZXMuT25laG90XSxcbiAgICB9LFxuICAgIFtEaXN0YW5jZU1ldHJpY3NTdWJqZWN0cy5CaXRBcnJheV06IHtcbiAgICAgICAgW0JpdEFycmF5TWV0cmljc05hbWVzLlRhbmltb3RvXTogYml0QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzW0JpdEFycmF5TWV0cmljc05hbWVzLlRhbmltb3RvXSxcbiAgICAgICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkRpY2VdOiBiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHNbQml0QXJyYXlNZXRyaWNzTmFtZXMuRGljZV0sXG4gICAgICAgIFtCaXRBcnJheU1ldHJpY3NOYW1lcy5Bc3ltbWV0cmljXTogYml0QXJyYXlEaXN0YW5jZU1ldHJpY3NNZXRob2RzW0JpdEFycmF5TWV0cmljc05hbWVzLkFzeW1tZXRyaWNdLFxuICAgICAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuQnJhdW5CbGFucXVldF06IGJpdEFycmF5RGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tCaXRBcnJheU1ldHJpY3NOYW1lcy5CcmF1bkJsYW5xdWV0XSxcbiAgICAgICAgW0JpdEFycmF5TWV0cmljc05hbWVzLkNvc2luZV06IGJpdEFycmF5RGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tCaXRBcnJheU1ldHJpY3NOYW1lcy5Db3NpbmVdLFxuICAgICAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuS3VsY3p5bnNraV06IGJpdEFycmF5RGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tCaXRBcnJheU1ldHJpY3NOYW1lcy5LdWxjenluc2tpXSxcbiAgICAgICAgW0JpdEFycmF5TWV0cmljc05hbWVzLk1jQ29ubmF1Z2hleV06IGJpdEFycmF5RGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tCaXRBcnJheU1ldHJpY3NOYW1lcy5NY0Nvbm5hdWdoZXldLFxuICAgICAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuUm9nb3RHb2xkYmVyZ106IGJpdEFycmF5RGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tCaXRBcnJheU1ldHJpY3NOYW1lcy5Sb2dvdEdvbGRiZXJnXSxcbiAgICAgICAgW0JpdEFycmF5TWV0cmljc05hbWVzLlJ1c3NlbF06IGJpdEFycmF5RGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tCaXRBcnJheU1ldHJpY3NOYW1lcy5SdXNzZWxdLFxuICAgICAgICBbQml0QXJyYXlNZXRyaWNzTmFtZXMuU29rYWxdOiBiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHNbQml0QXJyYXlNZXRyaWNzTmFtZXMuU29rYWxdLFxuICAgIH0sXG4gICAgW0Rpc3RhbmNlTWV0cmljc1N1YmplY3RzLk1hY3JvTW9sZWN1bGVdOiB7XG4gICAgICAgIFtNbURpc3RhbmNlRnVuY3Rpb25zTmFtZXMuSEFNTUlOR106IG1tRGlzdGFuY2VGdW5jdGlvbnNbTW1EaXN0YW5jZUZ1bmN0aW9uc05hbWVzLkhBTU1JTkddLFxuICAgICAgICBbTW1EaXN0YW5jZUZ1bmN0aW9uc05hbWVzLkxFVkVOU0hURUlOXTogbW1EaXN0YW5jZUZ1bmN0aW9uc1tNbURpc3RhbmNlRnVuY3Rpb25zTmFtZXMuTEVWRU5TSFRFSU5dLFxuICAgICAgICBbTW1EaXN0YW5jZUZ1bmN0aW9uc05hbWVzLk5FRURMRU1BTk5fV1VOU0NIXTogbW1EaXN0YW5jZUZ1bmN0aW9uc1tNbURpc3RhbmNlRnVuY3Rpb25zTmFtZXMuTkVFRExFTUFOTl9XVU5TQ0hdLFxuICAgICAgICBbTW1EaXN0YW5jZUZ1bmN0aW9uc05hbWVzLk1PTk9NRVJfQ0hFTUlDQUxfRElTVEFOQ0VdOiBtbURpc3RhbmNlRnVuY3Rpb25zW01tRGlzdGFuY2VGdW5jdGlvbnNOYW1lcy5NT05PTUVSX0NIRU1JQ0FMX0RJU1RBTkNFXSxcbiAgICB9LFxuICAgIFtEaXN0YW5jZU1ldHJpY3NTdWJqZWN0cy5OdW1iZXJdOiB7XG4gICAgICAgIFtOdW1iZXJNZXRyaWNzTmFtZXMuRGlmZmVyZW5jZV06IG51bWJlckRpc3RhbmNlTWV0cmljc01ldGhvZHNbTnVtYmVyTWV0cmljc05hbWVzLkRpZmZlcmVuY2VdLFxuICAgIH0sXG4gICAgW0Rpc3RhbmNlTWV0cmljc1N1YmplY3RzLkludEFycmF5XToge1xuICAgICAgICBbSW50QXJyYXlNZXRyaWNzTmFtZXMuVGFuaW1vdG9JbnRBcnJheV06IGludEFycmF5RGlzdGFuY2VNZXRyaWNzTWV0aG9kc1tJbnRBcnJheU1ldHJpY3NOYW1lcy5UYW5pbW90b0ludEFycmF5XSxcbiAgICB9LFxuICAgIFtEaXN0YW5jZU1ldHJpY3NTdWJqZWN0cy5OdW1iZXJBcnJheV06IHtcbiAgICAgICAgW051bWJlckFycmF5TWV0cmljc05hbWVzLkNvbW1vbkl0ZW1zXTogbnVtYmVyQXJyYXlEaXN0YW5jZU1ldHJpY3NbTnVtYmVyQXJyYXlNZXRyaWNzTmFtZXMuQ29tbW9uSXRlbXNdLFxuICAgIH0sXG59O1xuZXhwb3J0IGNvbnN0IE1ldHJpY1RvRGF0YVR5cGUgPSBPYmplY3Qua2V5cyhBdmFpbGFibGVNZXRyaWNzKVxuICAgIC5yZWR1Y2UoKHJldCwga2V5KSA9PiB7XG4gICAgZm9yIChjb25zdCB2YWwgb2YgT2JqZWN0LmtleXMoQXZhaWxhYmxlTWV0cmljc1trZXldKSlcbiAgICAgICAgcmV0W3ZhbF0gPSBrZXk7XG4gICAgcmV0dXJuIHJldDtcbn0sIHt9KTtcbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZ01ldHJpYyhuYW1lKSB7XG4gICAgcmV0dXJuIE1ldHJpY1RvRGF0YVR5cGVbbmFtZV0gPT0gJ1N0cmluZyc7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCaXRBcnJheU1ldHJpYyhuYW1lKSB7XG4gICAgcmV0dXJuIE1ldHJpY1RvRGF0YVR5cGVbbmFtZV0gPT0gJ0JpdEFycmF5Jztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlY3Rvck1ldHJpYyhuYW1lKSB7XG4gICAgcmV0dXJuIE1ldHJpY1RvRGF0YVR5cGVbbmFtZV0gPT0gJ1ZlY3Rvcic7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNNYWNyb01vbGVjdWxlTWV0cmljKG5hbWUpIHtcbiAgICByZXR1cm4gTWV0cmljVG9EYXRhVHlwZVtuYW1lXSA9PSBEaXN0YW5jZU1ldHJpY3NTdWJqZWN0cy5NYWNyb01vbGVjdWxlLnRvU3RyaW5nKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1lcmljTWV0cmljKG5hbWUpIHtcbiAgICByZXR1cm4gTWV0cmljVG9EYXRhVHlwZVtuYW1lXSA9PSBEaXN0YW5jZU1ldHJpY3NTdWJqZWN0cy5OdW1iZXIudG9TdHJpbmcoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlckFycmF5TWV0cmljKG5hbWUpIHtcbiAgICByZXR1cm4gTWV0cmljVG9EYXRhVHlwZVtuYW1lXSA9PSBEaXN0YW5jZU1ldHJpY3NTdWJqZWN0cy5OdW1iZXJBcnJheS50b1N0cmluZygpO1xufVxuLyoqIE1hbmhhdHRhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byBzZXF1ZW5jZXMgKG1hdGNoIC0gMCwgbWlzbWF0Y2ggLSAxKSBub3JtYWxpemVkIGZvciBsZW5ndGguICovXG5leHBvcnQgZnVuY3Rpb24gbWFuaGF0dGFuRGlzdGFuY2UoczEsIHMyKSB7XG4gICAgaWYgKHMxLmxlbmd0aCAhPT0gczIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGV0IGRpc3QgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHMxLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgZGlzdCArPSBzMVtpXSA9PSBzMltpXSA/IDAgOiAxO1xuICAgICAgICByZXR1cm4gZGlzdCAvIHMxLmxlbmd0aDtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gY2F0ZWdvcmljYWxEaXN0YW5jZShzMSwgczIpIHtcbiAgICByZXR1cm4gczEgPT09IHMyID8gMCA6IDE7XG59XG4vKiogVW5pZmllZCBjbGFzcyBpbXBsZW1lbnRpbmcgZGlmZmVyZW50IHN0cmluZyBtZWFzdXJlcy4gKi9cbmV4cG9ydCBjbGFzcyBNZWFzdXJlIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIE1lYXN1cmUgd2l0aCAuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZCBNZXRob2QgdG8gY2FsY3VsYXRlIGRpc3RhbmNlIGJldHdlZW4gc3RyaW5ncy5cbiAgICAgKiBAbWVtYmVyb2YgTWVhc3VyZXJcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtZXRob2QpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHRoaXMuZGF0YVR5cGUgPSBNZXRyaWNUb0RhdGFUeXBlW21ldGhvZF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWV0cmljIG5lZWRzIGFyZ3VtZW50cyB0byBiZSBjYWxjdWxhdGVkLlxuICAgICAqIEBwYXJhbSB7S25vd25NZXRyaWNzfSBtZXRob2QgTWV0cmljIHRvIGNoZWNrIGlmIGl0IG5lZWRzIGFyZ3VtZW50cy5cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBtZXRyaWMgbmVlZHMgYXJndW1lbnRzLlxuICAgICAqIEBtZW1iZXJvZiBNZWFzdXJlXG4gICAgICovXG4gICAgbWV0cmljTmVlZHNBcmdzKG1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXNNYWNyb01vbGVjdWxlTWV0cmljKG1ldGhvZCkgfHwgaXNOdW1lcmljTWV0cmljKG1ldGhvZCkgfHwgaXNOdW1iZXJBcnJheU1ldHJpYyhtZXRob2QpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGN1c3RvbSBzdHJpbmcgZGlzdGFuY2UgZnVuY3Rpb24gc3BlY2lmaWVkLlxuICAgICAqIEBwYXJhbSB7b3B0c30gb3B0cyBPcHRpb25zIGZvciB0aGUgbWVhc3VyZS4gdXNlZCBmb3IgbWFjcm9tb2xlY3VsZSBkaXN0YW5jZXNcbiAgICAgKiBAcmV0dXJuIHtEaXN0YW5jZU1ldHJpY30gQ2FsbGJhY2sgb2YgdGhlIG1lYXN1cmUgY2hvc2VuLlxuICAgICAqIEBtZW1iZXJvZiBNZWFzdXJlclxuICAgICAqL1xuICAgIGdldE1lYXN1cmUob3B0cykge1xuICAgICAgICBjb25zdCBkaWN0ID0gQXZhaWxhYmxlTWV0cmljcztcbiAgICAgICAgaWYgKCFkaWN0Lmhhc093blByb3BlcnR5KHRoaXMuZGF0YVR5cGUpIHx8ICFkaWN0W3RoaXMuZGF0YVR5cGVdLmhhc093blByb3BlcnR5KHRoaXMubWV0aG9kKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBtZWFzdXJlICR7dGhpcy5tZXRob2R9IGZvciBkYXRhIHR5cGUgJHt0aGlzLmRhdGFUeXBlfWApO1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRyaWNOZWVkc0FyZ3ModGhpcy5tZXRob2QpID9cbiAgICAgICAgICAgIGRpY3RbdGhpcy5kYXRhVHlwZV1bdGhpcy5tZXRob2RdKG9wdHMpIDpcbiAgICAgICAgICAgIGRpY3RbdGhpcy5kYXRhVHlwZV1bdGhpcy5tZXRob2RdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGN1c3RvbSBzdHJpbmcgZGlzdGFuY2UgYnkgdGhlIGdpdmVuIGRhdGEgdHlwZS5cbiAgICAgKiBAcGFyYW0ge0F2YWlsYWJsZURhdGFUeXBlc30gZGF0YVR5cGUgTWV0cmljJ3MgZGF0YSB0eXBlXG4gICAgICogQHJldHVybiB7c3RyaW5nW119IE1ldHJpYyBuYW1lcyB3aGljaCBleHBlY3RzIHRoZSBnaXZlbiBkYXRhIHR5cGVcbiAgICAgKiBAbWVtYmVyb2YgTWVhc3VyZXJcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0TWV0cmljQnlEYXRhVHlwZShkYXRhVHlwZSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoQXZhaWxhYmxlTWV0cmljc1tkYXRhVHlwZV0pO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyBtZXRyaWMgbmFtZXMgYXZhaWxhYmxlLlxuICAgICAqIEBtZW1iZXJvZiBNZWFzdXJlclxuICAgICAqL1xuICAgIHN0YXRpYyBnZXQgYXZhaWxhYmxlTWVhc3VyZXMoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhBdmFpbGFibGVNZXRyaWNzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkSGx3WldRdGJXVjBjbWxqY3k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJblI1Y0dWa0xXMWxkSEpwWTNNdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzVDBGQlR5eExRVUZMTEVWQlFVVXNUVUZCVFN4eFFrRkJjVUlzUTBGQlF6dEJRVU14UXl4UFFVRlBMRVZCUVVNc1YwRkJWeXhGUVVGRExFMUJRVTBzZVVKQlFYbENMRU5CUVVNN1FVRkZjRVFzVDBGQlR5eEZRVU5NTEd0Q1FVRnJRaXhGUVVOc1FpeHhRa0ZCY1VJc1JVRkRja0lzWTBGQll5eEZRVU5rTEZsQlFWa3NSVUZEV2l4cFFrRkJhVUlzUlVGRGFrSXNaVUZCWlN4RlFVTm1MR3RDUVVGclFpeEZRVU5zUWl4dlFrRkJiMElzUlVGRGNFSXNjVUpCUVhGQ0xFVkJRM0pDTEdOQlFXTXNSVUZEWkN4aFFVRmhMRVZCUTJJc1owSkJRV2RDTEVWQlEyaENMR1ZCUVdVc1JVRkRaaXgzUWtGQmQwSXNSVUZEZUVJc2RVSkJRWFZDTEVkQlEzaENMRTFCUVUwc05rSkJRVFpDTEVOQlFVTTdRVUZGY2tNc1QwRkJUeXhGUVVGRExEQkNRVUV3UWl4RlFVRkRMRTFCUVUwc2FVUkJRV2xFTEVOQlFVTTdRVUZITTBZc1QwRkJUeXhGUVVGRExHMUNRVUZ0UWl4RlFVRkZMSGRDUVVGM1FpeEZRVUZETEUxQlFVMHNjVU5CUVhGRExFTkJRVU03UVVGRGJFY3NUMEZCVHl4RlFVRkRMSFZDUVVGMVFpeEZRVUZGTEc5Q1FVRnZRaXhGUVVOdVJDeHJRa0ZCYTBJc1JVRkJSU3hyUWtGQmEwSXNSVUZCUlN4clFrRkJhMElzUlVGQlJTeHZRa0ZCYjBJc1JVRkRhRVlzZFVKQlFYVkNMRVZCUVVNc1RVRkJUU3hWUVVGVkxFTkJRVU03UVVGSE0wTXNUVUZCVFN4RFFVRkRMRTFCUVUwc05FSkJRVFJDTEVkQlFYbEVPMGxCUTJoSExFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1UwRkJVeXhEUVVGRExFVkJRVVVzTUVKQlFUQkNPME5CUXpORUxFTkJRVU03UVVGRlJpeE5RVUZOTEVOQlFVTXNUVUZCVFN3MFFrRkJORUlzUjBGQmVVUTdTVUZEYUVjc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4WFFVRlhMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zVVVGQlVUdEpRVU0zUXl4RFFVRkRMR3RDUVVGclFpeERRVUZETEZkQlFWY3NRMEZCUXl4RlFVRkZMRmRCUVZjN1NVRkROME1zUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhUUVVGVExFTkJRVU1zUlVGQlJTeHBRa0ZCYVVJN1NVRkRha1FzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeHRRa0ZCYlVJN1EwRkRha1FzUTBGQlF6dEJRVVZHTEUxQlFVMHNRMEZCUXl4TlFVRk5MRGhDUVVFNFFpeEhRVUUyUkR0SlFVTjBSeXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRkZCUVZFc1EwRkJReXhGUVVGRkxHZENRVUZuUWp0SlFVTnFSQ3hEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxGbEJRVms3U1VGRGVrTXNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eFZRVUZWTEVOQlFVTXNSVUZCUlN4clFrRkJhMEk3U1VGRGNrUXNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eGhRVUZoTEVOQlFVTXNSVUZCUlN4eFFrRkJjVUk3U1VGRE0wUXNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4alFVRmpPMGxCUXpkRExFTkJRVU1zYjBKQlFXOUNMRU5CUVVNc1ZVRkJWU3hEUVVGRExFVkJRVVVzYTBKQlFXdENPMGxCUTNKRUxFTkJRVU1zYjBKQlFXOUNMRU5CUVVNc1dVRkJXU3hEUVVGRExFVkJRVVVzYjBKQlFXOUNPMGxCUTNwRUxFTkJRVU1zYjBKQlFXOUNMRU5CUVVNc1lVRkJZU3hEUVVGRExFVkJRVVVzY1VKQlFYRkNPMGxCUXpORUxFTkJRVU1zYjBKQlFXOUNMRU5CUVVNc1RVRkJUU3hEUVVGRExFVkJRVVVzWTBGQll6dEpRVU0zUXl4RFFVRkRMRzlDUVVGdlFpeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZMR0ZCUVdFN1NVRkRNME1zUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhQUVVGUExFTkJRVU1zUlVGQlJTeGxRVUZsTzBsQlF5OURMRU5CUVVNc2IwSkJRVzlDTEVOQlFVTXNVMEZCVXl4RFFVRkRMRVZCUVVVc2FVSkJRV2xDTzBOQlEzQkVMRU5CUVVNN1FVRkZSaXhOUVVGTkxFTkJRVU1zVFVGQlRTdzRRa0ZCT0VJc1IwRkJiVVU3U1VGRE5VY3NRMEZCUXl4dlFrRkJiMElzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhGUVVGRkxIZENRVUYzUWp0RFFVTnNSU3hEUVVGRE8wRkJSVVlzVFVGQlRTeERRVUZETEUxQlFVMHNORUpCUVRSQ0xFZEJRWGRGTzBsQlF5OUhMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNWVUZCVlN4RFFVRkRMRVZCUVVVc1pVRkJaVHREUVVOcVJDeERRVUZETzBGQlJVWXNUVUZCVFN4RFFVRkRMRTFCUVUwc01FSkJRVEJDTEVkQlEzRkVPMGxCUXpGR0xFTkJRVU1zZFVKQlFYVkNMRU5CUVVNc1YwRkJWeXhEUVVGRExFVkJRVVVzZFVKQlFYVkNPME5CUXk5RUxFTkJRVU03UVVGRlJpeE5RVUZOTEVOQlFVTXNUVUZCVFN4blFrRkJaMElzUjBGQlJ6dEpRVU01UWl4RFFVRkRMSFZDUVVGMVFpeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZPMUZCUTJoRExFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1UwRkJVeXhEUVVGRExFVkJRVVVzTkVKQlFUUkNMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNVMEZCVXl4RFFVRkRPMHRCUXpOR08wbEJRMFFzUTBGQlF5eDFRa0ZCZFVJc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJUdFJRVU5vUXl4RFFVRkRMR3RDUVVGclFpeERRVUZETEZkQlFWY3NRMEZCUXl4RlFVRkZMRFJDUVVFMFFpeERRVUZETEd0Q1FVRnJRaXhEUVVGRExGZEJRVmNzUTBGQlF6dFJRVU01Uml4RFFVRkRMR3RDUVVGclFpeERRVUZETEZkQlFWY3NRMEZCUXl4RlFVRkZMRFJDUVVFMFFpeERRVUZETEd0Q1FVRnJRaXhEUVVGRExGZEJRVmNzUTBGQlF6dFJRVU01Uml4RFFVRkRMR3RDUVVGclFpeERRVUZETEZOQlFWTXNRMEZCUXl4RlFVRkZMRFJDUVVFMFFpeERRVUZETEd0Q1FVRnJRaXhEUVVGRExGTkJRVk1zUTBGQlF6dFJRVU14Uml4RFFVRkRMR3RDUVVGclFpeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRFJDUVVFMFFpeERRVUZETEd0Q1FVRnJRaXhEUVVGRExFMUJRVTBzUTBGQlF6dExRVU55Ump0SlFVTkVMRU5CUVVNc2RVSkJRWFZDTEVOQlFVTXNVVUZCVVN4RFFVRkRMRVZCUVVVN1VVRkRiRU1zUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhSUVVGUkxFTkJRVU1zUlVGQlJTdzRRa0ZCT0VJc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4UlFVRlJMRU5CUVVNN1VVRkRPVVlzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTdzRRa0ZCT0VJc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4SlFVRkpMRU5CUVVNN1VVRkRkRVlzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhWUVVGVkxFTkJRVU1zUlVGQlJTdzRRa0ZCT0VJc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4VlFVRlZMRU5CUVVNN1VVRkRiRWNzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhoUVVGaExFTkJRVU1zUlVGQlJTdzRRa0ZCT0VJc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4aFFVRmhMRU5CUVVNN1VVRkRlRWNzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTdzRRa0ZCT0VJc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4TlFVRk5MRU5CUVVNN1VVRkRNVVlzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhWUVVGVkxFTkJRVU1zUlVGQlJTdzRRa0ZCT0VJc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4VlFVRlZMRU5CUVVNN1VVRkRiRWNzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhaUVVGWkxFTkJRVU1zUlVGQlJTdzRRa0ZCT0VJc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4WlFVRlpMRU5CUVVNN1VVRkRkRWNzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhoUVVGaExFTkJRVU1zUlVGQlJTdzRRa0ZCT0VJc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4aFFVRmhMRU5CUVVNN1VVRkRlRWNzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTdzRRa0ZCT0VJc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4TlFVRk5MRU5CUVVNN1VVRkRNVVlzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTdzRRa0ZCT0VJc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4TFFVRkxMRU5CUVVNN1MwRkRla1k3U1VGRFJDeERRVUZETEhWQ1FVRjFRaXhEUVVGRExHRkJRV0VzUTBGQlF5eEZRVUZGTzFGQlEzWkRMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVc2JVSkJRVzFDTEVOQlFVTXNkMEpCUVhkQ0xFTkJRVU1zVDBGQlR5eERRVUZETzFGQlEzcEdMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVc2JVSkJRVzFDTEVOQlFVTXNkMEpCUVhkQ0xFTkJRVU1zVjBGQlZ5eERRVUZETzFGQlEycEhMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU1zUlVGQlJTeHRRa0ZCYlVJc1EwRkJReXgzUWtGQmQwSXNRMEZCUXl4cFFrRkJhVUlzUTBGQlF6dFJRVU0zUnl4RFFVRkRMSGRDUVVGM1FpeERRVUZETEhsQ1FVRjVRaXhEUVVGRExFVkJRMnhFTEcxQ1FVRnRRaXhEUVVGRExIZENRVUYzUWl4RFFVRkRMSGxDUVVGNVFpeERRVUZETzB0QlF6RkZPMGxCUTBRc1EwRkJReXgxUWtGQmRVSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSVHRSUVVOb1F5eERRVUZETEd0Q1FVRnJRaXhEUVVGRExGVkJRVlVzUTBGQlF5eEZRVUZGTERSQ1FVRTBRaXhEUVVGRExHdENRVUZyUWl4RFFVRkRMRlZCUVZVc1EwRkJRenRMUVVNM1JqdEpRVU5FTEVOQlFVTXNkVUpCUVhWQ0xFTkJRVU1zVVVGQlVTeERRVUZETEVWQlFVVTdVVUZEYkVNc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMR2RDUVVGblFpeERRVUZETzB0QlF5OUhPMGxCUTBRc1EwRkJReXgxUWtGQmRVSXNRMEZCUXl4WFFVRlhMRU5CUVVNc1JVRkJSVHRSUVVOeVF5eERRVUZETEhWQ1FVRjFRaXhEUVVGRExGZEJRVmNzUTBGQlF5eEZRVUZGTERCQ1FVRXdRaXhEUVVGRExIVkNRVUYxUWl4RFFVRkRMRmRCUVZjc1EwRkJRenRMUVVOMlJ6dERRVU5HTEVOQlFVTTdRVUZGUml4TlFVRk5MRU5CUVVNc1RVRkJUU3huUWtGQlowSXNSMEZCY1VJc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJRenRMUVVNMVJTeE5RVUZOTEVOQlFVTXNRMEZCUXl4SFFVRnhRaXhGUVVGRkxFZEJRVWNzUlVGQlJTeEZRVUZGTzBsQlEzSkRMRXRCUVVzc1RVRkJUU3hIUVVGSExFbEJRVWtzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eEhRVUY1UWl4RFFVRkRMRU5CUVVNN1VVRkRlRVVzUjBGQlJ5eERRVUZETEVkQlFYbENMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU03U1VGRmRrTXNUMEZCVHl4SFFVRkhMRU5CUVVNN1FVRkRZaXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdRVUZyUWxRc1RVRkJUU3hWUVVGVkxHTkJRV01zUTBGQlF5eEpRVUZyUWp0SlFVTXZReXhQUVVGUExHZENRVUZuUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxGRkJRVkVzUTBGQlF6dEJRVU0xUXl4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGVkxHZENRVUZuUWl4RFFVRkRMRWxCUVd0Q08wbEJRMnBFTEU5QlFVOHNaMEpCUVdkQ0xFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NWVUZCVlN4RFFVRkRPMEZCUXpsRExFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNZMEZCWXl4RFFVRkRMRWxCUVd0Q08wbEJReTlETEU5QlFVOHNaMEpCUVdkQ0xFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NVVUZCVVN4RFFVRkRPMEZCUXpWRExFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNjVUpCUVhGQ0xFTkJRVU1zU1VGQmEwSTdTVUZEZEVRc1QwRkJUeXhuUWtGQlowSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3gxUWtGQmRVSXNRMEZCUXl4aFFVRmhMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03UVVGRGNFWXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hsUVVGbExFTkJRVU1zU1VGQmEwSTdTVUZEYUVRc1QwRkJUeXhuUWtGQlowSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3gxUWtGQmRVSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03UVVGRE4wVXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3h0UWtGQmJVSXNRMEZCUXl4SlFVRnJRanRKUVVOd1JDeFBRVUZQTEdkQ1FVRm5RaXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEhWQ1FVRjFRaXhEUVVGRExGZEJRVmNzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0QlFVTnNSaXhEUVVGRE8wRkJSVVFzWjBkQlFXZEhPMEZCUTJoSExFMUJRVTBzVlVGQlZTeHBRa0ZCYVVJc1EwRkJReXhGUVVGVkxFVkJRVVVzUlVGQlZUdEpRVU4wUkN4SlFVRkpMRVZCUVVVc1EwRkJReXhOUVVGTkxFdEJRVXNzUlVGQlJTeERRVUZETEUxQlFVMHNSVUZCUlR0UlFVTXpRaXhQUVVGUExFTkJRVU1zUTBGQlF6dExRVU5XTzFOQlFVMDdVVUZEVEN4SlFVRkpMRWxCUVVrc1IwRkJWeXhEUVVGRExFTkJRVU03VVVGRGNrSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRk8xbEJRMmhETEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTnFReXhQUVVGUExFbEJRVWtzUjBGQlJ5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRPMHRCUTNwQ08wRkJRMGdzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4dFFrRkJiVUlzUTBGQlF5eEZRVUZWTEVWQlFVVXNSVUZCVlR0SlFVTjRSQ3hQUVVGUExFVkJRVVVzUzBGQlN5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF6TkNMRU5CUVVNN1FVRkZSQ3cwUkVGQk5FUTdRVUZETlVRc1RVRkJUU3hQUVVGUExFOUJRVTg3U1VGSmJFSTdPenM3VDBGSlJ6dEpRVU5JTEZsQlFWa3NUVUZCYjBJN1VVRkRPVUlzU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4TlFVRk5MRU5CUVVNN1VVRkRja0lzU1VGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4blFrRkJaMElzUTBGQlF5eE5RVUZOTEVOQlFYVkNMRU5CUVVNN1NVRkRha1VzUTBGQlF6dEpRVVZFT3pzN096dFBRVXRITzBsQlEwa3NaVUZCWlN4RFFVRkRMRTFCUVc5Q08xRkJRM3BETEU5QlFVOHNjVUpCUVhGQ0xFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NaVUZCWlN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxHMUNRVUZ0UWl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJRMnBITEVOQlFVTTdTVUZEUkRzN096czdUMEZMUnp0SlFVTkpMRlZCUVZVc1EwRkJReXhKUVVGVk8xRkJRekZDTEUxQlFVMHNTVUZCU1N4SFFVVk9MR2RDUVVGblFpeERRVUZETzFGQlEzSkNMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdXVUZEZWtZc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eHRRa0ZCYlVJc1NVRkJTU3hEUVVGRExFMUJRVTBzYTBKQlFXdENMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF5eERRVUZETzFGQlEyNUdMRTlCUVU4c1NVRkJTU3hEUVVGRExHVkJRV1VzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOMlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFYRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU0zUlN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVcxQ0xFTkJRVU03U1VGRGRrUXNRMEZCUXp0SlFVVkVPenM3T3p0UFFVdEhPMGxCUTBrc1RVRkJUU3hEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRkZCUVRSQ08xRkJRelZFTEU5QlFVOHNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMnBFTEVOQlFVTTdTVUZGUkRzN1QwRkZSenRKUVVOSUxFMUJRVTBzUzBGQlN5eHBRa0ZCYVVJN1VVRkRNVUlzVDBGQlR5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTTdTVUZEZGtNc1EwRkJRenREUVVOR0lpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElDb2dZWE1nWm13Z1puSnZiU0FuWm1GemRHVnpkQzFzWlhabGJuTm9kR1ZwYmljN1hHNXBiWEJ2Y25RZ2UycGhjbTlYYVc1cmJHVnlmU0JtY205dElDZHFZWEp2TFhkcGJtdHNaWEl0ZEhsd1pYTmpjbWx3ZENjN1hHNXBiWEJ2Y25RZ2UwUnBjM1JoYm1ObFRXVjBjbWxqZlNCbWNtOXRJQ2RBWkdGMFlXZHliMnN0YkdsaWNtRnlhV1Z6TDNWMGFXeHpMM055WXk5MGVYQmxMV1JsWTJ4aGNtRjBhVzl1Y3ljN1hHNXBiWEJ2Y25RZ2UxeHVJQ0JoYzNsdGJXVjBjbWxqUkdsemRHRnVZMlVzWEc0Z0lHSnlZWFZ1UW14aGJuRjFaWFJFYVhOMFlXNWpaU3hjYmlBZ1kyOXphVzVsUkdsemRHRnVZMlVzWEc0Z0lHUnBZMlZFYVhOMFlXNWpaU3hjYmlBZ1pYVmpiR2xrWldGdVJHbHpkR0Z1WTJVc1hHNGdJR2hoYlcxcGJtZEVhWE4wWVc1alpTeGNiaUFnYTNWc1kzcDVibk5yYVVScGMzUmhibU5sTEZ4dUlDQnRZME52Ym01aGRXZG9aWGxFYVhOMFlXNWpaU3hjYmlBZ2NtOW5iM1JIYjJ4a1ltVnlaMFJwYzNSaGJtTmxMRnh1SUNCeWRYTnpaV3hFYVhOMFlXNWpaU3hjYmlBZ2MyOXJZV3hFYVhOMFlXNWpaU3hjYmlBZ2RHRnVhVzF2ZEc5RWFYTjBZVzVqWlN4Y2JpQWdiblZ0WlhKcFkwUnBjM1JoYm1ObExGeHVJQ0IwWVc1cGJXOTBiMFJwYzNSaGJtTmxTVzUwUVhKeVlYa3NYRzRnSUdsdWRtVnljMlZEYjIxdGIyNUpkR1Z0YzBOdmRXNTBMRnh1ZlNCbWNtOXRJQ2N1TGk5a2FYTjBZVzVqWlMxdFpYUnlhV056TFcxbGRHaHZaSE1uTzF4dVhHNXBiWEJ2Y25RZ2UyTmhiR04xYkdGMFpVVjFZMnhwWkdWaGJrUnBjM1JoYm1ObGZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwzVjBhV3h6TDNOeVl5OTJaV04wYjNJdGIzQmxjbUYwYVc5dWN5YzdYRzVwYlhCdmNuUWdRbWwwUVhKeVlYa2dabkp2YlNBblFHUmhkR0ZuY205ckxXeHBZbkpoY21sbGN5OTFkR2xzY3k5emNtTXZZbWwwTFdGeWNtRjVKenRjYm1sdGNHOXlkQ0I3Vm1WamRHOXlMQ0JUZEhKcGJtZEVhV04wYVc5dVlYSjVmU0JtY205dElDZEFaR0YwWVdkeWIyc3RiR2xpY21GeWFXVnpMM1YwYVd4ekwzTnlZeTkwZVhCbExXUmxZMnhoY21GMGFXOXVjeWM3WEc1cGJYQnZjblFnZTIxdFJHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5Nc0lFMXRSR2x6ZEdGdVkyVkdkVzVqZEdsdmJuTk9ZVzFsYzMwZ1puSnZiU0FuTGk0dmJXRmpjbTl0YjJ4bFkzVnNaUzFrYVhOMFlXNWpaUzFtZFc1amRHbHZibk1uTzF4dWFXMXdiM0owSUh0RWFYTjBZVzVqWlUxbGRISnBZM05UZFdKcVpXTjBjeXdnUW1sMFFYSnlZWGxOWlhSeWFXTnpUbUZ0WlhNc1hHNGdJRk4wY21sdVowMWxkSEpwWTNOT1lXMWxjeXdnVm1WamRHOXlUV1YwY21samMwNWhiV1Z6TENCT2RXMWlaWEpOWlhSeWFXTnpUbUZ0WlhNc0lFbHVkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMRnh1SUNCT2RXMWlaWEpCY25KaGVVMWxkSEpwWTNOT1lXMWxjMzBnWm5KdmJTQW5MaTlqYjI1emRITW5PMXh1WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0IyWldOMGIzSkVhWE4wWVc1alpVMWxkSEpwWTNOTlpYUm9iMlJ6T2lCN0lGdHVZVzFsT2lCemRISnBibWRkT2lBb2VEb2dWbVZqZEc5eUxDQjVPaUJXWldOMGIzSXBJRDArSUc1MWJXSmxjaUI5SUQwZ2UxeHVJQ0JiVm1WamRHOXlUV1YwY21samMwNWhiV1Z6TGtWMVkyeHBaR1ZoYmwwNklHTmhiR04xYkdGMFpVVjFZMnhwWkdWaGJrUnBjM1JoYm1ObExGeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSE4wY21sdVowUnBjM1JoYm1ObFRXVjBjbWxqYzAxbGRHaHZaSE02SUhzZ1cyNWhiV1U2SUhOMGNtbHVaMTA2SUNoNE9pQnpkSEpwYm1jc0lIazZJSE4wY21sdVp5a2dQVDRnYm5WdFltVnlJSDBnUFNCN1hHNGdJRnRUZEhKcGJtZE5aWFJ5YVdOelRtRnRaWE11VEdWMlpXNXphSFJsYVc1ZE9pQm1iQzVrYVhOMFlXNWpaU3hjYmlBZ1cxTjBjbWx1WjAxbGRISnBZM05PWVcxbGN5NUtZWEp2VjJsdWEyeGxjbDA2SUdwaGNtOVhhVzVyYkdWeUxGeHVJQ0JiVTNSeWFXNW5UV1YwY21samMwNWhiV1Z6TGsxaGJtaGhkSFJoYmwwNklHMWhibWhoZEhSaGJrUnBjM1JoYm1ObExGeHVJQ0JiVTNSeWFXNW5UV1YwY21samMwNWhiV1Z6TGs5dVpXaHZkRjA2SUdOaGRHVm5iM0pwWTJGc1JHbHpkR0Z1WTJVc1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdZbWwwUVhKeVlYbEVhWE4wWVc1alpVMWxkSEpwWTNOTlpYUm9iMlJ6T2lCN0lGdHVZVzFsT2lCemRISnBibWRkT2lBb2VEb2dRbWwwUVhKeVlYa3NJSGs2SUVKcGRFRnljbUY1S1NBOVBpQnVkVzFpWlhJZ2ZTQTlJSHRjYmlBZ1cwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMbFJoYm1sdGIzUnZYVG9nZEdGdWFXMXZkRzlFYVhOMFlXNWpaU3hjYmlBZ1cwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMa1JwWTJWZE9pQmthV05sUkdsemRHRnVZMlVzWEc0Z0lGdENhWFJCY25KaGVVMWxkSEpwWTNOT1lXMWxjeTVCYzNsdGJXVjBjbWxqWFRvZ1lYTjViVzFsZEhKcFkwUnBjM1JoYm1ObExGeHVJQ0JiUW1sMFFYSnlZWGxOWlhSeWFXTnpUbUZ0WlhNdVFuSmhkVzVDYkdGdWNYVmxkRjA2SUdKeVlYVnVRbXhoYm5GMVpYUkVhWE4wWVc1alpTeGNiaUFnVzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxrTnZjMmx1WlYwNklHTnZjMmx1WlVScGMzUmhibU5sTEZ4dUlDQmJRbWwwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11UzNWc1kzcDVibk5yYVYwNklHdDFiR042ZVc1emEybEVhWE4wWVc1alpTeGNiaUFnVzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxrMWpRMjl1Ym1GMVoyaGxlVjA2SUcxalEyOXVibUYxWjJobGVVUnBjM1JoYm1ObExGeHVJQ0JiUW1sMFFYSnlZWGxOWlhSeWFXTnpUbUZ0WlhNdVVtOW5iM1JIYjJ4a1ltVnlaMTA2SUhKdloyOTBSMjlzWkdKbGNtZEVhWE4wWVc1alpTeGNiaUFnVzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxsSjFjM05sYkYwNklISjFjM05sYkVScGMzUmhibU5sTEZ4dUlDQmJRbWwwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11VTI5cllXeGRPaUJ6YjJ0aGJFUnBjM1JoYm1ObExGeHVJQ0JiUW1sMFFYSnlZWGxOWlhSeWFXTnpUbUZ0WlhNdVNHRnRiV2x1WjEwNklHaGhiVzFwYm1kRWFYTjBZVzVqWlN4Y2JpQWdXMEpwZEVGeWNtRjVUV1YwY21samMwNWhiV1Z6TGtWMVkyeHBaR1ZoYmwwNklHVjFZMnhwWkdWaGJrUnBjM1JoYm1ObExGeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR2x1ZEVGeWNtRjVSR2x6ZEdGdVkyVk5aWFJ5YVdOelRXVjBhRzlrY3pvZ2V5QmJibUZ0WlRvZ2MzUnlhVzVuWFRvZ0tIZzZJRlZwYm5Rek1rRnljbUY1TENCNU9pQlZhVzUwTXpKQmNuSmhlU2tnUFQ0Z2JuVnRZbVZ5SUgwZ1BTQjdYRzRnSUZ0SmJuUkJjbkpoZVUxbGRISnBZM05PWVcxbGN5NVVZVzVwYlc5MGIwbHVkRUZ5Y21GNVhUb2dkR0Z1YVcxdmRHOUVhWE4wWVc1alpVbHVkRUZ5Y21GNUxGeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJRzUxYldKbGNrUnBjM1JoYm1ObFRXVjBjbWxqYzAxbGRHaHZaSE02SUhzZ1cyNWhiV1U2SUhOMGNtbHVaMTA2SUNoaGNtZHpPaUJoYm5rcElEMCtJQ2g0T2lCdWRXMWlaWElzSUhrNklHNTFiV0psY2lrZ1BUNGdiblZ0WW1WeUlIMGdQU0I3WEc0Z0lGdE9kVzFpWlhKTlpYUnlhV056VG1GdFpYTXVSR2xtWm1WeVpXNWpaVjA2SUc1MWJXVnlhV05FYVhOMFlXNWpaU3hjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCdWRXMWlaWEpCY25KaGVVUnBjM1JoYm1ObFRXVjBjbWxqY3pwY2Juc2dXMjVoYldVNklITjBjbWx1WjEwNklDaGhjbWR6T2lCaGJua3BJRDArSUNoNE9pQkJjbkpoZVV4cGEyVThiblZ0WW1WeVBpd2dlVG9nUVhKeVlYbE1hV3RsUEc1MWJXSmxjajRwSUQwK0lHNTFiV0psY2lCOUlEMGdlMXh1SUNCYlRuVnRZbVZ5UVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11UTI5dGJXOXVTWFJsYlhOZE9pQnBiblpsY25ObFEyOXRiVzl1U1hSbGJYTkRiM1Z1ZEN4Y2JuMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQkJkbUZwYkdGaWJHVk5aWFJ5YVdOeklEMGdlMXh1SUNCYlJHbHpkR0Z1WTJWTlpYUnlhV056VTNWaWFtVmpkSE11Vm1WamRHOXlYVG9nZTF4dUlDQWdJRnRXWldOMGIzSk5aWFJ5YVdOelRtRnRaWE11UlhWamJHbGtaV0Z1WFRvZ2RtVmpkRzl5UkdsemRHRnVZMlZOWlhSeWFXTnpUV1YwYUc5a2MxdFdaV04wYjNKTlpYUnlhV056VG1GdFpYTXVSWFZqYkdsa1pXRnVYU3hjYmlBZ2ZTeGNiaUFnVzBScGMzUmhibU5sVFdWMGNtbGpjMU4xWW1wbFkzUnpMbE4wY21sdVoxMDZJSHRjYmlBZ0lDQmJVM1J5YVc1blRXVjBjbWxqYzA1aGJXVnpMa3hsZG1WdWMyaDBaV2x1WFRvZ2MzUnlhVzVuUkdsemRHRnVZMlZOWlhSeWFXTnpUV1YwYUc5a2MxdFRkSEpwYm1kTlpYUnlhV056VG1GdFpYTXVUR1YyWlc1emFIUmxhVzVkTEZ4dUlDQWdJRnRUZEhKcGJtZE5aWFJ5YVdOelRtRnRaWE11U21GeWIxZHBibXRzWlhKZE9pQnpkSEpwYm1kRWFYTjBZVzVqWlUxbGRISnBZM05OWlhSb2IyUnpXMU4wY21sdVowMWxkSEpwWTNOT1lXMWxjeTVLWVhKdlYybHVhMnhsY2wwc1hHNGdJQ0FnVzFOMGNtbHVaMDFsZEhKcFkzTk9ZVzFsY3k1TllXNW9ZWFIwWVc1ZE9pQnpkSEpwYm1kRWFYTjBZVzVqWlUxbGRISnBZM05OWlhSb2IyUnpXMU4wY21sdVowMWxkSEpwWTNOT1lXMWxjeTVOWVc1b1lYUjBZVzVkTEZ4dUlDQWdJRnRUZEhKcGJtZE5aWFJ5YVdOelRtRnRaWE11VDI1bGFHOTBYVG9nYzNSeWFXNW5SR2x6ZEdGdVkyVk5aWFJ5YVdOelRXVjBhRzlrYzF0VGRISnBibWROWlhSeWFXTnpUbUZ0WlhNdVQyNWxhRzkwWFN4Y2JpQWdmU3hjYmlBZ1cwUnBjM1JoYm1ObFRXVjBjbWxqYzFOMVltcGxZM1J6TGtKcGRFRnljbUY1WFRvZ2UxeHVJQ0FnSUZ0Q2FYUkJjbkpoZVUxbGRISnBZM05PWVcxbGN5NVVZVzVwYlc5MGIxMDZJR0pwZEVGeWNtRjVSR2x6ZEdGdVkyVk5aWFJ5YVdOelRXVjBhRzlrYzF0Q2FYUkJjbkpoZVUxbGRISnBZM05PWVcxbGN5NVVZVzVwYlc5MGIxMHNYRzRnSUNBZ1cwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMa1JwWTJWZE9pQmlhWFJCY25KaGVVUnBjM1JoYm1ObFRXVjBjbWxqYzAxbGRHaHZaSE5iUW1sMFFYSnlZWGxOWlhSeWFXTnpUbUZ0WlhNdVJHbGpaVjBzWEc0Z0lDQWdXMEpwZEVGeWNtRjVUV1YwY21samMwNWhiV1Z6TGtGemVXMXRaWFJ5YVdOZE9pQmlhWFJCY25KaGVVUnBjM1JoYm1ObFRXVjBjbWxqYzAxbGRHaHZaSE5iUW1sMFFYSnlZWGxOWlhSeWFXTnpUbUZ0WlhNdVFYTjViVzFsZEhKcFkxMHNYRzRnSUNBZ1cwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMa0p5WVhWdVFteGhibkYxWlhSZE9pQmlhWFJCY25KaGVVUnBjM1JoYm1ObFRXVjBjbWxqYzAxbGRHaHZaSE5iUW1sMFFYSnlZWGxOWlhSeWFXTnpUbUZ0WlhNdVFuSmhkVzVDYkdGdWNYVmxkRjBzWEc0Z0lDQWdXMEpwZEVGeWNtRjVUV1YwY21samMwNWhiV1Z6TGtOdmMybHVaVjA2SUdKcGRFRnljbUY1UkdsemRHRnVZMlZOWlhSeWFXTnpUV1YwYUc5a2MxdENhWFJCY25KaGVVMWxkSEpwWTNOT1lXMWxjeTVEYjNOcGJtVmRMRnh1SUNBZ0lGdENhWFJCY25KaGVVMWxkSEpwWTNOT1lXMWxjeTVMZFd4amVubHVjMnRwWFRvZ1ltbDBRWEp5WVhsRWFYTjBZVzVqWlUxbGRISnBZM05OWlhSb2IyUnpXMEpwZEVGeWNtRjVUV1YwY21samMwNWhiV1Z6TGt0MWJHTjZlVzV6YTJsZExGeHVJQ0FnSUZ0Q2FYUkJjbkpoZVUxbGRISnBZM05PWVcxbGN5NU5ZME52Ym01aGRXZG9aWGxkT2lCaWFYUkJjbkpoZVVScGMzUmhibU5sVFdWMGNtbGpjMDFsZEdodlpITmJRbWwwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11VFdORGIyNXVZWFZuYUdWNVhTeGNiaUFnSUNCYlFtbDBRWEp5WVhsTlpYUnlhV056VG1GdFpYTXVVbTluYjNSSGIyeGtZbVZ5WjEwNklHSnBkRUZ5Y21GNVJHbHpkR0Z1WTJWTlpYUnlhV056VFdWMGFHOWtjMXRDYVhSQmNuSmhlVTFsZEhKcFkzTk9ZVzFsY3k1U2IyZHZkRWR2YkdSaVpYSm5YU3hjYmlBZ0lDQmJRbWwwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11VW5WemMyVnNYVG9nWW1sMFFYSnlZWGxFYVhOMFlXNWpaVTFsZEhKcFkzTk5aWFJvYjJSelcwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMbEoxYzNObGJGMHNYRzRnSUNBZ1cwSnBkRUZ5Y21GNVRXVjBjbWxqYzA1aGJXVnpMbE52YTJGc1hUb2dZbWwwUVhKeVlYbEVhWE4wWVc1alpVMWxkSEpwWTNOTlpYUm9iMlJ6VzBKcGRFRnljbUY1VFdWMGNtbGpjMDVoYldWekxsTnZhMkZzWFN4Y2JpQWdmU3hjYmlBZ1cwUnBjM1JoYm1ObFRXVjBjbWxqYzFOMVltcGxZM1J6TGsxaFkzSnZUVzlzWldOMWJHVmRPaUI3SUM4dklHOXdkR2x2Ym1Gc0lHRnlaM01nYm1WbFpHVmtJR1p2Y2lCdFlXTnliMjF2YkdWamRXeGxJR1oxYm1OMGFXOXVjeUIzYUdsamFDQnBibWwwYVdGc2FYcGxJSFJvWlcxY2JpQWdJQ0JiVFcxRWFYTjBZVzVqWlVaMWJtTjBhVzl1YzA1aGJXVnpMa2hCVFUxSlRrZGRPaUJ0YlVScGMzUmhibU5sUm5WdVkzUnBiMjV6VzAxdFJHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5OT1lXMWxjeTVJUVUxTlNVNUhYU3hjYmlBZ0lDQmJUVzFFYVhOMFlXNWpaVVoxYm1OMGFXOXVjMDVoYldWekxreEZWa1ZPVTBoVVJVbE9YVG9nYlcxRWFYTjBZVzVqWlVaMWJtTjBhVzl1YzF0TmJVUnBjM1JoYm1ObFJuVnVZM1JwYjI1elRtRnRaWE11VEVWV1JVNVRTRlJGU1U1ZExGeHVJQ0FnSUZ0TmJVUnBjM1JoYm1ObFJuVnVZM1JwYjI1elRtRnRaWE11VGtWRlJFeEZUVUZPVGw5WFZVNVRRMGhkT2lCdGJVUnBjM1JoYm1ObFJuVnVZM1JwYjI1elcwMXRSR2x6ZEdGdVkyVkdkVzVqZEdsdmJuTk9ZVzFsY3k1T1JVVkVURVZOUVU1T1gxZFZUbE5EU0Ywc1hHNGdJQ0FnVzAxdFJHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5OT1lXMWxjeTVOVDA1UFRVVlNYME5JUlUxSlEwRk1YMFJKVTFSQlRrTkZYVHBjYmlBZ0lDQWdJRzF0UkdsemRHRnVZMlZHZFc1amRHbHZibk5iVFcxRWFYTjBZVzVqWlVaMWJtTjBhVzl1YzA1aGJXVnpMazFQVGs5TlJWSmZRMGhGVFVsRFFVeGZSRWxUVkVGT1EwVmRMRnh1SUNCOUxGeHVJQ0JiUkdsemRHRnVZMlZOWlhSeWFXTnpVM1ZpYW1WamRITXVUblZ0WW1WeVhUb2dlMXh1SUNBZ0lGdE9kVzFpWlhKTlpYUnlhV056VG1GdFpYTXVSR2xtWm1WeVpXNWpaVjA2SUc1MWJXSmxja1JwYzNSaGJtTmxUV1YwY21samMwMWxkR2h2WkhOYlRuVnRZbVZ5VFdWMGNtbGpjMDVoYldWekxrUnBabVpsY21WdVkyVmRMRnh1SUNCOUxGeHVJQ0JiUkdsemRHRnVZMlZOWlhSeWFXTnpVM1ZpYW1WamRITXVTVzUwUVhKeVlYbGRPaUI3WEc0Z0lDQWdXMGx1ZEVGeWNtRjVUV1YwY21samMwNWhiV1Z6TGxSaGJtbHRiM1J2U1c1MFFYSnlZWGxkT2lCcGJuUkJjbkpoZVVScGMzUmhibU5sVFdWMGNtbGpjMDFsZEdodlpITmJTVzUwUVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11VkdGdWFXMXZkRzlKYm5SQmNuSmhlVjBzWEc0Z0lIMHNYRzRnSUZ0RWFYTjBZVzVqWlUxbGRISnBZM05UZFdKcVpXTjBjeTVPZFcxaVpYSkJjbkpoZVYwNklIdGNiaUFnSUNCYlRuVnRZbVZ5UVhKeVlYbE5aWFJ5YVdOelRtRnRaWE11UTI5dGJXOXVTWFJsYlhOZE9pQnVkVzFpWlhKQmNuSmhlVVJwYzNSaGJtTmxUV1YwY21samMxdE9kVzFpWlhKQmNuSmhlVTFsZEhKcFkzTk9ZVzFsY3k1RGIyMXRiMjVKZEdWdGMxMHNYRzRnSUgwc1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdUV1YwY21salZHOUVZWFJoVkhsd1pUb2dVM1J5YVc1blJHbGpkR2x2Ym1GeWVTQTlJRTlpYW1WamRDNXJaWGx6S0VGMllXbHNZV0pzWlUxbGRISnBZM01wWEc0Z0lDNXlaV1IxWTJVb0tISmxkRG9nVTNSeWFXNW5SR2xqZEdsdmJtRnllU3dnYTJWNUtTQTlQaUI3WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0IyWVd3Z2IyWWdUMkpxWldOMExtdGxlWE1vUVhaaGFXeGhZbXhsVFdWMGNtbGpjMXRyWlhrZ1lYTWdRWFpoYVd4aFlteGxSR0YwWVZSNWNHVnpYU2twWEc0Z0lDQWdJQ0J5WlhSYmRtRnNJR0Z6SUVGMllXbHNZV0pzWlVSaGRHRlVlWEJsYzEwZ1BTQnJaWGs3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdjbVYwTzF4dUlDQjlMQ0I3ZlNrN1hHNWNibVY0Y0c5eWRDQjBlWEJsSUVGMllXbHNZV0pzWlVSaGRHRlVlWEJsY3lBOUlHdGxlVzltSUhSNWNHVnZaaUJCZG1GcGJHRmliR1ZOWlhSeWFXTnpPMXh1Wlhod2IzSjBJSFI1Y0dVZ1ZtVmpkRzl5VFdWMGNtbGpjeUE5SUd0bGVXOW1JSFI1Y0dWdlppQkJkbUZwYkdGaWJHVk5aWFJ5YVdOelcwUnBjM1JoYm1ObFRXVjBjbWxqYzFOMVltcGxZM1J6TGxabFkzUnZjbDA3WEc1bGVIQnZjblFnZEhsd1pTQlRkSEpwYm1kTlpYUnlhV056SUQwZ2EyVjViMllnZEhsd1pXOW1JRUYyWVdsc1lXSnNaVTFsZEhKcFkzTmJSR2x6ZEdGdVkyVk5aWFJ5YVdOelUzVmlhbVZqZEhNdVUzUnlhVzVuWFR0Y2JtVjRjRzl5ZENCMGVYQmxJRUpwZEVGeWNtRjVUV1YwY21samN5QTlJR3RsZVc5bUlIUjVjR1Z2WmlCQmRtRnBiR0ZpYkdWTlpYUnlhV056VzBScGMzUmhibU5sVFdWMGNtbGpjMU4xWW1wbFkzUnpMa0pwZEVGeWNtRjVYVHRjYm1WNGNHOXlkQ0IwZVhCbElFNTFiV0psY2sxbGRISnBZM01nUFNCclpYbHZaaUIwZVhCbGIyWWdRWFpoYVd4aFlteGxUV1YwY21samMxdEVhWE4wWVc1alpVMWxkSEpwWTNOVGRXSnFaV04wY3k1T2RXMWlaWEpkTzF4dVpYaHdiM0owSUhSNWNHVWdTVzUwUVhKeVlYbE5aWFJ5YVdOeklEMGdhMlY1YjJZZ2RIbHdaVzltSUVGMllXbHNZV0pzWlUxbGRISnBZM05iUkdsemRHRnVZMlZOWlhSeWFXTnpVM1ZpYW1WamRITXVTVzUwUVhKeVlYbGRPMXh1Wlhod2IzSjBJSFI1Y0dVZ1RuVnRZbVZ5UVhKeVlYbE5aWFJ5YVdOeklEMGdhMlY1YjJZZ2RIbHdaVzltSUVGMllXbHNZV0pzWlUxbGRISnBZM05iUkdsemRHRnVZMlZOWlhSeWFXTnpVM1ZpYW1WamRITXVUblZ0WW1WeVFYSnlZWGxkTzF4dVpYaHdiM0owSUhSNWNHVWdTMjV2ZDI1TlpYUnlhV056SUQwZ1UzUnlhVzVuVFdWMGNtbGpjeUI4SUVKcGRFRnljbUY1VFdWMGNtbGpjeUI4SUZabFkzUnZjazFsZEhKcFkzTWdmRnh1SUNCTmJVUnBjM1JoYm1ObFJuVnVZM1JwYjI1elRtRnRaWE1nZkNCT2RXMWlaWEpOWlhSeWFXTnpUbUZ0WlhNZ2ZDQkpiblJCY25KaGVVMWxkSEpwWTNOT1lXMWxjeUI4SUU1MWJXSmxja0Z5Y21GNVRXVjBjbWxqYzA1aGJXVnpPMXh1WEc1bGVIQnZjblFnZEhsd1pTQldZV3hwWkZSNWNHVnpJRDFjYmlBZ2V5QmtZWFJoT2lCemRISnBibWRiWFN3Z2JXVjBjbWxqT2lCVGRISnBibWROWlhSeWFXTnpJSHdnVFcxRWFYTjBZVzVqWlVaMWJtTjBhVzl1YzA1aGJXVnpJSDBnZkZ4dUlDQjdJR1JoZEdFNklGWmxZM1J2Y2x0ZExDQnRaWFJ5YVdNNklGWmxZM1J2Y2sxbGRISnBZM01nZlNCOFhHNGdJSHNnWkdGMFlUb2dRbWwwUVhKeVlYbGJYU3dnYldWMGNtbGpPaUJDYVhSQmNuSmhlVTFsZEhKcFkzTWdmU0I4WEc0Z0lIc2daR0YwWVRvZ2JuVnRZbVZ5VzEwc0lHMWxkSEpwWXpvZ1RuVnRZbVZ5VFdWMGNtbGpjMDVoYldWeklIMDdYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJwYzFOMGNtbHVaMDFsZEhKcFl5aHVZVzFsT2lCTGJtOTNiazFsZEhKcFkzTXBJSHRjYmlBZ2NtVjBkWEp1SUUxbGRISnBZMVJ2UkdGMFlWUjVjR1ZiYm1GdFpWMGdQVDBnSjFOMGNtbHVaeWM3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnBjMEpwZEVGeWNtRjVUV1YwY21saktHNWhiV1U2SUV0dWIzZHVUV1YwY21samN5a2dlMXh1SUNCeVpYUjFjbTRnVFdWMGNtbGpWRzlFWVhSaFZIbHdaVnR1WVcxbFhTQTlQU0FuUW1sMFFYSnlZWGtuTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdhWE5XWldOMGIzSk5aWFJ5YVdNb2JtRnRaVG9nUzI1dmQyNU5aWFJ5YVdOektTQjdYRzRnSUhKbGRIVnliaUJOWlhSeWFXTlViMFJoZEdGVWVYQmxXMjVoYldWZElEMDlJQ2RXWldOMGIzSW5PMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2FYTk5ZV055YjAxdmJHVmpkV3hsVFdWMGNtbGpLRzVoYldVNklFdHViM2R1VFdWMGNtbGpjeWtnZTF4dUlDQnlaWFIxY200Z1RXVjBjbWxqVkc5RVlYUmhWSGx3WlZ0dVlXMWxYU0E5UFNCRWFYTjBZVzVqWlUxbGRISnBZM05UZFdKcVpXTjBjeTVOWVdOeWIwMXZiR1ZqZFd4bExuUnZVM1J5YVc1bktDazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGMwNTFiV1Z5YVdOTlpYUnlhV01vYm1GdFpUb2dTMjV2ZDI1TlpYUnlhV056S1NCN1hHNGdJSEpsZEhWeWJpQk5aWFJ5YVdOVWIwUmhkR0ZVZVhCbFcyNWhiV1ZkSUQwOUlFUnBjM1JoYm1ObFRXVjBjbWxqYzFOMVltcGxZM1J6TGs1MWJXSmxjaTUwYjFOMGNtbHVaeWdwTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdhWE5PZFcxaVpYSkJjbkpoZVUxbGRISnBZeWh1WVcxbE9pQkxibTkzYmsxbGRISnBZM01wSUh0Y2JpQWdjbVYwZFhKdUlFMWxkSEpwWTFSdlJHRjBZVlI1Y0dWYmJtRnRaVjBnUFQwZ1JHbHpkR0Z1WTJWTlpYUnlhV056VTNWaWFtVmpkSE11VG5WdFltVnlRWEp5WVhrdWRHOVRkSEpwYm1jb0tUdGNibjFjYmx4dUx5b3FJRTFoYm1oaGRIUmhiaUJrYVhOMFlXNWpaU0JpWlhSM1pXVnVJSFIzYnlCelpYRjFaVzVqWlhNZ0tHMWhkR05vSUMwZ01Dd2diV2x6YldGMFkyZ2dMU0F4S1NCdWIzSnRZV3hwZW1Wa0lHWnZjaUJzWlc1bmRHZ3VJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYldGdWFHRjBkR0Z1UkdsemRHRnVZMlVvY3pFNklITjBjbWx1Wnl3Z2N6STZJSE4wY21sdVp5azZJRzUxYldKbGNpQjdYRzRnSUdsbUlDaHpNUzVzWlc1bmRHZ2dJVDA5SUhNeUxteGxibWQwYUNrZ2UxeHVJQ0FnSUhKbGRIVnliaUF4TzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUd4bGRDQmthWE4wT2lCdWRXMWlaWElnUFNBd08xeHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXhPeUJwSUR3Z2N6RXViR1Z1WjNSb095QnBLeXNwWEc0Z0lDQWdJQ0JrYVhOMElDczlJSE14VzJsZElEMDlJSE15VzJsZElEOGdNQ0E2SURFN1hHNGdJQ0FnY21WMGRYSnVJR1JwYzNRZ0x5QnpNUzVzWlc1bmRHZzdYRzRnSUgxY2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR05oZEdWbmIzSnBZMkZzUkdsemRHRnVZMlVvY3pFNklITjBjbWx1Wnl3Z2N6STZJSE4wY21sdVp5azZJRzUxYldKbGNpQjdYRzRnSUhKbGRIVnliaUJ6TVNBOVBUMGdjeklnUHlBd0lEb2dNVHRjYm4xY2JseHVMeW9xSUZWdWFXWnBaV1FnWTJ4aGMzTWdhVzF3YkdWdFpXNTBhVzVuSUdScFptWmxjbVZ1ZENCemRISnBibWNnYldWaGMzVnlaWE11SUNvdlhHNWxlSEJ2Y25RZ1kyeGhjM01nVFdWaGMzVnlaU0I3WEc0Z0lIQnliM1JsWTNSbFpDQnRaWFJvYjJRNklFdHViM2R1VFdWMGNtbGpjenRjYmlBZ2NISnZkR1ZqZEdWa0lHUmhkR0ZVZVhCbE9pQkJkbUZwYkdGaWJHVkVZWFJoVkhsd1pYTTdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFTnlaV0YwWlhNZ1lXNGdhVzV6ZEdGdVkyVWdiMllnVFdWaGMzVnlaU0IzYVhSb0lDNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUcxbGRHaHZaQ0JOWlhSb2IyUWdkRzhnWTJGc1kzVnNZWFJsSUdScGMzUmhibU5sSUdKbGRIZGxaVzRnYzNSeWFXNW5jeTVjYmlBZ0lDb2dRRzFsYldKbGNtOW1JRTFsWVhOMWNtVnlYRzRnSUNBcUwxeHVJQ0JqYjI1emRISjFZM1J2Y2lodFpYUm9iMlE2SUV0dWIzZHVUV1YwY21samN5a2dlMXh1SUNBZ0lIUm9hWE11YldWMGFHOWtJRDBnYldWMGFHOWtPMXh1SUNBZ0lIUm9hWE11WkdGMFlWUjVjR1VnUFNCTlpYUnlhV05VYjBSaGRHRlVlWEJsVzIxbGRHaHZaRjBnWVhNZ1FYWmhhV3hoWW14bFJHRjBZVlI1Y0dWek8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsZEhWeWJuTWdkSEoxWlNCcFppQjBhR1VnYldWMGNtbGpJRzVsWldSeklHRnlaM1Z0Wlc1MGN5QjBieUJpWlNCallXeGpkV3hoZEdWa0xseHVJQ0FnS2lCQWNHRnlZVzBnZTB0dWIzZHVUV1YwY21samMzMGdiV1YwYUc5a0lFMWxkSEpwWXlCMGJ5QmphR1ZqYXlCcFppQnBkQ0J1WldWa2N5QmhjbWQxYldWdWRITXVYRzRnSUNBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OUlGUnlkV1VnYVdZZ2RHaGxJRzFsZEhKcFl5QnVaV1ZrY3lCaGNtZDFiV1Z1ZEhNdVhHNGdJQ0FxSUVCdFpXMWlaWEp2WmlCTlpXRnpkWEpsWEc0Z0lDQXFMMXh1SUNCd2RXSnNhV01nYldWMGNtbGpUbVZsWkhOQmNtZHpLRzFsZEdodlpEb2dTMjV2ZDI1TlpYUnlhV056S1RvZ1ltOXZiR1ZoYmlCN1hHNGdJQ0FnY21WMGRYSnVJR2x6VFdGamNtOU5iMnhsWTNWc1pVMWxkSEpwWXlodFpYUm9iMlFwSUh4OElHbHpUblZ0WlhKcFkwMWxkSEpwWXlodFpYUm9iMlFwSUh4OElHbHpUblZ0WW1WeVFYSnlZWGxOWlhSeWFXTW9iV1YwYUc5a0tUdGNiaUFnZlZ4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdWN5QmpkWE4wYjIwZ2MzUnlhVzVuSUdScGMzUmhibU5sSUdaMWJtTjBhVzl1SUhOd1pXTnBabWxsWkM1Y2JpQWdJQ29nUUhCaGNtRnRJSHR2Y0hSemZTQnZjSFJ6SUU5d2RHbHZibk1nWm05eUlIUm9aU0J0WldGemRYSmxMaUIxYzJWa0lHWnZjaUJ0WVdOeWIyMXZiR1ZqZFd4bElHUnBjM1JoYm1ObGMxeHVJQ0FnS2lCQWNtVjBkWEp1SUh0RWFYTjBZVzVqWlUxbGRISnBZMzBnUTJGc2JHSmhZMnNnYjJZZ2RHaGxJRzFsWVhOMWNtVWdZMmh2YzJWdUxseHVJQ0FnS2lCQWJXVnRZbVZ5YjJZZ1RXVmhjM1Z5WlhKY2JpQWdJQ292WEc0Z0lIQjFZbXhwWXlCblpYUk5aV0Z6ZFhKbEtHOXdkSE0vT2lCaGJua3BPaUJFYVhOMFlXNWpaVTFsZEhKcFl5QjdYRzRnSUNBZ1kyOXVjM1FnWkdsamREb2dleUJiYTJWNU9pQnpkSEpwYm1kZE9seHVJQ0FnSUNBZ2UxdHJaWGt5T2lCemRISnBibWRkT2lCRWFYTjBZVzVqWlUxbGRISnBZeUI4SUNnb2IzQjBjem9nWVc1NUtTQTlQaUJFYVhOMFlXNWpaVTFsZEhKcFl5bDlYRzRnSUNBZ2ZTQTlJRUYyWVdsc1lXSnNaVTFsZEhKcFkzTTdYRzRnSUNBZ2FXWWdLQ0ZrYVdOMExtaGhjMDkzYmxCeWIzQmxjblI1S0hSb2FYTXVaR0YwWVZSNWNHVXBJSHg4SUNGa2FXTjBXM1JvYVhNdVpHRjBZVlI1Y0dWZExtaGhjMDkzYmxCeWIzQmxjblI1S0hSb2FYTXViV1YwYUc5a0tTbGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1ZXNXJibTkzYmlCdFpXRnpkWEpsSUNSN2RHaHBjeTV0WlhSb2IyUjlJR1p2Y2lCa1lYUmhJSFI1Y0dVZ0pIdDBhR2x6TG1SaGRHRlVlWEJsZldBcE8xeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtMWxkSEpwWTA1bFpXUnpRWEpuY3loMGFHbHpMbTFsZEdodlpDa2dQMXh1SUNBZ0lDQWdLR1JwWTNSYmRHaHBjeTVrWVhSaFZIbHdaVjFiZEdocGN5NXRaWFJvYjJSZElHRnpJQ2dvYjNCMGN6b2dZVzU1S1NBOVBpQkVhWE4wWVc1alpVMWxkSEpwWXlrcEtHOXdkSE1wSURwY2JpQWdJQ0FnSUdScFkzUmJkR2hwY3k1a1lYUmhWSGx3WlYxYmRHaHBjeTV0WlhSb2IyUmRJR0Z6SUVScGMzUmhibU5sVFdWMGNtbGpPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGRIVnlibk1nWTNWemRHOXRJSE4wY21sdVp5QmthWE4wWVc1alpTQmllU0IwYUdVZ1oybDJaVzRnWkdGMFlTQjBlWEJsTGx4dUlDQWdLaUJBY0dGeVlXMGdlMEYyWVdsc1lXSnNaVVJoZEdGVWVYQmxjMzBnWkdGMFlWUjVjR1VnVFdWMGNtbGpKM01nWkdGMFlTQjBlWEJsWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM04wY21sdVoxdGRmU0JOWlhSeWFXTWdibUZ0WlhNZ2QyaHBZMmdnWlhod1pXTjBjeUIwYUdVZ1oybDJaVzRnWkdGMFlTQjBlWEJsWEc0Z0lDQXFJRUJ0WlcxaVpYSnZaaUJOWldGemRYSmxjbHh1SUNBZ0tpOWNiaUFnY0hWaWJHbGpJSE4wWVhScFl5Qm5aWFJOWlhSeWFXTkNlVVJoZEdGVWVYQmxLR1JoZEdGVWVYQmxPaUJCZG1GcGJHRmliR1ZFWVhSaFZIbHdaWE1wT2lCemRISnBibWRiWFNCN1hHNGdJQ0FnY21WMGRYSnVJRTlpYW1WamRDNXJaWGx6S0VGMllXbHNZV0pzWlUxbGRISnBZM05iWkdGMFlWUjVjR1ZkS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJTWlhSMWNtNXpJRzFsZEhKcFl5QnVZVzFsY3lCaGRtRnBiR0ZpYkdVdVhHNGdJQ0FxSUVCdFpXMWlaWEp2WmlCTlpXRnpkWEpsY2x4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUdkbGRDQmhkbUZwYkdGaWJHVk5aV0Z6ZFhKbGN5Z3BPaUJ6ZEhKcGJtZGJYU0I3WEc0Z0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1clpYbHpLRUYyWVdsc1lXSnNaVTFsZEhKcFkzTXBPMXh1SUNCOVhHNTlYRzRpWFgwPSIsImltcG9ydCB7IERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgY2xhc3MgRGlzdGFuY2VNYXRyaXhTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3Rvcih1c2VDb25jdXJyZW50V29ya2VycyA9IHRydWUsIHRlcm1pbmF0ZU9uQ29tcGxldGUgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHRocmVhZENvdW50ID0gbmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3k7XG4gICAgICAgIHRoaXMuX3dvcmtlckNvdW50ID0gdXNlQ29uY3VycmVudFdvcmtlcnMgPyBNYXRoLm1heCh0aHJlYWRDb3VudCAtIDIsIDEpIDogMTtcbiAgICAgICAgdGhpcy5fd29ya2VycyA9IG5ldyBBcnJheSh0aGlzLl93b3JrZXJDb3VudCkuZmlsbChudWxsKVxuICAgICAgICAgICAgLm1hcCgoKSA9PiBuZXcgV29ya2VyKG5ldyBVUkwoJy4vZGlzdGFuY2UtbWF0cml4LXdvcmtlcicsIGltcG9ydC5tZXRhLnVybCkpKTtcbiAgICAgICAgdGhpcy5fdGVybWluYXRlT25Db21wbGV0ZSA9IHRlcm1pbmF0ZU9uQ29tcGxldGU7XG4gICAgfVxuICAgIDtcbiAgICBhc3luYyBjYWxjKHZhbHVlcywgZm5OYW1lLCBub3JtYWxpemUgPSB0cnVlLCBvcHRzKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNhbGNNdWx0aShbdmFsdWVzXSwgW2ZuTmFtZV0sIG5vcm1hbGl6ZSwgW29wdHMgPz8ge31dLCBbMV0sIERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzLk1BTkhBVFRBTik7XG4gICAgfVxuICAgIGFzeW5jIGNhbGNNdWx0aSh2YWx1ZXMsIGZuTmFtZXMsIG5vcm1hbGl6ZSA9IHRydWUsIG9wdHMgPSBbe31dLCB3ZWlnaHRzID0gWzFdLCBhZ2dyZWdhdGlvbk1ldGhvZCA9IERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzLk1BTkhBVFRBTikge1xuICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA8IDEpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhbHVlcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGFycmF5Jyk7XG4gICAgICAgIGlmIChmbk5hbWVzLmxlbmd0aCAhPT0gdmFsdWVzLmxlbmd0aCB8fCBvcHRzLmxlbmd0aCAhPT0gdmFsdWVzLmxlbmd0aCB8fCB3ZWlnaHRzLmxlbmd0aCAhPT0gdmFsdWVzLmxlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndmFsdWVzLCBmbk5hbWVzLCB3ZWlnaHRzIGFuZCBvcHRzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGgnKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVuID0gdmFsdWVzWzBdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IG5ldyBBcnJheSh0aGlzLl93b3JrZXJDb3VudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdG90YWxMZW5ndGggPSBsZW4gKiAobGVuIC0gMSkgLyAyOyAvLyBzaXplIG9mIHJlZHVjZWQgZGlzdGFuY2UgbWF0cml4XG4gICAgICAgICAgICAgICAgdGhpcy5fd29ya2VyQ291bnQgPSBNYXRoLm1pbih0aGlzLl93b3JrZXJDb3VudCwgdG90YWxMZW5ndGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rU2l6ZSA9IHRvdGFsTGVuZ3RoIC8gdGhpcy5fd29ya2VyQ291bnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VNYXRyaXggPSBuZXcgRmxvYXQzMkFycmF5KHRvdGFsTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBsZXQgZW5kUm93ID0gMDtcbiAgICAgICAgICAgICAgICBsZXQgZW5kQ29sID0gMTtcbiAgICAgICAgICAgICAgICAvLyBtaW5tYXggZm9yIG5vcm1hbGl6YXRpb25cbiAgICAgICAgICAgICAgICBsZXQgbG1pbiA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IGxtYXggPSBOdW1iZXIuTUlOX1ZBTFVFO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fd29ya2VyQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IE1hdGguZmxvb3IoaSAqIGNodW5rU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IChpID09PSB0aGlzLl93b3JrZXJDb3VudCAtIDEpID8gdG90YWxMZW5ndGggOiBNYXRoLmZsb29yKChpICsgMSkgKiBjaHVua1NpemUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydFJvdyA9IGVuZFJvdztcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRDb2wgPSBlbmRDb2w7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9PSB0aGlzLl93b3JrZXJDb3VudCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXNlIGZvcm11bGFzIG1hcCB0aGUgbGluZWFyIGluZGV4IHRvIHRoZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeCBpbmRpY2VzXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRSb3cgPSBsZW4gLSAyIC0gTWF0aC5mbG9vcihNYXRoLnNxcnQoLTggKiBlbmQgKyA0ICogbGVuICogKGxlbiAtIDEpIC0gNykgLyAyIC0gMC41KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZENvbCA9IGVuZCAtIGxlbiAqIGVuZFJvdyArIE1hdGguZmxvb3IoKGVuZFJvdyArIDEpICogKGVuZFJvdyArIDIpIC8gMik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd29ya2Vyc1tpXS5wb3N0TWVzc2FnZSh7IHZhbHVlcywgZm5OYW1lcywgc3RhcnRSb3csIHN0YXJ0Q29sLCBjaHVuY2tTaXplOiBlbmQgLSBzdGFydCwgb3B0cywgd2VpZ2h0cywgYWdncmVnYXRpb25NZXRob2QgfSk7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VzW2ldID0gbmV3IFByb21pc2UoKHJlc29sdmVXb3JrZXIsIHJlamVjdFdvcmtlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd29ya2Vyc1tpXS5vbm1lc3NhZ2UgPSAoeyBkYXRhOiB7IGVycm9yLCBkaXN0YW5jZU1hdHJpeERhdGEsIG1pbiwgbWF4IH0gfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rlcm1pbmF0ZU9uQ29tcGxldGUgJiYgc2V0VGltZW91dCgoKSA9PiB0aGlzLl93b3JrZXJzW2ldLnRlcm1pbmF0ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0V29ya2VyKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlTWF0cml4LnNldChkaXN0YW5jZU1hdHJpeERhdGEsIHN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pbiA8IGxtaW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsbWluID0gbWluO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF4ID4gbG1heClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxtYXggPSBtYXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVXb3JrZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemUpXG4gICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlTWF0cml4LmZvckVhY2goKHZhbHVlLCBpbmRleCkgPT4geyBkaXN0YW5jZU1hdHJpeFtpbmRleF0gPSAodmFsdWUgLSBsbWluKSAvIChsbWF4IC0gbG1pbik7IH0pO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZGlzdGFuY2VNYXRyaXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0ZXJtaW5hdGUoKSB7XG4gICAgICAgIHRoaXMuX3dvcmtlcnMuZm9yRWFjaCgod29ya2VyKSA9PiB3b3JrZXIudGVybWluYXRlKCkpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpHbHpkR0Z1WTJVdGJXRjBjbWw0TFhObGNuWnBZMlV1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SmthWE4wWVc1alpTMXRZWFJ5YVhndGMyVnlkbWxqWlM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkRRU3hQUVVGUExFVkJRVFJDTERCQ1FVRXdRaXhGUVVGRExFMUJRVTBzVTBGQlV5eERRVUZETzBGQlJUbEZMRTFCUVUwc1QwRkJUeXh4UWtGQmNVSTdTVUZKT1VJc1dVRkJiVUlzYjBKQlFXOUNMRWRCUVVjc1NVRkJTU3hGUVVGRkxHMUNRVUZ0UWl4SFFVRkhMRWxCUVVrN1VVRkRlRVVzVFVGQlRTeFhRVUZYTEVkQlFVY3NVMEZCVXl4RFFVRkRMRzFDUVVGdFFpeERRVUZETzFGQlEyeEVMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzYjBKQlFXOUNMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNWMEZCVnl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUXpWRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NTVUZCU1N4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNN1lVRkRjRVFzUjBGQlJ5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrc1RVRkJUU3hEUVVGRExFbEJRVWtzUjBGQlJ5eERRVUZETERCQ1FVRXdRaXhGUVVGRkxFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJReTlGTEVsQlFVa3NRMEZCUXl4dlFrRkJiMElzUjBGQlJ5eHRRa0ZCYlVJc1EwRkJRenRKUVVOc1JDeERRVUZETzBsQlFVRXNRMEZCUXp0SlFVVkxMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQmMwSXNSVUZCUlN4TlFVRnZRaXhGUVVNMVJDeFRRVUZUTEVkQlFVY3NTVUZCU1N4RlFVRkZMRWxCUVhsQ08xRkJRek5ETEU5QlFVOHNUVUZCVFN4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hUUVVGVExFVkJRM1pFTEVOQlFVTXNTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNNRUpCUVRCQ0xFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdTVUZETjBRc1EwRkJRenRKUVVWTkxFdEJRVXNzUTBGQlF5eFRRVUZUTEVOQlEzQkNMRTFCUVhkQ0xFVkJRVVVzVDBGQmRVSXNSVUZEYWtRc1UwRkJVeXhIUVVGSExFbEJRVWtzUlVGQlJTeFBRVUUyUWl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVOdVJDeFZRVUZ2UWl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxHOUNRVUVyUXl3d1FrRkJNRUlzUTBGQlF5eFRRVUZUTzFGQlJUVkhMRWxCUVVrc1RVRkJUU3hEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETzFsQlEyNUNMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zZDBOQlFYZERMRU5CUVVNc1EwRkJRenRSUVVNMVJDeEpRVUZKTEU5QlFVOHNRMEZCUXl4TlFVRk5MRXRCUVVzc1RVRkJUU3hEUVVGRExFMUJRVTBzU1VGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4TFFVRkxMRTFCUVUwc1EwRkJReXhOUVVGTkxFbEJRVWtzVDBGQlR5eERRVUZETEUxQlFVMHNTMEZCU3l4TlFVRk5MRU5CUVVNc1RVRkJUVHRaUVVOMlJ5eE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRFpFUVVFMlJDeERRVUZETEVOQlFVTTdVVUZEYWtZc1QwRkJUeXhKUVVGSkxFOUJRVThzUTBGQlF5eExRVUZMTEVWQlFVVXNUMEZCVHl4RlFVRkZMRTFCUVUwc1JVRkJSU3hGUVVGRk8xbEJRek5ETEVsQlFVazdaMEpCUTBZc1RVRkJUU3hIUVVGSExFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRenRuUWtGRE4wSXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hMUVVGTExFTkJRV2RDTEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJRenRuUWtGRE4wUXNUVUZCVFN4WFFVRlhMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExHdERRVUZyUXp0blFrRkRNMFVzU1VGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVWQlFVVXNWMEZCVnl4RFFVRkRMRU5CUVVNN1owSkJRemRFTEUxQlFVMHNVMEZCVXl4SFFVRkhMRmRCUVZjc1IwRkJSeXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETzJkQ1FVTnNSQ3hOUVVGTkxHTkJRV01zUjBGQlJ5eEpRVUZKTEZsQlFWa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRuUWtGRGNrUXNTVUZCU1N4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRE8yZENRVU5tTEVsQlFVa3NUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJRenRuUWtGRFppd3lRa0ZCTWtJN1owSkJRek5DTEVsQlFVa3NTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJRenRuUWtGRFlpeEpRVUZKTEVsQlFVa3NSMEZCUnl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRE8yZENRVU0xUWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdHZRa0ZETVVNc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRWRCUVVjc1UwRkJVeXhEUVVGRExFTkJRVU03YjBKQlEzaERMRTFCUVUwc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF5eExRVUZMTEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhUUVVGVExFTkJRVU1zUTBGQlF6dHZRa0ZETVVZc1RVRkJUU3hSUVVGUkxFZEJRVWNzVFVGQlRTeERRVUZETzI5Q1FVTjRRaXhOUVVGTkxGRkJRVkVzUjBGQlJ5eE5RVUZOTEVOQlFVTTdiMEpCUTNoQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1EwRkJReXhGUVVGRk8zZENRVU12UWl3MlJVRkJOa1U3ZDBKQlF6ZEZMRTFCUVUwc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNN2QwSkJRM1pHTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhIUVVGSExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzNGQ1FVTXpSVHR2UWtGRFJDeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGZEJRVmNzUTBGRE1VSXNSVUZCUXl4TlFVRk5MRVZCUVVVc1QwRkJUeXhGUVVGRkxGRkJRVkVzUlVGQlJTeFJRVUZSTEVWQlFVVXNWVUZCVlN4RlFVRkZMRWRCUVVjc1IwRkJSeXhMUVVGTExFVkJRVVVzU1VGQlNTeEZRVUZGTEU5QlFVOHNSVUZCUlN4cFFrRkJhVUlzUlVGQlF5eERRVU5xUnl4RFFVRkRPMjlDUVVOR0xGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRTlCUVU4c1EwRkJReXhEUVVGRExHRkJRV0VzUlVGQlJTeFpRVUZaTEVWQlFVVXNSVUZCUlR0M1FrRkRlRVFzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVExFZEJRVWNzUTBGQlF5eEZRVUZETEVsQlFVa3NSVUZCUlN4RlFVRkRMRXRCUVVzc1JVRkJSU3hyUWtGQmEwSXNSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhGUVVGRExFVkJRVU1zUlVGQlVTeEZRVUZGT3pSQ1FVTnVSaXhKUVVGSkxFTkJRVU1zYjBKQlFXOUNMRWxCUVVrc1ZVRkJWU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eEZRVUZGTEVOQlFVTXNRMEZCUXpzMFFrRkROVVVzU1VGQlNTeExRVUZMTEVWQlFVVTdaME5CUTFRc1dVRkJXU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZET3paQ1FVTnlRanRwUTBGQlRUdG5RMEZEVEN4alFVRmpMRU5CUVVNc1IwRkJSeXhEUVVGRExHdENRVUZyUWl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8yZERRVU01UXl4SlFVRkpMRWRCUVVjc1IwRkJSeXhKUVVGSk8yOURRVU5hTEVsQlFVa3NSMEZCUnl4SFFVRkhMRU5CUVVNN1owTkJRMklzU1VGQlNTeEhRVUZITEVkQlFVY3NTVUZCU1R0dlEwRkRXaXhKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETzJkRFFVTmlMR0ZCUVdFc1JVRkJSU3hEUVVGRE96WkNRVU5xUWp0M1FrRkRTQ3hEUVVGRExFTkJRVU03YjBKQlEwb3NRMEZCUXl4RFFVRkRMRU5CUVVNN2FVSkJRMG83WjBKQlEwUXNUVUZCVFN4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzJkQ1FVTTFRaXhKUVVGSkxGTkJRVk03YjBKQlExZ3NZMEZCWXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeExRVUZMTEVWQlFVVXNSVUZCUlN4SFFVRkhMR05CUVdNc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU40Unl4UFFVRlBMRU5CUVVNc1kwRkJZeXhEUVVGRExFTkJRVU03WVVGRGVrSTdXVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRuUWtGRFZpeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRXRHRSUVVOSUxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEwd3NRMEZCUXp0SlFVVk5MRk5CUVZNN1VVRkRaQ3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1NVRkRlRVFzUTBGQlF6dERRVU5LSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUh0TGJtOTNiazFsZEhKcFkzTjlJR1p5YjIwZ0p5NHVMM1I1Y0dWa0xXMWxkSEpwWTNNbk8xeHVhVzF3YjNKMElIdEVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a0xDQkVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a2MzMGdabkp2YlNBbkxpOTBlWEJsY3ljN1hHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCRWFYTjBZVzVqWlUxaGRISnBlRk5sY25acFkyVWdlMXh1SUNBZ0lIQnlhWFpoZEdVZ1gzZHZjbXRsY25NNklGZHZjbXRsY2x0ZE8xeHVJQ0FnSUhCeWFYWmhkR1VnWDNkdmNtdGxja052ZFc1ME9pQnVkVzFpWlhJN1hHNGdJQ0FnY0hKcGRtRjBaU0JmZEdWeWJXbHVZWFJsVDI1RGIyMXdiR1YwWlRvZ1ltOXZiR1ZoYmp0Y2JpQWdJQ0J3ZFdKc2FXTWdZMjl1YzNSeWRXTjBiM0lvZFhObFEyOXVZM1Z5Y21WdWRGZHZjbXRsY25NZ1BTQjBjblZsTENCMFpYSnRhVzVoZEdWUGJrTnZiWEJzWlhSbElEMGdkSEoxWlNrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnZEdoeVpXRmtRMjkxYm5RZ1BTQnVZWFpwWjJGMGIzSXVhR0Z5WkhkaGNtVkRiMjVqZFhKeVpXNWplVHRjYmlBZ0lDQWdJSFJvYVhNdVgzZHZjbXRsY2tOdmRXNTBJRDBnZFhObFEyOXVZM1Z5Y21WdWRGZHZjbXRsY25NZ1B5Qk5ZWFJvTG0xaGVDaDBhSEpsWVdSRGIzVnVkQ0F0SURJc0lERXBJRG9nTVR0Y2JpQWdJQ0FnSUhSb2FYTXVYM2R2Y210bGNuTWdQU0J1WlhjZ1FYSnlZWGtvZEdocGN5NWZkMjl5YTJWeVEyOTFiblFwTG1acGJHd29iblZzYkNsY2JpQWdJQ0FnSUNBZ0xtMWhjQ2dvS1NBOVBpQnVaWGNnVjI5eWEyVnlLRzVsZHlCVlVrd29KeTR2WkdsemRHRnVZMlV0YldGMGNtbDRMWGR2Y210bGNpY3NJR2x0Y0c5eWRDNXRaWFJoTG5WeWJDa3BLVHRjYmlBZ0lDQWdJSFJvYVhNdVgzUmxjbTFwYm1GMFpVOXVRMjl0Y0d4bGRHVWdQU0IwWlhKdGFXNWhkR1ZQYmtOdmJYQnNaWFJsTzF4dUlDQWdJSDA3WEc1Y2JpQWdJQ0J3ZFdKc2FXTWdZWE41Ym1NZ1kyRnNZeWgyWVd4MVpYTTZJRUZ5Y21GNVRHbHJaVHhoYm5rK0xDQm1iazVoYldVNklFdHViM2R1VFdWMGNtbGpjeXhjYmlBZ0lDQWdJRzV2Y20xaGJHbDZaU0E5SUhSeWRXVXNJRzl3ZEhNL09pQjdXMTg2SUhOMGNtbHVaMTA2SUdGdWVYMHBPaUJRY205dGFYTmxQRVpzYjJGME16SkJjbkpoZVQ0Z2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdGM1lXbDBJSFJvYVhNdVkyRnNZMDExYkhScEtGdDJZV3gxWlhOZExDQmJabTVPWVcxbFhTd2dibTl5YldGc2FYcGxMRnh1SUNBZ0lDQWdJQ0JiYjNCMGN5QS9QeUI3ZlYwc0lGc3hYU3dnUkdsemRHRnVZMlZCWjJkeVpXZGhkR2x2YmsxbGRHaHZaSE11VFVGT1NFRlVWRUZPS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J3ZFdKc2FXTWdZWE41Ym1NZ1kyRnNZMDExYkhScEtGeHVJQ0FnSUNBZ2RtRnNkV1Z6T2lCQmNuSmhlVXhwYTJVOFlXNTVQbHRkTENCbWJrNWhiV1Z6T2lCTGJtOTNiazFsZEhKcFkzTmJYU3hjYmlBZ0lDQWdJRzV2Y20xaGJHbDZaU0E5SUhSeWRXVXNJRzl3ZEhNNklIdGJYem9nYzNSeWFXNW5YVG9nWVc1NWZWdGRJRDBnVzN0OVhTeGNiaUFnSUNBZ0lIZGxhV2RvZEhNNklHNTFiV0psY2x0ZElEMGdXekZkTENCaFoyZHlaV2RoZEdsdmJrMWxkR2h2WkRvZ1JHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJrMWxkR2h2WkNBOUlFUnBjM1JoYm1ObFFXZG5jbVZuWVhScGIyNU5aWFJvYjJSekxrMUJUa2hCVkZSQlRseHVJQ0FnSUNrNklGQnliMjFwYzJVOFJteHZZWFF6TWtGeWNtRjVQaUI3WEc0Z0lDQWdJQ0JwWmlBb2RtRnNkV1Z6TG14bGJtZDBhQ0E4SURFcFhHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnbmRtRnNkV1Z6SUcxMWMzUWdZMjl1ZEdGcGJpQmhkQ0JzWldGemRDQnZibVVnWVhKeVlYa25LVHRjYmlBZ0lDQWdJR2xtSUNobWJrNWhiV1Z6TG14bGJtZDBhQ0FoUFQwZ2RtRnNkV1Z6TG14bGJtZDBhQ0I4ZkNCdmNIUnpMbXhsYm1kMGFDQWhQVDBnZG1Gc2RXVnpMbXhsYm1kMGFDQjhmQ0IzWldsbmFIUnpMbXhsYm1kMGFDQWhQVDBnZG1Gc2RXVnpMbXhsYm1kMGFDbGNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZDJZV3gxWlhNc0lHWnVUbUZ0WlhNc0lIZGxhV2RvZEhNZ1lXNWtJRzl3ZEhNZ2JYVnpkQ0JvWVhabElIUm9aU0J6WVcxbElHeGxibWQwYUNjcE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtHRnplVzVqSUNoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCc1pXNGdQU0IyWVd4MVpYTmJNRjB1YkdWdVozUm9PMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSEJ5YjIxcGMyVnpJRDBnYm1WM0lFRnljbUY1UEZCeWIyMXBjMlU4ZG05cFpENCtLSFJvYVhNdVgzZHZjbXRsY2tOdmRXNTBLVHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0IwYjNSaGJFeGxibWQwYUNBOUlHeGxiaUFxSUNoc1pXNGdMU0F4S1NBdklESTdJQzh2SUhOcGVtVWdiMllnY21Wa2RXTmxaQ0JrYVhOMFlXNWpaU0J0WVhSeWFYaGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxsOTNiM0pyWlhKRGIzVnVkQ0E5SUUxaGRHZ3ViV2x1S0hSb2FYTXVYM2R2Y210bGNrTnZkVzUwTENCMGIzUmhiRXhsYm1kMGFDazdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdZMmgxYm10VGFYcGxJRDBnZEc5MFlXeE1aVzVuZEdnZ0x5QjBhR2x6TGw5M2IzSnJaWEpEYjNWdWREdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmthWE4wWVc1alpVMWhkSEpwZUNBOUlHNWxkeUJHYkc5aGRETXlRWEp5WVhrb2RHOTBZV3hNWlc1bmRHZ3BPMXh1SUNBZ0lDQWdJQ0FnSUd4bGRDQmxibVJTYjNjZ1BTQXdPMXh1SUNBZ0lDQWdJQ0FnSUd4bGRDQmxibVJEYjJ3Z1BTQXhPMXh1SUNBZ0lDQWdJQ0FnSUM4dklHMXBibTFoZUNCbWIzSWdibTl5YldGc2FYcGhkR2x2Ymx4dUlDQWdJQ0FnSUNBZ0lHeGxkQ0JzYldsdUlEMGdNRHRjYmlBZ0lDQWdJQ0FnSUNCc1pYUWdiRzFoZUNBOUlFNTFiV0psY2k1TlNVNWZWa0ZNVlVVN1hHNGdJQ0FnSUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0IwYUdsekxsOTNiM0pyWlhKRGIzVnVkRHNnYVNzcktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J6ZEdGeWRDQTlJRTFoZEdndVpteHZiM0lvYVNBcUlHTm9kVzVyVTJsNlpTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JsYm1RZ1BTQW9hU0E5UFQwZ2RHaHBjeTVmZDI5eWEyVnlRMjkxYm5RZ0xTQXhLU0EvSUhSdmRHRnNUR1Z1WjNSb0lEb2dUV0YwYUM1bWJHOXZjaWdvYVNBcklERXBJQ29nWTJoMWJtdFRhWHBsS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElITjBZWEowVW05M0lEMGdaVzVrVW05M08xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjM1JoY25SRGIyd2dQU0JsYm1SRGIydzdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9hU0FoUFQwZ2RHaHBjeTVmZDI5eWEyVnlRMjkxYm5RZ0xTQXhLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SUZSb1pYTmxJR1p2Y20xMWJHRnpJRzFoY0NCMGFHVWdiR2x1WldGeUlHbHVaR1Y0SUhSdklIUm9aU0IxY0hCbGNpQjBjbWxoYm1kMWJHRnlJRzFoZEhKcGVDQnBibVJwWTJWelhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdWdVpGSnZkeUE5SUd4bGJpQXRJRElnTFNCTllYUm9MbVpzYjI5eUtFMWhkR2d1YzNGeWRDZ3RPQ0FxSUdWdVpDQXJJRFFnS2lCc1pXNGdLaUFvYkdWdUlDMGdNU2tnTFNBM0tTQXZJRElnTFNBd0xqVXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmxibVJEYjJ3Z1BTQmxibVFnTFNCc1pXNGdLaUJsYm1SU2IzY2dLeUJOWVhSb0xtWnNiMjl5S0NobGJtUlNiM2NnS3lBeEtTQXFJQ2hsYm1SU2IzY2dLeUF5S1NBdklESXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWZkMjl5YTJWeWMxdHBYUzV3YjNOMFRXVnpjMkZuWlNoY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZTNaaGJIVmxjeXdnWm01T1lXMWxjeXdnYzNSaGNuUlNiM2NzSUhOMFlYSjBRMjlzTENCamFIVnVZMnRUYVhwbE9pQmxibVFnTFNCemRHRnlkQ3dnYjNCMGN5d2dkMlZwWjJoMGN5d2dZV2RuY21WbllYUnBiMjVOWlhSb2IyUjlYRzRnSUNBZ0lDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnY0hKdmJXbHpaWE5iYVYwZ1BTQnVaWGNnVUhKdmJXbHpaU2dvY21WemIyeDJaVmR2Y210bGNpd2djbVZxWldOMFYyOXlhMlZ5S1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WDNkdmNtdGxjbk5iYVYwdWIyNXRaWE56WVdkbElEMGdLSHRrWVhSaE9pQjdaWEp5YjNJc0lHUnBjM1JoYm1ObFRXRjBjbWw0UkdGMFlTd2diV2x1TENCdFlYaDlmU2s2SUhadmFXUWdQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVYM1JsY20xcGJtRjBaVTl1UTI5dGNHeGxkR1VnSmlZZ2MyVjBWR2x0Wlc5MWRDZ29LU0E5UGlCMGFHbHpMbDkzYjNKclpYSnpXMmxkTG5SbGNtMXBibUYwWlNncEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWlhKeWIzSXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGFtVmpkRmR2Y210bGNpaGxjbkp2Y2lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUnBjM1JoYm1ObFRXRjBjbWw0TG5ObGRDaGthWE4wWVc1alpVMWhkSEpwZUVSaGRHRXNJSE4wWVhKMEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNodGFXNGdQQ0JzYldsdUtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzYldsdUlEMGdiV2x1TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLRzFoZUNBK0lHeHRZWGdwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeHRZWGdnUFNCdFlYZzdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhOdmJIWmxWMjl5YTJWeUtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lHRjNZV2wwSUZCeWIyMXBjMlV1WVd4c0tIQnliMjFwYzJWektUdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2JtOXliV0ZzYVhwbEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdsemRHRnVZMlZOWVhSeWFYZ3VabTl5UldGamFDZ29kbUZzZFdVc0lHbHVaR1Y0S1NBOVBpQjdJR1JwYzNSaGJtTmxUV0YwY21sNFcybHVaR1Y0WFNBOUlDaDJZV3gxWlNBdElHeHRhVzRwSUM4Z0tHeHRZWGdnTFNCc2JXbHVLVHNnZlNrN1hHNGdJQ0FnSUNBZ0lDQWdjbVZ6YjJ4MlpTaGthWE4wWVc1alpVMWhkSEpwZUNrN1hHNGdJQ0FnSUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpXcGxZM1FvWlNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMHBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIQjFZbXhwWXlCMFpYSnRhVzVoZEdVb0tUb2dkbTlwWkNCN1hHNGdJQ0FnSUNCMGFHbHpMbDkzYjNKclpYSnpMbVp2Y2tWaFkyZ29LSGR2Y210bGNpa2dQVDRnZDI5eWEyVnlMblJsY20xcGJtRjBaU2dwS1R0Y2JpQWdJQ0I5WEc1OVhHNGlYWDA9IiwiLyoqXG4gKiBAbGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbi8qKlxuICogU2ltcGxlIHJhbmRvbSBpbnRlZ2VyIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0YXVSYW5kSW50KG4sIHJhbmRvbSkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKHJhbmRvbSgpICogbik7XG59XG4vKipcbiAqIFNpbXBsZSByYW5kb20gZmxvYXQgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhdVJhbmQocmFuZG9tKSB7XG4gICAgcmV0dXJuIHJhbmRvbSgpO1xufVxuLyoqXG4gKiBDb21wdXRlIHRoZSAoc3RhbmRhcmQgbDIpIG5vcm0gb2YgYSB2ZWN0b3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtKHZlYykge1xuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB2ZWMpXG4gICAgICAgIHJlc3VsdCArPSBpdGVtICoqIDI7XG4gICAgcmV0dXJuIE1hdGguc3FydChyZXN1bHQpO1xufVxuLyoqXG4gKiBDcmVhdGVzIGFuIGVtcHR5IGFycmF5IChmaWxsZWQgd2l0aCB1bmRlZmluZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eShuKSB7XG4gICAgY29uc3Qgb3V0cHV0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspXG4gICAgICAgIG91dHB1dC5wdXNoKHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmaWxsZWQgd2l0aCBpbmRleCB2YWx1ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlKG4pIHtcbiAgICByZXR1cm4gZW1wdHkobikubWFwKChfLCBpKSA9PiBpKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmaWxsZWQgd2l0aCBhIHNwZWNpZmljIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxsZWQobiwgdikge1xuICAgIHJldHVybiBlbXB0eShuKS5tYXAoKCkgPT4gdik7XG59XG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgZmlsbGVkIHdpdGggemVyb3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHplcm9zKG4pIHtcbiAgICByZXR1cm4gZmlsbGVkKG4sIDApO1xufVxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGZpbGxlZCB3aXRoIG9uZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uZXMobikge1xuICAgIHJldHVybiBmaWxsZWQobiwgMSk7XG59XG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgZnJvbSBhIHRvIGIsIG9mIGxlbmd0aCBsZW4sIGluY2x1c2l2ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGluZWFyKGEsIGIsIGxlbikge1xuICAgIHJldHVybiBlbXB0eShsZW4pLm1hcCgoXywgaSkgPT4ge1xuICAgICAgICByZXR1cm4gYSArIGkgKiAoKGIgLSBhKSAvIChsZW4gLSAxKSk7XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIHN1bSBvZiBhbiBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VtKGlucHV0KSB7XG4gICAgcmV0dXJuIGlucHV0LnJlZHVjZSgoc3VtLCB2YWwpID0+IHN1bSArIHZhbCk7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIG1lYW4gb2YgYW4gYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lYW4oaW5wdXQpIHtcbiAgICByZXR1cm4gc3VtKGlucHV0KSAvIGlucHV0Lmxlbmd0aDtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbWF4aW11bSB2YWx1ZSBvZiBhbiBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF4KGlucHV0KSB7XG4gICAgbGV0IG1heCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKylcbiAgICAgICAgbWF4ID0gaW5wdXRbaV0gPiBtYXggPyBpbnB1dFtpXSA6IG1heDtcbiAgICByZXR1cm4gbWF4O1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGEgMmQgYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1heDJkKGlucHV0KSB7XG4gICAgbGV0IG1heCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGlucHV0W2ldLmxlbmd0aDsgaisrKVxuICAgICAgICAgICAgbWF4ID0gaW5wdXRbaV1bal0gPiBtYXggPyBpbnB1dFtpXVtqXSA6IG1heDtcbiAgICB9XG4gICAgcmV0dXJuIG1heDtcbn1cbi8qKlxuICogR2VuZXJhdGUgblNhbXBsZXMgbWFueSBpbnRlZ2VycyBmcm9tIDAgdG8gcG9vbFNpemUgc3VjaCB0aGF0IG5vXG4gKiBpbnRlZ2VyIGlzIHNlbGVjdGVkIHR3aWNlLiBUaGUgZHVwbGljYXRpb24gY29uc3RyYWludCBpcyBhY2hpZXZlZCB2aWFcbiAqIHJlamVjdGlvbiBzYW1wbGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdGlvblNhbXBsZShuU2FtcGxlcywgcG9vbFNpemUsIHJhbmRvbSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHplcm9zKG5TYW1wbGVzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5TYW1wbGVzOyBpKyspIHtcbiAgICAgICAgbGV0IHJlamVjdFNhbXBsZSA9IHRydWU7XG4gICAgICAgIHdoaWxlIChyZWplY3RTYW1wbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGogPSB0YXVSYW5kSW50KHBvb2xTaXplLCByYW5kb20pO1xuICAgICAgICAgICAgbGV0IGJyb2tlbiA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBpOyBrKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaiA9PT0gcmVzdWx0W2tdKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYnJva2VuKVxuICAgICAgICAgICAgICAgIHJlamVjdFNhbXBsZSA9IGZhbHNlO1xuICAgICAgICAgICAgcmVzdWx0W2ldID0gajtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBSZXNoYXBlcyBhIDFkIGFycmF5IGludG8gYSAyRCBvZiBnaXZlbiBkaW1lbnNpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzaGFwZTJkKHgsIGEsIGIpIHtcbiAgICBjb25zdCByb3dzID0gW107XG4gICAgLy8gbGV0IGNvdW50ID0gMDtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGlmICh4Lmxlbmd0aCAhPT0gYSAqIGIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyYXkgZGltZW5zaW9ucyBtdXN0IG1hdGNoIGlucHV0IGxlbmd0aC4nKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGE7IGkrKykge1xuICAgICAgICBjb25zdCBjb2wgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBiOyBqKyspIHtcbiAgICAgICAgICAgIGNvbC5wdXNoKHhbaW5kZXhdKTtcbiAgICAgICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgcm93cy5wdXNoKGNvbCk7XG4gICAgICAgIC8vIGNvdW50ICs9IDE7XG4gICAgfVxuICAgIHJldHVybiByb3dzO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFhScGJITXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMWRHbHNjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFUczdPenM3T3pzN096czdPenM3T3pzN1IwRnBRa2M3UVVGSlNEczdSMEZGUnp0QlFVTklMRTFCUVUwc1ZVRkJWU3hWUVVGVkxFTkJRVU1zUTBGQlV5eEZRVUZGTEUxQlFXZENPMGxCUTNCRUxFOUJRVThzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5zUXl4RFFVRkRPMEZCUlVRN08wZEJSVWM3UVVGRFNDeE5RVUZOTEZWQlFWVXNUMEZCVHl4RFFVRkRMRTFCUVdkQ08wbEJRM1JETEU5QlFVOHNUVUZCVFN4RlFVRkZMRU5CUVVNN1FVRkRiRUlzUTBGQlF6dEJRVU5FT3p0SFFVVkhPMEZCUTBnc1RVRkJUU3hWUVVGVkxFbEJRVWtzUTBGQlF5eEhRVUZoTzBsQlEyaERMRWxCUVVrc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU5tTEV0QlFVc3NUVUZCVFN4SlFVRkpMRWxCUVVrc1IwRkJSenRSUVVOd1FpeE5RVUZOTEVsQlFVa3NTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVWMFFpeFBRVUZQTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRE0wSXNRMEZCUXp0QlFVVkVPenRIUVVWSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEV0QlFVc3NRMEZCUXl4RFFVRlRPMGxCUXpkQ0xFMUJRVTBzVFVGQlRTeEhRVUZuUWl4RlFVRkZMRU5CUVVNN1NVRkRMMElzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVTdVVUZEZUVJc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0SlFVVjZRaXhQUVVGUExFMUJRVTBzUTBGQlF6dEJRVU5vUWl4RFFVRkRPMEZCUlVRN08wZEJSVWM3UVVGRFNDeE5RVUZOTEZWQlFWVXNTMEZCU3l4RFFVRkRMRU5CUVZNN1NVRkROMElzVDBGQlR5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGJrTXNRMEZCUXp0QlFVVkVPenRIUVVWSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEUxQlFVMHNRMEZCUXl4RFFVRlRMRVZCUVVVc1EwRkJVenRKUVVONlF5eFBRVUZQTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRMMElzUTBGQlF6dEJRVVZFT3p0SFFVVkhPMEZCUTBnc1RVRkJUU3hWUVVGVkxFdEJRVXNzUTBGQlF5eERRVUZUTzBsQlF6ZENMRTlCUVU4c1RVRkJUU3hEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTjBRaXhEUVVGRE8wRkJSVVE3TzBkQlJVYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1NVRkJTU3hEUVVGRExFTkJRVk03U1VGRE5VSXNUMEZCVHl4TlFVRk5MRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEzUkNMRU5CUVVNN1FVRkZSRHM3UjBGRlJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4TlFVRk5MRU5CUVVNc1EwRkJVeXhGUVVGRkxFTkJRVk1zUlVGQlJTeEhRVUZYTzBsQlEzUkVMRTlCUVU4c1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFJRVU0zUWl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTNaRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEwd3NRMEZCUXp0QlFVVkVPenRIUVVWSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEVkQlFVY3NRMEZCUXl4TFFVRmxPMGxCUTJwRExFOUJRVThzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUlVGQlJTeERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVNdlF5eERRVUZETzBGQlJVUTdPMGRCUlVjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzU1VGQlNTeERRVUZETEV0QlFXVTdTVUZEYkVNc1QwRkJUeXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJRenRCUVVOdVF5eERRVUZETzBGQlJVUTdPMGRCUlVjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzUjBGQlJ5eERRVUZETEV0QlFXVTdTVUZEYWtNc1NVRkJTU3hIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlExb3NTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRk8xRkJRMjVETEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXp0SlFVVjRReXhQUVVGUExFZEJRVWNzUTBGQlF6dEJRVU5pTEVOQlFVTTdRVUZGUkRzN1IwRkZSenRCUVVOSUxFMUJRVTBzVlVGQlZTeExRVUZMTEVOQlFVTXNTMEZCYVVJN1NVRkRja01zU1VGQlNTeEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTFvc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdVVUZEY2tNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZPMWxCUTNSRExFZEJRVWNzUjBGQlJ5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJRenRMUVVNdlF6dEpRVU5FTEU5QlFVOHNSMEZCUnl4RFFVRkRPMEZCUTJJc1EwRkJRenRCUVVWRU96czdPMGRCU1VjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzWlVGQlpTeERRVU0zUWl4UlFVRm5RaXhGUVVOb1FpeFJRVUZuUWl4RlFVTm9RaXhOUVVGblFqdEpRVVZvUWl4TlFVRk5MRTFCUVUwc1IwRkJSeXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdTVUZETDBJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRkZCUVZFc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFJRVU5xUXl4SlFVRkpMRmxCUVZrc1IwRkJSeXhKUVVGSkxFTkJRVU03VVVGRGVFSXNUMEZCVHl4WlFVRlpMRVZCUVVVN1dVRkRia0lzVFVGQlRTeERRVUZETEVkQlFVY3NWVUZCVlN4RFFVRkRMRkZCUVZFc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF6dFpRVU4yUXl4SlFVRkpMRTFCUVUwc1IwRkJSeXhMUVVGTExFTkJRVU03V1VGRGJrSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRuUWtGRE1VSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzI5Q1FVTnVRaXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETzI5Q1FVTmtMRTFCUVUwN2FVSkJRMUE3WVVGRFJqdFpRVU5FTEVsQlFVa3NRMEZCUXl4TlFVRk5PMmRDUVVOVUxGbEJRVmtzUjBGQlJ5eExRVUZMTEVOQlFVTTdXVUZGZGtJc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVTm1PMHRCUTBZN1NVRkRSQ3hQUVVGUExFMUJRVTBzUTBGQlF6dEJRVU5vUWl4RFFVRkRPMEZCUlVRN08wZEJSVWM3UVVGRFNDeE5RVUZOTEZWQlFWVXNVMEZCVXl4RFFVRkpMRU5CUVUwc1JVRkJSU3hEUVVGVExFVkJRVVVzUTBGQlV6dEpRVU4yUkN4TlFVRk5MRWxCUVVrc1IwRkJWU3hGUVVGRkxFTkJRVU03U1VGRGRrSXNhVUpCUVdsQ08wbEJRMnBDTEVsQlFVa3NTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVWa0xFbEJRVWtzUTBGQlF5eERRVUZETEUxQlFVMHNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJRenRSUVVOd1FpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMREpEUVVFeVF5eERRVUZETEVOQlFVTTdTVUZITDBRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFJRVU14UWl4TlFVRk5MRWRCUVVjc1IwRkJVU3hGUVVGRkxFTkJRVU03VVVGRGNFSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRaUVVNeFFpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEyNUNMRXRCUVVzc1NVRkJTU3hEUVVGRExFTkJRVU03VTBGRFdqdFJRVU5FTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRFppeGpRVUZqTzB0QlEyWTdTVUZEUkN4UFFVRlBMRWxCUVVrc1EwRkJRenRCUVVOa0xFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVCc2FXTmxibk5sWEc0Z0tseHVJQ29nUTI5d2VYSnBaMmgwSURJd01Ua2dSMjl2WjJ4bElFeE1ReTRnUVd4c0lGSnBaMmgwY3lCU1pYTmxjblpsWkM1Y2JpQXFYRzRnS2lCTWFXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FYQmhZMmhsSUV4cFkyVnVjMlVzSUZabGNuTnBiMjRnTWk0d0lDaDBhR1VnWENKTWFXTmxibk5sWENJcE8xeHVJQ29nZVc5MUlHMWhlU0J1YjNRZ2RYTmxJSFJvYVhNZ1ptbHNaU0JsZUdObGNIUWdhVzRnWTI5dGNHeHBZVzVqWlNCM2FYUm9JSFJvWlNCTWFXTmxibk5sTGx4dUlDb2dXVzkxSUcxaGVTQnZZblJoYVc0Z1lTQmpiM0I1SUc5bUlIUm9aU0JNYVdObGJuTmxJR0YwWEc0Z0tseHVJQ29nSUNBZ0lHaDBkSEE2THk5M2QzY3VZWEJoWTJobExtOXlaeTlzYVdObGJuTmxjeTlNU1VORlRsTkZMVEl1TUZ4dUlDcGNiaUFxSUZWdWJHVnpjeUJ5WlhGMWFYSmxaQ0JpZVNCaGNIQnNhV05oWW14bElHeGhkeUJ2Y2lCaFozSmxaV1FnZEc4Z2FXNGdkM0pwZEdsdVp5d2djMjltZEhkaGNtVmNiaUFxSUdScGMzUnlhV0oxZEdWa0lIVnVaR1Z5SUhSb1pTQk1hV05sYm5ObElHbHpJR1JwYzNSeWFXSjFkR1ZrSUc5dUlHRnVJRndpUVZNZ1NWTmNJaUJDUVZOSlV5eGNiaUFxSUZkSlZFaFBWVlFnVjBGU1VrRk9WRWxGVXlCUFVpQkRUMDVFU1ZSSlQwNVRJRTlHSUVGT1dTQkxTVTVFTENCbGFYUm9aWElnWlhod2NtVnpjeUJ2Y2lCcGJYQnNhV1ZrTGx4dUlDb2dVMlZsSUhSb1pTQk1hV05sYm5ObElHWnZjaUIwYUdVZ2MzQmxZMmxtYVdNZ2JHRnVaM1ZoWjJVZ1oyOTJaWEp1YVc1bklIQmxjbTFwYzNOcGIyNXpJR0Z1WkZ4dUlDb2diR2x0YVhSaGRHbHZibk1nZFc1a1pYSWdkR2hsSUV4cFkyVnVjMlV1WEc0Z0tpQTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JpQXFMMXh1WEc1cGJYQnZjblFnZTFKaGJtUnZiVVp1ZlNCbWNtOXRJQ2N1TDNWdFlYQW5PMXh1WEc0dktpcGNiaUFxSUZOcGJYQnNaU0J5WVc1a2IyMGdhVzUwWldkbGNpQm1kVzVqZEdsdmJseHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnZEdGMVVtRnVaRWx1ZENodU9pQnVkVzFpWlhJc0lISmhibVJ2YlRvZ1VtRnVaRzl0Um00cElIdGNiaUFnY21WMGRYSnVJRTFoZEdndVpteHZiM0lvY21GdVpHOXRLQ2tnS2lCdUtUdGNibjFjYmx4dUx5b3FYRzRnS2lCVGFXMXdiR1VnY21GdVpHOXRJR1pzYjJGMElHWjFibU4wYVc5dVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUIwWVhWU1lXNWtLSEpoYm1SdmJUb2dVbUZ1Wkc5dFJtNHBJSHRjYmlBZ2NtVjBkWEp1SUhKaGJtUnZiU2dwTzF4dWZWeHVMeW9xWEc0Z0tpQkRiMjF3ZFhSbElIUm9aU0FvYzNSaGJtUmhjbVFnYkRJcElHNXZjbTBnYjJZZ1lTQjJaV04wYjNJdVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ1YjNKdEtIWmxZem9nYm5WdFltVnlXMTBwSUh0Y2JpQWdiR1YwSUhKbGMzVnNkQ0E5SURBN1hHNGdJR1p2Y2lBb1kyOXVjM1FnYVhSbGJTQnZaaUIyWldNcFhHNGdJQ0FnY21WemRXeDBJQ3M5SUdsMFpXMGdLaW9nTWp0Y2JseHVJQ0J5WlhSMWNtNGdUV0YwYUM1emNYSjBLSEpsYzNWc2RDazdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsY3lCaGJpQmxiWEIwZVNCaGNuSmhlU0FvWm1sc2JHVmtJSGRwZEdnZ2RXNWtaV1pwYm1Wa0tWeHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWlcxd2RIa29iam9nYm5WdFltVnlLVG9nZFc1a1pXWnBibVZrVzEwZ2UxeHVJQ0JqYjI1emRDQnZkWFJ3ZFhRNklIVnVaR1ZtYVc1bFpGdGRJRDBnVzEwN1hHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYmpzZ2FTc3JLVnh1SUNBZ0lHOTFkSEIxZEM1d2RYTm9LSFZ1WkdWbWFXNWxaQ2s3WEc1Y2JpQWdjbVYwZFhKdUlHOTFkSEIxZER0Y2JuMWNibHh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUdGeWNtRjVJR1pwYkd4bFpDQjNhWFJvSUdsdVpHVjRJSFpoYkhWbGMxeHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnY21GdVoyVW9iam9nYm5WdFltVnlLVG9nYm5WdFltVnlXMTBnZTF4dUlDQnlaWFIxY200Z1pXMXdkSGtvYmlrdWJXRndLQ2hmTENCcEtTQTlQaUJwS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0Z1SUdGeWNtRjVJR1pwYkd4bFpDQjNhWFJvSUdFZ2MzQmxZMmxtYVdNZ2RtRnNkV1ZjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHWnBiR3hsWkNodU9pQnVkVzFpWlhJc0lIWTZJRzUxYldKbGNpazZJRzUxYldKbGNsdGRJSHRjYmlBZ2NtVjBkWEp1SUdWdGNIUjVLRzRwTG0xaGNDZ29LU0E5UGlCMktUdGNibjFjYmx4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdGdUlHRnljbUY1SUdacGJHeGxaQ0IzYVhSb0lIcGxjbTl6WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjZaWEp2Y3lodU9pQnVkVzFpWlhJcE9pQnVkVzFpWlhKYlhTQjdYRzRnSUhKbGRIVnliaUJtYVd4c1pXUW9iaXdnTUNrN1hHNTlYRzVjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCaGNuSmhlU0JtYVd4c1pXUWdkMmwwYUNCdmJtVnpYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCdmJtVnpLRzQ2SUc1MWJXSmxjaWs2SUc1MWJXSmxjbHRkSUh0Y2JpQWdjbVYwZFhKdUlHWnBiR3hsWkNodUxDQXhLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRnVJR0Z5Y21GNUlHWnliMjBnWVNCMGJ5QmlMQ0J2WmlCc1pXNW5kR2dnYkdWdUxDQnBibU5zZFhOcGRtVmNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUd4cGJtVmhjaWhoT2lCdWRXMWlaWElzSUdJNklHNTFiV0psY2l3Z2JHVnVPaUJ1ZFcxaVpYSXBPaUJ1ZFcxaVpYSmJYU0I3WEc0Z0lISmxkSFZ5YmlCbGJYQjBlU2hzWlc0cExtMWhjQ2dvWHl3Z2FTa2dQVDRnZTF4dUlDQWdJSEpsZEhWeWJpQmhJQ3NnYVNBcUlDZ29ZaUF0SUdFcElDOGdLR3hsYmlBdElERXBLVHRjYmlBZ2ZTazdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCMGFHVWdjM1Z0SUc5bUlHRnVJR0Z5Y21GNVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ6ZFcwb2FXNXdkWFE2SUc1MWJXSmxjbHRkS1RvZ2JuVnRZbVZ5SUh0Y2JpQWdjbVYwZFhKdUlHbHVjSFYwTG5KbFpIVmpaU2dvYzNWdExDQjJZV3dwSUQwK0lITjFiU0FySUhaaGJDazdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCMGFHVWdiV1ZoYmlCdlppQmhiaUJoY25KaGVWeHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYldWaGJpaHBibkIxZERvZ2JuVnRZbVZ5VzEwcE9pQnVkVzFpWlhJZ2UxeHVJQ0J5WlhSMWNtNGdjM1Z0S0dsdWNIVjBLU0F2SUdsdWNIVjBMbXhsYm1kMGFEdGNibjFjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUhSb1pTQnRZWGhwYlhWdElIWmhiSFZsSUc5bUlHRnVJR0Z5Y21GNVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ0WVhnb2FXNXdkWFE2SUc1MWJXSmxjbHRkS1RvZ2JuVnRZbVZ5SUh0Y2JpQWdiR1YwSUcxaGVDQTlJREE3WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dhVzV3ZFhRdWJHVnVaM1JvT3lCcEt5c3BYRzRnSUNBZ2JXRjRJRDBnYVc1d2RYUmJhVjBnUGlCdFlYZ2dQeUJwYm5CMWRGdHBYU0E2SUcxaGVEdGNibHh1SUNCeVpYUjFjbTRnYldGNE8xeHVmVnh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nZEdobElHMWhlR2x0ZFcwZ2RtRnNkV1VnYjJZZ1lTQXlaQ0JoY25KaGVWeHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYldGNE1tUW9hVzV3ZFhRNklHNTFiV0psY2x0ZFcxMHBPaUJ1ZFcxaVpYSWdlMXh1SUNCc1pYUWdiV0Y0SUQwZ01EdGNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCcGJuQjFkQzVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUdadmNpQW9iR1YwSUdvZ1BTQXdPeUJxSUR3Z2FXNXdkWFJiYVYwdWJHVnVaM1JvT3lCcUt5c3BYRzRnSUNBZ0lDQnRZWGdnUFNCcGJuQjFkRnRwWFZ0cVhTQStJRzFoZUNBL0lHbHVjSFYwVzJsZFcycGRJRG9nYldGNE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdFlYZzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdVZ2JsTmhiWEJzWlhNZ2JXRnVlU0JwYm5SbFoyVnljeUJtY205dElEQWdkRzhnY0c5dmJGTnBlbVVnYzNWamFDQjBhR0YwSUc1dlhHNGdLaUJwYm5SbFoyVnlJR2x6SUhObGJHVmpkR1ZrSUhSM2FXTmxMaUJVYUdVZ1pIVndiR2xqWVhScGIyNGdZMjl1YzNSeVlXbHVkQ0JwY3lCaFkyaHBaWFpsWkNCMmFXRmNiaUFxSUhKbGFtVmpkR2x2YmlCellXMXdiR2x1Wnk1Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSEpsYW1WamRHbHZibE5oYlhCc1pTaGNiaUFnYmxOaGJYQnNaWE02SUc1MWJXSmxjaXhjYmlBZ2NHOXZiRk5wZW1VNklHNTFiV0psY2l4Y2JpQWdjbUZ1Wkc5dE9pQlNZVzVrYjIxR2JseHVLVG9nYm5WdFltVnlXMTBnZTF4dUlDQmpiMjV6ZENCeVpYTjFiSFFnUFNCNlpYSnZjeWh1VTJGdGNHeGxjeWs3WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dibE5oYlhCc1pYTTdJR2tyS3lrZ2UxeHVJQ0FnSUd4bGRDQnlaV3BsWTNSVFlXMXdiR1VnUFNCMGNuVmxPMXh1SUNBZ0lIZG9hV3hsSUNoeVpXcGxZM1JUWVcxd2JHVXBJSHRjYmlBZ0lDQWdJR052Ym5OMElHb2dQU0IwWVhWU1lXNWtTVzUwS0hCdmIyeFRhWHBsTENCeVlXNWtiMjBwTzF4dUlDQWdJQ0FnYkdWMElHSnliMnRsYmlBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYXlBOUlEQTdJR3NnUENCcE95QnJLeXNwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR29nUFQwOUlISmxjM1ZzZEZ0clhTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdKeWIydGxiaUE5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNnaFluSnZhMlZ1S1Z4dUlDQWdJQ0FnSUNCeVpXcGxZM1JUWVcxd2JHVWdQU0JtWVd4elpUdGNibHh1SUNBZ0lDQWdjbVZ6ZFd4MFcybGRJRDBnYWp0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJSEpsYzNWc2REdGNibjFjYmx4dUx5b3FYRzRnS2lCU1pYTm9ZWEJsY3lCaElERmtJR0Z5Y21GNUlHbHVkRzhnWVNBeVJDQnZaaUJuYVhabGJpQmthVzFsYm5OcGIyNXpMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2NtVnphR0Z3WlRKa1BGUStLSGc2SUZSYlhTd2dZVG9nYm5WdFltVnlMQ0JpT2lCdWRXMWlaWElwT2lCVVcxMWJYU0I3WEc0Z0lHTnZibk4wSUhKdmQzTTZJRlJiWFZ0ZElEMGdXMTA3WEc0Z0lDOHZJR3hsZENCamIzVnVkQ0E5SURBN1hHNGdJR3hsZENCcGJtUmxlQ0E5SURBN1hHNWNiaUFnYVdZZ0tIZ3ViR1Z1WjNSb0lDRTlQU0JoSUNvZ1lpbGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjBGeWNtRjVJR1JwYldWdWMybHZibk1nYlhWemRDQnRZWFJqYUNCcGJuQjFkQ0JzWlc1bmRHZ3VKeWs3WEc1Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUdFN0lHa3JLeWtnZTF4dUlDQWdJR052Ym5OMElHTnZiRG9nVkZ0ZElEMGdXMTA3WEc0Z0lDQWdabTl5SUNoc1pYUWdhaUE5SURBN0lHb2dQQ0JpT3lCcUt5c3BJSHRjYmlBZ0lDQWdJR052YkM1d2RYTm9LSGhiYVc1a1pYaGRLVHRjYmlBZ0lDQWdJR2x1WkdWNElDczlJREU3WEc0Z0lDQWdmVnh1SUNBZ0lISnZkM011Y0hWemFDaGpiMndwTzF4dUlDQWdJQzh2SUdOdmRXNTBJQ3M5SURFN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUhKdmQzTTdYRzU5WEc0aVhYMD0iLCIvKipcbiAqIEBsaWNlbnNlXG4gKlxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi91dGlscyc7XG4vKipcbiAqICBDb25zdHJ1Y3RvciBmb3IgdGhlIGhlYXAgb2JqZWN0cy4gVGhlIGhlYXBzIGFyZSB1c2VkXG4gKiBmb3IgYXBwcm94aW1hdGUgbmVhcmVzdCBuZWlnaGJvciBzZWFyY2gsIG1haW50YWluaW5nIGEgbGlzdCBvZiBwb3RlbnRpYWxcbiAqIG5laWdoYm9ycyBzb3J0ZWQgYnkgdGhlaXIgZGlzdGFuY2UuIFdlIGFsc28gZmxhZyBpZiBwb3RlbnRpYWwgbmVpZ2hib3JzXG4gKiBhcmUgbmV3bHkgYWRkZWQgdG8gdGhlIGxpc3Qgb3Igbm90LiBJbnRlcm5hbGx5IHRoaXMgaXMgc3RvcmVkIGFzXG4gKiBhIHNpbmdsZSBhcnJheTsgdGhlIGZpcnN0IGF4aXMgZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIGFyZSBsb29raW5nIGF0IHRoZVxuICogYXJyYXkgb2YgY2FuZGlkYXRlIGluZGljZXMsIHRoZSBhcnJheSBvZiBkaXN0YW5jZXMsIG9yIHRoZSBmbGFnIGFycmF5IGZvclxuICogd2hldGhlciBlbGVtZW50cyBhcmUgbmV3IG9yIG5vdC4gRWFjaCBvZiB0aGVzZSBhcnJheXMgYXJlIG9mIHNoYXBlXG4gKiAoYGBuUG9pbnRzYGAsIGBgc2l6ZWBgKVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZUhlYXAoblBvaW50cywgc2l6ZSkge1xuICAgIGNvbnN0IG1ha2VBcnJheXMgPSAoZmlsbFZhbHVlKSA9PiB7XG4gICAgICAgIHJldHVybiB1dGlscy5lbXB0eShuUG9pbnRzKS5tYXAoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxzLmZpbGxlZChzaXplLCBmaWxsVmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGhlYXAgPSBbXTtcbiAgICBoZWFwLnB1c2gobWFrZUFycmF5cygtMSkpO1xuICAgIGhlYXAucHVzaChtYWtlQXJyYXlzKEluZmluaXR5KSk7XG4gICAgaGVhcC5wdXNoKG1ha2VBcnJheXMoMCkpO1xuICAgIHJldHVybiBoZWFwO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBuX3NhbXBsZXMgbWFueSBpbnRlZ2VycyBmcm9tIDAgdG8gcG9vbF9zaXplIHN1Y2ggdGhhdCBub1xuICogaW50ZWdlciBpcyBzZWxlY3RlZCB0d2ljZS4gVGhlIGR1cGxpY2F0aW9uIGNvbnN0cmFpbnQgaXMgYWNoaWV2ZWQgdmlhXG4gKiByZWplY3Rpb24gc2FtcGxpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWplY3Rpb25TYW1wbGUoblNhbXBsZXMsIHBvb2xTaXplLCByYW5kb20pIHtcbiAgICBjb25zdCByZXN1bHQgPSB1dGlscy56ZXJvcyhuU2FtcGxlcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuU2FtcGxlczsgaSsrKSB7XG4gICAgICAgIGxldCByZWplY3RTYW1wbGUgPSB0cnVlO1xuICAgICAgICBsZXQgaiA9IDA7XG4gICAgICAgIHdoaWxlIChyZWplY3RTYW1wbGUpIHtcbiAgICAgICAgICAgIGogPSB1dGlscy50YXVSYW5kSW50KHBvb2xTaXplLCByYW5kb20pO1xuICAgICAgICAgICAgbGV0IGJyb2tlbiA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBpOyBrKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaiA9PT0gcmVzdWx0W2tdKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYnJva2VuKVxuICAgICAgICAgICAgICAgIHJlamVjdFNhbXBsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFtpXSA9IGo7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFB1c2ggYSBuZXcgZWxlbWVudCBvbnRvIHRoZSBoZWFwLiBUaGUgaGVhcCBzdG9yZXMgcG90ZW50aWFsIG5laWdoYm9yc1xuICogZm9yIGVhY2ggZGF0YSBwb2ludC4gVGhlIGBgcm93YGAgcGFyYW1ldGVyIGRldGVybWluZXMgd2hpY2ggZGF0YSBwb2ludCB3ZVxuICogYXJlIGFkZHJlc3NpbmcsIHRoZSBgYHdlaWdodGBgIGRldGVybWluZXMgdGhlIGRpc3RhbmNlIChmb3IgaGVhcCBzb3J0aW5nKSxcbiAqIHRoZSBgYGluZGV4YGAgaXMgdGhlIGVsZW1lbnQgdG8gYWRkLCBhbmQgdGhlIGZsYWcgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXNcbiAqIGlzIHRvIGJlIGNvbnNpZGVyZWQgYSBuZXcgYWRkaXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoZWFwUHVzaChoZWFwLCByb3csIHdlaWdodCwgaW5kZXgsIGZsYWcpIHtcbiAgICByb3cgPSBNYXRoLmZsb29yKHJvdyk7XG4gICAgY29uc3QgaW5kaWNlcyA9IGhlYXBbMF1bcm93XTtcbiAgICBjb25zdCB3ZWlnaHRzID0gaGVhcFsxXVtyb3ddO1xuICAgIC8vY29uc3QgaXNOZXcgPSBoZWFwWzJdW3Jvd107XG4gICAgaWYgKHdlaWdodCA+PSB3ZWlnaHRzWzBdKVxuICAgICAgICByZXR1cm4gMDtcbiAgICAvLyBCcmVhayBpZiB3ZSBhbHJlYWR5IGhhdmUgdGhpcyBlbGVtZW50LlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaW5kZXggPT09IGluZGljZXNbaV0pXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIHVuY2hlY2tlZEhlYXBQdXNoKGhlYXAsIHJvdywgd2VpZ2h0LCBpbmRleCwgZmxhZyk7XG59XG4vKipcbiAqIFB1c2ggYSBuZXcgZWxlbWVudCBvbnRvIHRoZSBoZWFwLiBUaGUgaGVhcCBzdG9yZXMgcG90ZW50aWFsIG5laWdoYm9yc1xuICogZm9yIGVhY2ggZGF0YSBwb2ludC4gVGhlIGBgcm93YGAgcGFyYW1ldGVyIGRldGVybWluZXMgd2hpY2ggZGF0YSBwb2ludCB3ZVxuICogYXJlIGFkZHJlc3NpbmcsIHRoZSBgYHdlaWdodGBgIGRldGVybWluZXMgdGhlIGRpc3RhbmNlIChmb3IgaGVhcCBzb3J0aW5nKSxcbiAqIHRoZSBgYGluZGV4YGAgaXMgdGhlIGVsZW1lbnQgdG8gYWRkLCBhbmQgdGhlIGZsYWcgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXNcbiAqIGlzIHRvIGJlIGNvbnNpZGVyZWQgYSBuZXcgYWRkaXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmNoZWNrZWRIZWFwUHVzaChoZWFwLCByb3csIHdlaWdodCwgaW5kZXgsIGZsYWcpIHtcbiAgICBjb25zdCBpbmRpY2VzID0gaGVhcFswXVtyb3ddO1xuICAgIGNvbnN0IHdlaWdodHMgPSBoZWFwWzFdW3Jvd107XG4gICAgY29uc3QgaXNOZXcgPSBoZWFwWzJdW3Jvd107XG4gICAgaWYgKHdlaWdodCA+PSB3ZWlnaHRzWzBdKVxuICAgICAgICByZXR1cm4gMDtcbiAgICAvLyBJbnNlcnQgdmFsIGF0IHBvc2l0aW9uIHplcm9cbiAgICB3ZWlnaHRzWzBdID0gd2VpZ2h0O1xuICAgIGluZGljZXNbMF0gPSBpbmRleDtcbiAgICBpc05ld1swXSA9IGZsYWc7XG4gICAgLy8gRGVzY2VuZCB0aGUgaGVhcCwgc3dhcHBpbmcgdmFsdWVzIHVudGlsIHRoZSBtYXggaGVhcCBjcml0ZXJpb24gaXMgbWV0XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBpU3dhcCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgY29uc3QgaWMxID0gMiAqIGkgKyAxO1xuICAgICAgICBjb25zdCBpYzIgPSBpYzEgKyAxO1xuICAgICAgICBjb25zdCBoZWFwU2hhcGUyID0gaGVhcFswXVswXS5sZW5ndGg7XG4gICAgICAgIGlmIChpYzEgPj0gaGVhcFNoYXBlMikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaWMyID49IGhlYXBTaGFwZTIpIHtcbiAgICAgICAgICAgIGlmICh3ZWlnaHRzW2ljMV0gPiB3ZWlnaHQpXG4gICAgICAgICAgICAgICAgaVN3YXAgPSBpYzE7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2VpZ2h0c1tpYzFdID49IHdlaWdodHNbaWMyXSkge1xuICAgICAgICAgICAgaWYgKHdlaWdodCA8IHdlaWdodHNbaWMxXSlcbiAgICAgICAgICAgICAgICBpU3dhcCA9IGljMTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh3ZWlnaHQgPCB3ZWlnaHRzW2ljMl0pXG4gICAgICAgICAgICAgICAgaVN3YXAgPSBpYzI7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgd2VpZ2h0c1tpXSA9IHdlaWdodHNbaVN3YXBdO1xuICAgICAgICBpbmRpY2VzW2ldID0gaW5kaWNlc1tpU3dhcF07XG4gICAgICAgIGlzTmV3W2ldID0gaXNOZXdbaVN3YXBdO1xuICAgICAgICBpID0gaVN3YXA7XG4gICAgfVxuICAgIHdlaWdodHNbaV0gPSB3ZWlnaHQ7XG4gICAgaW5kaWNlc1tpXSA9IGluZGV4O1xuICAgIGlzTmV3W2ldID0gZmxhZztcbiAgICByZXR1cm4gMTtcbn1cbi8qKlxuICogQnVpbGQgYSBoZWFwIG9mIGNhbmRpZGF0ZSBuZWlnaGJvcnMgZm9yIG5lYXJlc3QgbmVpZ2hib3IgZGVzY2VudC4gRm9yXG4gKiBlYWNoIHZlcnRleCB0aGUgY2FuZGlkYXRlIG5laWdoYm9ycyBhcmUgYW55IGN1cnJlbnQgbmVpZ2hib3JzLCBhbmQgYW55XG4gKiB2ZXJ0aWNlcyB0aGF0IGhhdmUgdGhlIHZlcnRleCBhcyBvbmUgb2YgdGhlaXIgbmVhcmVzdCBuZWlnaGJvcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENhbmRpZGF0ZXMoY3VycmVudEdyYXBoLCBuVmVydGljZXMsIG5OZWlnaGJvcnMsIG1heENhbmRpZGF0ZXMsIHJhbmRvbSkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZU5laWdoYm9ycyA9IG1ha2VIZWFwKG5WZXJ0aWNlcywgbWF4Q2FuZGlkYXRlcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuVmVydGljZXM7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG5OZWlnaGJvcnM7IGorKykge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRHcmFwaFswXVtpXVtqXSA8IDApXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjdXJyZW50R3JhcGhbMF1baV1bal07XG4gICAgICAgICAgICBjb25zdCBpc24gPSBjdXJyZW50R3JhcGhbMl1baV1bal07XG4gICAgICAgICAgICBjb25zdCBkID0gdXRpbHMudGF1UmFuZChyYW5kb20pO1xuICAgICAgICAgICAgaGVhcFB1c2goY2FuZGlkYXRlTmVpZ2hib3JzLCBpLCBkLCBpZHgsIGlzbik7XG4gICAgICAgICAgICBoZWFwUHVzaChjYW5kaWRhdGVOZWlnaGJvcnMsIGlkeCwgZCwgaSwgaXNuKTtcbiAgICAgICAgICAgIGN1cnJlbnRHcmFwaFsyXVtpXVtqXSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNhbmRpZGF0ZU5laWdoYm9ycztcbn1cbi8qKlxuICogR2l2ZW4gYW4gYXJyYXkgb2YgaGVhcHMgKG9mIGluZGljZXMgYW5kIHdlaWdodHMpLCB1bnBhY2sgdGhlIGhlYXBcbiAqIG91dCB0byBnaXZlIGFuZCBhcnJheSBvZiBzb3J0ZWQgbGlzdHMgb2YgaW5kaWNlcyBhbmQgd2VpZ2h0cyBieSBpbmNyZWFzaW5nXG4gKiB3ZWlnaHQuIFRoaXMgaXMgZWZmZWN0aXZlbHkganVzdCB0aGUgc2Vjb25kIGhhbGYgb2YgaGVhcCBzb3J0ICh0aGUgZmlyc3RcbiAqIGhhbGYgbm90IGJlaW5nIHJlcXVpcmVkIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgZGF0YSBpbiBhIGhlYXApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVoZWFwU29ydChoZWFwKSB7XG4gICAgY29uc3QgaW5kaWNlcyA9IGhlYXBbMF07XG4gICAgY29uc3Qgd2VpZ2h0cyA9IGhlYXBbMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGluZEhlYXAgPSBpbmRpY2VzW2ldO1xuICAgICAgICBjb25zdCBkaXN0SGVhcCA9IHdlaWdodHNbaV07XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5kSGVhcC5sZW5ndGggLSAxOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluZEhlYXBJbmRleCA9IGluZEhlYXAubGVuZ3RoIC0gaiAtIDE7XG4gICAgICAgICAgICBjb25zdCBkaXN0SGVhcEluZGV4ID0gZGlzdEhlYXAubGVuZ3RoIC0gaiAtIDE7XG4gICAgICAgICAgICBjb25zdCB0ZW1wMSA9IGluZEhlYXBbMF07XG4gICAgICAgICAgICBpbmRIZWFwWzBdID0gaW5kSGVhcFtpbmRIZWFwSW5kZXhdO1xuICAgICAgICAgICAgaW5kSGVhcFtpbmRIZWFwSW5kZXhdID0gdGVtcDE7XG4gICAgICAgICAgICBjb25zdCB0ZW1wMiA9IGRpc3RIZWFwWzBdO1xuICAgICAgICAgICAgZGlzdEhlYXBbMF0gPSBkaXN0SGVhcFtkaXN0SGVhcEluZGV4XTtcbiAgICAgICAgICAgIGRpc3RIZWFwW2Rpc3RIZWFwSW5kZXhdID0gdGVtcDI7XG4gICAgICAgICAgICBzaWZ0RG93bihkaXN0SGVhcCwgaW5kSGVhcCwgZGlzdEhlYXBJbmRleCwgMCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgaW5kaWNlcywgd2VpZ2h0cyB9O1xufVxuLyoqXG4gKiBSZXN0b3JlIHRoZSBoZWFwIHByb3BlcnR5IGZvciBhIGhlYXAgd2l0aCBhbiBvdXQgb2YgcGxhY2UgZWxlbWVudFxuICogYXQgcG9zaXRpb24gYGBlbHRgYC4gVGhpcyB3b3JrcyB3aXRoIGEgaGVhcCBwYWlyIHdoZXJlIGhlYXAxIGNhcnJpZXNcbiAqIHRoZSB3ZWlnaHRzIGFuZCBoZWFwMiBob2xkcyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cy5cbiAqL1xuZnVuY3Rpb24gc2lmdERvd24oaGVhcDEsIGhlYXAyLCBjZWlsaW5nLCBlbHQpIHtcbiAgICB3aGlsZSAoZWx0ICogMiArIDEgPCBjZWlsaW5nKSB7XG4gICAgICAgIGNvbnN0IGxlZnRDaGlsZCA9IGVsdCAqIDIgKyAxO1xuICAgICAgICBjb25zdCByaWdodENoaWxkID0gbGVmdENoaWxkICsgMTtcbiAgICAgICAgbGV0IHN3YXAgPSBlbHQ7XG4gICAgICAgIGlmIChoZWFwMVtzd2FwXSA8IGhlYXAxW2xlZnRDaGlsZF0pXG4gICAgICAgICAgICBzd2FwID0gbGVmdENoaWxkO1xuICAgICAgICBpZiAocmlnaHRDaGlsZCA8IGNlaWxpbmcgJiYgaGVhcDFbc3dhcF0gPCBoZWFwMVtyaWdodENoaWxkXSlcbiAgICAgICAgICAgIHN3YXAgPSByaWdodENoaWxkO1xuICAgICAgICBpZiAoc3dhcCA9PT0gZWx0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXAxID0gaGVhcDFbZWx0XTtcbiAgICAgICAgICAgIGhlYXAxW2VsdF0gPSBoZWFwMVtzd2FwXTtcbiAgICAgICAgICAgIGhlYXAxW3N3YXBdID0gdGVtcDE7XG4gICAgICAgICAgICBjb25zdCB0ZW1wMiA9IGhlYXAyW2VsdF07XG4gICAgICAgICAgICBoZWFwMltlbHRdID0gaGVhcDJbc3dhcF07XG4gICAgICAgICAgICBoZWFwMltzd2FwXSA9IHRlbXAyO1xuICAgICAgICAgICAgZWx0ID0gc3dhcDtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogU2VhcmNoIHRoZSBoZWFwIGZvciB0aGUgc21hbGxlc3QgZWxlbWVudCB0aGF0IGlzIHN0aWxsIGZsYWdnZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzbWFsbGVzdEZsYWdnZWQoaGVhcCwgcm93KSB7XG4gICAgY29uc3QgaW5kID0gaGVhcFswXVtyb3ddO1xuICAgIGNvbnN0IGRpc3QgPSBoZWFwWzFdW3Jvd107XG4gICAgY29uc3QgZmxhZyA9IGhlYXBbMl1bcm93XTtcbiAgICBsZXQgbWluRGlzdCA9IEluZmluaXR5O1xuICAgIGxldCByZXN1bHRJbmRleCA9IC0xO1xuICAgIGZvciAobGV0IGkgPSAwOyBpID4gaW5kLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChmbGFnW2ldID09PSAxICYmIGRpc3RbaV0gPCBtaW5EaXN0KSB7XG4gICAgICAgICAgICBtaW5EaXN0ID0gZGlzdFtpXTtcbiAgICAgICAgICAgIHJlc3VsdEluZGV4ID0gaTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVzdWx0SW5kZXggPj0gMCkge1xuICAgICAgICBmbGFnW3Jlc3VsdEluZGV4XSA9IDA7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKGluZFtyZXN1bHRJbmRleF0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFHVmhjQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkltaGxZWEF1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRTdPenM3T3pzN096czdPenM3T3pzN08wZEJhVUpITzBGQk1rTklMRTlCUVU4c1MwRkJTeXhMUVVGTExFMUJRVTBzVTBGQlV5eERRVUZETzBGQlNXcERPenM3T3pzN096czdSMEZUUnp0QlFVTklMRTFCUVUwc1ZVRkJWU3hSUVVGUkxFTkJRVU1zVDBGQlpTeEZRVUZGTEVsQlFWazdTVUZEY0VRc1RVRkJUU3hWUVVGVkxFZEJRVWNzUTBGQlF5eFRRVUZwUWl4RlFVRkZMRVZCUVVVN1VVRkRka01zVDBGQlR5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVWQlFVVTdXVUZEYmtNc1QwRkJUeXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRenRSUVVOMlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTk1MRU5CUVVNc1EwRkJRenRKUVVWR0xFMUJRVTBzU1VGQlNTeEhRVUZUTEVWQlFVVXNRMEZCUXp0SlFVTjBRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRE1VSXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTm9ReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRM3BDTEU5QlFVOHNTVUZCU1N4RFFVRkRPMEZCUTJRc1EwRkJRenRCUVVWRU96czdPMGRCU1VjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzWlVGQlpTeERRVU0zUWl4UlFVRm5RaXhGUVVOb1FpeFJRVUZuUWl4RlFVTm9RaXhOUVVGblFqdEpRVVZvUWl4TlFVRk5MRTFCUVUwc1IwRkJSeXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMGxCUTNKRExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhSUVVGUkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdVVUZEYWtNc1NVRkJTU3haUVVGWkxFZEJRVWNzU1VGQlNTeERRVUZETzFGQlEzaENMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5XTEU5QlFVOHNXVUZCV1N4RlFVRkZPMWxCUTI1Q0xFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTXNWVUZCVlN4RFFVRkRMRkZCUVZFc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF6dFpRVU4yUXl4SlFVRkpMRTFCUVUwc1IwRkJSeXhMUVVGTExFTkJRVU03V1VGRGJrSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRuUWtGRE1VSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzI5Q1FVTnVRaXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETzI5Q1FVTmtMRTFCUVUwN2FVSkJRMUE3WVVGRFJqdFpRVU5FTEVsQlFVa3NRMEZCUXl4TlFVRk5PMmRDUVVGRkxGbEJRVmtzUjBGQlJ5eExRVUZMTEVOQlFVTTdVMEZEYmtNN1VVRkRSQ3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMHRCUTJZN1NVRkRSQ3hQUVVGUExFMUJRVTBzUTBGQlF6dEJRVU5vUWl4RFFVRkRPMEZCUlVRN096czdPenRIUVUxSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEZGQlFWRXNRMEZEZEVJc1NVRkJWU3hGUVVOV0xFZEJRVmNzUlVGRFdDeE5RVUZqTEVWQlEyUXNTMEZCWVN4RlFVTmlMRWxCUVZrN1NVRkZXaXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVOMFFpeE5RVUZOTEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZETjBJc1RVRkJUU3hQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRemRDTERaQ1FVRTJRanRKUVVVM1FpeEpRVUZKTEUxQlFVMHNTVUZCU1N4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM1JDTEU5QlFVOHNRMEZCUXl4RFFVRkRPMGxCUjFnc2VVTkJRWGxETzBsQlEzcERMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFGQlEzWkRMRWxCUVVrc1MwRkJTeXhMUVVGTExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEZEVJc1QwRkJUeXhEUVVGRExFTkJRVU03UzBGRFdqdEpRVVZFTEU5QlFVOHNhVUpCUVdsQ0xFTkJRVU1zU1VGQlNTeEZRVUZGTEVkQlFVY3NSVUZCUlN4TlFVRk5MRVZCUVVVc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzBGQlF6TkVMRU5CUVVNN1FVRkZSRHM3T3pzN08wZEJUVWM3UVVGRFNDeE5RVUZOTEZWQlFWVXNhVUpCUVdsQ0xFTkJReTlDTEVsQlFWVXNSVUZEVml4SFFVRlhMRVZCUTFnc1RVRkJZeXhGUVVOa0xFdEJRV0VzUlVGRFlpeEpRVUZaTzBsQlJWb3NUVUZCVFN4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUXpkQ0xFMUJRVTBzVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU0zUWl4TlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkZNMElzU1VGQlNTeE5RVUZOTEVsQlFVa3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOMFFpeFBRVUZQTEVOQlFVTXNRMEZCUXp0SlFVZFlMRGhDUVVFNFFqdEpRVU01UWl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETzBsQlEzQkNMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTTdTVUZEYmtJc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXp0SlFVVm9RaXgzUlVGQmQwVTdTVUZEZUVVc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlExWXNTVUZCU1N4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMlFzVDBGQlR5eEpRVUZKTEVWQlFVVTdVVUZEV0N4TlFVRk5MRWRCUVVjc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTjBRaXhOUVVGTkxFZEJRVWNzUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUlhCQ0xFMUJRVTBzVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTTdVVUZEY2tNc1NVRkJTU3hIUVVGSExFbEJRVWtzVlVGQlZTeEZRVUZGTzFsQlEzSkNMRTFCUVUwN1UwRkRVRHRoUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEZWQlFWVXNSVUZCUlR0WlFVTTFRaXhKUVVGSkxFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4TlFVRk5PMmRDUVVOMlFpeExRVUZMTEVkQlFVY3NSMEZCUnl4RFFVRkRPenRuUWtGRldpeE5RVUZOTzFOQlExUTdZVUZCVFN4SlFVRkpMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVN1dVRkRka01zU1VGQlNTeE5RVUZOTEVkQlFVY3NUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJRenRuUWtGRGRrSXNTMEZCU3l4SFFVRkhMRWRCUVVjc1EwRkJRenM3WjBKQlJWb3NUVUZCVFR0VFFVTlVPMkZCUVUwN1dVRkRUQ3hKUVVGSkxFMUJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRPMmRDUVVOMlFpeExRVUZMTEVkQlFVY3NSMEZCUnl4RFFVRkRPenRuUWtGRldpeE5RVUZOTzFOQlExUTdVVUZGUkN4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUXpWQ0xFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRE5VSXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0UlFVVjRRaXhEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZETzB0QlExZzdTVUZGUkN4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETzBsQlEzQkNMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTTdTVUZEYmtJc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXp0SlFVTm9RaXhQUVVGUExFTkJRVU1zUTBGQlF6dEJRVU5ZTEVOQlFVTTdRVUZGUkRzN096dEhRVWxITzBGQlEwZ3NUVUZCVFN4VlFVRlZMR1ZCUVdVc1EwRkROMElzV1VGQmEwSXNSVUZEYkVJc1UwRkJhVUlzUlVGRGFrSXNWVUZCYTBJc1JVRkRiRUlzWVVGQmNVSXNSVUZEY2tJc1RVRkJaMEk3U1VGRmFFSXNUVUZCVFN4clFrRkJhMElzUjBGQlJ5eFJRVUZSTEVOQlFVTXNVMEZCVXl4RlFVRkZMR0ZCUVdFc1EwRkJReXhEUVVGRE8wbEJRemxFTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eFRRVUZUTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1VVRkRiRU1zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExGVkJRVlVzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTnVReXhKUVVGSkxGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETzJkQ1FVTXpRaXhUUVVGVE8xbEJSVmdzVFVGQlRTeEhRVUZITEVkQlFVY3NXVUZCV1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTJ4RExFMUJRVTBzUjBGQlJ5eEhRVUZITEZsQlFWa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTnNReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xbEJRMmhETEZGQlFWRXNRMEZCUXl4clFrRkJhMElzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU0zUXl4UlFVRlJMRU5CUVVNc2EwSkJRV3RDTEVWQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZETjBNc1dVRkJXU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFRRVU16UWp0TFFVTkdPMGxCUTBRc1QwRkJUeXhyUWtGQmEwSXNRMEZCUXp0QlFVTTFRaXhEUVVGRE8wRkJSVVE3T3pzN08wZEJTMGM3UVVGRFNDeE5RVUZOTEZWQlFWVXNWVUZCVlN4RFFVRkRMRWxCUVZVN1NVRkRia01zVFVGQlRTeFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRM2hDTEUxQlFVMHNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVVY0UWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFJRVU4yUXl4TlFVRk5MRTlCUVU4c1IwRkJSeXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETTBJc1RVRkJUU3hSUVVGUkxFZEJRVWNzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUlRWQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhQUVVGUExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRaUVVNelF5eE5RVUZOTEZsQlFWa3NSMEZCUnl4UFFVRlBMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZETlVNc1RVRkJUU3hoUVVGaExFZEJRVWNzVVVGQlVTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJSVGxETEUxQlFVMHNTMEZCU3l4SFFVRkhMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU42UWl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPMWxCUTI1RExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNN1dVRkZPVUlzVFVGQlRTeExRVUZMTEVkQlFVY3NVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRekZDTEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhSUVVGUkxFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTTdXVUZEZEVNc1VVRkJVU3hEUVVGRExHRkJRV0VzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXp0WlFVVm9ReXhSUVVGUkxFTkJRVU1zVVVGQlVTeEZRVUZGTEU5QlFVOHNSVUZCUlN4aFFVRmhMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03VTBGREwwTTdTMEZEUmp0SlFVTkVMRTlCUVU4c1JVRkJReXhQUVVGUExFVkJRVVVzVDBGQlR5eEZRVUZETEVOQlFVTTdRVUZETlVJc1EwRkJRenRCUVVWRU96czdPMGRCU1VjN1FVRkRTQ3hUUVVGVExGRkJRVkVzUTBGRFppeExRVUZsTEVWQlEyWXNTMEZCWlN4RlFVTm1MRTlCUVdVc1JVRkRaaXhIUVVGWE8wbEJSVmdzVDBGQlR5eEhRVUZITEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhQUVVGUExFVkJRVVU3VVVGRE5VSXNUVUZCVFN4VFFVRlRMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZET1VJc1RVRkJUU3hWUVVGVkxFZEJRVWNzVTBGQlV5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTnFReXhKUVVGSkxFbEJRVWtzUjBGQlJ5eEhRVUZITEVOQlFVTTdVVUZGWml4SlFVRkpMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTXNVMEZCVXl4RFFVRkRPMWxCUTJoRExFbEJRVWtzUjBGQlJ5eFRRVUZUTEVOQlFVTTdVVUZGYmtJc1NVRkJTU3hWUVVGVkxFZEJRVWNzVDBGQlR5eEpRVUZKTEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU1zVlVGQlZTeERRVUZETzFsQlEzcEVMRWxCUVVrc1IwRkJSeXhWUVVGVkxFTkJRVU03VVVGSGNFSXNTVUZCU1N4SlFVRkpMRXRCUVVzc1IwRkJSeXhGUVVGRk8xbEJRMmhDTEUxQlFVMDdVMEZEVUR0aFFVRk5PMWxCUTB3c1RVRkJUU3hMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNwQ0xFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03V1VGRGVrSXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF6dFpRVVZ3UWl4TlFVRk5MRXRCUVVzc1IwRkJSeXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEZWtJc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRaUVVONlFpeExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRE8xbEJRM0JDTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNN1UwRkRXanRMUVVOR08wRkJRMGdzUTBGQlF6dEJRVVZFT3p0SFFVVkhPMEZCUTBnc1RVRkJUU3hWUVVGVkxHVkJRV1VzUTBGQlF5eEpRVUZWTEVWQlFVVXNSMEZCVnp0SlFVTnlSQ3hOUVVGTkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGVrSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUXpGQ0xFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVVV4UWl4SlFVRkpMRTlCUVU4c1IwRkJSeXhSUVVGUkxFTkJRVU03U1VGRGRrSXNTVUZCU1N4WFFVRlhMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRmNrSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3VVVGRGJrTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhQUVVGUExFVkJRVVU3V1VGRGRFTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU5zUWl4WFFVRlhMRWRCUVVjc1EwRkJReXhEUVVGRE8xTkJRMnBDTzB0QlEwWTdTVUZGUkN4SlFVRkpMRmRCUVZjc1NVRkJTU3hEUVVGRExFVkJRVVU3VVVGRGNFSXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU4wUWl4UFFVRlBMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRja003VTBGQlRUdFJRVU5NTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRXRHRCUVVOSUxFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVCc2FXTmxibk5sWEc0Z0tseHVJQ29nUTI5d2VYSnBaMmgwSURJd01Ua2dSMjl2WjJ4bElFeE1ReTRnUVd4c0lGSnBaMmgwY3lCU1pYTmxjblpsWkM1Y2JpQXFYRzRnS2lCTWFXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FYQmhZMmhsSUV4cFkyVnVjMlVzSUZabGNuTnBiMjRnTWk0d0lDaDBhR1VnWENKTWFXTmxibk5sWENJcE8xeHVJQ29nZVc5MUlHMWhlU0J1YjNRZ2RYTmxJSFJvYVhNZ1ptbHNaU0JsZUdObGNIUWdhVzRnWTI5dGNHeHBZVzVqWlNCM2FYUm9JSFJvWlNCTWFXTmxibk5sTGx4dUlDb2dXVzkxSUcxaGVTQnZZblJoYVc0Z1lTQmpiM0I1SUc5bUlIUm9aU0JNYVdObGJuTmxJR0YwWEc0Z0tseHVJQ29nSUNBZ0lHaDBkSEE2THk5M2QzY3VZWEJoWTJobExtOXlaeTlzYVdObGJuTmxjeTlNU1VORlRsTkZMVEl1TUZ4dUlDcGNiaUFxSUZWdWJHVnpjeUJ5WlhGMWFYSmxaQ0JpZVNCaGNIQnNhV05oWW14bElHeGhkeUJ2Y2lCaFozSmxaV1FnZEc4Z2FXNGdkM0pwZEdsdVp5d2djMjltZEhkaGNtVmNiaUFxSUdScGMzUnlhV0oxZEdWa0lIVnVaR1Z5SUhSb1pTQk1hV05sYm5ObElHbHpJR1JwYzNSeWFXSjFkR1ZrSUc5dUlHRnVJRndpUVZNZ1NWTmNJaUJDUVZOSlV5eGNiaUFxSUZkSlZFaFBWVlFnVjBGU1VrRk9WRWxGVXlCUFVpQkRUMDVFU1ZSSlQwNVRJRTlHSUVGT1dTQkxTVTVFTENCbGFYUm9aWElnWlhod2NtVnpjeUJ2Y2lCcGJYQnNhV1ZrTGx4dUlDb2dVMlZsSUhSb1pTQk1hV05sYm5ObElHWnZjaUIwYUdVZ2MzQmxZMmxtYVdNZ2JHRnVaM1ZoWjJVZ1oyOTJaWEp1YVc1bklIQmxjbTFwYzNOcGIyNXpJR0Z1WkZ4dUlDb2diR2x0YVhSaGRHbHZibk1nZFc1a1pYSWdkR2hsSUV4cFkyVnVjMlV1WEc0Z0tpQTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JpQXFMMXh1WEc0dktpcGNiaUFxSUZSb2FYTWdhWE1nWVNCS1lYWmhVMk55YVhCMElISmxhVzF3YkdWdFpXNTBZWFJwYjI0Z2IyWWdWVTFCVUNBb2IzSnBaMmx1WVd3Z2JHbGpaVzV6WlNCaVpXeHZkeWtzSUdaeWIyMWNiaUFxSUhSb1pTQndlWFJvYjI0Z2FXMXdiR1Z0Wlc1MFlYUnBiMjRnWm05MWJtUWdZWFFnYUhSMGNITTZMeTluYVhSb2RXSXVZMjl0TDJ4dFkybHVibVZ6TDNWdFlYQXVYRzRnS2x4dUlDb2dRR0YxZEdodmNpQmhibVI1WTI5bGJtVnVRR2R2YjJkc1pTNWpiMjBnS0VGdVpIa2dRMjlsYm1WdUtWeHVJQ292WEc1Y2JpOHFLbHh1SUNvZ1FHeHBZMlZ1YzJWY2JpQXFJRUpUUkNBekxVTnNZWFZ6WlNCTWFXTmxibk5sWEc0Z0tseHVJQ29nUTI5d2VYSnBaMmgwSUNoaktTQXlNREUzTENCTVpXeGhibVFnVFdOSmJtNWxjMXh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxWEc0Z0tpQlNaV1JwYzNSeWFXSjFkR2x2YmlCaGJtUWdkWE5sSUdsdUlITnZkWEpqWlNCaGJtUWdZbWx1WVhKNUlHWnZjbTF6TENCM2FYUm9JRzl5SUhkcGRHaHZkWFJjYmlBcUlHMXZaR2xtYVdOaGRHbHZiaXdnWVhKbElIQmxjbTFwZEhSbFpDQndjbTkyYVdSbFpDQjBhR0YwSUhSb1pTQm1iMnhzYjNkcGJtY2dZMjl1WkdsMGFXOXVjeUJoY21VZ2JXVjBPbHh1SUNwY2JpQXFJQ29nVW1Wa2FYTjBjbWxpZFhScGIyNXpJRzltSUhOdmRYSmpaU0JqYjJSbElHMTFjM1FnY21WMFlXbHVJSFJvWlNCaFltOTJaU0JqYjNCNWNtbG5hSFFnYm05MGFXTmxMQ0IwYUdselhHNGdLaUFnSUd4cGMzUWdiMllnWTI5dVpHbDBhVzl1Y3lCaGJtUWdkR2hsSUdadmJHeHZkMmx1WnlCa2FYTmpiR0ZwYldWeUxseHVJQ3BjYmlBcUlDb2dVbVZrYVhOMGNtbGlkWFJwYjI1eklHbHVJR0pwYm1GeWVTQm1iM0p0SUcxMWMzUWdjbVZ3Y205a2RXTmxJSFJvWlNCaFltOTJaU0JqYjNCNWNtbG5hSFFnYm05MGFXTmxMRnh1SUNvZ0lDQjBhR2x6SUd4cGMzUWdiMllnWTI5dVpHbDBhVzl1Y3lCaGJtUWdkR2hsSUdadmJHeHZkMmx1WnlCa2FYTmpiR0ZwYldWeUlHbHVJSFJvWlNCa2IyTjFiV1Z1ZEdGMGFXOXVYRzRnS2lBZ0lHRnVaQzl2Y2lCdmRHaGxjaUJ0WVhSbGNtbGhiSE1nY0hKdmRtbGtaV1FnZDJsMGFDQjBhR1VnWkdsemRISnBZblYwYVc5dUxseHVJQ3BjYmlBcUlDb2dUbVZwZEdobGNpQjBhR1VnYm1GdFpTQnZaaUIwYUdVZ1kyOXdlWEpwWjJoMElHaHZiR1JsY2lCdWIzSWdkR2hsSUc1aGJXVnpJRzltSUdsMGMxeHVJQ29nSUNCamIyNTBjbWxpZFhSdmNuTWdiV0Y1SUdKbElIVnpaV1FnZEc4Z1pXNWtiM0p6WlNCdmNpQndjbTl0YjNSbElIQnliMlIxWTNSeklHUmxjbWwyWldRZ1puSnZiVnh1SUNvZ0lDQjBhR2x6SUhOdlpuUjNZWEpsSUhkcGRHaHZkWFFnYzNCbFkybG1hV01nY0hKcGIzSWdkM0pwZEhSbGJpQndaWEp0YVhOemFXOXVMbHh1SUNwY2JpQXFJRlJJU1ZNZ1UwOUdWRmRCVWtVZ1NWTWdVRkpQVmtsRVJVUWdRbGtnVkVoRklFTlBVRmxTU1VkSVZDQklUMHhFUlZKVElFRk9SQ0JEVDA1VVVrbENWVlJQVWxNZ1hDSkJVeUJKVTF3aVhHNGdLaUJCVGtRZ1FVNVpJRVZZVUZKRlUxTWdUMUlnU1UxUVRFbEZSQ0JYUVZKU1FVNVVTVVZUTENCSlRrTk1WVVJKVGtjc0lFSlZWQ0JPVDFRZ1RFbE5TVlJGUkNCVVR5d2dWRWhGWEc0Z0tpQkpUVkJNU1VWRUlGZEJVbEpCVGxSSlJWTWdUMFlnVFVWU1EwaEJUbFJCUWtsTVNWUlpJRUZPUkNCR1NWUk9SVk5USUVaUFVpQkJJRkJCVWxSSlExVk1RVklnVUZWU1VFOVRSU0JCVWtWY2JpQXFJRVJKVTBOTVFVbE5SVVF1SUVsT0lFNVBJRVZXUlU1VUlGTklRVXhNSUZSSVJTQkRUMUJaVWtsSFNGUWdTRTlNUkVWU0lFOVNJRU5QVGxSU1NVSlZWRTlTVXlCQ1JTQk1TVUZDVEVWY2JpQXFJRVpQVWlCQlRsa2dSRWxTUlVOVUxDQkpUa1JKVWtWRFZDd2dTVTVEU1VSRlRsUkJUQ3dnVTFCRlEwbEJUQ3dnUlZoRlRWQk1RVkpaTENCUFVpQkRUMDVUUlZGVlJVNVVTVUZNWEc0Z0tpQkVRVTFCUjBWVElDaEpUa05NVlVSSlRrY3NJRUpWVkNCT1QxUWdURWxOU1ZSRlJDQlVUeXdnVUZKUFExVlNSVTFGVGxRZ1QwWWdVMVZDVTFSSlZGVlVSU0JIVDA5RVV5QlBVbHh1SUNvZ1UwVlNWa2xEUlZNN0lFeFBVMU1nVDBZZ1ZWTkZMQ0JFUVZSQkxDQlBVaUJRVWs5R1NWUlRPeUJQVWlCQ1ZWTkpUa1ZUVXlCSlRsUkZVbEpWVUZSSlQwNHBJRWhQVjBWV1JWSmNiaUFxSUVOQlZWTkZSQ0JCVGtRZ1QwNGdRVTVaSUZSSVJVOVNXU0JQUmlCTVNVRkNTVXhKVkZrc0lGZElSVlJJUlZJZ1NVNGdRMDlPVkZKQlExUXNJRk5VVWtsRFZDQk1TVUZDU1V4SlZGa3NYRzRnS2lCUFVpQlVUMUpVSUNoSlRrTk1WVVJKVGtjZ1RrVkhURWxIUlU1RFJTQlBVaUJQVkVoRlVsZEpVMFVwSUVGU1NWTkpUa2NnU1U0Z1FVNVpJRmRCV1NCUFZWUWdUMFlnVkVoRklGVlRSVnh1SUNvZ1QwWWdWRWhKVXlCVFQwWlVWMEZTUlN3Z1JWWkZUaUJKUmlCQlJGWkpVMFZFSUU5R0lGUklSU0JRVDFOVFNVSkpURWxVV1NCUFJpQlRWVU5JSUVSQlRVRkhSUzVjYmlBcUwxeHVYRzVwYlhCdmNuUWdlMUpoYm1SdmJVWnVmU0JtY205dElDY3VMM1Z0WVhBbk8xeHVhVzF3YjNKMElDb2dZWE1nZFhScGJITWdabkp2YlNBbkxpOTFkR2xzY3ljN1hHNWNibVY0Y0c5eWRDQjBlWEJsSUVobFlYQWdQU0J1ZFcxaVpYSmJYVnRkVzEwN1hHNWNiaThxS2x4dUlDb2dJRU52Ym5OMGNuVmpkRzl5SUdadmNpQjBhR1VnYUdWaGNDQnZZbXBsWTNSekxpQlVhR1VnYUdWaGNITWdZWEpsSUhWelpXUmNiaUFxSUdadmNpQmhjSEJ5YjNocGJXRjBaU0J1WldGeVpYTjBJRzVsYVdkb1ltOXlJSE5sWVhKamFDd2diV0ZwYm5SaGFXNXBibWNnWVNCc2FYTjBJRzltSUhCdmRHVnVkR2xoYkZ4dUlDb2dibVZwWjJoaWIzSnpJSE52Y25SbFpDQmllU0IwYUdWcGNpQmthWE4wWVc1alpTNGdWMlVnWVd4emJ5Qm1iR0ZuSUdsbUlIQnZkR1Z1ZEdsaGJDQnVaV2xuYUdKdmNuTmNiaUFxSUdGeVpTQnVaWGRzZVNCaFpHUmxaQ0IwYnlCMGFHVWdiR2x6ZENCdmNpQnViM1F1SUVsdWRHVnlibUZzYkhrZ2RHaHBjeUJwY3lCemRHOXlaV1FnWVhOY2JpQXFJR0VnYzJsdVoyeGxJR0Z5Y21GNU95QjBhR1VnWm1seWMzUWdZWGhwY3lCa1pYUmxjbTFwYm1WeklIZG9aWFJvWlhJZ2QyVWdZWEpsSUd4dmIydHBibWNnWVhRZ2RHaGxYRzRnS2lCaGNuSmhlU0J2WmlCallXNWthV1JoZEdVZ2FXNWthV05sY3l3Z2RHaGxJR0Z5Y21GNUlHOW1JR1JwYzNSaGJtTmxjeXdnYjNJZ2RHaGxJR1pzWVdjZ1lYSnlZWGtnWm05eVhHNGdLaUIzYUdWMGFHVnlJR1ZzWlcxbGJuUnpJR0Z5WlNCdVpYY2diM0lnYm05MExpQkZZV05vSUc5bUlIUm9aWE5sSUdGeWNtRjVjeUJoY21VZ2IyWWdjMmhoY0dWY2JpQXFJQ2hnWUc1UWIybHVkSE5nWUN3Z1lHQnphWHBsWUdBcFhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ0WVd0bFNHVmhjQ2h1VUc5cGJuUnpPaUJ1ZFcxaVpYSXNJSE5wZW1VNklHNTFiV0psY2lrNklFaGxZWEFnZTF4dUlDQmpiMjV6ZENCdFlXdGxRWEp5WVhseklEMGdLR1pwYkd4V1lXeDFaVG9nYm5WdFltVnlLU0E5UGlCN1hHNGdJQ0FnY21WMGRYSnVJSFYwYVd4ekxtVnRjSFI1S0c1UWIybHVkSE1wTG0xaGNDZ29LU0E5UGlCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnZFhScGJITXVabWxzYkdWa0tITnBlbVVzSUdacGJHeFdZV3gxWlNrN1hHNGdJQ0FnZlNrN1hHNGdJSDA3WEc1Y2JpQWdZMjl1YzNRZ2FHVmhjRG9nU0dWaGNDQTlJRnRkTzF4dUlDQm9aV0Z3TG5CMWMyZ29iV0ZyWlVGeWNtRjVjeWd0TVNrcE8xeHVJQ0JvWldGd0xuQjFjMmdvYldGclpVRnljbUY1Y3loSmJtWnBibWwwZVNrcE8xeHVJQ0JvWldGd0xuQjFjMmdvYldGclpVRnljbUY1Y3lnd0tTazdYRzRnSUhKbGRIVnliaUJvWldGd08xeHVmVnh1WEc0dktpcGNiaUFxSUVkbGJtVnlZWFJsSUc1ZmMyRnRjR3hsY3lCdFlXNTVJR2x1ZEdWblpYSnpJR1p5YjIwZ01DQjBieUJ3YjI5c1gzTnBlbVVnYzNWamFDQjBhR0YwSUc1dlhHNGdLaUJwYm5SbFoyVnlJR2x6SUhObGJHVmpkR1ZrSUhSM2FXTmxMaUJVYUdVZ1pIVndiR2xqWVhScGIyNGdZMjl1YzNSeVlXbHVkQ0JwY3lCaFkyaHBaWFpsWkNCMmFXRmNiaUFxSUhKbGFtVmpkR2x2YmlCellXMXdiR2x1Wnk1Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSEpsYW1WamRHbHZibE5oYlhCc1pTaGNiaUFnYmxOaGJYQnNaWE02SUc1MWJXSmxjaXhjYmlBZ2NHOXZiRk5wZW1VNklHNTFiV0psY2l4Y2JpQWdjbUZ1Wkc5dE9pQlNZVzVrYjIxR2JseHVLU0I3WEc0Z0lHTnZibk4wSUhKbGMzVnNkQ0E5SUhWMGFXeHpMbnBsY205ektHNVRZVzF3YkdWektUdGNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCdVUyRnRjR3hsY3pzZ2FTc3JLU0I3WEc0Z0lDQWdiR1YwSUhKbGFtVmpkRk5oYlhCc1pTQTlJSFJ5ZFdVN1hHNGdJQ0FnYkdWMElHb2dQU0F3TzF4dUlDQWdJSGRvYVd4bElDaHlaV3BsWTNSVFlXMXdiR1VwSUh0Y2JpQWdJQ0FnSUdvZ1BTQjFkR2xzY3k1MFlYVlNZVzVrU1c1MEtIQnZiMnhUYVhwbExDQnlZVzVrYjIwcE8xeHVJQ0FnSUNBZ2JHVjBJR0p5YjJ0bGJpQTlJR1poYkhObE8xeHVJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2F5QTlJREE3SUdzZ1BDQnBPeUJyS3lzcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0dvZ1BUMDlJSEpsYzNWc2RGdHJYU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHSnliMnRsYmlBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdsbUlDZ2hZbkp2YTJWdUtTQnlaV3BsWTNSVFlXMXdiR1VnUFNCbVlXeHpaVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVnpkV3gwVzJsZElEMGdhanRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdjbVZ6ZFd4ME8xeHVmVnh1WEc0dktpcGNiaUFxSUZCMWMyZ2dZU0J1WlhjZ1pXeGxiV1Z1ZENCdmJuUnZJSFJvWlNCb1pXRndMaUJVYUdVZ2FHVmhjQ0J6ZEc5eVpYTWdjRzkwWlc1MGFXRnNJRzVsYVdkb1ltOXljMXh1SUNvZ1ptOXlJR1ZoWTJnZ1pHRjBZU0J3YjJsdWRDNGdWR2hsSUdCZ2NtOTNZR0FnY0dGeVlXMWxkR1Z5SUdSbGRHVnliV2x1WlhNZ2QyaHBZMmdnWkdGMFlTQndiMmx1ZENCM1pWeHVJQ29nWVhKbElHRmtaSEpsYzNOcGJtY3NJSFJvWlNCZ1lIZGxhV2RvZEdCZ0lHUmxkR1Z5YldsdVpYTWdkR2hsSUdScGMzUmhibU5sSUNobWIzSWdhR1ZoY0NCemIzSjBhVzVuS1N4Y2JpQXFJSFJvWlNCZ1lHbHVaR1Y0WUdBZ2FYTWdkR2hsSUdWc1pXMWxiblFnZEc4Z1lXUmtMQ0JoYm1RZ2RHaGxJR1pzWVdjZ1pHVjBaWEp0YVc1bGN5QjNhR1YwYUdWeUlIUm9hWE5jYmlBcUlHbHpJSFJ2SUdKbElHTnZibk5wWkdWeVpXUWdZU0J1WlhjZ1lXUmthWFJwYjI0dVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJvWldGd1VIVnphQ2hjYmlBZ2FHVmhjRG9nU0dWaGNDeGNiaUFnY205M09pQnVkVzFpWlhJc1hHNGdJSGRsYVdkb2REb2diblZ0WW1WeUxGeHVJQ0JwYm1SbGVEb2diblZ0WW1WeUxGeHVJQ0JtYkdGbk9pQnVkVzFpWlhKY2JpazZJRzUxYldKbGNpQjdYRzRnSUhKdmR5QTlJRTFoZEdndVpteHZiM0lvY205M0tUdGNiaUFnWTI5dWMzUWdhVzVrYVdObGN5QTlJR2hsWVhCYk1GMWJjbTkzWFR0Y2JpQWdZMjl1YzNRZ2QyVnBaMmgwY3lBOUlHaGxZWEJiTVYxYmNtOTNYVHRjYmlBZ0x5OWpiMjV6ZENCcGMwNWxkeUE5SUdobFlYQmJNbDFiY205M1hUdGNibHh1SUNCcFppQW9kMlZwWjJoMElENDlJSGRsYVdkb2RITmJNRjBwWEc0Z0lDQWdjbVYwZFhKdUlEQTdYRzVjYmx4dUlDQXZMeUJDY21WaGF5QnBaaUIzWlNCaGJISmxZV1I1SUdoaGRtVWdkR2hwY3lCbGJHVnRaVzUwTGx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR2x1WkdsalpYTXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0JwWmlBb2FXNWtaWGdnUFQwOUlHbHVaR2xqWlhOYmFWMHBYRzRnSUNBZ0lDQnlaWFIxY200Z01EdGNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQjFibU5vWldOclpXUklaV0Z3VUhWemFDaG9aV0Z3TENCeWIzY3NJSGRsYVdkb2RDd2dhVzVrWlhnc0lHWnNZV2NwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRkIxYzJnZ1lTQnVaWGNnWld4bGJXVnVkQ0J2Ym5SdklIUm9aU0JvWldGd0xpQlVhR1VnYUdWaGNDQnpkRzl5WlhNZ2NHOTBaVzUwYVdGc0lHNWxhV2RvWW05eWMxeHVJQ29nWm05eUlHVmhZMmdnWkdGMFlTQndiMmx1ZEM0Z1ZHaGxJR0JnY205M1lHQWdjR0Z5WVcxbGRHVnlJR1JsZEdWeWJXbHVaWE1nZDJocFkyZ2daR0YwWVNCd2IybHVkQ0IzWlZ4dUlDb2dZWEpsSUdGa1pISmxjM05wYm1jc0lIUm9aU0JnWUhkbGFXZG9kR0JnSUdSbGRHVnliV2x1WlhNZ2RHaGxJR1JwYzNSaGJtTmxJQ2htYjNJZ2FHVmhjQ0J6YjNKMGFXNW5LU3hjYmlBcUlIUm9aU0JnWUdsdVpHVjRZR0FnYVhNZ2RHaGxJR1ZzWlcxbGJuUWdkRzhnWVdSa0xDQmhibVFnZEdobElHWnNZV2NnWkdWMFpYSnRhVzVsY3lCM2FHVjBhR1Z5SUhSb2FYTmNiaUFxSUdseklIUnZJR0psSUdOdmJuTnBaR1Z5WldRZ1lTQnVaWGNnWVdSa2FYUnBiMjR1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjFibU5vWldOclpXUklaV0Z3VUhWemFDaGNiaUFnYUdWaGNEb2dTR1ZoY0N4Y2JpQWdjbTkzT2lCdWRXMWlaWElzWEc0Z0lIZGxhV2RvZERvZ2JuVnRZbVZ5TEZ4dUlDQnBibVJsZURvZ2JuVnRZbVZ5TEZ4dUlDQm1iR0ZuT2lCdWRXMWlaWEpjYmlrNklHNTFiV0psY2lCN1hHNGdJR052Ym5OMElHbHVaR2xqWlhNZ1BTQm9aV0Z3V3pCZFczSnZkMTA3WEc0Z0lHTnZibk4wSUhkbGFXZG9kSE1nUFNCb1pXRndXekZkVzNKdmQxMDdYRzRnSUdOdmJuTjBJR2x6VG1WM0lEMGdhR1ZoY0ZzeVhWdHliM2RkTzF4dVhHNGdJR2xtSUNoM1pXbG5hSFFnUGowZ2QyVnBaMmgwYzFzd1hTbGNiaUFnSUNCeVpYUjFjbTRnTUR0Y2JseHVYRzRnSUM4dklFbHVjMlZ5ZENCMllXd2dZWFFnY0c5emFYUnBiMjRnZW1WeWIxeHVJQ0IzWldsbmFIUnpXekJkSUQwZ2QyVnBaMmgwTzF4dUlDQnBibVJwWTJWeld6QmRJRDBnYVc1a1pYZzdYRzRnSUdselRtVjNXekJkSUQwZ1pteGhaenRjYmx4dUlDQXZMeUJFWlhOalpXNWtJSFJvWlNCb1pXRndMQ0J6ZDJGd2NHbHVaeUIyWVd4MVpYTWdkVzUwYVd3Z2RHaGxJRzFoZUNCb1pXRndJR055YVhSbGNtbHZiaUJwY3lCdFpYUmNiaUFnYkdWMElHa2dQU0F3TzF4dUlDQnNaWFFnYVZOM1lYQWdQU0F3TzF4dUlDQjNhR2xzWlNBb2RISjFaU2tnZTF4dUlDQWdJR052Ym5OMElHbGpNU0E5SURJZ0tpQnBJQ3NnTVR0Y2JpQWdJQ0JqYjI1emRDQnBZeklnUFNCcFl6RWdLeUF4TzF4dVhHNGdJQ0FnWTI5dWMzUWdhR1ZoY0ZOb1lYQmxNaUE5SUdobFlYQmJNRjFiTUYwdWJHVnVaM1JvTzF4dUlDQWdJR2xtSUNocFl6RWdQajBnYUdWaGNGTm9ZWEJsTWlrZ2UxeHVJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2hwWXpJZ1BqMGdhR1ZoY0ZOb1lYQmxNaWtnZTF4dUlDQWdJQ0FnYVdZZ0tIZGxhV2RvZEhOYmFXTXhYU0ErSUhkbGFXZG9kQ2xjYmlBZ0lDQWdJQ0FnYVZOM1lYQWdQU0JwWXpFN1hHNGdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2QyVnBaMmgwYzF0cFl6RmRJRDQ5SUhkbGFXZG9kSE5iYVdNeVhTa2dlMXh1SUNBZ0lDQWdhV1lnS0hkbGFXZG9kQ0E4SUhkbGFXZG9kSE5iYVdNeFhTbGNiaUFnSUNBZ0lDQWdhVk4zWVhBZ1BTQnBZekU3WEc0Z0lDQWdJQ0JsYkhObFhHNGdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQnBaaUFvZDJWcFoyaDBJRHdnZDJWcFoyaDBjMXRwWXpKZEtWeHVJQ0FnSUNBZ0lDQnBVM2RoY0NBOUlHbGpNanRjYmlBZ0lDQWdJR1ZzYzJWY2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdkMlZwWjJoMGMxdHBYU0E5SUhkbGFXZG9kSE5iYVZOM1lYQmRPMXh1SUNBZ0lHbHVaR2xqWlhOYmFWMGdQU0JwYm1ScFkyVnpXMmxUZDJGd1hUdGNiaUFnSUNCcGMwNWxkMXRwWFNBOUlHbHpUbVYzVzJsVGQyRndYVHRjYmx4dUlDQWdJR2tnUFNCcFUzZGhjRHRjYmlBZ2ZWeHVYRzRnSUhkbGFXZG9kSE5iYVYwZ1BTQjNaV2xuYUhRN1hHNGdJR2x1WkdsalpYTmJhVjBnUFNCcGJtUmxlRHRjYmlBZ2FYTk9aWGRiYVYwZ1BTQm1iR0ZuTzF4dUlDQnlaWFIxY200Z01UdGNibjFjYmx4dUx5b3FYRzRnS2lCQ2RXbHNaQ0JoSUdobFlYQWdiMllnWTJGdVpHbGtZWFJsSUc1bGFXZG9ZbTl5Y3lCbWIzSWdibVZoY21WemRDQnVaV2xuYUdKdmNpQmtaWE5qWlc1MExpQkdiM0pjYmlBcUlHVmhZMmdnZG1WeWRHVjRJSFJvWlNCallXNWthV1JoZEdVZ2JtVnBaMmhpYjNKeklHRnlaU0JoYm5rZ1kzVnljbVZ1ZENCdVpXbG5hR0p2Y25Nc0lHRnVaQ0JoYm5sY2JpQXFJSFpsY25ScFkyVnpJSFJvWVhRZ2FHRjJaU0IwYUdVZ2RtVnlkR1Y0SUdGeklHOXVaU0J2WmlCMGFHVnBjaUJ1WldGeVpYTjBJRzVsYVdkb1ltOXljeTVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHSjFhV3hrUTJGdVpHbGtZWFJsY3loY2JpQWdZM1Z5Y21WdWRFZHlZWEJvT2lCSVpXRndMRnh1SUNCdVZtVnlkR2xqWlhNNklHNTFiV0psY2l4Y2JpQWdiazVsYVdkb1ltOXljem9nYm5WdFltVnlMRnh1SUNCdFlYaERZVzVrYVdSaGRHVnpPaUJ1ZFcxaVpYSXNYRzRnSUhKaGJtUnZiVG9nVW1GdVpHOXRSbTVjYmlrZ2UxeHVJQ0JqYjI1emRDQmpZVzVrYVdSaGRHVk9aV2xuYUdKdmNuTWdQU0J0WVd0bFNHVmhjQ2h1Vm1WeWRHbGpaWE1zSUcxaGVFTmhibVJwWkdGMFpYTXBPMXh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHNVdaWEowYVdObGN6c2dhU3NyS1NCN1hHNGdJQ0FnWm05eUlDaHNaWFFnYWlBOUlEQTdJR29nUENCdVRtVnBaMmhpYjNKek95QnFLeXNwSUh0Y2JpQWdJQ0FnSUdsbUlDaGpkWEp5Wlc1MFIzSmhjR2hiTUYxYmFWMWJhbDBnUENBd0tWeHVJQ0FnSUNBZ0lDQmpiMjUwYVc1MVpUdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ2FXUjRJRDBnWTNWeWNtVnVkRWR5WVhCb1d6QmRXMmxkVzJwZE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYVhOdUlEMGdZM1Z5Y21WdWRFZHlZWEJvV3pKZFcybGRXMnBkTzF4dUlDQWdJQ0FnWTI5dWMzUWdaQ0E5SUhWMGFXeHpMblJoZFZKaGJtUW9jbUZ1Wkc5dEtUdGNiaUFnSUNBZ0lHaGxZWEJRZFhOb0tHTmhibVJwWkdGMFpVNWxhV2RvWW05eWN5d2dhU3dnWkN3Z2FXUjRMQ0JwYzI0cE8xeHVJQ0FnSUNBZ2FHVmhjRkIxYzJnb1kyRnVaR2xrWVhSbFRtVnBaMmhpYjNKekxDQnBaSGdzSUdRc0lHa3NJR2x6YmlrN1hHNGdJQ0FnSUNCamRYSnlaVzUwUjNKaGNHaGJNbDFiYVYxYmFsMGdQU0F3TzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdZMkZ1Wkdsa1lYUmxUbVZwWjJoaWIzSnpPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFZHBkbVZ1SUdGdUlHRnljbUY1SUc5bUlHaGxZWEJ6SUNodlppQnBibVJwWTJWeklHRnVaQ0IzWldsbmFIUnpLU3dnZFc1d1lXTnJJSFJvWlNCb1pXRndYRzRnS2lCdmRYUWdkRzhnWjJsMlpTQmhibVFnWVhKeVlYa2diMllnYzI5eWRHVmtJR3hwYzNSeklHOW1JR2x1WkdsalpYTWdZVzVrSUhkbGFXZG9kSE1nWW5rZ2FXNWpjbVZoYzJsdVoxeHVJQ29nZDJWcFoyaDBMaUJVYUdseklHbHpJR1ZtWm1WamRHbDJaV3g1SUdwMWMzUWdkR2hsSUhObFkyOXVaQ0JvWVd4bUlHOW1JR2hsWVhBZ2MyOXlkQ0FvZEdobElHWnBjbk4wWEc0Z0tpQm9ZV3htSUc1dmRDQmlaV2x1WnlCeVpYRjFhWEpsWkNCemFXNWpaU0IzWlNCaGJISmxZV1I1SUdoaGRtVWdkR2hsSUdSaGRHRWdhVzRnWVNCb1pXRndLUzVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHUmxhR1ZoY0ZOdmNuUW9hR1ZoY0RvZ1NHVmhjQ2tnZTF4dUlDQmpiMjV6ZENCcGJtUnBZMlZ6SUQwZ2FHVmhjRnN3WFR0Y2JpQWdZMjl1YzNRZ2QyVnBaMmgwY3lBOUlHaGxZWEJiTVYwN1hHNWNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCcGJtUnBZMlZ6TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ1kyOXVjM1FnYVc1a1NHVmhjQ0E5SUdsdVpHbGpaWE5iYVYwN1hHNGdJQ0FnWTI5dWMzUWdaR2x6ZEVobFlYQWdQU0IzWldsbmFIUnpXMmxkTzF4dVhHNGdJQ0FnWm05eUlDaHNaWFFnYWlBOUlEQTdJR29nUENCcGJtUklaV0Z3TG14bGJtZDBhQ0F0SURFN0lHb3JLeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdhVzVrU0dWaGNFbHVaR1Y0SUQwZ2FXNWtTR1ZoY0M1c1pXNW5kR2dnTFNCcUlDMGdNVHRjYmlBZ0lDQWdJR052Ym5OMElHUnBjM1JJWldGd1NXNWtaWGdnUFNCa2FYTjBTR1ZoY0M1c1pXNW5kR2dnTFNCcUlDMGdNVHRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdkR1Z0Y0RFZ1BTQnBibVJJWldGd1d6QmRPMXh1SUNBZ0lDQWdhVzVrU0dWaGNGc3dYU0E5SUdsdVpFaGxZWEJiYVc1a1NHVmhjRWx1WkdWNFhUdGNiaUFnSUNBZ0lHbHVaRWhsWVhCYmFXNWtTR1ZoY0VsdVpHVjRYU0E5SUhSbGJYQXhPMXh1WEc0Z0lDQWdJQ0JqYjI1emRDQjBaVzF3TWlBOUlHUnBjM1JJWldGd1d6QmRPMXh1SUNBZ0lDQWdaR2x6ZEVobFlYQmJNRjBnUFNCa2FYTjBTR1ZoY0Z0a2FYTjBTR1ZoY0VsdVpHVjRYVHRjYmlBZ0lDQWdJR1JwYzNSSVpXRndXMlJwYzNSSVpXRndTVzVrWlhoZElEMGdkR1Z0Y0RJN1hHNWNiaUFnSUNBZ0lITnBablJFYjNkdUtHUnBjM1JJWldGd0xDQnBibVJJWldGd0xDQmthWE4wU0dWaGNFbHVaR1Y0TENBd0tUdGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUh0cGJtUnBZMlZ6TENCM1pXbG5hSFJ6ZlR0Y2JuMWNibHh1THlvcVhHNGdLaUJTWlhOMGIzSmxJSFJvWlNCb1pXRndJSEJ5YjNCbGNuUjVJR1p2Y2lCaElHaGxZWEFnZDJsMGFDQmhiaUJ2ZFhRZ2IyWWdjR3hoWTJVZ1pXeGxiV1Z1ZEZ4dUlDb2dZWFFnY0c5emFYUnBiMjRnWUdCbGJIUmdZQzRnVkdocGN5QjNiM0pyY3lCM2FYUm9JR0VnYUdWaGNDQndZV2x5SUhkb1pYSmxJR2hsWVhBeElHTmhjbkpwWlhOY2JpQXFJSFJvWlNCM1pXbG5hSFJ6SUdGdVpDQm9aV0Z3TWlCb2IyeGtjeUIwYUdVZ1kyOXljbVZ6Y0c5dVpHbHVaeUJsYkdWdFpXNTBjeTVjYmlBcUwxeHVablZ1WTNScGIyNGdjMmxtZEVSdmQyNG9YRzRnSUdobFlYQXhPaUJ1ZFcxaVpYSmJYU3hjYmlBZ2FHVmhjREk2SUc1MWJXSmxjbHRkTEZ4dUlDQmpaV2xzYVc1bk9pQnVkVzFpWlhJc1hHNGdJR1ZzZERvZ2JuVnRZbVZ5WEc0cElIdGNiaUFnZDJocGJHVWdLR1ZzZENBcUlESWdLeUF4SUR3Z1kyVnBiR2x1WnlrZ2UxeHVJQ0FnSUdOdmJuTjBJR3hsWm5SRGFHbHNaQ0E5SUdWc2RDQXFJRElnS3lBeE8xeHVJQ0FnSUdOdmJuTjBJSEpwWjJoMFEyaHBiR1FnUFNCc1pXWjBRMmhwYkdRZ0t5QXhPMXh1SUNBZ0lHeGxkQ0J6ZDJGd0lEMGdaV3gwTzF4dVhHNGdJQ0FnYVdZZ0tHaGxZWEF4VzNOM1lYQmRJRHdnYUdWaGNERmJiR1ZtZEVOb2FXeGtYU2xjYmlBZ0lDQWdJSE4zWVhBZ1BTQnNaV1owUTJocGJHUTdYRzVjYmlBZ0lDQnBaaUFvY21sbmFIUkRhR2xzWkNBOElHTmxhV3hwYm1jZ0ppWWdhR1ZoY0RGYmMzZGhjRjBnUENCb1pXRndNVnR5YVdkb2RFTm9hV3hrWFNsY2JpQWdJQ0FnSUhOM1lYQWdQU0J5YVdkb2RFTm9hV3hrTzF4dVhHNWNiaUFnSUNCcFppQW9jM2RoY0NBOVBUMGdaV3gwS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnZEdWdGNERWdQU0JvWldGd01WdGxiSFJkTzF4dUlDQWdJQ0FnYUdWaGNERmJaV3gwWFNBOUlHaGxZWEF4VzNOM1lYQmRPMXh1SUNBZ0lDQWdhR1ZoY0RGYmMzZGhjRjBnUFNCMFpXMXdNVHRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdkR1Z0Y0RJZ1BTQm9aV0Z3TWx0bGJIUmRPMXh1SUNBZ0lDQWdhR1ZoY0RKYlpXeDBYU0E5SUdobFlYQXlXM04zWVhCZE8xeHVJQ0FnSUNBZ2FHVmhjREpiYzNkaGNGMGdQU0IwWlcxd01qdGNiaUFnSUNBZ0lHVnNkQ0E5SUhOM1lYQTdYRzRnSUNBZ2ZWeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dVMlZoY21Ob0lIUm9aU0JvWldGd0lHWnZjaUIwYUdVZ2MyMWhiR3hsYzNRZ1pXeGxiV1Z1ZENCMGFHRjBJR2x6SUhOMGFXeHNJR1pzWVdkblpXUXVYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCemJXRnNiR1Z6ZEVac1lXZG5aV1FvYUdWaGNEb2dTR1ZoY0N3Z2NtOTNPaUJ1ZFcxaVpYSXBJSHRjYmlBZ1kyOXVjM1FnYVc1a0lEMGdhR1ZoY0Zzd1hWdHliM2RkTzF4dUlDQmpiMjV6ZENCa2FYTjBJRDBnYUdWaGNGc3hYVnR5YjNkZE8xeHVJQ0JqYjI1emRDQm1iR0ZuSUQwZ2FHVmhjRnN5WFZ0eWIzZGRPMXh1WEc0Z0lHeGxkQ0J0YVc1RWFYTjBJRDBnU1c1bWFXNXBkSGs3WEc0Z0lHeGxkQ0J5WlhOMWJIUkpibVJsZUNBOUlDMHhPMXh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElENGdhVzVrTG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ2FXWWdLR1pzWVdkYmFWMGdQVDA5SURFZ0ppWWdaR2x6ZEZ0cFhTQThJRzFwYmtScGMzUXBJSHRjYmlBZ0lDQWdJRzFwYmtScGMzUWdQU0JrYVhOMFcybGRPMXh1SUNBZ0lDQWdjbVZ6ZFd4MFNXNWtaWGdnUFNCcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lHbG1JQ2h5WlhOMWJIUkpibVJsZUNBK1BTQXdLU0I3WEc0Z0lDQWdabXhoWjF0eVpYTjFiSFJKYm1SbGVGMGdQU0F3TzF4dUlDQWdJSEpsZEhWeWJpQk5ZWFJvTG1ac2IyOXlLR2x1WkZ0eVpYTjFiSFJKYm1SbGVGMHBPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJSEpsZEhWeWJpQXRNVHRjYmlBZ2ZWeHVmVnh1SWwxOSIsIi8qKlxuICogQGxpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL3V0aWxzJztcbi8qKlxuICogSW50ZXJuYWwgMi1kaW1lbnNpb25hbCBzcGFyc2UgbWF0cml4IGNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBTcGFyc2VNYXRyaXgge1xuICAgIGNvbnN0cnVjdG9yKHJvd3MsIGNvbHMsIHZhbHVlcywgZGltcykge1xuICAgICAgICB0aGlzLmVudHJpZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMublJvd3MgPSAwO1xuICAgICAgICB0aGlzLm5Db2xzID0gMDtcbiAgICAgICAgaWYgKHJvd3MubGVuZ3RoICE9PSBjb2xzLmxlbmd0aCB8fCByb3dzLmxlbmd0aCAhPT0gdmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb3dzLCBjb2xzIGFuZCB2YWx1ZXMgYXJyYXlzIG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgbGVuZ3RoJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETzogQXNzZXJ0IHRoYXQgZGltcyBhcmUgbGVnaXQuXG4gICAgICAgIHRoaXMublJvd3MgPSBkaW1zWzBdO1xuICAgICAgICB0aGlzLm5Db2xzID0gZGltc1sxXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHJvd3NbaV07XG4gICAgICAgICAgICBjb25zdCBjb2wgPSBjb2xzW2ldO1xuICAgICAgICAgICAgdGhpcy5jaGVja0RpbXMocm93LCBjb2wpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5tYWtlS2V5KHJvdywgY29sKTtcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5zZXQoa2V5LCB7IHZhbHVlOiB2YWx1ZXNbaV0sIHJvdywgY29sIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIG1ha2VLZXkocm93LCBjb2wpIHtcbiAgICAgICAgcmV0dXJuIGAke3Jvd306JHtjb2x9YDtcbiAgICB9XG4gICAgY2hlY2tEaW1zKHJvdywgY29sKSB7XG4gICAgICAgIGNvbnN0IHdpdGhpbkJvdW5kcyA9IHJvdyA8IHRoaXMublJvd3MgJiYgY29sIDwgdGhpcy5uQ29scztcbiAgICAgICAgaWYgKCF3aXRoaW5Cb3VuZHMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JvdyBhbmQvb3IgY29sIHNwZWNpZmllZCBvdXRzaWRlIG9mIG1hdHJpeCBkaW1lbnNpb25zJyk7XG4gICAgfVxuICAgIHNldChyb3csIGNvbCwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGVja0RpbXMocm93LCBjb2wpO1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLm1ha2VLZXkocm93LCBjb2wpO1xuICAgICAgICBpZiAoIXRoaXMuZW50cmllcy5oYXMoa2V5KSlcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5zZXQoa2V5LCB7IHZhbHVlLCByb3csIGNvbCB9KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLmdldChrZXkpLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIGdldChyb3csIGNvbCwgZGVmYXVsdFZhbHVlID0gMCkge1xuICAgICAgICAvL3RoaXMuY2hlY2tEaW1zKHJvdywgY29sKTtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5tYWtlS2V5KHJvdywgY29sKTtcbiAgICAgICAgaWYgKHRoaXMuZW50cmllcy5oYXMoa2V5KSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVudHJpZXMuZ2V0KGtleSkudmFsdWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICAgIGdldEFsbChvcmRlcmVkID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByb3dDb2xWYWx1ZXMgPSBuZXcgQXJyYXkodGhpcy5lbnRyaWVzLnNpemUpLmZpbGwobnVsbCk7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgdGhpcy5lbnRyaWVzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICByb3dDb2xWYWx1ZXNbaSsrXSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9yZGVyZWQpIHtcbiAgICAgICAgICAgIC8vIE9yZGVyaW5nIHRoZSByZXN1bHQgaXNuJ3QgcmVxdWlyZWQgZm9yIHByb2Nlc3NpbmcgYnV0IGl0IGRvZXMgbWFrZSBpdCBlYXNpZXIgdG8gd3JpdGUgdGVzdHNcbiAgICAgICAgICAgIHJvd0NvbFZhbHVlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGEucm93ID09PSBiLnJvdylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuY29sIC0gYi5jb2w7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5yb3cgLSBiLnJvdztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3dDb2xWYWx1ZXM7XG4gICAgfVxuICAgIGdldERpbXMoKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5uUm93cywgdGhpcy5uQ29sc107XG4gICAgfVxuICAgIGdldFJvd3MoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcywgKFtfa2V5LCB2YWx1ZV0pID0+IHZhbHVlLnJvdyk7XG4gICAgICAgIC8vIHJldHVybiB0aGlzLnJvd3MgYXMgdW5rbm93biBhcyBudW1iZXJbXTtcbiAgICB9XG4gICAgZ2V0Q29scygpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLCAoW19rZXksIHZhbHVlXSkgPT4gdmFsdWUuY29sKTtcbiAgICAgICAgLy8gcmV0dXJuIHRoaXMuY29scyBhcyB1bmtub3duIGFzIG51bWJlcltdO1xuICAgIH1cbiAgICBnZXRWYWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcywgKFtfa2V5LCB2YWx1ZV0pID0+IHZhbHVlLnZhbHVlKTtcbiAgICAgICAgLy9yZXR1cm4gdGhpcy52YWx1ZXMgYXMgdW5rbm93biBhcyBudW1iZXJbXTtcbiAgICB9XG4gICAgZm9yRWFjaChmbikge1xuICAgICAgICB0aGlzLmVudHJpZXMuZm9yRWFjaCgodmFsdWUpID0+IGZuKHZhbHVlLnZhbHVlLCB2YWx1ZS5yb3csIHZhbHVlLmNvbCkpO1xuICAgIH1cbiAgICBtYXAoZm4pIHtcbiAgICAgICAgY29uc3QgdmFscyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5lbnRyaWVzLnNpemUpO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIHRoaXMuZW50cmllcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdmFsc1tpKytdID0gZm4odmFsdWUudmFsdWUsIHZhbHVlLnJvdywgdmFsdWUuY29sKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRpbXMgPSBbdGhpcy5uUm93cywgdGhpcy5uQ29sc107XG4gICAgICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KHRoaXMuZ2V0Um93cygpLCB0aGlzLmdldENvbHMoKSwgdmFscywgZGltcyk7XG4gICAgfVxuICAgIHRvQXJyYXkoKSB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB1dGlscy5lbXB0eSh0aGlzLm5Sb3dzKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gcm93cy5tYXAoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxzLnplcm9zKHRoaXMubkNvbHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lbnRyaWVzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBvdXRwdXRbdmFsdWUucm93XVt2YWx1ZS5jb2xdID0gdmFsdWUudmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn1cbi8qKlxuICogVHJhbnNwb3NlIGEgc3BhcnNlIG1hdHJpeFxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlKG1hdHJpeCkge1xuICAgIGNvbnN0IG9sZFJvd3MgPSBtYXRyaXguZ2V0Um93cygpO1xuICAgIGNvbnN0IG9sZENvbHMgPSBtYXRyaXguZ2V0Q29scygpO1xuICAgIGNvbnN0IG9sZFZhbHMgPSBtYXRyaXguZ2V0VmFsdWVzKCk7XG4gICAgY29uc3QgbWF0bGVuID0gb2xkQ29scy5sZW5ndGg7XG4gICAgY29uc3QgY29scyA9IG5ldyBJbnQzMkFycmF5KG1hdGxlbik7XG4gICAgY29uc3Qgcm93cyA9IG5ldyBJbnQzMkFycmF5KG1hdGxlbik7XG4gICAgY29uc3QgdmFscyA9IG5ldyBGbG9hdDMyQXJyYXkobWF0bGVuKTtcbiAgICBjb2xzLnNldChvbGRSb3dzKTtcbiAgICByb3dzLnNldChvbGRDb2xzKTtcbiAgICB2YWxzLnNldChvbGRWYWxzKTtcbiAgICBjb25zdCBkaW1zID0gW21hdHJpeC5uQ29scywgbWF0cml4Lm5Sb3dzXTtcbiAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChyb3dzLCBjb2xzLCB2YWxzLCBkaW1zKTtcbn1cbi8qKlxuICogQ29uc3RydWN0IGEgc3BhcnNlIGlkZW50aXR5IG1hdHJpeFxuICovXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkoc2l6ZSkge1xuICAgIGNvbnN0IFtyb3dzXSA9IHNpemU7XG4gICAgY29uc3QgbWF0cml4ID0gbmV3IFNwYXJzZU1hdHJpeChbXSwgW10sIFtdLCBzaXplKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKylcbiAgICAgICAgbWF0cml4LnNldChpLCBpLCAxKTtcbiAgICByZXR1cm4gbWF0cml4O1xufVxuLyoqXG4gKiBFbGVtZW50LXdpc2UgbXVsdGlwbGljYXRpb24gb2YgdHdvIG1hdHJpY2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYWlyd2lzZU11bHRpcGx5KGEsIGIpIHtcbiAgICByZXR1cm4gZWxlbWVudFdpc2UoYSwgYiwgKHgsIHkpID0+IHggKiB5KTtcbn1cbi8qKlxuICogRWxlbWVudC13aXNlIGFkZGl0aW9uIG9mIHR3byBtYXRyaWNlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkKGEsIGIpIHtcbiAgICByZXR1cm4gZWxlbWVudFdpc2UoYSwgYiwgKHgsIHkpID0+IHggKyB5KTtcbn1cbi8qKlxuICogRWxlbWVudC13aXNlIHN1YnRyYWN0aW9uIG9mIHR3byBtYXRyaWNlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3VidHJhY3QoYSwgYikge1xuICAgIHJldHVybiBlbGVtZW50V2lzZShhLCBiLCAoeCwgeSkgPT4geCAtIHkpO1xufVxuLyoqXG4gKiBFbGVtZW50LXdpc2UgbWF4aW11bSBvZiB0d28gbWF0cmljZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1heGltdW0oYSwgYikge1xuICAgIHJldHVybiBlbGVtZW50V2lzZShhLCBiLCAoeCwgeSkgPT4gKHggPiB5ID8geCA6IHkpKTtcbn1cbi8qKlxuICogU2NhbGFyIG11bHRpcGxpY2F0aW9uIG9mIHR3byBtYXRyaWNlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXIoYSwgc2NhbGFyKSB7XG4gICAgcmV0dXJuIGEubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgKiBzY2FsYXI7XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybnMgYSBuZXcgbWF0cml4IHdpdGggemVybyBlbnRyaWVzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbGltaW5hdGVaZXJvcyhtKSB7XG4gICAgY29uc3QgemVyb0luZGljZXMgPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgdmFsdWVzID0gbS5nZXRWYWx1ZXMoKTtcbiAgICBjb25zdCByb3dzID0gbS5nZXRSb3dzKCk7XG4gICAgY29uc3QgY29scyA9IG0uZ2V0Q29scygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh2YWx1ZXNbaV0gPT09IDApXG4gICAgICAgICAgICB6ZXJvSW5kaWNlcy5hZGQoaSk7XG4gICAgfVxuICAgIGNvbnN0IHJlbW92ZUJ5WmVyb0luZGV4ID0gKF8sIGluZGV4KSA9PiAhemVyb0luZGljZXMuaGFzKGluZGV4KTtcbiAgICBjb25zdCBuZXh0VmFsdWVzID0gdmFsdWVzLmZpbHRlcihyZW1vdmVCeVplcm9JbmRleCk7XG4gICAgY29uc3QgbmV4dFJvd3MgPSByb3dzLmZpbHRlcihyZW1vdmVCeVplcm9JbmRleCk7XG4gICAgY29uc3QgbmV4dENvbHMgPSBjb2xzLmZpbHRlcihyZW1vdmVCeVplcm9JbmRleCk7XG4gICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgobmV4dFJvd3MsIG5leHRDb2xzLCBuZXh0VmFsdWVzLCBtLmdldERpbXMoKSk7XG59XG4vKipcbiAqIE5vcm1hbGl6YXRpb24gb2YgYSBzcGFyc2UgbWF0cml4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKG0sIG5vcm1UeXBlID0gXCJsMlwiIC8qIE5vcm1UeXBlLmwyICovKSB7XG4gICAgY29uc3Qgbm9ybUZuID0gbm9ybUZuc1tub3JtVHlwZV07XG4gICAgY29uc3QgY29sc0J5Um93ID0gbmV3IE1hcCgpO1xuICAgIG0uZm9yRWFjaCgoXywgcm93LCBjb2wpID0+IHtcbiAgICAgICAgY29uc3QgY29scyA9IGNvbHNCeVJvdy5nZXQocm93KSB8fCBbXTtcbiAgICAgICAgY29scy5wdXNoKGNvbCk7XG4gICAgICAgIGNvbHNCeVJvdy5zZXQocm93LCBjb2xzKTtcbiAgICB9KTtcbiAgICBjb25zdCBuZXh0TWF0cml4ID0gbmV3IFNwYXJzZU1hdHJpeChbXSwgW10sIFtdLCBtLmdldERpbXMoKSk7XG4gICAgZm9yIChjb25zdCByb3cgb2YgY29sc0J5Um93LmtleXMoKSkge1xuICAgICAgICBjb25zdCBjb2xzID0gY29sc0J5Um93LmdldChyb3cpLnNvcnQoKTtcbiAgICAgICAgY29uc3QgdmFscyA9IGNvbHMubWFwKChjb2wpID0+IG0uZ2V0KHJvdywgY29sKSk7XG4gICAgICAgIGNvbnN0IG5vcm0gPSBub3JtRm4odmFscyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9ybS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIG5leHRNYXRyaXguc2V0KHJvdywgY29sc1tpXSwgbm9ybVtpXSk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0TWF0cml4O1xufVxuY29uc3Qgbm9ybUZucyA9IHtcbiAgICBbXCJtYXhcIiAvKiBOb3JtVHlwZS5tYXggKi9dOiAoeHMpID0+IHtcbiAgICAgICAgbGV0IG1heCA9IC1JbmZpbml0eTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIG1heCA9IHhzW2ldID4gbWF4ID8geHNbaV0gOiBtYXg7XG4gICAgICAgIHJldHVybiB4cy5tYXAoKHgpID0+IHggLyBtYXgpO1xuICAgIH0sXG4gICAgW1wibDFcIiAvKiBOb3JtVHlwZS5sMSAqL106ICh4cykgPT4ge1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHN1bSArPSB4c1tpXTtcbiAgICAgICAgcmV0dXJuIHhzLm1hcCgoeCkgPT4geCAvIHN1bSk7XG4gICAgfSxcbiAgICBbXCJsMlwiIC8qIE5vcm1UeXBlLmwyICovXTogKHhzKSA9PiB7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgc3VtICs9IHhzW2ldICoqIDI7XG4gICAgICAgIHJldHVybiB4cy5tYXAoKHgpID0+IE1hdGguc3FydCh4ICoqIDIgLyBzdW0pKTtcbiAgICB9LFxufTtcbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIGZvciBlbGVtZW50LXdpc2Ugb3BlcmF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZWxlbWVudFdpc2UoYSwgYiwgb3ApIHtcbiAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldCgpO1xuICAgIGNvbnN0IHJvd3MgPSBbXTtcbiAgICBjb25zdCBjb2xzID0gW107XG4gICAgY29uc3QgdmFscyA9IFtdO1xuICAgIGNvbnN0IG9wZXJhdGUgPSAocm93LCBjb2wpID0+IHtcbiAgICAgICAgcm93cy5wdXNoKHJvdyk7XG4gICAgICAgIGNvbHMucHVzaChjb2wpO1xuICAgICAgICBjb25zdCBuZXh0VmFsdWUgPSBvcChhLmdldChyb3csIGNvbCksIGIuZ2V0KHJvdywgY29sKSk7XG4gICAgICAgIHZhbHMucHVzaChuZXh0VmFsdWUpO1xuICAgIH07XG4gICAgY29uc3QgdmFsdWVzQSA9IGEuZ2V0VmFsdWVzKCk7XG4gICAgY29uc3Qgcm93c0EgPSBhLmdldFJvd3MoKTtcbiAgICBjb25zdCBjb2xzQSA9IGEuZ2V0Q29scygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzQS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByb3cgPSByb3dzQVtpXTtcbiAgICAgICAgY29uc3QgY29sID0gY29sc0FbaV07XG4gICAgICAgIGNvbnN0IGtleSA9IGAke3Jvd306JHtjb2x9YDtcbiAgICAgICAgdmlzaXRlZC5hZGQoa2V5KTtcbiAgICAgICAgb3BlcmF0ZShyb3csIGNvbCk7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlc0IgPSBiLmdldFZhbHVlcygpO1xuICAgIGNvbnN0IHJvd3NCID0gYi5nZXRSb3dzKCk7XG4gICAgY29uc3QgY29sc0IgPSBiLmdldENvbHMoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlc0IubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgcm93ID0gcm93c0JbaV07XG4gICAgICAgIGNvbnN0IGNvbCA9IGNvbHNCW2ldO1xuICAgICAgICBjb25zdCBrZXkgPSBgJHtyb3d9OiR7Y29sfWA7XG4gICAgICAgIGlmICh2aXNpdGVkLmhhcyhrZXkpKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIG9wZXJhdGUocm93LCBjb2wpO1xuICAgIH1cbiAgICBjb25zdCBkaW1zID0gW2EublJvd3MsIGEubkNvbHNdO1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KHJvd3MsIGNvbHMsIHZhbHMsIGRpbXMpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGdldHRpbmcgZGF0YSwgaW5kaWNlcywgYW5kIGlucHRyIGFycmF5cyBmcm9tIGEgc3BhcnNlXG4gKiBtYXRyaXggdG8gZm9sbG93IGNzciBtYXRyaXggY29udmVudGlvbnMuIFN1cGVyIGluZWZmaWNpZW50IChhbmQga2luZCBvZlxuICogZGVmZWF0cyB0aGUgcHVycG9zZSBvZiB0aGlzIGNvbnZlbnRpb24pIGJ1dCBhIGxvdCBvZiB0aGUgcG9ydGVkIHB5dGhvbiB0cmVlXG4gKiBzZWFyY2ggbG9naWMgZGVwZW5kcyBvbiB0aGlzIGRhdGEgZm9ybWF0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q1NSKHgpIHtcbiAgICBjb25zdCBlbnRyaWVzID0gW107XG4gICAgeC5mb3JFYWNoKCh2YWx1ZSwgcm93LCBjb2wpID0+IHtcbiAgICAgICAgZW50cmllcy5wdXNoKHsgdmFsdWUsIHJvdywgY29sIH0pO1xuICAgIH0pO1xuICAgIGVudHJpZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBpZiAoYS5yb3cgPT09IGIucm93KVxuICAgICAgICAgICAgcmV0dXJuIGEuY29sIC0gYi5jb2w7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBhLnJvdyAtIGIucm93O1xuICAgIH0pO1xuICAgIGNvbnN0IGluZGljZXMgPSBbXTtcbiAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICBjb25zdCBpbmRwdHIgPSBbXTtcbiAgICBsZXQgY3VycmVudFJvdyA9IC0xO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB7IHJvdywgY29sLCB2YWx1ZSB9ID0gZW50cmllc1tpXTtcbiAgICAgICAgaWYgKHJvdyAhPT0gY3VycmVudFJvdykge1xuICAgICAgICAgICAgY3VycmVudFJvdyA9IHJvdztcbiAgICAgICAgICAgIGluZHB0ci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIGluZGljZXMucHVzaChjb2wpO1xuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB7IGluZGljZXMsIHZhbHVlcywgaW5kcHRyIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liV0YwY21sNExtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpYldGMGNtbDRMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQk96czdPenM3T3pzN096czdPenM3T3p0SFFXbENSenRCUVVWSUxFOUJRVThzUzBGQlN5eExRVUZMTEUxQlFVMHNVMEZCVXl4RFFVRkRPMEZCU1dwRE96dEhRVVZITzBGQlEwZ3NUVUZCVFN4UFFVRlBMRmxCUVZrN1NVRk5ka0lzV1VGRFJTeEpRVUV5UWl4RlFVTXpRaXhKUVVFeVFpeEZRVU16UWl4TlFVRXJRaXhGUVVNdlFpeEpRVUZqTzFGQlZGSXNXVUZCVHl4SFFVRkhMRWxCUVVrc1IwRkJSeXhGUVVGcFFpeERRVUZETzFGQlJXeERMRlZCUVVzc1IwRkJWeXhEUVVGRExFTkJRVU03VVVGRGJFSXNWVUZCU3l4SFFVRlhMRU5CUVVNc1EwRkJRenRSUVZGNlFpeEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRXRCUVVzc1NVRkJTU3hEUVVGRExFMUJRVTBzU1VGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4TFFVRkxMRTFCUVUwc1EwRkJReXhOUVVGTkxFVkJRVVU3V1VGRGFFVXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkRZaXcwUkVGQk5FUXNRMEZETjBRc1EwRkJRenRUUVVOSU8xRkJSVVFzYjBOQlFXOURPMUZCUTNCRExFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM0pDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzSkNMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TlFVRk5MRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFsQlEzUkRMRTFCUVUwc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTndRaXhOUVVGTkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRjRUlzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGVrSXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRia01zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVU1zUzBGQlN5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZETEVOQlFVTXNRMEZCUXp0VFFVTnlSRHRKUVVOSUxFTkJRVU03U1VGRlR5eFBRVUZQTEVOQlFVTXNSMEZCVnl4RlFVRkZMRWRCUVZjN1VVRkRkRU1zVDBGQlR5eEhRVUZITEVkQlFVY3NTVUZCU1N4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVONlFpeERRVUZETzBsQlJVOHNVMEZCVXl4RFFVRkRMRWRCUVZjc1JVRkJSU3hIUVVGWE8xRkJRM2hETEUxQlFVMHNXVUZCV1N4SFFVRkhMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eEpRVUZKTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRE8xRkJRekZFTEVsQlFVa3NRMEZCUXl4WlFVRlpPMWxCUTJZc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eDFSRUZCZFVRc1EwRkJReXhEUVVGRE8wbEJRemRGTEVOQlFVTTdTVUZGUkN4SFFVRkhMRU5CUVVNc1IwRkJWeXhGUVVGRkxFZEJRVmNzUlVGQlJTeExRVUZoTzFGQlEzcERMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNwQ0xFMUJRVTBzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEyNURMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNN1dVRkRlRUlzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVU1zUzBGQlN5eEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVNc1EwRkJReXhEUVVGRE96dFpRVVY2UXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVVXNRMEZCUXl4TFFVRkxMRWRCUVVjc1MwRkJTeXhEUVVGRE8wbEJRM3BETEVOQlFVTTdTVUZGUkN4SFFVRkhMRU5CUVVNc1IwRkJWeXhGUVVGRkxFZEJRVmNzUlVGQlJTeFpRVUZaTEVkQlFVY3NRMEZCUXp0UlFVTTFReXd5UWtGQk1rSTdVVUZETTBJc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGJrTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTTdXVUZEZGtJc1QwRkJUeXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVVc1EwRkJReXhMUVVGTExFTkJRVU03TzFsQlJYQkRMRTlCUVU4c1dVRkJXU3hEUVVGRE8wbEJRM2hDTEVOQlFVTTdTVUZGUkN4TlFVRk5MRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWs3VVVGRGJrSXNUVUZCVFN4WlFVRlpMRWRCUVZrc1NVRkJTU3hMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVVUZEZEVVc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlExWXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUlR0WlFVTTNRaXhaUVVGWkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNN1VVRkROVUlzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEU0N4SlFVRkpMRTlCUVU4c1JVRkJSVHRaUVVOWUxEaEdRVUU0Ump0WlFVTTVSaXhaUVVGWkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8yZENRVU42UWl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF5eERRVUZETEVkQlFVYzdiMEpCUTJwQ0xFOUJRVThzUTBGQlF5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRE96dHZRa0ZGY2tJc1QwRkJUeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNN1dVRkRla0lzUTBGQlF5eERRVUZETEVOQlFVTTdVMEZEU2p0UlFVTkVMRTlCUVU4c1dVRkJXU3hEUVVGRE8wbEJRM1JDTEVOQlFVTTdTVUZGUkN4UFFVRlBPMUZCUTB3c1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wbEJRMnhETEVOQlFVTTdTVUZGUkN4UFFVRlBPMUZCUTB3c1QwRkJUeXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeExRVUZMTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlF6bEVMREpEUVVFeVF6dEpRVU0zUXl4RFFVRkRPMGxCUlVRc1QwRkJUenRSUVVOTUxFOUJRVThzUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNTMEZCU3l4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTTVSQ3d5UTBGQk1rTTdTVUZETjBNc1EwRkJRenRKUVVWRUxGTkJRVk03VVVGRFVDeFBRVUZQTEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkZMRXRCUVVzc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkRiRVVzTkVOQlFUUkRPMGxCUXpWRExFTkJRVU03U1VGRlJDeFBRVUZQTEVOQlFVTXNSVUZCY1VRN1VVRkRNMFFzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhMUVVGTExFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhGUVVGRkxFdEJRVXNzUTBGQlF5eEhRVUZITEVWQlFVVXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGVrVXNRMEZCUXp0SlFVVkVMRWRCUVVjc1EwRkJReXhGUVVGMVJEdFJRVU42UkN4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxGbEJRVmtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRMnBFTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOV0xFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxFVkJRVVU3V1VGRE4wSXNTVUZCU1N4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRVZCUVVVc1MwRkJTeXhEUVVGRExFZEJRVWNzUlVGQlJTeExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRjRVFzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEU0N4TlFVRk5MRWxCUVVrc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJRM1JETEU5QlFVOHNTVUZCU1N4WlFVRlpMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeEZRVUZGTEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1JVRkJSU3hKUVVFeVFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUXpkR0xFTkJRVU03U1VGRlJDeFBRVUZQTzFGQlEwd3NUVUZCVFN4SlFVRkpMRWRCUVdkQ0xFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJRMnhFTEUxQlFVMHNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTzFsQlF6TkNMRTlCUVU4c1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkRha01zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEU0N4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkZPMWxCUXpkQ0xFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNN1VVRkROME1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEU0N4UFFVRlBMRTFCUVUwc1EwRkJRenRKUVVOb1FpeERRVUZETzBOQlEwWTdRVUZGUkRzN1IwRkZSenRCUVVOSUxFMUJRVTBzVlVGQlZTeFRRVUZUTEVOQlFVTXNUVUZCYjBJN1NVRkROVU1zVFVGQlRTeFBRVUZQTEVkQlFVY3NUVUZCVFN4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8wbEJRMnBETEUxQlFVMHNUMEZCVHl4SFFVRkhMRTFCUVUwc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dEpRVU5xUXl4TlFVRk5MRTlCUVU4c1IwRkJSeXhOUVVGTkxFTkJRVU1zVTBGQlV5eEZRVUZGTEVOQlFVTTdTVUZEYmtNc1RVRkJUU3hOUVVGTkxFZEJRVWNzVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXp0SlFVTTVRaXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEZWQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRKUVVOd1F5eE5RVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEpRVU53UXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxGbEJRVmtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0SlFVVjBReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMGxCUTJ4Q0xFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1NVRkRiRUlzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRKUVVOc1FpeE5RVUZOTEVsQlFVa3NSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFVkJRVVVzVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMGxCUXpGRExFOUJRVThzU1VGQlNTeFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdRVUZEYkVRc1EwRkJRenRCUVVWRU96dEhRVVZITzBGQlEwZ3NUVUZCVFN4VlFVRlZMRkZCUVZFc1EwRkJReXhKUVVGak8wbEJRM0pETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU03U1VGRGNFSXNUVUZCVFN4TlFVRk5MRWRCUVVjc1NVRkJTU3haUVVGWkxFTkJRVU1zUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRGJFUXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVsQlFVa3NSVUZCUlN4RFFVRkRMRVZCUVVVN1VVRkRNMElzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlJYUkNMRTlCUVU4c1RVRkJUU3hEUVVGRE8wRkJRMmhDTEVOQlFVTTdRVUZGUkRzN1IwRkZSenRCUVVOSUxFMUJRVTBzVlVGQlZTeG5Ra0ZCWjBJc1EwRkRPVUlzUTBGQlpTeEZRVU5tTEVOQlFXVTdTVUZGWml4UFFVRlBMRmRCUVZjc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpWRExFTkJRVU03UVVGRlJEczdSMEZGUnp0QlFVTklMRTFCUVUwc1ZVRkJWU3hIUVVGSExFTkJRVU1zUTBGQlpTeEZRVUZGTEVOQlFXVTdTVUZEYkVRc1QwRkJUeXhYUVVGWExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNMVF5eERRVUZETzBGQlJVUTdPMGRCUlVjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzVVVGQlVTeERRVUZETEVOQlFXVXNSVUZCUlN4RFFVRmxPMGxCUTNaRUxFOUJRVThzVjBGQlZ5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRE5VTXNRMEZCUXp0QlFVVkVPenRIUVVWSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEU5QlFVOHNRMEZCUXl4RFFVRmxMRVZCUVVVc1EwRkJaVHRKUVVOMFJDeFBRVUZQTEZkQlFWY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEZEVRc1EwRkJRenRCUVVWRU96dEhRVVZITzBGQlEwZ3NUVUZCVFN4VlFVRlZMR05CUVdNc1EwRkJReXhEUVVGbExFVkJRVVVzVFVGQll6dEpRVU0xUkN4UFFVRlBMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eExRVUZoTEVWQlFVVXNSVUZCUlR0UlFVTTNRaXhQUVVGUExFdEJRVXNzUjBGQlJ5eE5RVUZOTEVOQlFVTTdTVUZEZUVJc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRFRDeERRVUZETzBGQlJVUTdPMGRCUlVjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzWTBGQll5eERRVUZETEVOQlFXVTdTVUZETlVNc1RVRkJUU3hYUVVGWExFZEJRVWNzU1VGQlNTeEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTTVRaXhOUVVGTkxFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1NVRkROMElzVFVGQlRTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8wbEJRM3BDTEUxQlFVMHNTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dEpRVU42UWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFJRVU4wUXl4SlFVRkpMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETzFsQlEycENMRmRCUVZjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTMEZEZEVJN1NVRkRSQ3hOUVVGTkxHbENRVUZwUWl4SFFVRkhMRU5CUVVNc1EwRkJUU3hGUVVGRkxFdEJRV0VzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4WFFVRlhMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBsQlF6ZEZMRTFCUVUwc1ZVRkJWU3hIUVVGSExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU1zUTBGQlF6dEpRVU53UkN4TlFVRk5MRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEdsQ1FVRnBRaXhEUVVGRExFTkJRVU03U1VGRGFFUXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhEUVVGRE8wbEJSV2hFTEU5QlFVOHNTVUZCU1N4WlFVRlpMRU5CUVVNc1VVRkJVU3hGUVVGRkxGRkJRVkVzUlVGQlJTeFZRVUZWTEVWQlFVVXNRMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRExFTkJRVU03UVVGRGRrVXNRMEZCUXp0QlFVVkVPenRIUVVWSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEZOQlFWTXNRMEZCUXl4RFFVRmxMRVZCUVVVc1VVRkJVU3g1UWtGQll6dEpRVU12UkN4TlFVRk5MRTFCUVUwc1IwRkJSeXhQUVVGUExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdTVUZGYWtNc1RVRkJUU3hUUVVGVExFZEJRVWNzU1VGQlNTeEhRVUZITEVWQlFXOUNMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVWQlFVVTdVVUZEZUVJc1RVRkJUU3hKUVVGSkxFZEJRVWNzVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRGRFTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5tTEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzBsQlF6TkNMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJSVWdzVFVGQlRTeFZRVUZWTEVkQlFVY3NTVUZCU1N4WlFVRlpMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRExFTkJRVU03U1VGRk4wUXNTMEZCU3l4TlFVRk5MRWRCUVVjc1NVRkJTU3hUUVVGVExFTkJRVU1zU1VGQlNTeEZRVUZGTEVWQlFVVTdVVUZEYkVNc1RVRkJUU3hKUVVGSkxFZEJRVWNzVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVVc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFJRVVY0UXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMmhFTEUxQlFVMHNTVUZCU1N4SFFVRkhMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU14UWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVU3V1VGRGJFTXNWVUZCVlN4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzB0QlEzcERPMGxCUlVRc1QwRkJUeXhWUVVGVkxFTkJRVU03UVVGRGNFSXNRMEZCUXp0QlFVMUVMRTFCUVUwc1QwRkJUeXhIUVVGWk8wbEJRM1pDTERCQ1FVRmpMRVZCUVVVc1EwRkJReXhGUVVGWkxFVkJRVVVzUlVGQlJUdFJRVU12UWl4SlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF6dFJRVU53UWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVU3V1VGRGFFTXNSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRPMUZCUld4RExFOUJRVThzUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJoRExFTkJRVU03U1VGRFJDeDNRa0ZCWVN4RlFVRkZMRU5CUVVNc1JVRkJXU3hGUVVGRkxFVkJRVVU3VVVGRE9VSXNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRMW9zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZPMWxCUTJoRExFZEJRVWNzU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZaaXhQUVVGUExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTm9ReXhEUVVGRE8wbEJRMFFzZDBKQlFXRXNSVUZCUlN4RFFVRkRMRVZCUVZrc1JVRkJSU3hGUVVGRk8xRkJRemxDTEVsQlFVa3NSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOYUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlR0WlFVTm9ReXhIUVVGSExFbEJRVWtzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVWd1FpeFBRVUZQTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTJoRUxFTkJRVU03UTBGRFJpeERRVUZETzBGQlVVWTdPMGRCUlVjN1FVRkRTQ3hUUVVGVExGZEJRVmNzUTBGRGJFSXNRMEZCWlN4RlFVTm1MRU5CUVdVc1JVRkRaaXhGUVVGdlF6dEpRVVZ3UXl4TlFVRk5MRTlCUVU4c1IwRkJSeXhKUVVGSkxFZEJRVWNzUlVGQlZTeERRVUZETzBsQlEyeERMRTFCUVUwc1NVRkJTU3hIUVVGaExFVkJRVVVzUTBGQlF6dEpRVU14UWl4TlFVRk5MRWxCUVVrc1IwRkJZU3hGUVVGRkxFTkJRVU03U1VGRE1VSXNUVUZCVFN4SlFVRkpMRWRCUVdFc1JVRkJSU3hEUVVGRE8wbEJSVEZDTEUxQlFVMHNUMEZCVHl4SFFVRkhMRU5CUVVNc1IwRkJWeXhGUVVGRkxFZEJRVmNzUlVGQlJTeEZRVUZGTzFGQlF6TkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEWml4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEyWXNUVUZCVFN4VFFVRlRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGRrUXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dEpRVU4yUWl4RFFVRkRMRU5CUVVNN1NVRkRSaXhOUVVGTkxFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1NVRkRPVUlzVFVGQlRTeExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8wbEJRekZDTEUxQlFVMHNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dEpRVU14UWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFJRVU4yUXl4TlFVRk5MRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEY2tJc1RVRkJUU3hIUVVGSExFZEJRVWNzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNKQ0xFMUJRVTBzUjBGQlJ5eEhRVUZITEVkQlFVY3NSMEZCUnl4SlFVRkpMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRelZDTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGFrSXNUMEZCVHl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dExRVU51UWp0SlFVVkVMRTFCUVUwc1QwRkJUeXhIUVVGSExFTkJRVU1zUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0SlFVTTVRaXhOUVVGTkxFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1NVRkRNVUlzVFVGQlRTeExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8wbEJRekZDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8xRkJRM1pETEUxQlFVMHNSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU55UWl4TlFVRk5MRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEY2tJc1RVRkJUU3hIUVVGSExFZEJRVWNzUjBGQlJ5eEhRVUZITEVsQlFVa3NSMEZCUnl4RlFVRkZMRU5CUVVNN1VVRkROVUlzU1VGQlNTeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJRenRaUVVGRkxGTkJRVk03VVVGREwwSXNUMEZCVHl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dExRVU51UWp0SlFVVkVMRTFCUVUwc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03U1VGRGFFTXNUMEZCVHl4SlFVRkpMRmxCUVZrc1EwRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeEZRVUZGTEVsQlFVa3NSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRCUVVOc1JDeERRVUZETzBGQlJVUTdPenM3TzBkQlMwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1RVRkJUU3hEUVVGRExFTkJRV1U3U1VGRGNFTXNUVUZCVFN4UFFVRlBMRWRCUVZrc1JVRkJSU3hEUVVGRE8wbEJSVFZDTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhMUVVGTExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4RlFVRkZPMUZCUXpWQ0xFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUXl4TFFVRkxMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlF5eERRVUZETEVOQlFVTTdTVUZEYkVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRlNDeFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFGQlEzQkNMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZETEVOQlFVTXNSMEZCUnp0WlFVTnFRaXhQUVVGUExFTkJRVU1zUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJRenM3V1VGRmNrSXNUMEZCVHl4RFFVRkRMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTTdTVUZEZWtJc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRlNDeE5RVUZOTEU5QlFVOHNSMEZCWVN4RlFVRkZMRU5CUVVNN1NVRkROMElzVFVGQlRTeE5RVUZOTEVkQlFXRXNSVUZCUlN4RFFVRkRPMGxCUXpWQ0xFMUJRVTBzVFVGQlRTeEhRVUZoTEVWQlFVVXNRMEZCUXp0SlFVVTFRaXhKUVVGSkxGVkJRVlVzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTndRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0UlFVTjJReXhOUVVGTkxFVkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4TFFVRkxMRVZCUVVNc1IwRkJSeXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEY2tNc1NVRkJTU3hIUVVGSExFdEJRVXNzVlVGQlZTeEZRVUZGTzFsQlEzUkNMRlZCUVZVc1IwRkJSeXhIUVVGSExFTkJRVU03V1VGRGFrSXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFRRVU5vUWp0UlFVTkVMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEYkVJc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0TFFVTndRanRKUVVWRUxFOUJRVThzUlVGQlF5eFBRVUZQTEVWQlFVVXNUVUZCVFN4RlFVRkZMRTFCUVUwc1JVRkJReXhEUVVGRE8wRkJRMjVETEVOQlFVTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRUJzYVdObGJuTmxYRzRnS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRrZ1IyOXZaMnhsSUV4TVF5NGdRV3hzSUZKcFoyaDBjeUJTWlhObGNuWmxaQzVjYmlBcVhHNGdLaUJNYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUVhCaFkyaGxJRXhwWTJWdWMyVXNJRlpsY25OcGIyNGdNaTR3SUNoMGFHVWdYQ0pNYVdObGJuTmxYQ0lwTzF4dUlDb2dlVzkxSUcxaGVTQnViM1FnZFhObElIUm9hWE1nWm1sc1pTQmxlR05sY0hRZ2FXNGdZMjl0Y0d4cFlXNWpaU0IzYVhSb0lIUm9aU0JNYVdObGJuTmxMbHh1SUNvZ1dXOTFJRzFoZVNCdlluUmhhVzRnWVNCamIzQjVJRzltSUhSb1pTQk1hV05sYm5ObElHRjBYRzRnS2x4dUlDb2dJQ0FnSUdoMGRIQTZMeTkzZDNjdVlYQmhZMmhsTG05eVp5OXNhV05sYm5ObGN5OU1TVU5GVGxORkxUSXVNRnh1SUNwY2JpQXFJRlZ1YkdWemN5QnlaWEYxYVhKbFpDQmllU0JoY0hCc2FXTmhZbXhsSUd4aGR5QnZjaUJoWjNKbFpXUWdkRzhnYVc0Z2QzSnBkR2x1Wnl3Z2MyOW1kSGRoY21WY2JpQXFJR1JwYzNSeWFXSjFkR1ZrSUhWdVpHVnlJSFJvWlNCTWFXTmxibk5sSUdseklHUnBjM1J5YVdKMWRHVmtJRzl1SUdGdUlGd2lRVk1nU1ZOY0lpQkNRVk5KVXl4Y2JpQXFJRmRKVkVoUFZWUWdWMEZTVWtGT1ZFbEZVeUJQVWlCRFQwNUVTVlJKVDA1VElFOUdJRUZPV1NCTFNVNUVMQ0JsYVhSb1pYSWdaWGh3Y21WemN5QnZjaUJwYlhCc2FXVmtMbHh1SUNvZ1UyVmxJSFJvWlNCTWFXTmxibk5sSUdadmNpQjBhR1VnYzNCbFkybG1hV01nYkdGdVozVmhaMlVnWjI5MlpYSnVhVzVuSUhCbGNtMXBjM05wYjI1eklHRnVaRnh1SUNvZ2JHbHRhWFJoZEdsdmJuTWdkVzVrWlhJZ2RHaGxJRXhwWTJWdWMyVXVYRzRnS2lBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmlBcUwxeHVYRzVwYlhCdmNuUWdLaUJoY3lCMWRHbHNjeUJtY205dElDY3VMM1YwYVd4ekp6dGNibHh1ZEhsd1pTQkZiblJ5ZVNBOUlIc2dkbUZzZFdVNklHNTFiV0psY2pzZ2NtOTNPaUJ1ZFcxaVpYSTdJR052YkRvZ2JuVnRZbVZ5SUgwN1hHNWNiaThxS2x4dUlDb2dTVzUwWlhKdVlXd2dNaTFrYVcxbGJuTnBiMjVoYkNCemNHRnljMlVnYldGMGNtbDRJR05zWVhOelhHNGdLaTljYm1WNGNHOXlkQ0JqYkdGemN5QlRjR0Z5YzJWTllYUnlhWGdnZTF4dUlDQndjbWwyWVhSbElHVnVkSEpwWlhNZ1BTQnVaWGNnVFdGd1BITjBjbWx1Wnl3Z1JXNTBjbmsrS0NrN1hHNWNiaUFnY21WaFpHOXViSGtnYmxKdmQzTTZJRzUxYldKbGNpQTlJREE3WEc0Z0lISmxZV1J2Ym14NUlHNURiMnh6T2lCdWRXMWlaWElnUFNBd08xeHVYRzRnSUdOdmJuTjBjblZqZEc5eUtGeHVJQ0FnSUhKdmQzTTZJRzUxYldKbGNsdGRJSHdnU1c1ME16SkJjbkpoZVN4Y2JpQWdJQ0JqYjJ4ek9pQnVkVzFpWlhKYlhTQjhJRWx1ZERNeVFYSnlZWGtzWEc0Z0lDQWdkbUZzZFdWek9pQnVkVzFpWlhKYlhTQjhJRVpzYjJGME16SkJjbkpoZVN4Y2JpQWdJQ0JrYVcxek9pQnVkVzFpWlhKYlhWeHVJQ0FwSUh0Y2JpQWdJQ0JwWmlBb2NtOTNjeTVzWlc1bmRHZ2dJVDA5SUdOdmJITXViR1Z1WjNSb0lIeDhJSEp2ZDNNdWJHVnVaM1JvSUNFOVBTQjJZV3gxWlhNdWJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWEc0Z0lDQWdJQ0FnSUNkeWIzZHpMQ0JqYjJ4eklHRnVaQ0IyWVd4MVpYTWdZWEp5WVhseklHMTFjM1FnWVd4c0lHaGhkbVVnZEdobElITmhiV1VnYkdWdVozUm9KMXh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJVVDBSUE9pQkJjM05sY25RZ2RHaGhkQ0JrYVcxeklHRnlaU0JzWldkcGRDNWNiaUFnSUNCMGFHbHpMbTVTYjNkeklEMGdaR2x0YzFzd1hUdGNiaUFnSUNCMGFHbHpMbTVEYjJ4eklEMGdaR2x0YzFzeFhUdGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElIWmhiSFZsY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2NtOTNJRDBnY205M2MxdHBYVHRjYmlBZ0lDQWdJR052Ym5OMElHTnZiQ0E5SUdOdmJITmJhVjA3WEc0Z0lDQWdJQ0IwYUdsekxtTm9aV05yUkdsdGN5aHliM2NzSUdOdmJDazdYRzRnSUNBZ0lDQmpiMjV6ZENCclpYa2dQU0IwYUdsekxtMWhhMlZMWlhrb2NtOTNMQ0JqYjJ3cE8xeHVJQ0FnSUNBZ2RHaHBjeTVsYm5SeWFXVnpMbk5sZENoclpYa3NJSHQyWVd4MVpUb2dkbUZzZFdWelcybGRMQ0J5YjNjc0lHTnZiSDBwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhCeWFYWmhkR1VnYldGclpVdGxlU2h5YjNjNklHNTFiV0psY2l3Z1kyOXNPaUJ1ZFcxaVpYSXBPaUJ6ZEhKcGJtY2dlMXh1SUNBZ0lISmxkSFZ5YmlCZ0pIdHliM2Q5T2lSN1kyOXNmV0E3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUdOb1pXTnJSR2x0Y3loeWIzYzZJRzUxYldKbGNpd2dZMjlzT2lCdWRXMWlaWElwSUh0Y2JpQWdJQ0JqYjI1emRDQjNhWFJvYVc1Q2IzVnVaSE1nUFNCeWIzY2dQQ0IwYUdsekxtNVNiM2R6SUNZbUlHTnZiQ0E4SUhSb2FYTXVia052YkhNN1hHNGdJQ0FnYVdZZ0tDRjNhWFJvYVc1Q2IzVnVaSE1wWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KM0p2ZHlCaGJtUXZiM0lnWTI5c0lITndaV05wWm1sbFpDQnZkWFJ6YVdSbElHOW1JRzFoZEhKcGVDQmthVzFsYm5OcGIyNXpKeWs3WEc0Z0lIMWNibHh1SUNCelpYUW9jbTkzT2lCdWRXMWlaWElzSUdOdmJEb2diblZ0WW1WeUxDQjJZV3gxWlRvZ2JuVnRZbVZ5S1NCN1hHNGdJQ0FnZEdocGN5NWphR1ZqYTBScGJYTW9jbTkzTENCamIyd3BPMXh1SUNBZ0lHTnZibk4wSUd0bGVTQTlJSFJvYVhNdWJXRnJaVXRsZVNoeWIzY3NJR052YkNrN1hHNGdJQ0FnYVdZZ0tDRjBhR2x6TG1WdWRISnBaWE11YUdGektHdGxlU2twWEc0Z0lDQWdJQ0IwYUdsekxtVnVkSEpwWlhNdWMyVjBLR3RsZVN3Z2UzWmhiSFZsTENCeWIzY3NJR052YkgwcE8xeHVJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lIUm9hWE11Wlc1MGNtbGxjeTVuWlhRb2EyVjVLU0V1ZG1Gc2RXVWdQU0IyWVd4MVpUdGNiaUFnZlZ4dVhHNGdJR2RsZENoeWIzYzZJRzUxYldKbGNpd2dZMjlzT2lCdWRXMWlaWElzSUdSbFptRjFiSFJXWVd4MVpTQTlJREFwSUh0Y2JpQWdJQ0F2TDNSb2FYTXVZMmhsWTJ0RWFXMXpLSEp2ZHl3Z1kyOXNLVHRjYmlBZ0lDQmpiMjV6ZENCclpYa2dQU0IwYUdsekxtMWhhMlZMWlhrb2NtOTNMQ0JqYjJ3cE8xeHVJQ0FnSUdsbUlDaDBhR2x6TG1WdWRISnBaWE11YUdGektHdGxlU2twWEc0Z0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1bGJuUnlhV1Z6TG1kbGRDaHJaWGtwSVM1MllXeDFaVHRjYmlBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0J5WlhSMWNtNGdaR1ZtWVhWc2RGWmhiSFZsTzF4dUlDQjlYRzVjYmlBZ1oyVjBRV3hzS0c5eVpHVnlaV1FnUFNCMGNuVmxLVG9nZXlCMllXeDFaVG9nYm5WdFltVnlPeUJ5YjNjNklHNTFiV0psY2pzZ1kyOXNPaUJ1ZFcxaVpYSWdmVnRkSUh0Y2JpQWdJQ0JqYjI1emRDQnliM2REYjJ4V1lXeDFaWE02SUVWdWRISjVXMTBnUFNCdVpYY2dRWEp5WVhrb2RHaHBjeTVsYm5SeWFXVnpMbk5wZW1VcExtWnBiR3dvYm5Wc2JDazdYRzRnSUNBZ2JHVjBJR2tnUFNBd08xeHVJQ0FnSUhSb2FYTXVaVzUwY21sbGN5NW1iM0pGWVdOb0tDaDJZV3gxWlNrZ1BUNGdlMXh1SUNBZ0lDQWdjbTkzUTI5c1ZtRnNkV1Z6VzJrcksxMGdQU0IyWVd4MVpUdGNiaUFnSUNCOUtUdGNiaUFnSUNCcFppQW9iM0prWlhKbFpDa2dlMXh1SUNBZ0lDQWdMeThnVDNKa1pYSnBibWNnZEdobElISmxjM1ZzZENCcGMyNG5kQ0J5WlhGMWFYSmxaQ0JtYjNJZ2NISnZZMlZ6YzJsdVp5QmlkWFFnYVhRZ1pHOWxjeUJ0WVd0bElHbDBJR1ZoYzJsbGNpQjBieUIzY21sMFpTQjBaWE4wYzF4dUlDQWdJQ0FnY205M1EyOXNWbUZzZFdWekxuTnZjblFvS0dFc0lHSXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR0V1Y205M0lEMDlQU0JpTG5KdmR5bGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZUzVqYjJ3Z0xTQmlMbU52YkR0Y2JpQWdJQ0FnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJoTG5KdmR5QXRJR0l1Y205M08xeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ5YjNkRGIyeFdZV3gxWlhNN1hHNGdJSDFjYmx4dUlDQm5aWFJFYVcxektDazZJRzUxYldKbGNsdGRJSHRjYmlBZ0lDQnlaWFIxY200Z1czUm9hWE11YmxKdmQzTXNJSFJvYVhNdWJrTnZiSE5kTzF4dUlDQjlYRzVjYmlBZ1oyVjBVbTkzY3lncE9pQnVkVzFpWlhKYlhTQjdYRzRnSUNBZ2NtVjBkWEp1SUVGeWNtRjVMbVp5YjIwb2RHaHBjeTVsYm5SeWFXVnpMQ0FvVzE5clpYa3NJSFpoYkhWbFhTa2dQVDRnZG1Gc2RXVXVjbTkzS1R0Y2JpQWdJQ0F2THlCeVpYUjFjbTRnZEdocGN5NXliM2R6SUdGeklIVnVhMjV2ZDI0Z1lYTWdiblZ0WW1WeVcxMDdYRzRnSUgxY2JseHVJQ0JuWlhSRGIyeHpLQ2s2SUc1MWJXSmxjbHRkSUh0Y2JpQWdJQ0J5WlhSMWNtNGdRWEp5WVhrdVpuSnZiU2gwYUdsekxtVnVkSEpwWlhNc0lDaGJYMnRsZVN3Z2RtRnNkV1ZkS1NBOVBpQjJZV3gxWlM1amIyd3BPMXh1SUNBZ0lDOHZJSEpsZEhWeWJpQjBhR2x6TG1OdmJITWdZWE1nZFc1cmJtOTNiaUJoY3lCdWRXMWlaWEpiWFR0Y2JpQWdmVnh1WEc0Z0lHZGxkRlpoYkhWbGN5Z3BPaUJ1ZFcxaVpYSmJYU0I3WEc0Z0lDQWdjbVYwZFhKdUlFRnljbUY1TG1aeWIyMG9kR2hwY3k1bGJuUnlhV1Z6TENBb1cxOXJaWGtzSUhaaGJIVmxYU2tnUFQ0Z2RtRnNkV1V1ZG1Gc2RXVXBPMXh1SUNBdkwzSmxkSFZ5YmlCMGFHbHpMblpoYkhWbGN5QmhjeUIxYm10dWIzZHVJR0Z6SUc1MWJXSmxjbHRkTzF4dUlDQjlYRzVjYmlBZ1ptOXlSV0ZqYUNobWJqb2dLSFpoYkhWbE9pQnVkVzFpWlhJc0lISnZkem9nYm5WdFltVnlMQ0JqYjJ3NklHNTFiV0psY2lrZ1BUNGdkbTlwWkNrNklIWnZhV1FnZTF4dUlDQWdJSFJvYVhNdVpXNTBjbWxsY3k1bWIzSkZZV05vS0NoMllXeDFaU2tnUFQ0Z1ptNG9kbUZzZFdVdWRtRnNkV1VzSUhaaGJIVmxMbkp2ZHl3Z2RtRnNkV1V1WTI5c0tTazdYRzRnSUgxY2JseHVJQ0J0WVhBb1ptNDZJQ2gyWVd4MVpUb2diblZ0WW1WeUxDQnliM2M2SUc1MWJXSmxjaXdnWTI5c09pQnVkVzFpWlhJcElEMCtJRzUxYldKbGNpazZJRk53WVhKelpVMWhkSEpwZUNCN1hHNGdJQ0FnWTI5dWMzUWdkbUZzY3lBOUlHNWxkeUJHYkc5aGRETXlRWEp5WVhrb2RHaHBjeTVsYm5SeWFXVnpMbk5wZW1VcE8xeHVJQ0FnSUd4bGRDQnBJRDBnTUR0Y2JpQWdJQ0IwYUdsekxtVnVkSEpwWlhNdVptOXlSV0ZqYUNnb2RtRnNkV1VwSUQwK0lIdGNiaUFnSUNBZ0lIWmhiSE5iYVNzclhTQTlJR1p1S0haaGJIVmxMblpoYkhWbExDQjJZV3gxWlM1eWIzY3NJSFpoYkhWbExtTnZiQ2s3WEc0Z0lDQWdmU2s3WEc0Z0lDQWdZMjl1YzNRZ1pHbHRjeUE5SUZ0MGFHbHpMbTVTYjNkekxDQjBhR2x6TG01RGIyeHpYVHRjYmlBZ0lDQnlaWFIxY200Z2JtVjNJRk53WVhKelpVMWhkSEpwZUNoMGFHbHpMbWRsZEZKdmQzTW9LU3dnZEdocGN5NW5aWFJEYjJ4ektDa3NJSFpoYkhNZ1lYTWdkVzVyYm05M2JpQmhjeUJ1ZFcxaVpYSmJYU3dnWkdsdGN5azdYRzRnSUgxY2JseHVJQ0IwYjBGeWNtRjVLQ2tnZTF4dUlDQWdJR052Ym5OMElISnZkM002SUhWdVpHVm1hVzVsWkZ0ZElEMGdkWFJwYkhNdVpXMXdkSGtvZEdocGN5NXVVbTkzY3lrN1hHNGdJQ0FnWTI5dWMzUWdiM1YwY0hWMElEMGdjbTkzY3k1dFlYQW9LQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUhWMGFXeHpMbnBsY205ektIUm9hWE11YmtOdmJITXBPMXh1SUNBZ0lIMHBPMXh1SUNBZ0lIUm9hWE11Wlc1MGNtbGxjeTVtYjNKRllXTm9LQ2gyWVd4MVpTa2dQVDRnZTF4dUlDQWdJQ0FnYjNWMGNIVjBXM1poYkhWbExuSnZkMTFiZG1Gc2RXVXVZMjlzWFNBOUlIWmhiSFZsTG5aaGJIVmxPMXh1SUNBZ0lIMHBPMXh1SUNBZ0lISmxkSFZ5YmlCdmRYUndkWFE3WEc0Z0lIMWNibjFjYmx4dUx5b3FYRzRnS2lCVWNtRnVjM0J2YzJVZ1lTQnpjR0Z5YzJVZ2JXRjBjbWw0WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjBjbUZ1YzNCdmMyVW9iV0YwY21sNE9pQlRjR0Z5YzJWTllYUnlhWGdwT2lCVGNHRnljMlZOWVhSeWFYZ2dlMXh1SUNCamIyNXpkQ0J2YkdSU2IzZHpJRDBnYldGMGNtbDRMbWRsZEZKdmQzTW9LVHRjYmlBZ1kyOXVjM1FnYjJ4a1EyOXNjeUE5SUcxaGRISnBlQzVuWlhSRGIyeHpLQ2s3WEc0Z0lHTnZibk4wSUc5c1pGWmhiSE1nUFNCdFlYUnlhWGd1WjJWMFZtRnNkV1Z6S0NrN1hHNGdJR052Ym5OMElHMWhkR3hsYmlBOUlHOXNaRU52YkhNdWJHVnVaM1JvTzF4dUlDQmpiMjV6ZENCamIyeHpJRDBnYm1WM0lFbHVkRE15UVhKeVlYa29iV0YwYkdWdUtUdGNiaUFnWTI5dWMzUWdjbTkzY3lBOUlHNWxkeUJKYm5Rek1rRnljbUY1S0cxaGRHeGxiaWs3WEc0Z0lHTnZibk4wSUhaaGJITWdQU0J1WlhjZ1JteHZZWFF6TWtGeWNtRjVLRzFoZEd4bGJpazdYRzVjYmlBZ1kyOXNjeTV6WlhRb2IyeGtVbTkzY3lrN1hHNGdJSEp2ZDNNdWMyVjBLRzlzWkVOdmJITXBPMXh1SUNCMllXeHpMbk5sZENodmJHUldZV3h6S1R0Y2JpQWdZMjl1YzNRZ1pHbHRjeUE5SUZ0dFlYUnlhWGd1YmtOdmJITXNJRzFoZEhKcGVDNXVVbTkzYzEwN1hHNGdJSEpsZEhWeWJpQnVaWGNnVTNCaGNuTmxUV0YwY21sNEtISnZkM01zSUdOdmJITXNJSFpoYkhNc0lHUnBiWE1wTzF4dWZWeHVYRzR2S2lwY2JpQXFJRU52Ym5OMGNuVmpkQ0JoSUhOd1lYSnpaU0JwWkdWdWRHbDBlU0J0WVhSeWFYaGNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdsa1pXNTBhWFI1S0hOcGVtVTZJRzUxYldKbGNsdGRLVG9nVTNCaGNuTmxUV0YwY21sNElIdGNiaUFnWTI5dWMzUWdXM0p2ZDNOZElEMGdjMmw2WlR0Y2JpQWdZMjl1YzNRZ2JXRjBjbWw0SUQwZ2JtVjNJRk53WVhKelpVMWhkSEpwZUNoYlhTd2dXMTBzSUZ0ZExDQnphWHBsS1R0Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0J5YjNkek95QnBLeXNwWEc0Z0lDQWdiV0YwY21sNExuTmxkQ2hwTENCcExDQXhLVHRjYmx4dUlDQnlaWFIxY200Z2JXRjBjbWw0TzF4dWZWeHVYRzR2S2lwY2JpQXFJRVZzWlcxbGJuUXRkMmx6WlNCdGRXeDBhWEJzYVdOaGRHbHZiaUJ2WmlCMGQyOGdiV0YwY21salpYTmNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhCaGFYSjNhWE5sVFhWc2RHbHdiSGtvWEc0Z0lHRTZJRk53WVhKelpVMWhkSEpwZUN4Y2JpQWdZam9nVTNCaGNuTmxUV0YwY21sNFhHNHBPaUJUY0dGeWMyVk5ZWFJ5YVhnZ2UxeHVJQ0J5WlhSMWNtNGdaV3hsYldWdWRGZHBjMlVvWVN3Z1lpd2dLSGdzSUhrcElEMCtJSGdnS2lCNUtUdGNibjFjYmx4dUx5b3FYRzRnS2lCRmJHVnRaVzUwTFhkcGMyVWdZV1JrYVhScGIyNGdiMllnZEhkdklHMWhkSEpwWTJWelhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJoWkdRb1lUb2dVM0JoY25ObFRXRjBjbWw0TENCaU9pQlRjR0Z5YzJWTllYUnlhWGdwT2lCVGNHRnljMlZOWVhSeWFYZ2dlMXh1SUNCeVpYUjFjbTRnWld4bGJXVnVkRmRwYzJVb1lTd2dZaXdnS0hnc0lIa3BJRDArSUhnZ0t5QjVLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkZiR1Z0Wlc1MExYZHBjMlVnYzNWaWRISmhZM1JwYjI0Z2IyWWdkSGR2SUcxaGRISnBZMlZ6WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnpkV0owY21GamRDaGhPaUJUY0dGeWMyVk5ZWFJ5YVhnc0lHSTZJRk53WVhKelpVMWhkSEpwZUNrNklGTndZWEp6WlUxaGRISnBlQ0I3WEc0Z0lISmxkSFZ5YmlCbGJHVnRaVzUwVjJselpTaGhMQ0JpTENBb2VDd2dlU2tnUFQ0Z2VDQXRJSGtwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRVZzWlcxbGJuUXRkMmx6WlNCdFlYaHBiWFZ0SUc5bUlIUjNieUJ0WVhSeWFXTmxjMXh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2JXRjRhVzExYlNoaE9pQlRjR0Z5YzJWTllYUnlhWGdzSUdJNklGTndZWEp6WlUxaGRISnBlQ2s2SUZOd1lYSnpaVTFoZEhKcGVDQjdYRzRnSUhKbGRIVnliaUJsYkdWdFpXNTBWMmx6WlNoaExDQmlMQ0FvZUN3Z2VTa2dQVDRnS0hnZ1BpQjVJRDhnZUNBNklIa3BLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlRZMkZzWVhJZ2JYVnNkR2x3YkdsallYUnBiMjRnYjJZZ2RIZHZJRzFoZEhKcFkyVnpYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCdGRXeDBhWEJzZVZOallXeGhjaWhoT2lCVGNHRnljMlZOWVhSeWFYZ3NJSE5qWVd4aGNqb2diblZ0WW1WeUtUb2dVM0JoY25ObFRXRjBjbWw0SUh0Y2JpQWdjbVYwZFhKdUlHRXViV0Z3S0NoMllXeDFaVG9nYm5WdFltVnlLU0E5UGlCN1hHNGdJQ0FnY21WMGRYSnVJSFpoYkhWbElDb2djMk5oYkdGeU8xeHVJQ0I5S1R0Y2JuMWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJR0VnYm1WM0lHMWhkSEpwZUNCM2FYUm9JSHBsY204Z1pXNTBjbWxsY3lCeVpXMXZkbVZrTGx4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaV3hwYldsdVlYUmxXbVZ5YjNNb2JUb2dVM0JoY25ObFRXRjBjbWw0S1NCN1hHNGdJR052Ym5OMElIcGxjbTlKYm1ScFkyVnpJRDBnYm1WM0lGTmxkQ2dwTzF4dUlDQmpiMjV6ZENCMllXeDFaWE1nUFNCdExtZGxkRlpoYkhWbGN5Z3BPMXh1SUNCamIyNXpkQ0J5YjNkeklEMGdiUzVuWlhSU2IzZHpLQ2s3WEc0Z0lHTnZibk4wSUdOdmJITWdQU0J0TG1kbGRFTnZiSE1vS1R0Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0IyWVd4MVpYTXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0JwWmlBb2RtRnNkV1Z6VzJsZElEMDlQU0F3S1Z4dUlDQWdJQ0FnZW1WeWIwbHVaR2xqWlhNdVlXUmtLR2twTzF4dUlDQjlYRzRnSUdOdmJuTjBJSEpsYlc5MlpVSjVXbVZ5YjBsdVpHVjRJRDBnS0Y4NklHRnVlU3dnYVc1a1pYZzZJRzUxYldKbGNpa2dQVDRnSVhwbGNtOUpibVJwWTJWekxtaGhjeWhwYm1SbGVDazdYRzRnSUdOdmJuTjBJRzVsZUhSV1lXeDFaWE1nUFNCMllXeDFaWE11Wm1sc2RHVnlLSEpsYlc5MlpVSjVXbVZ5YjBsdVpHVjRLVHRjYmlBZ1kyOXVjM1FnYm1WNGRGSnZkM01nUFNCeWIzZHpMbVpwYkhSbGNpaHlaVzF2ZG1WQ2VWcGxjbTlKYm1SbGVDazdYRzRnSUdOdmJuTjBJRzVsZUhSRGIyeHpJRDBnWTI5c2N5NW1hV3gwWlhJb2NtVnRiM1psUW5sYVpYSnZTVzVrWlhncE8xeHVYRzRnSUhKbGRIVnliaUJ1WlhjZ1UzQmhjbk5sVFdGMGNtbDRLRzVsZUhSU2IzZHpMQ0J1WlhoMFEyOXNjeXdnYm1WNGRGWmhiSFZsY3l3Z2JTNW5aWFJFYVcxektDa3BPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFNXZjbTFoYkdsNllYUnBiMjRnYjJZZ1lTQnpjR0Z5YzJVZ2JXRjBjbWw0TGx4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdibTl5YldGc2FYcGxLRzA2SUZOd1lYSnpaVTFoZEhKcGVDd2dibTl5YlZSNWNHVWdQU0JPYjNKdFZIbHdaUzVzTWlrZ2UxeHVJQ0JqYjI1emRDQnViM0p0Um00Z1BTQnViM0p0Um01elcyNXZjbTFVZVhCbFhUdGNibHh1SUNCamIyNXpkQ0JqYjJ4elFubFNiM2NnUFNCdVpYY2dUV0Z3UEc1MWJXSmxjaXdnYm5WdFltVnlXMTArS0NrN1hHNGdJRzB1Wm05eVJXRmphQ2dvWHl3Z2NtOTNMQ0JqYjJ3cElEMCtJSHRjYmlBZ0lDQmpiMjV6ZENCamIyeHpJRDBnWTI5c2MwSjVVbTkzTG1kbGRDaHliM2NwSUh4OElGdGRPMXh1SUNBZ0lHTnZiSE11Y0hWemFDaGpiMndwTzF4dUlDQWdJR052YkhOQ2VWSnZkeTV6WlhRb2NtOTNMQ0JqYjJ4ektUdGNiaUFnZlNrN1hHNWNiaUFnWTI5dWMzUWdibVY0ZEUxaGRISnBlQ0E5SUc1bGR5QlRjR0Z5YzJWTllYUnlhWGdvVzEwc0lGdGRMQ0JiWFN3Z2JTNW5aWFJFYVcxektDa3BPMXh1WEc0Z0lHWnZjaUFvWTI5dWMzUWdjbTkzSUc5bUlHTnZiSE5DZVZKdmR5NXJaWGx6S0NrcElIdGNiaUFnSUNCamIyNXpkQ0JqYjJ4eklEMGdZMjlzYzBKNVVtOTNMbWRsZENoeWIzY3BJUzV6YjNKMEtDazdYRzVjYmlBZ0lDQmpiMjV6ZENCMllXeHpJRDBnWTI5c2N5NXRZWEFvS0dOdmJDa2dQVDRnYlM1blpYUW9jbTkzTENCamIyd3BLVHRjYmlBZ0lDQmpiMjV6ZENCdWIzSnRJRDBnYm05eWJVWnVLSFpoYkhNcE8xeHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2JtOXliUzVzWlc1bmRHZzdJR2tyS3lsY2JpQWdJQ0FnSUc1bGVIUk5ZWFJ5YVhndWMyVjBLSEp2ZHl3Z1kyOXNjMXRwWFN3Z2JtOXliVnRwWFNrN1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2JtVjRkRTFoZEhKcGVEdGNibjFjYmx4dUx5b3FYRzRnS2lCV1pXTjBiM0lnYm05eWJXRnNhWHBoZEdsdmJpQm1kVzVqZEdsdmJuTmNiaUFxTDF4dWRIbHdaU0JPYjNKdFJtNXpJRDBnZXlCYmEyVjVJR2x1SUU1dmNtMVVlWEJsWFRvZ0tIWTZJRzUxYldKbGNsdGRLU0E5UGlCdWRXMWlaWEpiWFNCOU8xeHVZMjl1YzNRZ2JtOXliVVp1Y3pvZ1RtOXliVVp1Y3lBOUlIdGNiaUFnVzA1dmNtMVVlWEJsTG0xaGVGMDZJQ2g0Y3pvZ2JuVnRZbVZ5VzEwcElEMCtJSHRjYmlBZ0lDQnNaWFFnYldGNElEMGdMVWx1Wm1sdWFYUjVPMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dlSE11YkdWdVozUm9PeUJwS3lzcFhHNGdJQ0FnSUNCdFlYZ2dQU0I0YzF0cFhTQStJRzFoZUNBL0lIaHpXMmxkSURvZ2JXRjRPMXh1WEc0Z0lDQWdjbVYwZFhKdUlIaHpMbTFoY0Nnb2VDa2dQVDRnZUNBdklHMWhlQ2s3WEc0Z0lIMHNYRzRnSUZ0T2IzSnRWSGx3WlM1c01WMDZJQ2g0Y3pvZ2JuVnRZbVZ5VzEwcElEMCtJSHRjYmlBZ0lDQnNaWFFnYzNWdElEMGdNRHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSGh6TG14bGJtZDBhRHNnYVNzcktWeHVJQ0FnSUNBZ2MzVnRJQ3M5SUhoelcybGRPMXh1WEc0Z0lDQWdjbVYwZFhKdUlIaHpMbTFoY0Nnb2VDa2dQVDRnZUNBdklITjFiU2s3WEc0Z0lIMHNYRzRnSUZ0T2IzSnRWSGx3WlM1c01sMDZJQ2g0Y3pvZ2JuVnRZbVZ5VzEwcElEMCtJSHRjYmlBZ0lDQnNaWFFnYzNWdElEMGdNRHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSGh6TG14bGJtZDBhRHNnYVNzcktWeHVJQ0FnSUNBZ2MzVnRJQ3M5SUhoelcybGRJQ29xSURJN1hHNWNiaUFnSUNCeVpYUjFjbTRnZUhNdWJXRndLQ2g0S1NBOVBpQk5ZWFJvTG5OeGNuUW9lQ0FxS2lBeUlDOGdjM1Z0S1NrN1hHNGdJSDBzWEc1OU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1pXNTFiU0JPYjNKdFZIbHdaU0I3WEc0Z0lHMWhlQ0E5SUNkdFlYZ25MRnh1SUNCc01TQTlJQ2RzTVNjc1hHNGdJR3d5SUQwZ0oyd3lKeXhjYm4xY2JseHVMeW9xWEc0Z0tpQklaV3h3WlhJZ1puVnVZM1JwYjI0Z1ptOXlJR1ZzWlcxbGJuUXRkMmx6WlNCdmNHVnlZWFJwYjI1ekxseHVJQ292WEc1bWRXNWpkR2x2YmlCbGJHVnRaVzUwVjJselpTaGNiaUFnWVRvZ1UzQmhjbk5sVFdGMGNtbDRMRnh1SUNCaU9pQlRjR0Z5YzJWTllYUnlhWGdzWEc0Z0lHOXdPaUFvZURvZ2JuVnRZbVZ5TENCNU9pQnVkVzFpWlhJcElEMCtJRzUxYldKbGNseHVLVG9nVTNCaGNuTmxUV0YwY21sNElIdGNiaUFnWTI5dWMzUWdkbWx6YVhSbFpDQTlJRzVsZHlCVFpYUThjM1J5YVc1blBpZ3BPMXh1SUNCamIyNXpkQ0J5YjNkek9pQnVkVzFpWlhKYlhTQTlJRnRkTzF4dUlDQmpiMjV6ZENCamIyeHpPaUJ1ZFcxaVpYSmJYU0E5SUZ0ZE8xeHVJQ0JqYjI1emRDQjJZV3h6T2lCdWRXMWlaWEpiWFNBOUlGdGRPMXh1WEc0Z0lHTnZibk4wSUc5d1pYSmhkR1VnUFNBb2NtOTNPaUJ1ZFcxaVpYSXNJR052YkRvZ2JuVnRZbVZ5S1NBOVBpQjdYRzRnSUNBZ2NtOTNjeTV3ZFhOb0tISnZkeWs3WEc0Z0lDQWdZMjlzY3k1d2RYTm9LR052YkNrN1hHNGdJQ0FnWTI5dWMzUWdibVY0ZEZaaGJIVmxJRDBnYjNBb1lTNW5aWFFvY205M0xDQmpiMndwTENCaUxtZGxkQ2h5YjNjc0lHTnZiQ2twTzF4dUlDQWdJSFpoYkhNdWNIVnphQ2h1WlhoMFZtRnNkV1VwTzF4dUlDQjlPMXh1SUNCamIyNXpkQ0IyWVd4MVpYTkJJRDBnWVM1blpYUldZV3gxWlhNb0tUdGNiaUFnWTI5dWMzUWdjbTkzYzBFZ1BTQmhMbWRsZEZKdmQzTW9LVHRjYmlBZ1kyOXVjM1FnWTI5c2MwRWdQU0JoTG1kbGRFTnZiSE1vS1R0Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0IyWVd4MVpYTkJMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnWTI5dWMzUWdjbTkzSUQwZ2NtOTNjMEZiYVYwN1hHNGdJQ0FnWTI5dWMzUWdZMjlzSUQwZ1kyOXNjMEZiYVYwN1hHNGdJQ0FnWTI5dWMzUWdhMlY1SUQwZ1lDUjdjbTkzZlRva2UyTnZiSDFnTzF4dUlDQWdJSFpwYzJsMFpXUXVZV1JrS0d0bGVTazdYRzRnSUNBZ2IzQmxjbUYwWlNoeWIzY3NJR052YkNrN1hHNGdJSDFjYmx4dUlDQmpiMjV6ZENCMllXeDFaWE5DSUQwZ1lpNW5aWFJXWVd4MVpYTW9LVHRjYmlBZ1kyOXVjM1FnY205M2MwSWdQU0JpTG1kbGRGSnZkM01vS1R0Y2JpQWdZMjl1YzNRZ1kyOXNjMElnUFNCaUxtZGxkRU52YkhNb0tUdGNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMllXeDFaWE5DTG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ1kyOXVjM1FnY205M0lEMGdjbTkzYzBKYmFWMDdYRzRnSUNBZ1kyOXVjM1FnWTI5c0lEMGdZMjlzYzBKYmFWMDdYRzRnSUNBZ1kyOXVjM1FnYTJWNUlEMGdZQ1I3Y205M2ZUb2tlMk52YkgxZ08xeHVJQ0FnSUdsbUlDaDJhWE5wZEdWa0xtaGhjeWhyWlhrcEtTQmpiMjUwYVc1MVpUdGNiaUFnSUNCdmNHVnlZWFJsS0hKdmR5d2dZMjlzS1R0Y2JpQWdmVnh1WEc0Z0lHTnZibk4wSUdScGJYTWdQU0JiWVM1dVVtOTNjeXdnWVM1dVEyOXNjMTA3WEc0Z0lISmxkSFZ5YmlCdVpYY2dVM0JoY25ObFRXRjBjbWw0S0hKdmQzTXNJR052YkhNc0lIWmhiSE1zSUdScGJYTXBPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFaGxiSEJsY2lCbWRXNWpkR2x2YmlCbWIzSWdaMlYwZEdsdVp5QmtZWFJoTENCcGJtUnBZMlZ6TENCaGJtUWdhVzV3ZEhJZ1lYSnlZWGx6SUdaeWIyMGdZU0J6Y0dGeWMyVmNiaUFxSUcxaGRISnBlQ0IwYnlCbWIyeHNiM2NnWTNOeUlHMWhkSEpwZUNCamIyNTJaVzUwYVc5dWN5NGdVM1Z3WlhJZ2FXNWxabVpwWTJsbGJuUWdLR0Z1WkNCcmFXNWtJRzltWEc0Z0tpQmtaV1psWVhSeklIUm9aU0J3ZFhKd2IzTmxJRzltSUhSb2FYTWdZMjl1ZG1WdWRHbHZiaWtnWW5WMElHRWdiRzkwSUc5bUlIUm9aU0J3YjNKMFpXUWdjSGwwYUc5dUlIUnlaV1ZjYmlBcUlITmxZWEpqYUNCc2IyZHBZeUJrWlhCbGJtUnpJRzl1SUhSb2FYTWdaR0YwWVNCbWIzSnRZWFF1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQm5aWFJEVTFJb2VEb2dVM0JoY25ObFRXRjBjbWw0S1NCN1hHNGdJR052Ym5OMElHVnVkSEpwWlhNNklFVnVkSEo1VzEwZ1BTQmJYVHRjYmx4dUlDQjRMbVp2Y2tWaFkyZ29LSFpoYkhWbExDQnliM2NzSUdOdmJDa2dQVDRnZTF4dUlDQWdJR1Z1ZEhKcFpYTXVjSFZ6YUNoN2RtRnNkV1VzSUhKdmR5d2dZMjlzZlNrN1hHNGdJSDBwTzF4dVhHNGdJR1Z1ZEhKcFpYTXVjMjl5ZENnb1lTd2dZaWtnUFQ0Z2UxeHVJQ0FnSUdsbUlDaGhMbkp2ZHlBOVBUMGdZaTV5YjNjcFhHNGdJQ0FnSUNCeVpYUjFjbTRnWVM1amIyd2dMU0JpTG1OdmJEdGNiaUFnSUNCbGJITmxYRzRnSUNBZ0lDQnlaWFIxY200Z1lTNXliM2NnTFNCaUxuSnZkenRjYmlBZ2ZTazdYRzVjYmlBZ1kyOXVjM1FnYVc1a2FXTmxjem9nYm5WdFltVnlXMTBnUFNCYlhUdGNiaUFnWTI5dWMzUWdkbUZzZFdWek9pQnVkVzFpWlhKYlhTQTlJRnRkTzF4dUlDQmpiMjV6ZENCcGJtUndkSEk2SUc1MWJXSmxjbHRkSUQwZ1cxMDdYRzVjYmlBZ2JHVjBJR04xY25KbGJuUlNiM2NnUFNBdE1UdGNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCbGJuUnlhV1Z6TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ1kyOXVjM1FnZTNKdmR5d2dZMjlzTENCMllXeDFaWDBnUFNCbGJuUnlhV1Z6VzJsZE8xeHVJQ0FnSUdsbUlDaHliM2NnSVQwOUlHTjFjbkpsYm5SU2IzY3BJSHRjYmlBZ0lDQWdJR04xY25KbGJuUlNiM2NnUFNCeWIzYzdYRzRnSUNBZ0lDQnBibVJ3ZEhJdWNIVnphQ2hwS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdhVzVrYVdObGN5NXdkWE5vS0dOdmJDazdYRzRnSUNBZ2RtRnNkV1Z6TG5CMWMyZ29kbUZzZFdVcE8xeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlIdHBibVJwWTJWekxDQjJZV3gxWlhNc0lHbHVaSEIwY24wN1hHNTlYRzRpWFgwPSIsIi8qKlxuICogQGxpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG4vKipcbiAqIFRoaXMgaXMgYSBKYXZhU2NyaXB0IHJlaW1wbGVtZW50YXRpb24gb2YgVU1BUCAob3JpZ2luYWwgbGljZW5zZSBiZWxvdyksIGZyb21cbiAqIHRoZSBweXRob24gaW1wbGVtZW50YXRpb24gZm91bmQgYXQgaHR0cHM6Ly9naXRodWIuY29tL2xtY2lubmVzL3VtYXAuXG4gKlxuICogQGF1dGhvciBhbmR5Y29lbmVuQGdvb2dsZS5jb20gKEFuZHkgQ29lbmVuKVxuICovXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBCU0QgMy1DbGF1c2UgTGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNywgTGVsYW5kIE1jSW5uZXNcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICogICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAqICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFXG4gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTFxuICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1JcbiAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSXG4gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLFxuICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IGNsYXNzIEZsYXRUcmVlIHtcbiAgICBjb25zdHJ1Y3RvcihoeXBlcnBsYW5lcywgb2Zmc2V0cywgY2hpbGRyZW4sIGluZGljZXMpIHtcbiAgICAgICAgdGhpcy5oeXBlcnBsYW5lcyA9IGh5cGVycGxhbmVzO1xuICAgICAgICB0aGlzLm9mZnNldHMgPSBvZmZzZXRzO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXM7XG4gICAgfVxufVxuLyoqXG4gKiBCdWlsZCBhIHJhbmRvbSBwcm9qZWN0aW9uIGZvcmVzdCB3aXRoIGBgblRyZWVzYGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlRm9yZXN0KGRhdGEsIG5OZWlnaGJvcnMsIG5UcmVlcywgcmFuZG9tKSB7XG4gICAgY29uc3QgbGVhZlNpemUgPSBNYXRoLm1heCgxMCwgbk5laWdoYm9ycyk7XG4gICAgY29uc3QgdHJlZXMgPSB1dGlsc1xuICAgICAgICAucmFuZ2UoblRyZWVzKVxuICAgICAgICAubWFwKChfLCBpKSA9PiBtYWtlVHJlZShkYXRhLCBsZWFmU2l6ZSwgaSwgcmFuZG9tKSk7XG4gICAgY29uc3QgZm9yZXN0ID0gdHJlZXMubWFwKCh0cmVlKSA9PiBmbGF0dGVuVHJlZSh0cmVlLCBsZWFmU2l6ZSkpO1xuICAgIHJldHVybiBmb3Jlc3Q7XG59XG4vKipcbiAqIENvbnN0cnVjdCBhIHJhbmRvbSBwcm9qZWN0aW9uIHRyZWUgYmFzZWQgb24gYGBkYXRhYGAgd2l0aCBsZWF2ZXNcbiAqIG9mIHNpemUgYXQgbW9zdCBgYGxlYWZTaXplYGBcbiAqL1xuZnVuY3Rpb24gbWFrZVRyZWUoZGF0YSwgbGVhZlNpemUgPSAzMCwgbiwgcmFuZG9tKSB7XG4gICAgY29uc3QgaW5kaWNlcyA9IHV0aWxzLnJhbmdlKGRhdGEubGVuZ3RoKTtcbiAgICBjb25zdCB0cmVlID0gbWFrZUV1Y2xpZGVhblRyZWUoZGF0YSwgaW5kaWNlcywgbGVhZlNpemUsIG4sIHJhbmRvbSk7XG4gICAgcmV0dXJuIHRyZWU7XG59XG5mdW5jdGlvbiBtYWtlRXVjbGlkZWFuVHJlZShkYXRhLCBpbmRpY2VzLCBsZWFmU2l6ZSA9IDMwLCBxLCByYW5kb20pIHtcbiAgICBpZiAoaW5kaWNlcy5sZW5ndGggPiBsZWFmU2l6ZSkge1xuICAgICAgICBjb25zdCBzcGxpdFJlc3VsdHMgPSBldWNsaWRlYW5SYW5kb21Qcm9qZWN0aW9uU3BsaXQoZGF0YSwgaW5kaWNlcywgcmFuZG9tKTtcbiAgICAgICAgY29uc3QgeyBpbmRpY2VzTGVmdCwgaW5kaWNlc1JpZ2h0LCBoeXBlcnBsYW5lLCBvZmZzZXQgfSA9IHNwbGl0UmVzdWx0cztcbiAgICAgICAgY29uc3QgbGVmdENoaWxkID0gbWFrZUV1Y2xpZGVhblRyZWUoZGF0YSwgaW5kaWNlc0xlZnQsIGxlYWZTaXplLCBxICsgMSwgcmFuZG9tKTtcbiAgICAgICAgY29uc3QgcmlnaHRDaGlsZCA9IG1ha2VFdWNsaWRlYW5UcmVlKGRhdGEsIGluZGljZXNSaWdodCwgbGVhZlNpemUsIHEgKyAxLCByYW5kb20pO1xuICAgICAgICBjb25zdCBub2RlID0geyBsZWZ0Q2hpbGQsIHJpZ2h0Q2hpbGQsIGlzTGVhZjogZmFsc2UsIGh5cGVycGxhbmUsIG9mZnNldCB9O1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB7IGluZGljZXMsIGlzTGVhZjogdHJ1ZSB9O1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG59XG4vKipcbiAqIEdpdmVuIGEgc2V0IG9mIGBgaW5kaWNlc2BgIGZvciBkYXRhIHBvaW50cyBmcm9tIGBgZGF0YWBgLCBjcmVhdGVcbiAqIGEgcmFuZG9tIGh5cGVycGxhbmUgdG8gc3BsaXQgdGhlIGRhdGEsIHJldHVybmluZyB0d28gYXJyYXlzIGluZGljZXNcbiAqIHRoYXQgZmFsbCBvbiBlaXRoZXIgc2lkZSBvZiB0aGUgaHlwZXJwbGFuZS4gVGhpcyBpcyB0aGUgYmFzaXMgZm9yIGFcbiAqIHJhbmRvbSBwcm9qZWN0aW9uIHRyZWUsIHdoaWNoIHNpbXBseSB1c2VzIHRoaXMgc3BsaXR0aW5nIHJlY3Vyc2l2ZWx5LlxuICogVGhpcyBwYXJ0aWN1bGFyIHNwbGl0IHVzZXMgZXVjbGlkZWFuIGRpc3RhbmNlIHRvIGRldGVybWluZSB0aGUgaHlwZXJwbGFuZVxuICogYW5kIHdoaWNoIHNpZGUgZWFjaCBkYXRhIHNhbXBsZSBmYWxscyBvbi5cbiAqL1xuZnVuY3Rpb24gZXVjbGlkZWFuUmFuZG9tUHJvamVjdGlvblNwbGl0KGRhdGEsIGluZGljZXMsIHJhbmRvbSkge1xuICAgIC8vY29uc3QgZGltID0gMTtcbiAgICAvLyBTZWxlY3QgdHdvIHJhbmRvbSBwb2ludHMsIHNldCB0aGUgaHlwZXJwbGFuZSBiZXR3ZWVuIHRoZW1cbiAgICBjb25zdCBsZWZ0SW5kZXggPSB1dGlscy50YXVSYW5kSW50KGluZGljZXMubGVuZ3RoLCByYW5kb20pO1xuICAgIGxldCByaWdodEluZGV4ID0gdXRpbHMudGF1UmFuZEludChpbmRpY2VzLmxlbmd0aCwgcmFuZG9tKTtcbiAgICByaWdodEluZGV4ICs9IGxlZnRJbmRleCA9PT0gcmlnaHRJbmRleCA/IDEgOiAwO1xuICAgIHJpZ2h0SW5kZXggPSByaWdodEluZGV4ICUgaW5kaWNlcy5sZW5ndGg7XG4gICAgY29uc3QgbGVmdCA9IGluZGljZXNbbGVmdEluZGV4XTtcbiAgICBjb25zdCByaWdodCA9IGluZGljZXNbcmlnaHRJbmRleF07XG4gICAgLy8gQ29tcHV0ZSB0aGUgbm9ybWFsIHZlY3RvciB0byB0aGUgaHlwZXJwbGFuZSAodGhlIHZlY3RvciBiZXR3ZWVuIHRoZSB0d29cbiAgICAvLyBwb2ludHMpIGFuZCB0aGUgb2Zmc2V0IGZyb20gdGhlIG9yaWdpblxuICAgIGxldCBoeXBlcnBsYW5lT2Zmc2V0ID0gMDtcbiAgICBsZXQgaHlwZXJwbGFuZVZlY3RvciA9IDA7XG4gICAgaHlwZXJwbGFuZVZlY3RvciA9IGRhdGFbbGVmdF0gLSBkYXRhW3JpZ2h0XTtcbiAgICBoeXBlcnBsYW5lT2Zmc2V0IC09XG4gICAgICAgIChoeXBlcnBsYW5lVmVjdG9yICogKGRhdGFbbGVmdF0gKyBkYXRhW3JpZ2h0XSkpIC8gMi4wO1xuICAgIC8vIEZvciBlYWNoIHBvaW50IGNvbXB1dGUgdGhlIG1hcmdpbiAocHJvamVjdCBpbnRvIG5vcm1hbCB2ZWN0b3IpXG4gICAgLy8gSWYgd2UgYXJlIG9uIGxvd2VyIHNpZGUgb2YgdGhlIGh5cGVycGxhbmUgcHV0IGluIG9uZSBwaWxlLCBvdGhlcndpc2VcbiAgICAvLyBwdXQgaXQgaW4gdGhlIG90aGVyIHBpbGUgKGlmIHdlIGhpdCBoeXBlcnBsYW5lIG9uIHRoZSBub3NlLCBmbGlwIGEgY29pbilcbiAgICBsZXQgbkxlZnQgPSAwO1xuICAgIGxldCBuUmlnaHQgPSAwO1xuICAgIGNvbnN0IHNpZGUgPSB1dGlscy56ZXJvcyhpbmRpY2VzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBtYXJnaW4gPSBoeXBlcnBsYW5lT2Zmc2V0O1xuICAgICAgICBtYXJnaW4gKz0gaHlwZXJwbGFuZVZlY3RvciAqIGRhdGFbaW5kaWNlc1tpXV07XG4gICAgICAgIGlmIChtYXJnaW4gPT09IDApIHtcbiAgICAgICAgICAgIHNpZGVbaV0gPSB1dGlscy50YXVSYW5kSW50KDIsIHJhbmRvbSk7XG4gICAgICAgICAgICBpZiAoc2lkZVtpXSA9PT0gMClcbiAgICAgICAgICAgICAgICBuTGVmdCArPSAxO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIG5SaWdodCArPSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hcmdpbiA+IDApIHtcbiAgICAgICAgICAgIHNpZGVbaV0gPSAwO1xuICAgICAgICAgICAgbkxlZnQgKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNpZGVbaV0gPSAxO1xuICAgICAgICAgICAgblJpZ2h0ICs9IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTm93IHRoYXQgd2UgaGF2ZSB0aGUgY291bnRzLCBhbGxvY2F0ZSBhcnJheXNcbiAgICBjb25zdCBpbmRpY2VzTGVmdCA9IHV0aWxzLnplcm9zKG5MZWZ0KTtcbiAgICBjb25zdCBpbmRpY2VzUmlnaHQgPSB1dGlscy56ZXJvcyhuUmlnaHQpO1xuICAgIC8vIFBvcHVsYXRlIHRoZSBhcnJheXMgd2l0aCBpbmRpY2VzIGFjY29yZGluZyB0byB3aGljaCBzaWRlIHRoZXkgZmVsbCBvblxuICAgIG5MZWZ0ID0gMDtcbiAgICBuUmlnaHQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2lkZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoc2lkZVtpXSA9PT0gMCkge1xuICAgICAgICAgICAgaW5kaWNlc0xlZnRbbkxlZnRdID0gaW5kaWNlc1tpXTtcbiAgICAgICAgICAgIG5MZWZ0ICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpbmRpY2VzUmlnaHRbblJpZ2h0XSA9IGluZGljZXNbaV07XG4gICAgICAgICAgICBuUmlnaHQgKz0gMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBpbmRpY2VzTGVmdCxcbiAgICAgICAgaW5kaWNlc1JpZ2h0LFxuICAgICAgICBoeXBlcnBsYW5lOiBoeXBlcnBsYW5lVmVjdG9yLFxuICAgICAgICBvZmZzZXQ6IGh5cGVycGxhbmVPZmZzZXQsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGZsYXR0ZW5UcmVlKHRyZWUsIGxlYWZTaXplKSB7XG4gICAgY29uc3Qgbk5vZGVzID0gbnVtTm9kZXModHJlZSk7XG4gICAgY29uc3QgbkxlYXZlcyA9IG51bUxlYXZlcyh0cmVlKTtcbiAgICAvLyBUT0RPOiBWZXJpZnkgdGhhdCBzcGFyc2UgY29kZSBpcyBub3QgcmVsZXZhbnQuLi5cbiAgICBjb25zdCBoeXBlcnBsYW5lcyA9IHV0aWxzXG4gICAgICAgIC5yYW5nZShuTm9kZXMpXG4gICAgICAgIC5tYXAoKCkgPT4gdHJlZS5oeXBlcnBsYW5lID8gMSA6IDApO1xuICAgIGNvbnN0IG9mZnNldHMgPSB1dGlscy56ZXJvcyhuTm9kZXMpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdXRpbHMucmFuZ2Uobk5vZGVzKS5tYXAoKCkgPT4gWy0xLCAtMV0pO1xuICAgIGNvbnN0IGluZGljZXMgPSB1dGlsc1xuICAgICAgICAucmFuZ2UobkxlYXZlcylcbiAgICAgICAgLm1hcCgoKSA9PiB1dGlscy5yYW5nZShsZWFmU2l6ZSkubWFwKCgpID0+IC0xKSk7XG4gICAgcmVjdXJzaXZlRmxhdHRlbih0cmVlLCBoeXBlcnBsYW5lcywgb2Zmc2V0cywgY2hpbGRyZW4sIGluZGljZXMsIDAsIDApO1xuICAgIHJldHVybiBuZXcgRmxhdFRyZWUoaHlwZXJwbGFuZXMsIG9mZnNldHMsIGNoaWxkcmVuLCBpbmRpY2VzKTtcbn1cbmZ1bmN0aW9uIHJlY3Vyc2l2ZUZsYXR0ZW4odHJlZSwgaHlwZXJwbGFuZXMsIG9mZnNldHMsIGNoaWxkcmVuLCBpbmRpY2VzLCBub2RlTnVtLCBsZWFmTnVtKSB7XG4gICAgaWYgKHRyZWUuaXNMZWFmKSB7XG4gICAgICAgIGNoaWxkcmVuW25vZGVOdW1dWzBdID0gLWxlYWZOdW07XG4gICAgICAgIC8vIFRPRE86IFRyaXBsZSBjaGVjayB0aGlzIG9wZXJhdGlvbiBjb3JyZXNwb25kcyB0b1xuICAgICAgICAvLyBpbmRpY2VzW2xlYWZOdW0gOiB0cmVlLmluZGljZXMuc2hhcGVbMF1dID0gdHJlZS5pbmRpY2VzXG4gICAgICAgIGluZGljZXNbbGVhZk51bV0uc3BsaWNlKDAsIHRyZWUuaW5kaWNlcy5sZW5ndGgsIC4uLnRyZWUuaW5kaWNlcyk7XG4gICAgICAgIGxlYWZOdW0gKz0gMTtcbiAgICAgICAgcmV0dXJuIHsgbm9kZU51bSwgbGVhZk51bSB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaHlwZXJwbGFuZXNbbm9kZU51bV0gPSB0cmVlLmh5cGVycGxhbmU7XG4gICAgICAgIG9mZnNldHNbbm9kZU51bV0gPSB0cmVlLm9mZnNldDtcbiAgICAgICAgY2hpbGRyZW5bbm9kZU51bV1bMF0gPSBub2RlTnVtICsgMTtcbiAgICAgICAgY29uc3Qgb2xkTm9kZU51bSA9IG5vZGVOdW07XG4gICAgICAgIGxldCByZXMgPSByZWN1cnNpdmVGbGF0dGVuKHRyZWUubGVmdENoaWxkLCBoeXBlcnBsYW5lcywgb2Zmc2V0cywgY2hpbGRyZW4sIGluZGljZXMsIG5vZGVOdW0gKyAxLCBsZWFmTnVtKTtcbiAgICAgICAgbm9kZU51bSA9IHJlcy5ub2RlTnVtO1xuICAgICAgICBsZWFmTnVtID0gcmVzLmxlYWZOdW07XG4gICAgICAgIGNoaWxkcmVuW29sZE5vZGVOdW1dWzFdID0gbm9kZU51bSArIDE7XG4gICAgICAgIHJlcyA9IHJlY3Vyc2l2ZUZsYXR0ZW4odHJlZS5yaWdodENoaWxkLCBoeXBlcnBsYW5lcywgb2Zmc2V0cywgY2hpbGRyZW4sIGluZGljZXMsIG5vZGVOdW0gKyAxLCBsZWFmTnVtKTtcbiAgICAgICAgcmV0dXJuIHsgbm9kZU51bTogcmVzLm5vZGVOdW0sIGxlYWZOdW06IHJlcy5sZWFmTnVtIH07XG4gICAgfVxufVxuZnVuY3Rpb24gbnVtTm9kZXModHJlZSkge1xuICAgIGlmICh0cmVlLmlzTGVhZilcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gMSArIG51bU5vZGVzKHRyZWUubGVmdENoaWxkKSArIG51bU5vZGVzKHRyZWUucmlnaHRDaGlsZCk7XG59XG5mdW5jdGlvbiBudW1MZWF2ZXModHJlZSkge1xuICAgIGlmICh0cmVlLmlzTGVhZilcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbnVtTGVhdmVzKHRyZWUubGVmdENoaWxkKSArIG51bUxlYXZlcyh0cmVlLnJpZ2h0Q2hpbGQpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhbiBhcnJheSBvZiBzZXRzIG9mIGNhbmRpZGF0ZSBuZWFyZXN0IG5laWdoYm9ycyBieVxuICogY29uc3RydWN0aW5nIGEgcmFuZG9tIHByb2plY3Rpb24gZm9yZXN0IGFuZCB0YWtpbmcgdGhlIGxlYXZlcyBvZiBhbGwgdGhlXG4gKiB0cmVlcy4gQW55IGdpdmVuIHRyZWUgaGFzIGxlYXZlcyB0aGF0IGFyZSBhIHNldCBvZiBwb3RlbnRpYWwgbmVhcmVzdFxuICogbmVpZ2hib3JzLiBHaXZlbiBlbm91Z2ggdHJlZXMgdGhlIHNldCBvZiBhbGwgc3VjaCBsZWF2ZXMgZ2l2ZXMgYSBnb29kXG4gKiBsaWtlbGlob29kIG9mIGdldHRpbmcgYSBnb29kIHNldCBvZiBuZWFyZXN0IG5laWdoYm9ycyBpbiBjb21wb3NpdGUuIFNpbmNlXG4gKiBzdWNoIGEgcmFuZG9tIHByb2plY3Rpb24gZm9yZXN0IGlzIGluZXhwZW5zaXZlIHRvIGNvbXB1dGUsIHRoaXMgY2FuIGJlIGFcbiAqIHVzZWZ1bCBtZWFucyBvZiBzZWVkaW5nIG90aGVyIG5lYXJlc3QgbmVpZ2hib3IgYWxnb3JpdGhtcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VMZWFmQXJyYXkocnBGb3Jlc3QpIHtcbiAgICBpZiAocnBGb3Jlc3QubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB0cmVlIG9mIHJwRm9yZXN0KVxuICAgICAgICAgICAgb3V0cHV0LnB1c2goLi4udHJlZS5pbmRpY2VzKTtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBbWy0xXV07XG4gICAgfVxufVxuLyoqXG4gKiBTZWxlY3RzIHRoZSBzaWRlIG9mIHRoZSB0cmVlIHRvIHNlYXJjaCBkdXJpbmcgZmxhdCB0cmVlIHNlYXJjaC5cbiAqL1xuZnVuY3Rpb24gc2VsZWN0U2lkZShoeXBlcnBsYW5lLCBvZmZzZXQsIHBvaW50LCByYW5kb20pIHtcbiAgICBsZXQgbWFyZ2luID0gb2Zmc2V0O1xuICAgIG1hcmdpbiArPSBoeXBlcnBsYW5lICogcG9pbnQ7XG4gICAgaWYgKG1hcmdpbiA9PT0gMCkge1xuICAgICAgICBjb25zdCBzaWRlID0gdXRpbHMudGF1UmFuZEludCgyLCByYW5kb20pO1xuICAgICAgICByZXR1cm4gc2lkZTtcbiAgICB9XG4gICAgZWxzZSBpZiAobWFyZ2luID4gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbn1cbi8qKlxuICogU2VhcmNoZXMgYSBmbGF0dGVuZWQgcnAtdHJlZSBmb3IgYSBwb2ludC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlYXJjaEZsYXRUcmVlKHBvaW50LCB0cmVlLCByYW5kb20pIHtcbiAgICBsZXQgbm9kZSA9IDA7XG4gICAgd2hpbGUgKHRyZWUuY2hpbGRyZW5bbm9kZV1bMF0gPiAwKSB7XG4gICAgICAgIGNvbnN0IHNpZGUgPSBzZWxlY3RTaWRlKHRyZWUuaHlwZXJwbGFuZXNbbm9kZV0sIHRyZWUub2Zmc2V0c1tub2RlXSwgcG9pbnQsIHJhbmRvbSk7XG4gICAgICAgIGlmIChzaWRlID09PSAwKVxuICAgICAgICAgICAgbm9kZSA9IHRyZWUuY2hpbGRyZW5bbm9kZV1bMF07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG5vZGUgPSB0cmVlLmNoaWxkcmVuW25vZGVdWzFdO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IC0xICogdHJlZS5jaGlsZHJlbltub2RlXVswXTtcbiAgICByZXR1cm4gdHJlZS5pbmRpY2VzW2luZGV4XTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRISmxaUzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluUnlaV1V1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRTdPenM3T3pzN096czdPenM3T3pzN08wZEJhVUpITzBGQlJVZzdPenM3TzBkQlMwYzdRVUZGU0RzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096dEhRU3RDUnp0QlFVVklMRTlCUVU4c1MwRkJTeXhMUVVGTExFMUJRVTBzVTBGQlV5eERRVUZETzBGQlpXcERMRTFCUVUwc1QwRkJUeXhSUVVGUk8wbEJRMjVDTEZsQlExTXNWMEZCY1VJc1JVRkRja0lzVDBGQmFVSXNSVUZEYWtJc1VVRkJiMElzUlVGRGNFSXNUMEZCYlVJN1VVRklia0lzWjBKQlFWY3NSMEZCV0N4WFFVRlhMRU5CUVZVN1VVRkRja0lzV1VGQlR5eEhRVUZRTEU5QlFVOHNRMEZCVlR0UlFVTnFRaXhoUVVGUkxFZEJRVklzVVVGQlVTeERRVUZaTzFGQlEzQkNMRmxCUVU4c1IwRkJVQ3hQUVVGUExFTkJRVms3U1VGRGVrSXNRMEZCUXp0RFFVTk1PMEZCUlVRN08wZEJSVWM3UVVGRFNDeE5RVUZOTEZWQlFWVXNWVUZCVlN4RFFVTjRRaXhKUVVGWkxFVkJRMW9zVlVGQmEwSXNSVUZEYkVJc1RVRkJZeXhGUVVOa0xFMUJRV2RDTzBsQlJXaENMRTFCUVUwc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RlFVRkZMRlZCUVZVc1EwRkJReXhEUVVGRE8wbEJSVEZETEUxQlFVMHNTMEZCU3l4SFFVRkhMRXRCUVVzN1UwRkRhRUlzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXp0VFFVTmlMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVVVzVVVGQlVTeEZRVUZGTEVOQlFVTXNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRM1JFTEUxQlFVMHNUVUZCVFN4SFFVRkhMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUlN4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXp0SlFVVm9SU3hQUVVGUExFMUJRVTBzUTBGQlF6dEJRVU5vUWl4RFFVRkRPMEZCUlVRN096dEhRVWRITzBGQlEwZ3NVMEZCVXl4UlFVRlJMRU5CUTJZc1NVRkJXU3hGUVVOYUxGRkJRVkVzUjBGQlJ5eEZRVUZGTEVWQlEySXNRMEZCVXl4RlFVTlVMRTFCUVdkQ08wbEJSV2hDTEUxQlFVMHNUMEZCVHl4SFFVRkhMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUTNwRExFMUJRVTBzU1VGQlNTeEhRVUZITEdsQ1FVRnBRaXhEUVVGRExFbEJRVWtzUlVGQlJTeFBRVUZQTEVWQlFVVXNVVUZCVVN4RlFVRkZMRU5CUVVNc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF6dEpRVU51UlN4UFFVRlBMRWxCUVVrc1EwRkJRenRCUVVOa0xFTkJRVU03UVVGRlJDeFRRVUZUTEdsQ1FVRnBRaXhEUVVONFFpeEpRVUZaTEVWQlExb3NUMEZCYVVJc1JVRkRha0lzVVVGQlVTeEhRVUZITEVWQlFVVXNSVUZEWWl4RFFVRlRMRVZCUTFRc1RVRkJaMEk3U1VGRmFFSXNTVUZCU1N4UFFVRlBMRU5CUVVNc1RVRkJUU3hIUVVGSExGRkJRVkVzUlVGQlJUdFJRVU0zUWl4TlFVRk5MRmxCUVZrc1IwRkJSeXc0UWtGQk9FSXNRMEZCUXl4SlFVRkpMRVZCUVVVc1QwRkJUeXhGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETzFGQlF6TkZMRTFCUVUwc1JVRkJReXhYUVVGWExFVkJRVVVzV1VGQldTeEZRVUZGTEZWQlFWVXNSVUZCUlN4TlFVRk5MRVZCUVVNc1IwRkJSeXhaUVVGWkxFTkJRVU03VVVGRmNrVXNUVUZCVFN4VFFVRlRMRWRCUVVjc2FVSkJRV2xDTEVOQlEycERMRWxCUVVrc1JVRkRTaXhYUVVGWExFVkJRMWdzVVVGQlVTeEZRVU5TTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUTB3c1RVRkJUU3hEUVVOUUxFTkJRVU03VVVGRFJpeE5RVUZOTEZWQlFWVXNSMEZCUnl4cFFrRkJhVUlzUTBGRGJFTXNTVUZCU1N4RlFVTktMRmxCUVZrc1JVRkRXaXhSUVVGUkxFVkJRMUlzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZEVEN4TlFVRk5MRU5CUTFBc1EwRkJRenRSUVVWR0xFMUJRVTBzU1VGQlNTeEhRVUZITEVWQlFVTXNVMEZCVXl4RlFVRkZMRlZCUVZVc1JVRkJSU3hOUVVGTkxFVkJRVVVzUzBGQlN5eEZRVUZGTEZWQlFWVXNSVUZCUlN4TlFVRk5MRVZCUVVNc1EwRkJRenRSUVVONFJTeFBRVUZQTEVsQlFVa3NRMEZCUXp0TFFVTmlPMU5CUVUwN1VVRkRUQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eEZRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5MRVZCUVVVc1NVRkJTU3hGUVVGRExFTkJRVU03VVVGRGNrTXNUMEZCVHl4SlFVRkpMRU5CUVVNN1MwRkRZanRCUVVOSUxFTkJRVU03UVVGRlJEczdPenM3T3p0SFFVOUhPMEZCUTBnc1UwRkJVeXc0UWtGQk9FSXNRMEZEY2tNc1NVRkJXU3hGUVVOYUxFOUJRV2xDTEVWQlEycENMRTFCUVdkQ08wbEJSV2hDTEdkQ1FVRm5RanRKUVVWb1FpdzBSRUZCTkVRN1NVRkROVVFzVFVGQlRTeFRRVUZUTEVkQlFVY3NTMEZCU3l4RFFVRkRMRlZCUVZVc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUXpORUxFbEJRVWtzVlVGQlZTeEhRVUZITEV0QlFVc3NRMEZCUXl4VlFVRlZMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0SlFVTXhSQ3hWUVVGVkxFbEJRVWtzVTBGQlV5eExRVUZMTEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZETDBNc1ZVRkJWU3hIUVVGSExGVkJRVlVzUjBGQlJ5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRPMGxCUTNwRExFMUJRVTBzU1VGQlNTeEhRVUZITEU5QlFVOHNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRKUVVOb1F5eE5RVUZOTEV0QlFVc3NSMEZCUnl4UFFVRlBMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU03U1VGRmJFTXNNRVZCUVRCRk8wbEJRekZGTEhsRFFVRjVRenRKUVVONlF5eEpRVUZKTEdkQ1FVRm5RaXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU42UWl4SlFVRkpMR2RDUVVGblFpeEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVZDZRaXhuUWtGQlowSXNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMGxCUXpWRExHZENRVUZuUWp0UlFVTmtMRU5CUVVNc1owSkJRV2RDTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU03U1VGSGVFUXNhVVZCUVdsRk8wbEJRMnBGTEhWRlFVRjFSVHRKUVVOMlJTd3lSVUZCTWtVN1NVRkRNMFVzU1VGQlNTeExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJRc1NVRkJTU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEyWXNUVUZCVFN4SlFVRkpMRWRCUVVjc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkRla01zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1VVRkRka01zU1VGQlNTeE5RVUZOTEVkQlFVY3NaMEpCUVdkQ0xFTkJRVU03VVVGRk9VSXNUVUZCVFN4SlFVRkpMR2RDUVVGblFpeEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVVU1UXl4SlFVRkpMRTFCUVUwc1MwRkJTeXhEUVVGRExFVkJRVVU3V1VGRGFFSXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXl4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGRE8xbEJRM1JETEVsQlFVa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU03WjBKQlEyWXNTMEZCU3l4SlFVRkpMRU5CUVVNc1EwRkJRenM3WjBKQlJWZ3NUVUZCVFN4SlFVRkpMRU5CUVVNc1EwRkJRenRUUVVObU8yRkJRVTBzU1VGQlNTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RlFVRkZPMWxCUTNKQ0xFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRXaXhMUVVGTExFbEJRVWtzUTBGQlF5eERRVUZETzFOQlExbzdZVUZCVFR0WlFVTk1MRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEV2l4TlFVRk5MRWxCUVVrc1EwRkJReXhEUVVGRE8xTkJRMkk3UzBGRFJqdEpRVVZFTEN0RFFVRXJRenRKUVVNdlF5eE5RVUZOTEZkQlFWY3NSMEZCUnl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBsQlEzWkRMRTFCUVUwc1dVRkJXU3hIUVVGSExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkZla01zZDBWQlFYZEZPMGxCUTNoRkxFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEVml4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMWdzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1VVRkRjRU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRk8xbEJRMnBDTEZkQlFWY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEYUVNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUTBGQlF6dFRRVU5hTzJGQlFVMDdXVUZEVEN4WlFVRlpMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTJ4RExFMUJRVTBzU1VGQlNTeERRVUZETEVOQlFVTTdVMEZEWWp0TFFVTkdPMGxCUlVRc1QwRkJUenRSUVVOTUxGZEJRVmM3VVVGRFdDeFpRVUZaTzFGQlExb3NWVUZCVlN4RlFVRkZMR2RDUVVGblFqdFJRVU0xUWl4TlFVRk5MRVZCUVVVc1owSkJRV2RDTzB0QlEzcENMRU5CUVVNN1FVRkRTaXhEUVVGRE8wRkJSVVFzVTBGQlV5eFhRVUZYTEVOQlFVTXNTVUZCT0VJc1JVRkJSU3hSUVVGblFqdEpRVU51UlN4TlFVRk5MRTFCUVUwc1IwRkJSeXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTVUZET1VJc1RVRkJUU3hQUVVGUExFZEJRVWNzVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUldoRExHMUVRVUZ0UkR0SlFVTnVSQ3hOUVVGTkxGZEJRVmNzUjBGQlJ5eExRVUZMTzFOQlEzUkNMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU03VTBGRFlpeEhRVUZITEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVVYwUXl4TlFVRk5MRTlCUVU4c1IwRkJSeXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUTNCRExFMUJRVTBzVVVGQlVTeEhRVUZITEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTNwRUxFMUJRVTBzVDBGQlR5eEhRVUZITEV0QlFVczdVMEZEYkVJc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF6dFRRVU5rTEVkQlFVY3NRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRiRVFzWjBKQlFXZENMRU5CUVVNc1NVRkJTU3hGUVVGRkxGZEJRVmNzUlVGQlJTeFBRVUZQTEVWQlFVVXNVVUZCVVN4RlFVRkZMRTlCUVU4c1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEZEVVc1QwRkJUeXhKUVVGSkxGRkJRVkVzUTBGQlF5eFhRVUZYTEVWQlFVVXNUMEZCVHl4RlFVRkZMRkZCUVZFc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF6dEJRVU12UkN4RFFVRkRPMEZCUlVRc1UwRkJVeXhuUWtGQlowSXNRMEZEZGtJc1NVRkJPRUlzUlVGRE9VSXNWMEZCY1VJc1JVRkRja0lzVDBGQmFVSXNSVUZEYWtJc1VVRkJiMElzUlVGRGNFSXNUMEZCYlVJc1JVRkRia0lzVDBGQlpTeEZRVU5tTEU5QlFXVTdTVUZGWml4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVU3VVVGRFppeFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTTdVVUZGYUVNc2JVUkJRVzFFTzFGQlEyNUVMREJFUVVFd1JEdFJRVU14UkN4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1QwRkJVU3hEUVVGRExFMUJRVTBzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlJMRU5CUVVNc1EwRkJRenRSUVVOdVJTeFBRVUZQTEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUTJJc1QwRkJUeXhGUVVGRExFOUJRVThzUlVGQlJTeFBRVUZQTEVWQlFVTXNRMEZCUXp0TFFVTXpRanRUUVVGTk8xRkJRMHdzVjBGQlZ5eERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhWUVVGWExFTkJRVU03VVVGRGVFTXNUMEZCVHl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZQTEVOQlFVTTdVVUZEYUVNc1VVRkJVU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRTlCUVU4c1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGJrTXNUVUZCVFN4VlFVRlZMRWRCUVVjc1QwRkJUeXhEUVVGRE8xRkJSVE5DTEVsQlFVa3NSMEZCUnl4SFFVRkhMR2RDUVVGblFpeERRVU40UWl4SlFVRkpMRU5CUVVNc1UwRkJWU3hGUVVObUxGZEJRVmNzUlVGRFdDeFBRVUZQTEVWQlExQXNVVUZCVVN4RlFVTlNMRTlCUVU4c1JVRkRVQ3hQUVVGUExFZEJRVWNzUTBGQlF5eEZRVU5ZTEU5QlFVOHNRMEZEVWl4RFFVRkRPMUZCUTBZc1QwRkJUeXhIUVVGSExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTTdVVUZEZEVJc1QwRkJUeXhIUVVGSExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTTdVVUZGZEVJc1VVRkJVU3hEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRTlCUVU4c1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRmRFTXNSMEZCUnl4SFFVRkhMR2RDUVVGblFpeERRVU53UWl4SlFVRkpMRU5CUVVNc1ZVRkJWeXhGUVVOb1FpeFhRVUZYTEVWQlExZ3NUMEZCVHl4RlFVTlFMRkZCUVZFc1JVRkRVaXhQUVVGUExFVkJRMUFzVDBGQlR5eEhRVUZITEVOQlFVTXNSVUZEV0N4UFFVRlBMRU5CUTFJc1EwRkJRenRSUVVOR0xFOUJRVThzUlVGQlF5eFBRVUZQTEVWQlFVVXNSMEZCUnl4RFFVRkRMRTlCUVU4c1JVRkJSU3hQUVVGUExFVkJRVVVzUjBGQlJ5eERRVUZETEU5QlFVOHNSVUZCUXl4RFFVRkRPMHRCUTNKRU8wRkJRMGdzUTBGQlF6dEJRVVZFTEZOQlFWTXNVVUZCVVN4RFFVRkRMRWxCUVRoQ08wbEJRemxETEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwN1VVRkRZaXhQUVVGUExFTkJRVU1zUTBGQlF6czdVVUZGVkN4UFFVRlBMRU5CUVVNc1IwRkJSeXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWVXNRMEZCUXl4SFFVRkhMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zVlVGQlZ5eERRVUZETEVOQlFVTTdRVUZEZEVVc1EwRkJRenRCUVVWRUxGTkJRVk1zVTBGQlV5eERRVUZETEVsQlFUaENPMGxCUXk5RExFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMDdVVUZEWWl4UFFVRlBMRU5CUVVNc1EwRkJRenM3VVVGRlZDeFBRVUZQTEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJWU3hEUVVGRExFZEJRVWNzVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4VlFVRlhMRU5CUVVNc1EwRkJRenRCUVVOd1JTeERRVUZETzBGQlJVUTdPenM3T3pzN08wZEJVVWM3UVVGRFNDeE5RVUZOTEZWQlFWVXNZVUZCWVN4RFFVRkRMRkZCUVc5Q08wbEJRMmhFTEVsQlFVa3NVVUZCVVN4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFVkJRVVU3VVVGRGRrSXNUVUZCVFN4TlFVRk5MRWRCUVdVc1JVRkJSU3hEUVVGRE8xRkJRemxDTEV0QlFVc3NUVUZCVFN4SlFVRkpMRWxCUVVrc1VVRkJVVHRaUVVONlFpeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVkVzUTBGQlF5eERRVUZETzFGQlJXaERMRTlCUVU4c1RVRkJUU3hEUVVGRE8wdEJRMlk3VTBGQlRUdFJRVU5NTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dExRVU5tTzBGQlEwZ3NRMEZCUXp0QlFVVkVPenRIUVVWSE8wRkJRMGdzVTBGQlV5eFZRVUZWTEVOQlEycENMRlZCUVd0Q0xFVkJRMnhDTEUxQlFXTXNSVUZEWkN4TFFVRmhMRVZCUTJJc1RVRkJaMEk3U1VGRmFFSXNTVUZCU1N4TlFVRk5MRWRCUVVjc1RVRkJUU3hEUVVGRE8wbEJSWEJDTEUxQlFVMHNTVUZCU1N4VlFVRlZMRWRCUVVjc1MwRkJTeXhEUVVGRE8wbEJSemRDTEVsQlFVa3NUVUZCVFN4TFFVRkxMRU5CUVVNc1JVRkJSVHRSUVVOb1FpeE5RVUZOTEVsQlFVa3NSMEZCUnl4TFFVRkxMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU1zUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTjZReXhQUVVGUExFbEJRVWtzUTBGQlF6dExRVU5pTzFOQlFVMHNTVUZCU1N4TlFVRk5MRWRCUVVjc1EwRkJReXhGUVVGRk8xRkJRM0pDTEU5QlFVOHNRMEZCUXl4RFFVRkRPMHRCUTFZN1UwRkJUVHRSUVVOTUxFOUJRVThzUTBGQlF5eERRVUZETzB0QlExWTdRVUZEU0N4RFFVRkRPMEZCUlVRN08wZEJSVWM3UVVGRFNDeE5RVUZOTEZWQlFWVXNZMEZCWXl4RFFVTTFRaXhMUVVGaExFVkJRMklzU1VGQll5eEZRVU5rTEUxQlFXZENPMGxCUldoQ0xFbEJRVWtzU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTmlMRTlCUVU4c1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVU3VVVGRGFrTXNUVUZCVFN4SlFVRkpMRWRCUVVjc1ZVRkJWU3hEUVVOeVFpeEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVOMFFpeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVOc1FpeExRVUZMTEVWQlEwd3NUVUZCVFN4RFFVTlFMRU5CUVVNN1VVRkRSaXhKUVVGSkxFbEJRVWtzUzBGQlN5eERRVUZETzFsQlExb3NTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN08xbEJSVGxDTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMHRCUTJwRE8wbEJSVVFzVFVGQlRTeExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVNeFF5eFBRVUZQTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRE4wSXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1FHeHBZMlZ1YzJWY2JpQXFYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhPU0JIYjI5bmJHVWdURXhETGlCQmJHd2dVbWxuYUhSeklGSmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlFeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkJjR0ZqYUdVZ1RHbGpaVzV6WlN3Z1ZtVnljMmx2YmlBeUxqQWdLSFJvWlNCY0lreHBZMlZ1YzJWY0lpazdYRzRnS2lCNWIzVWdiV0Y1SUc1dmRDQjFjMlVnZEdocGN5Qm1hV3hsSUdWNFkyVndkQ0JwYmlCamIyMXdiR2xoYm1ObElIZHBkR2dnZEdobElFeHBZMlZ1YzJVdVhHNGdLaUJaYjNVZ2JXRjVJRzlpZEdGcGJpQmhJR052Y0hrZ2IyWWdkR2hsSUV4cFkyVnVjMlVnWVhSY2JpQXFYRzRnS2lBZ0lDQWdhSFIwY0RvdkwzZDNkeTVoY0dGamFHVXViM0puTDJ4cFkyVnVjMlZ6TDB4SlEwVk9VMFV0TWk0d1hHNGdLbHh1SUNvZ1ZXNXNaWE56SUhKbGNYVnBjbVZrSUdKNUlHRndjR3hwWTJGaWJHVWdiR0YzSUc5eUlHRm5jbVZsWkNCMGJ5QnBiaUIzY21sMGFXNW5MQ0J6YjJaMGQyRnlaVnh1SUNvZ1pHbHpkSEpwWW5WMFpXUWdkVzVrWlhJZ2RHaGxJRXhwWTJWdWMyVWdhWE1nWkdsemRISnBZblYwWldRZ2IyNGdZVzRnWENKQlV5QkpVMXdpSUVKQlUwbFRMRnh1SUNvZ1YwbFVTRTlWVkNCWFFWSlNRVTVVU1VWVElFOVNJRU5QVGtSSlZFbFBUbE1nVDBZZ1FVNVpJRXRKVGtRc0lHVnBkR2hsY2lCbGVIQnlaWE56SUc5eUlHbHRjR3hwWldRdVhHNGdLaUJUWldVZ2RHaGxJRXhwWTJWdWMyVWdabTl5SUhSb1pTQnpjR1ZqYVdacFl5QnNZVzVuZFdGblpTQm5iM1psY201cGJtY2djR1Z5YldsemMybHZibk1nWVc1a1hHNGdLaUJzYVcxcGRHRjBhVzl1Y3lCMWJtUmxjaUIwYUdVZ1RHbGpaVzV6WlM1Y2JpQXFJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVJQ292WEc1Y2JpOHFLbHh1SUNvZ1ZHaHBjeUJwY3lCaElFcGhkbUZUWTNKcGNIUWdjbVZwYlhCc1pXMWxiblJoZEdsdmJpQnZaaUJWVFVGUUlDaHZjbWxuYVc1aGJDQnNhV05sYm5ObElHSmxiRzkzS1N3Z1puSnZiVnh1SUNvZ2RHaGxJSEI1ZEdodmJpQnBiWEJzWlcxbGJuUmhkR2x2YmlCbWIzVnVaQ0JoZENCb2RIUndjem92TDJkcGRHaDFZaTVqYjIwdmJHMWphVzV1WlhNdmRXMWhjQzVjYmlBcVhHNGdLaUJBWVhWMGFHOXlJR0Z1WkhsamIyVnVaVzVBWjI5dloyeGxMbU52YlNBb1FXNWtlU0JEYjJWdVpXNHBYRzRnS2k5Y2JseHVMeW9xWEc0Z0tpQkFiR2xqWlc1elpWeHVJQ29nUWxORUlETXRRMnhoZFhObElFeHBZMlZ1YzJWY2JpQXFYRzRnS2lCRGIzQjVjbWxuYUhRZ0tHTXBJREl3TVRjc0lFeGxiR0Z1WkNCTlkwbHVibVZ6WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRkpsWkdsemRISnBZblYwYVc5dUlHRnVaQ0IxYzJVZ2FXNGdjMjkxY21ObElHRnVaQ0JpYVc1aGNua2dabTl5YlhNc0lIZHBkR2dnYjNJZ2QybDBhRzkxZEZ4dUlDb2diVzlrYVdacFkyRjBhVzl1TENCaGNtVWdjR1Z5YldsMGRHVmtJSEJ5YjNacFpHVmtJSFJvWVhRZ2RHaGxJR1p2Ykd4dmQybHVaeUJqYjI1a2FYUnBiMjV6SUdGeVpTQnRaWFE2WEc0Z0tseHVJQ29nS2lCU1pXUnBjM1J5YVdKMWRHbHZibk1nYjJZZ2MyOTFjbU5sSUdOdlpHVWdiWFZ6ZENCeVpYUmhhVzRnZEdobElHRmliM1psSUdOdmNIbHlhV2RvZENCdWIzUnBZMlVzSUhSb2FYTmNiaUFxSUNBZ2JHbHpkQ0J2WmlCamIyNWthWFJwYjI1eklHRnVaQ0IwYUdVZ1ptOXNiRzkzYVc1bklHUnBjMk5zWVdsdFpYSXVYRzRnS2x4dUlDb2dLaUJTWldScGMzUnlhV0oxZEdsdmJuTWdhVzRnWW1sdVlYSjVJR1p2Y20wZ2JYVnpkQ0J5WlhCeWIyUjFZMlVnZEdobElHRmliM1psSUdOdmNIbHlhV2RvZENCdWIzUnBZMlVzWEc0Z0tpQWdJSFJvYVhNZ2JHbHpkQ0J2WmlCamIyNWthWFJwYjI1eklHRnVaQ0IwYUdVZ1ptOXNiRzkzYVc1bklHUnBjMk5zWVdsdFpYSWdhVzRnZEdobElHUnZZM1Z0Wlc1MFlYUnBiMjVjYmlBcUlDQWdZVzVrTDI5eUlHOTBhR1Z5SUcxaGRHVnlhV0ZzY3lCd2NtOTJhV1JsWkNCM2FYUm9JSFJvWlNCa2FYTjBjbWxpZFhScGIyNHVYRzRnS2x4dUlDb2dLaUJPWldsMGFHVnlJSFJvWlNCdVlXMWxJRzltSUhSb1pTQmpiM0I1Y21sbmFIUWdhRzlzWkdWeUlHNXZjaUIwYUdVZ2JtRnRaWE1nYjJZZ2FYUnpYRzRnS2lBZ0lHTnZiblJ5YVdKMWRHOXljeUJ0WVhrZ1ltVWdkWE5sWkNCMGJ5QmxibVJ2Y25ObElHOXlJSEJ5YjIxdmRHVWdjSEp2WkhWamRITWdaR1Z5YVhabFpDQm1jbTl0WEc0Z0tpQWdJSFJvYVhNZ2MyOW1kSGRoY21VZ2QybDBhRzkxZENCemNHVmphV1pwWXlCd2NtbHZjaUIzY21sMGRHVnVJSEJsY20xcGMzTnBiMjR1WEc0Z0tseHVJQ29nVkVoSlV5QlRUMFpVVjBGU1JTQkpVeUJRVWs5V1NVUkZSQ0JDV1NCVVNFVWdRMDlRV1ZKSlIwaFVJRWhQVEVSRlVsTWdRVTVFSUVOUFRsUlNTVUpWVkU5U1V5QmNJa0ZUSUVsVFhDSmNiaUFxSUVGT1JDQkJUbGtnUlZoUVVrVlRVeUJQVWlCSlRWQk1TVVZFSUZkQlVsSkJUbFJKUlZNc0lFbE9RMHhWUkVsT1J5d2dRbFZVSUU1UFZDQk1TVTFKVkVWRUlGUlBMQ0JVU0VWY2JpQXFJRWxOVUV4SlJVUWdWMEZTVWtGT1ZFbEZVeUJQUmlCTlJWSkRTRUZPVkVGQ1NVeEpWRmtnUVU1RUlFWkpWRTVGVTFNZ1JrOVNJRUVnVUVGU1ZFbERWVXhCVWlCUVZWSlFUMU5GSUVGU1JWeHVJQ29nUkVsVFEweEJTVTFGUkM0Z1NVNGdUazhnUlZaRlRsUWdVMGhCVEV3Z1ZFaEZJRU5QVUZsU1NVZElWQ0JJVDB4RVJWSWdUMUlnUTA5T1ZGSkpRbFZVVDFKVElFSkZJRXhKUVVKTVJWeHVJQ29nUms5U0lFRk9XU0JFU1ZKRlExUXNJRWxPUkVsU1JVTlVMQ0JKVGtOSlJFVk9WRUZNTENCVFVFVkRTVUZNTENCRldFVk5VRXhCVWxrc0lFOVNJRU5QVGxORlVWVkZUbFJKUVV4Y2JpQXFJRVJCVFVGSFJWTWdLRWxPUTB4VlJFbE9SeXdnUWxWVUlFNVBWQ0JNU1UxSlZFVkVJRlJQTENCUVVrOURWVkpGVFVWT1ZDQlBSaUJUVlVKVFZFbFVWVlJGSUVkUFQwUlRJRTlTWEc0Z0tpQlRSVkpXU1VORlV6c2dURTlUVXlCUFJpQlZVMFVzSUVSQlZFRXNJRTlTSUZCU1QwWkpWRk03SUU5U0lFSlZVMGxPUlZOVElFbE9WRVZTVWxWUVZFbFBUaWtnU0U5WFJWWkZVbHh1SUNvZ1EwRlZVMFZFSUVGT1JDQlBUaUJCVGxrZ1ZFaEZUMUpaSUU5R0lFeEpRVUpKVEVsVVdTd2dWMGhGVkVoRlVpQkpUaUJEVDA1VVVrRkRWQ3dnVTFSU1NVTlVJRXhKUVVKSlRFbFVXU3hjYmlBcUlFOVNJRlJQVWxRZ0tFbE9RMHhWUkVsT1J5Qk9SVWRNU1VkRlRrTkZJRTlTSUU5VVNFVlNWMGxUUlNrZ1FWSkpVMGxPUnlCSlRpQkJUbGtnVjBGWklFOVZWQ0JQUmlCVVNFVWdWVk5GWEc0Z0tpQlBSaUJVU0VsVElGTlBSbFJYUVZKRkxDQkZWa1ZPSUVsR0lFRkVWa2xUUlVRZ1QwWWdWRWhGSUZCUFUxTkpRa2xNU1ZSWklFOUdJRk5WUTBnZ1JFRk5RVWRGTGx4dUlDb3ZYRzVjYm1sdGNHOXlkQ0FxSUdGeklIVjBhV3h6SUdaeWIyMGdKeTR2ZFhScGJITW5PMXh1YVcxd2IzSjBJSHRTWVc1a2IyMUdiaXdnVm1WamRHOXlmU0JtY205dElDY3VMM1Z0WVhBbk8xeHVYRzR2S2lwY2JpQXFJRlJ5WldVZ1puVnVZM1JwYjI1aGJHbDBlU0JtYjNJZ1lYQndjbTk0YVcxaGRHbHVaeUJ1WldGeVpYTjBJRzVsYVdkb1ltOXljMXh1SUNvdlhHNXBiblJsY21aaFkyVWdVbUZ1Wkc5dFVISnZhbVZqZEdsdmJsUnlaV1ZPYjJSbElIdGNiaUFnYVhOTVpXRm1PaUJpYjI5c1pXRnVPMXh1SUNCcGJtUnBZMlZ6UHpvZ2JuVnRZbVZ5VzEwN1hHNGdJR3hsWm5SRGFHbHNaRDg2SUZKaGJtUnZiVkJ5YjJwbFkzUnBiMjVVY21WbFRtOWtaVHRjYmlBZ2NtbG5hSFJEYUdsc1pEODZJRkpoYm1SdmJWQnliMnBsWTNScGIyNVVjbVZsVG05a1pUdGNiaUFnYUhsd1pYSndiR0Z1WlQ4NklHNTFiV0psY2p0Y2JpQWdiMlptYzJWMFB6b2diblZ0WW1WeU8xeHVmVnh1WEc1bGVIQnZjblFnWTJ4aGMzTWdSbXhoZEZSeVpXVWdlMXh1SUNCamIyNXpkSEoxWTNSdmNpaGNiaUFnSUNCd2RXSnNhV01nYUhsd1pYSndiR0Z1WlhNNklHNTFiV0psY2x0ZExGeHVJQ0FnSUhCMVlteHBZeUJ2Wm1aelpYUnpPaUJ1ZFcxaVpYSmJYU3hjYmlBZ0lDQndkV0pzYVdNZ1kyaHBiR1J5Wlc0NklHNTFiV0psY2x0ZFcxMHNYRzRnSUNBZ2NIVmliR2xqSUdsdVpHbGpaWE02SUc1MWJXSmxjbHRkVzExY2JpQWdLU0I3ZlZ4dWZWeHVYRzR2S2lwY2JpQXFJRUoxYVd4a0lHRWdjbUZ1Wkc5dElIQnliMnBsWTNScGIyNGdabTl5WlhOMElIZHBkR2dnWUdCdVZISmxaWE5nWUM1Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJRzFoYTJWR2IzSmxjM1FvWEc0Z0lHUmhkR0U2SUZabFkzUnZjaXhjYmlBZ2JrNWxhV2RvWW05eWN6b2diblZ0WW1WeUxGeHVJQ0J1VkhKbFpYTTZJRzUxYldKbGNpeGNiaUFnY21GdVpHOXRPaUJTWVc1a2IyMUdibHh1S1NCN1hHNGdJR052Ym5OMElHeGxZV1pUYVhwbElEMGdUV0YwYUM1dFlYZ29NVEFzSUc1T1pXbG5hR0p2Y25NcE8xeHVYRzRnSUdOdmJuTjBJSFJ5WldWeklEMGdkWFJwYkhOY2JpQWdJQ0F1Y21GdVoyVW9ibFJ5WldWektWeHVJQ0FnSUM1dFlYQW9LRjhzSUdrcElEMCtJRzFoYTJWVWNtVmxLR1JoZEdFc0lHeGxZV1pUYVhwbExDQnBMQ0J5WVc1a2IyMHBLVHRjYmlBZ1kyOXVjM1FnWm05eVpYTjBJRDBnZEhKbFpYTXViV0Z3S0NoMGNtVmxLU0E5UGlCbWJHRjBkR1Z1VkhKbFpTaDBjbVZsTENCc1pXRm1VMmw2WlNrcE8xeHVYRzRnSUhKbGRIVnliaUJtYjNKbGMzUTdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1EyOXVjM1J5ZFdOMElHRWdjbUZ1Wkc5dElIQnliMnBsWTNScGIyNGdkSEpsWlNCaVlYTmxaQ0J2YmlCZ1lHUmhkR0ZnWUNCM2FYUm9JR3hsWVhabGMxeHVJQ29nYjJZZ2MybDZaU0JoZENCdGIzTjBJR0JnYkdWaFpsTnBlbVZnWUZ4dUlDb3ZYRzVtZFc1amRHbHZiaUJ0WVd0bFZISmxaU2hjYmlBZ1pHRjBZVG9nVm1WamRHOXlMRnh1SUNCc1pXRm1VMmw2WlNBOUlETXdMRnh1SUNCdU9pQnVkVzFpWlhJc1hHNGdJSEpoYm1SdmJUb2dVbUZ1Wkc5dFJtNWNiaWs2SUZKaGJtUnZiVkJ5YjJwbFkzUnBiMjVVY21WbFRtOWtaU0I3WEc0Z0lHTnZibk4wSUdsdVpHbGpaWE1nUFNCMWRHbHNjeTV5WVc1blpTaGtZWFJoTG14bGJtZDBhQ2s3WEc0Z0lHTnZibk4wSUhSeVpXVWdQU0J0WVd0bFJYVmpiR2xrWldGdVZISmxaU2hrWVhSaExDQnBibVJwWTJWekxDQnNaV0ZtVTJsNlpTd2diaXdnY21GdVpHOXRLVHRjYmlBZ2NtVjBkWEp1SUhSeVpXVTdYRzU5WEc1Y2JtWjFibU4wYVc5dUlHMWhhMlZGZFdOc2FXUmxZVzVVY21WbEtGeHVJQ0JrWVhSaE9pQldaV04wYjNJc1hHNGdJR2x1WkdsalpYTTZJRzUxYldKbGNsdGRMRnh1SUNCc1pXRm1VMmw2WlNBOUlETXdMRnh1SUNCeE9pQnVkVzFpWlhJc1hHNGdJSEpoYm1SdmJUb2dVbUZ1Wkc5dFJtNWNiaWs2SUZKaGJtUnZiVkJ5YjJwbFkzUnBiMjVVY21WbFRtOWtaU0I3WEc0Z0lHbG1JQ2hwYm1ScFkyVnpMbXhsYm1kMGFDQStJR3hsWVdaVGFYcGxLU0I3WEc0Z0lDQWdZMjl1YzNRZ2MzQnNhWFJTWlhOMWJIUnpJRDBnWlhWamJHbGtaV0Z1VW1GdVpHOXRVSEp2YW1WamRHbHZibE53YkdsMEtHUmhkR0VzSUdsdVpHbGpaWE1zSUhKaGJtUnZiU2s3WEc0Z0lDQWdZMjl1YzNRZ2UybHVaR2xqWlhOTVpXWjBMQ0JwYm1ScFkyVnpVbWxuYUhRc0lHaDVjR1Z5Y0d4aGJtVXNJRzltWm5ObGRIMGdQU0J6Y0d4cGRGSmxjM1ZzZEhNN1hHNWNiaUFnSUNCamIyNXpkQ0JzWldaMFEyaHBiR1FnUFNCdFlXdGxSWFZqYkdsa1pXRnVWSEpsWlNoY2JpQWdJQ0FnSUdSaGRHRXNYRzRnSUNBZ0lDQnBibVJwWTJWelRHVm1kQ3hjYmlBZ0lDQWdJR3hsWVdaVGFYcGxMRnh1SUNBZ0lDQWdjU0FySURFc1hHNGdJQ0FnSUNCeVlXNWtiMjFjYmlBZ0lDQXBPMXh1SUNBZ0lHTnZibk4wSUhKcFoyaDBRMmhwYkdRZ1BTQnRZV3RsUlhWamJHbGtaV0Z1VkhKbFpTaGNiaUFnSUNBZ0lHUmhkR0VzWEc0Z0lDQWdJQ0JwYm1ScFkyVnpVbWxuYUhRc1hHNGdJQ0FnSUNCc1pXRm1VMmw2WlN4Y2JpQWdJQ0FnSUhFZ0t5QXhMRnh1SUNBZ0lDQWdjbUZ1Wkc5dFhHNGdJQ0FnS1R0Y2JseHVJQ0FnSUdOdmJuTjBJRzV2WkdVZ1BTQjdiR1ZtZEVOb2FXeGtMQ0J5YVdkb2RFTm9hV3hrTENCcGMweGxZV1k2SUdaaGJITmxMQ0JvZVhCbGNuQnNZVzVsTENCdlptWnpaWFI5TzF4dUlDQWdJSEpsZEhWeWJpQnViMlJsTzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUdOdmJuTjBJRzV2WkdVZ1BTQjdhVzVrYVdObGN5d2dhWE5NWldGbU9pQjBjblZsZlR0Y2JpQWdJQ0J5WlhSMWNtNGdibTlrWlR0Y2JpQWdmVnh1ZlZ4dVhHNHZLaXBjYmlBcUlFZHBkbVZ1SUdFZ2MyVjBJRzltSUdCZ2FXNWthV05sYzJCZ0lHWnZjaUJrWVhSaElIQnZhVzUwY3lCbWNtOXRJR0JnWkdGMFlXQmdMQ0JqY21WaGRHVmNiaUFxSUdFZ2NtRnVaRzl0SUdoNWNHVnljR3hoYm1VZ2RHOGdjM0JzYVhRZ2RHaGxJR1JoZEdFc0lISmxkSFZ5Ym1sdVp5QjBkMjhnWVhKeVlYbHpJR2x1WkdsalpYTmNiaUFxSUhSb1lYUWdabUZzYkNCdmJpQmxhWFJvWlhJZ2MybGtaU0J2WmlCMGFHVWdhSGx3WlhKd2JHRnVaUzRnVkdocGN5QnBjeUIwYUdVZ1ltRnphWE1nWm05eUlHRmNiaUFxSUhKaGJtUnZiU0J3Y205cVpXTjBhVzl1SUhSeVpXVXNJSGRvYVdOb0lITnBiWEJzZVNCMWMyVnpJSFJvYVhNZ2MzQnNhWFIwYVc1bklISmxZM1Z5YzJsMlpXeDVMbHh1SUNvZ1ZHaHBjeUJ3WVhKMGFXTjFiR0Z5SUhOd2JHbDBJSFZ6WlhNZ1pYVmpiR2xrWldGdUlHUnBjM1JoYm1ObElIUnZJR1JsZEdWeWJXbHVaU0IwYUdVZ2FIbHdaWEp3YkdGdVpWeHVJQ29nWVc1a0lIZG9hV05vSUhOcFpHVWdaV0ZqYUNCa1lYUmhJSE5oYlhCc1pTQm1ZV3hzY3lCdmJpNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z1pYVmpiR2xrWldGdVVtRnVaRzl0VUhKdmFtVmpkR2x2YmxOd2JHbDBLRnh1SUNCa1lYUmhPaUJXWldOMGIzSXNYRzRnSUdsdVpHbGpaWE02SUc1MWJXSmxjbHRkTEZ4dUlDQnlZVzVrYjIwNklGSmhibVJ2YlVadVhHNHBJSHRjYmlBZ0x5OWpiMjV6ZENCa2FXMGdQU0F4TzF4dVhHNGdJQzh2SUZObGJHVmpkQ0IwZDI4Z2NtRnVaRzl0SUhCdmFXNTBjeXdnYzJWMElIUm9aU0JvZVhCbGNuQnNZVzVsSUdKbGRIZGxaVzRnZEdobGJWeHVJQ0JqYjI1emRDQnNaV1owU1c1a1pYZ2dQU0IxZEdsc2N5NTBZWFZTWVc1a1NXNTBLR2x1WkdsalpYTXViR1Z1WjNSb0xDQnlZVzVrYjIwcE8xeHVJQ0JzWlhRZ2NtbG5hSFJKYm1SbGVDQTlJSFYwYVd4ekxuUmhkVkpoYm1SSmJuUW9hVzVrYVdObGN5NXNaVzVuZEdnc0lISmhibVJ2YlNrN1hHNGdJSEpwWjJoMFNXNWtaWGdnS3owZ2JHVm1kRWx1WkdWNElEMDlQU0J5YVdkb2RFbHVaR1Y0SUQ4Z01TQTZJREE3WEc0Z0lISnBaMmgwU1c1a1pYZ2dQU0J5YVdkb2RFbHVaR1Y0SUNVZ2FXNWthV05sY3k1c1pXNW5kR2c3WEc0Z0lHTnZibk4wSUd4bFpuUWdQU0JwYm1ScFkyVnpXMnhsWm5SSmJtUmxlRjA3WEc0Z0lHTnZibk4wSUhKcFoyaDBJRDBnYVc1a2FXTmxjMXR5YVdkb2RFbHVaR1Y0WFR0Y2JseHVJQ0F2THlCRGIyMXdkWFJsSUhSb1pTQnViM0p0WVd3Z2RtVmpkRzl5SUhSdklIUm9aU0JvZVhCbGNuQnNZVzVsSUNoMGFHVWdkbVZqZEc5eUlHSmxkSGRsWlc0Z2RHaGxJSFIzYjF4dUlDQXZMeUJ3YjJsdWRITXBJR0Z1WkNCMGFHVWdiMlptYzJWMElHWnliMjBnZEdobElHOXlhV2RwYmx4dUlDQnNaWFFnYUhsd1pYSndiR0Z1WlU5bVpuTmxkQ0E5SURBN1hHNGdJR3hsZENCb2VYQmxjbkJzWVc1bFZtVmpkRzl5SUQwZ01EdGNibHh1WEc0Z0lHaDVjR1Z5Y0d4aGJtVldaV04wYjNJZ1BTQmtZWFJoVzJ4bFpuUmRJQzBnWkdGMFlWdHlhV2RvZEYwN1hHNGdJR2g1Y0dWeWNHeGhibVZQWm1aelpYUWdMVDFjYmlBZ0lDQW9hSGx3WlhKd2JHRnVaVlpsWTNSdmNpQXFJQ2hrWVhSaFcyeGxablJkSUNzZ1pHRjBZVnR5YVdkb2RGMHBLU0F2SURJdU1EdGNibHh1WEc0Z0lDOHZJRVp2Y2lCbFlXTm9JSEJ2YVc1MElHTnZiWEIxZEdVZ2RHaGxJRzFoY21kcGJpQW9jSEp2YW1WamRDQnBiblJ2SUc1dmNtMWhiQ0IyWldOMGIzSXBYRzRnSUM4dklFbG1JSGRsSUdGeVpTQnZiaUJzYjNkbGNpQnphV1JsSUc5bUlIUm9aU0JvZVhCbGNuQnNZVzVsSUhCMWRDQnBiaUJ2Ym1VZ2NHbHNaU3dnYjNSb1pYSjNhWE5sWEc0Z0lDOHZJSEIxZENCcGRDQnBiaUIwYUdVZ2IzUm9aWElnY0dsc1pTQW9hV1lnZDJVZ2FHbDBJR2g1Y0dWeWNHeGhibVVnYjI0Z2RHaGxJRzV2YzJVc0lHWnNhWEFnWVNCamIybHVLVnh1SUNCc1pYUWdia3hsWm5RZ1BTQXdPMXh1SUNCc1pYUWdibEpwWjJoMElEMGdNRHRjYmlBZ1kyOXVjM1FnYzJsa1pTQTlJSFYwYVd4ekxucGxjbTl6S0dsdVpHbGpaWE11YkdWdVozUm9LVHRjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnBibVJwWTJWekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdiR1YwSUcxaGNtZHBiaUE5SUdoNWNHVnljR3hoYm1WUFptWnpaWFE3WEc1Y2JpQWdJQ0J0WVhKbmFXNGdLejBnYUhsd1pYSndiR0Z1WlZabFkzUnZjaUFxSUdSaGRHRmJhVzVrYVdObGMxdHBYVjA3WEc1Y2JpQWdJQ0JwWmlBb2JXRnlaMmx1SUQwOVBTQXdLU0I3WEc0Z0lDQWdJQ0J6YVdSbFcybGRJRDBnZFhScGJITXVkR0YxVW1GdVpFbHVkQ2d5TENCeVlXNWtiMjBwTzF4dUlDQWdJQ0FnYVdZZ0tITnBaR1ZiYVYwZ1BUMDlJREFwWEc0Z0lDQWdJQ0FnSUc1TVpXWjBJQ3M5SURFN1hHNGdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJRzVTYVdkb2RDQXJQU0F4TzF4dUlDQWdJSDBnWld4elpTQnBaaUFvYldGeVoybHVJRDRnTUNrZ2UxeHVJQ0FnSUNBZ2MybGtaVnRwWFNBOUlEQTdYRzRnSUNBZ0lDQnVUR1ZtZENBclBTQXhPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCemFXUmxXMmxkSUQwZ01UdGNiaUFnSUNBZ0lHNVNhV2RvZENBclBTQXhPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQzh2SUU1dmR5QjBhR0YwSUhkbElHaGhkbVVnZEdobElHTnZkVzUwY3l3Z1lXeHNiMk5oZEdVZ1lYSnlZWGx6WEc0Z0lHTnZibk4wSUdsdVpHbGpaWE5NWldaMElEMGdkWFJwYkhNdWVtVnliM01vYmt4bFpuUXBPMXh1SUNCamIyNXpkQ0JwYm1ScFkyVnpVbWxuYUhRZ1BTQjFkR2xzY3k1NlpYSnZjeWh1VW1sbmFIUXBPMXh1WEc0Z0lDOHZJRkJ2Y0hWc1lYUmxJSFJvWlNCaGNuSmhlWE1nZDJsMGFDQnBibVJwWTJWeklHRmpZMjl5WkdsdVp5QjBieUIzYUdsamFDQnphV1JsSUhSb1pYa2dabVZzYkNCdmJseHVJQ0J1VEdWbWRDQTlJREE3WEc0Z0lHNVNhV2RvZENBOUlEQTdYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2MybGtaUzVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUdsbUlDaHphV1JsVzJsZElEMDlQU0F3S1NCN1hHNGdJQ0FnSUNCcGJtUnBZMlZ6VEdWbWRGdHVUR1ZtZEYwZ1BTQnBibVJwWTJWelcybGRPMXh1SUNBZ0lDQWdia3hsWm5RZ0t6MGdNVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2FXNWthV05sYzFKcFoyaDBXMjVTYVdkb2RGMGdQU0JwYm1ScFkyVnpXMmxkTzF4dUlDQWdJQ0FnYmxKcFoyaDBJQ3M5SURFN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0JwYm1ScFkyVnpUR1ZtZEN4Y2JpQWdJQ0JwYm1ScFkyVnpVbWxuYUhRc1hHNGdJQ0FnYUhsd1pYSndiR0Z1WlRvZ2FIbHdaWEp3YkdGdVpWWmxZM1J2Y2l4Y2JpQWdJQ0J2Wm1aelpYUTZJR2g1Y0dWeWNHeGhibVZQWm1aelpYUXNYRzRnSUgwN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUdac1lYUjBaVzVVY21WbEtIUnlaV1U2SUZKaGJtUnZiVkJ5YjJwbFkzUnBiMjVVY21WbFRtOWtaU3dnYkdWaFpsTnBlbVU2SUc1MWJXSmxjaWtnZTF4dUlDQmpiMjV6ZENCdVRtOWtaWE1nUFNCdWRXMU9iMlJsY3loMGNtVmxLVHRjYmlBZ1kyOXVjM1FnYmt4bFlYWmxjeUE5SUc1MWJVeGxZWFpsY3loMGNtVmxLVHRjYmx4dUlDQXZMeUJVVDBSUE9pQldaWEpwWm5rZ2RHaGhkQ0J6Y0dGeWMyVWdZMjlrWlNCcGN5QnViM1FnY21Wc1pYWmhiblF1TGk1Y2JpQWdZMjl1YzNRZ2FIbHdaWEp3YkdGdVpYTWdQU0IxZEdsc2MxeHVJQ0FnSUM1eVlXNW5aU2h1VG05a1pYTXBYRzRnSUNBZ0xtMWhjQ2dvS1NBOVBpQjBjbVZsTG1oNWNHVnljR3hoYm1VZ1B5QXhJRG9nTUNrN1hHNWNiaUFnWTI5dWMzUWdiMlptYzJWMGN5QTlJSFYwYVd4ekxucGxjbTl6S0c1T2IyUmxjeWs3WEc0Z0lHTnZibk4wSUdOb2FXeGtjbVZ1SUQwZ2RYUnBiSE11Y21GdVoyVW9iazV2WkdWektTNXRZWEFvS0NrZ1BUNGdXeTB4TENBdE1WMHBPMXh1SUNCamIyNXpkQ0JwYm1ScFkyVnpJRDBnZFhScGJITmNiaUFnSUNBdWNtRnVaMlVvYmt4bFlYWmxjeWxjYmlBZ0lDQXViV0Z3S0NncElEMCtJSFYwYVd4ekxuSmhibWRsS0d4bFlXWlRhWHBsS1M1dFlYQW9LQ2tnUFQ0Z0xURXBLVHRjYmlBZ2NtVmpkWEp6YVhabFJteGhkSFJsYmloMGNtVmxMQ0JvZVhCbGNuQnNZVzVsY3l3Z2IyWm1jMlYwY3l3Z1kyaHBiR1J5Wlc0c0lHbHVaR2xqWlhNc0lEQXNJREFwTzF4dUlDQnlaWFIxY200Z2JtVjNJRVpzWVhSVWNtVmxLR2g1Y0dWeWNHeGhibVZ6TENCdlptWnpaWFJ6TENCamFHbHNaSEpsYml3Z2FXNWthV05sY3lrN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUhKbFkzVnljMmwyWlVac1lYUjBaVzRvWEc0Z0lIUnlaV1U2SUZKaGJtUnZiVkJ5YjJwbFkzUnBiMjVVY21WbFRtOWtaU3hjYmlBZ2FIbHdaWEp3YkdGdVpYTTZJRzUxYldKbGNsdGRMRnh1SUNCdlptWnpaWFJ6T2lCdWRXMWlaWEpiWFN4Y2JpQWdZMmhwYkdSeVpXNDZJRzUxYldKbGNsdGRXMTBzWEc0Z0lHbHVaR2xqWlhNNklHNTFiV0psY2x0ZFcxMHNYRzRnSUc1dlpHVk9kVzA2SUc1MWJXSmxjaXhjYmlBZ2JHVmhaazUxYlRvZ2JuVnRZbVZ5WEc0cE9pQjdJRzV2WkdWT2RXMDZJRzUxYldKbGNqc2diR1ZoWms1MWJUb2diblZ0WW1WeUlIMGdlMXh1SUNCcFppQW9kSEpsWlM1cGMweGxZV1lwSUh0Y2JpQWdJQ0JqYUdsc1pISmxibHR1YjJSbFRuVnRYVnN3WFNBOUlDMXNaV0ZtVG5WdE8xeHVYRzRnSUNBZ0x5OGdWRTlFVHpvZ1ZISnBjR3hsSUdOb1pXTnJJSFJvYVhNZ2IzQmxjbUYwYVc5dUlHTnZjbkpsYzNCdmJtUnpJSFJ2WEc0Z0lDQWdMeThnYVc1a2FXTmxjMXRzWldGbVRuVnRJRG9nZEhKbFpTNXBibVJwWTJWekxuTm9ZWEJsV3pCZFhTQTlJSFJ5WldVdWFXNWthV05sYzF4dUlDQWdJR2x1WkdsalpYTmJiR1ZoWms1MWJWMHVjM0JzYVdObEtEQXNJSFJ5WldVdWFXNWthV05sY3lFdWJHVnVaM1JvTENBdUxpNTBjbVZsTG1sdVpHbGpaWE1oS1R0Y2JpQWdJQ0JzWldGbVRuVnRJQ3M5SURFN1hHNGdJQ0FnY21WMGRYSnVJSHR1YjJSbFRuVnRMQ0JzWldGbVRuVnRmVHRjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0JvZVhCbGNuQnNZVzVsYzF0dWIyUmxUblZ0WFNBOUlIUnlaV1V1YUhsd1pYSndiR0Z1WlNFN1hHNGdJQ0FnYjJabWMyVjBjMXR1YjJSbFRuVnRYU0E5SUhSeVpXVXViMlptYzJWMElUdGNiaUFnSUNCamFHbHNaSEpsYmx0dWIyUmxUblZ0WFZzd1hTQTlJRzV2WkdWT2RXMGdLeUF4TzF4dUlDQWdJR052Ym5OMElHOXNaRTV2WkdWT2RXMGdQU0J1YjJSbFRuVnRPMXh1WEc0Z0lDQWdiR1YwSUhKbGN5QTlJSEpsWTNWeWMybDJaVVpzWVhSMFpXNG9YRzRnSUNBZ0lDQjBjbVZsTG14bFpuUkRhR2xzWkNFc1hHNGdJQ0FnSUNCb2VYQmxjbkJzWVc1bGN5eGNiaUFnSUNBZ0lHOW1abk5sZEhNc1hHNGdJQ0FnSUNCamFHbHNaSEpsYml4Y2JpQWdJQ0FnSUdsdVpHbGpaWE1zWEc0Z0lDQWdJQ0J1YjJSbFRuVnRJQ3NnTVN4Y2JpQWdJQ0FnSUd4bFlXWk9kVzFjYmlBZ0lDQXBPMXh1SUNBZ0lHNXZaR1ZPZFcwZ1BTQnlaWE11Ym05a1pVNTFiVHRjYmlBZ0lDQnNaV0ZtVG5WdElEMGdjbVZ6TG14bFlXWk9kVzA3WEc1Y2JpQWdJQ0JqYUdsc1pISmxibHR2YkdST2IyUmxUblZ0WFZzeFhTQTlJRzV2WkdWT2RXMGdLeUF4TzF4dVhHNGdJQ0FnY21WeklEMGdjbVZqZFhKemFYWmxSbXhoZEhSbGJpaGNiaUFnSUNBZ0lIUnlaV1V1Y21sbmFIUkRhR2xzWkNFc1hHNGdJQ0FnSUNCb2VYQmxjbkJzWVc1bGN5eGNiaUFnSUNBZ0lHOW1abk5sZEhNc1hHNGdJQ0FnSUNCamFHbHNaSEpsYml4Y2JpQWdJQ0FnSUdsdVpHbGpaWE1zWEc0Z0lDQWdJQ0J1YjJSbFRuVnRJQ3NnTVN4Y2JpQWdJQ0FnSUd4bFlXWk9kVzFjYmlBZ0lDQXBPMXh1SUNBZ0lISmxkSFZ5YmlCN2JtOWtaVTUxYlRvZ2NtVnpMbTV2WkdWT2RXMHNJR3hsWVdaT2RXMDZJSEpsY3k1c1pXRm1UblZ0ZlR0Y2JpQWdmVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnVkVzFPYjJSbGN5aDBjbVZsT2lCU1lXNWtiMjFRY205cVpXTjBhVzl1VkhKbFpVNXZaR1VwT2lCdWRXMWlaWElnZTF4dUlDQnBaaUFvZEhKbFpTNXBjMHhsWVdZcFhHNGdJQ0FnY21WMGRYSnVJREU3WEc0Z0lHVnNjMlZjYmlBZ0lDQnlaWFIxY200Z01TQXJJRzUxYlU1dlpHVnpLSFJ5WldVdWJHVm1kRU5vYVd4a0lTa2dLeUJ1ZFcxT2IyUmxjeWgwY21WbExuSnBaMmgwUTJocGJHUWhLVHRjYm4xY2JseHVablZ1WTNScGIyNGdiblZ0VEdWaGRtVnpLSFJ5WldVNklGSmhibVJ2YlZCeWIycGxZM1JwYjI1VWNtVmxUbTlrWlNrNklHNTFiV0psY2lCN1hHNGdJR2xtSUNoMGNtVmxMbWx6VEdWaFppbGNiaUFnSUNCeVpYUjFjbTRnTVR0Y2JpQWdaV3h6WlZ4dUlDQWdJSEpsZEhWeWJpQnVkVzFNWldGMlpYTW9kSEpsWlM1c1pXWjBRMmhwYkdRaEtTQXJJRzUxYlV4bFlYWmxjeWgwY21WbExuSnBaMmgwUTJocGJHUWhLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkhaVzVsY21GMFpTQmhiaUJoY25KaGVTQnZaaUJ6WlhSeklHOW1JR05oYm1ScFpHRjBaU0J1WldGeVpYTjBJRzVsYVdkb1ltOXljeUJpZVZ4dUlDb2dZMjl1YzNSeWRXTjBhVzVuSUdFZ2NtRnVaRzl0SUhCeWIycGxZM1JwYjI0Z1ptOXlaWE4wSUdGdVpDQjBZV3RwYm1jZ2RHaGxJR3hsWVhabGN5QnZaaUJoYkd3Z2RHaGxYRzRnS2lCMGNtVmxjeTRnUVc1NUlHZHBkbVZ1SUhSeVpXVWdhR0Z6SUd4bFlYWmxjeUIwYUdGMElHRnlaU0JoSUhObGRDQnZaaUJ3YjNSbGJuUnBZV3dnYm1WaGNtVnpkRnh1SUNvZ2JtVnBaMmhpYjNKekxpQkhhWFpsYmlCbGJtOTFaMmdnZEhKbFpYTWdkR2hsSUhObGRDQnZaaUJoYkd3Z2MzVmphQ0JzWldGMlpYTWdaMmwyWlhNZ1lTQm5iMjlrWEc0Z0tpQnNhV3RsYkdsb2IyOWtJRzltSUdkbGRIUnBibWNnWVNCbmIyOWtJSE5sZENCdlppQnVaV0Z5WlhOMElHNWxhV2RvWW05eWN5QnBiaUJqYjIxd2IzTnBkR1V1SUZOcGJtTmxYRzRnS2lCemRXTm9JR0VnY21GdVpHOXRJSEJ5YjJwbFkzUnBiMjRnWm05eVpYTjBJR2x6SUdsdVpYaHdaVzV6YVhabElIUnZJR052YlhCMWRHVXNJSFJvYVhNZ1kyRnVJR0psSUdGY2JpQXFJSFZ6WldaMWJDQnRaV0Z1Y3lCdlppQnpaV1ZrYVc1bklHOTBhR1Z5SUc1bFlYSmxjM1FnYm1WcFoyaGliM0lnWVd4bmIzSnBkR2h0Y3k1Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJRzFoYTJWTVpXRm1RWEp5WVhrb2NuQkdiM0psYzNRNklFWnNZWFJVY21WbFcxMHBPaUJ1ZFcxaVpYSmJYVnRkSUh0Y2JpQWdhV1lnS0hKd1JtOXlaWE4wTG14bGJtZDBhQ0ErSURBcElIdGNiaUFnSUNCamIyNXpkQ0J2ZFhSd2RYUTZJRzUxYldKbGNsdGRXMTBnUFNCYlhUdGNiaUFnSUNCbWIzSWdLR052Ym5OMElIUnlaV1VnYjJZZ2NuQkdiM0psYzNRcFhHNGdJQ0FnSUNCdmRYUndkWFF1Y0hWemFDZ3VMaTUwY21WbExtbHVaR2xqWlhNaEtUdGNibHh1SUNBZ0lISmxkSFZ5YmlCdmRYUndkWFE3WEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnY21WMGRYSnVJRnRiTFRGZFhUdGNiaUFnZlZ4dWZWeHVYRzR2S2lwY2JpQXFJRk5sYkdWamRITWdkR2hsSUhOcFpHVWdiMllnZEdobElIUnlaV1VnZEc4Z2MyVmhjbU5vSUdSMWNtbHVaeUJtYkdGMElIUnlaV1VnYzJWaGNtTm9MbHh1SUNvdlhHNW1kVzVqZEdsdmJpQnpaV3hsWTNSVGFXUmxLRnh1SUNCb2VYQmxjbkJzWVc1bE9pQnVkVzFpWlhJc1hHNGdJRzltWm5ObGREb2diblZ0WW1WeUxGeHVJQ0J3YjJsdWREb2diblZ0WW1WeUxGeHVJQ0J5WVc1a2IyMDZJRkpoYm1SdmJVWnVYRzRwSUh0Y2JpQWdiR1YwSUcxaGNtZHBiaUE5SUc5bVpuTmxkRHRjYmx4dUlDQnRZWEpuYVc0Z0t6MGdhSGx3WlhKd2JHRnVaU0FxSUhCdmFXNTBPMXh1WEc1Y2JpQWdhV1lnS0cxaGNtZHBiaUE5UFQwZ01Da2dlMXh1SUNBZ0lHTnZibk4wSUhOcFpHVWdQU0IxZEdsc2N5NTBZWFZTWVc1a1NXNTBLRElzSUhKaGJtUnZiU2s3WEc0Z0lDQWdjbVYwZFhKdUlITnBaR1U3WEc0Z0lIMGdaV3h6WlNCcFppQW9iV0Z5WjJsdUlENGdNQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQXdPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJSEpsZEhWeWJpQXhPMXh1SUNCOVhHNTlYRzVjYmk4cUtseHVJQ29nVTJWaGNtTm9aWE1nWVNCbWJHRjBkR1Z1WldRZ2NuQXRkSEpsWlNCbWIzSWdZU0J3YjJsdWRDNWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhObFlYSmphRVpzWVhSVWNtVmxLRnh1SUNCd2IybHVkRG9nYm5WdFltVnlMRnh1SUNCMGNtVmxPaUJHYkdGMFZISmxaU3hjYmlBZ2NtRnVaRzl0T2lCU1lXNWtiMjFHYmx4dUtTQjdYRzRnSUd4bGRDQnViMlJsSUQwZ01EdGNiaUFnZDJocGJHVWdLSFJ5WldVdVkyaHBiR1J5Wlc1YmJtOWtaVjFiTUYwZ1BpQXdLU0I3WEc0Z0lDQWdZMjl1YzNRZ2MybGtaU0E5SUhObGJHVmpkRk5wWkdVb1hHNGdJQ0FnSUNCMGNtVmxMbWg1Y0dWeWNHeGhibVZ6VzI1dlpHVmRMRnh1SUNBZ0lDQWdkSEpsWlM1dlptWnpaWFJ6VzI1dlpHVmRMRnh1SUNBZ0lDQWdjRzlwYm5Rc1hHNGdJQ0FnSUNCeVlXNWtiMjFjYmlBZ0lDQXBPMXh1SUNBZ0lHbG1JQ2h6YVdSbElEMDlQU0F3S1Z4dUlDQWdJQ0FnYm05a1pTQTlJSFJ5WldVdVkyaHBiR1J5Wlc1YmJtOWtaVjFiTUYwN1hHNGdJQ0FnWld4elpWeHVJQ0FnSUNBZ2JtOWtaU0E5SUhSeVpXVXVZMmhwYkdSeVpXNWJibTlrWlYxYk1WMDdYRzRnSUgxY2JseHVJQ0JqYjI1emRDQnBibVJsZUNBOUlDMHhJQ29nZEhKbFpTNWphR2xzWkhKbGJsdHViMlJsWFZzd1hUdGNiaUFnY21WMGRYSnVJSFJ5WldVdWFXNWthV05sYzF0cGJtUmxlRjA3WEc1OVhHNGlYWDA9IiwiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuLyoqXG4gKiBAbGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbi8qKlxuICogVGhpcyBpcyBhIEphdmFTY3JpcHQgcmVpbXBsZW1lbnRhdGlvbiBvZiBVTUFQIChvcmlnaW5hbCBsaWNlbnNlIGJlbG93KSwgZnJvbVxuICogdGhlIHB5dGhvbiBpbXBsZW1lbnRhdGlvbiBmb3VuZCBhdCBodHRwczovL2dpdGh1Yi5jb20vbG1jaW5uZXMvdW1hcC5cbiAqXG4gKiBAYXV0aG9yIGFuZHljb2VuZW5AZ29vZ2xlLmNvbSAoQW5keSBDb2VuZW4pXG4gKi9cbi8qKlxuICogQGxpY2Vuc2VcbiAqIEJTRCAzLUNsYXVzZSBMaWNlbnNlXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE3LCBMZWxhbmQgTWNJbm5lc1xuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICpcbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG4gKiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICogICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEVcbiAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMXG4gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUlxuICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVJcbiAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksXG4gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuaW1wb3J0ICogYXMgaGVhcCBmcm9tICcuL2hlYXAnO1xuaW1wb3J0ICogYXMgbWF0cml4IGZyb20gJy4vbWF0cml4JztcbmltcG9ydCAqIGFzIG5uRGVzY2VudCBmcm9tICcuL25uX2Rlc2NlbnQnO1xuaW1wb3J0ICogYXMgdHJlZSBmcm9tICcuL3RyZWUnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgTE0gZnJvbSAnbWwtbGV2ZW5iZXJnLW1hcnF1YXJkdCc7XG5jb25zdCBTTU9PVEhfS19UT0xFUkFOQ0UgPSAxZS01O1xuY29uc3QgTUlOX0tfRElTVF9TQ0FMRSA9IDFlLTM7XG4vKipcbiAqIFVNQVAgcHJvamVjdGlvbiBzeXN0ZW0sIGJhc2VkIG9uIHRoZSBweXRob24gaW1wbGVtZW50YXRpb24gZnJvbSBNY0lubmVzLCBMLFxuICogSGVhbHksIEosIFVNQVA6IFVuaWZvcm0gTWFuaWZvbGQgQXBwcm94aW1hdGlvbiBhbmQgUHJvamVjdGlvbiBmb3IgRGltZW5zaW9uXG4gKiBSZWR1Y3Rpb24gKGh0dHBzOi8vZ2l0aHViLmNvbS9sbWNpbm5lcy91bWFwKS5cbiAqXG4gKiBUaGlzIGltcGxlbWVudGF0aW9uIGRpZmZlcnMgaW4gYSBmZXcgcmVnYXJkczpcbiAqIGEpIFRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZW1iZWRkaW5nIGZvciBvcHRpbWl6YXRpb24gaXMgbm90IGNvbXB1dGVkIHVzaW5nXG4gKiAgICBhIHNwZWN0cmFsIG1ldGhvZCwgcmF0aGVyIGl0IGlzIGluaXRpYWxpemVkIHJhbmRvbWx5LiBUaGlzIGF2b2lkcyBzb21lXG4gKiAgICBjb21wdXRhdGlvbmFsbHkgaW50ZW5zaXZlIG1hdHJpeCBlaWdlbiBjb21wdXRhdGlvbnMgdGhhdCBhcmVuJ3QgZWFzaWx5XG4gKiAgICBwb3J0ZWQgdG8gSmF2YVNjcmlwdC5cbiAqIGIpIEEgbG90IG9mIFwiZXh0cmFcIiBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIG9taXR0ZWQgZnJvbSB0aGlzIGltcGxlbWVudGF0aW9uLFxuICogICAgbW9zdCBub3RhYmx5IGEgZ3JlYXQgZGVhbCBvZiBhbHRlcm5hdGUgZGlzdGFuY2UgZnVuY3Rpb25zLlxuICpcbiAqIFRoaXMgaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgdGhyZWUgbWV0aG9kcyBvZiByZWR1Y2luZyBkaW1lbnNpb25hbGl0eTpcbiAqIDEpIGZpdDogZml0IHRoZSBkYXRhIHN5bmNocm9ub3VzbHlcbiAqIDIpIGZpdEFzeW5jOiBmaXQgdGhlIGRhdGEgYXN5bmNocm9ub3VzbHksIHdpdGggYSBjYWxsYmFjayBmdW5jdGlvbiBwcm92aWRlZFxuICogICAgICB0aGF0IGlzIGludm9rZWQgb24gZWFjaCBvcHRpbWl6YXRpb24gc3RlcC5cbiAqIDMpIGluaXRpYWxpemVGaXQgLyBzdGVwOiBtYW51YWxseSBpbml0aWFsaXplIHRoZSBhbGdvcml0aG0gdGhlbiBleHBsaWN0bHlcbiAqICAgICAgc3RlcCB0aHJvdWdoIGVhY2ggZXBvY2ggb2YgdGhlIFNHRCBvcHRpbWl6YXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFVNQVAge1xuICAgIGdldCBuZWlnaGJvcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5OZWlnaGJvcnM7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHRoaXMubGVhcm5pbmdSYXRlID0gMS4wO1xuICAgICAgICB0aGlzLmxvY2FsQ29ubmVjdGl2aXR5ID0gMS4wO1xuICAgICAgICB0aGlzLm1pbkRpc3QgPSAwLjE7XG4gICAgICAgIHRoaXMubkNvbXBvbmVudHMgPSAyO1xuICAgICAgICB0aGlzLm5FcG9jaHMgPSAwO1xuICAgICAgICB0aGlzLm5OZWlnaGJvcnMgPSAxNTtcbiAgICAgICAgdGhpcy5uZWdhdGl2ZVNhbXBsZVJhdGUgPSA1O1xuICAgICAgICB0aGlzLnJhbmRvbSA9IE1hdGgucmFuZG9tO1xuICAgICAgICB0aGlzLnJlcHVsc2lvblN0cmVuZ3RoID0gMS4wO1xuICAgICAgICB0aGlzLnNldE9wTWl4UmF0aW8gPSAxLjA7XG4gICAgICAgIHRoaXMuc3ByZWFkID0gMS4wO1xuICAgICAgICB0aGlzLnRyYW5zZm9ybVF1ZXVlU2l6ZSA9IDQuMDtcbiAgICAgICAgLy8gU3VwZXJ2aXNlZCBwcm9qZWN0aW9uIHBhcmFtc1xuICAgICAgICB0aGlzLnRhcmdldE1ldHJpYyA9IFwiY2F0ZWdvcmljYWxcIiAvKiBUYXJnZXRNZXRyaWMuY2F0ZWdvcmljYWwgKi87XG4gICAgICAgIHRoaXMudGFyZ2V0V2VpZ2h0ID0gMC41O1xuICAgICAgICB0aGlzLnRhcmdldE5OZWlnaGJvcnMgPSAxNTtcbiAgICAgICAgdGhpcy5kaXN0YW5jZUZuID0gbnVtZXJpYztcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucnBGb3Jlc3QgPSBbXTtcbiAgICAgICAgLy8gUHJvamVjdGVkIGVtYmVkZGluZ1xuICAgICAgICB0aGlzLmVtYmVkZGluZyA9IFtdO1xuICAgICAgICB0aGlzLm9wdGltaXphdGlvblN0YXRlID0gbmV3IE9wdGltaXphdGlvblN0YXRlKCk7XG4gICAgICAgIGNvbnN0IHNldFBhcmFtID0gKGtleSkgPT4ge1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAocGFyYW1zW2tleV0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICB0aGlzW2tleV0gPSBwYXJhbXNba2V5XTtcbiAgICAgICAgfTtcbiAgICAgICAgc2V0UGFyYW0oJ2Rpc3RhbmNlRm4nKTtcbiAgICAgICAgc2V0UGFyYW0oJ2xlYXJuaW5nUmF0ZScpO1xuICAgICAgICBzZXRQYXJhbSgnbG9jYWxDb25uZWN0aXZpdHknKTtcbiAgICAgICAgc2V0UGFyYW0oJ21pbkRpc3QnKTtcbiAgICAgICAgc2V0UGFyYW0oJ25Db21wb25lbnRzJyk7XG4gICAgICAgIHNldFBhcmFtKCduRXBvY2hzJyk7XG4gICAgICAgIHNldFBhcmFtKCduTmVpZ2hib3JzJyk7XG4gICAgICAgIHNldFBhcmFtKCduZWdhdGl2ZVNhbXBsZVJhdGUnKTtcbiAgICAgICAgc2V0UGFyYW0oJ3JhbmRvbScpO1xuICAgICAgICBzZXRQYXJhbSgncmVwdWxzaW9uU3RyZW5ndGgnKTtcbiAgICAgICAgc2V0UGFyYW0oJ3NldE9wTWl4UmF0aW8nKTtcbiAgICAgICAgc2V0UGFyYW0oJ3NwcmVhZCcpO1xuICAgICAgICBzZXRQYXJhbSgndHJhbnNmb3JtUXVldWVTaXplJyk7XG4gICAgICAgIHRoaXMudGFyZ2V0Tk5laWdoYm9ycyA9IHBhcmFtcy5uTmVpZ2hib3JzIHx8IHRoaXMubk5laWdoYm9ycyB8fCB0aGlzLnRhcmdldE5OZWlnaGJvcnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZpdCB0aGUgZGF0YSB0byBhIHByb2plY3RlZCBlbWJlZGRpbmcgc3BhY2Ugc3luY2hyb25vdXNseS5cbiAgICAgKi9cbiAgICBmaXQoWCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVGaXQoWCk7XG4gICAgICAgIHRoaXMub3B0aW1pemVMYXlvdXQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1iZWRkaW5nO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaXQgdGhlIGRhdGEgdG8gYSBwcm9qZWN0ZWQgZW1iZWRkaW5nIHNwYWNlIGFzeW5jaHJvbm91c2x5LCB3aXRoIGEgY2FsbGJhY2tcbiAgICAgKiBmdW5jdGlvbiBpbnZva2VkIG9uIGV2ZXJ5IGVwb2NoIG9mIG9wdGltaXphdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBmaXRBc3luYyhYLCBjYWxsYmFjayA9ICgpID0+IHRydWUpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRml0KFgpO1xuICAgICAgICBhd2FpdCB0aGlzLm9wdGltaXplTGF5b3V0QXN5bmMoY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gdGhpcy5lbWJlZGRpbmc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHBhcmFtZXRlcnMgbmVlZGVkIGZvciBzdXBlcnZpc2VkIHByb2plY3Rpb24uXG4gICAgICovXG4gICAgc2V0U3VwZXJ2aXNlZFByb2plY3Rpb24oWSwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgdGhpcy5ZID0gWTtcbiAgICAgICAgdGhpcy50YXJnZXRNZXRyaWMgPSBwYXJhbXMudGFyZ2V0TWV0cmljIHx8IHRoaXMudGFyZ2V0TWV0cmljO1xuICAgICAgICB0aGlzLnRhcmdldFdlaWdodCA9IHBhcmFtcy50YXJnZXRXZWlnaHQgfHwgdGhpcy50YXJnZXRXZWlnaHQ7XG4gICAgICAgIHRoaXMudGFyZ2V0Tk5laWdoYm9ycyA9IHBhcmFtcy50YXJnZXROTmVpZ2hib3JzIHx8IHRoaXMudGFyZ2V0Tk5laWdoYm9ycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgdW1hcCB3aXRoIHByZWNvbXB1dGVkIEtOTiBpbmRpY2VzIGFuZCBkaXN0YW5jZXMuXG4gICAgICovXG4gICAgc2V0UHJlY29tcHV0ZWRLTk4oa25uSW5kaWNlcywga25uRGlzdGFuY2VzKSB7XG4gICAgICAgIHRoaXMua25uSW5kaWNlcyA9IGtubkluZGljZXM7XG4gICAgICAgIHRoaXMua25uRGlzdGFuY2VzID0ga25uRGlzdGFuY2VzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBmaXQgYnkgY29tcHV0aW5nIEtOTiBhbmQgYSBmdXp6eSBzaW1wbGljaWFsIHNldCwgYXMgd2VsbCBhc1xuICAgICAqIGluaXRpYWxpemluZyB0aGUgcHJvamVjdGVkIGVtYmVkZGluZ3MuIFNldHMgdGhlIG9wdGltaXphdGlvbiBzdGF0ZSBhaGVhZFxuICAgICAqIG9mIG9wdGltaXphdGlvbiBzdGVwcy4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVwb2NocyB0byBiZSB1c2VkIGZvciB0aGVcbiAgICAgKiBTR0Qgb3B0aW1pemF0aW9uLlxuICAgICAqL1xuICAgIGluaXRpYWxpemVGaXQoWCkge1xuICAgICAgICBpZiAoWC5sZW5ndGggPD0gdGhpcy5uTmVpZ2hib3JzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3QgZW5vdWdoIGRhdGEgcG9pbnRzICgke1gubGVuZ3RofSkgdG8gY3JlYXRlIG5OZWlnaGJvcnM6ICR7dGhpcy5uTmVpZ2hib3JzfS4gIEFkZCBtb3JlIGRhdGEgcG9pbnRzIG9yIGFkanVzdCB0aGUgY29uZmlndXJhdGlvbi5gKTtcbiAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZWluaXRpYWxpemUgaWYgd2UndmUgYWxyZWFkeSBpbml0aWFsaXplZCBmb3IgdGhpcyBkYXRhLlxuICAgICAgICBpZiAodGhpcy5YID09PSBYICYmIHRoaXMuaXNJbml0aWFsaXplZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE5FcG9jaHMoKTtcbiAgICAgICAgdGhpcy5YID0gWDtcbiAgICAgICAgaWYgKCF0aGlzLmtubkluZGljZXMgJiYgIXRoaXMua25uRGlzdGFuY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBrbm5SZXN1bHRzID0gdGhpcy5uZWFyZXN0TmVpZ2hib3JzKFgpO1xuICAgICAgICAgICAgdGhpcy5rbm5JbmRpY2VzID0ga25uUmVzdWx0cy5rbm5JbmRpY2VzO1xuICAgICAgICAgICAgdGhpcy5rbm5EaXN0YW5jZXMgPSBrbm5SZXN1bHRzLmtubkRpc3RhbmNlcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5mdXp6eVNpbXBsaWNpYWxTZXQoWCwgdGhpcy5uTmVpZ2hib3JzLCB0aGlzLnNldE9wTWl4UmF0aW8pO1xuICAgICAgICAvLyBTZXQgdXAgdGhlIHNlYXJjaCBncmFwaCBmb3Igc3Vic2VxdWVudCB0cmFuc2Zvcm1hdGlvbi5cbiAgICAgICAgdGhpcy5tYWtlU2VhcmNoRm5zKCk7XG4gICAgICAgIHRoaXMuc2VhcmNoR3JhcGggPSB0aGlzLm1ha2VTZWFyY2hHcmFwaChYKTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgc3VwZXJ2aXNlZCBwcm9qZWN0aW9uLCB0aGVuIGFkanVzdCB0aGUgZ3JhcGguXG4gICAgICAgIHRoaXMucHJvY2Vzc0dyYXBoRm9yU3VwZXJ2aXNlZFByb2plY3Rpb24oKTtcbiAgICAgICAgY29uc3QgeyBoZWFkLCB0YWlsLCBlcG9jaHNQZXJTYW1wbGUsIH0gPSB0aGlzLmluaXRpYWxpemVTaW1wbGljaWFsU2V0RW1iZWRkaW5nKCk7XG4gICAgICAgIC8vIFNldCB0aGUgb3B0aW1pemF0aW9uIHJvdXRpbmUgc3RhdGVcbiAgICAgICAgdGhpcy5vcHRpbWl6YXRpb25TdGF0ZS5oZWFkID0gaGVhZDtcbiAgICAgICAgdGhpcy5vcHRpbWl6YXRpb25TdGF0ZS50YWlsID0gdGFpbDtcbiAgICAgICAgdGhpcy5vcHRpbWl6YXRpb25TdGF0ZS5lcG9jaHNQZXJTYW1wbGUgPSBlcG9jaHNQZXJTYW1wbGU7XG4gICAgICAgIC8vIE5vdywgaW5pdGlhbGl6ZSB0aGUgb3B0aW1pemF0aW9uIHN0ZXBzXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZU9wdGltaXphdGlvbigpO1xuICAgICAgICB0aGlzLnByZXBhcmVGb3JPcHRpbWl6YXRpb25Mb29wKCk7XG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE5FcG9jaHMoKTtcbiAgICB9XG4gICAgbWFrZVNlYXJjaEZucygpIHtcbiAgICAgICAgY29uc3QgeyBpbml0RnJvbVRyZWUsIGluaXRGcm9tUmFuZG9tIH0gPSBubkRlc2NlbnQubWFrZUluaXRpYWxpemF0aW9ucyh0aGlzLmRpc3RhbmNlRm4pO1xuICAgICAgICB0aGlzLmluaXRGcm9tVHJlZSA9IGluaXRGcm9tVHJlZTtcbiAgICAgICAgdGhpcy5pbml0RnJvbVJhbmRvbSA9IGluaXRGcm9tUmFuZG9tO1xuICAgICAgICB0aGlzLnNlYXJjaCA9IG5uRGVzY2VudC5tYWtlSW5pdGlhbGl6ZWROTlNlYXJjaCh0aGlzLmRpc3RhbmNlRm4pO1xuICAgIH1cbiAgICBtYWtlU2VhcmNoR3JhcGgoWCkge1xuICAgICAgICBjb25zdCBrbm5JbmRpY2VzID0gdGhpcy5rbm5JbmRpY2VzO1xuICAgICAgICBjb25zdCBrbm5EaXN0YW5jZXMgPSB0aGlzLmtubkRpc3RhbmNlcztcbiAgICAgICAgY29uc3QgZGltcyA9IFtYLmxlbmd0aCwgWC5sZW5ndGhdO1xuICAgICAgICBjb25zdCBzZWFyY2hHcmFwaCA9IG5ldyBtYXRyaXguU3BhcnNlTWF0cml4KFtdLCBbXSwgW10sIGRpbXMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtubkluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGtubiA9IGtubkluZGljZXNbaV07XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZXMgPSBrbm5EaXN0YW5jZXNbaV07XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGtubi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5laWdoYm9yID0ga25uW2pdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gZGlzdGFuY2VzW2pdO1xuICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IDApXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEdyYXBoLnNldChpLCBuZWlnaGJvciwgZGlzdGFuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRyYW5zcG9zZSA9IG1hdHJpeC50cmFuc3Bvc2Uoc2VhcmNoR3JhcGgpO1xuICAgICAgICByZXR1cm4gbWF0cml4Lm1heGltdW0oc2VhcmNoR3JhcGgsIHRyYW5zcG9zZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybXMgZGF0YSB0byB0aGUgZXhpc3RpbmcgZW1iZWRkaW5nIHNwYWNlLlxuICAgICAqL1xuICAgIHRyYW5zZm9ybSh0b1RyYW5zZm9ybSkge1xuICAgICAgICAvLyBVc2UgdGhlIHByZXZpb3VzIHJhd0RhdGFcbiAgICAgICAgY29uc3QgcmF3RGF0YSA9IHRoaXMuWDtcbiAgICAgICAgaWYgKHJhd0RhdGEgPT09IHVuZGVmaW5lZCB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZGF0YSBoYXMgYmVlbiBmaXQuJyk7XG4gICAgICAgIGxldCBuTmVpZ2hib3JzID0gTWF0aC5mbG9vcih0aGlzLm5OZWlnaGJvcnMgKiB0aGlzLnRyYW5zZm9ybVF1ZXVlU2l6ZSk7XG4gICAgICAgIG5OZWlnaGJvcnMgPSBNYXRoLm1pbihyYXdEYXRhLmxlbmd0aCwgbk5laWdoYm9ycyk7XG4gICAgICAgIGNvbnN0IGluaXQgPSBubkRlc2NlbnQuaW5pdGlhbGl6ZVNlYXJjaCh0aGlzLnJwRm9yZXN0LCByYXdEYXRhLCB0b1RyYW5zZm9ybSwgbk5laWdoYm9ycywgdGhpcy5pbml0RnJvbVJhbmRvbSwgdGhpcy5pbml0RnJvbVRyZWUsIHRoaXMucmFuZG9tKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zZWFyY2gocmF3RGF0YSwgdGhpcy5zZWFyY2hHcmFwaCwgaW5pdCwgdG9UcmFuc2Zvcm0pO1xuICAgICAgICBsZXQgeyBpbmRpY2VzLCB3ZWlnaHRzOiBkaXN0YW5jZXMgfSA9IGhlYXAuZGVoZWFwU29ydChyZXN1bHQpO1xuICAgICAgICBpbmRpY2VzID0gaW5kaWNlcy5tYXAoKHgpID0+IHguc2xpY2UoMCwgdGhpcy5uTmVpZ2hib3JzKSk7XG4gICAgICAgIGRpc3RhbmNlcyA9IGRpc3RhbmNlcy5tYXAoKHgpID0+IHguc2xpY2UoMCwgdGhpcy5uTmVpZ2hib3JzKSk7XG4gICAgICAgIGNvbnN0IGFkanVzdGVkTG9jYWxDb25uZWN0aXZpdHkgPSBNYXRoLm1heCgwLCB0aGlzLmxvY2FsQ29ubmVjdGl2aXR5IC0gMSk7XG4gICAgICAgIGNvbnN0IHsgc2lnbWFzLCByaG9zIH0gPSB0aGlzLnNtb290aEtOTkRpc3RhbmNlKGRpc3RhbmNlcywgdGhpcy5uTmVpZ2hib3JzLCBhZGp1c3RlZExvY2FsQ29ubmVjdGl2aXR5KTtcbiAgICAgICAgY29uc3QgeyByb3dzLCBjb2xzLCB2YWxzIH0gPSB0aGlzLmNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzKGluZGljZXMsIGRpc3RhbmNlcywgc2lnbWFzLCByaG9zKTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IFt0b1RyYW5zZm9ybS5sZW5ndGgsIHJhd0RhdGEubGVuZ3RoXTtcbiAgICAgICAgbGV0IGdyYXBoID0gbmV3IG1hdHJpeC5TcGFyc2VNYXRyaXgocm93cywgY29scywgdmFscywgc2l6ZSk7XG4gICAgICAgIC8vIFRoaXMgd2FzIGEgdmVyeSBzcGVjaWFsbHkgY29uc3RydWN0ZWQgZ3JhcGggd2l0aCBjb25zdGFudCBkZWdyZWUuXG4gICAgICAgIC8vIFRoYXQgbGV0cyB1cyBkbyBmYW5jeSB1bnBhY2tpbmcgYnkgcmVzaGFwaW5nIHRoZSBjc3IgbWF0cml4IGluZGljZXNcbiAgICAgICAgLy8gYW5kIGRhdGEuIERvaW5nIHNvIHJlbGllcyBvbiB0aGUgY29uc3RhbnQgZGVncmVlIGFzc3VtcHRpb24hXG4gICAgICAgIGNvbnN0IG5vcm1lZCA9IG1hdHJpeC5ub3JtYWxpemUoZ3JhcGgsIFwibDFcIiAvKiBtYXRyaXguTm9ybVR5cGUubDEgKi8pO1xuICAgICAgICBjb25zdCBjc3JNYXRyaXggPSBtYXRyaXguZ2V0Q1NSKG5vcm1lZCk7XG4gICAgICAgIGNvbnN0IG5Qb2ludHMgPSB0b1RyYW5zZm9ybS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGVJbmRpY2VzID0gdXRpbHMucmVzaGFwZTJkKGNzck1hdHJpeC5pbmRpY2VzLCBuUG9pbnRzLCB0aGlzLm5OZWlnaGJvcnMpO1xuICAgICAgICBjb25zdCBlV2VpZ2h0cyA9IHV0aWxzLnJlc2hhcGUyZChjc3JNYXRyaXgudmFsdWVzLCBuUG9pbnRzLCB0aGlzLm5OZWlnaGJvcnMpO1xuICAgICAgICBjb25zdCBlbWJlZGRpbmcgPSBpbml0VHJhbnNmb3JtKGVJbmRpY2VzLCBlV2VpZ2h0cywgdGhpcy5lbWJlZGRpbmcpO1xuICAgICAgICBjb25zdCBuRXBvY2hzID0gdGhpcy5uRXBvY2hzID9cbiAgICAgICAgICAgIHRoaXMubkVwb2NocyAvIDMgOlxuICAgICAgICAgICAgZ3JhcGgublJvd3MgPD0gMTAwMDAgP1xuICAgICAgICAgICAgICAgIDEwMCA6XG4gICAgICAgICAgICAgICAgMzA7XG4gICAgICAgIGNvbnN0IGdyYXBoTWF4ID0gZ3JhcGhcbiAgICAgICAgICAgIC5nZXRWYWx1ZXMoKVxuICAgICAgICAgICAgLnJlZHVjZSgobWF4LCB2YWwpID0+ICh2YWwgPiBtYXggPyB2YWwgOiBtYXgpLCAwKTtcbiAgICAgICAgZ3JhcGggPSBncmFwaC5tYXAoKHZhbHVlKSA9PiAodmFsdWUgPCBncmFwaE1heCAvIG5FcG9jaHMgPyAwIDogdmFsdWUpKTtcbiAgICAgICAgZ3JhcGggPSBtYXRyaXguZWxpbWluYXRlWmVyb3MoZ3JhcGgpO1xuICAgICAgICBjb25zdCBlcG9jaHNQZXJTYW1wbGUgPSB0aGlzLm1ha2VFcG9jaHNQZXJTYW1wbGUoZ3JhcGguZ2V0VmFsdWVzKCksIG5FcG9jaHMpO1xuICAgICAgICBjb25zdCBoZWFkID0gZ3JhcGguZ2V0Um93cygpO1xuICAgICAgICBjb25zdCB0YWlsID0gZ3JhcGguZ2V0Q29scygpO1xuICAgICAgICAvLyBJbml0aWFsaXplIG9wdGltaXphdGlvbiBzbGlnaHRseSBkaWZmZXJlbnRseSB0aGFuIHRoZSBmaXQgbWV0aG9kLlxuICAgICAgICB0aGlzLmFzc2lnbk9wdGltaXphdGlvblN0YXRlUGFyYW1ldGVycyh7XG4gICAgICAgICAgICBoZWFkRW1iZWRkaW5nOiBlbWJlZGRpbmcsXG4gICAgICAgICAgICB0YWlsRW1iZWRkaW5nOiB0aGlzLmVtYmVkZGluZyxcbiAgICAgICAgICAgIGhlYWQsXG4gICAgICAgICAgICB0YWlsLFxuICAgICAgICAgICAgY3VycmVudEVwb2NoOiAwLFxuICAgICAgICAgICAgbkVwb2NocyxcbiAgICAgICAgICAgIG5WZXJ0aWNlczogZ3JhcGguZ2V0RGltcygpWzFdLFxuICAgICAgICAgICAgZXBvY2hzUGVyU2FtcGxlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wcmVwYXJlRm9yT3B0aW1pemF0aW9uTG9vcCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpbWl6ZUxheW91dCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgd2UncmUgdXNpbmcgc3VwZXJ2aXNlZCBwcm9qZWN0aW9uLCB0aGVuIHByb2Nlc3MgdGhlIGdyYXBoXG4gICAgICogYWNjb3JkaW5nbHkuXG4gICAgICovXG4gICAgcHJvY2Vzc0dyYXBoRm9yU3VwZXJ2aXNlZFByb2plY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0IHsgWSwgWCB9ID0gdGhpcztcbiAgICAgICAgaWYgKFkpIHtcbiAgICAgICAgICAgIGlmIChZLmxlbmd0aCAhPT0gWC5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMZW5ndGggb2YgWCBhbmQgeSBtdXN0IGJlIGVxdWFsJyk7XG4gICAgICAgICAgICBpZiAodGhpcy50YXJnZXRNZXRyaWMgPT09IFwiY2F0ZWdvcmljYWxcIiAvKiBUYXJnZXRNZXRyaWMuY2F0ZWdvcmljYWwgKi8pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsdCA9IHRoaXMudGFyZ2V0V2VpZ2h0IDwgMS4wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZhckRpc3QgPSBsdCA/IDIuNSAqICgxLjAgLyAoMS4wIC0gdGhpcy50YXJnZXRXZWlnaHQpKSA6IDEuMGUxMjtcbiAgICAgICAgICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5jYXRlZ29yaWNhbFNpbXBsaWNpYWxTZXRJbnRlcnNlY3Rpb24odGhpcy5ncmFwaCwgWSwgZmFyRGlzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUT0RPIChhbmR5Y29lbmVuQCk6IGFkZCBub24tY2F0ZWdvcmljYWwgc3VwZXJ2aXNlZCBlbWJlZGRpbmdzLlxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hbnVhbGx5IHN0ZXAgdGhyb3VnaCB0aGUgb3B0aW1pemF0aW9uIHByb2Nlc3Mgb25lIGVwb2NoIGF0IGEgdGltZS5cbiAgICAgKi9cbiAgICBzdGVwKCkge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnRFcG9jaCB9ID0gdGhpcy5vcHRpbWl6YXRpb25TdGF0ZTtcbiAgICAgICAgaWYgKGN1cnJlbnRFcG9jaCA8IHRoaXMuZ2V0TkVwb2NocygpKVxuICAgICAgICAgICAgdGhpcy5vcHRpbWl6ZUxheW91dFN0ZXAoY3VycmVudEVwb2NoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjb21wdXRlZCBwcm9qZWN0ZWQgZW1iZWRkaW5nLlxuICAgICAqL1xuICAgIGdldEVtYmVkZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1iZWRkaW5nO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21wdXRlIHRoZSBgYG5OZWlnaGJvcnNgYCBuZWFyZXN0IHBvaW50cyBmb3IgZWFjaCBkYXRhIHBvaW50IGluIGBgWGBgXG4gICAgICogVGhpcyBtYXkgYmUgZXhhY3QsIGJ1dCBtb3JlIGxpa2VseSBpcyBhcHByb3hpbWF0ZWQgdmlhIG5lYXJlc3QgbmVpZ2hib3JcbiAgICAgKiBkZXNjZW50LlxuICAgICAqL1xuICAgIG5lYXJlc3ROZWlnaGJvcnMoWCkge1xuICAgICAgICBjb25zdCB7IGRpc3RhbmNlRm4sIG5OZWlnaGJvcnMgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGxvZzIgPSAobikgPT4gTWF0aC5sb2cobikgLyBNYXRoLmxvZygyKTtcbiAgICAgICAgY29uc3QgbWV0cmljTk5EZXNjZW50ID0gbm5EZXNjZW50Lm1ha2VOTkRlc2NlbnQoZGlzdGFuY2VGbiwgdGhpcy5yYW5kb20pO1xuICAgICAgICAvLyBIYW5kbGUgcHl0aG9uMyByb3VuZGluZyBkb3duIGZyb20gMC41IGRpc2NycGFuY3lcbiAgICAgICAgY29uc3Qgcm91bmQgPSAobikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG4gPT09IDAuNSA/IDAgOiBNYXRoLnJvdW5kKG4pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuVHJlZXMgPSA1ICsgTWF0aC5mbG9vcihyb3VuZChYLmxlbmd0aCAqKiAwLjUgLyAyMC4wKSk7XG4gICAgICAgIGNvbnN0IG5JdGVycyA9IE1hdGgubWF4KDUsIE1hdGguZmxvb3IoTWF0aC5yb3VuZChsb2cyKFgubGVuZ3RoKSkpKTtcbiAgICAgICAgdGhpcy5ycEZvcmVzdCA9IHRyZWUubWFrZUZvcmVzdChYLCBuTmVpZ2hib3JzLCBuVHJlZXMsIHRoaXMucmFuZG9tKTtcbiAgICAgICAgY29uc3QgbGVhZkFycmF5ID0gdHJlZS5tYWtlTGVhZkFycmF5KHRoaXMucnBGb3Jlc3QpO1xuICAgICAgICBjb25zdCB7IGluZGljZXMsIHdlaWdodHMgfSA9IG1ldHJpY05ORGVzY2VudChYLCBsZWFmQXJyYXksIG5OZWlnaGJvcnMsIG5JdGVycyk7XG4gICAgICAgIHJldHVybiB7IGtubkluZGljZXM6IGluZGljZXMsIGtubkRpc3RhbmNlczogd2VpZ2h0cyB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIHNldCBvZiBkYXRhIFgsIGEgbmVpZ2hib3Job29kIHNpemUsIGFuZCBhIG1lYXN1cmUgb2YgZGlzdGFuY2VcbiAgICAgKiBjb21wdXRlIHRoZSBmdXp6eSBzaW1wbGljaWFsIHNldCAoaGVyZSByZXByZXNlbnRlZCBhcyBhIGZ1enp5IGdyYXBoIGluXG4gICAgICogdGhlIGZvcm0gb2YgYSBzcGFyc2UgbWF0cml4KSBhc3NvY2lhdGVkIHRvIHRoZSBkYXRhLiBUaGlzIGlzIGRvbmUgYnlcbiAgICAgKiBsb2NhbGx5IGFwcHJveGltYXRpbmcgZ2VvZGVzaWMgZGlzdGFuY2UgYXQgZWFjaCBwb2ludCwgY3JlYXRpbmcgYSBmdXp6eVxuICAgICAqIHNpbXBsaWNpYWwgc2V0IGZvciBlYWNoIHN1Y2ggcG9pbnQsIGFuZCB0aGVuIGNvbWJpbmluZyBhbGwgdGhlIGxvY2FsXG4gICAgICogZnV6enkgc2ltcGxpY2lhbCBzZXRzIGludG8gYSBnbG9iYWwgb25lIHZpYSBhIGZ1enp5IHVuaW9uLlxuICAgICAqL1xuICAgIGZ1enp5U2ltcGxpY2lhbFNldChYLCBuTmVpZ2hib3JzLCBzZXRPcE1peFJhdGlvID0gMS4wKSB7XG4gICAgICAgIGNvbnN0IHsga25uSW5kaWNlcyA9IFtdLCBrbm5EaXN0YW5jZXMgPSBbXSwgbG9jYWxDb25uZWN0aXZpdHkgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgc2lnbWFzLCByaG9zIH0gPSB0aGlzLnNtb290aEtOTkRpc3RhbmNlKGtubkRpc3RhbmNlcywgbk5laWdoYm9ycywgbG9jYWxDb25uZWN0aXZpdHkpO1xuICAgICAgICBjb25zdCB7IHJvd3MsIGNvbHMsIHZhbHMgfSA9IHRoaXMuY29tcHV0ZU1lbWJlcnNoaXBTdHJlbmd0aHMoa25uSW5kaWNlcywga25uRGlzdGFuY2VzLCBzaWdtYXMsIHJob3MpO1xuICAgICAgICBjb25zdCBzaXplID0gW1gubGVuZ3RoLCBYLmxlbmd0aF07XG4gICAgICAgIGNvbnN0IHNwYXJzZU1hdHJpeCA9IG5ldyBtYXRyaXguU3BhcnNlTWF0cml4KHJvd3MsIGNvbHMsIHZhbHMsIHNpemUpO1xuICAgICAgICBjb25zdCB0cmFuc3Bvc2UgPSBtYXRyaXgudHJhbnNwb3NlKHNwYXJzZU1hdHJpeCk7XG4gICAgICAgIGNvbnN0IHByb2RNYXRyaXggPSBtYXRyaXgucGFpcndpc2VNdWx0aXBseShzcGFyc2VNYXRyaXgsIHRyYW5zcG9zZSk7XG4gICAgICAgIGNvbnN0IGEgPSBtYXRyaXguc3VidHJhY3QobWF0cml4LmFkZChzcGFyc2VNYXRyaXgsIHRyYW5zcG9zZSksIHByb2RNYXRyaXgpO1xuICAgICAgICBjb25zdCBiID0gbWF0cml4Lm11bHRpcGx5U2NhbGFyKGEsIHNldE9wTWl4UmF0aW8pO1xuICAgICAgICBjb25zdCBjID0gbWF0cml4Lm11bHRpcGx5U2NhbGFyKHByb2RNYXRyaXgsIDEuMCAtIHNldE9wTWl4UmF0aW8pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBtYXRyaXguYWRkKGIsIGMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21iaW5lIGEgZnV6enkgc2ltcGxpY2lhbCBzZXQgd2l0aCBhbm90aGVyIGZ1enp5IHNpbXBsaWNpYWwgc2V0XG4gICAgICogZ2VuZXJhdGVkIGZyb20gY2F0ZWdvcmljYWwgZGF0YSB1c2luZyBjYXRlZ29yaWNhbCBkaXN0YW5jZXMuIFRoZSB0YXJnZXRcbiAgICAgKiBkYXRhIGlzIGFzc3VtZWQgdG8gYmUgY2F0ZWdvcmljYWwgbGFiZWwgZGF0YSAoYSB2ZWN0b3Igb2YgbGFiZWxzKSxcbiAgICAgKiBhbmQgdGhpcyB3aWxsIHVwZGF0ZSB0aGUgZnV6enkgc2ltcGxpY2lhbCBzZXQgdG8gcmVzcGVjdCB0aGF0IGxhYmVsIGRhdGEuXG4gICAgICovXG4gICAgY2F0ZWdvcmljYWxTaW1wbGljaWFsU2V0SW50ZXJzZWN0aW9uKHNpbXBsaWNpYWxTZXQsIHRhcmdldCwgZmFyRGlzdCwgdW5rbm93bkRpc3QgPSAxLjApIHtcbiAgICAgICAgbGV0IGludGVyc2VjdGlvbiA9IGZhc3RJbnRlcnNlY3Rpb24oc2ltcGxpY2lhbFNldCwgdGFyZ2V0LCB1bmtub3duRGlzdCwgZmFyRGlzdCk7XG4gICAgICAgIGludGVyc2VjdGlvbiA9IG1hdHJpeC5lbGltaW5hdGVaZXJvcyhpbnRlcnNlY3Rpb24pO1xuICAgICAgICByZXR1cm4gcmVzZXRMb2NhbENvbm5lY3Rpdml0eShpbnRlcnNlY3Rpb24pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21wdXRlIGEgY29udGludW91cyB2ZXJzaW9uIG9mIHRoZSBkaXN0YW5jZSB0byB0aGUga3RoIG5lYXJlc3RcbiAgICAgKiBuZWlnaGJvci4gVGhhdCBpcywgdGhpcyBpcyBzaW1pbGFyIHRvIGtubi1kaXN0YW5jZSBidXQgYWxsb3dzIGNvbnRpbnVvdXNcbiAgICAgKiBrIHZhbHVlcyByYXRoZXIgdGhhbiByZXF1aXJpbmcgYW4gaW50ZWdyYWwgay4gSW4gZXNzY2VuY2Ugd2UgYXJlIHNpbXBseVxuICAgICAqIGNvbXB1dGluZyB0aGUgZGlzdGFuY2Ugc3VjaCB0aGF0IHRoZSBjYXJkaW5hbGl0eSBvZiBmdXp6eSBzZXQgd2UgZ2VuZXJhdGVcbiAgICAgKiBpcyBrLlxuICAgICAqL1xuICAgIHNtb290aEtOTkRpc3RhbmNlKGRpc3RhbmNlcywgaywgbG9jYWxDb25uZWN0aXZpdHkgPSAxLjAsIG5JdGVyID0gNjQsIGJhbmR3aWR0aCA9IDEuMCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSAoTWF0aC5sb2coaykgLyBNYXRoLmxvZygyKSkgKiBiYW5kd2lkdGg7XG4gICAgICAgIGNvbnN0IHJobyA9IHV0aWxzLnplcm9zKGRpc3RhbmNlcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB1dGlscy56ZXJvcyhkaXN0YW5jZXMubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXN0YW5jZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBsbyA9IDAuMDtcbiAgICAgICAgICAgIGxldCBoaSA9IEluZmluaXR5O1xuICAgICAgICAgICAgbGV0IG1pZCA9IDEuMDtcbiAgICAgICAgICAgIC8vIFRPRE86IFRoaXMgaXMgdmVyeSBpbmVmZmljaWVudCwgYnV0IHdpbGwgZG8gZm9yIG5vdy4gRklYTUVcbiAgICAgICAgICAgIGNvbnN0IGl0aERpc3RhbmNlcyA9IGRpc3RhbmNlc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IG5vblplcm9EaXN0cyA9IGl0aERpc3RhbmNlcy5maWx0ZXIoKGQpID0+IGQgPiAwLjApO1xuICAgICAgICAgICAgaWYgKG5vblplcm9EaXN0cy5sZW5ndGggPj0gbG9jYWxDb25uZWN0aXZpdHkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IobG9jYWxDb25uZWN0aXZpdHkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRpb24gPSBsb2NhbENvbm5lY3Rpdml0eSAtIGluZGV4O1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmhvW2ldID0gbm9uWmVyb0Rpc3RzW2luZGV4IC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0aW9uID4gU01PT1RIX0tfVE9MRVJBTkNFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByaG9baV0gKz1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9uICogKG5vblplcm9EaXN0c1tpbmRleF0gLSBub25aZXJvRGlzdHNbaW5kZXggLSAxXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJob1tpXSA9IGludGVycG9sYXRpb24gKiBub25aZXJvRGlzdHNbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobm9uWmVyb0Rpc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByaG9baV0gPSB1dGlscy5tYXgobm9uWmVyb0Rpc3RzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgbkl0ZXI7IG4rKykge1xuICAgICAgICAgICAgICAgIGxldCBwc3VtID0gMC4wO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgZGlzdGFuY2VzW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBkaXN0YW5jZXNbaV1bal0gLSByaG9baV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChkID4gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHBzdW0gKz0gTWF0aC5leHAoLShkIC8gbWlkKSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHBzdW0gKz0gMS4wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMocHN1bSAtIHRhcmdldCkgPCBTTU9PVEhfS19UT0xFUkFOQ0UpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGlmIChwc3VtID4gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGhpID0gbWlkO1xuICAgICAgICAgICAgICAgICAgICBtaWQgPSAobG8gKyBoaSkgLyAyLjA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsbyA9IG1pZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhpID09PSBJbmZpbml0eSlcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pZCAqPSAyO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBtaWQgPSAobG8gKyBoaSkgLyAyLjA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2ldID0gbWlkO1xuICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBpcyB2ZXJ5IGluZWZmaWNpZW50LCBidXQgd2lsbCBkbyBmb3Igbm93LiBGSVhNRVxuICAgICAgICAgICAgaWYgKHJob1tpXSA+IDAuMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lYW5JdGhEaXN0YW5jZXMgPSB1dGlscy5tZWFuKGl0aERpc3RhbmNlcyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtpXSA8IE1JTl9LX0RJU1RfU0NBTEUgKiBtZWFuSXRoRGlzdGFuY2VzKVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBNSU5fS19ESVNUX1NDQUxFICogbWVhbkl0aERpc3RhbmNlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lYW5EaXN0YW5jZXMgPSB1dGlscy5tZWFuKGRpc3RhbmNlcy5tYXAodXRpbHMubWVhbikpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHRbaV0gPCBNSU5fS19ESVNUX1NDQUxFICogbWVhbkRpc3RhbmNlcylcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gTUlOX0tfRElTVF9TQ0FMRSAqIG1lYW5EaXN0YW5jZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc2lnbWFzOiByZXN1bHQsIHJob3M6IHJobyB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3QgdGhlIG1lbWJlcnNoaXAgc3RyZW5ndGggZGF0YSBmb3IgdGhlIDEtc2tlbGV0b24gb2YgZWFjaCBsb2NhbFxuICAgICAqIGZ1enp5IHNpbXBsaWNpYWwgc2V0IC0tIHRoaXMgaXMgZm9ybWVkIGFzIGEgc3BhcnNlIG1hdHJpeCB3aGVyZSBlYWNoIHJvdyBpc1xuICAgICAqIGEgbG9jYWwgZnV6enkgc2ltcGxpY2lhbCBzZXQsIHdpdGggYSBtZW1iZXJzaGlwIHN0cmVuZ3RoIGZvciB0aGVcbiAgICAgKiAxLXNpbXBsZXggdG8gZWFjaCBvdGhlciBkYXRhIHBvaW50LlxuICAgICAqL1xuICAgIGNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzKGtubkluZGljZXMsIGtubkRpc3RhbmNlcywgc2lnbWFzLCByaG9zKSB7XG4gICAgICAgIGNvbnN0IG5TYW1wbGVzID0ga25uSW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG5OZWlnaGJvcnMgPSBrbm5JbmRpY2VzWzBdLmxlbmd0aDtcbiAgICAgICAgY29uc3Qgcm93cyA9IHV0aWxzLnplcm9zKG5TYW1wbGVzICogbk5laWdoYm9ycyk7XG4gICAgICAgIGNvbnN0IGNvbHMgPSB1dGlscy56ZXJvcyhuU2FtcGxlcyAqIG5OZWlnaGJvcnMpO1xuICAgICAgICBjb25zdCB2YWxzID0gdXRpbHMuemVyb3MoblNhbXBsZXMgKiBuTmVpZ2hib3JzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuU2FtcGxlczsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG5OZWlnaGJvcnM7IGorKykge1xuICAgICAgICAgICAgICAgIGxldCB2YWwgPSAwO1xuICAgICAgICAgICAgICAgIGlmIChrbm5JbmRpY2VzW2ldW2pdID09PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIFdlIGRpZG4ndCBnZXQgdGhlIGZ1bGwga25uIGZvciBpXG4gICAgICAgICAgICAgICAgaWYgKGtubkluZGljZXNbaV1bal0gPT09IGkpXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IDAuMDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChrbm5EaXN0YW5jZXNbaV1bal0gLSByaG9zW2ldIDw9IDAuMClcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gMS4wO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gTWF0aC5leHAoLSgoa25uRGlzdGFuY2VzW2ldW2pdIC0gcmhvc1tpXSkgLyBzaWdtYXNbaV0pKTtcbiAgICAgICAgICAgICAgICByb3dzW2kgKiBuTmVpZ2hib3JzICsgal0gPSBpO1xuICAgICAgICAgICAgICAgIGNvbHNbaSAqIG5OZWlnaGJvcnMgKyBqXSA9IGtubkluZGljZXNbaV1bal07XG4gICAgICAgICAgICAgICAgdmFsc1tpICogbk5laWdoYm9ycyArIGpdID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHJvd3MsIGNvbHMsIHZhbHMgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIGZ1enp5IHNpbXBsaWNpYWwgc2V0IGVtYmVkZGluZywgdXNpbmcgYSBzcGVjaWZpZWRcbiAgICAgKiBpbml0aWFsaXNhdGlvbiBtZXRob2QgYW5kIHRoZW4gbWluaW1pemluZyB0aGUgZnV6enkgc2V0IGNyb3NzIGVudHJvcHlcbiAgICAgKiBiZXR3ZWVuIHRoZSAxLXNrZWxldG9ucyBvZiB0aGUgaGlnaCBhbmQgbG93IGRpbWVuc2lvbmFsIGZ1enp5IHNpbXBsaWNpYWxcbiAgICAgKiBzZXRzLlxuICAgICAqL1xuICAgIGluaXRpYWxpemVTaW1wbGljaWFsU2V0RW1iZWRkaW5nKCkge1xuICAgICAgICBjb25zdCBuRXBvY2hzID0gdGhpcy5nZXRORXBvY2hzKCk7XG4gICAgICAgIGNvbnN0IHsgbkNvbXBvbmVudHMgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGdyYXBoVmFsdWVzID0gdGhpcy5ncmFwaC5nZXRWYWx1ZXMoKTtcbiAgICAgICAgbGV0IGdyYXBoTWF4ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBncmFwaFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBncmFwaFZhbHVlc1tpXTtcbiAgICAgICAgICAgIGlmIChncmFwaE1heCA8IGdyYXBoVmFsdWVzW2ldKVxuICAgICAgICAgICAgICAgIGdyYXBoTWF4ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ3JhcGggPSB0aGlzLmdyYXBoLm1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA8IGdyYXBoTWF4IC8gbkVwb2NocylcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBXZSdyZSBub3QgY29tcHV0aW5nIHRoZSBzcGVjdHJhbCBpbml0aWFsaXphdGlvbiBpbiB0aGlzIGltcGxlbWVudGF0aW9uXG4gICAgICAgIC8vIHVudGlsIHdlIGRldGVybWluZSBhIGJldHRlciBlaWdlbnZhbHVlL2VpZ2VudmVjdG9yIGNvbXB1dGF0aW9uXG4gICAgICAgIC8vIGFwcHJvYWNoXG4gICAgICAgIHRoaXMuZW1iZWRkaW5nID0gdXRpbHMuemVyb3MoZ3JhcGgublJvd3MpLm1hcCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMuemVyb3MobkNvbXBvbmVudHMpLm1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHV0aWxzLnRhdVJhbmQodGhpcy5yYW5kb20pICogMjAgKyAtMTA7IC8vIFJhbmRvbSBmcm9tIC0xMCB0byAxMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBHZXQgZ3JhcGggZGF0YSBpbiBvcmRlcmVkIHdheS4uLlxuICAgICAgICBjb25zdCB3ZWlnaHRzID0gW107XG4gICAgICAgIGNvbnN0IGhlYWQgPSBbXTtcbiAgICAgICAgY29uc3QgdGFpbCA9IFtdO1xuICAgICAgICBjb25zdCByb3dDb2xWYWx1ZXMgPSBncmFwaC5nZXRBbGwoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb2xWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gcm93Q29sVmFsdWVzW2ldO1xuICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgd2VpZ2h0cy5wdXNoKGVudHJ5LnZhbHVlKTtcbiAgICAgICAgICAgICAgICB0YWlsLnB1c2goZW50cnkucm93KTtcbiAgICAgICAgICAgICAgICBoZWFkLnB1c2goZW50cnkuY29sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlcG9jaHNQZXJTYW1wbGUgPSB0aGlzLm1ha2VFcG9jaHNQZXJTYW1wbGUod2VpZ2h0cywgbkVwb2Nocyk7XG4gICAgICAgIHJldHVybiB7IGhlYWQsIHRhaWwsIGVwb2Noc1BlclNhbXBsZSB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIHNldCBvZiB3ZWlnaHRzIGFuZCBudW1iZXIgb2YgZXBvY2hzIGdlbmVyYXRlIHRoZSBudW1iZXIgb2ZcbiAgICAgKiBlcG9jaHMgcGVyIHNhbXBsZSBmb3IgZWFjaCB3ZWlnaHQuXG4gICAgICovXG4gICAgbWFrZUVwb2Noc1BlclNhbXBsZSh3ZWlnaHRzLCBuRXBvY2hzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLmZpbGxlZCh3ZWlnaHRzLmxlbmd0aCwgLTEuMCk7XG4gICAgICAgIGNvbnN0IG1heCA9IHV0aWxzLm1heCh3ZWlnaHRzKTtcbiAgICAgICAgY29uc3QgblNhbXBsZXMgPSB3ZWlnaHRzLm1hcCgodykgPT4gKHcgLyBtYXgpICogbkVwb2Nocyk7XG4gICAgICAgIG5TYW1wbGVzLmZvckVhY2goKG4sIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChuID4gMClcbiAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBuRXBvY2hzIC8gblNhbXBsZXNbaV07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3NpZ25zIG9wdGltaXphdGlvbiBzdGF0ZSBwYXJhbWV0ZXJzIGZyb20gYSBwYXJ0aWFsIG9wdGltaXphdGlvbiBzdGF0ZS5cbiAgICAgKi9cbiAgICBhc3NpZ25PcHRpbWl6YXRpb25TdGF0ZVBhcmFtZXRlcnMoc3RhdGUpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGltaXphdGlvblN0YXRlLCBzdGF0ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgYSBmZXcgb3B0aW1pemF0aW9uIHN0YXRlIHBhcmFtZXRlcnMgdGhhdCBhcmUgbmVjZXNzYXJ5IGJlZm9yZSBlbnRlcmluZ1xuICAgICAqIHRoZSBvcHRpbWl6YXRpb24gc3RlcCBsb29wLlxuICAgICAqL1xuICAgIHByZXBhcmVGb3JPcHRpbWl6YXRpb25Mb29wKCkge1xuICAgICAgICAvLyBIeXBlcnBhcmFtZXRlcnNcbiAgICAgICAgY29uc3QgeyByZXB1bHNpb25TdHJlbmd0aCwgbGVhcm5pbmdSYXRlLCBuZWdhdGl2ZVNhbXBsZVJhdGUgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgZXBvY2hzUGVyU2FtcGxlLCBoZWFkRW1iZWRkaW5nLCB0YWlsRW1iZWRkaW5nLCB9ID0gdGhpcy5vcHRpbWl6YXRpb25TdGF0ZTtcbiAgICAgICAgY29uc3QgZGltID0gaGVhZEVtYmVkZGluZ1swXS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG1vdmVPdGhlciA9IGhlYWRFbWJlZGRpbmcubGVuZ3RoID09PSB0YWlsRW1iZWRkaW5nLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGUgPSBlcG9jaHNQZXJTYW1wbGUubWFwKChlKSA9PiBlIC8gbmVnYXRpdmVTYW1wbGVSYXRlKTtcbiAgICAgICAgY29uc3QgZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZSA9IFsuLi5lcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZV07XG4gICAgICAgIGNvbnN0IGVwb2NoT2ZOZXh0U2FtcGxlID0gWy4uLmVwb2Noc1BlclNhbXBsZV07XG4gICAgICAgIHRoaXMuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzKHtcbiAgICAgICAgICAgIGVwb2NoT2ZOZXh0U2FtcGxlLFxuICAgICAgICAgICAgZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZSxcbiAgICAgICAgICAgIGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlLFxuICAgICAgICAgICAgbW92ZU90aGVyLFxuICAgICAgICAgICAgaW5pdGlhbEFscGhhOiBsZWFybmluZ1JhdGUsXG4gICAgICAgICAgICBhbHBoYTogbGVhcm5pbmdSYXRlLFxuICAgICAgICAgICAgZ2FtbWE6IHJlcHVsc2lvblN0cmVuZ3RoLFxuICAgICAgICAgICAgZGltLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgb3B0aW1pemF0aW9uIHN0YXRlIGZvciBzdGVwd2lzZSBvcHRpbWl6YXRpb24uXG4gICAgICovXG4gICAgaW5pdGlhbGl6ZU9wdGltaXphdGlvbigpIHtcbiAgICAgICAgLy8gQWxnb3JpdGhtIHN0YXRlXG4gICAgICAgIGNvbnN0IGhlYWRFbWJlZGRpbmcgPSB0aGlzLmVtYmVkZGluZztcbiAgICAgICAgY29uc3QgdGFpbEVtYmVkZGluZyA9IHRoaXMuZW1iZWRkaW5nO1xuICAgICAgICAvLyBJbml0aWFsaXplZCBpbiBpbml0aWFsaXplU2ltcGxpY2lhbFNldEVtYmVkZGluZygpXG4gICAgICAgIGNvbnN0IHsgaGVhZCwgdGFpbCwgZXBvY2hzUGVyU2FtcGxlIH0gPSB0aGlzLm9wdGltaXphdGlvblN0YXRlO1xuICAgICAgICBjb25zdCBuRXBvY2hzID0gdGhpcy5nZXRORXBvY2hzKCk7XG4gICAgICAgIGNvbnN0IG5WZXJ0aWNlcyA9IHRoaXMuZ3JhcGgubkNvbHM7XG4gICAgICAgIGNvbnN0IHsgYSwgYiB9ID0gZmluZEFCUGFyYW1zKHRoaXMuc3ByZWFkLCB0aGlzLm1pbkRpc3QpO1xuICAgICAgICB0aGlzLmFzc2lnbk9wdGltaXphdGlvblN0YXRlUGFyYW1ldGVycyh7XG4gICAgICAgICAgICBoZWFkRW1iZWRkaW5nLFxuICAgICAgICAgICAgdGFpbEVtYmVkZGluZyxcbiAgICAgICAgICAgIGhlYWQsXG4gICAgICAgICAgICB0YWlsLFxuICAgICAgICAgICAgZXBvY2hzUGVyU2FtcGxlLFxuICAgICAgICAgICAgYSxcbiAgICAgICAgICAgIGIsXG4gICAgICAgICAgICBuRXBvY2hzLFxuICAgICAgICAgICAgblZlcnRpY2VzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW1wcm92ZSBhbiBlbWJlZGRpbmcgdXNpbmcgc3RvY2hhc3RpYyBncmFkaWVudCBkZXNjZW50IHRvIG1pbmltaXplIHRoZVxuICAgICAqIGZ1enp5IHNldCBjcm9zcyBlbnRyb3B5IGJldHdlZW4gdGhlIDEtc2tlbGV0b25zIG9mIHRoZSBoaWdoIGRpbWVuc2lvbmFsXG4gICAgICogYW5kIGxvdyBkaW1lbnNpb25hbCBmdXp6eSBzaW1wbGljaWFsIHNldHMuIEluIHByYWN0aWNlIHRoaXMgaXMgZG9uZSBieVxuICAgICAqIHNhbXBsaW5nIGVkZ2VzIGJhc2VkIG9uIHRoZWlyIG1lbWJlcnNoaXAgc3RyZW5ndGggKHdpdGggdGhlICgxLXApIHRlcm1zXG4gICAgICogY29taW5nIGZyb20gbmVnYXRpdmUgc2FtcGxpbmcgc2ltaWxhciB0byB3b3JkMnZlYykuXG4gICAgICovXG4gICAgb3B0aW1pemVMYXlvdXRTdGVwKG4pIHtcbiAgICAgICAgY29uc3QgeyBvcHRpbWl6YXRpb25TdGF0ZSB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgeyBoZWFkLCB0YWlsLCBoZWFkRW1iZWRkaW5nLCB0YWlsRW1iZWRkaW5nLCBlcG9jaHNQZXJTYW1wbGUsIGVwb2NoT2ZOZXh0U2FtcGxlLCBlcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlLCBlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZSwgbW92ZU90aGVyLCBpbml0aWFsQWxwaGEsIGFscGhhLCBnYW1tYSwgYSwgYiwgZGltLCBuRXBvY2hzLCBuVmVydGljZXMsIH0gPSBvcHRpbWl6YXRpb25TdGF0ZTtcbiAgICAgICAgY29uc3QgY2xpcFZhbHVlID0gNC4wO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVwb2Noc1BlclNhbXBsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGVwb2NoT2ZOZXh0U2FtcGxlW2ldID4gbilcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGogPSBoZWFkW2ldO1xuICAgICAgICAgICAgY29uc3QgayA9IHRhaWxbaV07XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gaGVhZEVtYmVkZGluZ1tqXTtcbiAgICAgICAgICAgIGNvbnN0IG90aGVyID0gdGFpbEVtYmVkZGluZ1trXTtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RTcXVhcmVkID0gckRpc3QoY3VycmVudCwgb3RoZXIpO1xuICAgICAgICAgICAgbGV0IGdyYWRDb2VmZiA9IDA7XG4gICAgICAgICAgICBpZiAoZGlzdFNxdWFyZWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgZ3JhZENvZWZmID0gLTIuMCAqIGEgKiBiICogTWF0aC5wb3coZGlzdFNxdWFyZWQsIGIgLSAxLjApO1xuICAgICAgICAgICAgICAgIGdyYWRDb2VmZiAvPSBhICogTWF0aC5wb3coZGlzdFNxdWFyZWQsIGIpICsgMS4wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgZCA9IDA7IGQgPCBkaW07IGQrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyYWREID0gY2xpcChncmFkQ29lZmYgKiAoY3VycmVudFtkXSAtIG90aGVyW2RdKSwgY2xpcFZhbHVlKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50W2RdICs9IGdyYWREICogYWxwaGE7XG4gICAgICAgICAgICAgICAgaWYgKG1vdmVPdGhlcilcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJbZF0gKz0gLWdyYWREICogYWxwaGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlcG9jaE9mTmV4dFNhbXBsZVtpXSArPSBlcG9jaHNQZXJTYW1wbGVbaV07XG4gICAgICAgICAgICBjb25zdCBuTmVnU2FtcGxlcyA9IE1hdGguZmxvb3IoKG4gLSBlcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlW2ldKSAvIGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlW2ldKTtcbiAgICAgICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbk5lZ1NhbXBsZXM7IHArKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGsgPSB1dGlscy50YXVSYW5kSW50KG5WZXJ0aWNlcywgdGhpcy5yYW5kb20pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG90aGVyID0gdGFpbEVtYmVkZGluZ1trXTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0U3F1YXJlZCA9IHJEaXN0KGN1cnJlbnQsIG90aGVyKTtcbiAgICAgICAgICAgICAgICBsZXQgZ3JhZENvZWZmID0gMC4wO1xuICAgICAgICAgICAgICAgIGlmIChkaXN0U3F1YXJlZCA+IDAuMCkge1xuICAgICAgICAgICAgICAgICAgICBncmFkQ29lZmYgPSAyLjAgKiBnYW1tYSAqIGI7XG4gICAgICAgICAgICAgICAgICAgIGdyYWRDb2VmZiAvPVxuICAgICAgICAgICAgICAgICAgICAgICAgKDAuMDAxICsgZGlzdFNxdWFyZWQpICogKGEgKiBNYXRoLnBvdyhkaXN0U3F1YXJlZCwgYikgKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaiA9PT0gaykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZCA9IDA7IGQgPCBkaW07IGQrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZ3JhZEQgPSA0LjA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChncmFkQ29lZmYgPiAwLjApXG4gICAgICAgICAgICAgICAgICAgICAgICBncmFkRCA9IGNsaXAoZ3JhZENvZWZmICogKGN1cnJlbnRbZF0gLSBvdGhlcltkXSksIGNsaXBWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRbZF0gKz0gZ3JhZEQgKiBhbHBoYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlW2ldICs9IG5OZWdTYW1wbGVzICogZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGVbaV07XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW1pemF0aW9uU3RhdGUuYWxwaGEgPSBpbml0aWFsQWxwaGEgKiAoMS4wIC0gbiAvIG5FcG9jaHMpO1xuICAgICAgICBvcHRpbWl6YXRpb25TdGF0ZS5jdXJyZW50RXBvY2ggKz0gMTtcbiAgICAgICAgcmV0dXJuIGhlYWRFbWJlZGRpbmc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEltcHJvdmUgYW4gZW1iZWRkaW5nIHVzaW5nIHN0b2NoYXN0aWMgZ3JhZGllbnQgZGVzY2VudCB0byBtaW5pbWl6ZSB0aGVcbiAgICAgKiBmdXp6eSBzZXQgY3Jvc3MgZW50cm9weSBiZXR3ZWVuIHRoZSAxLXNrZWxldG9ucyBvZiB0aGUgaGlnaCBkaW1lbnNpb25hbFxuICAgICAqIGFuZCBsb3cgZGltZW5zaW9uYWwgZnV6enkgc2ltcGxpY2lhbCBzZXRzLiBJbiBwcmFjdGljZSB0aGlzIGlzIGRvbmUgYnlcbiAgICAgKiBzYW1wbGluZyBlZGdlcyBiYXNlZCBvbiB0aGVpciBtZW1iZXJzaGlwIHN0cmVuZ3RoICh3aXRoIHRoZSAoMS1wKSB0ZXJtc1xuICAgICAqIGNvbWluZyBmcm9tIG5lZ2F0aXZlIHNhbXBsaW5nIHNpbWlsYXIgdG8gd29yZDJ2ZWMpLlxuICAgICAqL1xuICAgIG9wdGltaXplTGF5b3V0QXN5bmMoZXBvY2hDYWxsYmFjayA9ICgpID0+IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBuRXBvY2hzLCBjdXJyZW50RXBvY2ggfSA9IHRoaXMub3B0aW1pemF0aW9uU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1iZWRkaW5nID0gdGhpcy5vcHRpbWl6ZUxheW91dFN0ZXAoY3VycmVudEVwb2NoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXBvY2hDb21wbGV0ZWQgPSB0aGlzLm9wdGltaXphdGlvblN0YXRlLmN1cnJlbnRFcG9jaDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkU3RvcCA9IGVwb2NoQ2FsbGJhY2soZXBvY2hDb21wbGV0ZWQpID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNGaW5pc2hlZCA9IGVwb2NoQ29tcGxldGVkID09PSBuRXBvY2hzO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFN0b3AgJiYgIWlzRmluaXNoZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHN0ZXAoKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKGlzRmluaXNoZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHN0ZXAoKSwgMCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbXByb3ZlIGFuIGVtYmVkZGluZyB1c2luZyBzdG9jaGFzdGljIGdyYWRpZW50IGRlc2NlbnQgdG8gbWluaW1pemUgdGhlXG4gICAgICogZnV6enkgc2V0IGNyb3NzIGVudHJvcHkgYmV0d2VlbiB0aGUgMS1za2VsZXRvbnMgb2YgdGhlIGhpZ2ggZGltZW5zaW9uYWxcbiAgICAgKiBhbmQgbG93IGRpbWVuc2lvbmFsIGZ1enp5IHNpbXBsaWNpYWwgc2V0cy4gSW4gcHJhY3RpY2UgdGhpcyBpcyBkb25lIGJ5XG4gICAgICogc2FtcGxpbmcgZWRnZXMgYmFzZWQgb24gdGhlaXIgbWVtYmVyc2hpcCBzdHJlbmd0aCAod2l0aCB0aGUgKDEtcCkgdGVybXNcbiAgICAgKiBjb21pbmcgZnJvbSBuZWdhdGl2ZSBzYW1wbGluZyBzaW1pbGFyIHRvIHdvcmQydmVjKS5cbiAgICAgKi9cbiAgICBvcHRpbWl6ZUxheW91dChlcG9jaENhbGxiYWNrID0gKCkgPT4gdHJ1ZSkge1xuICAgICAgICBsZXQgaXNGaW5pc2hlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgZW1iZWRkaW5nID0gW107XG4gICAgICAgIHdoaWxlICghaXNGaW5pc2hlZCkge1xuICAgICAgICAgICAgY29uc3QgeyBuRXBvY2hzLCBjdXJyZW50RXBvY2ggfSA9IHRoaXMub3B0aW1pemF0aW9uU3RhdGU7XG4gICAgICAgICAgICBlbWJlZGRpbmcgPSB0aGlzLm9wdGltaXplTGF5b3V0U3RlcChjdXJyZW50RXBvY2gpO1xuICAgICAgICAgICAgY29uc3QgZXBvY2hDb21wbGV0ZWQgPSB0aGlzLm9wdGltaXphdGlvblN0YXRlLmN1cnJlbnRFcG9jaDtcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFN0b3AgPSBlcG9jaENhbGxiYWNrKGVwb2NoQ29tcGxldGVkKSA9PT0gZmFsc2U7XG4gICAgICAgICAgICBpc0ZpbmlzaGVkID0gZXBvY2hDb21wbGV0ZWQgPT09IG5FcG9jaHMgfHwgc2hvdWxkU3RvcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW1iZWRkaW5nO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBudW1iZXIgb2YgZXBvY2hzIGZvciBvcHRpbWl6aW5nIHRoZSBwcm9qZWN0aW9uLlxuICAgICAqIE5PVEU6IFRoaXMgaGV1cmlzdGljIGRpZmZlcnMgZnJvbSB0aGUgcHl0aG9uIHZlcnNpb25cbiAgICAgKi9cbiAgICBnZXRORXBvY2hzKCkge1xuICAgICAgICBjb25zdCBncmFwaCA9IHRoaXMuZ3JhcGg7XG4gICAgICAgIGlmICh0aGlzLm5FcG9jaHMgPiAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubkVwb2NocztcbiAgICAgICAgaWYgKCFncmFwaClcbiAgICAgICAgICAgIHJldHVybiAyMDA7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGdyYXBoLm5Sb3dzO1xuICAgICAgICBpZiAobGVuZ3RoIDw9IDI1MDApXG4gICAgICAgICAgICByZXR1cm4gNTAwO1xuICAgICAgICBlbHNlIGlmIChsZW5ndGggPD0gNTAwMClcbiAgICAgICAgICAgIHJldHVybiA0MDA7XG4gICAgICAgIGVsc2UgaWYgKGxlbmd0aCA8PSA3NTAwKVxuICAgICAgICAgICAgcmV0dXJuIDMwMDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIDIwMDtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZXVjbGlkZWFuKHgsIHkpIHtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspXG4gICAgICAgIHJlc3VsdCArPSAoeFtpXSAtIHlbaV0pICoqIDI7XG4gICAgcmV0dXJuIE1hdGguc3FydChyZXN1bHQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG51bWVyaWMoeCwgeSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IE1hdGguYWJzKHggLSB5KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNvc2luZSh4LCB5KSB7XG4gICAgbGV0IHJlc3VsdCA9IDAuMDtcbiAgICBsZXQgbm9ybVggPSAwLjA7XG4gICAgbGV0IG5vcm1ZID0gMC4wO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgKz0geFtpXSAqIHlbaV07XG4gICAgICAgIG5vcm1YICs9IHhbaV0gKiogMjtcbiAgICAgICAgbm9ybVkgKz0geVtpXSAqKiAyO1xuICAgIH1cbiAgICBpZiAobm9ybVggPT09IDAgJiYgbm9ybVkgPT09IDApXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2UgaWYgKG5vcm1YID09PSAwIHx8IG5vcm1ZID09PSAwKVxuICAgICAgICByZXR1cm4gMS4wO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIDEuMCAtIHJlc3VsdCAvIE1hdGguc3FydChub3JtWCAqIG5vcm1ZKTtcbn1cbi8qKlxuICogQW4gaW50ZXJmYWNlIHJlcHJlc2VudGluZyB0aGUgb3B0aW1pemF0aW9uIHN0YXRlIHRyYWNrZWQgYmV0d2VlbiBzdGVwcyBvZlxuICogdGhlIFNHRCBvcHRpbWl6YXRpb25cbiAqL1xuY2xhc3MgT3B0aW1pemF0aW9uU3RhdGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRFcG9jaCA9IDA7XG4gICAgICAgIC8vIERhdGEgdHJhY2tlZCBkdXJpbmcgb3B0aW1pemF0aW9uIHN0ZXBzLlxuICAgICAgICB0aGlzLmhlYWRFbWJlZGRpbmcgPSBbXTtcbiAgICAgICAgdGhpcy50YWlsRW1iZWRkaW5nID0gW107XG4gICAgICAgIHRoaXMuaGVhZCA9IFtdO1xuICAgICAgICB0aGlzLnRhaWwgPSBbXTtcbiAgICAgICAgdGhpcy5lcG9jaHNQZXJTYW1wbGUgPSBbXTtcbiAgICAgICAgdGhpcy5lcG9jaE9mTmV4dFNhbXBsZSA9IFtdO1xuICAgICAgICB0aGlzLmVwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGUgPSBbXTtcbiAgICAgICAgdGhpcy5lcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZSA9IFtdO1xuICAgICAgICB0aGlzLm1vdmVPdGhlciA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5pdGlhbEFscGhhID0gMS4wO1xuICAgICAgICB0aGlzLmFscGhhID0gMS4wO1xuICAgICAgICB0aGlzLmdhbW1hID0gMS4wO1xuICAgICAgICB0aGlzLmEgPSAxLjU3Njk0MzQ2MDMxMTMwNzc7XG4gICAgICAgIHRoaXMuYiA9IDAuODk1MDYwODc3OTEwOTczMztcbiAgICAgICAgdGhpcy5kaW0gPSAyO1xuICAgICAgICB0aGlzLm5FcG9jaHMgPSA1MDA7XG4gICAgICAgIHRoaXMublZlcnRpY2VzID0gMDtcbiAgICB9XG59XG4vKipcbiAqIFN0YW5kYXJkIGNsYW1waW5nIG9mIGEgdmFsdWUgaW50byBhIGZpeGVkIHJhbmdlXG4gKi9cbmZ1bmN0aW9uIGNsaXAoeCwgY2xpcFZhbHVlKSB7XG4gICAgaWYgKHggPiBjbGlwVmFsdWUpXG4gICAgICAgIHJldHVybiBjbGlwVmFsdWU7XG4gICAgZWxzZSBpZiAoeCA8IC1jbGlwVmFsdWUpXG4gICAgICAgIHJldHVybiAtY2xpcFZhbHVlO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHg7XG59XG4vKipcbiAqIFJlZHVjZWQgRXVjbGlkZWFuIGRpc3RhbmNlLlxuICovXG5mdW5jdGlvbiByRGlzdCh4LCB5KSB7XG4gICAgbGV0IHJlc3VsdCA9IDAuMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspXG4gICAgICAgIHJlc3VsdCArPSBNYXRoLnBvdyh4W2ldIC0geVtpXSwgMik7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogRml0IGEsIGIgcGFyYW1zIGZvciB0aGUgZGlmZmVyZW50aWFibGUgY3VydmUgdXNlZCBpbiBsb3dlclxuICogZGltZW5zaW9uYWwgZnV6enkgc2ltcGxpY2lhbCBjb21wbGV4IGNvbnN0cnVjdGlvbi4gV2Ugd2FudCB0aGVcbiAqIHNtb290aCBjdXJ2ZSAoZnJvbSBhIHByZS1kZWZpbmVkIGZhbWlseSB3aXRoIHNpbXBsZSBncmFkaWVudCkgdGhhdFxuICogYmVzdCBtYXRjaGVzIGFuIG9mZnNldCBleHBvbmVudGlhbCBkZWNheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRBQlBhcmFtcyhzcHJlYWQsIG1pbkRpc3QpIHtcbiAgICBjb25zdCBjdXJ2ZSA9IChbYSwgYl0pID0+ICh4KSA9PiB7XG4gICAgICAgIHJldHVybiAxLjAgLyAoMS4wICsgYSAqIHggKiogKDIgKiBiKSk7XG4gICAgfTtcbiAgICBjb25zdCB4diA9IHV0aWxzXG4gICAgICAgIC5saW5lYXIoMCwgc3ByZWFkICogMywgMzAwKVxuICAgICAgICAubWFwKCh2YWwpID0+ICh2YWwgPCBtaW5EaXN0ID8gMS4wIDogdmFsKSk7XG4gICAgY29uc3QgeXYgPSB1dGlscy56ZXJvcyh4di5sZW5ndGgpLm1hcCgodmFsLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBndGUgPSB4dltpbmRleF0gPj0gbWluRGlzdDtcbiAgICAgICAgcmV0dXJuIGd0ZSA/IE1hdGguZXhwKC0oeHZbaW5kZXhdIC0gbWluRGlzdCkgLyBzcHJlYWQpIDogdmFsO1xuICAgIH0pO1xuICAgIGNvbnN0IGluaXRpYWxWYWx1ZXMgPSBbMC41LCAwLjVdO1xuICAgIGNvbnN0IGRhdGEgPSB7IHg6IHh2LCB5OiB5diB9O1xuICAgIC8vIERlZmF1bHQgb3B0aW9ucyBmb3IgdGhlIGFsZ29yaXRobSAoZnJvbSBnaXRodWIgZXhhbXBsZSlcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBkYW1waW5nOiAxLjUsXG4gICAgICAgIGluaXRpYWxWYWx1ZXMsXG4gICAgICAgIGdyYWRpZW50RGlmZmVyZW5jZTogMTBlLTIsXG4gICAgICAgIG1heEl0ZXJhdGlvbnM6IDEwMCxcbiAgICAgICAgZXJyb3JUb2xlcmFuY2U6IDEwZS0zLFxuICAgIH07XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbiAgICBjb25zdCB7IHBhcmFtZXRlclZhbHVlcyB9ID0gTE0oZGF0YSwgY3VydmUsIG9wdGlvbnMpO1xuICAgIGNvbnN0IFthLCBiXSA9IHBhcmFtZXRlclZhbHVlcztcbiAgICByZXR1cm4geyBhLCBiIH07XG59XG4vKipcbiAqIFVuZGVyIHRoZSBhc3N1bXB0aW9uIG9mIGNhdGVnb3JpY2FsIGRpc3RhbmNlIGZvciB0aGUgaW50ZXJzZWN0aW5nXG4gKiBzaW1wbGljaWFsIHNldCBwZXJmb3JtIGEgZmFzdCBpbnRlcnNlY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYXN0SW50ZXJzZWN0aW9uKGdyYXBoLCB0YXJnZXQsIHVua25vd25EaXN0ID0gMS4wLCBmYXJEaXN0ID0gNS4wKSB7XG4gICAgcmV0dXJuIGdyYXBoLm1hcCgodmFsdWUsIHJvdywgY29sKSA9PiB7XG4gICAgICAgIGlmICh0YXJnZXRbcm93XSA9PT0gLTEgfHwgdGFyZ2V0W2NvbF0gPT09IC0xKVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICogTWF0aC5leHAoLXVua25vd25EaXN0KTtcbiAgICAgICAgZWxzZSBpZiAodGFyZ2V0W3Jvd10gIT09IHRhcmdldFtjb2xdKVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICogTWF0aC5leHAoLWZhckRpc3QpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG59XG4vKipcbiAqIFJlc2V0IHRoZSBsb2NhbCBjb25uZWN0aXZpdHkgcmVxdWlyZW1lbnQgLS0gZWFjaCBkYXRhIHNhbXBsZSBzaG91bGRcbiAqIGhhdmUgY29tcGxldGUgY29uZmlkZW5jZSBpbiBhdCBsZWFzdCBvbmUgMS1zaW1wbGV4IGluIHRoZSBzaW1wbGljaWFsIHNldC5cbiAqIFdlIGNhbiBlbmZvcmNlIHRoaXMgYnkgbG9jYWxseSByZXNjYWxpbmcgY29uZmlkZW5jZXMsIGFuZCB0aGVuIHJlbWVyZ2luZyB0aGVcbiAqIGRpZmZlcmVudCBsb2NhbCBzaW1wbGljaWFsIHNldHMgdG9nZXRoZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldExvY2FsQ29ubmVjdGl2aXR5KHNpbXBsaWNpYWxTZXQpIHtcbiAgICBzaW1wbGljaWFsU2V0ID0gbWF0cml4Lm5vcm1hbGl6ZShzaW1wbGljaWFsU2V0LCBcIm1heFwiIC8qIG1hdHJpeC5Ob3JtVHlwZS5tYXggKi8pO1xuICAgIGNvbnN0IHRyYW5zcG9zZSA9IG1hdHJpeC50cmFuc3Bvc2Uoc2ltcGxpY2lhbFNldCk7XG4gICAgY29uc3QgcHJvZE1hdHJpeCA9IG1hdHJpeC5wYWlyd2lzZU11bHRpcGx5KHRyYW5zcG9zZSwgc2ltcGxpY2lhbFNldCk7XG4gICAgc2ltcGxpY2lhbFNldCA9IG1hdHJpeC5hZGQoc2ltcGxpY2lhbFNldCwgbWF0cml4LnN1YnRyYWN0KHRyYW5zcG9zZSwgcHJvZE1hdHJpeCkpO1xuICAgIHJldHVybiBtYXRyaXguZWxpbWluYXRlWmVyb3Moc2ltcGxpY2lhbFNldCk7XG59XG4vKipcbiAqIEdpdmVuIGluZGljZXMgYW5kIHdlaWdodHMgYW5kIGFuIG9yaWdpbmFsIGVtYmVkZGluZ3NcbiAqIGluaXRpYWxpemUgdGhlIHBvc2l0aW9ucyBvZiBuZXcgcG9pbnRzIHJlbGF0aXZlIHRvIHRoZVxuICogaW5kaWNlcyBhbmQgd2VpZ2h0cyAob2YgdGhlaXIgbmVpZ2hib3JzIGluIHRoZSBzb3VyY2UgZGF0YSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0VHJhbnNmb3JtKGluZGljZXMsIHdlaWdodHMsIGVtYmVkZGluZykge1xuICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzXG4gICAgICAgIC56ZXJvcyhpbmRpY2VzLmxlbmd0aClcbiAgICAgICAgLm1hcCgoX3opID0+IHV0aWxzLnplcm9zKGVtYmVkZGluZ1swXS5sZW5ndGgpKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbmRpY2VzWzBdLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBkID0gMDsgZCA8IGVtYmVkZGluZ1swXS5sZW5ndGg7IGQrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBpbmRpY2VzW2ldW2pdO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpXVtkXSArPSB3ZWlnaHRzW2ldW2pdICogZW1iZWRkaW5nW2FdW2RdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkVzFoY0M1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJblZ0WVhBdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzTkVKQlFUUkNPMEZCUXpWQ096czdPenM3T3pzN096czdPenM3T3p0SFFXbENSenRCUVVWSU96czdPenRIUVV0SE8wRkJSVWc3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN1IwRXJRa2M3UVVGRlNDeFBRVUZQTEV0QlFVc3NTVUZCU1N4TlFVRk5MRkZCUVZFc1EwRkJRenRCUVVNdlFpeFBRVUZQTEV0QlFVc3NUVUZCVFN4TlFVRk5MRlZCUVZVc1EwRkJRenRCUVVOdVF5eFBRVUZQTEV0QlFVc3NVMEZCVXl4TlFVRk5MR05CUVdNc1EwRkJRenRCUVVNeFF5eFBRVUZQTEV0QlFVc3NTVUZCU1N4TlFVRk5MRkZCUVZFc1EwRkJRenRCUVVNdlFpeFBRVUZQTEV0QlFVc3NTMEZCU3l4TlFVRk5MRk5CUVZNc1EwRkJRenRCUVVOcVF5eFBRVUZQTEVWQlFVVXNUVUZCVFN4M1FrRkJkMElzUTBGQlF6dEJRV0Y0UXl4TlFVRk5MR3RDUVVGclFpeEhRVUZITEVsQlFVa3NRMEZCUXp0QlFVTm9ReXhOUVVGTkxHZENRVUZuUWl4SFFVRkhMRWxCUVVrc1EwRkJRenRCUVcxSU9VSTdPenM3T3pzN096czdPenM3T3pzN096czdSMEZ0UWtjN1FVRkRTQ3hOUVVGTkxFOUJRVThzU1VGQlNUdEpRVEpEWml4SlFVRkpMRk5CUVZNN1VVRkRXQ3hQUVVGUExFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTTdTVUZEZWtJc1EwRkJRenRKUVVORUxGbEJRVmtzVTBGQmVVSXNSVUZCUlR0UlFUZERhRU1zYVVKQlFWa3NSMEZCUnl4SFFVRkhMRU5CUVVNN1VVRkRia0lzYzBKQlFXbENMRWRCUVVjc1IwRkJSeXhEUVVGRE8xRkJRM2hDTEZsQlFVOHNSMEZCUnl4SFFVRkhMRU5CUVVNN1VVRkRaQ3huUWtGQlZ5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTm1MRmxCUVU4c1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRFdpeGxRVUZWTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUTJwQ0xIVkNRVUZyUWl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOMlFpeFhRVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJRenRSUVVOeVFpeHpRa0ZCYVVJc1IwRkJSeXhIUVVGSExFTkJRVU03VVVGRGVFSXNhMEpCUVdFc1IwRkJSeXhIUVVGSExFTkJRVU03VVVGRGNFSXNWMEZCVFN4SFFVRkhMRWRCUVVjc1EwRkJRenRSUVVOYUxIVkNRVUZyUWl4SFFVRkhMRWRCUVVjc1EwRkJRenRSUVVWcVF5d3JRa0ZCSzBJN1VVRkRka0lzYVVKQlFWa3NaMFJCUVRSQ08xRkJRM2hETEdsQ1FVRlpMRWRCUVVjc1IwRkJSeXhEUVVGRE8xRkJRMjVDTEhGQ1FVRm5RaXhIUVVGSExFVkJRVVVzUTBGQlF6dFJRVVYwUWl4bFFVRlZMRWRCUVdVc1QwRkJUeXhEUVVGRE8xRkJVMnBETEd0Q1FVRmhMRWRCUVVjc1MwRkJTeXhEUVVGRE8xRkJRM1JDTEdGQlFWRXNSMEZCYjBJc1JVRkJSU3hEUVVGRE8xRkJVM1pETEhOQ1FVRnpRanRSUVVOa0xHTkJRVk1zUjBGQlpTeEZRVUZGTEVOQlFVTTdVVUZETTBJc2MwSkJRV2xDTEVkQlFVY3NTVUZCU1N4cFFrRkJhVUlzUlVGQlJTeERRVUZETzFGQlQyeEVMRTFCUVUwc1VVRkJVU3hIUVVGSExFTkJRVU1zUjBGQmVVSXNSVUZCUlN4RlFVRkZPMWxCUXpkRExGbEJRVms3V1VGRFdpeEpRVUZKTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhUUVVGVE8yZENRVUZGTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEZWtRc1EwRkJReXhEUVVGRE8xRkJSVVlzVVVGQlVTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPMUZCUTNaQ0xGRkJRVkVzUTBGQlF5eGpRVUZqTEVOQlFVTXNRMEZCUXp0UlFVTjZRaXhSUVVGUkxFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1EwRkJRenRSUVVNNVFpeFJRVUZSTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNN1VVRkRjRUlzVVVGQlVTeERRVUZETEdGQlFXRXNRMEZCUXl4RFFVRkRPMUZCUTNoQ0xGRkJRVkVzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0UlFVTndRaXhSUVVGUkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdVVUZEZGtJc1VVRkJVU3hEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRU5CUVVNN1VVRkRMMElzVVVGQlVTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMUZCUTI1Q0xGRkJRVkVzUTBGQlF5eHRRa0ZCYlVJc1EwRkJReXhEUVVGRE8xRkJRemxDTEZGQlFWRXNRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJRenRSUVVNeFFpeFJRVUZSTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRia0lzVVVGQlVTeERRVUZETEc5Q1FVRnZRaXhEUVVGRExFTkJRVU03VVVGREwwSXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeEhRVUZITEUxQlFVMHNRMEZCUXl4VlFVRlZMRWxCUVVrc1NVRkJTU3hEUVVGRExGVkJRVlVzU1VGQlNTeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU03U1VGRGVFWXNRMEZCUXp0SlFVVkVPenRQUVVWSE8wbEJRMGdzUjBGQlJ5eERRVUZETEVOQlFWTTdVVUZEV0N4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzUkNMRWxCUVVrc1EwRkJReXhqUVVGakxFVkJRVVVzUTBGQlF6dFJRVVYwUWl4UFFVRlBMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU03U1VGRGVFSXNRMEZCUXp0SlFVVkVPenM3VDBGSFJ6dEpRVU5JTEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUTFvc1EwRkJVeXhGUVVOVUxGZEJRVzlFTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrN1VVRkZPVVFzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVWMFFpeE5RVUZOTEVsQlFVa3NRMEZCUXl4dFFrRkJiVUlzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0UlFVTjZReXhQUVVGUExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTTdTVUZEZUVJc1EwRkJRenRKUVVWRU96dFBRVVZITzBsQlEwZ3NkVUpCUVhWQ0xFTkJRVU1zUTBGQlZ5eEZRVUZGTEZOQlFTdENMRVZCUVVVN1VVRkRjRVVzU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRXQ3hKUVVGSkxFTkJRVU1zV1VGQldTeEhRVUZITEUxQlFVMHNRMEZCUXl4WlFVRlpMRWxCUVVrc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF6dFJRVU0zUkN4SlFVRkpMRU5CUVVNc1dVRkJXU3hIUVVGSExFMUJRVTBzUTBGQlF5eFpRVUZaTEVsQlFVa3NTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJRenRSUVVNM1JDeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFZEJRVWNzVFVGQlRTeERRVUZETEdkQ1FVRm5RaXhKUVVGSkxFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJRenRKUVVNelJTeERRVUZETzBsQlJVUTdPMDlCUlVjN1NVRkRTQ3hwUWtGQmFVSXNRMEZCUXl4VlFVRnpRaXhGUVVGRkxGbEJRWGRDTzFGQlEyaEZMRWxCUVVrc1EwRkJReXhWUVVGVkxFZEJRVWNzVlVGQlZTeERRVUZETzFGQlF6ZENMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzV1VGQldTeERRVUZETzBsQlEyNURMRU5CUVVNN1NVRkZSRHM3T3pzN1QwRkxSenRKUVVOSUxHRkJRV0VzUTBGQlF5eERRVUZUTzFGQlEzSkNMRWxCUVVrc1EwRkJReXhEUVVGRExFMUJRVTBzU1VGQlNTeEpRVUZKTEVOQlFVTXNWVUZCVlR0WlFVTTNRaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETERKQ1FVRXlRaXhEUVVGRExFTkJRVU1zVFVGQlRTd3lRa0ZCTWtJc1NVRkJTU3hEUVVGRExGVkJRVlVzYzBSQlFYTkVMRU5CUVVNc1EwRkJRenRSUVVkMlNpdzBSVUZCTkVVN1VVRkROVVVzU1VGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zWVVGQllUdFpRVU53UXl4UFFVRlBMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF6dFJRVWN6UWl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVVZZTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlR0WlFVTXhReXhOUVVGTkxGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZETlVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUjBGQlJ5eFZRVUZWTEVOQlFVTXNWVUZCVlN4RFFVRkRPMWxCUTNoRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NWVUZCVlN4RFFVRkRMRmxCUVZrc1EwRkJRenRUUVVNM1F6dFJRVVZFTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RFFVTnNReXhEUVVGRExFVkJRMFFzU1VGQlNTeERRVUZETEZWQlFWVXNSVUZEWml4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVOdVFpeERRVUZETzFGQlJVWXNlVVJCUVhsRU8xRkJRM3BFTEVsQlFVa3NRMEZCUXl4aFFVRmhMRVZCUVVVc1EwRkJRenRSUVVOeVFpeEpRVUZKTEVOQlFVTXNWMEZCVnl4SFFVRkhMRWxCUVVrc1EwRkJReXhsUVVGbExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGTTBNc2VVUkJRWGxFTzFGQlEzcEVMRWxCUVVrc1EwRkJReXh0UTBGQmJVTXNSVUZCUlN4RFFVRkRPMUZCUlRORExFMUJRVTBzUlVGRFNpeEpRVUZKTEVWQlEwb3NTVUZCU1N4RlFVTktMR1ZCUVdVc1IwRkRhRUlzUjBGQlJ5eEpRVUZKTEVOQlFVTXNaME5CUVdkRExFVkJRVVVzUTBGQlF6dFJRVVUxUXl4eFEwRkJjVU03VVVGRGNrTXNTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkRia01zU1VGQlNTeERRVUZETEdsQ1FVRnBRaXhEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTTdVVUZEYmtNc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMR1ZCUVdVc1IwRkJSeXhsUVVGbExFTkJRVU03VVVGRmVrUXNlVU5CUVhsRE8xRkJRM3BETEVsQlFVa3NRMEZCUXl4elFrRkJjMElzUlVGQlJTeERRVUZETzFGQlF6bENMRWxCUVVrc1EwRkJReXd3UWtGQk1FSXNSVUZCUlN4RFFVRkRPMUZCUTJ4RExFbEJRVWtzUTBGQlF5eGhRVUZoTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUlRGQ0xFOUJRVThzU1VGQlNTeERRVUZETEZWQlFWVXNSVUZCUlN4RFFVRkRPMGxCUXpOQ0xFTkJRVU03U1VGRlR5eGhRVUZoTzFGQlEyNUNMRTFCUVUwc1JVRkJReXhaUVVGWkxFVkJRVVVzWTBGQll5eEZRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRzFDUVVGdFFpeERRVU5zUlN4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVOb1FpeERRVUZETzFGQlEwWXNTVUZCU1N4RFFVRkRMRmxCUVZrc1IwRkJSeXhaUVVGWkxFTkJRVU03VVVGRGFrTXNTVUZCU1N4RFFVRkRMR05CUVdNc1IwRkJSeXhqUVVGakxFTkJRVU03VVVGRGNrTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhUUVVGVExFTkJRVU1zZFVKQlFYVkNMRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzBsQlEyNUZMRU5CUVVNN1NVRkZUeXhsUVVGbExFTkJRVU1zUTBGQlV6dFJRVU12UWl4TlFVRk5MRlZCUVZVc1IwRkJSeXhKUVVGSkxFTkJRVU1zVlVGQlZ5eERRVUZETzFGQlEzQkRMRTFCUVUwc1dVRkJXU3hIUVVGSExFbEJRVWtzUTBGQlF5eFpRVUZoTEVOQlFVTTdVVUZEZUVNc1RVRkJUU3hKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU5zUXl4TlFVRk5MRmRCUVZjc1IwRkJSeXhKUVVGSkxFMUJRVTBzUTBGQlF5eFpRVUZaTEVOQlFVTXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZET1VRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRlZCUVZVc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZETVVNc1RVRkJUU3hIUVVGSExFZEJRVWNzVlVGQlZTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpGQ0xFMUJRVTBzVTBGQlV5eEhRVUZITEZsQlFWa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOc1F5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRuUWtGRGJrTXNUVUZCVFN4UlFVRlJMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTjRRaXhOUVVGTkxGRkJRVkVzUjBGQlJ5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRemxDTEVsQlFVa3NVVUZCVVN4SFFVRkhMRU5CUVVNN2IwSkJRMlFzVjBGQlZ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1VVRkJVU3hGUVVGRkxGRkJRVkVzUTBGQlF5eERRVUZETzJGQlF6RkRPMU5CUTBZN1VVRkZSQ3hOUVVGTkxGTkJRVk1zUjBGQlJ5eE5RVUZOTEVOQlFVTXNVMEZCVXl4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRE8xRkJRMmhFTEU5QlFVOHNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhYUVVGWExFVkJRVVVzVTBGQlV5eERRVUZETEVOQlFVTTdTVUZEYUVRc1EwRkJRenRKUVVWRU96dFBRVVZITzBsQlEwZ3NVMEZCVXl4RFFVRkRMRmRCUVcxQ08xRkJRek5DTERKQ1FVRXlRanRSUVVNelFpeE5RVUZOTEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM1pDTEVsQlFVa3NUMEZCVHl4TFFVRkxMRk5CUVZNc1NVRkJTU3hQUVVGUExFTkJRVU1zVFVGQlRTeExRVUZMTEVOQlFVTTdXVUZETDBNc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eDFRa0ZCZFVJc1EwRkJReXhEUVVGRE8xRkJSek5ETEVsQlFVa3NWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNRMEZCUXp0UlFVTjJSU3hWUVVGVkxFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hGUVVGRkxGVkJRVlVzUTBGQlF5eERRVUZETzFGQlEyeEVMRTFCUVUwc1NVRkJTU3hIUVVGSExGTkJRVk1zUTBGQlF5eG5Ra0ZCWjBJc1EwRkRja01zU1VGQlNTeERRVUZETEZGQlFWRXNSVUZEWWl4UFFVRlBMRVZCUTFBc1YwRkJWeXhGUVVOWUxGVkJRVlVzUlVGRFZpeEpRVUZKTEVOQlFVTXNZMEZCWXl4RlFVTnVRaXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVU5xUWl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVOYUxFTkJRVU03VVVGRlJpeE5RVUZOTEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUlVGQlJTeEpRVUZKTEVOQlFVTXNWMEZCVnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hYUVVGWExFTkJRVU1zUTBGQlF6dFJRVVY2UlN4SlFVRkpMRVZCUVVNc1QwRkJUeXhGUVVGRkxFOUJRVThzUlVGQlJTeFRRVUZUTEVWQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFGQlJUVkVMRTlCUVU4c1IwRkJSeXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU14UkN4VFFVRlRMRWRCUVVjc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRk9VUXNUVUZCVFN4NVFrRkJlVUlzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zYVVKQlFXbENMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRE1VVXNUVUZCVFN4RlFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFVkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNhVUpCUVdsQ0xFTkJRek5ETEZOQlFWTXNSVUZEVkN4SlFVRkpMRU5CUVVNc1ZVRkJWU3hGUVVObUxIbENRVUY1UWl4RFFVTXhRaXhEUVVGRE8xRkJSVVlzVFVGQlRTeEZRVUZETEVsQlFVa3NSVUZCUlN4SlFVRkpMRVZCUVVVc1NVRkJTU3hGUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETERCQ1FVRXdRaXhEUVVONFJDeFBRVUZQTEVWQlExQXNVMEZCVXl4RlFVTlVMRTFCUVUwc1JVRkRUaXhKUVVGSkxFTkJRMHdzUTBGQlF6dFJRVVZHTEUxQlFVMHNTVUZCU1N4SFFVRkhMRU5CUVVNc1YwRkJWeXhEUVVGRExFMUJRVTBzUlVGQlJTeFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRiRVFzU1VGQlNTeExRVUZMTEVkQlFVY3NTVUZCU1N4TlFVRk5MRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJSVFZFTEc5RlFVRnZSVHRSUVVOd1JTeHpSVUZCYzBVN1VVRkRkRVVzSzBSQlFTdEVPMUZCUlM5RUxFMUJRVTBzVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXl4VFFVRlRMRU5CUVVNc1MwRkJTeXhuUTBGQmNVSXNRMEZCUXp0UlFVVXpSQ3hOUVVGTkxGTkJRVk1zUjBGQlJ5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xRkJRM2hETEUxQlFVMHNUMEZCVHl4SFFVRkhMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRmJrTXNUVUZCVFN4UlFVRlJMRWRCUVVjc1MwRkJTeXhEUVVGRExGTkJRVk1zUTBGRE9VSXNVMEZCVXl4RFFVRkRMRTlCUVU4c1JVRkRha0lzVDBGQlR5eEZRVU5RTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUTJoQ0xFTkJRVU03VVVGRlJpeE5RVUZOTEZGQlFWRXNSMEZCUnl4TFFVRkxMRU5CUVVNc1UwRkJVeXhEUVVNNVFpeFRRVUZUTEVOQlFVTXNUVUZCVFN4RlFVTm9RaXhQUVVGUExFVkJRMUFzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZEYUVJc1EwRkJRenRSUVVWR0xFMUJRVTBzVTBGQlV5eEhRVUZITEdGQlFXRXNRMEZCUXl4UlFVRlJMRVZCUVVVc1VVRkJVU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0UlFVVndSU3hOUVVGTkxFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1dVRkROVUlzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOc1FpeExRVUZMTEVOQlFVTXNTMEZCU3l4SlFVRkpMRXRCUVVzc1EwRkJReXhEUVVGRE8yZENRVU53UWl4SFFVRkhMRU5CUVVNc1EwRkJRenRuUWtGRFRDeEZRVUZGTEVOQlFVTTdVVUZGVUN4TlFVRk5MRkZCUVZFc1IwRkJSeXhMUVVGTE8yRkJRMjVDTEZOQlFWTXNSVUZCUlR0aFFVTllMRTFCUVUwc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTndSQ3hMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eExRVUZMTEVkQlFVY3NVVUZCVVN4SFFVRkhMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM1pGTEV0QlFVc3NSMEZCUnl4TlFVRk5MRU5CUVVNc1kwRkJZeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFGQlJYSkRMRTFCUVUwc1pVRkJaU3hIUVVGSExFbEJRVWtzUTBGQlF5eHRRa0ZCYlVJc1EwRkRPVU1zUzBGQlN5eERRVUZETEZOQlFWTXNSVUZCUlN4RlFVTnFRaXhQUVVGUExFTkJRMUlzUTBGQlF6dFJRVU5HTEUxQlFVMHNTVUZCU1N4SFFVRkhMRXRCUVVzc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dFJRVU0zUWl4TlFVRk5MRWxCUVVrc1IwRkJSeXhMUVVGTExFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdVVUZGTjBJc2IwVkJRVzlGTzFGQlEzQkZMRWxCUVVrc1EwRkJReXhwUTBGQmFVTXNRMEZCUXp0WlFVTnlReXhoUVVGaExFVkJRVVVzVTBGQlV6dFpRVU40UWl4aFFVRmhMRVZCUVVVc1NVRkJTU3hEUVVGRExGTkJRVk03V1VGRE4wSXNTVUZCU1R0WlFVTktMRWxCUVVrN1dVRkRTaXhaUVVGWkxFVkJRVVVzUTBGQlF6dFpRVU5tTEU5QlFVODdXVUZEVUN4VFFVRlRMRVZCUVVVc1MwRkJTeXhEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTTNRaXhsUVVGbE8xTkJRMmhDTEVOQlFVTXNRMEZCUXp0UlFVTklMRWxCUVVrc1EwRkJReXd3UWtGQk1FSXNSVUZCUlN4RFFVRkRPMUZCUld4RExFOUJRVThzU1VGQlNTeERRVUZETEdOQlFXTXNSVUZCUlN4RFFVRkRPMGxCUXk5Q0xFTkJRVU03U1VGRlJEczdPMDlCUjBjN1NVRkRTeXh0UTBGQmJVTTdVVUZEZWtNc1RVRkJUU3hGUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkRjRUlzU1VGQlNTeERRVUZETEVWQlFVVTdXVUZEVEN4SlFVRkpMRU5CUVVNc1EwRkJReXhOUVVGTkxFdEJRVXNzUTBGQlF5eERRVUZETEUxQlFVMDdaMEpCUTNaQ0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNhVU5CUVdsRExFTkJRVU1zUTBGQlF6dFpRVWR5UkN4SlFVRkpMRWxCUVVrc1EwRkJReXhaUVVGWkxHbEVRVUUyUWl4RlFVRkZPMmRDUVVOc1JDeE5RVUZOTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1dVRkJXU3hIUVVGSExFZEJRVWNzUTBGQlF6dG5Ra0ZEYmtNc1RVRkJUU3hQUVVGUExFZEJRVWNzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXp0blFrRkRkRVVzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc2IwTkJRVzlETEVOQlEzQkVMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRMVlzUTBGQlF5eEZRVU5FTEU5QlFVOHNRMEZEVWl4RFFVRkRPMkZCUTBnN1dVRkRSQ3hwUlVGQmFVVTdVMEZEYkVVN1NVRkRTQ3hEUVVGRE8wbEJSVVE3TzA5QlJVYzdTVUZEU0N4SlFVRkpPMUZCUTBZc1RVRkJUU3hGUVVGRExGbEJRVmtzUlVGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUTBGQlF6dFJRVVU1UXl4SlFVRkpMRmxCUVZrc1IwRkJSeXhKUVVGSkxFTkJRVU1zVlVGQlZTeEZRVUZGTzFsQlEyeERMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJRenRSUVVWNFF5eFBRVUZQTEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eFpRVUZaTEVOQlFVTTdTVUZETjBNc1EwRkJRenRKUVVWRU96dFBRVVZITzBsQlEwZ3NXVUZCV1R0UlFVTldMRTlCUVU4c1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF6dEpRVU40UWl4RFFVRkRPMGxCUlVRN096czdUMEZKUnp0SlFVTkxMR2RDUVVGblFpeERRVUZETEVOQlFWTTdVVUZEYUVNc1RVRkJUU3hGUVVGRExGVkJRVlVzUlVGQlJTeFZRVUZWTEVWQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkRkRU1zVFVGQlRTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRlRMRVZCUVVVc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjBSQ3hOUVVGTkxHVkJRV1VzUjBGQlJ5eFRRVUZUTEVOQlFVTXNZVUZCWVN4RFFVRkRMRlZCUVZVc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdVVUZGZWtVc2JVUkJRVzFFTzFGQlEyNUVMRTFCUVUwc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlV5eEZRVUZGTEVWQlFVVTdXVUZETVVJc1QwRkJUeXhEUVVGRExFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRka01zUTBGQlF5eERRVUZETzFGQlJVWXNUVUZCVFN4TlFVRk5MRWRCUVVjc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkROMFFzVFVGQlRTeE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRmJrVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNSVUZCUlN4VlFVRlZMRVZCUVVVc1RVRkJUU3hGUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVVndSU3hOUVVGTkxGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dFJRVU53UkN4TlFVRk5MRVZCUVVNc1QwRkJUeXhGUVVGRkxFOUJRVThzUlVGQlF5eEhRVUZITEdWQlFXVXNRMEZEZUVNc1EwRkJReXhGUVVORUxGTkJRVk1zUlVGRFZDeFZRVUZWTEVWQlExWXNUVUZCVFN4RFFVTlFMRU5CUVVNN1VVRkRSaXhQUVVGUExFVkJRVU1zVlVGQlZTeEZRVUZGTEU5QlFVOHNSVUZCUlN4WlFVRlpMRVZCUVVVc1QwRkJUeXhGUVVGRExFTkJRVU03U1VGRGRFUXNRMEZCUXp0SlFVVkVPenM3T3pzN08wOUJUMGM3U1VGRFN5eHJRa0ZCYTBJc1EwRkRlRUlzUTBGQlV5eEZRVU5VTEZWQlFXdENMRVZCUTJ4Q0xHRkJRV0VzUjBGQlJ5eEhRVUZITzFGQlJXNUNMRTFCUVUwc1JVRkJReXhWUVVGVkxFZEJRVWNzUlVGQlJTeEZRVUZGTEZsQlFWa3NSMEZCUnl4RlFVRkZMRVZCUVVVc2FVSkJRV2xDTEVWQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkZja1VzVFVGQlRTeEZRVUZETEUxQlFVMHNSVUZCUlN4SlFVRkpMRVZCUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zYVVKQlFXbENMRU5CUXpORExGbEJRVmtzUlVGRFdpeFZRVUZWTEVWQlExWXNhVUpCUVdsQ0xFTkJRMnhDTEVOQlFVTTdVVUZGUml4TlFVRk5MRVZCUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVOQlEzaEVMRlZCUVZVc1JVRkRWaXhaUVVGWkxFVkJRMW9zVFVGQlRTeEZRVU5PTEVsQlFVa3NRMEZEVEN4RFFVRkRPMUZCUlVZc1RVRkJUU3hKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU5zUXl4TlFVRk5MRmxCUVZrc1IwRkJSeXhKUVVGSkxFMUJRVTBzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZGY2tVc1RVRkJUU3hUUVVGVExFZEJRVWNzVFVGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJRenRSUVVOcVJDeE5RVUZOTEZWQlFWVXNSMEZCUnl4TlFVRk5MRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNXVUZCV1N4RlFVRkZMRk5CUVZNc1EwRkJReXhEUVVGRE8xRkJSWEJGTEUxQlFVMHNRMEZCUXl4SFFVRkhMRTFCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4WlFVRlpMRVZCUVVVc1UwRkJVeXhEUVVGRExFVkJRVVVzVlVGQlZTeERRVUZETEVOQlFVTTdVVUZETTBVc1RVRkJUU3hEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1lVRkJZU3hEUVVGRExFTkJRVU03VVVGRGJFUXNUVUZCVFN4RFFVRkRMRWRCUVVjc1RVRkJUU3hEUVVGRExHTkJRV01zUTBGQlF5eFZRVUZWTEVWQlFVVXNSMEZCUnl4SFFVRkhMR0ZCUVdFc1EwRkJReXhEUVVGRE8xRkJRMnBGTEUxQlFVMHNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUldoRExFOUJRVThzVFVGQlRTeERRVUZETzBsQlEyaENMRU5CUVVNN1NVRkZSRHM3T3pzN1QwRkxSenRKUVVOTExHOURRVUZ2UXl4RFFVTXhReXhoUVVGclF5eEZRVU5zUXl4TlFVRm5RaXhGUVVOb1FpeFBRVUZsTEVWQlEyWXNWMEZCVnl4SFFVRkhMRWRCUVVjN1VVRkZha0lzU1VGQlNTeFpRVUZaTEVkQlFVY3NaMEpCUVdkQ0xFTkJRMnBETEdGQlFXRXNSVUZEWWl4TlFVRk5MRVZCUTA0c1YwRkJWeXhGUVVOWUxFOUJRVThzUTBGRFVpeERRVUZETzFGQlEwWXNXVUZCV1N4SFFVRkhMRTFCUVUwc1EwRkJReXhqUVVGakxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdVVUZEYmtRc1QwRkJUeXh6UWtGQmMwSXNRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJRenRKUVVNNVF5eERRVUZETzBsQlJVUTdPenM3T3p0UFFVMUhPMGxCUTBzc2FVSkJRV2xDTEVOQlEzWkNMRk5CUVd0Q0xFVkJRMnhDTEVOQlFWTXNSVUZEVkN4cFFrRkJhVUlzUjBGQlJ5eEhRVUZITEVWQlEzWkNMRXRCUVVzc1IwRkJSeXhGUVVGRkxFVkJRMVlzVTBGQlV5eEhRVUZITEVkQlFVYzdVVUZGWml4TlFVRk5MRTFCUVUwc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRk5CUVZNc1EwRkJRenRSUVVOMlJDeE5RVUZOTEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTXhReXhOUVVGTkxFMUJRVTBzUjBGQlJ5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVVUzUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU42UXl4SlFVRkpMRVZCUVVVc1IwRkJSeXhIUVVGSExFTkJRVU03V1VGRFlpeEpRVUZKTEVWQlFVVXNSMEZCUnl4UlFVRlJMRU5CUVVNN1dVRkRiRUlzU1VGQlNTeEhRVUZITEVkQlFVY3NSMEZCUnl4RFFVRkRPMWxCUldRc05rUkJRVFpFTzFsQlF6ZEVMRTFCUVUwc1dVRkJXU3hIUVVGSExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTnNReXhOUVVGTkxGbEJRVmtzUjBGQlJ5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkZla1FzU1VGQlNTeFpRVUZaTEVOQlFVTXNUVUZCVFN4SlFVRkpMR2xDUVVGcFFpeEZRVUZGTzJkQ1FVTTFReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVOQlFVTTdaMEpCUXpWRExFMUJRVTBzWVVGQllTeEhRVUZITEdsQ1FVRnBRaXhIUVVGSExFdEJRVXNzUTBGQlF6dG5Ra0ZEYUVRc1NVRkJTU3hMUVVGTExFZEJRVWNzUTBGQlF5eEZRVUZGTzI5Q1FVTmlMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFpRVUZaTEVOQlFVTXNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8yOUNRVU5xUXl4SlFVRkpMR0ZCUVdFc1IwRkJSeXhyUWtGQmEwSXNSVUZCUlR0M1FrRkRkRU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXpzMFFrRkRTaXhoUVVGaExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1dVRkJXU3hEUVVGRExFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPM0ZDUVVOdVJUdHBRa0ZEUmp0eFFrRkJUVHR2UWtGRFRDeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1lVRkJZU3hIUVVGSExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0cFFrRkRNVU03WVVGRFJqdHBRa0ZCVFN4SlFVRkpMRmxCUVZrc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTzJkQ1FVTnNReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dGhRVU5zUXp0WlFVVkVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TFFVRkxMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3WjBKQlF6bENMRWxCUVVrc1NVRkJTU3hIUVVGSExFZEJRVWNzUTBGQlF6dG5Ra0ZEWml4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0dlFrRkROVU1zVFVGQlRTeERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenR2UWtGRGJrTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJRenQzUWtGRFVDeEpRVUZKTEVsQlFVa3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN08zZENRVVUzUWl4SlFVRkpMRWxCUVVrc1IwRkJSeXhEUVVGRE8ybENRVU5tTzJkQ1FVVkVMRWxCUVVrc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVkQlFVY3NUVUZCVFN4RFFVRkRMRWRCUVVjc2EwSkJRV3RDTzI5Q1FVTTVReXhOUVVGTk8yZENRVWRTTEVsQlFVa3NTVUZCU1N4SFFVRkhMRTFCUVUwc1JVRkJSVHR2UWtGRGFrSXNSVUZCUlN4SFFVRkhMRWRCUVVjc1EwRkJRenR2UWtGRFZDeEhRVUZITEVkQlFVY3NRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETzJsQ1FVTjJRanR4UWtGQlRUdHZRa0ZEVEN4RlFVRkZMRWRCUVVjc1IwRkJSeXhEUVVGRE8yOUNRVU5VTEVsQlFVa3NSVUZCUlN4TFFVRkxMRkZCUVZFN2QwSkJRMnBDTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNN08zZENRVVZVTEVkQlFVY3NSMEZCUnl4RFFVRkRMRVZCUVVVc1IwRkJSeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTTdhVUpCUTNwQ08yRkJRMFk3V1VGRlJDeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRE8xbEJSV2hDTERaRVFVRTJSRHRaUVVNM1JDeEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhIUVVGSExFVkJRVVU3WjBKQlEyaENMRTFCUVUwc1owSkJRV2RDTEVkQlFVY3NTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dG5Ra0ZEYkVRc1NVRkJTU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NaMEpCUVdkQ0xFZEJRVWNzWjBKQlFXZENPMjlDUVVOcVJDeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1owSkJRV2RDTEVkQlFVY3NaMEpCUVdkQ0xFTkJRVU03WVVGRGJrUTdhVUpCUVUwN1owSkJRMHdzVFVGQlRTeGhRVUZoTEVkQlFVY3NTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU0xUkN4SlFVRkpMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eG5Ra0ZCWjBJc1IwRkJSeXhoUVVGaE8yOUNRVU01UXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzWjBKQlFXZENMRWRCUVVjc1lVRkJZU3hEUVVGRE8yRkJRMmhFTzFOQlEwWTdVVUZGUkN4UFFVRlBMRVZCUVVNc1RVRkJUU3hGUVVGRkxFMUJRVTBzUlVGQlJTeEpRVUZKTEVWQlFVVXNSMEZCUnl4RlFVRkRMRU5CUVVNN1NVRkRja01zUTBGQlF6dEpRVVZFT3pzN096dFBRVXRITzBsQlEwc3NNRUpCUVRCQ0xFTkJRMmhETEZWQlFXMUNMRVZCUTI1Q0xGbEJRWEZDTEVWQlEzSkNMRTFCUVdkQ0xFVkJRMmhDTEVsQlFXTTdVVUZGWkN4TlFVRk5MRkZCUVZFc1IwRkJSeXhWUVVGVkxFTkJRVU1zVFVGQlRTeERRVUZETzFGQlEyNURMRTFCUVUwc1ZVRkJWU3hIUVVGSExGVkJRVlVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNN1VVRkZlRU1zVFVGQlRTeEpRVUZKTEVkQlFVY3NTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhSUVVGUkxFZEJRVWNzVlVGQlZTeERRVUZETEVOQlFVTTdVVUZEYUVRc1RVRkJUU3hKUVVGSkxFZEJRVWNzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRWRCUVVjc1ZVRkJWU3hEUVVGRExFTkJRVU03VVVGRGFFUXNUVUZCVFN4SlFVRkpMRWRCUVVjc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eFJRVUZSTEVkQlFVY3NWVUZCVlN4RFFVRkRMRU5CUVVNN1VVRkZhRVFzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExGRkJRVkVzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTnFReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1ZVRkJWU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzJkQ1FVTnVReXhKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTTdaMEpCUTFvc1NVRkJTU3hWUVVGVkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8yOUNRVU42UWl4VFFVRlRMRU5CUVVNc2JVTkJRVzFETzJkQ1FVVXZReXhKUVVGSkxGVkJRVlVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRE8yOUNRVU40UWl4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRE8zRkNRVU5RTEVsQlFVa3NXVUZCV1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hIUVVGSE8yOUNRVU14UXl4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRE96dHZRa0ZGVml4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGSGFFVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhWUVVGVkxFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMmRDUVVNM1FpeEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRlZCUVZVc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eFZRVUZWTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlF6VkRMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzVlVGQlZTeEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJRenRoUVVOb1F6dFRRVU5HTzFGQlJVUXNUMEZCVHl4RlFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVVzU1VGQlNTeEZRVUZETEVOQlFVTTdTVUZETlVJc1EwRkJRenRKUVVWRU96czdPenRQUVV0SE8wbEJRMHNzWjBOQlFXZERPMUZCUTNSRExFMUJRVTBzVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJRenRSUVVWc1F5eE5RVUZOTEVWQlFVTXNWMEZCVnl4RlFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRek5DTEUxQlFVMHNWMEZCVnl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eEZRVUZGTEVOQlFVTTdVVUZETTBNc1NVRkJTU3hSUVVGUkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEycENMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4WFFVRlhMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFsQlF6TkRMRTFCUVUwc1MwRkJTeXhIUVVGSExGZEJRVmNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTTNRaXhKUVVGSkxGRkJRVkVzUjBGQlJ5eFhRVUZYTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVNelFpeFJRVUZSTEVkQlFVY3NTMEZCU3l4RFFVRkRPMU5CUTNCQ08xRkJSVVFzVFVGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUlR0WlFVTnlReXhKUVVGSkxFdEJRVXNzUjBGQlJ5eFJRVUZSTEVkQlFVY3NUMEZCVHp0blFrRkROVUlzVDBGQlR5eERRVUZETEVOQlFVTTdPMmRDUVVWVUxFOUJRVThzUzBGQlN5eERRVUZETzFGQlEycENMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSVWdzZVVWQlFYbEZPMUZCUTNwRkxHbEZRVUZwUlR0UlFVTnFSU3hYUVVGWE8xRkJRMWdzU1VGQlNTeERRVUZETEZOQlFWTXNSMEZCUnl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRk8xbEJRMnBFTEU5QlFVOHNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RlFVRkZPMmRDUVVOMlF5eFBRVUZQTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExIZENRVUYzUWp0WlFVTjRSU3hEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5NTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUlVnc2JVTkJRVzFETzFGQlEyNURMRTFCUVUwc1QwRkJUeXhIUVVGaExFVkJRVVVzUTBGQlF6dFJRVU0zUWl4TlFVRk5MRWxCUVVrc1IwRkJZU3hGUVVGRkxFTkJRVU03VVVGRE1VSXNUVUZCVFN4SlFVRkpMRWRCUVdFc1JVRkJSU3hEUVVGRE8xRkJRekZDTEUxQlFVMHNXVUZCV1N4SFFVRkhMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFJRVU53UXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NXVUZCV1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU0xUXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhaUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZET1VJc1NVRkJTU3hMUVVGTExFTkJRVU1zUzBGQlN5eEZRVUZGTzJkQ1FVTm1MRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMmRDUVVNeFFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dG5Ra0ZEY2tJc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1lVRkRkRUk3VTBGRFJqdFJRVU5FTEUxQlFVMHNaVUZCWlN4SFFVRkhMRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4UFFVRlBMRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGRmJrVXNUMEZCVHl4RlFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVVzWlVGQlpTeEZRVUZETEVOQlFVTTdTVUZEZGtNc1EwRkJRenRKUVVWRU96czdUMEZIUnp0SlFVTkxMRzFDUVVGdFFpeERRVUZETEU5QlFXbENMRVZCUVVVc1QwRkJaVHRSUVVNMVJDeE5RVUZOTEUxQlFVMHNSMEZCUnl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOc1JDeE5RVUZOTEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlF5OUNMRTFCUVUwc1VVRkJVU3hIUVVGSExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4SFFVRkhMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRM3BFTEZGQlFWRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZEZUVJc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF6dG5Ra0ZCUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVDBGQlR5eEhRVUZITEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNdlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTklMRTlCUVU4c1RVRkJUU3hEUVVGRE8wbEJRMmhDTEVOQlFVTTdTVUZGUkRzN1QwRkZSenRKUVVOTExHbERRVUZwUXl4RFFVRkRMRXRCUVdsRE8xRkJRM3BGTEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8wbEJReTlETEVOQlFVTTdTVUZGUkRzN08wOUJSMGM3U1VGRFN5d3dRa0ZCTUVJN1VVRkRhRU1zYTBKQlFXdENPMUZCUTJ4Q0xFMUJRVTBzUlVGQlF5eHBRa0ZCYVVJc1JVRkJSU3haUVVGWkxFVkJRVVVzYTBKQlFXdENMRVZCUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU03VVVGRmJrVXNUVUZCVFN4RlFVTktMR1ZCUVdVc1JVRkRaaXhoUVVGaExFVkJRMklzWVVGQllTeEhRVU5rTEVkQlFVY3NTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeERRVUZETzFGQlJUTkNMRTFCUVUwc1IwRkJSeXhIUVVGSExHRkJRV0VzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNN1VVRkRjRU1zVFVGQlRTeFRRVUZUTEVkQlFVY3NZVUZCWVN4RFFVRkRMRTFCUVUwc1MwRkJTeXhoUVVGaExFTkJRVU1zVFVGQlRTeERRVUZETzFGQlJXaEZMRTFCUVUwc2RVSkJRWFZDTEVkQlFVY3NaVUZCWlN4RFFVRkRMRWRCUVVjc1EwRkRha1FzUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSeXhyUWtGQmEwSXNRMEZET1VJc1EwRkJRenRSUVVOR0xFMUJRVTBzZVVKQlFYbENMRWRCUVVjc1EwRkJReXhIUVVGSExIVkNRVUYxUWl4RFFVRkRMRU5CUVVNN1VVRkRMMFFzVFVGQlRTeHBRa0ZCYVVJc1IwRkJSeXhEUVVGRExFZEJRVWNzWlVGQlpTeERRVUZETEVOQlFVTTdVVUZGTDBNc1NVRkJTU3hEUVVGRExHbERRVUZwUXl4RFFVRkRPMWxCUTNKRExHbENRVUZwUWp0WlFVTnFRaXg1UWtGQmVVSTdXVUZEZWtJc2RVSkJRWFZDTzFsQlEzWkNMRk5CUVZNN1dVRkRWQ3haUVVGWkxFVkJRVVVzV1VGQldUdFpRVU14UWl4TFFVRkxMRVZCUVVVc1dVRkJXVHRaUVVOdVFpeExRVUZMTEVWQlFVVXNhVUpCUVdsQ08xbEJRM2hDTEVkQlFVYzdVMEZEU2l4RFFVRkRMRU5CUVVNN1NVRkRUQ3hEUVVGRE8wbEJSVVE3TzA5QlJVYzdTVUZEU3l4elFrRkJjMEk3VVVGRE5VSXNhMEpCUVd0Q08xRkJRMnhDTEUxQlFVMHNZVUZCWVN4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU03VVVGRGNrTXNUVUZCVFN4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF6dFJRVVZ5UXl4dlJFRkJiMFE3VVVGRGNFUXNUVUZCVFN4RlFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVVzWlVGQlpTeEZRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeERRVUZETzFGQlJUZEVMRTFCUVUwc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0UlFVTnNReXhOUVVGTkxGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJRenRSUVVWdVF5eE5RVUZOTEVWQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhIUVVGSExGbEJRVmtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFJRVVYyUkN4SlFVRkpMRU5CUVVNc2FVTkJRV2xETEVOQlFVTTdXVUZEY2tNc1lVRkJZVHRaUVVOaUxHRkJRV0U3V1VGRFlpeEpRVUZKTzFsQlEwb3NTVUZCU1R0WlFVTktMR1ZCUVdVN1dVRkRaaXhEUVVGRE8xbEJRMFFzUTBGQlF6dFpRVU5FTEU5QlFVODdXVUZEVUN4VFFVRlRPMU5CUTFZc1EwRkJReXhEUVVGRE8wbEJRMHdzUTBGQlF6dEpRVVZFT3pzN096czdUMEZOUnp0SlFVTkxMR3RDUVVGclFpeERRVUZETEVOQlFWTTdVVUZEYkVNc1RVRkJUU3hGUVVGRExHbENRVUZwUWl4RlFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMnBETEUxQlFVMHNSVUZEU2l4SlFVRkpMRVZCUTBvc1NVRkJTU3hGUVVOS0xHRkJRV0VzUlVGRFlpeGhRVUZoTEVWQlEySXNaVUZCWlN4RlFVTm1MR2xDUVVGcFFpeEZRVU5xUWl4NVFrRkJlVUlzUlVGRGVrSXNkVUpCUVhWQ0xFVkJRM1pDTEZOQlFWTXNSVUZEVkN4WlFVRlpMRVZCUTFvc1MwRkJTeXhGUVVOTUxFdEJRVXNzUlVGRFRDeERRVUZETEVWQlEwUXNRMEZCUXl4RlFVTkVMRWRCUVVjc1JVRkRTQ3hQUVVGUExFVkJRMUFzVTBGQlV5eEhRVU5XTEVkQlFVY3NhVUpCUVdsQ0xFTkJRVU03VVVGRmRFSXNUVUZCVFN4VFFVRlRMRWRCUVVjc1IwRkJSeXhEUVVGRE8xRkJSWFJDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eGxRVUZsTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8xbEJReTlETEVsQlFVa3NhVUpCUVdsQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXp0blFrRkRNVUlzVTBGQlV6dFpRVWRZTEUxQlFVMHNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU5zUWl4TlFVRk5MRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZGYkVJc1RVRkJUU3hQUVVGUExFZEJRVWNzWVVGQllTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTJwRExFMUJRVTBzUzBGQlN5eEhRVUZITEdGQlFXRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVVdlFpeE5RVUZOTEZkQlFWY3NSMEZCUnl4TFFVRkxMRU5CUVVNc1QwRkJUeXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzFsQlJURkRMRWxCUVVrc1UwRkJVeXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU5zUWl4SlFVRkpMRmRCUVZjc1IwRkJSeXhEUVVGRExFVkJRVVU3WjBKQlEyNUNMRk5CUVZNc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJRenRuUWtGRE1VUXNVMEZCVXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZkQlFWY3NSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU03WVVGRGFrUTdXVUZGUkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NSMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8yZENRVU0xUWl4TlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRk5CUVZNc1EwRkJReXhEUVVGRE8yZENRVU51UlN4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUzBGQlN5eEhRVUZITEV0QlFVc3NRMEZCUXp0blFrRkROVUlzU1VGQlNTeFRRVUZUTzI5Q1FVTllMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNN1lVRkRPVUk3V1VGRlJDeHBRa0ZCYVVJc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeGxRVUZsTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkZNME1zVFVGQlRTeFhRVUZYTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkROVUlzUTBGQlF5eERRVUZETEVkQlFVY3NlVUpCUVhsQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4MVFrRkJkVUlzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZEYUVVc1EwRkJRenRaUVVWR0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhYUVVGWExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdaMEpCUTNCRExFMUJRVTBzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4VlFVRlZMRU5CUVVNc1UwRkJVeXhGUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0blFrRkRia1FzVFVGQlRTeExRVUZMTEVkQlFVY3NZVUZCWVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVVV2UWl4TlFVRk5MRmRCUVZjc1IwRkJSeXhMUVVGTExFTkJRVU1zVDBGQlR5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMmRDUVVVeFF5eEpRVUZKTEZOQlFWTXNSMEZCUnl4SFFVRkhMRU5CUVVNN1owSkJRM0JDTEVsQlFVa3NWMEZCVnl4SFFVRkhMRWRCUVVjc1JVRkJSVHR2UWtGRGNrSXNVMEZCVXl4SFFVRkhMRWRCUVVjc1IwRkJSeXhMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzI5Q1FVTTFRaXhUUVVGVE8zZENRVU5RTEVOQlFVTXNTMEZCU3l4SFFVRkhMRmRCUVZjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMmxDUVVNNVJEdHhRa0ZCVFN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVU3YjBKQlEyeENMRk5CUVZNN2FVSkJRMVk3WjBKQlJVUXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHR2UWtGRE5VSXNTVUZCU1N4TFFVRkxMRWRCUVVjc1IwRkJSeXhEUVVGRE8yOUNRVU5vUWl4SlFVRkpMRk5CUVZNc1IwRkJSeXhIUVVGSE8zZENRVU5xUWl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRenR2UWtGRkwwUXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFdEJRVXNzUjBGQlJ5eExRVUZMTEVOQlFVTTdhVUpCUXpkQ08yRkJRMFk3V1VGRFJDeDVRa0ZCZVVJc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeFhRVUZYTEVkQlFVY3NkVUpCUVhWQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVMEZETVVVN1VVRkRSQ3hwUWtGQmFVSXNRMEZCUXl4TFFVRkxMRWRCUVVjc1dVRkJXU3hIUVVGSExFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVVM1JDeHBRa0ZCYVVJc1EwRkJReXhaUVVGWkxFbEJRVWtzUTBGQlF5eERRVUZETzFGQlEzQkRMRTlCUVU4c1lVRkJZU3hEUVVGRE8wbEJRM1pDTEVOQlFVTTdTVUZGUkRzN096czdPMDlCVFVjN1NVRkRTeXh0UWtGQmJVSXNRMEZEZWtJc1owSkJRWGxFTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrN1VVRkZia1VzVDBGQlR5eEpRVUZKTEU5QlFVOHNRMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTkxFVkJRVVVzUlVGQlJUdFpRVU55UXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhMUVVGTExFbEJRVWtzUlVGQlJUdG5Ra0ZEZEVJc1NVRkJTVHR2UWtGRFJpeE5RVUZOTEVWQlFVTXNUMEZCVHl4RlFVRkZMRmxCUVZrc1JVRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eHBRa0ZCYVVJc1EwRkJRenR2UWtGRGRrUXNTVUZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03YjBKQlEzWkVMRTFCUVUwc1kwRkJZeXhIUVVGSExFbEJRVWtzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhaUVVGWkxFTkJRVU03YjBKQlF6TkVMRTFCUVUwc1ZVRkJWU3hIUVVGSExHRkJRV0VzUTBGQlF5eGpRVUZqTEVOQlFVTXNTMEZCU3l4TFFVRkxMRU5CUVVNN2IwSkJRek5FTEUxQlFVMHNWVUZCVlN4SFFVRkhMR05CUVdNc1MwRkJTeXhQUVVGUExFTkJRVU03YjBKQlF6bERMRWxCUVVrc1EwRkJReXhWUVVGVkxFbEJRVWtzUTBGQlF5eFZRVUZWTzNkQ1FVTTFRaXhWUVVGVkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03TzNkQ1FVVTFRaXhQUVVGUExFOUJRVThzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXp0cFFrRkRPVUk3WjBKQlFVTXNUMEZCVHl4SFFVRkhMRVZCUVVVN2IwSkJRMW9zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMmxDUVVOaU8xbEJRMGdzUTBGQlF5eERRVUZETzFsQlEwWXNWVUZCVlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWtzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUXpsQ0xFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEwd3NRMEZCUXp0SlFVVkVPenM3T3pzN1QwRk5SenRKUVVOTExHTkJRV01zUTBGRGNFSXNaMEpCUVhsRUxFZEJRVWNzUlVGQlJTeERRVUZETEVsQlFVazdVVUZGYmtVc1NVRkJTU3hWUVVGVkxFZEJRVWNzUzBGQlN5eERRVUZETzFGQlEzWkNMRWxCUVVrc1UwRkJVeXhIUVVGWkxFVkJRVVVzUTBGQlF6dFJRVU0xUWl4UFFVRlBMRU5CUVVNc1ZVRkJWU3hGUVVGRk8xbEJRMnhDTEUxQlFVMHNSVUZCUXl4UFFVRlBMRVZCUVVVc1dVRkJXU3hGUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEdsQ1FVRnBRaXhEUVVGRE8xbEJRM1pFTEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1dVRkRiRVFzVFVGQlRTeGpRVUZqTEVkQlFVY3NTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeERRVUZETEZsQlFWa3NRMEZCUXp0WlFVTXpSQ3hOUVVGTkxGVkJRVlVzUjBGQlJ5eGhRVUZoTEVOQlFVTXNZMEZCWXl4RFFVRkRMRXRCUVVzc1MwRkJTeXhEUVVGRE8xbEJRek5FTEZWQlFWVXNSMEZCUnl4alFVRmpMRXRCUVVzc1QwRkJUeXhKUVVGSkxGVkJRVlVzUTBGQlF6dFRRVU4yUkR0UlFVTkVMRTlCUVU4c1UwRkJVeXhEUVVGRE8wbEJRMjVDTEVOQlFVTTdTVUZGUkRzN08wOUJSMGM3U1VGRFNTeFZRVUZWTzFGQlEyWXNUVUZCVFN4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF6dFJRVVY2UWl4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUTBGQlF6dFpRVU5zUWl4UFFVRlBMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU03VVVGSGRFSXNTVUZCU1N4RFFVRkRMRXRCUVVzN1dVRkRVaXhQUVVGUExFZEJRVWNzUTBGQlF6dFJRVWRpTEUxQlFVMHNUVUZCVFN4SFFVRkhMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU03VVVGRE0wSXNTVUZCU1N4TlFVRk5MRWxCUVVrc1NVRkJTVHRaUVVOb1FpeFBRVUZQTEVkQlFVY3NRMEZCUXp0aFFVTlNMRWxCUVVrc1RVRkJUU3hKUVVGSkxFbEJRVWs3V1VGRGNrSXNUMEZCVHl4SFFVRkhMRU5CUVVNN1lVRkRVaXhKUVVGSkxFMUJRVTBzU1VGQlNTeEpRVUZKTzFsQlEzSkNMRTlCUVU4c1IwRkJSeXhEUVVGRE96dFpRVVZZTEU5QlFVOHNSMEZCUnl4RFFVRkRPMGxCUTJZc1EwRkJRenREUVVOR08wRkJSVVFzVFVGQlRTeFZRVUZWTEZOQlFWTXNRMEZCUXl4RFFVRlRMRVZCUVVVc1EwRkJVenRKUVVNMVF5eEpRVUZKTEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRaaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVTdVVUZETDBJc1RVRkJUU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVVXZRaXhQUVVGUExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1FVRkRNMElzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4UFFVRlBMRU5CUVVNc1EwRkJVeXhGUVVGRkxFTkJRVk03U1VGRE1VTXNUVUZCVFN4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRMMElzVDBGQlR5eE5RVUZOTEVOQlFVTTdRVUZEYUVJc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeE5RVUZOTEVOQlFVTXNRMEZCVXl4RlFVRkZMRU5CUVZNN1NVRkRla01zU1VGQlNTeE5RVUZOTEVkQlFVY3NSMEZCUnl4RFFVRkRPMGxCUTJwQ0xFbEJRVWtzUzBGQlN5eEhRVUZITEVkQlFVY3NRMEZCUXp0SlFVTm9RaXhKUVVGSkxFdEJRVXNzUjBGQlJ5eEhRVUZITEVOQlFVTTdTVUZGYUVJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdVVUZEYWtNc1RVRkJUU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGRFSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVVUZEYmtJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1MwRkRjRUk3U1VGRlJDeEpRVUZKTEV0QlFVc3NTMEZCU3l4RFFVRkRMRWxCUVVrc1MwRkJTeXhMUVVGTExFTkJRVU03VVVGRE5VSXNUMEZCVHl4RFFVRkRMRU5CUVVNN1UwRkRUaXhKUVVGSkxFdEJRVXNzUzBGQlN5eERRVUZETEVsQlFVa3NTMEZCU3l4TFFVRkxMRU5CUVVNN1VVRkRha01zVDBGQlR5eEhRVUZITEVOQlFVTTdPMUZCUlZnc1QwRkJUeXhIUVVGSExFZEJRVWNzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEyNUVMRU5CUVVNN1FVRkZSRHM3TzBkQlIwYzdRVUZEU0N4TlFVRk5MR2xDUVVGcFFqdEpRVUYyUWp0UlFVTkZMR2xDUVVGWkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlJXcENMREJEUVVFd1F6dFJRVU14UXl4clFrRkJZU3hIUVVGbExFVkJRVVVzUTBGQlF6dFJRVU12UWl4clFrRkJZU3hIUVVGbExFVkJRVVVzUTBGQlF6dFJRVU12UWl4VFFVRkpMRWRCUVdFc1JVRkJSU3hEUVVGRE8xRkJRM0JDTEZOQlFVa3NSMEZCWVN4RlFVRkZMRU5CUVVNN1VVRkRjRUlzYjBKQlFXVXNSMEZCWVN4RlFVRkZMRU5CUVVNN1VVRkRMMElzYzBKQlFXbENMRWRCUVdFc1JVRkJSU3hEUVVGRE8xRkJRMnBETERoQ1FVRjVRaXhIUVVGaExFVkJRVVVzUTBGQlF6dFJRVU42UXl3MFFrRkJkVUlzUjBGQllTeEZRVUZGTEVOQlFVTTdVVUZEZGtNc1kwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU5xUWl4cFFrRkJXU3hIUVVGSExFZEJRVWNzUTBGQlF6dFJRVU51UWl4VlFVRkxMRWRCUVVjc1IwRkJSeXhEUVVGRE8xRkJRMW9zVlVGQlN5eEhRVUZITEVkQlFVY3NRMEZCUXp0UlFVTmFMRTFCUVVNc1IwRkJSeXhyUWtGQmEwSXNRMEZCUXp0UlFVTjJRaXhOUVVGRExFZEJRVWNzYTBKQlFXdENMRU5CUVVNN1VVRkRka0lzVVVGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTlNMRmxCUVU4c1IwRkJSeXhIUVVGSExFTkJRVU03VVVGRFpDeGpRVUZUTEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJoQ0xFTkJRVU03UTBGQlFUdEJRVVZFT3p0SFFVVkhPMEZCUTBnc1UwRkJVeXhKUVVGSkxFTkJRVU1zUTBGQlV5eEZRVUZGTEZOQlFXbENPMGxCUTNoRExFbEJRVWtzUTBGQlF5eEhRVUZITEZOQlFWTTdVVUZCUlN4UFFVRlBMRk5CUVZNc1EwRkJRenRUUVVNdlFpeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNN1VVRkJSU3hQUVVGUExFTkJRVU1zVTBGQlV5eERRVUZET3p0UlFVTjBReXhQUVVGUExFTkJRVU1zUTBGQlF6dEJRVU5vUWl4RFFVRkRPMEZCUlVRN08wZEJSVWM3UVVGRFNDeFRRVUZUTEV0QlFVc3NRMEZCUXl4RFFVRlhMRVZCUVVVc1EwRkJWenRKUVVOeVF5eEpRVUZKTEUxQlFVMHNSMEZCUnl4SFFVRkhMRU5CUVVNN1NVRkRha0lzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZPMUZCUXk5Q0xFMUJRVTBzU1VGQlNTeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRmNrTXNUMEZCVHl4TlFVRk5MRU5CUVVNN1FVRkRhRUlzUTBGQlF6dEJRVVZFT3pzN096dEhRVXRITzBGQlEwZ3NUVUZCVFN4VlFVRlZMRmxCUVZrc1EwRkJReXhOUVVGakxFVkJRVVVzVDBGQlpUdEpRVU14UkN4TlFVRk5MRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCVnl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVk1zUlVGQlJTeEZRVUZGTzFGQlEyaEVMRTlCUVU4c1IwRkJSeXhIUVVGSExFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTjRReXhEUVVGRExFTkJRVU03U1VGRlJpeE5RVUZOTEVWQlFVVXNSMEZCUnl4TFFVRkxPMU5CUTJJc1RVRkJUU3hEUVVGRExFTkJRVU1zUlVGQlJTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJRenRUUVVNeFFpeEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZITEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUlRkRExFMUJRVTBzUlVGQlJTeEhRVUZITEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hMUVVGTExFVkJRVVVzUlVGQlJUdFJRVU51UkN4TlFVRk5MRWRCUVVjc1IwRkJSeXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NUMEZCVHl4RFFVRkRPMUZCUTJwRExFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJRenRKUVVNdlJDeERRVUZETEVOQlFVTXNRMEZCUXp0SlFVVklMRTFCUVUwc1lVRkJZU3hIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJwRExFMUJRVTBzU1VGQlNTeEhRVUZITEVWQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZETEVOQlFVTTdTVUZGTlVJc01FUkJRVEJFTzBsQlF6RkVMRTFCUVUwc1QwRkJUeXhIUVVGSE8xRkJRMlFzVDBGQlR5eEZRVUZGTEVkQlFVYzdVVUZEV2l4aFFVRmhPMUZCUTJJc2EwSkJRV3RDTEVWQlFVVXNTMEZCU3p0UlFVTjZRaXhoUVVGaExFVkJRVVVzUjBGQlJ6dFJRVU5zUWl4alFVRmpMRVZCUVVVc1MwRkJTenRMUVVOMFFpeERRVUZETzBsQlJVWXNiVU5CUVcxRE8wbEJRMjVETEUxQlFVMHNSVUZCUXl4bFFVRmxMRVZCUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zU1VGQlNTeEZRVUZGTEV0QlFVc3NSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJRenRKUVVOdVJDeE5RVUZOTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhIUVVGSExHVkJRVEpDTEVOQlFVTTdTVUZETTBNc1QwRkJUeXhGUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNRMEZCUXp0QlFVTm9RaXhEUVVGRE8wRkJSVVE3T3p0SFFVZEhPMEZCUTBnc1RVRkJUU3hWUVVGVkxHZENRVUZuUWl4RFFVTTVRaXhMUVVFd1FpeEZRVU14UWl4TlFVRm5RaXhGUVVOb1FpeFhRVUZYTEVkQlFVY3NSMEZCUnl4RlFVTnFRaXhQUVVGUExFZEJRVWNzUjBGQlJ6dEpRVVZpTEU5QlFVOHNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRVZCUVVVN1VVRkRia01zU1VGQlNTeE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRaUVVNeFF5eFBRVUZQTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdZVUZEYmtNc1NVRkJTU3hOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJRenRaUVVOc1F5eFBRVUZQTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdPMWxCUld4RExFOUJRVThzUzBGQlN5eERRVUZETzBsQlEycENMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRMHdzUTBGQlF6dEJRVVZFT3pzN096dEhRVXRITzBGQlEwZ3NUVUZCVFN4VlFVRlZMSE5DUVVGelFpeERRVUZETEdGQlFXdERPMGxCUTNaRkxHRkJRV0VzUjBGQlJ5eE5RVUZOTEVOQlFVTXNVMEZCVXl4RFFVRkRMR0ZCUVdFc2EwTkJRWE5DTEVOQlFVTTdTVUZEY2tVc1RVRkJUU3hUUVVGVExFZEJRVWNzVFVGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4aFFVRmhMRU5CUVVNc1EwRkJRenRKUVVOc1JDeE5RVUZOTEZWQlFWVXNSMEZCUnl4TlFVRk5MRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNVMEZCVXl4RlFVRkZMR0ZCUVdFc1EwRkJReXhEUVVGRE8wbEJRM0pGTEdGQlFXRXNSMEZCUnl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVONFFpeGhRVUZoTEVWQlEySXNUVUZCVFN4RFFVRkRMRkZCUVZFc1EwRkJReXhUUVVGVExFVkJRVVVzVlVGQlZTeERRVUZETEVOQlEzWkRMRU5CUVVNN1NVRkRSaXhQUVVGUExFMUJRVTBzUTBGQlF5eGpRVUZqTEVOQlFVTXNZVUZCWVN4RFFVRkRMRU5CUVVNN1FVRkRPVU1zUTBGQlF6dEJRVVZFT3pzN08wZEJTVWM3UVVGRFNDeE5RVUZOTEZWQlFWVXNZVUZCWVN4RFFVTXpRaXhQUVVGdFFpeEZRVU51UWl4UFFVRnRRaXhGUVVOdVFpeFRRVUZyUWp0SlFVVnNRaXhOUVVGTkxFMUJRVTBzUjBGQlJ5eExRVUZMTzFOQlEycENMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETzFOQlEzSkNMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVWcVJDeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRSUVVOMlF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU14UXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0blFrRkROVU1zVFVGQlRTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTjRRaXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0aFFVTnFSRHRUUVVOR08wdEJRMFk3U1VGRFJDeFBRVUZQTEUxQlFVMHNRMEZCUXp0QlFVTm9RaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9nWlhOc2FXNTBMV1JwYzJGaWJHVWdiV0Y0TFd4bGJpQXFMMXh1THlvcVhHNGdLaUJBYkdsalpXNXpaVnh1SUNwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFNUlFZHZiMmRzWlNCTVRFTXVJRUZzYkNCU2FXZG9kSE1nVW1WelpYSjJaV1F1WEc0Z0tseHVJQ29nVEdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVGd1lXTm9aU0JNYVdObGJuTmxMQ0JXWlhKemFXOXVJREl1TUNBb2RHaGxJRndpVEdsalpXNXpaVndpS1R0Y2JpQXFJSGx2ZFNCdFlYa2dibTkwSUhWelpTQjBhR2x6SUdacGJHVWdaWGhqWlhCMElHbHVJR052YlhCc2FXRnVZMlVnZDJsMGFDQjBhR1VnVEdsalpXNXpaUzVjYmlBcUlGbHZkU0J0WVhrZ2IySjBZV2x1SUdFZ1kyOXdlU0J2WmlCMGFHVWdUR2xqWlc1elpTQmhkRnh1SUNwY2JpQXFJQ0FnSUNCb2RIUndPaTh2ZDNkM0xtRndZV05vWlM1dmNtY3ZiR2xqWlc1elpYTXZURWxEUlU1VFJTMHlMakJjYmlBcVhHNGdLaUJWYm14bGMzTWdjbVZ4ZFdseVpXUWdZbmtnWVhCd2JHbGpZV0pzWlNCc1lYY2diM0lnWVdkeVpXVmtJSFJ2SUdsdUlIZHlhWFJwYm1jc0lITnZablIzWVhKbFhHNGdLaUJrYVhOMGNtbGlkWFJsWkNCMWJtUmxjaUIwYUdVZ1RHbGpaVzV6WlNCcGN5QmthWE4wY21saWRYUmxaQ0J2YmlCaGJpQmNJa0ZUSUVsVFhDSWdRa0ZUU1ZNc1hHNGdLaUJYU1ZSSVQxVlVJRmRCVWxKQlRsUkpSVk1nVDFJZ1EwOU9SRWxVU1U5T1V5QlBSaUJCVGxrZ1MwbE9SQ3dnWldsMGFHVnlJR1Y0Y0hKbGMzTWdiM0lnYVcxd2JHbGxaQzVjYmlBcUlGTmxaU0IwYUdVZ1RHbGpaVzV6WlNCbWIzSWdkR2hsSUhOd1pXTnBabWxqSUd4aGJtZDFZV2RsSUdkdmRtVnlibWx1WnlCd1pYSnRhWE56YVc5dWN5QmhibVJjYmlBcUlHeHBiV2wwWVhScGIyNXpJSFZ1WkdWeUlIUm9aU0JNYVdObGJuTmxMbHh1SUNvZ1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5WEc0Z0tpOWNibHh1THlvcVhHNGdLaUJVYUdseklHbHpJR0VnU21GMllWTmpjbWx3ZENCeVpXbHRjR3hsYldWdWRHRjBhVzl1SUc5bUlGVk5RVkFnS0c5eWFXZHBibUZzSUd4cFkyVnVjMlVnWW1Wc2IzY3BMQ0JtY205dFhHNGdLaUIwYUdVZ2NIbDBhRzl1SUdsdGNHeGxiV1Z1ZEdGMGFXOXVJR1p2ZFc1a0lHRjBJR2gwZEhCek9pOHZaMmwwYUhWaUxtTnZiUzlzYldOcGJtNWxjeTkxYldGd0xseHVJQ3BjYmlBcUlFQmhkWFJvYjNJZ1lXNWtlV052Wlc1bGJrQm5iMjluYkdVdVkyOXRJQ2hCYm1SNUlFTnZaVzVsYmlsY2JpQXFMMXh1WEc0dktpcGNiaUFxSUVCc2FXTmxibk5sWEc0Z0tpQkNVMFFnTXkxRGJHRjFjMlVnVEdsalpXNXpaVnh1SUNwY2JpQXFJRU52Y0hseWFXZG9kQ0FvWXlrZ01qQXhOeXdnVEdWc1lXNWtJRTFqU1c1dVpYTmNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1VtVmthWE4wY21saWRYUnBiMjRnWVc1a0lIVnpaU0JwYmlCemIzVnlZMlVnWVc1a0lHSnBibUZ5ZVNCbWIzSnRjeXdnZDJsMGFDQnZjaUIzYVhSb2IzVjBYRzRnS2lCdGIyUnBabWxqWVhScGIyNHNJR0Z5WlNCd1pYSnRhWFIwWldRZ2NISnZkbWxrWldRZ2RHaGhkQ0IwYUdVZ1ptOXNiRzkzYVc1bklHTnZibVJwZEdsdmJuTWdZWEpsSUcxbGREcGNiaUFxWEc0Z0tpQXFJRkpsWkdsemRISnBZblYwYVc5dWN5QnZaaUJ6YjNWeVkyVWdZMjlrWlNCdGRYTjBJSEpsZEdGcGJpQjBhR1VnWVdKdmRtVWdZMjl3ZVhKcFoyaDBJRzV2ZEdsalpTd2dkR2hwYzF4dUlDb2dJQ0JzYVhOMElHOW1JR052Ym1ScGRHbHZibk1nWVc1a0lIUm9aU0JtYjJ4c2IzZHBibWNnWkdselkyeGhhVzFsY2k1Y2JpQXFYRzRnS2lBcUlGSmxaR2x6ZEhKcFluVjBhVzl1Y3lCcGJpQmlhVzVoY25rZ1ptOXliU0J0ZFhOMElISmxjSEp2WkhWalpTQjBhR1VnWVdKdmRtVWdZMjl3ZVhKcFoyaDBJRzV2ZEdsalpTeGNiaUFxSUNBZ2RHaHBjeUJzYVhOMElHOW1JR052Ym1ScGRHbHZibk1nWVc1a0lIUm9aU0JtYjJ4c2IzZHBibWNnWkdselkyeGhhVzFsY2lCcGJpQjBhR1VnWkc5amRXMWxiblJoZEdsdmJseHVJQ29nSUNCaGJtUXZiM0lnYjNSb1pYSWdiV0YwWlhKcFlXeHpJSEJ5YjNacFpHVmtJSGRwZEdnZ2RHaGxJR1JwYzNSeWFXSjFkR2x2Ymk1Y2JpQXFYRzRnS2lBcUlFNWxhWFJvWlhJZ2RHaGxJRzVoYldVZ2IyWWdkR2hsSUdOdmNIbHlhV2RvZENCb2IyeGtaWElnYm05eUlIUm9aU0J1WVcxbGN5QnZaaUJwZEhOY2JpQXFJQ0FnWTI5dWRISnBZblYwYjNKeklHMWhlU0JpWlNCMWMyVmtJSFJ2SUdWdVpHOXljMlVnYjNJZ2NISnZiVzkwWlNCd2NtOWtkV04wY3lCa1pYSnBkbVZrSUdaeWIyMWNiaUFxSUNBZ2RHaHBjeUJ6YjJaMGQyRnlaU0IzYVhSb2IzVjBJSE53WldOcFptbGpJSEJ5YVc5eUlIZHlhWFIwWlc0Z2NHVnliV2x6YzJsdmJpNWNiaUFxWEc0Z0tpQlVTRWxUSUZOUFJsUlhRVkpGSUVsVElGQlNUMVpKUkVWRUlFSlpJRlJJUlNCRFQxQlpVa2xIU0ZRZ1NFOU1SRVZTVXlCQlRrUWdRMDlPVkZKSlFsVlVUMUpUSUZ3aVFWTWdTVk5jSWx4dUlDb2dRVTVFSUVGT1dTQkZXRkJTUlZOVElFOVNJRWxOVUV4SlJVUWdWMEZTVWtGT1ZFbEZVeXdnU1U1RFRGVkVTVTVITENCQ1ZWUWdUazlVSUV4SlRVbFVSVVFnVkU4c0lGUklSVnh1SUNvZ1NVMVFURWxGUkNCWFFWSlNRVTVVU1VWVElFOUdJRTFGVWtOSVFVNVVRVUpKVEVsVVdTQkJUa1FnUmtsVVRrVlRVeUJHVDFJZ1FTQlFRVkpVU1VOVlRFRlNJRkJWVWxCUFUwVWdRVkpGWEc0Z0tpQkVTVk5EVEVGSlRVVkVMaUJKVGlCT1R5QkZWa1ZPVkNCVFNFRk1UQ0JVU0VVZ1EwOVFXVkpKUjBoVUlFaFBURVJGVWlCUFVpQkRUMDVVVWtsQ1ZWUlBVbE1nUWtVZ1RFbEJRa3hGWEc0Z0tpQkdUMUlnUVU1WklFUkpVa1ZEVkN3Z1NVNUVTVkpGUTFRc0lFbE9RMGxFUlU1VVFVd3NJRk5RUlVOSlFVd3NJRVZZUlUxUVRFRlNXU3dnVDFJZ1EwOU9VMFZSVlVWT1ZFbEJURnh1SUNvZ1JFRk5RVWRGVXlBb1NVNURURlZFU1U1SExDQkNWVlFnVGs5VUlFeEpUVWxVUlVRZ1ZFOHNJRkJTVDBOVlVrVk5SVTVVSUU5R0lGTlZRbE5VU1ZSVlZFVWdSMDlQUkZNZ1QxSmNiaUFxSUZORlVsWkpRMFZUT3lCTVQxTlRJRTlHSUZWVFJTd2dSRUZVUVN3Z1QxSWdVRkpQUmtsVVV6c2dUMUlnUWxWVFNVNUZVMU1nU1U1VVJWSlNWVkJVU1U5T0tTQklUMWRGVmtWU1hHNGdLaUJEUVZWVFJVUWdRVTVFSUU5T0lFRk9XU0JVU0VWUFVsa2dUMFlnVEVsQlFrbE1TVlJaTENCWFNFVlVTRVZTSUVsT0lFTlBUbFJTUVVOVUxDQlRWRkpKUTFRZ1RFbEJRa2xNU1ZSWkxGeHVJQ29nVDFJZ1ZFOVNWQ0FvU1U1RFRGVkVTVTVISUU1RlIweEpSMFZPUTBVZ1QxSWdUMVJJUlZKWFNWTkZLU0JCVWtsVFNVNUhJRWxPSUVGT1dTQlhRVmtnVDFWVUlFOUdJRlJJUlNCVlUwVmNiaUFxSUU5R0lGUklTVk1nVTA5R1ZGZEJVa1VzSUVWV1JVNGdTVVlnUVVSV1NWTkZSQ0JQUmlCVVNFVWdVRTlUVTBsQ1NVeEpWRmtnVDBZZ1UxVkRTQ0JFUVUxQlIwVXVYRzRnS2k5Y2JseHVhVzF3YjNKMElDb2dZWE1nYUdWaGNDQm1jbTl0SUNjdUwyaGxZWEFuTzF4dWFXMXdiM0owSUNvZ1lYTWdiV0YwY21sNElHWnliMjBnSnk0dmJXRjBjbWw0Snp0Y2JtbHRjRzl5ZENBcUlHRnpJRzV1UkdWelkyVnVkQ0JtY205dElDY3VMMjV1WDJSbGMyTmxiblFuTzF4dWFXMXdiM0owSUNvZ1lYTWdkSEpsWlNCbWNtOXRJQ2N1TDNSeVpXVW5PMXh1YVcxd2IzSjBJQ29nWVhNZ2RYUnBiSE1nWm5KdmJTQW5MaTkxZEdsc2N5YzdYRzVwYlhCdmNuUWdURTBnWm5KdmJTQW5iV3d0YkdWMlpXNWlaWEpuTFcxaGNuRjFZWEprZENjN1hHNWNibVY0Y0c5eWRDQjBlWEJsSUVScGMzUmhibU5sUm00Z1BTQW9lRG9nYm5WdFltVnlMQ0I1T2lCdWRXMWlaWElwSUQwK0lHNTFiV0psY2p0Y2JtVjRjRzl5ZENCMGVYQmxJRkpoYm1SdmJVWnVJRDBnS0NrZ1BUNGdiblZ0WW1WeU8xeHVaWGh3YjNKMElIUjVjR1VnUlhCdlkyaERZV3hzWW1GamF5QTlJQ2hsY0c5amFEb2diblZ0WW1WeUtTQTlQaUJpYjI5c1pXRnVJSHdnZG05cFpEdGNibVY0Y0c5eWRDQjBlWEJsSUZabFkzUnZjaUE5SUc1MWJXSmxjbHRkTzF4dVpYaHdiM0owSUhSNWNHVWdWbVZqZEc5eWN5QTlJRlpsWTNSdmNsdGRPMXh1Wlhod2IzSjBJR052Ym5OMElHVnVkVzBnVkdGeVoyVjBUV1YwY21saklIdGNiaUFnWTJGMFpXZHZjbWxqWVd3Z1BTQW5ZMkYwWldkdmNtbGpZV3duTEZ4dUlDQnNNU0E5SUNkc01TY3NYRzRnSUd3eUlEMGdKMnd5Snl4Y2JuMWNibHh1WTI5dWMzUWdVMDFQVDFSSVgwdGZWRTlNUlZKQlRrTkZJRDBnTVdVdE5UdGNibU52Ym5OMElFMUpUbDlMWDBSSlUxUmZVME5CVEVVZ1BTQXhaUzB6TzF4dVhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElGVk5RVkJRWVhKaGJXVjBaWEp6SUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRlJvWlNCa2FYTjBZVzVqWlNCbWRXNWpkR2x2YmlCM2FYUm9JSGRvYVdOb0lIUnZJR0Z6YzJWemN5QnVaV0Z5WlhOMElHNWxhV2RvWW05eWN5d2daR1ZtWVhWc2RITmNiaUFnSUNvZ2RHOGdaWFZqYkdsa1pXRnVJR1JwYzNSaGJtTmxMbHh1SUNBZ0tpOWNiaUFnWkdsemRHRnVZMlZHYmo4NklFUnBjM1JoYm1ObFJtNDdYRzRnSUM4cUtseHVJQ0FnS2lCVWFHVWdhVzVwZEdsaGJDQnNaV0Z5Ym1sdVp5QnlZWFJsSUdadmNpQjBhR1VnWlcxaVpXUmthVzVuSUc5d2RHbHRhWHBoZEdsdmJpNWNiaUFnSUNvdlhHNGdJR3hsWVhKdWFXNW5VbUYwWlQ4NklHNTFiV0psY2p0Y2JpQWdMeW9xWEc0Z0lDQXFJRlJvWlNCc2IyTmhiQ0JqYjI1dVpXTjBhWFpwZEhrZ2NtVnhkV2x5WldRZ0xTMGdhUzVsTGlCMGFHVWdiblZ0WW1WeUlHOW1JRzVsWVhKbGMzUmNiaUFnSUNvZ2JtVnBaMmhpYjNKeklIUm9ZWFFnYzJodmRXeGtJR0psSUdGemMzVnRaV1FnZEc4Z1ltVWdZMjl1Ym1WamRHVmtJR0YwSUdFZ2JHOWpZV3dnYkdWMlpXd3VYRzRnSUNBcUlGUm9aU0JvYVdkb1pYSWdkR2hwY3lCMllXeDFaU0IwYUdVZ2JXOXlaU0JqYjI1dVpXTjBaV1FnZEdobElHMWhibWxtYjJ4a0lHSmxZMjl0WlhOY2JpQWdJQ29nYkc5allXeHNlUzRnU1c0Z2NISmhZM1JwWTJVZ2RHaHBjeUJ6YUc5MWJHUWdZbVVnYm05MElHMXZjbVVnZEdoaGJpQjBhR1VnYkc5allXd2dhVzUwY21sdWMybGpYRzRnSUNBcUlHUnBiV1Z1YzJsdmJpQnZaaUIwYUdVZ2JXRnVhV1p2YkdRdVhHNGdJQ0FxTDF4dUlDQnNiMk5oYkVOdmJtNWxZM1JwZG1sMGVUODZJRzUxYldKbGNqdGNiaUFnTHlvcVhHNGdJQ0FxSUZSb1pTQmxabVpsWTNScGRtVWdiV2x1YVcxMWJTQmthWE4wWVc1alpTQmlaWFIzWldWdUlHVnRZbVZrWkdWa0lIQnZhVzUwY3k0Z1UyMWhiR3hsY2lCMllXeDFaWE5jYmlBZ0lDb2dkMmxzYkNCeVpYTjFiSFFnYVc0Z1lTQnRiM0psSUdOc2RYTjBaWEpsWkM5amJIVnRjR1ZrSUdWdFltVmtaR2x1WnlCM2FHVnlaU0J1WldGeVlua2djRzlwYm5SelhHNGdJQ0FxSUc5dUlIUm9aU0J0WVc1cFptOXNaQ0JoY21VZ1pISmhkMjRnWTJ4dmMyVnlJSFJ2WjJWMGFHVnlMQ0IzYUdsc1pTQnNZWEpuWlhJZ2RtRnNkV1Z6SUhkcGJHeGNiaUFnSUNvZ2NtVnpkV3gwSUc5dUlHRWdiVzl5WlNCbGRtVnVJR1JwYzNCbGNuTmhiQ0J2WmlCd2IybHVkSE11SUZSb1pTQjJZV3gxWlNCemFHOTFiR1FnWW1VZ2MyVjBYRzRnSUNBcUlISmxiR0YwYVhabElIUnZJSFJvWlNCZ1lITndjbVZoWkdCZ0lIWmhiSFZsTENCM2FHbGphQ0JrWlhSbGNtMXBibVZ6SUhSb1pTQnpZMkZzWlNCaGRDQjNhR2xqYUZ4dUlDQWdLaUJsYldKbFpHUmxaQ0J3YjJsdWRITWdkMmxzYkNCaVpTQnpjSEpsWVdRZ2IzVjBMbHh1SUNBZ0tpOWNiaUFnYldsdVJHbHpkRDg2SUc1MWJXSmxjanRjYmlBZ0x5b3FYRzRnSUNBcUlGUm9aU0JrYVcxbGJuTnBiMjRnYjJZZ2RHaGxJSE53WVdObElIUnZJR1Z0WW1Wa0lHbHVkRzh1SUZSb2FYTWdaR1ZtWVhWc2RITWdkRzhnTWlCMGIxeHVJQ0FnS2lCd2NtOTJhV1JsSUdWaGMza2dkbWx6ZFdGc2FYcGhkR2x2Yml3Z1luVjBJR05oYmlCeVpXRnpiMjVoWW14NUlHSmxJSE5sZENCMGJ5QmhibmxjYmlBZ0lDb2dhVzUwWldkbGNpQjJZV3gxWlNCcGJpQjBhR1VnY21GdVoyVWdNaUIwYnlBeE1EQXVYRzRnSUNBcUwxeHVJQ0J1UTI5dGNHOXVaVzUwY3o4NklHNTFiV0psY2p0Y2JpQWdMeW9xWEc0Z0lDQXFJRlJvWlNCdWRXMWlaWElnYjJZZ2RISmhhVzVwYm1jZ1pYQnZZMmh6SUhSdklHSmxJSFZ6WldRZ2FXNGdiM0IwYVcxcGVtbHVaeUIwYUdWY2JpQWdJQ29nYkc5M0lHUnBiV1Z1YzJsdmJtRnNJR1Z0WW1Wa1pHbHVaeTRnVEdGeVoyVnlJSFpoYkhWbGN5QnlaWE4xYkhRZ2FXNGdiVzl5WlNCaFkyTjFjbUYwWlZ4dUlDQWdLaUJsYldKbFpHUnBibWR6TGlCSlppQk9iMjVsSUdseklITndaV05wWm1sbFpDQmhJSFpoYkhWbElIZHBiR3dnWW1VZ2MyVnNaV04wWldRZ1ltRnpaV1FnYjI1Y2JpQWdJQ29nZEdobElITnBlbVVnYjJZZ2RHaGxJR2x1Y0hWMElHUmhkR0Z6WlhRZ0tESXdNQ0JtYjNJZ2JHRnlaMlVnWkdGMFlYTmxkSE1zSURVd01DQm1iM0lnYzIxaGJHd3BMbHh1SUNBZ0tpOWNiaUFnYmtWd2IyTm9jejg2SUc1MWJXSmxjanRjYmlBZ0x5b3FYRzRnSUNBcUlGUm9aU0J6YVhwbElHOW1JR3h2WTJGc0lHNWxhV2RvWW05eWFHOXZaQ0FvYVc0Z2RHVnliWE1nYjJZZ2JuVnRZbVZ5SUc5bUlHNWxhV2RvWW05eWFXNW5YRzRnSUNBcUlITmhiWEJzWlNCd2IybHVkSE1wSUhWelpXUWdabTl5SUcxaGJtbG1iMnhrSUdGd2NISnZlR2x0WVhScGIyNHVJRXhoY21kbGNpQjJZV3gxWlhOY2JpQWdJQ29nY21WemRXeDBJR2x1SUcxdmNtVWdaMnh2WW1Gc0lIWnBaWGR6SUc5bUlIUm9aU0J0WVc1cFptOXNaQ3dnZDJocGJHVWdjMjFoYkd4bGNseHVJQ0FnS2lCMllXeDFaWE1nY21WemRXeDBJR2x1SUcxdmNtVWdiRzlqWVd3Z1pHRjBZU0JpWldsdVp5QndjbVZ6WlhKMlpXUXVJRWx1SUdkbGJtVnlZV3hjYmlBZ0lDb2dkbUZzZFdWeklITm9iM1ZzWkNCaVpTQnBiaUIwYUdVZ2NtRnVaMlVnTWlCMGJ5QXhNREF1WEc0Z0lDQXFMMXh1SUNCdVRtVnBaMmhpYjNKelB6b2diblZ0WW1WeU8xeHVJQ0F2S2lwY2JpQWdJQ29nVkdobElHNTFiV0psY2lCdlppQnVaV2RoZEdsMlpTQnpZVzF3YkdWeklIUnZJSE5sYkdWamRDQndaWElnY0c5emFYUnBkbVVnYzJGdGNHeGxYRzRnSUNBcUlHbHVJSFJvWlNCdmNIUnBiV2w2WVhScGIyNGdjSEp2WTJWemN5NGdTVzVqY21WaGMybHVaeUIwYUdseklIWmhiSFZsSUhkcGJHd2djbVZ6ZFd4MFhHNGdJQ0FxSUdsdUlHZHlaV0YwWlhJZ2NtVndkV3h6YVhabElHWnZjbU5sSUdKbGFXNW5JR0Z3Y0d4cFpXUXNJR2R5WldGMFpYSWdiM0IwYVcxcGVtRjBhVzl1WEc0Z0lDQXFJR052YzNRc0lHSjFkQ0J6YkdsbmFIUnNlU0J0YjNKbElHRmpZM1Z5WVdONUxseHVJQ0FnS2k5Y2JpQWdibVZuWVhScGRtVlRZVzF3YkdWU1lYUmxQem9nYm5WdFltVnlPMXh1SUNBdktpcGNiaUFnSUNvZ1YyVnBaMmgwYVc1bklHRndjR3hwWldRZ2RHOGdibVZuWVhScGRtVWdjMkZ0Y0d4bGN5QnBiaUJzYjNjZ1pHbHRaVzV6YVc5dVlXd2daVzFpWldSa2FXNW5YRzRnSUNBcUlHOXdkR2x0YVhwaGRHbHZiaTRnVm1Gc2RXVnpJR2hwWjJobGNpQjBhR0Z1SUc5dVpTQjNhV3hzSUhKbGMzVnNkQ0JwYmlCbmNtVmhkR1Z5SUhkbGFXZG9kRnh1SUNBZ0tpQmlaV2x1WnlCbmFYWmxiaUIwYnlCdVpXZGhkR2wyWlNCellXMXdiR1Z6TGx4dUlDQWdLaTljYmlBZ2NtVndkV3h6YVc5dVUzUnlaVzVuZEdnL09pQnVkVzFpWlhJN1hHNGdJQzhxS2x4dUlDQWdLaUJVYUdVZ2NITmxkV1J2TFhKaGJtUnZiU0J1ZFcxaVpYSWdaMlZ1WlhKaGRHOXlJSFZ6WldRZ1lua2dkR2hsSUhOMGIyTm9ZWE4wYVdNZ2NHRnlkSE1nYjJZZ2RHaGxYRzRnSUNBcUlHRnNaMjl5YVhSb2JTNWNiaUFnSUNvdlhHNGdJSEpoYm1SdmJUODZJRkpoYm1SdmJVWnVPMXh1SUNBdktpcGNiaUFnSUNvZ1NXNTBaWEp3YjJ4aGRHVWdZbVYwZDJWbGJpQW9ablY2ZW5rcElIVnVhVzl1SUdGdVpDQnBiblJsY25ObFkzUnBiMjRnWVhNZ2RHaGxJSE5sZENCdmNHVnlZWFJwYjI1Y2JpQWdJQ29nZFhObFpDQjBieUJqYjIxaWFXNWxJR3h2WTJGc0lHWjFlbnA1SUhOcGJYQnNhV05wWVd3Z2MyVjBjeUIwYnlCdlluUmhhVzRnWVNCbmJHOWlZV3dnWm5WNmVubGNiaUFnSUNvZ2MybHRjR3hwWTJsaGJDQnpaWFJ6TGlCQ2IzUm9JR1oxZW5wNUlITmxkQ0J2Y0dWeVlYUnBiMjV6SUhWelpTQjBhR1VnY0hKdlpIVmpkQ0IwTFc1dmNtMHVYRzRnSUNBcUlGUm9aU0IyWVd4MVpTQnZaaUIwYUdseklIQmhjbUZ0WlhSbGNpQnphRzkxYkdRZ1ltVWdZbVYwZDJWbGJpQXdMakFnWVc1a0lERXVNRHNnWVNCMllXeDFaU0J2Wmx4dUlDQWdLaUF4TGpBZ2QybHNiQ0IxYzJVZ1lTQndkWEpsSUdaMWVucDVJSFZ1YVc5dUxDQjNhR2xzWlNBd0xqQWdkMmxzYkNCMWMyVWdZU0J3ZFhKbElHWjFlbnA1WEc0Z0lDQXFJR2x1ZEdWeWMyVmpkR2x2Ymk1Y2JpQWdJQ292WEc0Z0lITmxkRTl3VFdsNFVtRjBhVzgvT2lCdWRXMWlaWEk3WEc0Z0lDOHFLbHh1SUNBZ0tpQlVhR1VnWldabVpXTjBhWFpsSUhOallXeGxJRzltSUdWdFltVmtaR1ZrSUhCdmFXNTBjeTRnU1c0Z1kyOXRZbWx1WVhScGIyNGdkMmwwYUNCZ1lHMXBibDlrYVhOMFlHQmNiaUFnSUNvZ2RHaHBjeUJrWlhSbGNtMXBibVZ6SUdodmR5QmpiSFZ6ZEdWeVpXUXZZMngxYlhCbFpDQjBhR1VnWlcxaVpXUmtaV1FnY0c5cGJuUnpJR0Z5WlM1Y2JpQWdJQ292WEc0Z0lITndjbVZoWkQ4NklHNTFiV0psY2p0Y2JpQWdMeW9xWEc0Z0lDQXFJRVp2Y2lCMGNtRnVjMlp2Y20wZ2IzQmxjbUYwYVc5dWN5QW9aVzFpWldSa2FXNW5JRzVsZHlCd2IybHVkSE1nZFhOcGJtY2dZU0IwY21GcGJtVmtJRzF2WkdWc0tWeHVJQ0FnS2lCMGFHbHpJSGRwYkd3Z1kyOXVkSEp2YkNCb2IzY2dZV2RuY21WemMybDJaV3g1SUhSdklITmxZWEpqYUNCbWIzSWdibVZoY21WemRDQnVaV2xuYUdKdmNuTXVYRzRnSUNBcUlFeGhjbWRsY2lCMllXeDFaWE1nZDJsc2JDQnlaWE4xYkhRZ2FXNGdjMnh2ZDJWeUlIQmxjbVp2Y20xaGJtTmxJR0oxZENCdGIzSmxJR0ZqWTNWeVlYUmxYRzRnSUNBcUlHNWxZWEpsYzNRZ2JtVnBaMmhpYjNJZ1pYWmhiSFZoZEdsdmJpNWNiaUFnSUNvdlhHNGdJSFJ5WVc1elptOXliVkYxWlhWbFUybDZaVDg2SUc1MWJXSmxjanRjYm4xY2JseHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQlZUVUZRVTNWd1pYSjJhWE5sWkZCaGNtRnRjeUI3WEc0Z0lDOHFLbHh1SUNBZ0tpQlVhR1VnYldWMGNtbGpJSFZ6WldRZ2RHOGdiV1ZoYzNWeVpTQmthWE4wWVc1alpTQm1iM0lnWVNCMFlYSm5aWFFnWVhKeVlYa2dhWE1nZFhOcGJtY2djM1Z3WlhKMmFYTmxaRnh1SUNBZ0tpQmthVzFsYm5OcGIyNGdjbVZrZFdOMGFXOXVMaUJDZVNCa1pXWmhkV3gwSUhSb2FYTWdhWE1nSjJOaGRHVm5iM0pwWTJGc0p5QjNhR2xqYUNCM2FXeHNJRzFsWVhOMWNtVmNiaUFnSUNvZ1pHbHpkR0Z1WTJVZ2FXNGdkR1Z5YlhNZ2IyWWdkMmhsZEdobGNpQmpZWFJsWjI5eWFXVnpJRzFoZEdOb0lHOXlJR0Z5WlNCa2FXWm1aWEpsYm5RdUlFWjFjblJvWlhKdGIzSmxMRnh1SUNBZ0tpQnBaaUJ6WlcxcExYTjFjR1Z5ZG1selpXUWdhWE1nY21WeGRXbHlaV1FnZEdGeVoyVjBJSFpoYkhWbGN5QnZaaUF0TVNCM2FXeHNJR0psSUhSeVpXRjBaV1FnWVhOY2JpQWdJQ29nZFc1c1lXSmxiR3hsWkNCMWJtUmxjaUIwYUdVZ0oyTmhkR1ZuYjNKcFkyRnNKeUJ0WlhSeWFXTXVJRWxtSUhSb1pTQjBZWEpuWlhRZ1lYSnlZWGtnZEdGclpYTmNiaUFnSUNvZ1kyOXVkR2x1ZFc5MWN5QjJZV3gxWlhNZ0tHVXVaeTRnWm05eUlHRWdjbVZuY21WemMybHZiaUJ3Y205aWJHVnRLU0IwYUdWdUlHMWxkSEpwWXlCdlppQW5iREVuWEc0Z0lDQXFJRzl5SUNkc01pY2dhWE1nY0hKdlltRmliSGtnYlc5eVpTQmhjSEJ5YjNCeWFXRjBaUzVjYmlBZ0lDb3ZYRzRnSUhSaGNtZGxkRTFsZEhKcFl6ODZJRlJoY21kbGRFMWxkSEpwWXp0Y2JpQWdMeW9xWEc0Z0lDQXFJRmRsYVdkb2RHbHVaeUJtWVdOMGIzSWdZbVYwZDJWbGJpQmtZWFJoSUhSdmNHOXNiMmQ1SUdGdVpDQjBZWEpuWlhRZ2RHOXdiMnh2WjNrdUlFRWdkbUZzZFdVZ2IyWmNiaUFnSUNvZ01DNHdJSGRsYVdkb2RITWdaVzUwYVhKbGJIa2diMjRnWkdGMFlTd2dZU0IyWVd4MVpTQnZaaUF4TGpBZ2QyVnBaMmgwY3lCbGJuUnBjbVZzZVNCdmJpQjBZWEpuWlhRdVhHNGdJQ0FxSUZSb1pTQmtaV1poZFd4MElHOW1JREF1TlNCaVlXeGhibU5sY3lCMGFHVWdkMlZwWjJoMGFXNW5JR1Z4ZFdGc2JIa2dZbVYwZDJWbGJpQmtZWFJoSUdGdVpDQjBZWEpuWlhRdVhHNGdJQ0FxTDF4dUlDQjBZWEpuWlhSWFpXbG5hSFEvT2lCdWRXMWlaWEk3WEc0Z0lDOHFLbHh1SUNBZ0tpQlVhR1VnYm5WdFltVnlJRzltSUc1bFlYSmxjM1FnYm1WcFoyaGliM0p6SUhSdklIVnpaU0IwYnlCamIyNXpkSEoxWTNRZ2RHaGxJSFJoY21kbGRDQnphVzF3YkdOcFlXeGNiaUFnSUNvZ2MyVjBMaUJFWldaaGRXeDBjeUIwYnlCMGFHVWdZRzVsWVhKbGMzUk9aV2xuYUdKdmNuTmdJSEJoY21GdFpYUmxjaTVjYmlBZ0lDb3ZYRzRnSUhSaGNtZGxkRTVPWldsbmFHSnZjbk0vT2lCdWRXMWlaWEk3WEc1OVhHNWNiaThxS2x4dUlDb2dWVTFCVUNCd2NtOXFaV04wYVc5dUlITjVjM1JsYlN3Z1ltRnpaV1FnYjI0Z2RHaGxJSEI1ZEdodmJpQnBiWEJzWlcxbGJuUmhkR2x2YmlCbWNtOXRJRTFqU1c1dVpYTXNJRXdzWEc0Z0tpQklaV0ZzZVN3Z1Npd2dWVTFCVURvZ1ZXNXBabTl5YlNCTllXNXBabTlzWkNCQmNIQnliM2hwYldGMGFXOXVJR0Z1WkNCUWNtOXFaV04wYVc5dUlHWnZjaUJFYVcxbGJuTnBiMjVjYmlBcUlGSmxaSFZqZEdsdmJpQW9hSFIwY0hNNkx5OW5hWFJvZFdJdVkyOXRMMnh0WTJsdWJtVnpMM1Z0WVhBcExseHVJQ3BjYmlBcUlGUm9hWE1nYVcxd2JHVnRaVzUwWVhScGIyNGdaR2xtWm1WeWN5QnBiaUJoSUdabGR5QnlaV2RoY21Sek9seHVJQ29nWVNrZ1ZHaGxJR2x1YVhScFlXeHBlbUYwYVc5dUlHOW1JSFJvWlNCbGJXSmxaR1JwYm1jZ1ptOXlJRzl3ZEdsdGFYcGhkR2x2YmlCcGN5QnViM1FnWTI5dGNIVjBaV1FnZFhOcGJtZGNiaUFxSUNBZ0lHRWdjM0JsWTNSeVlXd2diV1YwYUc5a0xDQnlZWFJvWlhJZ2FYUWdhWE1nYVc1cGRHbGhiR2w2WldRZ2NtRnVaRzl0YkhrdUlGUm9hWE1nWVhadmFXUnpJSE52YldWY2JpQXFJQ0FnSUdOdmJYQjFkR0YwYVc5dVlXeHNlU0JwYm5SbGJuTnBkbVVnYldGMGNtbDRJR1ZwWjJWdUlHTnZiWEIxZEdGMGFXOXVjeUIwYUdGMElHRnlaVzRuZENCbFlYTnBiSGxjYmlBcUlDQWdJSEJ2Y25SbFpDQjBieUJLWVhaaFUyTnlhWEIwTGx4dUlDb2dZaWtnUVNCc2IzUWdiMllnWENKbGVIUnlZVndpSUdaMWJtTjBhVzl1WVd4cGRIa2dhR0Z6SUdKbFpXNGdiMjFwZEhSbFpDQm1jbTl0SUhSb2FYTWdhVzF3YkdWdFpXNTBZWFJwYjI0c1hHNGdLaUFnSUNCdGIzTjBJRzV2ZEdGaWJIa2dZU0JuY21WaGRDQmtaV0ZzSUc5bUlHRnNkR1Z5Ym1GMFpTQmthWE4wWVc1alpTQm1kVzVqZEdsdmJuTXVYRzRnS2x4dUlDb2dWR2hwY3lCcGJYQnNaVzFsYm5SaGRHbHZiaUJ3Y205MmFXUmxjeUIwYUhKbFpTQnRaWFJvYjJSeklHOW1JSEpsWkhWamFXNW5JR1JwYldWdWMybHZibUZzYVhSNU9seHVJQ29nTVNrZ1ptbDBPaUJtYVhRZ2RHaGxJR1JoZEdFZ2MzbHVZMmh5YjI1dmRYTnNlVnh1SUNvZ01pa2dabWwwUVhONWJtTTZJR1pwZENCMGFHVWdaR0YwWVNCaGMzbHVZMmh5YjI1dmRYTnNlU3dnZDJsMGFDQmhJR05oYkd4aVlXTnJJR1oxYm1OMGFXOXVJSEJ5YjNacFpHVmtYRzRnS2lBZ0lDQWdJSFJvWVhRZ2FYTWdhVzUyYjJ0bFpDQnZiaUJsWVdOb0lHOXdkR2x0YVhwaGRHbHZiaUJ6ZEdWd0xseHVJQ29nTXlrZ2FXNXBkR2xoYkdsNlpVWnBkQ0F2SUhOMFpYQTZJRzFoYm5WaGJHeDVJR2x1YVhScFlXeHBlbVVnZEdobElHRnNaMjl5YVhSb2JTQjBhR1Z1SUdWNGNHeHBZM1JzZVZ4dUlDb2dJQ0FnSUNCemRHVndJSFJvY205MVoyZ2daV0ZqYUNCbGNHOWphQ0J2WmlCMGFHVWdVMGRFSUc5d2RHbHRhWHBoZEdsdmJseHVJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdWVTFCVUNCN1hHNGdJSEIxWW14cFl5QnNaV0Z5Ym1sdVoxSmhkR1VnUFNBeExqQTdYRzRnSUhCMVlteHBZeUJzYjJOaGJFTnZibTVsWTNScGRtbDBlU0E5SURFdU1EdGNiaUFnY0hWaWJHbGpJRzFwYmtScGMzUWdQU0F3TGpFN1hHNGdJSEIxWW14cFl5QnVRMjl0Y0c5dVpXNTBjeUE5SURJN1hHNGdJSEJ5YVhaaGRHVWdia1Z3YjJOb2N5QTlJREE3WEc0Z0lIQnlhWFpoZEdVZ2JrNWxhV2RvWW05eWN5QTlJREUxTzF4dUlDQndkV0pzYVdNZ2JtVm5ZWFJwZG1WVFlXMXdiR1ZTWVhSbElEMGdOVHRjYmlBZ2NIVmliR2xqSUhKaGJtUnZiU0E5SUUxaGRHZ3VjbUZ1Wkc5dE8xeHVJQ0J3ZFdKc2FXTWdjbVZ3ZFd4emFXOXVVM1J5Wlc1bmRHZ2dQU0F4TGpBN1hHNGdJSEIxWW14cFl5QnpaWFJQY0UxcGVGSmhkR2x2SUQwZ01TNHdPMXh1SUNCd2RXSnNhV01nYzNCeVpXRmtJRDBnTVM0d08xeHVJQ0J3Y21sMllYUmxJSFJ5WVc1elptOXliVkYxWlhWbFUybDZaU0E5SURRdU1EdGNibHh1SUNBdkx5QlRkWEJsY25acGMyVmtJSEJ5YjJwbFkzUnBiMjRnY0dGeVlXMXpYRzRnSUhCeWFYWmhkR1VnZEdGeVoyVjBUV1YwY21saklEMGdWR0Z5WjJWMFRXVjBjbWxqTG1OaGRHVm5iM0pwWTJGc08xeHVJQ0J3Y21sMllYUmxJSFJoY21kbGRGZGxhV2RvZENBOUlEQXVOVHRjYmlBZ2NISnBkbUYwWlNCMFlYSm5aWFJPVG1WcFoyaGliM0p6SUQwZ01UVTdYRzVjYmlBZ2NISnBkbUYwWlNCa2FYTjBZVzVqWlVadU9pQkVhWE4wWVc1alpVWnVJRDBnYm5WdFpYSnBZenRjYmx4dUlDQXZMeUJMVGs0Z2MzUmhkR1VnS0dOaGJpQmlaU0J3Y21WamIyMXdkWFJsWkNCaGJtUWdjM1Z3Y0d4cFpXUWdkbWxoSUdsdWFYUnBZV3hwZW1WR2FYUXBYRzRnSUhCeWFYWmhkR1VnYTI1dVNXNWthV05sY3o4NklHNTFiV0psY2x0ZFcxMDdYRzRnSUhCeWFYWmhkR1VnYTI1dVJHbHpkR0Z1WTJWelB6b2diblZ0WW1WeVcxMWJYVHRjYmx4dUlDQXZMeUJKYm5SbGNtNWhiQ0JuY21Gd2FDQmpiMjV1WldOMGFYWnBkSGtnY21Wd2NtVnpaVzUwWVhScGIyNWNiaUFnY0hKcGRtRjBaU0JuY21Gd2FDRTZJRzFoZEhKcGVDNVRjR0Z5YzJWTllYUnlhWGc3WEc0Z0lIQnlhWFpoZEdVZ1dDRTZJRlpsWTNSdmNqdGNiaUFnY0hKcGRtRjBaU0JwYzBsdWFYUnBZV3hwZW1Wa0lEMGdabUZzYzJVN1hHNGdJSEJ5YVhaaGRHVWdjbkJHYjNKbGMzUTZJSFJ5WldVdVJteGhkRlJ5WldWYlhTQTlJRnRkTzF4dUlDQndjbWwyWVhSbElHbHVhWFJHY205dFVtRnVaRzl0SVRvZ2JtNUVaWE5qWlc1MExrbHVhWFJHY205dFVtRnVaRzl0Um00N1hHNGdJSEJ5YVhaaGRHVWdhVzVwZEVaeWIyMVVjbVZsSVRvZ2JtNUVaWE5qWlc1MExrbHVhWFJHY205dFZISmxaVVp1TzF4dUlDQndjbWwyWVhSbElITmxZWEpqYUNFNklHNXVSR1Z6WTJWdWRDNVRaV0Z5WTJoR2JqdGNiaUFnY0hKcGRtRjBaU0J6WldGeVkyaEhjbUZ3YUNFNklHMWhkSEpwZUM1VGNHRnljMlZOWVhSeWFYZzdYRzVjYmlBZ0x5OGdVM1Z3WlhKMmFYTmxaQ0J3Y205cVpXTjBhVzl1SUd4aFltVnNjeUF2SUhSaGNtZGxkSE5jYmlBZ2NISnBkbUYwWlNCWlB6b2diblZ0WW1WeVcxMDdYRzVjYmlBZ0x5OGdVSEp2YW1WamRHVmtJR1Z0WW1Wa1pHbHVaMXh1SUNCd2NtbDJZWFJsSUdWdFltVmtaR2x1WnpvZ2JuVnRZbVZ5VzExYlhTQTlJRnRkTzF4dUlDQndjbWwyWVhSbElHOXdkR2x0YVhwaGRHbHZibE4wWVhSbElEMGdibVYzSUU5d2RHbHRhWHBoZEdsdmJsTjBZWFJsS0NrN1hHNWNibHh1SUNCblpYUWdibVZwWjJoaWIzSnpLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG01T1pXbG5hR0p2Y25NN1hHNGdJSDFjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9jR0Z5WVcxek9pQlZUVUZRVUdGeVlXMWxkR1Z5Y3lBOUlIdDlLU0I3WEc0Z0lDQWdZMjl1YzNRZ2MyVjBVR0Z5WVcwZ1BTQW9hMlY1T2lCclpYbHZaaUJWVFVGUVVHRnlZVzFsZEdWeWN5a2dQVDRnZTF4dUlDQWdJQ0FnTHk5QWRITXRhV2R1YjNKbFhHNGdJQ0FnSUNCcFppQW9jR0Z5WVcxelcydGxlVjBnSVQwOUlIVnVaR1ZtYVc1bFpDa2dkR2hwYzF0clpYbGRJRDBnY0dGeVlXMXpXMnRsZVYwN1hHNGdJQ0FnZlR0Y2JseHVJQ0FnSUhObGRGQmhjbUZ0S0Nka2FYTjBZVzVqWlVadUp5azdYRzRnSUNBZ2MyVjBVR0Z5WVcwb0oyeGxZWEp1YVc1blVtRjBaU2NwTzF4dUlDQWdJSE5sZEZCaGNtRnRLQ2RzYjJOaGJFTnZibTVsWTNScGRtbDBlU2NwTzF4dUlDQWdJSE5sZEZCaGNtRnRLQ2R0YVc1RWFYTjBKeWs3WEc0Z0lDQWdjMlYwVUdGeVlXMG9KMjVEYjIxd2IyNWxiblJ6SnlrN1hHNGdJQ0FnYzJWMFVHRnlZVzBvSjI1RmNHOWphSE1uS1R0Y2JpQWdJQ0J6WlhSUVlYSmhiU2duYms1bGFXZG9ZbTl5Y3ljcE8xeHVJQ0FnSUhObGRGQmhjbUZ0S0NkdVpXZGhkR2wyWlZOaGJYQnNaVkpoZEdVbktUdGNiaUFnSUNCelpYUlFZWEpoYlNnbmNtRnVaRzl0SnlrN1hHNGdJQ0FnYzJWMFVHRnlZVzBvSjNKbGNIVnNjMmx2YmxOMGNtVnVaM1JvSnlrN1hHNGdJQ0FnYzJWMFVHRnlZVzBvSjNObGRFOXdUV2w0VW1GMGFXOG5LVHRjYmlBZ0lDQnpaWFJRWVhKaGJTZ25jM0J5WldGa0p5azdYRzRnSUNBZ2MyVjBVR0Z5WVcwb0ozUnlZVzV6Wm05eWJWRjFaWFZsVTJsNlpTY3BPMXh1SUNBZ0lIUm9hWE11ZEdGeVoyVjBUazVsYVdkb1ltOXljeUE5SUhCaGNtRnRjeTV1VG1WcFoyaGliM0p6SUh4OElIUm9hWE11Yms1bGFXZG9ZbTl5Y3lCOGZDQjBhR2x6TG5SaGNtZGxkRTVPWldsbmFHSnZjbk03WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1JtbDBJSFJvWlNCa1lYUmhJSFJ2SUdFZ2NISnZhbVZqZEdWa0lHVnRZbVZrWkdsdVp5QnpjR0ZqWlNCemVXNWphSEp2Ym05MWMyeDVMbHh1SUNBZ0tpOWNiaUFnWm1sMEtGZzZJRlpsWTNSdmNpa2dlMXh1SUNBZ0lIUm9hWE11YVc1cGRHbGhiR2w2WlVacGRDaFlLVHRjYmlBZ0lDQjBhR2x6TG05d2RHbHRhWHBsVEdGNWIzVjBLQ2s3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1bGJXSmxaR1JwYm1jN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSbWwwSUhSb1pTQmtZWFJoSUhSdklHRWdjSEp2YW1WamRHVmtJR1Z0WW1Wa1pHbHVaeUJ6Y0dGalpTQmhjM2x1WTJoeWIyNXZkWE5zZVN3Z2QybDBhQ0JoSUdOaGJHeGlZV05yWEc0Z0lDQXFJR1oxYm1OMGFXOXVJR2x1ZG05clpXUWdiMjRnWlhabGNua2daWEJ2WTJnZ2IyWWdiM0IwYVcxcGVtRjBhVzl1TGx4dUlDQWdLaTljYmlBZ1lYTjVibU1nWm1sMFFYTjVibU1vWEc0Z0lDQWdXRG9nVm1WamRHOXlMRnh1SUNBZ0lHTmhiR3hpWVdOck9pQW9aWEJ2WTJoT2RXMWlaWEk2SUc1MWJXSmxjaWtnUFQ0Z2RtOXBaQ0I4SUdKdmIyeGxZVzRnUFNBb0tTQTlQaUIwY25WbFhHNGdJQ2tnZTF4dUlDQWdJSFJvYVhNdWFXNXBkR2xoYkdsNlpVWnBkQ2hZS1R0Y2JseHVJQ0FnSUdGM1lXbDBJSFJvYVhNdWIzQjBhVzFwZW1WTVlYbHZkWFJCYzNsdVl5aGpZV3hzWW1GamF5azdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVaVzFpWldSa2FXNW5PMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVsdWFYUnBZV3hwZW1WeklIQmhjbUZ0WlhSbGNuTWdibVZsWkdWa0lHWnZjaUJ6ZFhCbGNuWnBjMlZrSUhCeWIycGxZM1JwYjI0dVhHNGdJQ0FxTDF4dUlDQnpaWFJUZFhCbGNuWnBjMlZrVUhKdmFtVmpkR2x2YmloWk9pQnVkVzFpWlhKYlhTd2djR0Z5WVcxek9pQlZUVUZRVTNWd1pYSjJhWE5sWkZCaGNtRnRjeUE5SUh0OUtTQjdYRzRnSUNBZ2RHaHBjeTVaSUQwZ1dUdGNiaUFnSUNCMGFHbHpMblJoY21kbGRFMWxkSEpwWXlBOUlIQmhjbUZ0Y3k1MFlYSm5aWFJOWlhSeWFXTWdmSHdnZEdocGN5NTBZWEpuWlhSTlpYUnlhV003WEc0Z0lDQWdkR2hwY3k1MFlYSm5aWFJYWldsbmFIUWdQU0J3WVhKaGJYTXVkR0Z5WjJWMFYyVnBaMmgwSUh4OElIUm9hWE11ZEdGeVoyVjBWMlZwWjJoME8xeHVJQ0FnSUhSb2FYTXVkR0Z5WjJWMFRrNWxhV2RvWW05eWN5QTlJSEJoY21GdGN5NTBZWEpuWlhST1RtVnBaMmhpYjNKeklIeDhJSFJvYVhNdWRHRnlaMlYwVGs1bGFXZG9ZbTl5Y3p0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkpibWwwYVdGc2FYcGxjeUIxYldGd0lIZHBkR2dnY0hKbFkyOXRjSFYwWldRZ1MwNU9JR2x1WkdsalpYTWdZVzVrSUdScGMzUmhibU5sY3k1Y2JpQWdJQ292WEc0Z0lITmxkRkJ5WldOdmJYQjFkR1ZrUzA1T0tHdHVia2x1WkdsalpYTTZJRzUxYldKbGNsdGRXMTBzSUd0dWJrUnBjM1JoYm1ObGN6b2diblZ0WW1WeVcxMWJYU2tnZTF4dUlDQWdJSFJvYVhNdWEyNXVTVzVrYVdObGN5QTlJR3R1YmtsdVpHbGpaWE03WEc0Z0lDQWdkR2hwY3k1cmJtNUVhWE4wWVc1alpYTWdQU0JyYm01RWFYTjBZVzVqWlhNN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dTVzVwZEdsaGJHbDZaWE1nWm1sMElHSjVJR052YlhCMWRHbHVaeUJMVGs0Z1lXNWtJR0VnWm5WNmVua2djMmx0Y0d4cFkybGhiQ0J6WlhRc0lHRnpJSGRsYkd3Z1lYTmNiaUFnSUNvZ2FXNXBkR2xoYkdsNmFXNW5JSFJvWlNCd2NtOXFaV04wWldRZ1pXMWlaV1JrYVc1bmN5NGdVMlYwY3lCMGFHVWdiM0IwYVcxcGVtRjBhVzl1SUhOMFlYUmxJR0ZvWldGa1hHNGdJQ0FxSUc5bUlHOXdkR2x0YVhwaGRHbHZiaUJ6ZEdWd2N5NGdVbVYwZFhKdWN5QjBhR1VnYm5WdFltVnlJRzltSUdWd2IyTm9jeUIwYnlCaVpTQjFjMlZrSUdadmNpQjBhR1ZjYmlBZ0lDb2dVMGRFSUc5d2RHbHRhWHBoZEdsdmJpNWNiaUFnSUNvdlhHNGdJR2x1YVhScFlXeHBlbVZHYVhRb1dEb2dWbVZqZEc5eUtUb2diblZ0WW1WeUlIdGNiaUFnSUNCcFppQW9XQzVzWlc1bmRHZ2dQRDBnZEdocGN5NXVUbVZwWjJoaWIzSnpLVnh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQk9iM1FnWlc1dmRXZG9JR1JoZEdFZ2NHOXBiblJ6SUNna2UxZ3ViR1Z1WjNSb2ZTa2dkRzhnWTNKbFlYUmxJRzVPWldsbmFHSnZjbk02SUNSN2RHaHBjeTV1VG1WcFoyaGliM0p6ZlM0Z0lFRmtaQ0J0YjNKbElHUmhkR0VnY0c5cGJuUnpJRzl5SUdGa2FuVnpkQ0IwYUdVZ1kyOXVabWxuZFhKaGRHbHZiaTVnS1R0Y2JseHVYRzRnSUNBZ0x5OGdWMlVnWkc5dUozUWdibVZsWkNCMGJ5QnlaV2x1YVhScFlXeHBlbVVnYVdZZ2QyVW5kbVVnWVd4eVpXRmtlU0JwYm1sMGFXRnNhWHBsWkNCbWIzSWdkR2hwY3lCa1lYUmhMbHh1SUNBZ0lHbG1JQ2gwYUdsekxsZ2dQVDA5SUZnZ0ppWWdkR2hwY3k1cGMwbHVhWFJwWVd4cGVtVmtLVnh1SUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11WjJWMFRrVndiMk5vY3lncE8xeHVYRzVjYmlBZ0lDQjBhR2x6TGxnZ1BTQllPMXh1WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbXR1YmtsdVpHbGpaWE1nSmlZZ0lYUm9hWE11YTI1dVJHbHpkR0Z1WTJWektTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCcmJtNVNaWE4xYkhSeklEMGdkR2hwY3k1dVpXRnlaWE4wVG1WcFoyaGliM0p6S0ZncE8xeHVJQ0FnSUNBZ2RHaHBjeTVyYm01SmJtUnBZMlZ6SUQwZ2EyNXVVbVZ6ZFd4MGN5NXJibTVKYm1ScFkyVnpPMXh1SUNBZ0lDQWdkR2hwY3k1cmJtNUVhWE4wWVc1alpYTWdQU0JyYm01U1pYTjFiSFJ6TG10dWJrUnBjM1JoYm1ObGN6dGNiaUFnSUNCOVhHNWNiaUFnSUNCMGFHbHpMbWR5WVhCb0lEMGdkR2hwY3k1bWRYcDZlVk5wYlhCc2FXTnBZV3hUWlhRb1hHNGdJQ0FnSUNCWUxGeHVJQ0FnSUNBZ2RHaHBjeTV1VG1WcFoyaGliM0p6TEZ4dUlDQWdJQ0FnZEdocGN5NXpaWFJQY0UxcGVGSmhkR2x2WEc0Z0lDQWdLVHRjYmx4dUlDQWdJQzh2SUZObGRDQjFjQ0IwYUdVZ2MyVmhjbU5vSUdkeVlYQm9JR1p2Y2lCemRXSnpaWEYxWlc1MElIUnlZVzV6Wm05eWJXRjBhVzl1TGx4dUlDQWdJSFJvYVhNdWJXRnJaVk5sWVhKamFFWnVjeWdwTzF4dUlDQWdJSFJvYVhNdWMyVmhjbU5vUjNKaGNHZ2dQU0IwYUdsekxtMWhhMlZUWldGeVkyaEhjbUZ3YUNoWUtUdGNibHh1SUNBZ0lDOHZJRU5vWldOcklHbG1JSE4xY0dWeWRtbHpaV1FnY0hKdmFtVmpkR2x2Yml3Z2RHaGxiaUJoWkdwMWMzUWdkR2hsSUdkeVlYQm9MbHh1SUNBZ0lIUm9hWE11Y0hKdlkyVnpjMGR5WVhCb1JtOXlVM1Z3WlhKMmFYTmxaRkJ5YjJwbFkzUnBiMjRvS1R0Y2JseHVJQ0FnSUdOdmJuTjBJSHRjYmlBZ0lDQWdJR2hsWVdRc1hHNGdJQ0FnSUNCMFlXbHNMRnh1SUNBZ0lDQWdaWEJ2WTJoelVHVnlVMkZ0Y0d4bExGeHVJQ0FnSUgwZ1BTQjBhR2x6TG1sdWFYUnBZV3hwZW1WVGFXMXdiR2xqYVdGc1UyVjBSVzFpWldSa2FXNW5LQ2s3WEc1Y2JpQWdJQ0F2THlCVFpYUWdkR2hsSUc5d2RHbHRhWHBoZEdsdmJpQnliM1YwYVc1bElITjBZWFJsWEc0Z0lDQWdkR2hwY3k1dmNIUnBiV2w2WVhScGIyNVRkR0YwWlM1b1pXRmtJRDBnYUdWaFpEdGNiaUFnSUNCMGFHbHpMbTl3ZEdsdGFYcGhkR2x2YmxOMFlYUmxMblJoYVd3Z1BTQjBZV2xzTzF4dUlDQWdJSFJvYVhNdWIzQjBhVzFwZW1GMGFXOXVVM1JoZEdVdVpYQnZZMmh6VUdWeVUyRnRjR3hsSUQwZ1pYQnZZMmh6VUdWeVUyRnRjR3hsTzF4dVhHNGdJQ0FnTHk4Z1RtOTNMQ0JwYm1sMGFXRnNhWHBsSUhSb1pTQnZjSFJwYldsNllYUnBiMjRnYzNSbGNITmNiaUFnSUNCMGFHbHpMbWx1YVhScFlXeHBlbVZQY0hScGJXbDZZWFJwYjI0b0tUdGNiaUFnSUNCMGFHbHpMbkJ5WlhCaGNtVkdiM0pQY0hScGJXbDZZWFJwYjI1TWIyOXdLQ2s3WEc0Z0lDQWdkR2hwY3k1cGMwbHVhWFJwWVd4cGVtVmtJRDBnZEhKMVpUdGNibHh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWRsZEU1RmNHOWphSE1vS1R0Y2JpQWdmVnh1WEc0Z0lIQnlhWFpoZEdVZ2JXRnJaVk5sWVhKamFFWnVjeWdwSUh0Y2JpQWdJQ0JqYjI1emRDQjdhVzVwZEVaeWIyMVVjbVZsTENCcGJtbDBSbkp2YlZKaGJtUnZiWDBnUFNCdWJrUmxjMk5sYm5RdWJXRnJaVWx1YVhScFlXeHBlbUYwYVc5dWN5aGNiaUFnSUNBZ0lIUm9hWE11WkdsemRHRnVZMlZHYmx4dUlDQWdJQ2s3WEc0Z0lDQWdkR2hwY3k1cGJtbDBSbkp2YlZSeVpXVWdQU0JwYm1sMFJuSnZiVlJ5WldVN1hHNGdJQ0FnZEdocGN5NXBibWwwUm5KdmJWSmhibVJ2YlNBOUlHbHVhWFJHY205dFVtRnVaRzl0TzF4dUlDQWdJSFJvYVhNdWMyVmhjbU5vSUQwZ2JtNUVaWE5qWlc1MExtMWhhMlZKYm1sMGFXRnNhWHBsWkU1T1UyVmhjbU5vS0hSb2FYTXVaR2x6ZEdGdVkyVkdiaWs3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUcxaGEyVlRaV0Z5WTJoSGNtRndhQ2hZT2lCV1pXTjBiM0lwSUh0Y2JpQWdJQ0JqYjI1emRDQnJibTVKYm1ScFkyVnpJRDBnZEdocGN5NXJibTVKYm1ScFkyVnpJVHRjYmlBZ0lDQmpiMjV6ZENCcmJtNUVhWE4wWVc1alpYTWdQU0IwYUdsekxtdHVia1JwYzNSaGJtTmxjeUU3WEc0Z0lDQWdZMjl1YzNRZ1pHbHRjeUE5SUZ0WUxteGxibWQwYUN3Z1dDNXNaVzVuZEdoZE8xeHVJQ0FnSUdOdmJuTjBJSE5sWVhKamFFZHlZWEJvSUQwZ2JtVjNJRzFoZEhKcGVDNVRjR0Z5YzJWTllYUnlhWGdvVzEwc0lGdGRMQ0JiWFN3Z1pHbHRjeWs3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JyYm01SmJtUnBZMlZ6TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCcmJtNGdQU0JyYm01SmJtUnBZMlZ6VzJsZE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWkdsemRHRnVZMlZ6SUQwZ2EyNXVSR2x6ZEdGdVkyVnpXMmxkTzF4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYWlBOUlEQTdJR29nUENCcmJtNHViR1Z1WjNSb095QnFLeXNwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYm1WcFoyaGliM0lnUFNCcmJtNWJhbDA3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1JwYzNSaGJtTmxJRDBnWkdsemRHRnVZMlZ6VzJwZE8xeHVJQ0FnSUNBZ0lDQnBaaUFvWkdsemRHRnVZMlVnUGlBd0tWeHVJQ0FnSUNBZ0lDQWdJSE5sWVhKamFFZHlZWEJvTG5ObGRDaHBMQ0J1WldsbmFHSnZjaXdnWkdsemRHRnVZMlVwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR052Ym5OMElIUnlZVzV6Y0c5elpTQTlJRzFoZEhKcGVDNTBjbUZ1YzNCdmMyVW9jMlZoY21Ob1IzSmhjR2dwTzF4dUlDQWdJSEpsZEhWeWJpQnRZWFJ5YVhndWJXRjRhVzExYlNoelpXRnlZMmhIY21Gd2FDd2dkSEpoYm5Od2IzTmxLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCVWNtRnVjMlp2Y20xeklHUmhkR0VnZEc4Z2RHaGxJR1Y0YVhOMGFXNW5JR1Z0WW1Wa1pHbHVaeUJ6Y0dGalpTNWNiaUFnSUNvdlhHNGdJSFJ5WVc1elptOXliU2gwYjFSeVlXNXpabTl5YlRvZ1ZtVmpkRzl5S1NCN1hHNGdJQ0FnTHk4Z1ZYTmxJSFJvWlNCd2NtVjJhVzkxY3lCeVlYZEVZWFJoWEc0Z0lDQWdZMjl1YzNRZ2NtRjNSR0YwWVNBOUlIUm9hWE11V0R0Y2JpQWdJQ0JwWmlBb2NtRjNSR0YwWVNBOVBUMGdkVzVrWldacGJtVmtJSHg4SUhKaGQwUmhkR0V1YkdWdVozUm9JRDA5UFNBd0tWeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkT2J5QmtZWFJoSUdoaGN5QmlaV1Z1SUdacGRDNG5LVHRjYmx4dVhHNGdJQ0FnYkdWMElHNU9aV2xuYUdKdmNuTWdQU0JOWVhSb0xtWnNiMjl5S0hSb2FYTXViazVsYVdkb1ltOXljeUFxSUhSb2FYTXVkSEpoYm5ObWIzSnRVWFZsZFdWVGFYcGxLVHRjYmlBZ0lDQnVUbVZwWjJoaWIzSnpJRDBnVFdGMGFDNXRhVzRvY21GM1JHRjBZUzVzWlc1bmRHZ3NJRzVPWldsbmFHSnZjbk1wTzF4dUlDQWdJR052Ym5OMElHbHVhWFFnUFNCdWJrUmxjMk5sYm5RdWFXNXBkR2xoYkdsNlpWTmxZWEpqYUNoY2JpQWdJQ0FnSUhSb2FYTXVjbkJHYjNKbGMzUXNYRzRnSUNBZ0lDQnlZWGRFWVhSaExGeHVJQ0FnSUNBZ2RHOVVjbUZ1YzJadmNtMHNYRzRnSUNBZ0lDQnVUbVZwWjJoaWIzSnpMRnh1SUNBZ0lDQWdkR2hwY3k1cGJtbDBSbkp2YlZKaGJtUnZiU3hjYmlBZ0lDQWdJSFJvYVhNdWFXNXBkRVp5YjIxVWNtVmxMRnh1SUNBZ0lDQWdkR2hwY3k1eVlXNWtiMjFjYmlBZ0lDQXBPMXh1WEc0Z0lDQWdZMjl1YzNRZ2NtVnpkV3gwSUQwZ2RHaHBjeTV6WldGeVkyZ29jbUYzUkdGMFlTd2dkR2hwY3k1elpXRnlZMmhIY21Gd2FDd2dhVzVwZEN3Z2RHOVVjbUZ1YzJadmNtMHBPMXh1WEc0Z0lDQWdiR1YwSUh0cGJtUnBZMlZ6TENCM1pXbG5hSFJ6T2lCa2FYTjBZVzVqWlhOOUlEMGdhR1ZoY0M1a1pXaGxZWEJUYjNKMEtISmxjM1ZzZENrN1hHNWNiaUFnSUNCcGJtUnBZMlZ6SUQwZ2FXNWthV05sY3k1dFlYQW9LSGdwSUQwK0lIZ3VjMnhwWTJVb01Dd2dkR2hwY3k1dVRtVnBaMmhpYjNKektTazdYRzRnSUNBZ1pHbHpkR0Z1WTJWeklEMGdaR2x6ZEdGdVkyVnpMbTFoY0Nnb2VDa2dQVDRnZUM1emJHbGpaU2d3TENCMGFHbHpMbTVPWldsbmFHSnZjbk1wS1R0Y2JseHVJQ0FnSUdOdmJuTjBJR0ZrYW5WemRHVmtURzlqWVd4RGIyNXVaV04wYVhacGRIa2dQU0JOWVhSb0xtMWhlQ2d3TENCMGFHbHpMbXh2WTJGc1EyOXVibVZqZEdsMmFYUjVJQzBnTVNrN1hHNGdJQ0FnWTI5dWMzUWdlM05wWjIxaGN5d2djbWh2YzMwZ1BTQjBhR2x6TG5OdGIyOTBhRXRPVGtScGMzUmhibU5sS0Z4dUlDQWdJQ0FnWkdsemRHRnVZMlZ6TEZ4dUlDQWdJQ0FnZEdocGN5NXVUbVZwWjJoaWIzSnpMRnh1SUNBZ0lDQWdZV1JxZFhOMFpXUk1iMk5oYkVOdmJtNWxZM1JwZG1sMGVWeHVJQ0FnSUNrN1hHNWNiaUFnSUNCamIyNXpkQ0I3Y205M2N5d2dZMjlzY3l3Z2RtRnNjMzBnUFNCMGFHbHpMbU52YlhCMWRHVk5aVzFpWlhKemFHbHdVM1J5Wlc1bmRHaHpLRnh1SUNBZ0lDQWdhVzVrYVdObGN5eGNiaUFnSUNBZ0lHUnBjM1JoYm1ObGN5eGNiaUFnSUNBZ0lITnBaMjFoY3l4Y2JpQWdJQ0FnSUhKb2IzTmNiaUFnSUNBcE8xeHVYRzRnSUNBZ1kyOXVjM1FnYzJsNlpTQTlJRnQwYjFSeVlXNXpabTl5YlM1c1pXNW5kR2dzSUhKaGQwUmhkR0V1YkdWdVozUm9YVHRjYmlBZ0lDQnNaWFFnWjNKaGNHZ2dQU0J1WlhjZ2JXRjBjbWw0TGxOd1lYSnpaVTFoZEhKcGVDaHliM2R6TENCamIyeHpMQ0IyWVd4ekxDQnphWHBsS1R0Y2JseHVJQ0FnSUM4dklGUm9hWE1nZDJGeklHRWdkbVZ5ZVNCemNHVmphV0ZzYkhrZ1kyOXVjM1J5ZFdOMFpXUWdaM0poY0dnZ2QybDBhQ0JqYjI1emRHRnVkQ0JrWldkeVpXVXVYRzRnSUNBZ0x5OGdWR2hoZENCc1pYUnpJSFZ6SUdSdklHWmhibU41SUhWdWNHRmphMmx1WnlCaWVTQnlaWE5vWVhCcGJtY2dkR2hsSUdOemNpQnRZWFJ5YVhnZ2FXNWthV05sYzF4dUlDQWdJQzh2SUdGdVpDQmtZWFJoTGlCRWIybHVaeUJ6YnlCeVpXeHBaWE1nYjI0Z2RHaGxJR052Ym5OMFlXNTBJR1JsWjNKbFpTQmhjM04xYlhCMGFXOXVJVnh1WEc0Z0lDQWdZMjl1YzNRZ2JtOXliV1ZrSUQwZ2JXRjBjbWw0TG01dmNtMWhiR2w2WlNobmNtRndhQ3dnYldGMGNtbDRMazV2Y20xVWVYQmxMbXd4S1R0Y2JseHVJQ0FnSUdOdmJuTjBJR056Y2sxaGRISnBlQ0E5SUcxaGRISnBlQzVuWlhSRFUxSW9ibTl5YldWa0tUdGNiaUFnSUNCamIyNXpkQ0J1VUc5cGJuUnpJRDBnZEc5VWNtRnVjMlp2Y20wdWJHVnVaM1JvTzF4dVhHNGdJQ0FnWTI5dWMzUWdaVWx1WkdsalpYTWdQU0IxZEdsc2N5NXlaWE5vWVhCbE1tUW9YRzRnSUNBZ0lDQmpjM0pOWVhSeWFYZ3VhVzVrYVdObGN5eGNiaUFnSUNBZ0lHNVFiMmx1ZEhNc1hHNGdJQ0FnSUNCMGFHbHpMbTVPWldsbmFHSnZjbk5jYmlBZ0lDQXBPMXh1WEc0Z0lDQWdZMjl1YzNRZ1pWZGxhV2RvZEhNZ1BTQjFkR2xzY3k1eVpYTm9ZWEJsTW1Rb1hHNGdJQ0FnSUNCamMzSk5ZWFJ5YVhndWRtRnNkV1Z6TEZ4dUlDQWdJQ0FnYmxCdmFXNTBjeXhjYmlBZ0lDQWdJSFJvYVhNdWJrNWxhV2RvWW05eWMxeHVJQ0FnSUNrN1hHNWNiaUFnSUNCamIyNXpkQ0JsYldKbFpHUnBibWNnUFNCcGJtbDBWSEpoYm5ObWIzSnRLR1ZKYm1ScFkyVnpMQ0JsVjJWcFoyaDBjeXdnZEdocGN5NWxiV0psWkdScGJtY3BPMXh1WEc0Z0lDQWdZMjl1YzNRZ2JrVndiMk5vY3lBOUlIUm9hWE11YmtWd2IyTm9jeUEvWEc0Z0lDQWdJQ0IwYUdsekxtNUZjRzlqYUhNZ0x5QXpJRHBjYmlBZ0lDQWdJR2R5WVhCb0xtNVNiM2R6SUR3OUlERXdNREF3SUQ5Y2JpQWdJQ0FnSUNBZ01UQXdJRHBjYmlBZ0lDQWdJQ0FnTXpBN1hHNWNiaUFnSUNCamIyNXpkQ0JuY21Gd2FFMWhlQ0E5SUdkeVlYQm9YRzRnSUNBZ0lDQXVaMlYwVm1Gc2RXVnpLQ2xjYmlBZ0lDQWdJQzV5WldSMVkyVW9LRzFoZUN3Z2RtRnNLU0E5UGlBb2RtRnNJRDRnYldGNElEOGdkbUZzSURvZ2JXRjRLU3dnTUNrN1hHNGdJQ0FnWjNKaGNHZ2dQU0JuY21Gd2FDNXRZWEFvS0haaGJIVmxLU0E5UGlBb2RtRnNkV1VnUENCbmNtRndhRTFoZUNBdklHNUZjRzlqYUhNZ1B5QXdJRG9nZG1Gc2RXVXBLVHRjYmlBZ0lDQm5jbUZ3YUNBOUlHMWhkSEpwZUM1bGJHbHRhVzVoZEdWYVpYSnZjeWhuY21Gd2FDazdYRzVjYmlBZ0lDQmpiMjV6ZENCbGNHOWphSE5RWlhKVFlXMXdiR1VnUFNCMGFHbHpMbTFoYTJWRmNHOWphSE5RWlhKVFlXMXdiR1VvWEc0Z0lDQWdJQ0JuY21Gd2FDNW5aWFJXWVd4MVpYTW9LU3hjYmlBZ0lDQWdJRzVGY0c5amFITmNiaUFnSUNBcE8xeHVJQ0FnSUdOdmJuTjBJR2hsWVdRZ1BTQm5jbUZ3YUM1blpYUlNiM2R6S0NrN1hHNGdJQ0FnWTI5dWMzUWdkR0ZwYkNBOUlHZHlZWEJvTG1kbGRFTnZiSE1vS1R0Y2JseHVJQ0FnSUM4dklFbHVhWFJwWVd4cGVtVWdiM0IwYVcxcGVtRjBhVzl1SUhOc2FXZG9kR3g1SUdScFptWmxjbVZ1ZEd4NUlIUm9ZVzRnZEdobElHWnBkQ0J0WlhSb2IyUXVYRzRnSUNBZ2RHaHBjeTVoYzNOcFoyNVBjSFJwYldsNllYUnBiMjVUZEdGMFpWQmhjbUZ0WlhSbGNuTW9lMXh1SUNBZ0lDQWdhR1ZoWkVWdFltVmtaR2x1WnpvZ1pXMWlaV1JrYVc1bkxGeHVJQ0FnSUNBZ2RHRnBiRVZ0WW1Wa1pHbHVaem9nZEdocGN5NWxiV0psWkdScGJtY3NYRzRnSUNBZ0lDQm9aV0ZrTEZ4dUlDQWdJQ0FnZEdGcGJDeGNiaUFnSUNBZ0lHTjFjbkpsYm5SRmNHOWphRG9nTUN4Y2JpQWdJQ0FnSUc1RmNHOWphSE1zWEc0Z0lDQWdJQ0J1Vm1WeWRHbGpaWE02SUdkeVlYQm9MbWRsZEVScGJYTW9LVnN4WFN4Y2JpQWdJQ0FnSUdWd2IyTm9jMUJsY2xOaGJYQnNaU3hjYmlBZ0lDQjlLVHRjYmlBZ0lDQjBhR2x6TG5CeVpYQmhjbVZHYjNKUGNIUnBiV2w2WVhScGIyNU1iMjl3S0NrN1hHNWNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXZjSFJwYldsNlpVeGhlVzkxZENncE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRU5vWldOcmN5QnBaaUIzWlNkeVpTQjFjMmx1WnlCemRYQmxjblpwYzJWa0lIQnliMnBsWTNScGIyNHNJSFJvWlc0Z2NISnZZMlZ6Y3lCMGFHVWdaM0poY0doY2JpQWdJQ29nWVdOamIzSmthVzVuYkhrdVhHNGdJQ0FxTDF4dUlDQndjbWwyWVhSbElIQnliMk5sYzNOSGNtRndhRVp2Y2xOMWNHVnlkbWx6WldSUWNtOXFaV04wYVc5dUtDa2dlMXh1SUNBZ0lHTnZibk4wSUh0WkxDQllmU0E5SUhSb2FYTTdYRzRnSUNBZ2FXWWdLRmtwSUh0Y2JpQWdJQ0FnSUdsbUlDaFpMbXhsYm1kMGFDQWhQVDBnV0M1c1pXNW5kR2dwWEc0Z0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduVEdWdVozUm9JRzltSUZnZ1lXNWtJSGtnYlhWemRDQmlaU0JsY1hWaGJDY3BPMXh1WEc1Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6TG5SaGNtZGxkRTFsZEhKcFl5QTlQVDBnVkdGeVoyVjBUV1YwY21sakxtTmhkR1ZuYjNKcFkyRnNLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR3gwSUQwZ2RHaHBjeTUwWVhKblpYUlhaV2xuYUhRZ1BDQXhMakE3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1poY2tScGMzUWdQU0JzZENBL0lESXVOU0FxSUNneExqQWdMeUFvTVM0d0lDMGdkR2hwY3k1MFlYSm5aWFJYWldsbmFIUXBLU0E2SURFdU1HVXhNanRjYmlBZ0lDQWdJQ0FnZEdocGN5NW5jbUZ3YUNBOUlIUm9hWE11WTJGMFpXZHZjbWxqWVd4VGFXMXdiR2xqYVdGc1UyVjBTVzUwWlhKelpXTjBhVzl1S0Z4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11WjNKaGNHZ3NYRzRnSUNBZ0lDQWdJQ0FnV1N4Y2JpQWdJQ0FnSUNBZ0lDQm1ZWEpFYVhOMFhHNGdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQXZMeUJVVDBSUElDaGhibVI1WTI5bGJtVnVRQ2s2SUdGa1pDQnViMjR0WTJGMFpXZHZjbWxqWVd3Z2MzVndaWEoyYVhObFpDQmxiV0psWkdScGJtZHpMbHh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJOWVc1MVlXeHNlU0J6ZEdWd0lIUm9jbTkxWjJnZ2RHaGxJRzl3ZEdsdGFYcGhkR2x2YmlCd2NtOWpaWE56SUc5dVpTQmxjRzlqYUNCaGRDQmhJSFJwYldVdVhHNGdJQ0FxTDF4dUlDQnpkR1Z3S0NrZ2UxeHVJQ0FnSUdOdmJuTjBJSHRqZFhKeVpXNTBSWEJ2WTJoOUlEMGdkR2hwY3k1dmNIUnBiV2w2WVhScGIyNVRkR0YwWlR0Y2JseHVJQ0FnSUdsbUlDaGpkWEp5Wlc1MFJYQnZZMmdnUENCMGFHbHpMbWRsZEU1RmNHOWphSE1vS1NsY2JpQWdJQ0FnSUhSb2FYTXViM0IwYVcxcGVtVk1ZWGx2ZFhSVGRHVndLR04xY25KbGJuUkZjRzlqYUNrN1hHNWNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXZjSFJwYldsNllYUnBiMjVUZEdGMFpTNWpkWEp5Wlc1MFJYQnZZMmc3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1VtVjBkWEp1Y3lCMGFHVWdZMjl0Y0hWMFpXUWdjSEp2YW1WamRHVmtJR1Z0WW1Wa1pHbHVaeTVjYmlBZ0lDb3ZYRzRnSUdkbGRFVnRZbVZrWkdsdVp5Z3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVsYldKbFpHUnBibWM3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1EyOXRjSFYwWlNCMGFHVWdZR0J1VG1WcFoyaGliM0p6WUdBZ2JtVmhjbVZ6ZENCd2IybHVkSE1nWm05eUlHVmhZMmdnWkdGMFlTQndiMmx1ZENCcGJpQmdZRmhnWUZ4dUlDQWdLaUJVYUdseklHMWhlU0JpWlNCbGVHRmpkQ3dnWW5WMElHMXZjbVVnYkdsclpXeDVJR2x6SUdGd2NISnZlR2x0WVhSbFpDQjJhV0VnYm1WaGNtVnpkQ0J1WldsbmFHSnZjbHh1SUNBZ0tpQmtaWE5qWlc1MExseHVJQ0FnS2k5Y2JpQWdjSEpwZG1GMFpTQnVaV0Z5WlhOMFRtVnBaMmhpYjNKektGZzZJRlpsWTNSdmNpa2dlMXh1SUNBZ0lHTnZibk4wSUh0a2FYTjBZVzVqWlVadUxDQnVUbVZwWjJoaWIzSnpmU0E5SUhSb2FYTTdYRzRnSUNBZ1kyOXVjM1FnYkc5bk1pQTlJQ2h1T2lCdWRXMWlaWElwSUQwK0lFMWhkR2d1Ykc5bktHNHBJQzhnVFdGMGFDNXNiMmNvTWlrN1hHNGdJQ0FnWTI5dWMzUWdiV1YwY21salRrNUVaWE5qWlc1MElEMGdibTVFWlhOalpXNTBMbTFoYTJWT1RrUmxjMk5sYm5Rb1pHbHpkR0Z1WTJWR2Jpd2dkR2hwY3k1eVlXNWtiMjBwTzF4dVhHNGdJQ0FnTHk4Z1NHRnVaR3hsSUhCNWRHaHZiak1nY205MWJtUnBibWNnWkc5M2JpQm1jbTl0SURBdU5TQmthWE5qY25CaGJtTjVYRzRnSUNBZ1kyOXVjM1FnY205MWJtUWdQU0FvYmpvZ2JuVnRZbVZ5S1NBOVBpQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2JpQTlQVDBnTUM0MUlEOGdNQ0E2SUUxaGRHZ3VjbTkxYm1Rb2JpazdYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lHTnZibk4wSUc1VWNtVmxjeUE5SURVZ0t5Qk5ZWFJvTG1ac2IyOXlLSEp2ZFc1a0tGZ3ViR1Z1WjNSb0lDb3FJREF1TlNBdklESXdMakFwS1R0Y2JpQWdJQ0JqYjI1emRDQnVTWFJsY25NZ1BTQk5ZWFJvTG0xaGVDZzFMQ0JOWVhSb0xtWnNiMjl5S0UxaGRHZ3VjbTkxYm1Rb2JHOW5NaWhZTG14bGJtZDBhQ2twS1NrN1hHNWNiaUFnSUNCMGFHbHpMbkp3Um05eVpYTjBJRDBnZEhKbFpTNXRZV3RsUm05eVpYTjBLRmdzSUc1T1pXbG5hR0p2Y25Nc0lHNVVjbVZsY3l3Z2RHaHBjeTV5WVc1a2IyMHBPMXh1WEc0Z0lDQWdZMjl1YzNRZ2JHVmhaa0Z5Y21GNUlEMGdkSEpsWlM1dFlXdGxUR1ZoWmtGeWNtRjVLSFJvYVhNdWNuQkdiM0psYzNRcE8xeHVJQ0FnSUdOdmJuTjBJSHRwYm1ScFkyVnpMQ0IzWldsbmFIUnpmU0E5SUcxbGRISnBZMDVPUkdWelkyVnVkQ2hjYmlBZ0lDQWdJRmdzWEc0Z0lDQWdJQ0JzWldGbVFYSnlZWGtzWEc0Z0lDQWdJQ0J1VG1WcFoyaGliM0p6TEZ4dUlDQWdJQ0FnYmtsMFpYSnpYRzRnSUNBZ0tUdGNiaUFnSUNCeVpYUjFjbTRnZTJ0dWJrbHVaR2xqWlhNNklHbHVaR2xqWlhNc0lHdHVia1JwYzNSaGJtTmxjem9nZDJWcFoyaDBjMzA3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1IybDJaVzRnWVNCelpYUWdiMllnWkdGMFlTQllMQ0JoSUc1bGFXZG9ZbTl5YUc5dlpDQnphWHBsTENCaGJtUWdZU0J0WldGemRYSmxJRzltSUdScGMzUmhibU5sWEc0Z0lDQXFJR052YlhCMWRHVWdkR2hsSUdaMWVucDVJSE5wYlhCc2FXTnBZV3dnYzJWMElDaG9aWEpsSUhKbGNISmxjMlZ1ZEdWa0lHRnpJR0VnWm5WNmVua2daM0poY0dnZ2FXNWNiaUFnSUNvZ2RHaGxJR1p2Y20wZ2IyWWdZU0J6Y0dGeWMyVWdiV0YwY21sNEtTQmhjM052WTJsaGRHVmtJSFJ2SUhSb1pTQmtZWFJoTGlCVWFHbHpJR2x6SUdSdmJtVWdZbmxjYmlBZ0lDb2diRzlqWVd4c2VTQmhjSEJ5YjNocGJXRjBhVzVuSUdkbGIyUmxjMmxqSUdScGMzUmhibU5sSUdGMElHVmhZMmdnY0c5cGJuUXNJR055WldGMGFXNW5JR0VnWm5WNmVubGNiaUFnSUNvZ2MybHRjR3hwWTJsaGJDQnpaWFFnWm05eUlHVmhZMmdnYzNWamFDQndiMmx1ZEN3Z1lXNWtJSFJvWlc0Z1kyOXRZbWx1YVc1bklHRnNiQ0IwYUdVZ2JHOWpZV3hjYmlBZ0lDb2dablY2ZW5rZ2MybHRjR3hwWTJsaGJDQnpaWFJ6SUdsdWRHOGdZU0JuYkc5aVlXd2diMjVsSUhacFlTQmhJR1oxZW5wNUlIVnVhVzl1TGx4dUlDQWdLaTljYmlBZ2NISnBkbUYwWlNCbWRYcDZlVk5wYlhCc2FXTnBZV3hUWlhRb1hHNGdJQ0FnV0RvZ1ZtVmpkRzl5TEZ4dUlDQWdJRzVPWldsbmFHSnZjbk02SUc1MWJXSmxjaXhjYmlBZ0lDQnpaWFJQY0UxcGVGSmhkR2x2SUQwZ01TNHdYRzRnSUNrZ2UxeHVJQ0FnSUdOdmJuTjBJSHRyYm01SmJtUnBZMlZ6SUQwZ1cxMHNJR3R1YmtScGMzUmhibU5sY3lBOUlGdGRMQ0JzYjJOaGJFTnZibTVsWTNScGRtbDBlWDBnUFNCMGFHbHpPMXh1WEc0Z0lDQWdZMjl1YzNRZ2UzTnBaMjFoY3l3Z2NtaHZjMzBnUFNCMGFHbHpMbk50YjI5MGFFdE9Ua1JwYzNSaGJtTmxLRnh1SUNBZ0lDQWdhMjV1UkdsemRHRnVZMlZ6TEZ4dUlDQWdJQ0FnYms1bGFXZG9ZbTl5Y3l4Y2JpQWdJQ0FnSUd4dlkyRnNRMjl1Ym1WamRHbDJhWFI1WEc0Z0lDQWdLVHRjYmx4dUlDQWdJR052Ym5OMElIdHliM2R6TENCamIyeHpMQ0IyWVd4emZTQTlJSFJvYVhNdVkyOXRjSFYwWlUxbGJXSmxjbk5vYVhCVGRISmxibWQwYUhNb1hHNGdJQ0FnSUNCcmJtNUpibVJwWTJWekxGeHVJQ0FnSUNBZ2EyNXVSR2x6ZEdGdVkyVnpMRnh1SUNBZ0lDQWdjMmxuYldGekxGeHVJQ0FnSUNBZ2NtaHZjMXh1SUNBZ0lDazdYRzVjYmlBZ0lDQmpiMjV6ZENCemFYcGxJRDBnVzFndWJHVnVaM1JvTENCWUxteGxibWQwYUYwN1hHNGdJQ0FnWTI5dWMzUWdjM0JoY25ObFRXRjBjbWw0SUQwZ2JtVjNJRzFoZEhKcGVDNVRjR0Z5YzJWTllYUnlhWGdvY205M2N5d2dZMjlzY3l3Z2RtRnNjeXdnYzJsNlpTazdYRzVjYmlBZ0lDQmpiMjV6ZENCMGNtRnVjM0J2YzJVZ1BTQnRZWFJ5YVhndWRISmhibk53YjNObEtITndZWEp6WlUxaGRISnBlQ2s3WEc0Z0lDQWdZMjl1YzNRZ2NISnZaRTFoZEhKcGVDQTlJRzFoZEhKcGVDNXdZV2x5ZDJselpVMTFiSFJwY0d4NUtITndZWEp6WlUxaGRISnBlQ3dnZEhKaGJuTndiM05sS1R0Y2JseHVJQ0FnSUdOdmJuTjBJR0VnUFNCdFlYUnlhWGd1YzNWaWRISmhZM1FvYldGMGNtbDRMbUZrWkNoemNHRnljMlZOWVhSeWFYZ3NJSFJ5WVc1emNHOXpaU2tzSUhCeWIyUk5ZWFJ5YVhncE8xeHVJQ0FnSUdOdmJuTjBJR0lnUFNCdFlYUnlhWGd1YlhWc2RHbHdiSGxUWTJGc1lYSW9ZU3dnYzJWMFQzQk5hWGhTWVhScGJ5azdYRzRnSUNBZ1kyOXVjM1FnWXlBOUlHMWhkSEpwZUM1dGRXeDBhWEJzZVZOallXeGhjaWh3Y205a1RXRjBjbWw0TENBeExqQWdMU0J6WlhSUGNFMXBlRkpoZEdsdktUdGNiaUFnSUNCamIyNXpkQ0J5WlhOMWJIUWdQU0J0WVhSeWFYZ3VZV1JrS0dJc0lHTXBPMXh1WEc0Z0lDQWdjbVYwZFhKdUlISmxjM1ZzZER0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRiMjFpYVc1bElHRWdablY2ZW5rZ2MybHRjR3hwWTJsaGJDQnpaWFFnZDJsMGFDQmhibTkwYUdWeUlHWjFlbnA1SUhOcGJYQnNhV05wWVd3Z2MyVjBYRzRnSUNBcUlHZGxibVZ5WVhSbFpDQm1jbTl0SUdOaGRHVm5iM0pwWTJGc0lHUmhkR0VnZFhOcGJtY2dZMkYwWldkdmNtbGpZV3dnWkdsemRHRnVZMlZ6TGlCVWFHVWdkR0Z5WjJWMFhHNGdJQ0FxSUdSaGRHRWdhWE1nWVhOemRXMWxaQ0IwYnlCaVpTQmpZWFJsWjI5eWFXTmhiQ0JzWVdKbGJDQmtZWFJoSUNoaElIWmxZM1J2Y2lCdlppQnNZV0psYkhNcExGeHVJQ0FnS2lCaGJtUWdkR2hwY3lCM2FXeHNJSFZ3WkdGMFpTQjBhR1VnWm5WNmVua2djMmx0Y0d4cFkybGhiQ0J6WlhRZ2RHOGdjbVZ6Y0dWamRDQjBhR0YwSUd4aFltVnNJR1JoZEdFdVhHNGdJQ0FxTDF4dUlDQndjbWwyWVhSbElHTmhkR1ZuYjNKcFkyRnNVMmx0Y0d4cFkybGhiRk5sZEVsdWRHVnljMlZqZEdsdmJpaGNiaUFnSUNCemFXMXdiR2xqYVdGc1UyVjBPaUJ0WVhSeWFYZ3VVM0JoY25ObFRXRjBjbWw0TEZ4dUlDQWdJSFJoY21kbGREb2diblZ0WW1WeVcxMHNYRzRnSUNBZ1ptRnlSR2x6ZERvZ2JuVnRZbVZ5TEZ4dUlDQWdJSFZ1YTI1dmQyNUVhWE4wSUQwZ01TNHdYRzRnSUNrZ2UxeHVJQ0FnSUd4bGRDQnBiblJsY25ObFkzUnBiMjRnUFNCbVlYTjBTVzUwWlhKelpXTjBhVzl1S0Z4dUlDQWdJQ0FnYzJsdGNHeHBZMmxoYkZObGRDeGNiaUFnSUNBZ0lIUmhjbWRsZEN4Y2JpQWdJQ0FnSUhWdWEyNXZkMjVFYVhOMExGeHVJQ0FnSUNBZ1ptRnlSR2x6ZEZ4dUlDQWdJQ2s3WEc0Z0lDQWdhVzUwWlhKelpXTjBhVzl1SUQwZ2JXRjBjbWw0TG1Wc2FXMXBibUYwWlZwbGNtOXpLR2x1ZEdWeWMyVmpkR2x2YmlrN1hHNGdJQ0FnY21WMGRYSnVJSEpsYzJWMFRHOWpZV3hEYjI1dVpXTjBhWFpwZEhrb2FXNTBaWEp6WldOMGFXOXVLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGIyMXdkWFJsSUdFZ1kyOXVkR2x1ZFc5MWN5QjJaWEp6YVc5dUlHOW1JSFJvWlNCa2FYTjBZVzVqWlNCMGJ5QjBhR1VnYTNSb0lHNWxZWEpsYzNSY2JpQWdJQ29nYm1WcFoyaGliM0l1SUZSb1lYUWdhWE1zSUhSb2FYTWdhWE1nYzJsdGFXeGhjaUIwYnlCcmJtNHRaR2x6ZEdGdVkyVWdZblYwSUdGc2JHOTNjeUJqYjI1MGFXNTFiM1Z6WEc0Z0lDQXFJR3NnZG1Gc2RXVnpJSEpoZEdobGNpQjBhR0Z1SUhKbGNYVnBjbWx1WnlCaGJpQnBiblJsWjNKaGJDQnJMaUJKYmlCbGMzTmpaVzVqWlNCM1pTQmhjbVVnYzJsdGNHeDVYRzRnSUNBcUlHTnZiWEIxZEdsdVp5QjBhR1VnWkdsemRHRnVZMlVnYzNWamFDQjBhR0YwSUhSb1pTQmpZWEprYVc1aGJHbDBlU0J2WmlCbWRYcDZlU0J6WlhRZ2QyVWdaMlZ1WlhKaGRHVmNiaUFnSUNvZ2FYTWdheTVjYmlBZ0lDb3ZYRzRnSUhCeWFYWmhkR1VnYzIxdmIzUm9TMDVPUkdsemRHRnVZMlVvWEc0Z0lDQWdaR2x6ZEdGdVkyVnpPaUJXWldOMGIzSnpMRnh1SUNBZ0lHczZJRzUxYldKbGNpeGNiaUFnSUNCc2IyTmhiRU52Ym01bFkzUnBkbWwwZVNBOUlERXVNQ3hjYmlBZ0lDQnVTWFJsY2lBOUlEWTBMRnh1SUNBZ0lHSmhibVIzYVdSMGFDQTlJREV1TUZ4dUlDQXBJSHRjYmlBZ0lDQmpiMjV6ZENCMFlYSm5aWFFnUFNBb1RXRjBhQzVzYjJjb2F5a2dMeUJOWVhSb0xteHZaeWd5S1NrZ0tpQmlZVzVrZDJsa2RHZzdYRzRnSUNBZ1kyOXVjM1FnY21odklEMGdkWFJwYkhNdWVtVnliM01vWkdsemRHRnVZMlZ6TG14bGJtZDBhQ2s3WEc0Z0lDQWdZMjl1YzNRZ2NtVnpkV3gwSUQwZ2RYUnBiSE11ZW1WeWIzTW9aR2x6ZEdGdVkyVnpMbXhsYm1kMGFDazdYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR1JwYzNSaGJtTmxjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2JHVjBJR3h2SUQwZ01DNHdPMXh1SUNBZ0lDQWdiR1YwSUdocElEMGdTVzVtYVc1cGRIazdYRzRnSUNBZ0lDQnNaWFFnYldsa0lEMGdNUzR3TzF4dVhHNGdJQ0FnSUNBdkx5QlVUMFJQT2lCVWFHbHpJR2x6SUhabGNua2dhVzVsWm1acFkybGxiblFzSUdKMWRDQjNhV3hzSUdSdklHWnZjaUJ1YjNjdUlFWkpXRTFGWEc0Z0lDQWdJQ0JqYjI1emRDQnBkR2hFYVhOMFlXNWpaWE1nUFNCa2FYTjBZVzVqWlhOYmFWMDdYRzRnSUNBZ0lDQmpiMjV6ZENCdWIyNWFaWEp2UkdsemRITWdQU0JwZEdoRWFYTjBZVzVqWlhNdVptbHNkR1Z5S0Noa0tTQTlQaUJrSUQ0Z01DNHdLVHRjYmx4dUlDQWdJQ0FnYVdZZ0tHNXZibHBsY205RWFYTjBjeTVzWlc1bmRHZ2dQajBnYkc5allXeERiMjV1WldOMGFYWnBkSGtwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYVc1a1pYZ2dQU0JOWVhSb0xtWnNiMjl5S0d4dlkyRnNRMjl1Ym1WamRHbDJhWFI1S1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYVc1MFpYSndiMnhoZEdsdmJpQTlJR3h2WTJGc1EyOXVibVZqZEdsMmFYUjVJQzBnYVc1a1pYZzdYRzRnSUNBZ0lDQWdJR2xtSUNocGJtUmxlQ0ErSURBcElIdGNiaUFnSUNBZ0lDQWdJQ0J5YUc5YmFWMGdQU0J1YjI1YVpYSnZSR2x6ZEhOYmFXNWtaWGdnTFNBeFhUdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2FXNTBaWEp3YjJ4aGRHbHZiaUErSUZOTlQwOVVTRjlMWDFSUFRFVlNRVTVEUlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21odlcybGRJQ3M5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR2x1ZEdWeWNHOXNZWFJwYjI0Z0tpQW9ibTl1V21WeWIwUnBjM1J6VzJsdVpHVjRYU0F0SUc1dmJscGxjbTlFYVhOMGMxdHBibVJsZUNBdElERmRLVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdjbWh2VzJsZElEMGdhVzUwWlhKd2IyeGhkR2x2YmlBcUlHNXZibHBsY205RWFYTjBjMXN3WFR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaHViMjVhWlhKdlJHbHpkSE11YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUNBZ0lDQnlhRzliYVYwZ1BTQjFkR2xzY3k1dFlYZ29ibTl1V21WeWIwUnBjM1J6S1R0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2JpQTlJREE3SUc0Z1BDQnVTWFJsY2pzZ2Jpc3JLU0I3WEc0Z0lDQWdJQ0FnSUd4bGRDQndjM1Z0SUQwZ01DNHdPMXh1SUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JxSUQwZ01Uc2dhaUE4SUdScGMzUmhibU5sYzF0cFhTNXNaVzVuZEdnN0lHb3JLeWtnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUdRZ1BTQmthWE4wWVc1alpYTmJhVjFiYWwwZ0xTQnlhRzliYVYwN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0dRZ1BpQXdLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2NITjFiU0FyUFNCTllYUm9MbVY0Y0NndEtHUWdMeUJ0YVdRcEtUdGNiaUFnSUNBZ0lDQWdJQ0JsYkhObFhHNGdJQ0FnSUNBZ0lDQWdJQ0J3YzNWdElDczlJREV1TUR0Y2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJR2xtSUNoTllYUm9MbUZpY3lod2MzVnRJQzBnZEdGeVoyVjBLU0E4SUZOTlQwOVVTRjlMWDFSUFRFVlNRVTVEUlNsY2JpQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JseHVYRzRnSUNBZ0lDQWdJR2xtSUNod2MzVnRJRDRnZEdGeVoyVjBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FHa2dQU0J0YVdRN1hHNGdJQ0FnSUNBZ0lDQWdiV2xrSUQwZ0tHeHZJQ3NnYUdrcElDOGdNaTR3TzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lHeHZJRDBnYldsa08xeHVJQ0FnSUNBZ0lDQWdJR2xtSUNob2FTQTlQVDBnU1c1bWFXNXBkSGtwWEc0Z0lDQWdJQ0FnSUNBZ0lDQnRhV1FnS2owZ01qdGNiaUFnSUNBZ0lDQWdJQ0JsYkhObFhHNGdJQ0FnSUNBZ0lDQWdJQ0J0YVdRZ1BTQW9iRzhnS3lCb2FTa2dMeUF5TGpBN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdjbVZ6ZFd4MFcybGRJRDBnYldsa08xeHVYRzRnSUNBZ0lDQXZMeUJVVDBSUE9pQlVhR2x6SUdseklIWmxjbmtnYVc1bFptWnBZMmxsYm5Rc0lHSjFkQ0IzYVd4c0lHUnZJR1p2Y2lCdWIzY3VJRVpKV0UxRlhHNGdJQ0FnSUNCcFppQW9jbWh2VzJsZElENGdNQzR3S1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUcxbFlXNUpkR2hFYVhOMFlXNWpaWE1nUFNCMWRHbHNjeTV0WldGdUtHbDBhRVJwYzNSaGJtTmxjeWs3WEc0Z0lDQWdJQ0FnSUdsbUlDaHlaWE4xYkhSYmFWMGdQQ0JOU1U1ZlMxOUVTVk5VWDFORFFVeEZJQ29nYldWaGJrbDBhRVJwYzNSaGJtTmxjeWxjYmlBZ0lDQWdJQ0FnSUNCeVpYTjFiSFJiYVYwZ1BTQk5TVTVmUzE5RVNWTlVYMU5EUVV4RklDb2diV1ZoYmtsMGFFUnBjM1JoYm1ObGN6dGNiaUFnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUcxbFlXNUVhWE4wWVc1alpYTWdQU0IxZEdsc2N5NXRaV0Z1S0dScGMzUmhibU5sY3k1dFlYQW9kWFJwYkhNdWJXVmhiaWtwTzF4dUlDQWdJQ0FnSUNCcFppQW9jbVZ6ZFd4MFcybGRJRHdnVFVsT1gwdGZSRWxUVkY5VFEwRk1SU0FxSUcxbFlXNUVhWE4wWVc1alpYTXBYRzRnSUNBZ0lDQWdJQ0FnY21WemRXeDBXMmxkSUQwZ1RVbE9YMHRmUkVsVFZGOVRRMEZNUlNBcUlHMWxZVzVFYVhOMFlXNWpaWE03WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlIdHphV2R0WVhNNklISmxjM1ZzZEN3Z2NtaHZjem9nY21odmZUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJEYjI1emRISjFZM1FnZEdobElHMWxiV0psY25Ob2FYQWdjM1J5Wlc1bmRHZ2daR0YwWVNCbWIzSWdkR2hsSURFdGMydGxiR1YwYjI0Z2IyWWdaV0ZqYUNCc2IyTmhiRnh1SUNBZ0tpQm1kWHA2ZVNCemFXMXdiR2xqYVdGc0lITmxkQ0F0TFNCMGFHbHpJR2x6SUdadmNtMWxaQ0JoY3lCaElITndZWEp6WlNCdFlYUnlhWGdnZDJobGNtVWdaV0ZqYUNCeWIzY2dhWE5jYmlBZ0lDb2dZU0JzYjJOaGJDQm1kWHA2ZVNCemFXMXdiR2xqYVdGc0lITmxkQ3dnZDJsMGFDQmhJRzFsYldKbGNuTm9hWEFnYzNSeVpXNW5kR2dnWm05eUlIUm9aVnh1SUNBZ0tpQXhMWE5wYlhCc1pYZ2dkRzhnWldGamFDQnZkR2hsY2lCa1lYUmhJSEJ2YVc1MExseHVJQ0FnS2k5Y2JpQWdjSEpwZG1GMFpTQmpiMjF3ZFhSbFRXVnRZbVZ5YzJocGNGTjBjbVZ1WjNSb2N5aGNiaUFnSUNCcmJtNUpibVJwWTJWek9pQldaV04wYjNKekxGeHVJQ0FnSUd0dWJrUnBjM1JoYm1ObGN6b2dWbVZqZEc5eWN5eGNiaUFnSUNCemFXZHRZWE02SUc1MWJXSmxjbHRkTEZ4dUlDQWdJSEpvYjNNNklHNTFiV0psY2x0ZFhHNGdJQ2s2SUhzZ2NtOTNjem9nYm5WdFltVnlXMTA3SUdOdmJITTZJRzUxYldKbGNsdGRPeUIyWVd4ek9pQnVkVzFpWlhKYlhTQjlJSHRjYmlBZ0lDQmpiMjV6ZENCdVUyRnRjR3hsY3lBOUlHdHVia2x1WkdsalpYTXViR1Z1WjNSb08xeHVJQ0FnSUdOdmJuTjBJRzVPWldsbmFHSnZjbk1nUFNCcmJtNUpibVJwWTJWeld6QmRMbXhsYm1kMGFEdGNibHh1SUNBZ0lHTnZibk4wSUhKdmQzTWdQU0IxZEdsc2N5NTZaWEp2Y3lodVUyRnRjR3hsY3lBcUlHNU9aV2xuYUdKdmNuTXBPMXh1SUNBZ0lHTnZibk4wSUdOdmJITWdQU0IxZEdsc2N5NTZaWEp2Y3lodVUyRnRjR3hsY3lBcUlHNU9aV2xuYUdKdmNuTXBPMXh1SUNBZ0lHTnZibk4wSUhaaGJITWdQU0IxZEdsc2N5NTZaWEp2Y3lodVUyRnRjR3hsY3lBcUlHNU9aV2xuYUdKdmNuTXBPMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0J1VTJGdGNHeGxjenNnYVNzcktTQjdYRzRnSUNBZ0lDQm1iM0lnS0d4bGRDQnFJRDBnTURzZ2FpQThJRzVPWldsbmFHSnZjbk03SUdvckt5a2dlMXh1SUNBZ0lDQWdJQ0JzWlhRZ2RtRnNJRDBnTUR0Y2JpQWdJQ0FnSUNBZ2FXWWdLR3R1YmtsdVpHbGpaWE5iYVYxYmFsMGdQVDA5SUMweEtWeHVJQ0FnSUNBZ0lDQWdJR052Ym5ScGJuVmxPeUF2THlCWFpTQmthV1J1SjNRZ1oyVjBJSFJvWlNCbWRXeHNJR3R1YmlCbWIzSWdhVnh1WEc0Z0lDQWdJQ0FnSUdsbUlDaHJibTVKYm1ScFkyVnpXMmxkVzJwZElEMDlQU0JwS1Z4dUlDQWdJQ0FnSUNBZ0lIWmhiQ0E5SURBdU1EdGNiaUFnSUNBZ0lDQWdaV3h6WlNCcFppQW9hMjV1UkdsemRHRnVZMlZ6VzJsZFcycGRJQzBnY21odmMxdHBYU0E4UFNBd0xqQXBYRzRnSUNBZ0lDQWdJQ0FnZG1Gc0lEMGdNUzR3TzF4dUlDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnZG1Gc0lEMGdUV0YwYUM1bGVIQW9MU2dvYTI1dVJHbHpkR0Z1WTJWelcybGRXMnBkSUMwZ2NtaHZjMXRwWFNrZ0x5QnphV2R0WVhOYmFWMHBLVHRjYmx4dVhHNGdJQ0FnSUNBZ0lISnZkM05iYVNBcUlHNU9aV2xuYUdKdmNuTWdLeUJxWFNBOUlHazdYRzRnSUNBZ0lDQWdJR052YkhOYmFTQXFJRzVPWldsbmFHSnZjbk1nS3lCcVhTQTlJR3R1YmtsdVpHbGpaWE5iYVYxYmFsMDdYRzRnSUNBZ0lDQWdJSFpoYkhOYmFTQXFJRzVPWldsbmFHSnZjbk1nS3lCcVhTQTlJSFpoYkR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdlM0p2ZDNNc0lHTnZiSE1zSUhaaGJITjlPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVsdWFYUnBZV3hwZW1VZ1lTQm1kWHA2ZVNCemFXMXdiR2xqYVdGc0lITmxkQ0JsYldKbFpHUnBibWNzSUhWemFXNW5JR0VnYzNCbFkybG1hV1ZrWEc0Z0lDQXFJR2x1YVhScFlXeHBjMkYwYVc5dUlHMWxkR2h2WkNCaGJtUWdkR2hsYmlCdGFXNXBiV2w2YVc1bklIUm9aU0JtZFhwNmVTQnpaWFFnWTNKdmMzTWdaVzUwY205d2VWeHVJQ0FnS2lCaVpYUjNaV1Z1SUhSb1pTQXhMWE5yWld4bGRHOXVjeUJ2WmlCMGFHVWdhR2xuYUNCaGJtUWdiRzkzSUdScGJXVnVjMmx2Ym1Gc0lHWjFlbnA1SUhOcGJYQnNhV05wWVd4Y2JpQWdJQ29nYzJWMGN5NWNiaUFnSUNvdlhHNGdJSEJ5YVhaaGRHVWdhVzVwZEdsaGJHbDZaVk5wYlhCc2FXTnBZV3hUWlhSRmJXSmxaR1JwYm1jb0tTQjdYRzRnSUNBZ1kyOXVjM1FnYmtWd2IyTm9jeUE5SUhSb2FYTXVaMlYwVGtWd2IyTm9jeWdwTzF4dVhHNGdJQ0FnWTI5dWMzUWdlMjVEYjIxd2IyNWxiblJ6ZlNBOUlIUm9hWE03WEc0Z0lDQWdZMjl1YzNRZ1ozSmhjR2hXWVd4MVpYTWdQU0IwYUdsekxtZHlZWEJvTG1kbGRGWmhiSFZsY3lncE8xeHVJQ0FnSUd4bGRDQm5jbUZ3YUUxaGVDQTlJREE3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JuY21Gd2FGWmhiSFZsY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2RtRnNkV1VnUFNCbmNtRndhRlpoYkhWbGMxdHBYVHRjYmlBZ0lDQWdJR2xtSUNobmNtRndhRTFoZUNBOElHZHlZWEJvVm1Gc2RXVnpXMmxkS1Z4dUlDQWdJQ0FnSUNCbmNtRndhRTFoZUNBOUlIWmhiSFZsTzF4dUlDQWdJSDFjYmx4dUlDQWdJR052Ym5OMElHZHlZWEJvSUQwZ2RHaHBjeTVuY21Gd2FDNXRZWEFvS0haaGJIVmxLU0E5UGlCN1hHNGdJQ0FnSUNCcFppQW9kbUZzZFdVZ1BDQm5jbUZ3YUUxaGVDQXZJRzVGY0c5amFITXBYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQXdPMXh1SUNBZ0lDQWdaV3h6WlZ4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZG1Gc2RXVTdYRzRnSUNBZ2ZTazdYRzVjYmlBZ0lDQXZMeUJYWlNkeVpTQnViM1FnWTI5dGNIVjBhVzVuSUhSb1pTQnpjR1ZqZEhKaGJDQnBibWwwYVdGc2FYcGhkR2x2YmlCcGJpQjBhR2x6SUdsdGNHeGxiV1Z1ZEdGMGFXOXVYRzRnSUNBZ0x5OGdkVzUwYVd3Z2QyVWdaR1YwWlhKdGFXNWxJR0VnWW1WMGRHVnlJR1ZwWjJWdWRtRnNkV1V2WldsblpXNTJaV04wYjNJZ1kyOXRjSFYwWVhScGIyNWNiaUFnSUNBdkx5QmhjSEJ5YjJGamFGeHVJQ0FnSUhSb2FYTXVaVzFpWldSa2FXNW5JRDBnZFhScGJITXVlbVZ5YjNNb1ozSmhjR2d1YmxKdmQzTXBMbTFoY0Nnb0tTQTlQaUI3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkWFJwYkhNdWVtVnliM01vYmtOdmJYQnZibVZ1ZEhNcExtMWhjQ2dvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjFkR2xzY3k1MFlYVlNZVzVrS0hSb2FYTXVjbUZ1Wkc5dEtTQXFJREl3SUNzZ0xURXdPeUF2THlCU1lXNWtiMjBnWm5KdmJTQXRNVEFnZEc4Z01UQmNiaUFnSUNBZ0lIMHBPMXh1SUNBZ0lIMHBPMXh1WEc0Z0lDQWdMeThnUjJWMElHZHlZWEJvSUdSaGRHRWdhVzRnYjNKa1pYSmxaQ0IzWVhrdUxpNWNiaUFnSUNCamIyNXpkQ0IzWldsbmFIUnpPaUJ1ZFcxaVpYSmJYU0E5SUZ0ZE8xeHVJQ0FnSUdOdmJuTjBJR2hsWVdRNklHNTFiV0psY2x0ZElEMGdXMTA3WEc0Z0lDQWdZMjl1YzNRZ2RHRnBiRG9nYm5WdFltVnlXMTBnUFNCYlhUdGNiaUFnSUNCamIyNXpkQ0J5YjNkRGIyeFdZV3gxWlhNZ1BTQm5jbUZ3YUM1blpYUkJiR3dvS1R0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhKdmQwTnZiRlpoYkhWbGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdaVzUwY25rZ1BTQnliM2REYjJ4V1lXeDFaWE5iYVYwN1hHNGdJQ0FnSUNCcFppQW9aVzUwY25rdWRtRnNkV1VwSUh0Y2JpQWdJQ0FnSUNBZ2QyVnBaMmgwY3k1d2RYTm9LR1Z1ZEhKNUxuWmhiSFZsS1R0Y2JpQWdJQ0FnSUNBZ2RHRnBiQzV3ZFhOb0tHVnVkSEo1TG5KdmR5azdYRzRnSUNBZ0lDQWdJR2hsWVdRdWNIVnphQ2hsYm5SeWVTNWpiMndwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQmpiMjV6ZENCbGNHOWphSE5RWlhKVFlXMXdiR1VnUFNCMGFHbHpMbTFoYTJWRmNHOWphSE5RWlhKVFlXMXdiR1VvZDJWcFoyaDBjeXdnYmtWd2IyTm9jeWs3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdlMmhsWVdRc0lIUmhhV3dzSUdWd2IyTm9jMUJsY2xOaGJYQnNaWDA3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1IybDJaVzRnWVNCelpYUWdiMllnZDJWcFoyaDBjeUJoYm1RZ2JuVnRZbVZ5SUc5bUlHVndiMk5vY3lCblpXNWxjbUYwWlNCMGFHVWdiblZ0WW1WeUlHOW1YRzRnSUNBcUlHVndiMk5vY3lCd1pYSWdjMkZ0Y0d4bElHWnZjaUJsWVdOb0lIZGxhV2RvZEM1Y2JpQWdJQ292WEc0Z0lIQnlhWFpoZEdVZ2JXRnJaVVZ3YjJOb2MxQmxjbE5oYlhCc1pTaDNaV2xuYUhSek9pQnVkVzFpWlhKYlhTd2dia1Z3YjJOb2N6b2diblZ0WW1WeUtTQjdYRzRnSUNBZ1kyOXVjM1FnY21WemRXeDBJRDBnZFhScGJITXVabWxzYkdWa0tIZGxhV2RvZEhNdWJHVnVaM1JvTENBdE1TNHdLVHRjYmlBZ0lDQmpiMjV6ZENCdFlYZ2dQU0IxZEdsc2N5NXRZWGdvZDJWcFoyaDBjeWs3WEc0Z0lDQWdZMjl1YzNRZ2JsTmhiWEJzWlhNZ1BTQjNaV2xuYUhSekxtMWhjQ2dvZHlrZ1BUNGdLSGNnTHlCdFlYZ3BJQ29nYmtWd2IyTm9jeWs3WEc0Z0lDQWdibE5oYlhCc1pYTXVabTl5UldGamFDZ29iaXdnYVNrZ1BUNGdlMXh1SUNBZ0lDQWdhV1lnS0c0Z1BpQXdLU0J5WlhOMWJIUmJhVjBnUFNCdVJYQnZZMmh6SUM4Z2JsTmhiWEJzWlhOYmFWMDdYRzRnSUNBZ2ZTazdYRzRnSUNBZ2NtVjBkWEp1SUhKbGMzVnNkRHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQmMzTnBaMjV6SUc5d2RHbHRhWHBoZEdsdmJpQnpkR0YwWlNCd1lYSmhiV1YwWlhKeklHWnliMjBnWVNCd1lYSjBhV0ZzSUc5d2RHbHRhWHBoZEdsdmJpQnpkR0YwWlM1Y2JpQWdJQ292WEc0Z0lIQnlhWFpoZEdVZ1lYTnphV2R1VDNCMGFXMXBlbUYwYVc5dVUzUmhkR1ZRWVhKaGJXVjBaWEp6S0hOMFlYUmxPaUJRWVhKMGFXRnNQRTl3ZEdsdGFYcGhkR2x2YmxOMFlYUmxQaWtnZTF4dUlDQWdJRTlpYW1WamRDNWhjM05wWjI0b2RHaHBjeTV2Y0hScGJXbDZZWFJwYjI1VGRHRjBaU3dnYzNSaGRHVXBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZObGRITWdZU0JtWlhjZ2IzQjBhVzFwZW1GMGFXOXVJSE4wWVhSbElIQmhjbUZ0WlhSbGNuTWdkR2hoZENCaGNtVWdibVZqWlhOellYSjVJR0psWm05eVpTQmxiblJsY21sdVoxeHVJQ0FnS2lCMGFHVWdiM0IwYVcxcGVtRjBhVzl1SUhOMFpYQWdiRzl2Y0M1Y2JpQWdJQ292WEc0Z0lIQnlhWFpoZEdVZ2NISmxjR0Z5WlVadmNrOXdkR2x0YVhwaGRHbHZia3h2YjNBb0tTQjdYRzRnSUNBZ0x5OGdTSGx3WlhKd1lYSmhiV1YwWlhKelhHNGdJQ0FnWTI5dWMzUWdlM0psY0hWc2MybHZibE4wY21WdVozUm9MQ0JzWldGeWJtbHVaMUpoZEdVc0lHNWxaMkYwYVhabFUyRnRjR3hsVW1GMFpYMGdQU0IwYUdsek8xeHVYRzRnSUNBZ1kyOXVjM1FnZTF4dUlDQWdJQ0FnWlhCdlkyaHpVR1Z5VTJGdGNHeGxMRnh1SUNBZ0lDQWdhR1ZoWkVWdFltVmtaR2x1Wnl4Y2JpQWdJQ0FnSUhSaGFXeEZiV0psWkdScGJtY3NYRzRnSUNBZ2ZTQTlJSFJvYVhNdWIzQjBhVzFwZW1GMGFXOXVVM1JoZEdVN1hHNWNiaUFnSUNCamIyNXpkQ0JrYVcwZ1BTQm9aV0ZrUlcxaVpXUmthVzVuV3pCZExteGxibWQwYUR0Y2JpQWdJQ0JqYjI1emRDQnRiM1psVDNSb1pYSWdQU0JvWldGa1JXMWlaV1JrYVc1bkxteGxibWQwYUNBOVBUMGdkR0ZwYkVWdFltVmtaR2x1Wnk1c1pXNW5kR2c3WEc1Y2JpQWdJQ0JqYjI1emRDQmxjRzlqYUhOUVpYSk9aV2RoZEdsMlpWTmhiWEJzWlNBOUlHVndiMk5vYzFCbGNsTmhiWEJzWlM1dFlYQW9YRzRnSUNBZ0lDQW9aU2tnUFQ0Z1pTQXZJRzVsWjJGMGFYWmxVMkZ0Y0d4bFVtRjBaVnh1SUNBZ0lDazdYRzRnSUNBZ1kyOXVjM1FnWlhCdlkyaFBaazVsZUhST1pXZGhkR2wyWlZOaGJYQnNaU0E5SUZzdUxpNWxjRzlqYUhOUVpYSk9aV2RoZEdsMlpWTmhiWEJzWlYwN1hHNGdJQ0FnWTI5dWMzUWdaWEJ2WTJoUFprNWxlSFJUWVcxd2JHVWdQU0JiTGk0dVpYQnZZMmh6VUdWeVUyRnRjR3hsWFR0Y2JseHVJQ0FnSUhSb2FYTXVZWE56YVdkdVQzQjBhVzFwZW1GMGFXOXVVM1JoZEdWUVlYSmhiV1YwWlhKektIdGNiaUFnSUNBZ0lHVndiMk5vVDJaT1pYaDBVMkZ0Y0d4bExGeHVJQ0FnSUNBZ1pYQnZZMmhQWms1bGVIUk9aV2RoZEdsMlpWTmhiWEJzWlN4Y2JpQWdJQ0FnSUdWd2IyTm9jMUJsY2s1bFoyRjBhWFpsVTJGdGNHeGxMRnh1SUNBZ0lDQWdiVzkyWlU5MGFHVnlMRnh1SUNBZ0lDQWdhVzVwZEdsaGJFRnNjR2hoT2lCc1pXRnlibWx1WjFKaGRHVXNYRzRnSUNBZ0lDQmhiSEJvWVRvZ2JHVmhjbTVwYm1kU1lYUmxMRnh1SUNBZ0lDQWdaMkZ0YldFNklISmxjSFZzYzJsdmJsTjBjbVZ1WjNSb0xGeHVJQ0FnSUNBZ1pHbHRMRnh1SUNBZ0lIMHBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVsdWFYUnBZV3hwZW1WeklHOXdkR2x0YVhwaGRHbHZiaUJ6ZEdGMFpTQm1iM0lnYzNSbGNIZHBjMlVnYjNCMGFXMXBlbUYwYVc5dUxseHVJQ0FnS2k5Y2JpQWdjSEpwZG1GMFpTQnBibWwwYVdGc2FYcGxUM0IwYVcxcGVtRjBhVzl1S0NrZ2UxeHVJQ0FnSUM4dklFRnNaMjl5YVhSb2JTQnpkR0YwWlZ4dUlDQWdJR052Ym5OMElHaGxZV1JGYldKbFpHUnBibWNnUFNCMGFHbHpMbVZ0WW1Wa1pHbHVaenRjYmlBZ0lDQmpiMjV6ZENCMFlXbHNSVzFpWldSa2FXNW5JRDBnZEdocGN5NWxiV0psWkdScGJtYzdYRzVjYmlBZ0lDQXZMeUJKYm1sMGFXRnNhWHBsWkNCcGJpQnBibWwwYVdGc2FYcGxVMmx0Y0d4cFkybGhiRk5sZEVWdFltVmtaR2x1WnlncFhHNGdJQ0FnWTI5dWMzUWdlMmhsWVdRc0lIUmhhV3dzSUdWd2IyTm9jMUJsY2xOaGJYQnNaWDBnUFNCMGFHbHpMbTl3ZEdsdGFYcGhkR2x2YmxOMFlYUmxPMXh1WEc0Z0lDQWdZMjl1YzNRZ2JrVndiMk5vY3lBOUlIUm9hWE11WjJWMFRrVndiMk5vY3lncE8xeHVJQ0FnSUdOdmJuTjBJRzVXWlhKMGFXTmxjeUE5SUhSb2FYTXVaM0poY0dndWJrTnZiSE03WEc1Y2JpQWdJQ0JqYjI1emRDQjdZU3dnWW4wZ1BTQm1hVzVrUVVKUVlYSmhiWE1vZEdocGN5NXpjSEpsWVdRc0lIUm9hWE11YldsdVJHbHpkQ2s3WEc1Y2JpQWdJQ0IwYUdsekxtRnpjMmxuYms5d2RHbHRhWHBoZEdsdmJsTjBZWFJsVUdGeVlXMWxkR1Z5Y3loN1hHNGdJQ0FnSUNCb1pXRmtSVzFpWldSa2FXNW5MRnh1SUNBZ0lDQWdkR0ZwYkVWdFltVmtaR2x1Wnl4Y2JpQWdJQ0FnSUdobFlXUXNYRzRnSUNBZ0lDQjBZV2xzTEZ4dUlDQWdJQ0FnWlhCdlkyaHpVR1Z5VTJGdGNHeGxMRnh1SUNBZ0lDQWdZU3hjYmlBZ0lDQWdJR0lzWEc0Z0lDQWdJQ0J1UlhCdlkyaHpMRnh1SUNBZ0lDQWdibFpsY25ScFkyVnpMRnh1SUNBZ0lIMHBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVsdGNISnZkbVVnWVc0Z1pXMWlaV1JrYVc1bklIVnphVzVuSUhOMGIyTm9ZWE4wYVdNZ1ozSmhaR2xsYm5RZ1pHVnpZMlZ1ZENCMGJ5QnRhVzVwYldsNlpTQjBhR1ZjYmlBZ0lDb2dablY2ZW5rZ2MyVjBJR055YjNOeklHVnVkSEp2Y0hrZ1ltVjBkMlZsYmlCMGFHVWdNUzF6YTJWc1pYUnZibk1nYjJZZ2RHaGxJR2hwWjJnZ1pHbHRaVzV6YVc5dVlXeGNiaUFnSUNvZ1lXNWtJR3h2ZHlCa2FXMWxibk5wYjI1aGJDQm1kWHA2ZVNCemFXMXdiR2xqYVdGc0lITmxkSE11SUVsdUlIQnlZV04wYVdObElIUm9hWE1nYVhNZ1pHOXVaU0JpZVZ4dUlDQWdLaUJ6WVcxd2JHbHVaeUJsWkdkbGN5QmlZWE5sWkNCdmJpQjBhR1ZwY2lCdFpXMWlaWEp6YUdsd0lITjBjbVZ1WjNSb0lDaDNhWFJvSUhSb1pTQW9NUzF3S1NCMFpYSnRjMXh1SUNBZ0tpQmpiMjFwYm1jZ1puSnZiU0J1WldkaGRHbDJaU0J6WVcxd2JHbHVaeUJ6YVcxcGJHRnlJSFJ2SUhkdmNtUXlkbVZqS1M1Y2JpQWdJQ292WEc0Z0lIQnlhWFpoZEdVZ2IzQjBhVzFwZW1WTVlYbHZkWFJUZEdWd0tHNDZJRzUxYldKbGNpa2dlMXh1SUNBZ0lHTnZibk4wSUh0dmNIUnBiV2w2WVhScGIyNVRkR0YwWlgwZ1BTQjBhR2x6TzF4dUlDQWdJR052Ym5OMElIdGNiaUFnSUNBZ0lHaGxZV1FzWEc0Z0lDQWdJQ0IwWVdsc0xGeHVJQ0FnSUNBZ2FHVmhaRVZ0WW1Wa1pHbHVaeXhjYmlBZ0lDQWdJSFJoYVd4RmJXSmxaR1JwYm1jc1hHNGdJQ0FnSUNCbGNHOWphSE5RWlhKVFlXMXdiR1VzWEc0Z0lDQWdJQ0JsY0c5amFFOW1UbVY0ZEZOaGJYQnNaU3hjYmlBZ0lDQWdJR1Z3YjJOb1QyWk9aWGgwVG1WbllYUnBkbVZUWVcxd2JHVXNYRzRnSUNBZ0lDQmxjRzlqYUhOUVpYSk9aV2RoZEdsMlpWTmhiWEJzWlN4Y2JpQWdJQ0FnSUcxdmRtVlBkR2hsY2l4Y2JpQWdJQ0FnSUdsdWFYUnBZV3hCYkhCb1lTeGNiaUFnSUNBZ0lHRnNjR2hoTEZ4dUlDQWdJQ0FnWjJGdGJXRXNYRzRnSUNBZ0lDQmhMRnh1SUNBZ0lDQWdZaXhjYmlBZ0lDQWdJR1JwYlN4Y2JpQWdJQ0FnSUc1RmNHOWphSE1zWEc0Z0lDQWdJQ0J1Vm1WeWRHbGpaWE1zWEc0Z0lDQWdmU0E5SUc5d2RHbHRhWHBoZEdsdmJsTjBZWFJsTzF4dVhHNGdJQ0FnWTI5dWMzUWdZMnhwY0ZaaGJIVmxJRDBnTkM0d08xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQmxjRzlqYUhOUVpYSlRZVzF3YkdVdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJR2xtSUNobGNHOWphRTltVG1WNGRGTmhiWEJzWlZ0cFhTQStJRzRwWEc0Z0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dVhHNWNiaUFnSUNBZ0lHTnZibk4wSUdvZ1BTQm9aV0ZrVzJsZE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYXlBOUlIUmhhV3hiYVYwN1hHNWNiaUFnSUNBZ0lHTnZibk4wSUdOMWNuSmxiblFnUFNCb1pXRmtSVzFpWldSa2FXNW5XMnBkTzF4dUlDQWdJQ0FnWTI5dWMzUWdiM1JvWlhJZ1BTQjBZV2xzUlcxaVpXUmthVzVuVzJ0ZE8xeHVYRzRnSUNBZ0lDQmpiMjV6ZENCa2FYTjBVM0YxWVhKbFpDQTlJSEpFYVhOMEtHTjFjbkpsYm5Rc0lHOTBhR1Z5S1R0Y2JseHVJQ0FnSUNBZ2JHVjBJR2R5WVdSRGIyVm1aaUE5SURBN1hHNGdJQ0FnSUNCcFppQW9aR2x6ZEZOeGRXRnlaV1FnUGlBd0tTQjdYRzRnSUNBZ0lDQWdJR2R5WVdSRGIyVm1aaUE5SUMweUxqQWdLaUJoSUNvZ1lpQXFJRTFoZEdndWNHOTNLR1JwYzNSVGNYVmhjbVZrTENCaUlDMGdNUzR3S1R0Y2JpQWdJQ0FnSUNBZ1ozSmhaRU52WldabUlDODlJR0VnS2lCTllYUm9MbkJ2ZHloa2FYTjBVM0YxWVhKbFpDd2dZaWtnS3lBeExqQTdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR1FnUFNBd095QmtJRHdnWkdsdE95QmtLeXNwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWjNKaFpFUWdQU0JqYkdsd0tHZHlZV1JEYjJWbVppQXFJQ2hqZFhKeVpXNTBXMlJkSUMwZ2IzUm9aWEpiWkYwcExDQmpiR2x3Vm1Gc2RXVXBPMXh1SUNBZ0lDQWdJQ0JqZFhKeVpXNTBXMlJkSUNzOUlHZHlZV1JFSUNvZ1lXeHdhR0U3WEc0Z0lDQWdJQ0FnSUdsbUlDaHRiM1psVDNSb1pYSXBYRzRnSUNBZ0lDQWdJQ0FnYjNSb1pYSmJaRjBnS3owZ0xXZHlZV1JFSUNvZ1lXeHdhR0U3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdWd2IyTm9UMlpPWlhoMFUyRnRjR3hsVzJsZElDczlJR1Z3YjJOb2MxQmxjbE5oYlhCc1pWdHBYVHRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdiazVsWjFOaGJYQnNaWE1nUFNCTllYUm9MbVpzYjI5eUtGeHVJQ0FnSUNBZ0lDQW9iaUF0SUdWd2IyTm9UMlpPWlhoMFRtVm5ZWFJwZG1WVFlXMXdiR1ZiYVYwcElDOGdaWEJ2WTJoelVHVnlUbVZuWVhScGRtVlRZVzF3YkdWYmFWMWNiaUFnSUNBZ0lDazdYRzVjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJSEFnUFNBd095QndJRHdnYms1bFoxTmhiWEJzWlhNN0lIQXJLeWtnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JySUQwZ2RYUnBiSE11ZEdGMVVtRnVaRWx1ZENodVZtVnlkR2xqWlhNc0lIUm9hWE11Y21GdVpHOXRLVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdiM1JvWlhJZ1BTQjBZV2xzUlcxaVpXUmthVzVuVzJ0ZE8xeHVYRzRnSUNBZ0lDQWdJR052Ym5OMElHUnBjM1JUY1hWaGNtVmtJRDBnY2tScGMzUW9ZM1Z5Y21WdWRDd2diM1JvWlhJcE8xeHVYRzRnSUNBZ0lDQWdJR3hsZENCbmNtRmtRMjlsWm1ZZ1BTQXdMakE3WEc0Z0lDQWdJQ0FnSUdsbUlDaGthWE4wVTNGMVlYSmxaQ0ErSURBdU1Da2dlMXh1SUNBZ0lDQWdJQ0FnSUdkeVlXUkRiMlZtWmlBOUlESXVNQ0FxSUdkaGJXMWhJQ29nWWp0Y2JpQWdJQ0FnSUNBZ0lDQm5jbUZrUTI5bFptWWdMejFjYmlBZ0lDQWdJQ0FnSUNBZ0lDZ3dMakF3TVNBcklHUnBjM1JUY1hWaGNtVmtLU0FxSUNoaElDb2dUV0YwYUM1d2IzY29aR2x6ZEZOeGRXRnlaV1FzSUdJcElDc2dNU2s3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2FpQTlQVDBnYXlrZ2UxeHVJQ0FnSUNBZ0lDQWdJR052Ym5ScGJuVmxPMXh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ1pDQTlJREE3SUdRZ1BDQmthVzA3SUdRckt5a2dlMXh1SUNBZ0lDQWdJQ0FnSUd4bGRDQm5jbUZrUkNBOUlEUXVNRHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9aM0poWkVOdlpXWm1JRDRnTUM0d0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnWjNKaFpFUWdQU0JqYkdsd0tHZHlZV1JEYjJWbVppQXFJQ2hqZFhKeVpXNTBXMlJkSUMwZ2IzUm9aWEpiWkYwcExDQmpiR2x3Vm1Gc2RXVXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ1kzVnljbVZ1ZEZ0a1hTQXJQU0JuY21Ga1JDQXFJR0ZzY0doaE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQmxjRzlqYUU5bVRtVjRkRTVsWjJGMGFYWmxVMkZ0Y0d4bFcybGRJQ3M5SUc1T1pXZFRZVzF3YkdWeklDb2daWEJ2WTJoelVHVnlUbVZuWVhScGRtVlRZVzF3YkdWYmFWMDdYRzRnSUNBZ2ZWeHVJQ0FnSUc5d2RHbHRhWHBoZEdsdmJsTjBZWFJsTG1Gc2NHaGhJRDBnYVc1cGRHbGhiRUZzY0doaElDb2dLREV1TUNBdElHNGdMeUJ1UlhCdlkyaHpLVHRjYmx4dUlDQWdJRzl3ZEdsdGFYcGhkR2x2YmxOMFlYUmxMbU4xY25KbGJuUkZjRzlqYUNBclBTQXhPMXh1SUNBZ0lISmxkSFZ5YmlCb1pXRmtSVzFpWldSa2FXNW5PMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVsdGNISnZkbVVnWVc0Z1pXMWlaV1JrYVc1bklIVnphVzVuSUhOMGIyTm9ZWE4wYVdNZ1ozSmhaR2xsYm5RZ1pHVnpZMlZ1ZENCMGJ5QnRhVzVwYldsNlpTQjBhR1ZjYmlBZ0lDb2dablY2ZW5rZ2MyVjBJR055YjNOeklHVnVkSEp2Y0hrZ1ltVjBkMlZsYmlCMGFHVWdNUzF6YTJWc1pYUnZibk1nYjJZZ2RHaGxJR2hwWjJnZ1pHbHRaVzV6YVc5dVlXeGNiaUFnSUNvZ1lXNWtJR3h2ZHlCa2FXMWxibk5wYjI1aGJDQm1kWHA2ZVNCemFXMXdiR2xqYVdGc0lITmxkSE11SUVsdUlIQnlZV04wYVdObElIUm9hWE1nYVhNZ1pHOXVaU0JpZVZ4dUlDQWdLaUJ6WVcxd2JHbHVaeUJsWkdkbGN5QmlZWE5sWkNCdmJpQjBhR1ZwY2lCdFpXMWlaWEp6YUdsd0lITjBjbVZ1WjNSb0lDaDNhWFJvSUhSb1pTQW9NUzF3S1NCMFpYSnRjMXh1SUNBZ0tpQmpiMjFwYm1jZ1puSnZiU0J1WldkaGRHbDJaU0J6WVcxd2JHbHVaeUJ6YVcxcGJHRnlJSFJ2SUhkdmNtUXlkbVZqS1M1Y2JpQWdJQ292WEc0Z0lIQnlhWFpoZEdVZ2IzQjBhVzFwZW1WTVlYbHZkWFJCYzNsdVl5aGNiaUFnSUNCbGNHOWphRU5oYkd4aVlXTnJPaUFvWlhCdlkyaE9kVzFpWlhJNklHNTFiV0psY2lrZ1BUNGdkbTlwWkNCOElHSnZiMnhsWVc0Z1BTQW9LU0E5UGlCMGNuVmxYRzRnSUNrNklGQnliMjFwYzJVOFltOXZiR1ZoYmo0Z2UxeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlNnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYRzRnSUNBZ0lDQmpiMjV6ZENCemRHVndJRDBnWVhONWJtTWdLQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUh0dVJYQnZZMmh6TENCamRYSnlaVzUwUlhCdlkyaDlJRDBnZEdocGN5NXZjSFJwYldsNllYUnBiMjVUZEdGMFpUdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxtVnRZbVZrWkdsdVp5QTlJSFJvYVhNdWIzQjBhVzFwZW1WTVlYbHZkWFJUZEdWd0tHTjFjbkpsYm5SRmNHOWphQ2s3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWlhCdlkyaERiMjF3YkdWMFpXUWdQU0IwYUdsekxtOXdkR2x0YVhwaGRHbHZibE4wWVhSbExtTjFjbkpsYm5SRmNHOWphRHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J6YUc5MWJHUlRkRzl3SUQwZ1pYQnZZMmhEWVd4c1ltRmpheWhsY0c5amFFTnZiWEJzWlhSbFpDa2dQVDA5SUdaaGJITmxPMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR2x6Um1sdWFYTm9aV1FnUFNCbGNHOWphRU52YlhCc1pYUmxaQ0E5UFQwZ2JrVndiMk5vY3p0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvSVhOb2IzVnNaRk4wYjNBZ0ppWWdJV2x6Um1sdWFYTm9aV1FwWEc0Z0lDQWdJQ0FnSUNBZ0lDQnpaWFJVYVcxbGIzVjBLQ2dwSUQwK0lITjBaWEFvS1N3Z01DazdYRzRnSUNBZ0lDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9hWE5HYVc1cGMyaGxaQ2s3WEc0Z0lDQWdJQ0FnSUgwZ1kyRjBZMmdnS0dWeWNpa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGFtVmpkQ2hsY25JcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdjMlYwVkdsdFpXOTFkQ2dvS1NBOVBpQnpkR1Z3S0Nrc0lEQXBPMXh1SUNBZ0lIMHBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVsdGNISnZkbVVnWVc0Z1pXMWlaV1JrYVc1bklIVnphVzVuSUhOMGIyTm9ZWE4wYVdNZ1ozSmhaR2xsYm5RZ1pHVnpZMlZ1ZENCMGJ5QnRhVzVwYldsNlpTQjBhR1ZjYmlBZ0lDb2dablY2ZW5rZ2MyVjBJR055YjNOeklHVnVkSEp2Y0hrZ1ltVjBkMlZsYmlCMGFHVWdNUzF6YTJWc1pYUnZibk1nYjJZZ2RHaGxJR2hwWjJnZ1pHbHRaVzV6YVc5dVlXeGNiaUFnSUNvZ1lXNWtJR3h2ZHlCa2FXMWxibk5wYjI1aGJDQm1kWHA2ZVNCemFXMXdiR2xqYVdGc0lITmxkSE11SUVsdUlIQnlZV04wYVdObElIUm9hWE1nYVhNZ1pHOXVaU0JpZVZ4dUlDQWdLaUJ6WVcxd2JHbHVaeUJsWkdkbGN5QmlZWE5sWkNCdmJpQjBhR1ZwY2lCdFpXMWlaWEp6YUdsd0lITjBjbVZ1WjNSb0lDaDNhWFJvSUhSb1pTQW9NUzF3S1NCMFpYSnRjMXh1SUNBZ0tpQmpiMjFwYm1jZ1puSnZiU0J1WldkaGRHbDJaU0J6WVcxd2JHbHVaeUJ6YVcxcGJHRnlJSFJ2SUhkdmNtUXlkbVZqS1M1Y2JpQWdJQ292WEc0Z0lIQnlhWFpoZEdVZ2IzQjBhVzFwZW1WTVlYbHZkWFFvWEc0Z0lDQWdaWEJ2WTJoRFlXeHNZbUZqYXpvZ0tHVndiMk5vVG5WdFltVnlPaUJ1ZFcxaVpYSXBJRDArSUhadmFXUWdmQ0JpYjI5c1pXRnVJRDBnS0NrZ1BUNGdkSEoxWlZ4dUlDQXBPaUJXWldOMGIzSnpJSHRjYmlBZ0lDQnNaWFFnYVhOR2FXNXBjMmhsWkNBOUlHWmhiSE5sTzF4dUlDQWdJR3hsZENCbGJXSmxaR1JwYm1jNklGWmxZM1J2Y25NZ1BTQmJYVHRjYmlBZ0lDQjNhR2xzWlNBb0lXbHpSbWx1YVhOb1pXUXBJSHRjYmlBZ0lDQWdJR052Ym5OMElIdHVSWEJ2WTJoekxDQmpkWEp5Wlc1MFJYQnZZMmg5SUQwZ2RHaHBjeTV2Y0hScGJXbDZZWFJwYjI1VGRHRjBaVHRjYmlBZ0lDQWdJR1Z0WW1Wa1pHbHVaeUE5SUhSb2FYTXViM0IwYVcxcGVtVk1ZWGx2ZFhSVGRHVndLR04xY25KbGJuUkZjRzlqYUNrN1hHNGdJQ0FnSUNCamIyNXpkQ0JsY0c5amFFTnZiWEJzWlhSbFpDQTlJSFJvYVhNdWIzQjBhVzFwZW1GMGFXOXVVM1JoZEdVdVkzVnljbVZ1ZEVWd2IyTm9PMXh1SUNBZ0lDQWdZMjl1YzNRZ2MyaHZkV3hrVTNSdmNDQTlJR1Z3YjJOb1EyRnNiR0poWTJzb1pYQnZZMmhEYjIxd2JHVjBaV1FwSUQwOVBTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUdselJtbHVhWE5vWldRZ1BTQmxjRzlqYUVOdmJYQnNaWFJsWkNBOVBUMGdia1Z3YjJOb2N5QjhmQ0J6YUc5MWJHUlRkRzl3TzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z1pXMWlaV1JrYVc1bk8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWRsZEhNZ2RHaGxJRzUxYldKbGNpQnZaaUJsY0c5amFITWdabTl5SUc5d2RHbHRhWHBwYm1jZ2RHaGxJSEJ5YjJwbFkzUnBiMjR1WEc0Z0lDQXFJRTVQVkVVNklGUm9hWE1nYUdWMWNtbHpkR2xqSUdScFptWmxjbk1nWm5KdmJTQjBhR1VnY0hsMGFHOXVJSFpsY25OcGIyNWNiaUFnSUNvdlhHNGdJSEIxWW14cFl5Qm5aWFJPUlhCdlkyaHpLQ2tnZTF4dUlDQWdJR052Ym5OMElHZHlZWEJvSUQwZ2RHaHBjeTVuY21Gd2FEdGNibHh1SUNBZ0lHbG1JQ2gwYUdsekxtNUZjRzlqYUhNZ1BpQXdLVnh1SUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11YmtWd2IyTm9jenRjYmx4dVhHNGdJQ0FnYVdZZ0tDRm5jbUZ3YUNsY2JpQWdJQ0FnSUhKbGRIVnliaUF5TURBN1hHNWNibHh1SUNBZ0lHTnZibk4wSUd4bGJtZDBhQ0E5SUdkeVlYQm9MbTVTYjNkek8xeHVJQ0FnSUdsbUlDaHNaVzVuZEdnZ1BEMGdNalV3TUNsY2JpQWdJQ0FnSUhKbGRIVnliaUExTURBN1hHNGdJQ0FnWld4elpTQnBaaUFvYkdWdVozUm9JRHc5SURVd01EQXBYRzRnSUNBZ0lDQnlaWFIxY200Z05EQXdPMXh1SUNBZ0lHVnNjMlVnYVdZZ0tHeGxibWQwYUNBOFBTQTNOVEF3S1Z4dUlDQWdJQ0FnY21WMGRYSnVJRE13TUR0Y2JpQWdJQ0JsYkhObFhHNGdJQ0FnSUNCeVpYUjFjbTRnTWpBd08xeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmxkV05zYVdSbFlXNG9lRG9nVm1WamRHOXlMQ0I1T2lCV1pXTjBiM0lwSUh0Y2JpQWdiR1YwSUhKbGMzVnNkQ0E5SURBN1hHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnZUM1c1pXNW5kR2c3SUdrckt5bGNiaUFnSUNCeVpYTjFiSFFnS3owZ0tIaGJhVjBnTFNCNVcybGRLU0FxS2lBeU8xeHVYRzRnSUhKbGRIVnliaUJOWVhSb0xuTnhjblFvY21WemRXeDBLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHNTFiV1Z5YVdNb2VEb2diblZ0WW1WeUxDQjVPaUJ1ZFcxaVpYSXBJSHRjYmlBZ1kyOXVjM1FnY21WemRXeDBJRDBnVFdGMGFDNWhZbk1vZUNBdElIa3BPMXh1SUNCeVpYUjFjbTRnY21WemRXeDBPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1kyOXphVzVsS0hnNklGWmxZM1J2Y2l3Z2VUb2dWbVZqZEc5eUtTQjdYRzRnSUd4bGRDQnlaWE4xYkhRZ1BTQXdMakE3WEc0Z0lHeGxkQ0J1YjNKdFdDQTlJREF1TUR0Y2JpQWdiR1YwSUc1dmNtMVpJRDBnTUM0d08xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2VDNXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJSEpsYzNWc2RDQXJQU0I0VzJsZElDb2dlVnRwWFR0Y2JpQWdJQ0J1YjNKdFdDQXJQU0I0VzJsZElDb3FJREk3WEc0Z0lDQWdibTl5YlZrZ0t6MGdlVnRwWFNBcUtpQXlPMXh1SUNCOVhHNWNiaUFnYVdZZ0tHNXZjbTFZSUQwOVBTQXdJQ1ltSUc1dmNtMVpJRDA5UFNBd0tWeHVJQ0FnSUhKbGRIVnliaUF3TzF4dUlDQmxiSE5sSUdsbUlDaHViM0p0V0NBOVBUMGdNQ0I4ZkNCdWIzSnRXU0E5UFQwZ01DbGNiaUFnSUNCeVpYUjFjbTRnTVM0d08xeHVJQ0JsYkhObFhHNGdJQ0FnY21WMGRYSnVJREV1TUNBdElISmxjM1ZzZENBdklFMWhkR2d1YzNGeWRDaHViM0p0V0NBcUlHNXZjbTFaS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJCYmlCcGJuUmxjbVpoWTJVZ2NtVndjbVZ6Wlc1MGFXNW5JSFJvWlNCdmNIUnBiV2w2WVhScGIyNGdjM1JoZEdVZ2RISmhZMnRsWkNCaVpYUjNaV1Z1SUhOMFpYQnpJRzltWEc0Z0tpQjBhR1VnVTBkRUlHOXdkR2x0YVhwaGRHbHZibHh1SUNvdlhHNWpiR0Z6Y3lCUGNIUnBiV2w2WVhScGIyNVRkR0YwWlNCN1hHNGdJR04xY25KbGJuUkZjRzlqYUNBOUlEQTdYRzVjYmlBZ0x5OGdSR0YwWVNCMGNtRmphMlZrSUdSMWNtbHVaeUJ2Y0hScGJXbDZZWFJwYjI0Z2MzUmxjSE11WEc0Z0lHaGxZV1JGYldKbFpHUnBibWM2SUc1MWJXSmxjbHRkVzEwZ1BTQmJYVHRjYmlBZ2RHRnBiRVZ0WW1Wa1pHbHVaem9nYm5WdFltVnlXMTFiWFNBOUlGdGRPMXh1SUNCb1pXRmtPaUJ1ZFcxaVpYSmJYU0E5SUZ0ZE8xeHVJQ0IwWVdsc09pQnVkVzFpWlhKYlhTQTlJRnRkTzF4dUlDQmxjRzlqYUhOUVpYSlRZVzF3YkdVNklHNTFiV0psY2x0ZElEMGdXMTA3WEc0Z0lHVndiMk5vVDJaT1pYaDBVMkZ0Y0d4bE9pQnVkVzFpWlhKYlhTQTlJRnRkTzF4dUlDQmxjRzlqYUU5bVRtVjRkRTVsWjJGMGFYWmxVMkZ0Y0d4bE9pQnVkVzFpWlhKYlhTQTlJRnRkTzF4dUlDQmxjRzlqYUhOUVpYSk9aV2RoZEdsMlpWTmhiWEJzWlRvZ2JuVnRZbVZ5VzEwZ1BTQmJYVHRjYmlBZ2JXOTJaVTkwYUdWeUlEMGdkSEoxWlR0Y2JpQWdhVzVwZEdsaGJFRnNjR2hoSUQwZ01TNHdPMXh1SUNCaGJIQm9ZU0E5SURFdU1EdGNiaUFnWjJGdGJXRWdQU0F4TGpBN1hHNGdJR0VnUFNBeExqVTNOamswTXpRMk1ETXhNVE13TnpjN1hHNGdJR0lnUFNBd0xqZzVOVEEyTURnM056a3hNRGszTXpNN1hHNGdJR1JwYlNBOUlESTdYRzRnSUc1RmNHOWphSE1nUFNBMU1EQTdYRzRnSUc1V1pYSjBhV05sY3lBOUlEQTdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1UzUmhibVJoY21RZ1kyeGhiWEJwYm1jZ2IyWWdZU0IyWVd4MVpTQnBiblJ2SUdFZ1ptbDRaV1FnY21GdVoyVmNiaUFxTDF4dVpuVnVZM1JwYjI0Z1kyeHBjQ2g0T2lCdWRXMWlaWElzSUdOc2FYQldZV3gxWlRvZ2JuVnRZbVZ5S1NCN1hHNGdJR2xtSUNoNElENGdZMnhwY0ZaaGJIVmxLU0J5WlhSMWNtNGdZMnhwY0ZaaGJIVmxPMXh1SUNCbGJITmxJR2xtSUNoNElEd2dMV05zYVhCV1lXeDFaU2tnY21WMGRYSnVJQzFqYkdsd1ZtRnNkV1U3WEc0Z0lHVnNjMlVnY21WMGRYSnVJSGc3WEc1OVhHNWNiaThxS2x4dUlDb2dVbVZrZFdObFpDQkZkV05zYVdSbFlXNGdaR2x6ZEdGdVkyVXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlISkVhWE4wS0hnNklHNTFiV0psY2x0ZExDQjVPaUJ1ZFcxaVpYSmJYU2tnZTF4dUlDQnNaWFFnY21WemRXeDBJRDBnTUM0d08xeHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhndWJHVnVaM1JvT3lCcEt5c3BYRzRnSUNBZ2NtVnpkV3gwSUNzOUlFMWhkR2d1Y0c5M0tIaGJhVjBnTFNCNVcybGRMQ0F5S1R0Y2JseHVJQ0J5WlhSMWNtNGdjbVZ6ZFd4ME8xeHVmVnh1WEc0dktpcGNiaUFxSUVacGRDQmhMQ0JpSUhCaGNtRnRjeUJtYjNJZ2RHaGxJR1JwWm1abGNtVnVkR2xoWW14bElHTjFjblpsSUhWelpXUWdhVzRnYkc5M1pYSmNiaUFxSUdScGJXVnVjMmx2Ym1Gc0lHWjFlbnA1SUhOcGJYQnNhV05wWVd3Z1kyOXRjR3hsZUNCamIyNXpkSEoxWTNScGIyNHVJRmRsSUhkaGJuUWdkR2hsWEc0Z0tpQnpiVzl2ZEdnZ1kzVnlkbVVnS0daeWIyMGdZU0J3Y21VdFpHVm1hVzVsWkNCbVlXMXBiSGtnZDJsMGFDQnphVzF3YkdVZ1ozSmhaR2xsYm5RcElIUm9ZWFJjYmlBcUlHSmxjM1FnYldGMFkyaGxjeUJoYmlCdlptWnpaWFFnWlhod2IyNWxiblJwWVd3Z1pHVmpZWGt1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQm1hVzVrUVVKUVlYSmhiWE1vYzNCeVpXRmtPaUJ1ZFcxaVpYSXNJRzFwYmtScGMzUTZJRzUxYldKbGNpa2dlMXh1SUNCamIyNXpkQ0JqZFhKMlpTQTlJQ2hiWVN3Z1lsMDZJRzUxYldKbGNsdGRLU0E5UGlBb2VEb2diblZ0WW1WeUtTQTlQaUI3WEc0Z0lDQWdjbVYwZFhKdUlERXVNQ0F2SUNneExqQWdLeUJoSUNvZ2VDQXFLaUFvTWlBcUlHSXBLVHRjYmlBZ2ZUdGNibHh1SUNCamIyNXpkQ0I0ZGlBOUlIVjBhV3h6WEc0Z0lDQWdMbXhwYm1WaGNpZ3dMQ0J6Y0hKbFlXUWdLaUF6TENBek1EQXBYRzRnSUNBZ0xtMWhjQ2dvZG1Gc0tTQTlQaUFvZG1Gc0lEd2diV2x1UkdsemRDQS9JREV1TUNBNklIWmhiQ2twTzF4dVhHNGdJR052Ym5OMElIbDJJRDBnZFhScGJITXVlbVZ5YjNNb2VIWXViR1Z1WjNSb0tTNXRZWEFvS0haaGJDd2dhVzVrWlhncElEMCtJSHRjYmlBZ0lDQmpiMjV6ZENCbmRHVWdQU0I0ZGx0cGJtUmxlRjBnUGowZ2JXbHVSR2x6ZER0Y2JpQWdJQ0J5WlhSMWNtNGdaM1JsSUQ4Z1RXRjBhQzVsZUhBb0xTaDRkbHRwYm1SbGVGMGdMU0J0YVc1RWFYTjBLU0F2SUhOd2NtVmhaQ2tnT2lCMllXdzdYRzRnSUgwcE8xeHVYRzRnSUdOdmJuTjBJR2x1YVhScFlXeFdZV3gxWlhNZ1BTQmJNQzQxTENBd0xqVmRPMXh1SUNCamIyNXpkQ0JrWVhSaElEMGdlM2c2SUhoMkxDQjVPaUI1ZG4wN1hHNWNiaUFnTHk4Z1JHVm1ZWFZzZENCdmNIUnBiMjV6SUdadmNpQjBhR1VnWVd4bmIzSnBkR2h0SUNobWNtOXRJR2RwZEdoMVlpQmxlR0Z0Y0d4bEtWeHVJQ0JqYjI1emRDQnZjSFJwYjI1eklEMGdlMXh1SUNBZ0lHUmhiWEJwYm1jNklERXVOU3hjYmlBZ0lDQnBibWwwYVdGc1ZtRnNkV1Z6TEZ4dUlDQWdJR2R5WVdScFpXNTBSR2xtWm1WeVpXNWpaVG9nTVRCbExUSXNYRzRnSUNBZ2JXRjRTWFJsY21GMGFXOXVjem9nTVRBd0xGeHVJQ0FnSUdWeWNtOXlWRzlzWlhKaGJtTmxPaUF4TUdVdE15eGNiaUFnZlR0Y2JseHVJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnYm1WM0xXTmhjRnh1SUNCamIyNXpkQ0I3Y0dGeVlXMWxkR1Z5Vm1Gc2RXVnpmU0E5SUV4TktHUmhkR0VzSUdOMWNuWmxMQ0J2Y0hScGIyNXpLVHRjYmlBZ1kyOXVjM1FnVzJFc0lHSmRJRDBnY0dGeVlXMWxkR1Z5Vm1Gc2RXVnpJR0Z6SUc1MWJXSmxjbHRkTzF4dUlDQnlaWFIxY200Z2UyRXNJR0o5TzF4dWZWeHVYRzR2S2lwY2JpQXFJRlZ1WkdWeUlIUm9aU0JoYzNOMWJYQjBhVzl1SUc5bUlHTmhkR1ZuYjNKcFkyRnNJR1JwYzNSaGJtTmxJR1p2Y2lCMGFHVWdhVzUwWlhKelpXTjBhVzVuWEc0Z0tpQnphVzF3YkdsamFXRnNJSE5sZENCd1pYSm1iM0p0SUdFZ1ptRnpkQ0JwYm5SbGNuTmxZM1JwYjI0dVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJtWVhOMFNXNTBaWEp6WldOMGFXOXVLRnh1SUNCbmNtRndhRG9nYldGMGNtbDRMbE53WVhKelpVMWhkSEpwZUN4Y2JpQWdkR0Z5WjJWME9pQnVkVzFpWlhKYlhTeGNiaUFnZFc1cmJtOTNia1JwYzNRZ1BTQXhMakFzWEc0Z0lHWmhja1JwYzNRZ1BTQTFMakJjYmlrZ2UxeHVJQ0J5WlhSMWNtNGdaM0poY0dndWJXRndLQ2gyWVd4MVpTd2djbTkzTENCamIyd3BJRDArSUh0Y2JpQWdJQ0JwWmlBb2RHRnlaMlYwVzNKdmQxMGdQVDA5SUMweElIeDhJSFJoY21kbGRGdGpiMnhkSUQwOVBTQXRNU2xjYmlBZ0lDQWdJSEpsZEhWeWJpQjJZV3gxWlNBcUlFMWhkR2d1Wlhod0tDMTFibXR1YjNkdVJHbHpkQ2s3WEc0Z0lDQWdaV3h6WlNCcFppQW9kR0Z5WjJWMFczSnZkMTBnSVQwOUlIUmhjbWRsZEZ0amIyeGRLVnh1SUNBZ0lDQWdjbVYwZFhKdUlIWmhiSFZsSUNvZ1RXRjBhQzVsZUhBb0xXWmhja1JwYzNRcE8xeHVJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lISmxkSFZ5YmlCMllXeDFaVHRjYmlBZ2ZTazdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1VtVnpaWFFnZEdobElHeHZZMkZzSUdOdmJtNWxZM1JwZG1sMGVTQnlaWEYxYVhKbGJXVnVkQ0F0TFNCbFlXTm9JR1JoZEdFZ2MyRnRjR3hsSUhOb2IzVnNaRnh1SUNvZ2FHRjJaU0JqYjIxd2JHVjBaU0JqYjI1bWFXUmxibU5sSUdsdUlHRjBJR3hsWVhOMElHOXVaU0F4TFhOcGJYQnNaWGdnYVc0Z2RHaGxJSE5wYlhCc2FXTnBZV3dnYzJWMExseHVJQ29nVjJVZ1kyRnVJR1Z1Wm05eVkyVWdkR2hwY3lCaWVTQnNiMk5oYkd4NUlISmxjMk5oYkdsdVp5QmpiMjVtYVdSbGJtTmxjeXdnWVc1a0lIUm9aVzRnY21WdFpYSm5hVzVuSUhSb1pWeHVJQ29nWkdsbVptVnlaVzUwSUd4dlkyRnNJSE5wYlhCc2FXTnBZV3dnYzJWMGN5QjBiMmRsZEdobGNpNWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhKbGMyVjBURzlqWVd4RGIyNXVaV04wYVhacGRIa29jMmx0Y0d4cFkybGhiRk5sZERvZ2JXRjBjbWw0TGxOd1lYSnpaVTFoZEhKcGVDa2dlMXh1SUNCemFXMXdiR2xqYVdGc1UyVjBJRDBnYldGMGNtbDRMbTV2Y20xaGJHbDZaU2h6YVcxd2JHbGphV0ZzVTJWMExDQnRZWFJ5YVhndVRtOXliVlI1Y0dVdWJXRjRLVHRjYmlBZ1kyOXVjM1FnZEhKaGJuTndiM05sSUQwZ2JXRjBjbWw0TG5SeVlXNXpjRzl6WlNoemFXMXdiR2xqYVdGc1UyVjBLVHRjYmlBZ1kyOXVjM1FnY0hKdlpFMWhkSEpwZUNBOUlHMWhkSEpwZUM1d1lXbHlkMmx6WlUxMWJIUnBjR3g1S0hSeVlXNXpjRzl6WlN3Z2MybHRjR3hwWTJsaGJGTmxkQ2s3WEc0Z0lITnBiWEJzYVdOcFlXeFRaWFFnUFNCdFlYUnlhWGd1WVdSa0tGeHVJQ0FnSUhOcGJYQnNhV05wWVd4VFpYUXNYRzRnSUNBZ2JXRjBjbWw0TG5OMVluUnlZV04wS0hSeVlXNXpjRzl6WlN3Z2NISnZaRTFoZEhKcGVDbGNiaUFnS1R0Y2JpQWdjbVYwZFhKdUlHMWhkSEpwZUM1bGJHbHRhVzVoZEdWYVpYSnZjeWh6YVcxd2JHbGphV0ZzVTJWMEtUdGNibjFjYmx4dUx5b3FYRzRnS2lCSGFYWmxiaUJwYm1ScFkyVnpJR0Z1WkNCM1pXbG5hSFJ6SUdGdVpDQmhiaUJ2Y21sbmFXNWhiQ0JsYldKbFpHUnBibWR6WEc0Z0tpQnBibWwwYVdGc2FYcGxJSFJvWlNCd2IzTnBkR2x2Ym5NZ2IyWWdibVYzSUhCdmFXNTBjeUJ5Wld4aGRHbDJaU0IwYnlCMGFHVmNiaUFxSUdsdVpHbGpaWE1nWVc1a0lIZGxhV2RvZEhNZ0tHOW1JSFJvWldseUlHNWxhV2RvWW05eWN5QnBiaUIwYUdVZ2MyOTFjbU5sSUdSaGRHRXBMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2FXNXBkRlJ5WVc1elptOXliU2hjYmlBZ2FXNWthV05sY3pvZ2JuVnRZbVZ5VzExYlhTeGNiaUFnZDJWcFoyaDBjem9nYm5WdFltVnlXMTFiWFN4Y2JpQWdaVzFpWldSa2FXNW5PaUJXWldOMGIzSnpYRzRwSUh0Y2JpQWdZMjl1YzNRZ2NtVnpkV3gwSUQwZ2RYUnBiSE5jYmlBZ0lDQXVlbVZ5YjNNb2FXNWthV05sY3k1c1pXNW5kR2dwWEc0Z0lDQWdMbTFoY0Nnb1gzb3BJRDArSUhWMGFXeHpMbnBsY205ektHVnRZbVZrWkdsdVoxc3dYUzVzWlc1bmRHZ3BLVHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR2x1WkdsalpYTXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JxSUQwZ01Ec2dhaUE4SUdsdVpHbGpaWE5iTUYwdWJHVnVaM1JvT3lCcUt5c3BJSHRjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR1FnUFNBd095QmtJRHdnWlcxaVpXUmthVzVuV3pCZExteGxibWQwYURzZ1pDc3JLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR0VnUFNCcGJtUnBZMlZ6VzJsZFcycGRPMXh1SUNBZ0lDQWdJQ0J5WlhOMWJIUmJhVjFiWkYwZ0t6MGdkMlZwWjJoMGMxdHBYVnRxWFNBcUlHVnRZbVZrWkdsdVoxdGhYVnRrWFR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJSEpsYzNWc2REdGNibjFjYmlKZGZRPT0iLCIvKipcbiAqIEBsaWNlbnNlXG4gKlxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuLyoqXG4gKiBUaGlzIGlzIGEgSmF2YVNjcmlwdCByZWltcGxlbWVudGF0aW9uIG9mIFVNQVAgKG9yaWdpbmFsIGxpY2Vuc2UgYmVsb3cpLCBmcm9tXG4gKiB0aGUgcHl0aG9uIGltcGxlbWVudGF0aW9uIGZvdW5kIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9sbWNpbm5lcy91bWFwLlxuICpcbiAqIEBhdXRob3IgYW5keWNvZW5lbkBnb29nbGUuY29tIChBbmR5IENvZW5lbilcbiAqL1xuLyoqXG4gKiBAbGljZW5zZVxuICogQlNEIDMtQ2xhdXNlIExpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTcsIExlbGFuZCBNY0lubmVzXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAqICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gKiAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRVxuICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUxcbiAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SXG4gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUlxuICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSxcbiAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5pbXBvcnQgKiBhcyBoZWFwIGZyb20gJy4vaGVhcCc7XG5pbXBvcnQgKiBhcyBtYXRyaXggZnJvbSAnLi9tYXRyaXgnO1xuaW1wb3J0ICogYXMgdHJlZSBmcm9tICcuL3RyZWUnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi91dGlscyc7XG4vKipcbiAqIENyZWF0ZSBhIHZlcnNpb24gb2YgbmVhcmVzdCBuZWlnaGJvciBkZXNjZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZU5ORGVzY2VudChkaXN0YW5jZUZuLCByYW5kb20pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbk5EZXNjZW50KGRhdGEsIGxlYWZBcnJheSwgbk5laWdoYm9ycywgbkl0ZXJzID0gMTAsIG1heENhbmRpZGF0ZXMgPSA1MCwgZGVsdGEgPSAwLjAwMSwgcmhvID0gMC41LCBycFRyZWVJbml0ID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBuVmVydGljZXMgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgY29uc3QgY3VycmVudEdyYXBoID0gaGVhcC5tYWtlSGVhcChkYXRhLmxlbmd0aCwgbk5laWdoYm9ycyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaW5kaWNlcyA9IGhlYXAucmVqZWN0aW9uU2FtcGxlKG5OZWlnaGJvcnMsIGRhdGEubGVuZ3RoLCByYW5kb20pO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbmRpY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IGRpc3RhbmNlRm4oZGF0YVtpXSwgZGF0YVtpbmRpY2VzW2pdXSk7XG4gICAgICAgICAgICAgICAgaGVhcC5oZWFwUHVzaChjdXJyZW50R3JhcGgsIGksIGQsIGluZGljZXNbal0sIDEpO1xuICAgICAgICAgICAgICAgIGhlYXAuaGVhcFB1c2goY3VycmVudEdyYXBoLCBpbmRpY2VzW2pdLCBkLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocnBUcmVlSW5pdCkge1xuICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBsZWFmQXJyYXkubGVuZ3RoOyBuKyspIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlYWZBcnJheVtuXS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAobGVhZkFycmF5W25dW2ldIDwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBsZWFmQXJyYXlbbl0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZWFmQXJyYXlbbl1bal0gPCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZCA9IGRpc3RhbmNlRm4oZGF0YVtsZWFmQXJyYXlbbl1baV1dLCBkYXRhW2xlYWZBcnJheVtuXVtqXV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhcC5oZWFwUHVzaChjdXJyZW50R3JhcGgsIGxlYWZBcnJheVtuXVtpXSwgZCwgbGVhZkFycmF5W25dW2pdLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYXAuaGVhcFB1c2goY3VycmVudEdyYXBoLCBsZWFmQXJyYXlbbl1bal0sIGQsIGxlYWZBcnJheVtuXVtpXSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBuSXRlcnM7IG4rKykge1xuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlTmVpZ2hib3JzID0gaGVhcC5idWlsZENhbmRpZGF0ZXMoY3VycmVudEdyYXBoLCBuVmVydGljZXMsIG5OZWlnaGJvcnMsIG1heENhbmRpZGF0ZXMsIHJhbmRvbSk7XG4gICAgICAgICAgICBsZXQgYyA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5WZXJ0aWNlczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXhDYW5kaWRhdGVzOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IE1hdGguZmxvb3IoY2FuZGlkYXRlTmVpZ2hib3JzWzBdW2ldW2pdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAgPCAwIHx8IHV0aWxzLnRhdVJhbmQocmFuZG9tKSA8IHJobylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IG1heENhbmRpZGF0ZXM7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcSA9IE1hdGguZmxvb3IoY2FuZGlkYXRlTmVpZ2hib3JzWzBdW2ldW2tdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNqID0gY2FuZGlkYXRlTmVpZ2hib3JzWzJdW2ldW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2sgPSBjYW5kaWRhdGVOZWlnaGJvcnNbMl1baV1ba107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocSA8IDAgfHwgKCFjaiAmJiAhY2spKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZCA9IGRpc3RhbmNlRm4oZGF0YVtwXSwgZGF0YVtxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjICs9IGhlYXAuaGVhcFB1c2goY3VycmVudEdyYXBoLCBwLCBkLCBxLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMgKz0gaGVhcC5oZWFwUHVzaChjdXJyZW50R3JhcGgsIHEsIGQsIHAsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPD0gZGVsdGEgKiBuTmVpZ2hib3JzICogZGF0YS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc29ydGVkID0gaGVhcC5kZWhlYXBTb3J0KGN1cnJlbnRHcmFwaCk7XG4gICAgICAgIHJldHVybiBzb3J0ZWQ7XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYWtlSW5pdGlhbGl6YXRpb25zKGRpc3RhbmNlRm4pIHtcbiAgICBmdW5jdGlvbiBpbml0RnJvbVJhbmRvbShuTmVpZ2hib3JzLCBkYXRhLCBxdWVyeVBvaW50cywgX2hlYXAsIHJhbmRvbSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXJ5UG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gdXRpbHMucmVqZWN0aW9uU2FtcGxlKG5OZWlnaGJvcnMsIGRhdGEubGVuZ3RoLCByYW5kb20pO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbmRpY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGljZXNbal0gPCAwKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gZGlzdGFuY2VGbihkYXRhW2luZGljZXNbal1dLCBxdWVyeVBvaW50c1tpXSk7XG4gICAgICAgICAgICAgICAgaGVhcC5oZWFwUHVzaChfaGVhcCwgaSwgZCwgaW5kaWNlc1tqXSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdEZyb21UcmVlKF90cmVlLCBkYXRhLCBxdWVyeVBvaW50cywgX2hlYXAsIHJhbmRvbSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXJ5UG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gdHJlZS5zZWFyY2hGbGF0VHJlZShxdWVyeVBvaW50c1tpXSwgX3RyZWUsIHJhbmRvbSk7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGluZGljZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kaWNlc1tqXSA8IDApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gZGlzdGFuY2VGbihkYXRhW2luZGljZXNbal1dLCBxdWVyeVBvaW50c1tpXSk7XG4gICAgICAgICAgICAgICAgaGVhcC5oZWFwUHVzaChfaGVhcCwgaSwgZCwgaW5kaWNlc1tqXSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4geyBpbml0RnJvbVJhbmRvbSwgaW5pdEZyb21UcmVlIH07XG59XG5leHBvcnQgZnVuY3Rpb24gbWFrZUluaXRpYWxpemVkTk5TZWFyY2goZGlzdGFuY2VGbikge1xuICAgIHJldHVybiBmdW5jdGlvbiBublNlYXJjaEZuKGRhdGEsIGdyYXBoLCBpbml0aWFsaXphdGlvbiwgcXVlcnlQb2ludHMpIHtcbiAgICAgICAgY29uc3QgeyBpbmRpY2VzLCBpbmRwdHIgfSA9IG1hdHJpeC5nZXRDU1IoZ3JhcGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXJ5UG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB0cmllZCA9IG5ldyBTZXQoaW5pdGlhbGl6YXRpb25bMF1baV0pO1xuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAvLyBGaW5kIHNtYWxsZXN0IGZsYWdnZWQgdmVydGV4XG4gICAgICAgICAgICAgICAgY29uc3QgdmVydGV4ID0gaGVhcC5zbWFsbGVzdEZsYWdnZWQoaW5pdGlhbGl6YXRpb24sIGkpO1xuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXggPT09IC0xKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzID0gaW5kaWNlcy5zbGljZShpbmRwdHJbdmVydGV4XSwgaW5kcHRyW3ZlcnRleCArIDFdKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUgPT09IHZlcnRleCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlID09PSAtMSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZWQuaGFzKGNhbmRpZGF0ZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZCA9IGRpc3RhbmNlRm4oZGF0YVtjYW5kaWRhdGVdLCBxdWVyeVBvaW50c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgIGhlYXAudW5jaGVja2VkSGVhcFB1c2goaW5pdGlhbGl6YXRpb24sIGksIGQsIGNhbmRpZGF0ZSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHRyaWVkLmFkZChjYW5kaWRhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5pdGlhbGl6YXRpb247XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplU2VhcmNoKGZvcmVzdCwgZGF0YSwgcXVlcnlQb2ludHMsIG5OZWlnaGJvcnMsIGluaXRGcm9tUmFuZG9tLCBpbml0RnJvbVRyZWUsIHJhbmRvbSkge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBoZWFwLm1ha2VIZWFwKHF1ZXJ5UG9pbnRzLmxlbmd0aCwgbk5laWdoYm9ycyk7XG4gICAgaW5pdEZyb21SYW5kb20obk5laWdoYm9ycywgZGF0YSwgcXVlcnlQb2ludHMsIHJlc3VsdHMsIHJhbmRvbSk7XG4gICAgaWYgKGZvcmVzdCkge1xuICAgICAgICBmb3IgKGNvbnN0IHRyZWUgb2YgZm9yZXN0KVxuICAgICAgICAgICAgaW5pdEZyb21UcmVlKHRyZWUsIGRhdGEsIHF1ZXJ5UG9pbnRzLCByZXN1bHRzLCByYW5kb20pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJtNWZaR1Z6WTJWdWRDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSW01dVgyUmxjMk5sYm5RdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUU3T3pzN096czdPenM3T3pzN096czdPMGRCYVVKSE8wRkJSVWc3T3pzN08wZEJTMGM3UVVGRlNEczdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenRIUVN0Q1J6dEJRVVZJTEU5QlFVOHNTMEZCU3l4SlFVRkpMRTFCUVUwc1VVRkJVU3hEUVVGRE8wRkJReTlDTEU5QlFVOHNTMEZCU3l4TlFVRk5MRTFCUVUwc1ZVRkJWU3hEUVVGRE8wRkJRMjVETEU5QlFVOHNTMEZCU3l4SlFVRkpMRTFCUVUwc1VVRkJVU3hEUVVGRE8wRkJReTlDTEU5QlFVOHNTMEZCU3l4TFFVRkxMRTFCUVUwc1UwRkJVeXhEUVVGRE8wRkJSMnBET3p0SFFVVkhPMEZCUTBnc1RVRkJUU3hWUVVGVkxHRkJRV0VzUTBGQlF5eFZRVUZ6UWl4RlFVRkZMRTFCUVdkQ08wbEJRM0JGTEU5QlFVOHNVMEZCVXl4VFFVRlRMRU5CUTNaQ0xFbEJRVmtzUlVGRFdpeFRRVUZyUWl4RlFVTnNRaXhWUVVGclFpeEZRVU5zUWl4TlFVRk5MRWRCUVVjc1JVRkJSU3hGUVVOWUxHRkJRV0VzUjBGQlJ5eEZRVUZGTEVWQlEyeENMRXRCUVVzc1IwRkJSeXhMUVVGTExFVkJRMklzUjBGQlJ5eEhRVUZITEVkQlFVY3NSVUZEVkN4VlFVRlZMRWRCUVVjc1NVRkJTVHRSUVVWcVFpeE5RVUZOTEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRE8xRkJRemxDTEUxQlFVMHNXVUZCV1N4SFFVRkhMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4VlFVRlZMRU5CUVVNc1EwRkJRenRSUVVVMVJDeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRaUVVOd1F5eE5RVUZOTEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExGVkJRVlVzUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGRE8xbEJRM1JGTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8yZENRVU4yUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhWUVVGVkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVWb1JDeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZEYWtRc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eFpRVUZaTEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRiRVE3VTBGRFJqdFJRVU5FTEVsQlFVa3NWVUZCVlN4RlFVRkZPMWxCUTJRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRk5CUVZNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdaMEpCUTNwRExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8yOUNRVU0xUXl4SlFVRkpMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRPM2RDUVVOeVFpeE5RVUZOTzI5Q1FVVlNMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHQzUWtGRGFFUXNTVUZCU1N4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXpzMFFrRkRja0lzVFVGQlRUdDNRa0ZGVWl4TlFVRk5MRU5CUVVNc1IwRkJSeXhWUVVGVkxFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPM2RDUVVOdVJTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRmxCUVZrc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dDNRa0ZEY0VVc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eFpRVUZaTEVWQlFVVXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN2NVSkJRM0pGTzJsQ1FVTkdPMkZCUTBZN1UwRkRSanRSUVVWRUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZETDBJc1RVRkJUU3hyUWtGQmEwSXNSMEZCUnl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVNM1F5eFpRVUZaTEVWQlExb3NVMEZCVXl4RlFVTlVMRlZCUVZVc1JVRkRWaXhoUVVGaExFVkJRMklzVFVGQlRTeERRVU5RTEVOQlFVTTdXVUZGUml4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRFZpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVTBGQlV5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMmRDUVVOc1F5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzWVVGQllTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMjlDUVVOMFF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExHdENRVUZyUWl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2IwSkJRMnhFTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRWRCUVVjN2QwSkJRM1JETEZOQlFWTTdiMEpCUlZnc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMR0ZCUVdFc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdDNRa0ZEZEVNc1RVRkJUU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzNkQ1FVTnNSQ3hOUVVGTkxFVkJRVVVzUjBGQlJ5eHJRa0ZCYTBJc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenQzUWtGRGRrTXNUVUZCVFN4RlFVRkZMRWRCUVVjc2EwSkJRV3RDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdkMEpCUTNaRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZET3pSQ1FVTjJRaXhUUVVGVE8zZENRVWRZTEUxQlFVMHNRMEZCUXl4SFFVRkhMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03ZDBKQlEzWkRMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEZsQlFWa3NSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0M1FrRkROME1zUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1dVRkJXU3hGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8zRkNRVU01UXp0cFFrRkRSanRoUVVOR08xbEJRMFFzU1VGQlNTeERRVUZETEVsQlFVa3NTMEZCU3l4SFFVRkhMRlZCUVZVc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRUdG5Ra0ZEZGtNc1RVRkJUVHRUUVVOVU8xRkJRMFFzVFVGQlRTeE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dFJRVU0zUXl4UFFVRlBMRTFCUVUwc1EwRkJRenRKUVVOb1FpeERRVUZETEVOQlFVTTdRVUZEU2l4RFFVRkRPMEZCYTBKRUxFMUJRVTBzVlVGQlZTeHRRa0ZCYlVJc1EwRkJReXhWUVVGelFqdEpRVU40UkN4VFFVRlRMR05CUVdNc1EwRkRja0lzVlVGQmEwSXNSVUZEYkVJc1NVRkJXU3hGUVVOYUxGZEJRVzFDTEVWQlEyNUNMRXRCUVdkQ0xFVkJRMmhDTEUxQlFXZENPMUZCUldoQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhYUVVGWExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUXpORExFMUJRVTBzVDBGQlR5eEhRVUZITEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRka1VzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1owSkJRM1pETEVsQlFVa3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU03YjBKQlEyaENMRk5CUVZNN1owSkJSVmdzVFVGQlRTeERRVUZETEVkQlFVY3NWVUZCVlN4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4WFFVRlhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZEZGtRc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRNME03VTBGRFJqdEpRVU5JTEVOQlFVTTdTVUZGUkN4VFFVRlRMRmxCUVZrc1EwRkRia0lzUzBGQmIwSXNSVUZEY0VJc1NVRkJXU3hGUVVOYUxGZEJRVzFDTEVWQlEyNUNMRXRCUVdkQ0xFVkJRMmhDTEUxQlFXZENPMUZCUldoQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhYUVVGWExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUXpORExFMUJRVTBzVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEV0QlFVc3NSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenRaUVVWdVJTeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRuUWtGRGRrTXNTVUZCU1N4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF6dHZRa0ZEYUVJc1QwRkJUenRuUWtGRlZDeE5RVUZOTEVOQlFVTXNSMEZCUnl4VlFVRlZMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRmRCUVZjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTjJSQ3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRoUVVNelF6dFRRVU5HTzFGQlEwUXNUMEZCVHp0SlFVTlVMRU5CUVVNN1NVRkZSQ3hQUVVGUExFVkJRVU1zWTBGQll5eEZRVUZGTEZsQlFWa3NSVUZCUXl4RFFVRkRPMEZCUTNoRExFTkJRVU03UVVGVFJDeE5RVUZOTEZWQlFWVXNkVUpCUVhWQ0xFTkJRVU1zVlVGQmMwSTdTVUZETlVRc1QwRkJUeXhUUVVGVExGVkJRVlVzUTBGRGVFSXNTVUZCV1N4RlFVTmFMRXRCUVRCQ0xFVkJRekZDTEdOQlFYbENMRVZCUTNwQ0xGZEJRVzFDTzFGQlJXNUNMRTFCUVUwc1JVRkJReXhQUVVGUExFVkJRVVVzVFVGQlRTeEZRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVVV2UXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NWMEZCVnl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU16UXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFZEJRVWNzUTBGQlF5eGpRVUZqTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU0xUXl4UFFVRlBMRWxCUVVrc1JVRkJSVHRuUWtGRFdDd3JRa0ZCSzBJN1owSkJReTlDTEUxQlFVMHNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhsUVVGbExFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVWMlJDeEpRVUZKTEUxQlFVMHNTMEZCU3l4RFFVRkRMRU5CUVVNN2IwSkJRMllzVFVGQlRUdG5Ra0ZGVWl4TlFVRk5MRlZCUVZVc1IwRkJSeXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hOUVVGTkxFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRM0pGTEV0QlFVc3NUVUZCVFN4VFFVRlRMRWxCUVVrc1ZVRkJWU3hGUVVGRk8yOUNRVU5zUXl4SlFVTkZMRk5CUVZNc1MwRkJTeXhOUVVGTk8zZENRVU53UWl4VFFVRlRMRXRCUVVzc1EwRkJReXhEUVVGRE8zZENRVU5vUWl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF6dDNRa0ZGY0VJc1UwRkJVenR2UWtGRldDeE5RVUZOTEVOQlFVTXNSMEZCUnl4VlFVRlZMRU5CUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eEZRVUZGTEZkQlFWY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yOUNRVU4wUkN4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNZMEZCWXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzVTBGQlV5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMjlDUVVNelJDeExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8ybENRVU4wUWp0aFFVTkdPMU5CUTBZN1VVRkRSQ3hQUVVGUExHTkJRV01zUTBGQlF6dEpRVU40UWl4RFFVRkRMRU5CUVVNN1FVRkRTaXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEdkQ1FVRm5RaXhEUVVNNVFpeE5RVUYxUWl4RlFVTjJRaXhKUVVGWkxFVkJRMW9zVjBGQmJVSXNSVUZEYmtJc1ZVRkJhMElzUlVGRGJFSXNZMEZCWjBNc1JVRkRhRU1zV1VGQk5FSXNSVUZETlVJc1RVRkJaMEk3U1VGRmFFSXNUVUZCVFN4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eFhRVUZYTEVOQlFVTXNUVUZCVFN4RlFVRkZMRlZCUVZVc1EwRkJReXhEUVVGRE8wbEJRemxFTEdOQlFXTXNRMEZCUXl4VlFVRlZMRVZCUVVVc1NVRkJTU3hGUVVGRkxGZEJRVmNzUlVGQlJTeFBRVUZQTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkRMMFFzU1VGQlNTeE5RVUZOTEVWQlFVVTdVVUZEVml4TFFVRkxMRTFCUVUwc1NVRkJTU3hKUVVGSkxFMUJRVTA3V1VGRGRrSXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVVzVjBGQlZ5eEZRVUZGTEU5QlFVOHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenRMUVVNeFJEdEpRVU5FTEU5QlFVOHNUMEZCVHl4RFFVRkRPMEZCUTJwQ0xFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVCc2FXTmxibk5sWEc0Z0tseHVJQ29nUTI5d2VYSnBaMmgwSURJd01Ua2dSMjl2WjJ4bElFeE1ReTRnUVd4c0lGSnBaMmgwY3lCU1pYTmxjblpsWkM1Y2JpQXFYRzRnS2lCTWFXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FYQmhZMmhsSUV4cFkyVnVjMlVzSUZabGNuTnBiMjRnTWk0d0lDaDBhR1VnWENKTWFXTmxibk5sWENJcE8xeHVJQ29nZVc5MUlHMWhlU0J1YjNRZ2RYTmxJSFJvYVhNZ1ptbHNaU0JsZUdObGNIUWdhVzRnWTI5dGNHeHBZVzVqWlNCM2FYUm9JSFJvWlNCTWFXTmxibk5sTGx4dUlDb2dXVzkxSUcxaGVTQnZZblJoYVc0Z1lTQmpiM0I1SUc5bUlIUm9aU0JNYVdObGJuTmxJR0YwWEc0Z0tseHVJQ29nSUNBZ0lHaDBkSEE2THk5M2QzY3VZWEJoWTJobExtOXlaeTlzYVdObGJuTmxjeTlNU1VORlRsTkZMVEl1TUZ4dUlDcGNiaUFxSUZWdWJHVnpjeUJ5WlhGMWFYSmxaQ0JpZVNCaGNIQnNhV05oWW14bElHeGhkeUJ2Y2lCaFozSmxaV1FnZEc4Z2FXNGdkM0pwZEdsdVp5d2djMjltZEhkaGNtVmNiaUFxSUdScGMzUnlhV0oxZEdWa0lIVnVaR1Z5SUhSb1pTQk1hV05sYm5ObElHbHpJR1JwYzNSeWFXSjFkR1ZrSUc5dUlHRnVJRndpUVZNZ1NWTmNJaUJDUVZOSlV5eGNiaUFxSUZkSlZFaFBWVlFnVjBGU1VrRk9WRWxGVXlCUFVpQkRUMDVFU1ZSSlQwNVRJRTlHSUVGT1dTQkxTVTVFTENCbGFYUm9aWElnWlhod2NtVnpjeUJ2Y2lCcGJYQnNhV1ZrTGx4dUlDb2dVMlZsSUhSb1pTQk1hV05sYm5ObElHWnZjaUIwYUdVZ2MzQmxZMmxtYVdNZ2JHRnVaM1ZoWjJVZ1oyOTJaWEp1YVc1bklIQmxjbTFwYzNOcGIyNXpJR0Z1WkZ4dUlDb2diR2x0YVhSaGRHbHZibk1nZFc1a1pYSWdkR2hsSUV4cFkyVnVjMlV1WEc0Z0tpQTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JpQXFMMXh1WEc0dktpcGNiaUFxSUZSb2FYTWdhWE1nWVNCS1lYWmhVMk55YVhCMElISmxhVzF3YkdWdFpXNTBZWFJwYjI0Z2IyWWdWVTFCVUNBb2IzSnBaMmx1WVd3Z2JHbGpaVzV6WlNCaVpXeHZkeWtzSUdaeWIyMWNiaUFxSUhSb1pTQndlWFJvYjI0Z2FXMXdiR1Z0Wlc1MFlYUnBiMjRnWm05MWJtUWdZWFFnYUhSMGNITTZMeTluYVhSb2RXSXVZMjl0TDJ4dFkybHVibVZ6TDNWdFlYQXVYRzRnS2x4dUlDb2dRR0YxZEdodmNpQmhibVI1WTI5bGJtVnVRR2R2YjJkc1pTNWpiMjBnS0VGdVpIa2dRMjlsYm1WdUtWeHVJQ292WEc1Y2JpOHFLbHh1SUNvZ1FHeHBZMlZ1YzJWY2JpQXFJRUpUUkNBekxVTnNZWFZ6WlNCTWFXTmxibk5sWEc0Z0tseHVJQ29nUTI5d2VYSnBaMmgwSUNoaktTQXlNREUzTENCTVpXeGhibVFnVFdOSmJtNWxjMXh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxWEc0Z0tpQlNaV1JwYzNSeWFXSjFkR2x2YmlCaGJtUWdkWE5sSUdsdUlITnZkWEpqWlNCaGJtUWdZbWx1WVhKNUlHWnZjbTF6TENCM2FYUm9JRzl5SUhkcGRHaHZkWFJjYmlBcUlHMXZaR2xtYVdOaGRHbHZiaXdnWVhKbElIQmxjbTFwZEhSbFpDQndjbTkyYVdSbFpDQjBhR0YwSUhSb1pTQm1iMnhzYjNkcGJtY2dZMjl1WkdsMGFXOXVjeUJoY21VZ2JXVjBPbHh1SUNwY2JpQXFJQ29nVW1Wa2FYTjBjbWxpZFhScGIyNXpJRzltSUhOdmRYSmpaU0JqYjJSbElHMTFjM1FnY21WMFlXbHVJSFJvWlNCaFltOTJaU0JqYjNCNWNtbG5hSFFnYm05MGFXTmxMQ0IwYUdselhHNGdLaUFnSUd4cGMzUWdiMllnWTI5dVpHbDBhVzl1Y3lCaGJtUWdkR2hsSUdadmJHeHZkMmx1WnlCa2FYTmpiR0ZwYldWeUxseHVJQ3BjYmlBcUlDb2dVbVZrYVhOMGNtbGlkWFJwYjI1eklHbHVJR0pwYm1GeWVTQm1iM0p0SUcxMWMzUWdjbVZ3Y205a2RXTmxJSFJvWlNCaFltOTJaU0JqYjNCNWNtbG5hSFFnYm05MGFXTmxMRnh1SUNvZ0lDQjBhR2x6SUd4cGMzUWdiMllnWTI5dVpHbDBhVzl1Y3lCaGJtUWdkR2hsSUdadmJHeHZkMmx1WnlCa2FYTmpiR0ZwYldWeUlHbHVJSFJvWlNCa2IyTjFiV1Z1ZEdGMGFXOXVYRzRnS2lBZ0lHRnVaQzl2Y2lCdmRHaGxjaUJ0WVhSbGNtbGhiSE1nY0hKdmRtbGtaV1FnZDJsMGFDQjBhR1VnWkdsemRISnBZblYwYVc5dUxseHVJQ3BjYmlBcUlDb2dUbVZwZEdobGNpQjBhR1VnYm1GdFpTQnZaaUIwYUdVZ1kyOXdlWEpwWjJoMElHaHZiR1JsY2lCdWIzSWdkR2hsSUc1aGJXVnpJRzltSUdsMGMxeHVJQ29nSUNCamIyNTBjbWxpZFhSdmNuTWdiV0Y1SUdKbElIVnpaV1FnZEc4Z1pXNWtiM0p6WlNCdmNpQndjbTl0YjNSbElIQnliMlIxWTNSeklHUmxjbWwyWldRZ1puSnZiVnh1SUNvZ0lDQjBhR2x6SUhOdlpuUjNZWEpsSUhkcGRHaHZkWFFnYzNCbFkybG1hV01nY0hKcGIzSWdkM0pwZEhSbGJpQndaWEp0YVhOemFXOXVMbHh1SUNwY2JpQXFJRlJJU1ZNZ1UwOUdWRmRCVWtVZ1NWTWdVRkpQVmtsRVJVUWdRbGtnVkVoRklFTlBVRmxTU1VkSVZDQklUMHhFUlZKVElFRk9SQ0JEVDA1VVVrbENWVlJQVWxNZ1hDSkJVeUJKVTF3aVhHNGdLaUJCVGtRZ1FVNVpJRVZZVUZKRlUxTWdUMUlnU1UxUVRFbEZSQ0JYUVZKU1FVNVVTVVZUTENCSlRrTk1WVVJKVGtjc0lFSlZWQ0JPVDFRZ1RFbE5TVlJGUkNCVVR5d2dWRWhGWEc0Z0tpQkpUVkJNU1VWRUlGZEJVbEpCVGxSSlJWTWdUMFlnVFVWU1EwaEJUbFJCUWtsTVNWUlpJRUZPUkNCR1NWUk9SVk5USUVaUFVpQkJJRkJCVWxSSlExVk1RVklnVUZWU1VFOVRSU0JCVWtWY2JpQXFJRVJKVTBOTVFVbE5SVVF1SUVsT0lFNVBJRVZXUlU1VUlGTklRVXhNSUZSSVJTQkRUMUJaVWtsSFNGUWdTRTlNUkVWU0lFOVNJRU5QVGxSU1NVSlZWRTlTVXlCQ1JTQk1TVUZDVEVWY2JpQXFJRVpQVWlCQlRsa2dSRWxTUlVOVUxDQkpUa1JKVWtWRFZDd2dTVTVEU1VSRlRsUkJUQ3dnVTFCRlEwbEJUQ3dnUlZoRlRWQk1RVkpaTENCUFVpQkRUMDVUUlZGVlJVNVVTVUZNWEc0Z0tpQkVRVTFCUjBWVElDaEpUa05NVlVSSlRrY3NJRUpWVkNCT1QxUWdURWxOU1ZSRlJDQlVUeXdnVUZKUFExVlNSVTFGVGxRZ1QwWWdVMVZDVTFSSlZGVlVSU0JIVDA5RVV5QlBVbHh1SUNvZ1UwVlNWa2xEUlZNN0lFeFBVMU1nVDBZZ1ZWTkZMQ0JFUVZSQkxDQlBVaUJRVWs5R1NWUlRPeUJQVWlCQ1ZWTkpUa1ZUVXlCSlRsUkZVbEpWVUZSSlQwNHBJRWhQVjBWV1JWSmNiaUFxSUVOQlZWTkZSQ0JCVGtRZ1QwNGdRVTVaSUZSSVJVOVNXU0JQUmlCTVNVRkNTVXhKVkZrc0lGZElSVlJJUlZJZ1NVNGdRMDlPVkZKQlExUXNJRk5VVWtsRFZDQk1TVUZDU1V4SlZGa3NYRzRnS2lCUFVpQlVUMUpVSUNoSlRrTk1WVVJKVGtjZ1RrVkhURWxIUlU1RFJTQlBVaUJQVkVoRlVsZEpVMFVwSUVGU1NWTkpUa2NnU1U0Z1FVNVpJRmRCV1NCUFZWUWdUMFlnVkVoRklGVlRSVnh1SUNvZ1QwWWdWRWhKVXlCVFQwWlVWMEZTUlN3Z1JWWkZUaUJKUmlCQlJGWkpVMFZFSUU5R0lGUklSU0JRVDFOVFNVSkpURWxVV1NCUFJpQlRWVU5JSUVSQlRVRkhSUzVjYmlBcUwxeHVYRzVwYlhCdmNuUWdLaUJoY3lCb1pXRndJR1p5YjIwZ0p5NHZhR1ZoY0NjN1hHNXBiWEJ2Y25RZ0tpQmhjeUJ0WVhSeWFYZ2dabkp2YlNBbkxpOXRZWFJ5YVhnbk8xeHVhVzF3YjNKMElDb2dZWE1nZEhKbFpTQm1jbTl0SUNjdUwzUnlaV1VuTzF4dWFXMXdiM0owSUNvZ1lYTWdkWFJwYkhNZ1puSnZiU0FuTGk5MWRHbHNjeWM3WEc1cGJYQnZjblFnZTFKaGJtUnZiVVp1TENCV1pXTjBiM0p6TENCRWFYTjBZVzVqWlVadUxDQldaV04wYjNKOUlHWnliMjBnSnk0dmRXMWhjQ2M3WEc1Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsSUdFZ2RtVnljMmx2YmlCdlppQnVaV0Z5WlhOMElHNWxhV2RvWW05eUlHUmxjMk5sYm5RdVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ0WVd0bFRrNUVaWE5qWlc1MEtHUnBjM1JoYm1ObFJtNDZJRVJwYzNSaGJtTmxSbTRzSUhKaGJtUnZiVG9nVW1GdVpHOXRSbTRwSUh0Y2JpQWdjbVYwZFhKdUlHWjFibU4wYVc5dUlHNU9SR1Z6WTJWdWRDaGNiaUFnSUNCa1lYUmhPaUJXWldOMGIzSXNYRzRnSUNBZ2JHVmhaa0Z5Y21GNU9pQldaV04wYjNKekxGeHVJQ0FnSUc1T1pXbG5hR0p2Y25NNklHNTFiV0psY2l4Y2JpQWdJQ0J1U1hSbGNuTWdQU0F4TUN4Y2JpQWdJQ0J0WVhoRFlXNWthV1JoZEdWeklEMGdOVEFzWEc0Z0lDQWdaR1ZzZEdFZ1BTQXdMakF3TVN4Y2JpQWdJQ0J5YUc4Z1BTQXdMalVzWEc0Z0lDQWdjbkJVY21WbFNXNXBkQ0E5SUhSeWRXVmNiaUFnS1NCN1hHNGdJQ0FnWTI5dWMzUWdibFpsY25ScFkyVnpJRDBnWkdGMFlTNXNaVzVuZEdnN1hHNGdJQ0FnWTI5dWMzUWdZM1Z5Y21WdWRFZHlZWEJvSUQwZ2FHVmhjQzV0WVd0bFNHVmhjQ2hrWVhSaExteGxibWQwYUN3Z2JrNWxhV2RvWW05eWN5azdYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR1JoZEdFdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJR052Ym5OMElHbHVaR2xqWlhNZ1BTQm9aV0Z3TG5KbGFtVmpkR2x2YmxOaGJYQnNaU2h1VG1WcFoyaGliM0p6TENCa1lYUmhMbXhsYm1kMGFDd2djbUZ1Wkc5dEtUdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHb2dQU0F3T3lCcUlEd2dhVzVrYVdObGN5NXNaVzVuZEdnN0lHb3JLeWtnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JrSUQwZ1pHbHpkR0Z1WTJWR2JpaGtZWFJoVzJsZExDQmtZWFJoVzJsdVpHbGpaWE5iYWwxZEtUdGNibHh1SUNBZ0lDQWdJQ0JvWldGd0xtaGxZWEJRZFhOb0tHTjFjbkpsYm5SSGNtRndhQ3dnYVN3Z1pDd2dhVzVrYVdObGMxdHFYU3dnTVNrN1hHNGdJQ0FnSUNBZ0lHaGxZWEF1YUdWaGNGQjFjMmdvWTNWeWNtVnVkRWR5WVhCb0xDQnBibVJwWTJWelcycGRMQ0JrTENCcExDQXhLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLSEp3VkhKbFpVbHVhWFFwSUh0Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUc0Z1BTQXdPeUJ1SUR3Z2JHVmhaa0Z5Y21GNUxteGxibWQwYURzZ2Jpc3JLU0I3WEc0Z0lDQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2JHVmhaa0Z5Y21GNVcyNWRMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0d4bFlXWkJjbkpoZVZ0dVhWdHBYU0E4SURBcFhHNGdJQ0FnSUNBZ0lDQWdJQ0JpY21WaGF6dGNibHh1SUNBZ0lDQWdJQ0FnSUdadmNpQW9iR1YwSUdvZ1BTQnBJQ3NnTVRzZ2FpQThJR3hsWVdaQmNuSmhlVnR1WFM1c1pXNW5kR2c3SUdvckt5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR3hsWVdaQmNuSmhlVnR1WFZ0cVhTQThJREFwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JrSUQwZ1pHbHpkR0Z1WTJWR2JpaGtZWFJoVzJ4bFlXWkJjbkpoZVZ0dVhWdHBYVjBzSUdSaGRHRmJiR1ZoWmtGeWNtRjVXMjVkVzJwZFhTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCb1pXRndMbWhsWVhCUWRYTm9LR04xY25KbGJuUkhjbUZ3YUN3Z2JHVmhaa0Z5Y21GNVcyNWRXMmxkTENCa0xDQnNaV0ZtUVhKeVlYbGJibDFiYWwwc0lERXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FHVmhjQzVvWldGd1VIVnphQ2hqZFhKeVpXNTBSM0poY0dnc0lHeGxZV1pCY25KaGVWdHVYVnRxWFN3Z1pDd2diR1ZoWmtGeWNtRjVXMjVkVzJsZExDQXhLVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCbWIzSWdLR3hsZENCdUlEMGdNRHNnYmlBOElHNUpkR1Z5Y3pzZ2Jpc3JLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQmpZVzVrYVdSaGRHVk9aV2xuYUdKdmNuTWdQU0JvWldGd0xtSjFhV3hrUTJGdVpHbGtZWFJsY3loY2JpQWdJQ0FnSUNBZ1kzVnljbVZ1ZEVkeVlYQm9MRnh1SUNBZ0lDQWdJQ0J1Vm1WeWRHbGpaWE1zWEc0Z0lDQWdJQ0FnSUc1T1pXbG5hR0p2Y25Nc1hHNGdJQ0FnSUNBZ0lHMWhlRU5oYm1ScFpHRjBaWE1zWEc0Z0lDQWdJQ0FnSUhKaGJtUnZiVnh1SUNBZ0lDQWdLVHRjYmx4dUlDQWdJQ0FnYkdWMElHTWdQU0F3TzF4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCdVZtVnlkR2xqWlhNN0lHa3JLeWtnZTF4dUlDQWdJQ0FnSUNCbWIzSWdLR3hsZENCcUlEMGdNRHNnYWlBOElHMWhlRU5oYm1ScFpHRjBaWE03SUdvckt5a2dlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSEFnUFNCTllYUm9MbVpzYjI5eUtHTmhibVJwWkdGMFpVNWxhV2RvWW05eWMxc3dYVnRwWFZ0cVhTazdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tIQWdQQ0F3SUh4OElIVjBhV3h6TG5SaGRWSmhibVFvY21GdVpHOXRLU0E4SUhKb2J5bGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dVhHNGdJQ0FnSUNBZ0lDQWdabTl5SUNoc1pYUWdheUE5SURBN0lHc2dQQ0J0WVhoRFlXNWthV1JoZEdWek95QnJLeXNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElIRWdQU0JOWVhSb0xtWnNiMjl5S0dOaGJtUnBaR0YwWlU1bGFXZG9ZbTl5YzFzd1hWdHBYVnRyWFNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmphaUE5SUdOaGJtUnBaR0YwWlU1bGFXZG9ZbTl5YzFzeVhWdHBYVnRxWFR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHTnJJRDBnWTJGdVpHbGtZWFJsVG1WcFoyaGliM0p6V3pKZFcybGRXMnRkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hFZ1BDQXdJSHg4SUNnaFkyb2dKaVlnSVdOcktTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNWNibHh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWkNBOUlHUnBjM1JoYm1ObFJtNG9aR0YwWVZ0d1hTd2daR0YwWVZ0eFhTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCaklDczlJR2hsWVhBdWFHVmhjRkIxYzJnb1kzVnljbVZ1ZEVkeVlYQm9MQ0J3TENCa0xDQnhMQ0F4S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR01nS3owZ2FHVmhjQzVvWldGd1VIVnphQ2hqZFhKeVpXNTBSM0poY0dnc0lIRXNJR1FzSUhBc0lERXBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2FXWWdLR01nUEQwZ1pHVnNkR0VnS2lCdVRtVnBaMmhpYjNKeklDb2daR0YwWVM1c1pXNW5kR2dwWEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnSUNCamIyNXpkQ0J6YjNKMFpXUWdQU0JvWldGd0xtUmxhR1ZoY0ZOdmNuUW9ZM1Z5Y21WdWRFZHlZWEJvS1R0Y2JpQWdJQ0J5WlhSMWNtNGdjMjl5ZEdWa08xeHVJQ0I5TzF4dWZWeHVYRzVsZUhCdmNuUWdkSGx3WlNCSmJtbDBSbkp2YlZKaGJtUnZiVVp1SUQwZ0tGeHVJQ0J1VG1WcFoyaGliM0p6T2lCdWRXMWlaWElzWEc0Z0lHUmhkR0U2SUZabFkzUnZjaXhjYmlBZ2NYVmxjbmxRYjJsdWRITTZJRlpsWTNSdmNpeGNiaUFnWDJobFlYQTZJR2hsWVhBdVNHVmhjQ3hjYmlBZ2NtRnVaRzl0T2lCU1lXNWtiMjFHYmx4dUtTQTlQaUIyYjJsa08xeHVYRzVsZUhCdmNuUWdkSGx3WlNCSmJtbDBSbkp2YlZSeVpXVkdiaUE5SUNoY2JpQWdYM1J5WldVNklIUnlaV1V1Um14aGRGUnlaV1VzWEc0Z0lHUmhkR0U2SUZabFkzUnZjaXhjYmlBZ2NYVmxjbmxRYjJsdWRITTZJRlpsWTNSdmNpeGNiaUFnWDJobFlYQTZJR2hsWVhBdVNHVmhjQ3hjYmlBZ2NtRnVaRzl0T2lCU1lXNWtiMjFHYmx4dUtTQTlQaUIyYjJsa08xeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdiV0ZyWlVsdWFYUnBZV3hwZW1GMGFXOXVjeWhrYVhOMFlXNWpaVVp1T2lCRWFYTjBZVzVqWlVadUtTQjdYRzRnSUdaMWJtTjBhVzl1SUdsdWFYUkdjbTl0VW1GdVpHOXRLRnh1SUNBZ0lHNU9aV2xuYUdKdmNuTTZJRzUxYldKbGNpeGNiaUFnSUNCa1lYUmhPaUJXWldOMGIzSXNYRzRnSUNBZ2NYVmxjbmxRYjJsdWRITTZJRlpsWTNSdmNpeGNiaUFnSUNCZmFHVmhjRG9nYUdWaGNDNUlaV0Z3TEZ4dUlDQWdJSEpoYm1SdmJUb2dVbUZ1Wkc5dFJtNWNiaUFnS1NCN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCeGRXVnllVkJ2YVc1MGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdhVzVrYVdObGN5QTlJSFYwYVd4ekxuSmxhbVZqZEdsdmJsTmhiWEJzWlNodVRtVnBaMmhpYjNKekxDQmtZWFJoTG14bGJtZDBhQ3dnY21GdVpHOXRLVHRjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR29nUFNBd095QnFJRHdnYVc1a2FXTmxjeTVzWlc1bmRHZzdJR29yS3lrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvYVc1a2FXTmxjMXRxWFNBOElEQXBYRzRnSUNBZ0lDQWdJQ0FnWTI5dWRHbHVkV1U3WEc1Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWkNBOUlHUnBjM1JoYm1ObFJtNG9aR0YwWVZ0cGJtUnBZMlZ6VzJwZFhTd2djWFZsY25sUWIybHVkSE5iYVYwcE8xeHVJQ0FnSUNBZ0lDQm9aV0Z3TG1obFlYQlFkWE5vS0Y5b1pXRndMQ0JwTENCa0xDQnBibVJwWTJWelcycGRMQ0F4S1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCbWRXNWpkR2x2YmlCcGJtbDBSbkp2YlZSeVpXVW9YRzRnSUNBZ1gzUnlaV1U2SUhSeVpXVXVSbXhoZEZSeVpXVXNYRzRnSUNBZ1pHRjBZVG9nVm1WamRHOXlMRnh1SUNBZ0lIRjFaWEo1VUc5cGJuUnpPaUJXWldOMGIzSXNYRzRnSUNBZ1gyaGxZWEE2SUdobFlYQXVTR1ZoY0N4Y2JpQWdJQ0J5WVc1a2IyMDZJRkpoYm1SdmJVWnVYRzRnSUNrZ2UxeHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2NYVmxjbmxRYjJsdWRITXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR2x1WkdsalpYTWdQU0IwY21WbExuTmxZWEpqYUVac1lYUlVjbVZsS0hGMVpYSjVVRzlwYm5SelcybGRMQ0JmZEhKbFpTd2djbUZ1Wkc5dEtUdGNibHh1SUNBZ0lDQWdabTl5SUNoc1pYUWdhaUE5SURBN0lHb2dQQ0JwYm1ScFkyVnpMbXhsYm1kMGFEc2dhaXNyS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hwYm1ScFkyVnpXMnBkSUR3Z01DbGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNDdYRzVjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaQ0E5SUdScGMzUmhibU5sUm00b1pHRjBZVnRwYm1ScFkyVnpXMnBkWFN3Z2NYVmxjbmxRYjJsdWRITmJhVjBwTzF4dUlDQWdJQ0FnSUNCb1pXRndMbWhsWVhCUWRYTm9LRjlvWldGd0xDQnBMQ0JrTENCcGJtUnBZMlZ6VzJwZExDQXhLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1TzF4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUh0cGJtbDBSbkp2YlZKaGJtUnZiU3dnYVc1cGRFWnliMjFVY21WbGZUdGNibjFjYmx4dVpYaHdiM0owSUhSNWNHVWdVMlZoY21Ob1JtNGdQU0FvWEc0Z0lHUmhkR0U2SUZabFkzUnZjaXhjYmlBZ1ozSmhjR2c2SUcxaGRISnBlQzVUY0dGeWMyVk5ZWFJ5YVhnc1hHNGdJR2x1YVhScFlXeHBlbUYwYVc5dU9pQm9aV0Z3TGtobFlYQXNYRzRnSUhGMVpYSjVVRzlwYm5Sek9pQldaV04wYjNKY2Jpa2dQVDRnYUdWaGNDNUlaV0Z3TzF4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2JXRnJaVWx1YVhScFlXeHBlbVZrVGs1VFpXRnlZMmdvWkdsemRHRnVZMlZHYmpvZ1JHbHpkR0Z1WTJWR2Jpa2dlMXh1SUNCeVpYUjFjbTRnWm5WdVkzUnBiMjRnYm01VFpXRnlZMmhHYmloY2JpQWdJQ0JrWVhSaE9pQldaV04wYjNJc1hHNGdJQ0FnWjNKaGNHZzZJRzFoZEhKcGVDNVRjR0Z5YzJWTllYUnlhWGdzWEc0Z0lDQWdhVzVwZEdsaGJHbDZZWFJwYjI0NklHaGxZWEF1U0dWaGNDeGNiaUFnSUNCeGRXVnllVkJ2YVc1MGN6b2dWbVZqZEc5eVhHNGdJQ2tnZTF4dUlDQWdJR052Ym5OMElIdHBibVJwWTJWekxDQnBibVJ3ZEhKOUlEMGdiV0YwY21sNExtZGxkRU5UVWlobmNtRndhQ2s3WEc1Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhGMVpYSjVVRzlwYm5SekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQjBjbWxsWkNBOUlHNWxkeUJUWlhRb2FXNXBkR2xoYkdsNllYUnBiMjViTUYxYmFWMHBPMXh1SUNBZ0lDQWdkMmhwYkdVZ0tIUnlkV1VwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdSbWx1WkNCemJXRnNiR1Z6ZENCbWJHRm5aMlZrSUhabGNuUmxlRnh1SUNBZ0lDQWdJQ0JqYjI1emRDQjJaWEowWlhnZ1BTQm9aV0Z3TG5OdFlXeHNaWE4wUm14aFoyZGxaQ2hwYm1sMGFXRnNhWHBoZEdsdmJpd2dhU2s3WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLSFpsY25SbGVDQTlQVDBnTFRFcFhHNGdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNWNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1kyRnVaR2xrWVhSbGN5QTlJR2x1WkdsalpYTXVjMnhwWTJVb2FXNWtjSFJ5VzNabGNuUmxlRjBzSUdsdVpIQjBjbHQyWlhKMFpYZ2dLeUF4WFNrN1hHNGdJQ0FnSUNBZ0lHWnZjaUFvWTI5dWMzUWdZMkZ1Wkdsa1lYUmxJRzltSUdOaGJtUnBaR0YwWlhNcElIdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVc1a2FXUmhkR1VnUFQwOUlIWmxjblJsZUNCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGdVpHbGtZWFJsSUQwOVBTQXRNU0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdkSEpwWldRdWFHRnpLR05oYm1ScFpHRjBaU2xjYmlBZ0lDQWdJQ0FnSUNBcFhHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1MGFXNTFaVHRjYmx4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUdRZ1BTQmthWE4wWVc1alpVWnVLR1JoZEdGYlkyRnVaR2xrWVhSbFhTd2djWFZsY25sUWIybHVkSE5iYVYwcE8xeHVJQ0FnSUNBZ0lDQWdJR2hsWVhBdWRXNWphR1ZqYTJWa1NHVmhjRkIxYzJnb2FXNXBkR2xoYkdsNllYUnBiMjRzSUdrc0lHUXNJR05oYm1ScFpHRjBaU3dnTVNrN1hHNGdJQ0FnSUNBZ0lDQWdkSEpwWldRdVlXUmtLR05oYm1ScFpHRjBaU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHbHVhWFJwWVd4cGVtRjBhVzl1TzF4dUlDQjlPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2FXNXBkR2xoYkdsNlpWTmxZWEpqYUNoY2JpQWdabTl5WlhOME9pQjBjbVZsTGtac1lYUlVjbVZsVzEwc1hHNGdJR1JoZEdFNklGWmxZM1J2Y2l4Y2JpQWdjWFZsY25sUWIybHVkSE02SUZabFkzUnZjaXhjYmlBZ2JrNWxhV2RvWW05eWN6b2diblZ0WW1WeUxGeHVJQ0JwYm1sMFJuSnZiVkpoYm1SdmJUb2dTVzVwZEVaeWIyMVNZVzVrYjIxR2JpeGNiaUFnYVc1cGRFWnliMjFVY21WbE9pQkpibWwwUm5KdmJWUnlaV1ZHYml4Y2JpQWdjbUZ1Wkc5dE9pQlNZVzVrYjIxR2JseHVLU0I3WEc0Z0lHTnZibk4wSUhKbGMzVnNkSE1nUFNCb1pXRndMbTFoYTJWSVpXRndLSEYxWlhKNVVHOXBiblJ6TG14bGJtZDBhQ3dnYms1bGFXZG9ZbTl5Y3lrN1hHNGdJR2x1YVhSR2NtOXRVbUZ1Wkc5dEtHNU9aV2xuYUdKdmNuTXNJR1JoZEdFc0lIRjFaWEo1VUc5cGJuUnpMQ0J5WlhOMWJIUnpMQ0J5WVc1a2IyMHBPMXh1SUNCcFppQW9abTl5WlhOMEtTQjdYRzRnSUNBZ1ptOXlJQ2hqYjI1emRDQjBjbVZsSUc5bUlHWnZjbVZ6ZENsY2JpQWdJQ0FnSUdsdWFYUkdjbTl0VkhKbFpTaDBjbVZsTENCa1lYUmhMQ0J4ZFdWeWVWQnZhVzUwY3l3Z2NtVnpkV3gwY3l3Z2NtRnVaRzl0S1R0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnY21WemRXeDBjenRjYm4xY2JpSmRmUT09IiwiaW1wb3J0IGlzQXJyYXkgZnJvbSAnaXMtYW55LWFycmF5JztcblxuaW1wb3J0IGVycm9yQ2FsY3VsYXRpb24gZnJvbSAnLi9lcnJvckNhbGN1bGF0aW9uJztcbmltcG9ydCBzdGVwIGZyb20gJy4vc3RlcCc7XG5cbi8qKlxuICogQ3VydmUgZml0dGluZyBhbGdvcml0aG1cbiAqIEBwYXJhbSB7e3g6QXJyYXk8bnVtYmVyPiwgeTpBcnJheTxudW1iZXI+fX0gZGF0YSAtIEFycmF5IG9mIHBvaW50cyB0byBmaXQgaW4gdGhlIGZvcm1hdCBbeDEsIHgyLCAuLi4gXSwgW3kxLCB5MiwgLi4uIF1cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtZXRlcml6ZWRGdW5jdGlvbiAtIFRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gd2l0aCB0aGUgaW5kZXBlbmRlbnQgdmFyaWFibGUgYXMgYSBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBPcHRpb25zIG9iamVjdFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmRhbXBpbmddIC0gTGV2ZW5iZXJnLU1hcnF1YXJkdCBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5ncmFkaWVudERpZmZlcmVuY2UgPSAxMGUtMl0gLSBBZGp1c3RtZW50IGZvciBkZWNyZWFzZSB0aGUgZGFtcGluZyBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMubWluVmFsdWVzXSAtIE1pbmltdW0gYWxsb3dlZCB2YWx1ZXMgZm9yIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMubWF4VmFsdWVzXSAtIE1heGltdW0gYWxsb3dlZCB2YWx1ZXMgZm9yIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuaW5pdGlhbFZhbHVlc10gLSBBcnJheSBvZiBpbml0aWFsIHBhcmFtZXRlciB2YWx1ZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhJdGVyYXRpb25zID0gMTAwXSAtIE1heGltdW0gb2YgYWxsb3dlZCBpdGVyYXRpb25zXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZXJyb3JUb2xlcmFuY2UgPSAxMGUtM10gLSBNaW5pbXVtIHVuY2VydGFpbnR5IGFsbG93ZWQgZm9yIGVhY2ggcG9pbnRcbiAqIEByZXR1cm4ge3twYXJhbWV0ZXJWYWx1ZXM6IEFycmF5PG51bWJlcj4sIHBhcmFtZXRlckVycm9yOiBudW1iZXIsIGl0ZXJhdGlvbnM6IG51bWJlcn19XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxldmVuYmVyZ01hcnF1YXJkdChcbiAgZGF0YSxcbiAgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLFxuICBvcHRpb25zID0ge30sXG4pIHtcbiAgbGV0IHtcbiAgICBtYXhJdGVyYXRpb25zID0gMTAwLFxuICAgIGdyYWRpZW50RGlmZmVyZW5jZSA9IDEwZS0yLFxuICAgIGRhbXBpbmcgPSAwLFxuICAgIGVycm9yVG9sZXJhbmNlID0gMTBlLTMsXG4gICAgbWluVmFsdWVzLFxuICAgIG1heFZhbHVlcyxcbiAgICBpbml0aWFsVmFsdWVzLFxuICB9ID0gb3B0aW9ucztcblxuICBpZiAoZGFtcGluZyA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGFtcGluZyBvcHRpb24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICB9IGVsc2UgaWYgKCFkYXRhLnggfHwgIWRhdGEueSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGRhdGEgcGFyYW1ldGVyIG11c3QgaGF2ZSB4IGFuZCB5IGVsZW1lbnRzJyk7XG4gIH0gZWxzZSBpZiAoXG4gICAgIWlzQXJyYXkoZGF0YS54KSB8fFxuICAgIGRhdGEueC5sZW5ndGggPCAyIHx8XG4gICAgIWlzQXJyYXkoZGF0YS55KSB8fFxuICAgIGRhdGEueS5sZW5ndGggPCAyXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdUaGUgZGF0YSBwYXJhbWV0ZXIgZWxlbWVudHMgbXVzdCBiZSBhbiBhcnJheSB3aXRoIG1vcmUgdGhhbiAyIHBvaW50cycsXG4gICAgKTtcbiAgfSBlbHNlIGlmIChkYXRhLngubGVuZ3RoICE9PSBkYXRhLnkubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGF0YSBwYXJhbWV0ZXIgZWxlbWVudHMgbXVzdCBoYXZlIHRoZSBzYW1lIHNpemUnKTtcbiAgfVxuXG4gIGxldCBwYXJhbWV0ZXJzID1cbiAgICBpbml0aWFsVmFsdWVzIHx8IG5ldyBBcnJheShwYXJhbWV0ZXJpemVkRnVuY3Rpb24ubGVuZ3RoKS5maWxsKDEpO1xuICBsZXQgcGFyTGVuID0gcGFyYW1ldGVycy5sZW5ndGg7XG4gIG1heFZhbHVlcyA9IG1heFZhbHVlcyB8fCBuZXcgQXJyYXkocGFyTGVuKS5maWxsKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcbiAgbWluVmFsdWVzID0gbWluVmFsdWVzIHx8IG5ldyBBcnJheShwYXJMZW4pLmZpbGwoTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpO1xuXG4gIGlmIChtYXhWYWx1ZXMubGVuZ3RoICE9PSBtaW5WYWx1ZXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtaW5WYWx1ZXMgYW5kIG1heFZhbHVlcyBtdXN0IGJlIHRoZSBzYW1lIHNpemUnKTtcbiAgfVxuXG4gIGlmICghaXNBcnJheShwYXJhbWV0ZXJzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW5pdGlhbFZhbHVlcyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIH1cblxuICBsZXQgZXJyb3IgPSBlcnJvckNhbGN1bGF0aW9uKGRhdGEsIHBhcmFtZXRlcnMsIHBhcmFtZXRlcml6ZWRGdW5jdGlvbik7XG5cbiAgbGV0IGNvbnZlcmdlZCA9IGVycm9yIDw9IGVycm9yVG9sZXJhbmNlO1xuXG4gIGxldCBpdGVyYXRpb247XG4gIGZvciAoaXRlcmF0aW9uID0gMDsgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucyAmJiAhY29udmVyZ2VkOyBpdGVyYXRpb24rKykge1xuICAgIHBhcmFtZXRlcnMgPSBzdGVwKFxuICAgICAgZGF0YSxcbiAgICAgIHBhcmFtZXRlcnMsXG4gICAgICBkYW1waW5nLFxuICAgICAgZ3JhZGllbnREaWZmZXJlbmNlLFxuICAgICAgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLFxuICAgICk7XG5cbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHBhckxlbjsgaysrKSB7XG4gICAgICBwYXJhbWV0ZXJzW2tdID0gTWF0aC5taW4oXG4gICAgICAgIE1hdGgubWF4KG1pblZhbHVlc1trXSwgcGFyYW1ldGVyc1trXSksXG4gICAgICAgIG1heFZhbHVlc1trXSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZXJyb3IgPSBlcnJvckNhbGN1bGF0aW9uKGRhdGEsIHBhcmFtZXRlcnMsIHBhcmFtZXRlcml6ZWRGdW5jdGlvbik7XG4gICAgaWYgKGlzTmFOKGVycm9yKSkgYnJlYWs7XG4gICAgY29udmVyZ2VkID0gZXJyb3IgPD0gZXJyb3JUb2xlcmFuY2U7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhcmFtZXRlclZhbHVlczogcGFyYW1ldGVycyxcbiAgICBwYXJhbWV0ZXJFcnJvcjogZXJyb3IsXG4gICAgaXRlcmF0aW9uczogaXRlcmF0aW9uLFxuICB9O1xufVxuIiwiaW1wb3J0IHsgZG1MaW5lYXJJbmRleCB9IGZyb20gJy4uL2Rpc3RhbmNlLW1hdHJpeCc7XG5leHBvcnQgY2xhc3MgVFNORSB7XG4gICAgYXNzZXJ0KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICAgICAgICBpZiAoIWNvbmRpdGlvbilcbiAgICAgICAgICAgIHRocm93IG1lc3NhZ2UgfHwgJ0Fzc2VydGlvbiBmYWlsZWQnO1xuICAgIH1cbiAgICAvLyBzeW50YXggc3VnYXJcbiAgICBnZXRvcHQob3B0LCBmaWVsZCwgZGVmYXVsdHZhbCkge1xuICAgICAgICBpZiAob3B0Lmhhc093blByb3BlcnR5KGZpZWxkKSlcbiAgICAgICAgICAgIHJldHVybiBvcHRbZmllbGRdO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdHZhbDtcbiAgICB9XG4gICAgZ2F1c3NSYW5kb20oKSB7XG4gICAgICAgIGlmICh0aGlzLnJldHVyblYpIHtcbiAgICAgICAgICAgIHRoaXMucmV0dXJuViA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudlZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHUgPSAyICogdGhpcy5yYW5kb20oKSAtIDE7XG4gICAgICAgIGNvbnN0IHYgPSAyICogdGhpcy5yYW5kb20oKSAtIDE7XG4gICAgICAgIGNvbnN0IHIgPSB1ICogdSArIHYgKiB2O1xuICAgICAgICBpZiAociA9PT0gMCB8fCByID4gMSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdhdXNzUmFuZG9tKCk7XG4gICAgICAgIGNvbnN0IGMgPSBNYXRoLnNxcnQoLTIgKiBNYXRoLmxvZyhyKSAvIHIpO1xuICAgICAgICB0aGlzLnZWYWx1ZSA9IHYgKiBjOyAvLyBjYWNoZSB0aGlzIGZvciBuZXh0IGZ1bmN0aW9uIGNhbGwgZm9yIGVmZmljaWVuY3lcbiAgICAgICAgdGhpcy5yZXR1cm5WID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHUgKiBjO1xuICAgIH1cbiAgICAvLyByZXR1cm4gcmFuZG9tIG5vcm1hbCBudW1iZXJcbiAgICByYW5kbihtdSwgc3RkKSB7XG4gICAgICAgIHJldHVybiBtdSArIHRoaXMuZ2F1c3NSYW5kb20oKSAqIHN0ZDtcbiAgICB9XG4gICAgLy8gdXRpbGl0aXR5IHRoYXQgY3JlYXRlcyBjb250aWd1b3VzIHZlY3RvciBvZiB6ZXJvcyBvZiBzaXplIG5cbiAgICB6ZXJvcyhuKSB7XG4gICAgICAgIGlmICh0eXBlb2YgKG4pID09PSAndW5kZWZpbmVkJyB8fCBpc05hTihuKSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KCk7XG4gICAgICAgIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAvLyBsYWNraW5nIGJyb3dzZXIgc3VwcG9ydFxuICAgICAgICAgICAgY29uc3QgYXJyID0gbmV3IEZsb2F0MzJBcnJheShuKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKVxuICAgICAgICAgICAgICAgIGFycltpXSA9IDA7XG4gICAgICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkobik7IC8vIHR5cGVkIGFycmF5cyBhcmUgZmFzdGVyXG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gdXRpbGl0eSB0aGF0IHJldHVybnMgMmQgYXJyYXkgZmlsbGVkIHdpdGggcmFuZG9tIG51bWJlcnNcbiAgICAvLyBvciB3aXRoIHZhbHVlIHMsIGlmIHByb3ZpZGVkXG4gICAgcmFuZG4yZChuLCBkLCBzKSB7XG4gICAgICAgIGNvbnN0IHVzZXMgPSB0eXBlb2YgcyAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgIGNvbnN0IHggPSAobmV3IEFycmF5KG4pKS5maWxsKG51bGwpLm1hcCgoKSA9PiBuZXcgRmxvYXQzMkFycmF5KGQpKTtcbiAgICAgICAgaWYgKHVzZXMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKVxuICAgICAgICAgICAgICAgIHhbaV0gPSBuZXcgRmxvYXQzMkFycmF5KGQpLmZpbGwocyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZDsgaisrKVxuICAgICAgICAgICAgICAgICAgICB4W2ldW2pdID0gdGhpcy5yYW5kbigwLjAsIDFlLTQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgICAvLyBjb21wdXRlIEwyIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlY3RvcnNcbiAgICBsMih4MSwgeDIpIHtcbiAgICAgICAgY29uc3QgRCA9IHgxLmxlbmd0aDtcbiAgICAgICAgbGV0IGQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IEQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgeDFpID0geDFbaV07XG4gICAgICAgICAgICBjb25zdCB4MmkgPSB4MltpXTtcbiAgICAgICAgICAgIGQgKz0gKHgxaSAtIHgyaSkgKiAoeDFpIC0geDJpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZDtcbiAgICB9XG4gICAgLy8gY29tcHV0ZSBwYWlyd2lzZSBkaXN0YW5jZSBpbiBhbGwgdmVjdG9ycyBpbiBYXG4gICAgeHRvZChYKSB7XG4gICAgICAgIGNvbnN0IE4gPSBYLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZGlzdCA9IHRoaXMuemVyb3MoTiAqIE4pOyAvLyBhbGxvY2F0ZSBjb250aWd1b3VzIGFycmF5XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBOOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gdGhpcy5sMihYW2ldLCBYW2pdKTtcbiAgICAgICAgICAgICAgICBkaXN0W2kgKiBOICsgal0gPSBkO1xuICAgICAgICAgICAgICAgIGRpc3RbaiAqIE4gKyBpXSA9IGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpc3Q7XG4gICAgfVxuICAgIGdldEl0ZXJTaXplKHJvd1NpemUpIHtcbiAgICAgICAgaWYgKHJvd1NpemUgPD0gMjAwMClcbiAgICAgICAgICAgIHJldHVybiAxMDA7XG4gICAgICAgIGVsc2UgaWYgKHJvd1NpemUgPD0gMzAwMClcbiAgICAgICAgICAgIHJldHVybiA5MDtcbiAgICAgICAgZWxzZSBpZiAocm93U2l6ZSA8PSA1MDAwKVxuICAgICAgICAgICAgcmV0dXJuIDgwO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gNzA7XG4gICAgfVxuICAgIC8vIGNvbXB1dGUgKHBfe2l8an0gKyBwX3tqfGl9KS8oMm4pXG4gICAgZDJwKEQsIHBlcnBsZXhpdHksIHRvbCwgcm93U2l6ZSkge1xuICAgICAgICAvLyBjb25zdCBuZiA9IE1hdGguc3FydChELmxlbmd0aCk7IC8vIHRoaXMgYmV0dGVyIGJlIGFuIGludGVnZXJcbiAgICAgICAgLy8gY29uc3QgbiA9IE1hdGguZmxvb3IobmYpO1xuICAgICAgICAvLyB0aGlzLmFzc2VydChuID09PSBuZiwgJ0Qgc2hvdWxkIGhhdmUgc3F1YXJlIG51bWJlciBvZiBlbGVtZW50cy4nKTtcbiAgICAgICAgY29uc3QgaW5kZXhlciA9IGRtTGluZWFySW5kZXgocm93U2l6ZSk7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocm93U2l6ZSAqIHJvd1NpemUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd1NpemU7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcm93U2l6ZTsgaisrKVxuICAgICAgICAgICAgICAgIGRpc3RhbmNlc1tpICogcm93U2l6ZSArIGpdID0gZGlzdGFuY2VzW2ogKiByb3dTaXplICsgaV0gPSBEW2luZGV4ZXIoaSwgaildO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG4gPSByb3dTaXplO1xuICAgICAgICBjb25zdCBoVGFyZ2V0ID0gTWF0aC5sb2cocGVycGxleGl0eSk7IC8vIHRhcmdldCBlbnRyb3B5IG9mIGRpc3RyaWJ1dGlvblxuICAgICAgICBjb25zdCBQID0gdGhpcy56ZXJvcyhuICogbik7IC8vIHRlbXBvcmFyeSBwcm9iYWJpbGl0eSBtYXRyaXhcbiAgICAgICAgY29uc3QgcHJvdyA9IHRoaXMuemVyb3Mobik7IC8vIGEgdGVtcG9yYXJ5IHN0b3JhZ2UgY29tcGFydG1lbnRcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBiZXRhbWluID0gLUluZmluaXR5O1xuICAgICAgICAgICAgbGV0IGJldGFtYXggPSBJbmZpbml0eTtcbiAgICAgICAgICAgIGxldCBiZXRhID0gMTsgLy8gaW5pdGlhbCB2YWx1ZSBvZiBwcmVjaXNpb25cbiAgICAgICAgICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBtYXh0cmllcyA9IE1hdGguZmxvb3IodGhpcy5nZXRJdGVyU2l6ZShyb3dTaXplKSAvIDUpO1xuICAgICAgICAgICAgLy8gcGVyZm9ybSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgYSBzdWl0YWJsZSBwcmVjaXNpb24gYmV0YVxuICAgICAgICAgICAgLy8gc28gdGhhdCB0aGUgZW50cm9weSBvZiB0aGUgZGlzdHJpYnV0aW9uIGlzIGFwcHJvcHJpYXRlXG4gICAgICAgICAgICBsZXQgbnVtID0gMDtcbiAgICAgICAgICAgIHdoaWxlICghZG9uZSkge1xuICAgICAgICAgICAgICAgIC8vZGVidWdnZXI7XG4gICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBlbnRyb3B5IGFuZCBrZXJuZWwgcm93IHdpdGggYmV0YSBwcmVjaXNpb25cbiAgICAgICAgICAgICAgICBsZXQgcHN1bSA9IDAuMDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwaiA9IGkgPT09IGogPyAwIDogTWF0aC5leHAoLWRpc3RhbmNlc1tpICogbiArIGpdICogYmV0YSk7XG4gICAgICAgICAgICAgICAgICAgIHByb3dbal0gPSBwajtcbiAgICAgICAgICAgICAgICAgICAgcHN1bSArPSBwajtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbm9ybWFsaXplIHAgYW5kIGNvbXB1dGUgZW50cm9weVxuICAgICAgICAgICAgICAgIGxldCBuSGVyZSA9IDAuMDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGo7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwc3VtID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgcGogPSAwO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBwaiA9IHByb3dbal0gLyBwc3VtO1xuICAgICAgICAgICAgICAgICAgICBwcm93W2pdID0gcGo7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwaiA+IDFlLTcpXG4gICAgICAgICAgICAgICAgICAgICAgICBuSGVyZSAtPSBwaiAqIE1hdGgubG9nKHBqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYWRqdXN0IGJldGEgYmFzZWQgb24gcmVzdWx0XG4gICAgICAgICAgICAgICAgaWYgKG5IZXJlID4gaFRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBlbnRyb3B5IHdhcyB0b28gaGlnaCAoZGlzdHJpYnV0aW9uIHRvbyBkaWZmdXNlKVxuICAgICAgICAgICAgICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIGluY3JlYXNlIHRoZSBwcmVjaXNpb24gZm9yIG1vcmUgcGVha3kgZGlzdHJpYnV0aW9uXG4gICAgICAgICAgICAgICAgICAgIGJldGFtaW4gPSBiZXRhOyAvLyBtb3ZlIHVwIHRoZSBib3VuZHNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJldGFtYXggPT09IEluZmluaXR5KVxuICAgICAgICAgICAgICAgICAgICAgICAgYmV0YSA9IGJldGEgKiAyO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBiZXRhID0gKGJldGEgKyBiZXRhbWF4KSAvIDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJzZSBjYXNlLiBtYWtlIGRpc3RydWJ0aW9uIGxlc3MgcGVha3lcbiAgICAgICAgICAgICAgICAgICAgYmV0YW1heCA9IGJldGE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiZXRhbWluID09PSAtSW5maW5pdHkpXG4gICAgICAgICAgICAgICAgICAgICAgICBiZXRhID0gYmV0YSAvIDI7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGJldGEgPSAoYmV0YSArIGJldGFtaW4pIC8gMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc3RvcHBpbmcgY29uZGl0aW9uczogdG9vIG1hbnkgdHJpZXMgb3IgZ290IGEgZ29vZCBwcmVjaXNpb25cbiAgICAgICAgICAgICAgICBudW0rKztcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMobkhlcmUgLSBoVGFyZ2V0KSA8IHRvbClcbiAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKG51bSA+PSBtYXh0cmllcylcbiAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnZGF0YSBwb2ludCAnICsgaSArICcgZ2V0cyBwcmVjaXNpb24gJyArIGJldGEgKyAnIGFmdGVyICcgKyBudW0gKyAnIGJpbmFyeSBzZWFyY2ggc3RlcHMuJyk7XG4gICAgICAgICAgICAvLyBjb3B5IG92ZXIgdGhlIGZpbmFsIHByb3cgdG8gUCBhdCByb3cgaVxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuOyBqKyspXG4gICAgICAgICAgICAgICAgUFtpICogbiArIGpdID0gcHJvd1tqXTtcbiAgICAgICAgfSAvLyBlbmQgbG9vcCBvdmVyIGV4YW1wbGVzIGlcbiAgICAgICAgLy8gc3ltbWV0cml6ZSBQIGFuZCBub3JtYWxpemUgaXQgdG8gc3VtIHRvIDEgb3ZlciBhbGwgaWpcbiAgICAgICAgY29uc3QgcE91dCA9IHRoaXMuemVyb3MobiAqIG4pO1xuICAgICAgICBjb25zdCBOMiA9IG4gKiAyO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuOyBqKyspXG4gICAgICAgICAgICAgICAgcE91dFtpICogbiArIGpdID0gTWF0aC5tYXgoKFBbaSAqIG4gKyBqXSArIFBbaiAqIG4gKyBpXSkgLyBOMiwgMWUtMTAwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcE91dDtcbiAgICB9XG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uXG4gICAgc2lnbih4KSB7IHJldHVybiB4ID4gMCA/IDEgOiB4IDwgMCA/IC0xIDogMDsgfVxuICAgIGNvbnN0cnVjdG9yKG9wdCkge1xuICAgICAgICB0aGlzLml0ZXIgPSAwO1xuICAgICAgICB0aGlzLnJhbmRvbSA9IE1hdGgucmFuZG9tO1xuICAgICAgICAvLyByZXR1cm4gMCBtZWFuIHVuaXQgc3RhbmRhcmQgZGV2aWF0aW9uIHJhbmRvbSBudW1iZXJcbiAgICAgICAgdGhpcy5yZXR1cm5WID0gZmFsc2U7XG4gICAgICAgIHRoaXMudlZhbHVlID0gMC4wO1xuICAgICAgICBvcHQgPSBvcHQgfHwge307XG4gICAgICAgIHRoaXMucGVycGxleGl0eSA9IHRoaXMuZ2V0b3B0KG9wdCwgJ3BlcnBsZXhpdHknLCAzMCk7IC8vIGVmZmVjdGl2ZSBudW1iZXIgb2YgbmVhcmVzdCBuZWlnaGJvcnNcbiAgICAgICAgdGhpcy5kaW0gPSB0aGlzLmdldG9wdChvcHQsICdkaW0nLCAyKTsgLy8gYnkgZGVmYXVsdCAyLUQgdFNORVxuICAgICAgICB0aGlzLmVwc2lsb24gPSB0aGlzLmdldG9wdChvcHQsICdlcHNpbG9uJywgMTApOyAvLyBsZWFybmluZyByYXRlXG4gICAgICAgIHRoaXMucmFuZG9tID0gdGhpcy5nZXRvcHQob3B0LCAncmFuZG9tJywgTWF0aC5yYW5kb20pOyAvLyByYW5kb20gbnVtYmVyIGdlbmVyYXRvclxuICAgIH1cbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRha2VzIGEgc2V0IG9mIGhpZ2gtZGltZW5zaW9uYWwgcG9pbnRzXG4gICAgLy8gYW5kIGNyZWF0ZXMgbWF0cml4IFAgZnJvbSB0aGVtIHVzaW5nIGdhdXNzaWFuIGtlcm5lbFxuICAgIGluaXREYXRhUmF3KFgpIHtcbiAgICAgICAgY29uc3QgTiA9IFgubGVuZ3RoO1xuICAgICAgICBjb25zdCBEID0gWFswXS5sZW5ndGg7XG4gICAgICAgIHRoaXMuYXNzZXJ0KE4gPiAwLCAnIFggaXMgZW1wdHk/IFlvdSBtdXN0IGhhdmUgc29tZSBkYXRhIScpO1xuICAgICAgICB0aGlzLmFzc2VydChEID4gMCwgJyBYWzBdIGlzIGVtcHR5PyBXaGVyZSBpcyB0aGUgZGF0YT8nKTtcbiAgICAgICAgY29uc3QgZGlzdHMgPSB0aGlzLnh0b2QoWCk7IC8vIGNvbnZlcnQgWCB0byBkaXN0YW5jZXMgdXNpbmcgZ2F1c3NpYW4ga2VybmVsXG4gICAgICAgIHRoaXMuUCA9IHRoaXMuZDJwKGRpc3RzLCB0aGlzLnBlcnBsZXhpdHksIDFlLTQsIEQpOyAvLyBhdHRhY2ggdG8gb2JqZWN0XG4gICAgICAgIHRoaXMuTiA9IE47IC8vIGJhY2sgdXAgdGhlIHNpemUgb2YgdGhlIGRhdGFzZXRcbiAgICAgICAgdGhpcy5pbml0U29sdXRpb24oKTsgLy8gcmVmcmVzaCB0aGlzXG4gICAgfVxuICAgIC8vIHRoaXMgZnVuY3Rpb24gdGFrZXMgYSBnaXZlbiBkaXN0YW5jZSBtYXRyaXggYW5kIGNyZWF0ZXNcbiAgICAvLyBtYXRyaXggUCBmcm9tIHRoZW0uXG4gICAgLy8gRCBpcyBhc3N1bWVkIHRvIGJlIHByb3ZpZGVkIGFzIGEgbGlzdCBvZiBsaXN0cywgYW5kIHNob3VsZCBiZSBzeW1tZXRyaWNcbiAgICBpbml0RGF0YURpc3QoRCwgcm93U2l6ZSkge1xuICAgICAgICBjb25zdCBOID0gRC5sZW5ndGg7XG4gICAgICAgIHRoaXMuYXNzZXJ0KE4gPiAwLCAnIFggaXMgZW1wdHk/IFlvdSBtdXN0IGhhdmUgc29tZSBkYXRhIScpO1xuICAgICAgICAvLyBjb252ZXJ0IEQgdG8gYSAoZmFzdCkgdHlwZWQgYXJyYXkgdmVyc2lvblxuICAgICAgICAvLyBkaXN0cy5mb3JFYWNoKChkKSA9PiBjb25zb2xlLmxvZyhkKSk7XG4gICAgICAgIGNvbnNvbGUudGltZSgnZGlzdGFuY2VzIHRvIG1hdHJpeCcpO1xuICAgICAgICB0aGlzLlAgPSB0aGlzLmQycChELCB0aGlzLnBlcnBsZXhpdHksIDFlLTQsIHJvd1NpemUpO1xuICAgICAgICBjb25zb2xlLnRpbWVFbmQoJ2Rpc3RhbmNlcyB0byBtYXRyaXgnKTtcbiAgICAgICAgdGhpcy5OID0gcm93U2l6ZTtcbiAgICAgICAgdGhpcy5pbml0U29sdXRpb24oKTsgLy8gcmVmcmVzaCB0aGlzXG4gICAgfVxuICAgIC8vIChyZSlpbml0aWFsaXplcyB0aGUgc29sdXRpb24gdG8gcmFuZG9tXG4gICAgaW5pdFNvbHV0aW9uKCkge1xuICAgICAgICAvLyBnZW5lcmF0ZSByYW5kb20gc29sdXRpb24gdG8gdC1TTkVcbiAgICAgICAgdGhpcy5ZID0gdGhpcy5yYW5kbjJkKHRoaXMuTiwgdGhpcy5kaW0pOyAvLyB0aGUgc29sdXRpb25cbiAgICAgICAgdGhpcy5nYWlucyA9IHRoaXMucmFuZG4yZCh0aGlzLk4sIHRoaXMuZGltLCAxLjApOyAvLyBzdGVwIGdhaW5zIHRvIGFjY2VsZXJhdGUgcHJvZ3Jlc3MgaW4gdW5jaGFuZ2luZyBkaXJlY3Rpb25zXG4gICAgICAgIHRoaXMueXN0ZXAgPSB0aGlzLnJhbmRuMmQodGhpcy5OLCB0aGlzLmRpbSwgMC4wKTsgLy8gbW9tZW50dW0gYWNjdW11bGF0b3JcbiAgICAgICAgdGhpcy5pdGVyID0gMDtcbiAgICB9XG4gICAgLy8gcmV0dXJuIHBvaW50ZXIgdG8gY3VycmVudCBzb2x1dGlvblxuICAgIGdldFNvbHV0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ZO1xuICAgIH1cbiAgICAvLyBwZXJmb3JtIGEgc2luZ2xlIHN0ZXAgb2Ygb3B0aW1pemF0aW9uIHRvIGltcHJvdmUgdGhlIGVtYmVkZGluZ1xuICAgIHN0ZXAoKSB7XG4gICAgICAgIHRoaXMuaXRlciArPSAxO1xuICAgICAgICBjb25zdCBOID0gdGhpcy5OO1xuICAgICAgICBjb25zdCBjZyA9IHRoaXMuY29zdEdyYWQodGhpcy5ZKTsgLy8gZXZhbHVhdGUgZ3JhZGllbnRcbiAgICAgICAgY29uc3QgY29zdCA9IGNnLmNvc3Q7XG4gICAgICAgIGNvbnN0IGdyYWQgPSBjZy5ncmFkO1xuICAgICAgICAvLyBwZXJmb3JtIGdyYWRpZW50IHN0ZXBcbiAgICAgICAgY29uc3QgeW1lYW4gPSB0aGlzLnplcm9zKHRoaXMuZGltKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGQgPSAwOyBkIDwgdGhpcy5kaW07IGQrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdpZCA9IGdyYWRbaV1bZF07XG4gICAgICAgICAgICAgICAgY29uc3Qgc2lkID0gdGhpcy55c3RlcFtpXVtkXTtcbiAgICAgICAgICAgICAgICBjb25zdCBnYWluaWQgPSB0aGlzLmdhaW5zW2ldW2RdO1xuICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgZ2FpbiB1cGRhdGVcbiAgICAgICAgICAgICAgICBsZXQgbmV3Z2FpbiA9IHRoaXMuc2lnbihnaWQpID09PSB0aGlzLnNpZ24oc2lkKSA/IGdhaW5pZCAqIDAuOCA6IGdhaW5pZCArIDAuMjtcbiAgICAgICAgICAgICAgICBpZiAobmV3Z2FpbiA8IDAuMDEpXG4gICAgICAgICAgICAgICAgICAgIG5ld2dhaW4gPSAwLjAxOyAvLyBjbGFtcFxuICAgICAgICAgICAgICAgIHRoaXMuZ2FpbnNbaV1bZF0gPSBuZXdnYWluOyAvLyBzdG9yZSBmb3IgbmV4dCB0dXJuXG4gICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBtb21lbnR1bSBzdGVwIGRpcmVjdGlvblxuICAgICAgICAgICAgICAgIGNvbnN0IG1vbXZhbCA9IHRoaXMuaXRlciA8IDI1MCA/IDAuNSA6IDAuODtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdzaWQgPSBtb212YWwgKiBzaWQgLSB0aGlzLmVwc2lsb24gKiBuZXdnYWluICogZ3JhZFtpXVtkXTtcbiAgICAgICAgICAgICAgICB0aGlzLnlzdGVwW2ldW2RdID0gbmV3c2lkOyAvLyByZW1lbWJlciB0aGUgc3RlcCB3ZSB0b29rXG4gICAgICAgICAgICAgICAgLy8gc3RlcCFcbiAgICAgICAgICAgICAgICB0aGlzLllbaV1bZF0gKz0gbmV3c2lkO1xuICAgICAgICAgICAgICAgIHltZWFuW2RdICs9IHRoaXMuWVtpXVtkXTsgLy8gYWNjdW11bGF0ZSBtZWFuIHNvIHRoYXQgd2UgY2FuIGNlbnRlciBsYXRlclxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlcHJvamVjdCBZIHRvIGJlIHplcm8gbWVhblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgZCA9IDA7IGQgPCB0aGlzLmRpbTsgZCsrKVxuICAgICAgICAgICAgICAgIHRoaXMuWVtpXVtkXSAtPSB5bWVhbltkXSAvIE47XG4gICAgICAgIH1cbiAgICAgICAgLy9pZih0aGlzLml0ZXIlMTAwPT09MCkgY29uc29sZS5sb2coJ2l0ZXIgJyArIHRoaXMuaXRlciArICcsIGNvc3Q6ICcgKyBjb3N0KTtcbiAgICAgICAgcmV0dXJuIGNvc3Q7IC8vIHJldHVybiBjdXJyZW50IGNvc3RcbiAgICB9XG4gICAgLy8gZm9yIGRlYnVnZ2luZzogZ3JhZGllbnQgY2hlY2tcbiAgICBkZWJ1Z0dyYWQoKSB7XG4gICAgICAgIGNvbnN0IE4gPSB0aGlzLk47XG4gICAgICAgIGNvbnN0IGNnID0gdGhpcy5jb3N0R3JhZCh0aGlzLlkpOyAvLyBldmFsdWF0ZSBncmFkaWVudFxuICAgICAgICAvL2NvbnN0IGNvc3QgPSBjZy5jb3N0O1xuICAgICAgICBjb25zdCBncmFkID0gY2cuZ3JhZDtcbiAgICAgICAgY29uc3QgZSA9IDFlLTU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBkID0gMDsgZCA8IHRoaXMuZGltOyBkKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB5b2xkID0gdGhpcy5ZW2ldW2RdO1xuICAgICAgICAgICAgICAgIHRoaXMuWVtpXVtkXSA9IHlvbGQgKyBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNnMCA9IHRoaXMuY29zdEdyYWQodGhpcy5ZKTtcbiAgICAgICAgICAgICAgICB0aGlzLllbaV1bZF0gPSB5b2xkIC0gZTtcbiAgICAgICAgICAgICAgICBjb25zdCBjZzEgPSB0aGlzLmNvc3RHcmFkKHRoaXMuWSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYW5hbHl0aWMgPSBncmFkW2ldW2RdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bWVyaWNhbCA9IChjZzAuY29zdCAtIGNnMS5jb3N0KSAvICgyICogZSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coaSArICcsJyArIGQgKyAnOiBncmFkY2hlY2sgYW5hbHl0aWM6ICcgKyBhbmFseXRpYyArICcgdnMuIG51bWVyaWNhbDogJyArIG51bWVyaWNhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ZW2ldW2RdID0geW9sZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyByZXR1cm4gY29zdCBhbmQgZ3JhZGllbnQsIGdpdmVuIGFuIGFycmFuZ2VtZW50XG4gICAgY29zdEdyYWQoWSkge1xuICAgICAgICBjb25zdCBOID0gdGhpcy5OO1xuICAgICAgICBjb25zdCBkaW0gPSB0aGlzLmRpbTsgLy8gZGltIG9mIG91dHB1dCBzcGFjZVxuICAgICAgICBjb25zdCBQID0gdGhpcy5QO1xuICAgICAgICBjb25zdCBwbXVsID0gdGhpcy5pdGVyIDwgMTAwID8gNCA6IDE7IC8vIHRyaWNrIHRoYXQgaGVscHMgd2l0aCBsb2NhbCBvcHRpbWFcbiAgICAgICAgLy8gY29tcHV0ZSBjdXJyZW50IFEgZGlzdHJpYnV0aW9uLCB1bm5vcm1hbGl6ZWQgZmlyc3RcbiAgICAgICAgdGhpcy5xdUFyciA/PyAodGhpcy5xdUFyciA9IHRoaXMuemVyb3MoTiAqIE4pKTtcbiAgICAgICAgbGV0IHFzdW0gPSAwLjA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBOOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkc3VtID0gbmV3IEFycmF5KGRpbSkucmVkdWNlKChwcmV2LCBfLCBkKSA9PiBwcmV2ICsgTWF0aC5wb3coWVtpXVtkXSAtIFlbal1bZF0sIDIpLCAwKTtcbiAgICAgICAgICAgICAgICBjb25zdCBxdSA9IDEuMCAvICgxLjAgKyBkc3VtKTsgLy8gU3R1ZGVudCB0LWRpc3RyaWJ1dGlvblxuICAgICAgICAgICAgICAgIHRoaXMucXVBcnJbaSAqIE4gKyBqXSA9IHF1O1xuICAgICAgICAgICAgICAgIHRoaXMucXVBcnJbaiAqIE4gKyBpXSA9IHF1O1xuICAgICAgICAgICAgICAgIHFzdW0gKz0gMiAqIHF1O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG5vcm1hbGl6ZSBRIGRpc3RyaWJ1dGlvbiB0byBzdW0gdG8gMVxuICAgICAgICAvL2NvbnN0IE5OID0gTiAqIE47XG4gICAgICAgIC8vY29uc3QgUSA9IHRoaXMuemVyb3MoTk4pO1xuICAgICAgICBsZXQgY29zdCA9IDAuMDtcbiAgICAgICAgY29uc3QgZ3JhZCA9IG5ldyBBcnJheShOKS5maWxsKG51bGwpLm1hcCgoKSA9PiAobmV3IEZsb2F0MzJBcnJheShkaW0pKS5maWxsKDAuMCkpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgICAgICAgLy8gY29uc3QgZ3N1bSA9IG5ldyBGbG9hdDMyQXJyYXkoZGltKS5maWxsKDAuMCk7IC8vIGluaXQgZ3JhZCBmb3IgcG9pbnQgaVxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgTjsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgUSA9IE1hdGgubWF4KHRoaXMucXVBcnJbaSAqIE4gKyBqXSAvIHFzdW0sIDFlLTEwMCk7XG4gICAgICAgICAgICAgICAgY29zdCArPSAoLVBbaSAqIE4gKyBqXSAqIE1hdGgubG9nKFEpKSAqIDI7IC8vIGFjY3VtdWxhdGUgY29zdCAodGhlIG5vbi1jb25zdGFudCBwb3J0aW9uIGF0IGxlYXN0Li4uKVxuICAgICAgICAgICAgICAgIGNvbnN0IHByZW11bHQgPSA0ICogKHBtdWwgKiBQW2kgKiBOICsgal0gLSBRKSAqIHRoaXMucXVBcnJbaSAqIE4gKyBqXTtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHByZW11bHQsIFEsIGksIGopO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGQgPSAwOyBkIDwgZGltOyBkKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JhZFtpXVtkXSArPSBwcmVtdWx0ICogKFlbaV1bZF0gLSBZW2pdW2RdKTtcbiAgICAgICAgICAgICAgICAgICAgZ3JhZFtqXVtkXSArPSBwcmVtdWx0ICogKFlbal1bZF0gLSBZW2ldW2RdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2dyYWRbaV0gPSBnc3VtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGNvc3QsIGdyYWQgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkQzF6Ym1VdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUowTFhOdVpTNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVN4UFFVRlBMRVZCUVVNc1lVRkJZU3hGUVVGRExFMUJRVTBzYjBKQlFXOUNMRU5CUVVNN1FVRkhha1FzVFVGQlRTeFBRVUZQTEVsQlFVazdTVUZYVUN4TlFVRk5MRU5CUVVNc1UwRkJZeXhGUVVGRkxFOUJRVms3VVVGRGVrTXNTVUZCU1N4RFFVRkRMRk5CUVZNN1dVRkJSU3hOUVVGTkxFOUJRVThzU1VGQlNTeHJRa0ZCYTBJc1EwRkJRenRKUVVOMFJDeERRVUZETzBsQlJVUXNaVUZCWlR0SlFVTlFMRTFCUVUwc1EwRkJReXhIUVVGMVFpeEZRVUZGTEV0QlFXRXNSVUZCUlN4VlFVRmxPMUZCUTNCRkxFbEJRVWtzUjBGQlJ5eERRVUZETEdOQlFXTXNRMEZCUXl4TFFVRkxMRU5CUVVNN1dVRkRNMElzVDBGQlR5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN08xbEJSV3hDTEU5QlFVOHNWVUZCVlN4RFFVRkRPMGxCUTNSQ0xFTkJRVU03U1VGTFF5eFhRVUZYTzFGQlExUXNTVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRk8xbEJRMmhDTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1MwRkJTeXhEUVVGRE8xbEJRM0pDTEU5QlFVOHNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJRenRUUVVOd1FqdFJRVU5FTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTJoRExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEyaERMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVONFFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU03V1VGQlJTeFBRVUZQTEVsQlFVa3NRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJRenRSUVVOb1JDeE5RVUZOTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc2JVUkJRVzFFTzFGQlEzaEZMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETzFGQlEzQkNMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU5tTEVOQlFVTTdTVUZGUkN3NFFrRkJPRUk3U1VGRGRFSXNTMEZCU3l4RFFVRkRMRVZCUVZVc1JVRkJSU3hIUVVGWE8xRkJRMjVETEU5QlFVOHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVVzUjBGQlJ5eEhRVUZITEVOQlFVTTdTVUZEZGtNc1EwRkJRenRKUVVWRUxEaEVRVUU0UkR0SlFVTjBSQ3hMUVVGTExFTkJRVU1zUTBGQlV6dFJRVU55UWl4SlFVRkpMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eFhRVUZYTEVsQlFVa3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVGRkxFOUJRVThzU1VGQlNTeFpRVUZaTEVWQlFVVXNRMEZCUXp0UlFVTjBSU3hKUVVGSkxFOUJRVThzVjBGQlZ5eExRVUZMTEZkQlFWY3NSVUZCUlR0WlFVTjBReXd3UWtGQk1FSTdXVUZETVVJc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRhRU1zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVTdaMEpCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTjJReXhQUVVGUExFZEJRVWNzUTBGQlF6dFRRVU5hTzJGQlFVMDdXVUZEVEN4UFFVRlBMRWxCUVVrc1dVRkJXU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNNRUpCUVRCQ08xTkJRM1pFTzBsQlEwZ3NRMEZCUXp0SlFVVkVMREpFUVVFeVJEdEpRVU16UkN3clFrRkJLMEk3U1VGRGRrSXNUMEZCVHl4RFFVRkRMRU5CUVZNc1JVRkJSU3hEUVVGVExFVkJRVVVzUTBGQlZUdFJRVU01UXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhQUVVGUExFTkJRVU1zUzBGQlN5eFhRVUZYTEVOQlFVTTdVVUZEZEVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zU1VGQlNTeFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOdVJTeEpRVUZKTEVsQlFVa3NSVUZCUlR0WlFVTlNMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRk8yZENRVU40UWl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFOQlEzUkRPMkZCUVUwN1dVRkRUQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzJkQ1FVTXhRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJUdHZRa0ZEZUVJc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMkZCUTI1RE8xTkJRMFk3VVVGRFJDeFBRVUZQTEVOQlFVTXNRMEZCUXp0SlFVTllMRU5CUVVNN1NVRkZSQ3d3UTBGQk1FTTdTVUZEYkVNc1JVRkJSU3hEUVVGRExFVkJRVmtzUlVGQlJTeEZRVUZaTzFGQlEyNURMRTFCUVUwc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTTdVVUZEY0VJc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlExWXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRaUVVNeFFpeE5RVUZOTEVkQlFVY3NSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGJFSXNUVUZCVFN4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEyeENMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF6dFRRVU5vUXp0UlFVTkVMRTlCUVU4c1EwRkJReXhEUVVGRE8wbEJRMWdzUTBGQlF6dEpRVVZFTEdkRVFVRm5SRHRKUVVONFF5eEpRVUZKTEVOQlFVTXNRMEZCZVVJN1VVRkRjRU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRenRSUVVOdVFpeE5RVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRFJDUVVFMFFqdFJRVU0xUkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8xbEJRekZDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8yZENRVU01UWl4TlFVRk5MRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRPVUlzU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzJkQ1FVTndRaXhKUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03WVVGRGNrSTdVMEZEUmp0UlFVTkVMRTlCUVU4c1NVRkJTU3hEUVVGRE8wbEJRMlFzUTBGQlF6dEpRVVZOTEZkQlFWY3NRMEZCUXl4UFFVRmxPMUZCUTJoRExFbEJRVWtzVDBGQlR5eEpRVUZKTEVsQlFVazdXVUZEYWtJc1QwRkJUeXhIUVVGSExFTkJRVU03WVVGRFVpeEpRVUZKTEU5QlFVOHNTVUZCU1N4SlFVRkpPMWxCUTNSQ0xFOUJRVThzUlVGQlJTeERRVUZETzJGQlExQXNTVUZCU1N4UFFVRlBMRWxCUVVrc1NVRkJTVHRaUVVOMFFpeFBRVUZQTEVWQlFVVXNRMEZCUXpzN1dVRkZWaXhQUVVGUExFVkJRVVVzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGUkN4dFEwRkJiVU03U1VGRE0wSXNSMEZCUnl4RFFVRkRMRU5CUVdVc1JVRkJSU3hWUVVGclFpeEZRVUZGTEVkQlFWY3NSVUZCUlN4UFFVRmxPMUZCUXpORkxDdEVRVUVyUkR0UlFVTXZSQ3cwUWtGQk5FSTdVVUZETlVJc2NVVkJRWEZGTzFGQlEzSkZMRTFCUVUwc1QwRkJUeXhIUVVGSExHRkJRV0VzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTjJReXhOUVVGTkxGTkJRVk1zUjBGQlJ5eEpRVUZKTEZsQlFWa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGRGRFUXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEU5QlFVOHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRaUVVOb1F5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEU5QlFVOHNSVUZCUlN4RFFVRkRMRVZCUVVVN1owSkJRMnhETEZOQlFWTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1QwRkJUeXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEZOQlFWTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1QwRkJUeXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVMEZET1VVN1VVRkRSQ3hOUVVGTkxFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTTdVVUZEYkVJc1RVRkJUU3hQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJReXhEUVVGRExHbERRVUZwUXp0UlFVTjJSU3hOUVVGTkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEN0Q1FVRXJRanRSUVVNMVJDeE5RVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNhME5CUVd0RE8xRkJRemxFTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRNVUlzU1VGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4UlFVRlJMRU5CUVVNN1dVRkRlRUlzU1VGQlNTeFBRVUZQTEVkQlFVY3NVVUZCVVN4RFFVRkRPMWxCUTNaQ0xFbEJRVWtzU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRFpDUVVFMlFqdFpRVU16UXl4SlFVRkpMRWxCUVVrc1IwRkJSeXhMUVVGTExFTkJRVU03V1VGRGFrSXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlJUTkVMREJFUVVFd1JEdFpRVU14UkN4NVJFRkJlVVE3V1VGRGVrUXNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRMW9zVDBGQlR5eERRVUZETEVsQlFVa3NSVUZCUlR0blFrRkRXaXhYUVVGWE8yZENRVVZZTEhGRVFVRnhSRHRuUWtGRGNrUXNTVUZCU1N4SlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRE8yZENRVU5tTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN2IwSkJRekZDTEUxQlFVMHNSVUZCUlN4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZGTEZOQlFWTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRPMjlDUVVOcVJTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8yOUNRVU5pTEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNN2FVSkJRMW83WjBKQlEwUXNhME5CUVd0RE8yZENRVU5zUXl4SlFVRkpMRXRCUVVzc1IwRkJSeXhIUVVGSExFTkJRVU03WjBKQlEyaENMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3YjBKQlF6RkNMRWxCUVVrc1JVRkJSU3hEUVVGRE8yOUNRVU5RTEVsQlFVa3NTVUZCU1N4TFFVRkxMRU5CUVVNN2QwSkJRMW9zUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXpzN2QwSkJSVkFzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU03YjBKQlJYUkNMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdiMEpCUTJJc1NVRkJTU3hGUVVGRkxFZEJRVWNzU1VGQlNUdDNRa0ZCUlN4TFFVRkxMRWxCUVVrc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN2FVSkJRek5ETzJkQ1FVVkVMRGhDUVVFNFFqdG5Ra0ZET1VJc1NVRkJTU3hMUVVGTExFZEJRVWNzVDBGQlR5eEZRVUZGTzI5Q1FVTnVRaXhyUkVGQmEwUTdiMEpCUTJ4RUxHMUZRVUZ0UlR0dlFrRkRia1VzVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMSEZDUVVGeFFqdHZRa0ZEY2tNc1NVRkJTU3hQUVVGUExFdEJRVXNzVVVGQlVUdDNRa0ZCUlN4SlFVRkpMRWRCUVVjc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF6czdkMEpCUVUwc1NVRkJTU3hIUVVGSExFTkJRVU1zU1VGQlNTeEhRVUZITEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRwUWtGRE4wVTdjVUpCUVUwN2IwSkJRMHdzTmtOQlFUWkRPMjlDUVVNM1F5eFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRPMjlDUVVObUxFbEJRVWtzVDBGQlR5eExRVUZMTEVOQlFVTXNVVUZCVVR0M1FrRkJSU3hKUVVGSkxFZEJRVWNzU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXpzN2QwSkJRVTBzU1VGQlNTeEhRVUZITEVOQlFVTXNTVUZCU1N4SFFVRkhMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dHBRa0ZET1VVN1owSkJSVVFzT0VSQlFUaEVPMmRDUVVNNVJDeEhRVUZITEVWQlFVVXNRMEZCUXp0blFrRkRUaXhKUVVGSkxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTMEZCU3l4SFFVRkhMRTlCUVU4c1EwRkJReXhIUVVGSExFZEJRVWM3YjBKQlFVVXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJRenRuUWtGRGFrUXNTVUZCU1N4SFFVRkhMRWxCUVVrc1VVRkJVVHR2UWtGQlJTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMkZCUTJ4RE8xbEJSVVFzTUVkQlFUQkhPMWxCUXpGSExIbERRVUY1UXp0WlFVTjZReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJUdG5Ra0ZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRGNFUXNRMEZCUXl3eVFrRkJNa0k3VVVGRk4wSXNkMFJCUVhkRU8xRkJRM2hFTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUXk5Q0xFMUJRVTBzUlVGQlJTeEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRha0lzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTXhRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJUdG5Ra0ZEZUVJc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGRE8xTkJRekZGTzFGQlJVUXNUMEZCVHl4SlFVRkpMRU5CUVVNN1NVRkRaQ3hEUVVGRE8wbEJSVVFzYTBKQlFXdENPMGxCUTFZc1NVRkJTU3hEUVVGRExFTkJRVk1zU1VGQlNTeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRk9VUXNXVUZCV1N4SFFVRjFRanRSUVd4Tk4wSXNVMEZCU1N4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVUxVUxGZEJRVTBzUjBGQmFVSXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJRenRSUVdGNlF5eHpSRUZCYzBRN1VVRkRPVU1zV1VGQlR5eEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVTm9RaXhYUVVGTkxFZEJRVWNzUjBGQlJ5eERRVUZETzFGQk9FdHVRaXhIUVVGSExFZEJRVWNzUjBGQlJ5eEpRVUZKTEVWQlFVVXNRMEZCUXp0UlFVTm9RaXhKUVVGSkxFTkJRVU1zVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhGUVVGRkxGbEJRVmtzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMSGREUVVGM1F6dFJRVU01Uml4SlFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RlFVRkZMRXRCUVVzc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEhOQ1FVRnpRanRSUVVNM1JDeEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEZOQlFWTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExHZENRVUZuUWp0UlFVTm9SU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhGUVVGRkxGRkJRVkVzUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXd3UWtGQk1FSTdTVUZEYmtZc1EwRkJRenRKUVVWRUxIVkVRVUYxUkR0SlFVTjJSQ3gxUkVGQmRVUTdTVUZEYUVRc1YwRkJWeXhEUVVGRExFTkJRVzlDTzFGQlEzSkRMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTTdVVUZEYmtJc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRenRSUVVOMFFpeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzZFVOQlFYVkRMRU5CUVVNc1EwRkJRenRSUVVNMVJDeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzYjBOQlFXOURMRU5CUVVNc1EwRkJRenRSUVVONlJDeE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNLME5CUVN0RE8xRkJRek5GTEVsQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRlZCUVZVc1JVRkJSU3hKUVVGSkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4dFFrRkJiVUk3VVVGRGRrVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eHJRMEZCYTBNN1VVRkRPVU1zU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlN4RFFVRkRMRU5CUVVNc1pVRkJaVHRKUVVOMFF5eERRVUZETzBsQlJVUXNNRVJCUVRCRU8wbEJRekZFTEhOQ1FVRnpRanRKUVVOMFFpd3dSVUZCTUVVN1NVRkRia1VzV1VGQldTeERRVUZETEVOQlFXVXNSVUZCUlN4UFFVRmxPMUZCUTJ4RUxFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNN1VVRkRia0lzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxIVkRRVUYxUXl4RFFVRkRMRU5CUVVNN1VVRkROVVFzTkVOQlFUUkRPMUZCUXpWRExIZERRVUYzUXp0UlFVTjRReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEhGQ1FVRnhRaXhEUVVGRExFTkJRVU03VVVGRGNFTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFbEJRVWtzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTnlSQ3hQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEhGQ1FVRnhRaXhEUVVGRExFTkJRVU03VVVGRGRrTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhQUVVGUExFTkJRVU03VVVGRGFrSXNTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRExFTkJRVU1zWlVGQlpUdEpRVU4wUXl4RFFVRkRPMGxCUlVRc2VVTkJRWGxETzBsQlEyeERMRmxCUVZrN1VVRkRha0lzYjBOQlFXOURPMUZCUTNCRExFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExHVkJRV1U3VVVGRGVFUXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRFpFUVVFMlJEdFJRVU12Unl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc2RVSkJRWFZDTzFGQlEzcEZMRWxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEyaENMRU5CUVVNN1NVRkZSQ3h4UTBGQmNVTTdTVUZET1VJc1YwRkJWenRSUVVOb1FpeFBRVUZQTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRhRUlzUTBGQlF6dEpRVVZFTEdsRlFVRnBSVHRKUVVNeFJDeEpRVUZKTzFGQlExUXNTVUZCU1N4RFFVRkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRFppeE5RVUZOTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMnBDTEUxQlFVMHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc2IwSkJRVzlDTzFGQlEzUkVMRTFCUVUwc1NVRkJTU3hIUVVGSExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTTdVVUZEY2tJc1RVRkJUU3hKUVVGSkxFZEJRVWNzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXp0UlFVVnlRaXgzUWtGQmQwSTdVVUZEZUVJc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGJrTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRaUVVNeFFpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRuUWtGRGFrTXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOMlFpeE5RVUZOTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVNM1FpeE5RVUZOTEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVWb1F5eHpRa0ZCYzBJN1owSkJRM1JDTEVsQlFVa3NUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeEhRVUZITEVkQlFVY3NRMEZCUXp0blFrRkRPVVVzU1VGQlNTeFBRVUZQTEVkQlFVY3NTVUZCU1R0dlFrRkJSU3hQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNVVUZCVVR0blFrRkROVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTXNRMEZCUXl4elFrRkJjMEk3WjBKQlJXeEVMR3REUVVGclF6dG5Ra0ZEYkVNc1RVRkJUU3hOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRPMmRDUVVNelF5eE5RVUZOTEUxQlFVMHNSMEZCUnl4TlFVRk5MRWRCUVVjc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRiRVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eE5RVUZOTEVOQlFVTXNRMEZCUXl3MFFrRkJORUk3WjBKQlJYWkVMRkZCUVZFN1owSkJRMUlzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeE5RVUZOTEVOQlFVTTdaMEpCUlhaQ0xFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc09FTkJRVGhETzJGQlEzcEZPMU5CUTBZN1VVRkZSQ3c0UWtGQk9FSTdVVUZET1VJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU14UWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFVkJRVVU3WjBKQlF5OUNMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVTm9RenRSUVVWRUxEWkZRVUUyUlR0UlFVTTNSU3hQUVVGUExFbEJRVWtzUTBGQlF5eERRVUZETEhOQ1FVRnpRanRKUVVOeVF5eERRVUZETzBsQlJVUXNaME5CUVdkRE8wbEJRM3BDTEZOQlFWTTdVVUZEWkN4TlFVRk5MRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJXcENMRTFCUVUwc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zYjBKQlFXOUNPMUZCUTNSRUxIVkNRVUYxUWp0UlFVTjJRaXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRPMUZCUlhKQ0xFMUJRVTBzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTm1MRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3V1VGRE1VSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3WjBKQlEycERMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlJURkNMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF6dG5Ra0ZEZUVJc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlJXeERMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF6dG5Ra0ZEZUVJc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlJXeERMRTFCUVUwc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRE5VSXNUVUZCVFN4VFFVRlRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeEhRVUZITEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRiRVFzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU1zUjBGQlJ5eDNRa0ZCZDBJc1IwRkJSeXhSUVVGUkxFZEJRVWNzYTBKQlFXdENMRWRCUVVjc1UwRkJVeXhEUVVGRExFTkJRVU03WjBKQlJXaEhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8yRkJRM0pDTzFOQlEwWTdTVUZEU0N4RFFVRkRPMGxCUjBRc2FVUkJRV2xFTzBsQlF6RkRMRkZCUVZFc1EwRkJReXhEUVVGaE8xRkJRek5DTEUxQlFVMHNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGFrSXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEhOQ1FVRnpRanRSUVVNMVF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSV3BDTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEhGRFFVRnhRenRSUVVVelJTeHhSRUZCY1VRN1VVRkRja1FzU1VGQlNTeERRVUZETEV0QlFVc3NTMEZCVml4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGTExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRE8xRkJRMnBETEVsQlFVa3NTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJRenRSUVVObUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZETVVJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdaMEpCUXpsQ0xFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTTNSaXhOUVVGTkxFVkJRVVVzUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXl4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eDVRa0ZCZVVJN1owSkJRM2hFTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1owSkJRek5DTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1owSkJRek5DTEVsQlFVa3NTVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8yRkJRMmhDTzFOQlEwWTdVVUZEUkN4MVEwRkJkVU03VVVGRGRrTXNiVUpCUVcxQ08xRkJRMjVDTERKQ1FVRXlRanRSUVVNelFpeEpRVUZKTEVsQlFVa3NSMEZCUnl4SFFVRkhMRU5CUVVNN1VVRkRaaXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zU1VGQlNTeFpRVUZaTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTnNSaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFsQlF6RkNMSGxGUVVGNVJUdFpRVU42UlN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdG5Ra0ZET1VJc1RVRkJUU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETzJkQ1FVTjZSQ3hKUVVGSkxFbEJRVWtzUTBGQlF5eERRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4NVJFRkJlVVE3WjBKQlEzSkhMRTFCUVUwc1QwRkJUeXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlEzUkZMR2REUVVGblF6dG5Ra0ZEYUVNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdHZRa0ZETlVJc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenR2UWtGRE5VTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0cFFrRkROME03WVVGRFJqdFpRVU5FTEdsQ1FVRnBRanRUUVVOc1FqdFJRVVZFTEU5QlFVOHNSVUZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hGUVVGRExFTkJRVU03U1VGRGRFSXNRMEZCUXp0RFFVTktJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSHRrYlV4cGJtVmhja2x1WkdWNGZTQm1jbTl0SUNjdUxpOWthWE4wWVc1alpTMXRZWFJ5YVhnbk8xeHVYRzVjYm1WNGNHOXlkQ0JqYkdGemN5QlVVMDVGSUh0Y2JpQWdjSEpwZG1GMFpTQndaWEp3YkdWNGFYUjVPaUJ1ZFcxaVpYSTdYRzRnSUhCeWFYWmhkR1VnWkdsdE9pQnVkVzFpWlhJN1hHNGdJSEJ5YVhaaGRHVWdaWEJ6YVd4dmJqb2diblZ0WW1WeU8xeHVJQ0J3Y21sMllYUmxJR2wwWlhJZ1BTQXdPMXh1SUNCd2NtbDJZWFJsSUU0aE9pQnVkVzFpWlhJN1hHNGdJSEJ5YVhaaGRHVWdVQ0U2SUVac2IyRjBNekpCY25KaGVUdGNiaUFnY0hKcGRtRjBaU0JaSVRvZ1lXNTVXMTA3WEc0Z0lIQnlhWFpoZEdVZ1oyRnBibk1oT2lCaGJubGJYVHRjYmlBZ2NISnBkbUYwWlNCNWMzUmxjQ0U2SUdGdWVWdGRPMXh1SUNCd2NtbDJZWFJsSUhKaGJtUnZiVG9nS0NrZ1BUNGdiblZ0WW1WeUlEMGdUV0YwYUM1eVlXNWtiMjA3WEc0Z0lIQnlhWFpoZEdVZ1lYTnpaWEowS0dOdmJtUnBkR2x2YmpvZ1lXNTVMQ0J0WlhOellXZGxPaUJoYm5rcElIdGNiaUFnSUNCcFppQW9JV052Ym1ScGRHbHZiaWtnZEdoeWIzY2diV1Z6YzJGblpTQjhmQ0FuUVhOelpYSjBhVzl1SUdaaGFXeGxaQ2M3WEc0Z0lIMWNibHh1SUNBdkx5QnplVzUwWVhnZ2MzVm5ZWEpjYmlBZ2NISnBkbUYwWlNCblpYUnZjSFFvYjNCME9pQjdXMTg2SUhOMGNtbHVaMTA2SUdGdWVYMHNJR1pwWld4a09pQnpkSEpwYm1jc0lHUmxabUYxYkhSMllXdzZJR0Z1ZVNrZ2UxeHVJQ0FnSUdsbUlDaHZjSFF1YUdGelQzZHVVSEp2Y0dWeWRIa29abWxsYkdRcEtWeHVJQ0FnSUNBZ2NtVjBkWEp1SUc5d2RGdG1hV1ZzWkYwN1hHNGdJQ0FnWld4elpWeHVJQ0FnSUNBZ2NtVjBkWEp1SUdSbFptRjFiSFIyWVd3N1hHNGdJSDFjYmx4dUlDQWdJQzh2SUhKbGRIVnliaUF3SUcxbFlXNGdkVzVwZENCemRHRnVaR0Z5WkNCa1pYWnBZWFJwYjI0Z2NtRnVaRzl0SUc1MWJXSmxjbHh1SUNBZ0lIQnlhWFpoZEdVZ2NtVjBkWEp1VmlBOUlHWmhiSE5sTzF4dUlDQWdJSEJ5YVhaaGRHVWdkbFpoYkhWbElEMGdNQzR3TzF4dUlDQWdJR2RoZFhOelVtRnVaRzl0S0NrNklHNTFiV0psY2lCN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1eVpYUjFjbTVXS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11Y21WMGRYSnVWaUE5SUdaaGJITmxPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1MlZtRnNkV1U3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JqYjI1emRDQjFJRDBnTWlBcUlIUm9hWE11Y21GdVpHOXRLQ2tnTFNBeE8xeHVJQ0FnSUNBZ1kyOXVjM1FnZGlBOUlESWdLaUIwYUdsekxuSmhibVJ2YlNncElDMGdNVHRjYmlBZ0lDQWdJR052Ym5OMElISWdQU0IxSUNvZ2RTQXJJSFlnS2lCMk8xeHVJQ0FnSUNBZ2FXWWdLSElnUFQwOUlEQWdmSHdnY2lBK0lERXBJSEpsZEhWeWJpQjBhR2x6TG1kaGRYTnpVbUZ1Wkc5dEtDazdYRzRnSUNBZ0lDQmpiMjV6ZENCaklEMGdUV0YwYUM1emNYSjBLQzB5SUNvZ1RXRjBhQzVzYjJjb2Npa2dMeUJ5S1R0Y2JpQWdJQ0FnSUhSb2FYTXVkbFpoYkhWbElEMGdkaUFxSUdNN0lDOHZJR05oWTJobElIUm9hWE1nWm05eUlHNWxlSFFnWm5WdVkzUnBiMjRnWTJGc2JDQm1iM0lnWldabWFXTnBaVzVqZVZ4dUlDQWdJQ0FnZEdocGN5NXlaWFIxY201V0lEMGdkSEoxWlR0Y2JpQWdJQ0FnSUhKbGRIVnliaUIxSUNvZ1l6dGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QnlaWFIxY200Z2NtRnVaRzl0SUc1dmNtMWhiQ0J1ZFcxaVpYSmNiaUFnSUNCd2NtbDJZWFJsSUhKaGJtUnVLRzExT2lCdWRXMWlaWElzSUhOMFpEb2diblZ0WW1WeUtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2JYVWdLeUIwYUdsekxtZGhkWE56VW1GdVpHOXRLQ2tnS2lCemRHUTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGdkWFJwYkdsMGFYUjVJSFJvWVhRZ1kzSmxZWFJsY3lCamIyNTBhV2QxYjNWeklIWmxZM1J2Y2lCdlppQjZaWEp2Y3lCdlppQnphWHBsSUc1Y2JpQWdJQ0J3Y21sMllYUmxJSHBsY205ektHNDZJRzUxYldKbGNpa2dlMXh1SUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUFvYmlrZ1BUMDlJQ2QxYm1SbFptbHVaV1FuSUh4OElHbHpUbUZPS0c0cEtTQnlaWFIxY200Z2JtVjNJRVpzYjJGME16SkJjbkpoZVNncE8xeHVJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQkJjbkpoZVVKMVptWmxjaUE5UFQwZ0ozVnVaR1ZtYVc1bFpDY3BJSHRjYmlBZ0lDQWdJQ0FnTHk4Z2JHRmphMmx1WnlCaWNtOTNjMlZ5SUhOMWNIQnZjblJjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdZWEp5SUQwZ2JtVjNJRVpzYjJGME16SkJjbkpoZVNodUtUdGNiaUFnSUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0J1T3lCcEt5c3BJR0Z5Y2x0cFhTQTlJREE3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJoY25JN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lFWnNiMkYwTXpKQmNuSmhlU2h1S1RzZ0x5OGdkSGx3WldRZ1lYSnlZWGx6SUdGeVpTQm1ZWE4wWlhKY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCMWRHbHNhWFI1SUhSb1lYUWdjbVYwZFhKdWN5QXlaQ0JoY25KaGVTQm1hV3hzWldRZ2QybDBhQ0J5WVc1a2IyMGdiblZ0WW1WeWMxeHVJQ0FnSUM4dklHOXlJSGRwZEdnZ2RtRnNkV1VnY3l3Z2FXWWdjSEp2ZG1sa1pXUmNiaUFnSUNCd2NtbDJZWFJsSUhKaGJtUnVNbVFvYmpvZ2JuVnRZbVZ5TENCa09pQnVkVzFpWlhJc0lITS9PaUJ1ZFcxaVpYSXBJSHRjYmlBZ0lDQWdJR052Ym5OMElIVnpaWE1nUFNCMGVYQmxiMllnY3lBaFBUMGdKM1Z1WkdWbWFXNWxaQ2M3WEc0Z0lDQWdJQ0JqYjI1emRDQjRJRDBnS0c1bGR5QkJjbkpoZVNodUtTa3VabWxzYkNodWRXeHNLUzV0WVhBb0tDa2dQVDRnYm1WM0lFWnNiMkYwTXpKQmNuSmhlU2hrS1NrN1hHNGdJQ0FnSUNCcFppQW9kWE5sY3lrZ2UxeHVJQ0FnSUNBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJRzQ3SUdrckt5bGNiaUFnSUNBZ0lDQWdJQ0I0VzJsZElEMGdibVYzSUVac2IyRjBNekpCY25KaGVTaGtLUzVtYVd4c0tITXBPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0J1T3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnSUNCbWIzSWdLR3hsZENCcUlEMGdNRHNnYWlBOElHUTdJR29yS3lsY2JpQWdJQ0FnSUNBZ0lDQWdJSGhiYVYxYmFsMGdQU0IwYUdsekxuSmhibVJ1S0RBdU1Dd2dNV1V0TkNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlCNE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklHTnZiWEIxZEdVZ1RESWdaR2x6ZEdGdVkyVWdZbVYwZDJWbGJpQjBkMjhnZG1WamRHOXljMXh1SUNBZ0lIQnlhWFpoZEdVZ2JESW9lREU2SUc1MWJXSmxjbHRkTENCNE1qb2diblZ0WW1WeVcxMHBJSHRjYmlBZ0lDQWdJR052Ym5OMElFUWdQU0I0TVM1c1pXNW5kR2c3WEc0Z0lDQWdJQ0JzWlhRZ1pDQTlJREE3WEc0Z0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUVRN0lHa3JLeWtnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0I0TVdrZ1BTQjRNVnRwWFR0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnZURKcElEMGdlREpiYVYwN1hHNGdJQ0FnSUNBZ0lHUWdLejBnS0hneGFTQXRJSGd5YVNrZ0tpQW9lREZwSUMwZ2VESnBLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSEpsZEhWeWJpQmtPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJR052YlhCMWRHVWdjR0ZwY25kcGMyVWdaR2x6ZEdGdVkyVWdhVzRnWVd4c0lIWmxZM1J2Y25NZ2FXNGdXRnh1SUNBZ0lIQnlhWFpoZEdVZ2VIUnZaQ2hZT2lCQmNuSmhlVHdnUVhKeVlYazhiblZ0WW1WeVBpQStLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQk9JRDBnV0M1c1pXNW5kR2c3WEc0Z0lDQWdJQ0JqYjI1emRDQmthWE4wSUQwZ2RHaHBjeTU2WlhKdmN5aE9JQ29nVGlrN0lDOHZJR0ZzYkc5allYUmxJR052Ym5ScFozVnZkWE1nWVhKeVlYbGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dUanNnYVNzcktTQjdYRzRnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR29nUFNCcElDc2dNVHNnYWlBOElFNDdJR29yS3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElHUWdQU0IwYUdsekxtd3lLRmhiYVYwc0lGaGJhbDBwTzF4dUlDQWdJQ0FnSUNBZ0lHUnBjM1JiYVNBcUlFNGdLeUJxWFNBOUlHUTdYRzRnSUNBZ0lDQWdJQ0FnWkdsemRGdHFJQ29nVGlBcklHbGRJRDBnWkR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2NtVjBkWEp1SUdScGMzUTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NIVmliR2xqSUdkbGRFbDBaWEpUYVhwbEtISnZkMU5wZW1VNklHNTFiV0psY2lrZ2UxeHVJQ0FnSUNBZ2FXWWdLSEp2ZDFOcGVtVWdQRDBnTWpBd01DbGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlERXdNRHRjYmlBZ0lDQWdJR1ZzYzJVZ2FXWWdLSEp2ZDFOcGVtVWdQRDBnTXpBd01DbGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlEa3dPMXh1SUNBZ0lDQWdaV3h6WlNCcFppQW9jbTkzVTJsNlpTQThQU0ExTURBd0tWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z09EQTdYRzRnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUEzTUR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCamIyMXdkWFJsSUNod1gzdHBmR3A5SUNzZ2NGOTdhbnhwZlNrdktESnVLVnh1SUNBZ0lIQnlhWFpoZEdVZ1pESndLRVE2SUVac2IyRjBNekpCY25KaGVTd2djR1Z5Y0d4bGVHbDBlVG9nYm5WdFltVnlMQ0IwYjJ3NklHNTFiV0psY2l3Z2NtOTNVMmw2WlRvZ2JuVnRZbVZ5S1NCN1hHNGdJQ0FnSUNBdkx5QmpiMjV6ZENCdVppQTlJRTFoZEdndWMzRnlkQ2hFTG14bGJtZDBhQ2s3SUM4dklIUm9hWE1nWW1WMGRHVnlJR0psSUdGdUlHbHVkR1ZuWlhKY2JpQWdJQ0FnSUM4dklHTnZibk4wSUc0Z1BTQk5ZWFJvTG1ac2IyOXlLRzVtS1R0Y2JpQWdJQ0FnSUM4dklIUm9hWE11WVhOelpYSjBLRzRnUFQwOUlHNW1MQ0FuUkNCemFHOTFiR1FnYUdGMlpTQnpjWFZoY21VZ2JuVnRZbVZ5SUc5bUlHVnNaVzFsYm5SekxpY3BPMXh1SUNBZ0lDQWdZMjl1YzNRZ2FXNWtaWGhsY2lBOUlHUnRUR2x1WldGeVNXNWtaWGdvY205M1UybDZaU2s3WEc0Z0lDQWdJQ0JqYjI1emRDQmthWE4wWVc1alpYTWdQU0J1WlhjZ1JteHZZWFF6TWtGeWNtRjVLSEp2ZDFOcGVtVWdLaUJ5YjNkVGFYcGxLVHRjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnY205M1UybDZaVHNnYVNzcktTQjdYRzRnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR29nUFNCcElDc2dNVHNnYWlBOElISnZkMU5wZW1VN0lHb3JLeWxjYmlBZ0lDQWdJQ0FnSUNCa2FYTjBZVzVqWlhOYmFTQXFJSEp2ZDFOcGVtVWdLeUJxWFNBOUlHUnBjM1JoYm1ObGMxdHFJQ29nY205M1UybDZaU0FySUdsZElEMGdSRnRwYm1SbGVHVnlLR2tzSUdvcFhUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHTnZibk4wSUc0Z1BTQnliM2RUYVhwbE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYUZSaGNtZGxkQ0E5SUUxaGRHZ3ViRzluS0hCbGNuQnNaWGhwZEhrcE95QXZMeUIwWVhKblpYUWdaVzUwY205d2VTQnZaaUJrYVhOMGNtbGlkWFJwYjI1Y2JpQWdJQ0FnSUdOdmJuTjBJRkFnUFNCMGFHbHpMbnBsY205ektHNGdLaUJ1S1RzZ0x5OGdkR1Z0Y0c5eVlYSjVJSEJ5YjJKaFltbHNhWFI1SUcxaGRISnBlRnh1SUNBZ0lDQWdZMjl1YzNRZ2NISnZkeUE5SUhSb2FYTXVlbVZ5YjNNb2JpazdJQzh2SUdFZ2RHVnRjRzl5WVhKNUlITjBiM0poWjJVZ1kyOXRjR0Z5ZEcxbGJuUmNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dianNnYVNzcktTQjdYRzRnSUNBZ0lDQWdJR3hsZENCaVpYUmhiV2x1SUQwZ0xVbHVabWx1YVhSNU8xeHVJQ0FnSUNBZ0lDQnNaWFFnWW1WMFlXMWhlQ0E5SUVsdVptbHVhWFI1TzF4dUlDQWdJQ0FnSUNCc1pYUWdZbVYwWVNBOUlERTdJQzh2SUdsdWFYUnBZV3dnZG1Gc2RXVWdiMllnY0hKbFkybHphVzl1WEc0Z0lDQWdJQ0FnSUd4bGRDQmtiMjVsSUQwZ1ptRnNjMlU3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJRzFoZUhSeWFXVnpJRDBnVFdGMGFDNW1iRzl2Y2loMGFHbHpMbWRsZEVsMFpYSlRhWHBsS0hKdmQxTnBlbVVwSUM4Z05TazdYRzVjYmlBZ0lDQWdJQ0FnTHk4Z2NHVnlabTl5YlNCaWFXNWhjbmtnYzJWaGNtTm9JSFJ2SUdacGJtUWdZU0J6ZFdsMFlXSnNaU0J3Y21WamFYTnBiMjRnWW1WMFlWeHVJQ0FnSUNBZ0lDQXZMeUJ6YnlCMGFHRjBJSFJvWlNCbGJuUnliM0I1SUc5bUlIUm9aU0JrYVhOMGNtbGlkWFJwYjI0Z2FYTWdZWEJ3Y205d2NtbGhkR1ZjYmlBZ0lDQWdJQ0FnYkdWMElHNTFiU0E5SURBN1hHNGdJQ0FnSUNBZ0lIZG9hV3hsSUNnaFpHOXVaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDOHZaR1ZpZFdkblpYSTdYRzVjYmlBZ0lDQWdJQ0FnSUNBdkx5QmpiMjF3ZFhSbElHVnVkSEp2Y0hrZ1lXNWtJR3RsY201bGJDQnliM2NnZDJsMGFDQmlaWFJoSUhCeVpXTnBjMmx2Ymx4dUlDQWdJQ0FnSUNBZ0lHeGxkQ0J3YzNWdElEMGdNQzR3TzF4dUlDQWdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHb2dQU0F3T3lCcUlEd2dianNnYWlzcktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J3YWlBOUlHa2dQVDA5SUdvZ1B5QXdJRG9nVFdGMGFDNWxlSEFvTFNCa2FYTjBZVzVqWlhOYmFTQXFJRzRnS3lCcVhTQXFJR0psZEdFcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnY0hKdmQxdHFYU0E5SUhCcU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnY0hOMWJTQXJQU0J3YWp0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnTHk4Z2JtOXliV0ZzYVhwbElIQWdZVzVrSUdOdmJYQjFkR1VnWlc1MGNtOXdlVnh1SUNBZ0lDQWdJQ0FnSUd4bGRDQnVTR1Z5WlNBOUlEQXVNRHRjYmlBZ0lDQWdJQ0FnSUNCbWIzSWdLR3hsZENCcUlEMGdNRHNnYWlBOElHNDdJR29yS3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElIQnFPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSEJ6ZFcwZ1BUMDlJREFwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEJxSUQwZ01EdGNiaUFnSUNBZ0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NHb2dQU0J3Y205M1cycGRJQzhnY0hOMWJUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2NISnZkMXRxWFNBOUlIQnFPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSEJxSUQ0Z01XVXROeWtnYmtobGNtVWdMVDBnY0dvZ0tpQk5ZWFJvTG14dlp5aHdhaWs3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1lXUnFkWE4wSUdKbGRHRWdZbUZ6WldRZ2IyNGdjbVZ6ZFd4MFhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0c1SVpYSmxJRDRnYUZSaGNtZGxkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnWlc1MGNtOXdlU0IzWVhNZ2RHOXZJR2hwWjJnZ0tHUnBjM1J5YVdKMWRHbHZiaUIwYjI4Z1pHbG1ablZ6WlNsY2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUhOdklIZGxJRzVsWldRZ2RHOGdhVzVqY21WaGMyVWdkR2hsSUhCeVpXTnBjMmx2YmlCbWIzSWdiVzl5WlNCd1pXRnJlU0JrYVhOMGNtbGlkWFJwYjI1Y2JpQWdJQ0FnSUNBZ0lDQWdJR0psZEdGdGFXNGdQU0JpWlhSaE95QXZMeUJ0YjNabElIVndJSFJvWlNCaWIzVnVaSE5jYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hpWlhSaGJXRjRJRDA5UFNCSmJtWnBibWwwZVNrZ1ltVjBZU0E5SUdKbGRHRWdLaUF5T3lCbGJITmxJR0psZEdFZ1BTQW9ZbVYwWVNBcklHSmxkR0Z0WVhncElDOGdNanRjYmlBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnWTI5dWRtVnljMlVnWTJGelpTNGdiV0ZyWlNCa2FYTjBjblZpZEdsdmJpQnNaWE56SUhCbFlXdDVYRzRnSUNBZ0lDQWdJQ0FnSUNCaVpYUmhiV0Y0SUQwZ1ltVjBZVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hpWlhSaGJXbHVJRDA5UFNBdFNXNW1hVzVwZEhrcElHSmxkR0VnUFNCaVpYUmhJQzhnTWpzZ1pXeHpaU0JpWlhSaElEMGdLR0psZEdFZ0t5QmlaWFJoYldsdUtTQXZJREk3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnTHk4Z2MzUnZjSEJwYm1jZ1kyOXVaR2wwYVc5dWN6b2dkRzl2SUcxaGJua2dkSEpwWlhNZ2IzSWdaMjkwSUdFZ1oyOXZaQ0J3Y21WamFYTnBiMjVjYmlBZ0lDQWdJQ0FnSUNCdWRXMHJLenRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9UV0YwYUM1aFluTW9ia2hsY21VZ0xTQm9WR0Z5WjJWMEtTQThJSFJ2YkNrZ1pHOXVaU0E5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHNTFiU0ErUFNCdFlYaDBjbWxsY3lrZ1pHOXVaU0E5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBdkx5QmpiMjV6YjJ4bExteHZaeWduWkdGMFlTQndiMmx1ZENBbklDc2dhU0FySUNjZ1oyVjBjeUJ3Y21WamFYTnBiMjRnSnlBcklHSmxkR0VnS3lBbklHRm1kR1Z5SUNjZ0t5QnVkVzBnS3lBbklHSnBibUZ5ZVNCelpXRnlZMmdnYzNSbGNITXVKeWs3WEc0Z0lDQWdJQ0FnSUM4dklHTnZjSGtnYjNabGNpQjBhR1VnWm1sdVlXd2djSEp2ZHlCMGJ5QlFJR0YwSUhKdmR5QnBYRzRnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR29nUFNBd095QnFJRHdnYmpzZ2Fpc3JLU0JRVzJrZ0tpQnVJQ3NnYWwwZ1BTQndjbTkzVzJwZE8xeHVJQ0FnSUNBZ2ZTQXZMeUJsYm1RZ2JHOXZjQ0J2ZG1WeUlHVjRZVzF3YkdWeklHbGNibHh1SUNBZ0lDQWdMeThnYzNsdGJXVjBjbWw2WlNCUUlHRnVaQ0J1YjNKdFlXeHBlbVVnYVhRZ2RHOGdjM1Z0SUhSdklERWdiM1psY2lCaGJHd2dhV3BjYmlBZ0lDQWdJR052Ym5OMElIQlBkWFFnUFNCMGFHbHpMbnBsY205ektHNGdLaUJ1S1R0Y2JpQWdJQ0FnSUdOdmJuTjBJRTR5SUQwZ2JpQXFJREk3WEc0Z0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUc0N0lHa3JLeWtnZTF4dUlDQWdJQ0FnSUNCbWIzSWdLR3hsZENCcUlEMGdNRHNnYWlBOElHNDdJR29yS3lsY2JpQWdJQ0FnSUNBZ0lDQndUM1YwVzJrZ0tpQnVJQ3NnYWwwZ1BTQk5ZWFJvTG0xaGVDZ29VRnRwSUNvZ2JpQXJJR3BkSUNzZ1VGdHFJQ29nYmlBcklHbGRLU0F2SUU0eUxDQXhaUzB4TURBcE8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQnlaWFIxY200Z2NFOTFkRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJvWld4d1pYSWdablZ1WTNScGIyNWNiaUFnSUNCd2NtbDJZWFJsSUhOcFoyNG9lRG9nYm5WdFltVnlLU0I3SUhKbGRIVnliaUI0SUQ0Z01DQS9JREVnT2lCNElEd2dNQ0EvSUMweElEb2dNRHNnZlZ4dVhHNGdJQ0FnWTI5dWMzUnlkV04wYjNJb2IzQjBPaUI3VzE4NklITjBjbWx1WjEwNklHRnVlWDBwSUh0Y2JpQWdJQ0FnSUc5d2RDQTlJRzl3ZENCOGZDQjdmVHRjYmlBZ0lDQWdJSFJvYVhNdWNHVnljR3hsZUdsMGVTQTlJSFJvYVhNdVoyVjBiM0IwS0c5d2RDd2dKM0JsY25Cc1pYaHBkSGtuTENBek1DazdJQzh2SUdWbVptVmpkR2wyWlNCdWRXMWlaWElnYjJZZ2JtVmhjbVZ6ZENCdVpXbG5hR0p2Y25OY2JpQWdJQ0FnSUhSb2FYTXVaR2x0SUQwZ2RHaHBjeTVuWlhSdmNIUW9iM0IwTENBblpHbHRKeXdnTWlrN0lDOHZJR0o1SUdSbFptRjFiSFFnTWkxRUlIUlRUa1ZjYmlBZ0lDQWdJSFJvYVhNdVpYQnphV3h2YmlBOUlIUm9hWE11WjJWMGIzQjBLRzl3ZEN3Z0oyVndjMmxzYjI0bkxDQXhNQ2s3SUM4dklHeGxZWEp1YVc1bklISmhkR1ZjYmlBZ0lDQWdJSFJvYVhNdWNtRnVaRzl0SUQwZ2RHaHBjeTVuWlhSdmNIUW9iM0IwTENBbmNtRnVaRzl0Snl3Z1RXRjBhQzV5WVc1a2IyMHBPeUF2THlCeVlXNWtiMjBnYm5WdFltVnlJR2RsYm1WeVlYUnZjbHh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJSFJvYVhNZ1puVnVZM1JwYjI0Z2RHRnJaWE1nWVNCelpYUWdiMllnYUdsbmFDMWthVzFsYm5OcGIyNWhiQ0J3YjJsdWRITmNiaUFnSUNBdkx5QmhibVFnWTNKbFlYUmxjeUJ0WVhSeWFYZ2dVQ0JtY205dElIUm9aVzBnZFhOcGJtY2daMkYxYzNOcFlXNGdhMlZ5Ym1Wc1hHNGdJQ0FnY0hWaWJHbGpJR2x1YVhSRVlYUmhVbUYzS0ZnNklFRnljbUY1UEVGeWNtRjVQR0Z1ZVQ0K0tTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCT0lEMGdXQzVzWlc1bmRHZzdYRzRnSUNBZ0lDQmpiMjV6ZENCRUlEMGdXRnN3WFM1c1pXNW5kR2c3WEc0Z0lDQWdJQ0IwYUdsekxtRnpjMlZ5ZENoT0lENGdNQ3dnSnlCWUlHbHpJR1Z0Y0hSNVB5QlpiM1VnYlhWemRDQm9ZWFpsSUhOdmJXVWdaR0YwWVNFbktUdGNiaUFnSUNBZ0lIUm9hWE11WVhOelpYSjBLRVFnUGlBd0xDQW5JRmhiTUYwZ2FYTWdaVzF3ZEhrL0lGZG9aWEpsSUdseklIUm9aU0JrWVhSaFB5Y3BPMXh1SUNBZ0lDQWdZMjl1YzNRZ1pHbHpkSE1nUFNCMGFHbHpMbmgwYjJRb1dDazdJQzh2SUdOdmJuWmxjblFnV0NCMGJ5QmthWE4wWVc1alpYTWdkWE5wYm1jZ1oyRjFjM05wWVc0Z2EyVnlibVZzWEc0Z0lDQWdJQ0IwYUdsekxsQWdQU0IwYUdsekxtUXljQ2hrYVhOMGN5d2dkR2hwY3k1d1pYSndiR1Y0YVhSNUxDQXhaUzAwTENCRUtUc2dMeThnWVhSMFlXTm9JSFJ2SUc5aWFtVmpkRnh1SUNBZ0lDQWdkR2hwY3k1T0lEMGdUanNnTHk4Z1ltRmpheUIxY0NCMGFHVWdjMmw2WlNCdlppQjBhR1VnWkdGMFlYTmxkRnh1SUNBZ0lDQWdkR2hwY3k1cGJtbDBVMjlzZFhScGIyNG9LVHNnTHk4Z2NtVm1jbVZ6YUNCMGFHbHpYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGdkR2hwY3lCbWRXNWpkR2x2YmlCMFlXdGxjeUJoSUdkcGRtVnVJR1JwYzNSaGJtTmxJRzFoZEhKcGVDQmhibVFnWTNKbFlYUmxjMXh1SUNBZ0lDOHZJRzFoZEhKcGVDQlFJR1p5YjIwZ2RHaGxiUzVjYmlBZ0lDQXZMeUJFSUdseklHRnpjM1Z0WldRZ2RHOGdZbVVnY0hKdmRtbGtaV1FnWVhNZ1lTQnNhWE4wSUc5bUlHeHBjM1J6TENCaGJtUWdjMmh2ZFd4a0lHSmxJSE41YlcxbGRISnBZMXh1SUNBZ0lIQjFZbXhwWXlCcGJtbDBSR0YwWVVScGMzUW9SRG9nUm14dllYUXpNa0Z5Y21GNUxDQnliM2RUYVhwbE9pQnVkVzFpWlhJcElIdGNiaUFnSUNBZ0lHTnZibk4wSUU0Z1BTQkVMbXhsYm1kMGFEdGNiaUFnSUNBZ0lIUm9hWE11WVhOelpYSjBLRTRnUGlBd0xDQW5JRmdnYVhNZ1pXMXdkSGsvSUZsdmRTQnRkWE4wSUdoaGRtVWdjMjl0WlNCa1lYUmhJU2NwTzF4dUlDQWdJQ0FnTHk4Z1kyOXVkbVZ5ZENCRUlIUnZJR0VnS0daaGMzUXBJSFI1Y0dWa0lHRnljbUY1SUhabGNuTnBiMjVjYmlBZ0lDQWdJQzh2SUdScGMzUnpMbVp2Y2tWaFkyZ29LR1FwSUQwK0lHTnZibk52YkdVdWJHOW5LR1FwS1R0Y2JpQWdJQ0FnSUdOdmJuTnZiR1V1ZEdsdFpTZ25aR2x6ZEdGdVkyVnpJSFJ2SUcxaGRISnBlQ2NwTzF4dUlDQWdJQ0FnZEdocGN5NVFJRDBnZEdocGN5NWtNbkFvUkN3Z2RHaHBjeTV3WlhKd2JHVjRhWFI1TENBeFpTMDBMQ0J5YjNkVGFYcGxLVHRjYmlBZ0lDQWdJR052Ym5OdmJHVXVkR2x0WlVWdVpDZ25aR2x6ZEdGdVkyVnpJSFJ2SUcxaGRISnBlQ2NwTzF4dUlDQWdJQ0FnZEdocGN5NU9JRDBnY205M1UybDZaVHRjYmlBZ0lDQWdJSFJvYVhNdWFXNXBkRk52YkhWMGFXOXVLQ2s3SUM4dklISmxabkpsYzJnZ2RHaHBjMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJQ2h5WlNscGJtbDBhV0ZzYVhwbGN5QjBhR1VnYzI5c2RYUnBiMjRnZEc4Z2NtRnVaRzl0WEc0Z0lDQWdjSFZpYkdsaklHbHVhWFJUYjJ4MWRHbHZiaWdwSUh0Y2JpQWdJQ0FnSUM4dklHZGxibVZ5WVhSbElISmhibVJ2YlNCemIyeDFkR2x2YmlCMGJ5QjBMVk5PUlZ4dUlDQWdJQ0FnZEdocGN5NVpJRDBnZEdocGN5NXlZVzVrYmpKa0tIUm9hWE11VGl3Z2RHaHBjeTVrYVcwcE95QXZMeUIwYUdVZ2MyOXNkWFJwYjI1Y2JpQWdJQ0FnSUhSb2FYTXVaMkZwYm5NZ1BTQjBhR2x6TG5KaGJtUnVNbVFvZEdocGN5NU9MQ0IwYUdsekxtUnBiU3dnTVM0d0tUc2dMeThnYzNSbGNDQm5ZV2x1Y3lCMGJ5QmhZMk5sYkdWeVlYUmxJSEJ5YjJkeVpYTnpJR2x1SUhWdVkyaGhibWRwYm1jZ1pHbHlaV04wYVc5dWMxeHVJQ0FnSUNBZ2RHaHBjeTU1YzNSbGNDQTlJSFJvYVhNdWNtRnVaRzR5WkNoMGFHbHpMazRzSUhSb2FYTXVaR2x0TENBd0xqQXBPeUF2THlCdGIyMWxiblIxYlNCaFkyTjFiWFZzWVhSdmNseHVJQ0FnSUNBZ2RHaHBjeTVwZEdWeUlEMGdNRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJ5WlhSMWNtNGdjRzlwYm5SbGNpQjBieUJqZFhKeVpXNTBJSE52YkhWMGFXOXVYRzRnSUNBZ2NIVmliR2xqSUdkbGRGTnZiSFYwYVc5dUtDa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11V1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCd1pYSm1iM0p0SUdFZ2MybHVaMnhsSUhOMFpYQWdiMllnYjNCMGFXMXBlbUYwYVc5dUlIUnZJR2x0Y0hKdmRtVWdkR2hsSUdWdFltVmtaR2x1WjF4dUlDQWdJSEIxWW14cFl5QnpkR1Z3S0NrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVwZEdWeUlDczlJREU3WEc0Z0lDQWdJQ0JqYjI1emRDQk9JRDBnZEdocGN5NU9PMXh1SUNBZ0lDQWdZMjl1YzNRZ1kyY2dQU0IwYUdsekxtTnZjM1JIY21Ga0tIUm9hWE11V1NrN0lDOHZJR1YyWVd4MVlYUmxJR2R5WVdScFpXNTBYRzRnSUNBZ0lDQmpiMjV6ZENCamIzTjBJRDBnWTJjdVkyOXpkRHRjYmlBZ0lDQWdJR052Ym5OMElHZHlZV1FnUFNCalp5NW5jbUZrTzF4dVhHNGdJQ0FnSUNBdkx5QndaWEptYjNKdElHZHlZV1JwWlc1MElITjBaWEJjYmlBZ0lDQWdJR052Ym5OMElIbHRaV0Z1SUQwZ2RHaHBjeTU2WlhKdmN5aDBhR2x6TG1ScGJTazdYRzRnSUNBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJRTQ3SUdrckt5a2dlMXh1SUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JrSUQwZ01Ec2daQ0E4SUhSb2FYTXVaR2x0T3lCa0t5c3BJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JuYVdRZ1BTQm5jbUZrVzJsZFcyUmRPMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSE5wWkNBOUlIUm9hWE11ZVhOMFpYQmJhVjFiWkYwN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1oyRnBibWxrSUQwZ2RHaHBjeTVuWVdsdWMxdHBYVnRrWFR0Y2JseHVJQ0FnSUNBZ0lDQWdJQzh2SUdOdmJYQjFkR1VnWjJGcGJpQjFjR1JoZEdWY2JpQWdJQ0FnSUNBZ0lDQnNaWFFnYm1WM1oyRnBiaUE5SUhSb2FYTXVjMmxuYmlobmFXUXBJRDA5UFNCMGFHbHpMbk5wWjI0b2MybGtLU0EvSUdkaGFXNXBaQ0FxSURBdU9DQTZJR2RoYVc1cFpDQXJJREF1TWp0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvYm1WM1oyRnBiaUE4SURBdU1ERXBJRzVsZDJkaGFXNGdQU0F3TGpBeE95QXZMeUJqYkdGdGNGeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVoyRnBibk5iYVYxYlpGMGdQU0J1WlhkbllXbHVPeUF2THlCemRHOXlaU0JtYjNJZ2JtVjRkQ0IwZFhKdVhHNWNiaUFnSUNBZ0lDQWdJQ0F2THlCamIyMXdkWFJsSUcxdmJXVnVkSFZ0SUhOMFpYQWdaR2x5WldOMGFXOXVYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdiVzl0ZG1Gc0lEMGdkR2hwY3k1cGRHVnlJRHdnTWpVd0lEOGdNQzQxSURvZ01DNDRPMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJRzVsZDNOcFpDQTlJRzF2YlhaaGJDQXFJSE5wWkNBdElIUm9hWE11WlhCemFXeHZiaUFxSUc1bGQyZGhhVzRnS2lCbmNtRmtXMmxkVzJSZE8xeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWVYTjBaWEJiYVYxYlpGMGdQU0J1WlhkemFXUTdJQzh2SUhKbGJXVnRZbVZ5SUhSb1pTQnpkR1Z3SUhkbElIUnZiMnRjYmx4dUlDQWdJQ0FnSUNBZ0lDOHZJSE4wWlhBaFhHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1WlcybGRXMlJkSUNzOUlHNWxkM05wWkR0Y2JseHVJQ0FnSUNBZ0lDQWdJSGx0WldGdVcyUmRJQ3M5SUhSb2FYTXVXVnRwWFZ0a1hUc2dMeThnWVdOamRXMTFiR0YwWlNCdFpXRnVJSE52SUhSb1lYUWdkMlVnWTJGdUlHTmxiblJsY2lCc1lYUmxjbHh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUM4dklISmxjSEp2YW1WamRDQlpJSFJ2SUdKbElIcGxjbThnYldWaGJseHVJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQk9PeUJwS3lzcElIdGNiaUFnSUNBZ0lDQWdabTl5SUNoc1pYUWdaQ0E5SURBN0lHUWdQQ0IwYUdsekxtUnBiVHNnWkNzcktWeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVdWdHBYVnRrWFNBdFBTQjViV1ZoYmx0a1hTQXZJRTQ3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUM4dmFXWW9kR2hwY3k1cGRHVnlKVEV3TUQwOVBUQXBJR052Ym5OdmJHVXViRzluS0NkcGRHVnlJQ2NnS3lCMGFHbHpMbWwwWlhJZ0t5QW5MQ0JqYjNOME9pQW5JQ3NnWTI5emRDazdYRzRnSUNBZ0lDQnlaWFIxY200Z1kyOXpkRHNnTHk4Z2NtVjBkWEp1SUdOMWNuSmxiblFnWTI5emRGeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklHWnZjaUJrWldKMVoyZHBibWM2SUdkeVlXUnBaVzUwSUdOb1pXTnJYRzRnSUNBZ2NIVmliR2xqSUdSbFluVm5SM0poWkNncElIdGNiaUFnSUNBZ0lHTnZibk4wSUU0Z1BTQjBhR2x6TGs0N1hHNWNiaUFnSUNBZ0lHTnZibk4wSUdObklEMGdkR2hwY3k1amIzTjBSM0poWkNoMGFHbHpMbGtwT3lBdkx5QmxkbUZzZFdGMFpTQm5jbUZrYVdWdWRGeHVJQ0FnSUNBZ0x5OWpiMjV6ZENCamIzTjBJRDBnWTJjdVkyOXpkRHRjYmlBZ0lDQWdJR052Ym5OMElHZHlZV1FnUFNCalp5NW5jbUZrTzF4dVhHNGdJQ0FnSUNCamIyNXpkQ0JsSUQwZ01XVXROVHRjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnVGpzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0FnSUdadmNpQW9iR1YwSUdRZ1BTQXdPeUJrSUR3Z2RHaHBjeTVrYVcwN0lHUXJLeWtnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUhsdmJHUWdQU0IwYUdsekxsbGJhVjFiWkYwN1hHNWNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxsbGJhVjFiWkYwZ1BTQjViMnhrSUNzZ1pUdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmpaekFnUFNCMGFHbHpMbU52YzNSSGNtRmtLSFJvYVhNdVdTazdYRzVjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbGxiYVYxYlpGMGdQU0I1YjJ4a0lDMGdaVHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JqWnpFZ1BTQjBhR2x6TG1OdmMzUkhjbUZrS0hSb2FYTXVXU2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCaGJtRnNlWFJwWXlBOUlHZHlZV1JiYVYxYlpGMDdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdiblZ0WlhKcFkyRnNJRDBnS0dObk1DNWpiM04wSUMwZ1kyY3hMbU52YzNRcElDOGdLRElnS2lCbEtUdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emIyeGxMbXh2WnlocElDc2dKeXduSUNzZ1pDQXJJQ2M2SUdkeVlXUmphR1ZqYXlCaGJtRnNlWFJwWXpvZ0p5QXJJR0Z1WVd4NWRHbGpJQ3NnSnlCMmN5NGdiblZ0WlhKcFkyRnNPaUFuSUNzZ2JuVnRaWEpwWTJGc0tUdGNibHh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVXVnRwWFZ0a1hTQTlJSGx2YkdRN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCd2NtbDJZWFJsSUhGMVFYSnlQem9nUm14dllYUXpNa0Z5Y21GNU8xeHVJQ0FnSUM4dklISmxkSFZ5YmlCamIzTjBJR0Z1WkNCbmNtRmthV1Z1ZEN3Z1oybDJaVzRnWVc0Z1lYSnlZVzVuWlcxbGJuUmNiaUFnSUNCd2RXSnNhV01nWTI5emRFZHlZV1FvV1RvZ2JuVnRZbVZ5VzExYlhTa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1RpQTlJSFJvYVhNdVRqdGNiaUFnSUNBZ0lHTnZibk4wSUdScGJTQTlJSFJvYVhNdVpHbHRPeUF2THlCa2FXMGdiMllnYjNWMGNIVjBJSE53WVdObFhHNGdJQ0FnSUNCamIyNXpkQ0JRSUQwZ2RHaHBjeTVRTzF4dVhHNGdJQ0FnSUNCamIyNXpkQ0J3YlhWc0lEMGdkR2hwY3k1cGRHVnlJRHdnTVRBd0lEOGdOQ0E2SURFN0lDOHZJSFJ5YVdOcklIUm9ZWFFnYUdWc2NITWdkMmwwYUNCc2IyTmhiQ0J2Y0hScGJXRmNibHh1SUNBZ0lDQWdMeThnWTI5dGNIVjBaU0JqZFhKeVpXNTBJRkVnWkdsemRISnBZblYwYVc5dUxDQjFibTV2Y20xaGJHbDZaV1FnWm1seWMzUmNiaUFnSUNBZ0lIUm9hWE11Y1hWQmNuSWdQejg5SUhSb2FYTXVlbVZ5YjNNb1RpQXFJRTRwTzF4dUlDQWdJQ0FnYkdWMElIRnpkVzBnUFNBd0xqQTdYRzRnSUNBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJRTQ3SUdrckt5a2dlMXh1SUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JxSUQwZ2FTQXJJREU3SUdvZ1BDQk9PeUJxS3lzcElIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmtjM1Z0SUQwZ2JtVjNJRUZ5Y21GNUtHUnBiU2t1Y21Wa2RXTmxLQ2h3Y21WMkxDQmZMQ0JrS1NBOVBpQndjbVYySUNzZ1RXRjBhQzV3YjNjb1dWdHBYVnRrWFNBdElGbGJhbDFiWkYwc0lESXBMQ0F3S1R0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCeGRTQTlJREV1TUNBdklDZ3hMakFnS3lCa2MzVnRLVHNnTHk4Z1UzUjFaR1Z1ZENCMExXUnBjM1J5YVdKMWRHbHZibHh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVjWFZCY25KYmFTQXFJRTRnS3lCcVhTQTlJSEYxTzF4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11Y1hWQmNuSmJhaUFxSUU0Z0t5QnBYU0E5SUhGMU8xeHVJQ0FnSUNBZ0lDQWdJSEZ6ZFcwZ0t6MGdNaUFxSUhGMU8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQXZMeUJ1YjNKdFlXeHBlbVVnVVNCa2FYTjBjbWxpZFhScGIyNGdkRzhnYzNWdElIUnZJREZjYmlBZ0lDQWdJQzh2WTI5dWMzUWdUazRnUFNCT0lDb2dUanRjYmlBZ0lDQWdJQzh2WTI5dWMzUWdVU0E5SUhSb2FYTXVlbVZ5YjNNb1RrNHBPMXh1SUNBZ0lDQWdiR1YwSUdOdmMzUWdQU0F3TGpBN1hHNGdJQ0FnSUNCamIyNXpkQ0JuY21Ga0lEMGdibVYzSUVGeWNtRjVLRTRwTG1acGJHd29iblZzYkNrdWJXRndLQ2dwSUQwK0lDaHVaWGNnUm14dllYUXpNa0Z5Y21GNUtHUnBiU2twTG1acGJHd29NQzR3S1NrN1hHNGdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElFNDdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJqYjI1emRDQm5jM1Z0SUQwZ2JtVjNJRVpzYjJGME16SkJjbkpoZVNoa2FXMHBMbVpwYkd3b01DNHdLVHNnTHk4Z2FXNXBkQ0JuY21Ga0lHWnZjaUJ3YjJsdWRDQnBYRzRnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR29nUFNCcElDc2dNVHNnYWlBOElFNDdJR29yS3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElGRWdQU0JOWVhSb0xtMWhlQ2gwYUdsekxuRjFRWEp5VzJrZ0tpQk9JQ3NnYWwwZ0x5QnhjM1Z0TENBeFpTMHhNREFwTzF4dUlDQWdJQ0FnSUNBZ0lHTnZjM1FnS3owZ0tDMGdVRnRwSUNvZ1RpQXJJR3BkSUNvZ1RXRjBhQzVzYjJjb1VTa3BJQ29nTWpzZ0x5OGdZV05qZFcxMWJHRjBaU0JqYjNOMElDaDBhR1VnYm05dUxXTnZibk4wWVc1MElIQnZjblJwYjI0Z1lYUWdiR1ZoYzNRdUxpNHBYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjSEpsYlhWc2RDQTlJRFFnS2lBb2NHMTFiQ0FxSUZCYmFTQXFJRTRnS3lCcVhTQXRJRkVwSUNvZ2RHaHBjeTV4ZFVGeWNsdHBJQ29nVGlBcklHcGRPMXh1SUNBZ0lDQWdJQ0FnSUM4dlkyOXVjMjlzWlM1c2IyY29jSEpsYlhWc2RDd2dVU3dnYVN3Z2FpazdYRzRnSUNBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnWkNBOUlEQTdJR1FnUENCa2FXMDdJR1FyS3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWjNKaFpGdHBYVnRrWFNBclBTQndjbVZ0ZFd4MElDb2dLRmxiYVYxYlpGMGdMU0JaVzJwZFcyUmRLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHZHlZV1JiYWwxYlpGMGdLejBnY0hKbGJYVnNkQ0FxSUNoWlcycGRXMlJkSUMwZ1dWdHBYVnRrWFNrN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUM4dlozSmhaRnRwWFNBOUlHZHpkVzA3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUhKbGRIVnliaUI3WTI5emRDd2daM0poWkgwN1hHNGdJQ0FnZlZ4dWZWeHVJbDE5IiwiLyoqIFByb3h5IGZvciBEaXN0YW5jZU1hdHJpeCBjbGFzcy4gQWxsb3dzIHRvIGluZGV4IG1hdHJpeCBhcyBtYXRyaXhbaV1bal1cbiAqIE5vdGU6IG11Y2ggc2xvd2VyIHRoYW4gZGlyZWN0IGluZGV4aW5nLCBidXQgc3RpbGwgbXVjaCBmYXN0ZXIgdGhhbiByZWNhbGN1bGF0aW5nIGRpc3RhbmNlcy5cbiAqIHdpbGwgYmUgdXNlZCBmb3IgVC1TTkUgbWFpbmx5LlxuICogQHBhcmFtIHtGbG9hdDMyQXJyYXl9Y29uZGVuc2VkQXJyYXkgLSBhcnJheSBvZiBkaXN0YW5jZXMgYmV0d2VlbiBhbGwgcGFpcnMgb2Ygb2JqZWN0c1xuICogQHBhcmFtIHtudW1iZXJ9c2l6ZSAtIG51bWJlciBvZiBjb21wYXJlYmxlcyBpbiBtYXRyaXhcbiAqIEByZXR1cm4ge0Zsb2F0MzJBcnJheX0gLSBwcm94eSBmb3IgY29uZGVuc2VkQXJyYXlcbiovXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VNYXRyaXhQcm94eShjb25kZW5zZWRBcnJheSwgc2l6ZSkge1xuICAgIGNvbnN0IGxpbmVhckZ1bmMgPSBkbUxpbmVhckluZGV4KHNpemUpO1xuICAgIGZ1bmN0aW9uIGxpbmVhckluZGV4KGksIGopIHtcbiAgICAgICAgY29uc3QgaU51bSA9IE51bWJlcihpKTtcbiAgICAgICAgY29uc3Qgak51bSA9IE51bWJlcihqKTtcbiAgICAgICAgcmV0dXJuIGxpbmVhckZ1bmMoaU51bSwgak51bSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlkeDJIYW5kbGVyKGlkeDEpIHtcbiAgICAgICAgcmV0dXJuICh7XG4gICAgICAgICAgICBnZXQodGFyZ2V0LCBpZHgyLCBfcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaWR4MSA9PT0gaWR4MilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZWFySWR4ID0gTnVtYmVyKGlkeDEpID4gTnVtYmVyKGlkeDIpID8gbGluZWFySW5kZXgoaWR4MiwgaWR4MSkgOiBsaW5lYXJJbmRleChpZHgxLCBpZHgyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0W2xpbmVhcklkeF07XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgaWR4MUhhbmRsZXIgPSB7XG4gICAgICAgIGdldCh0YXJnZXQsIGlkeDEsIF9yZWNlaXZlcikge1xuICAgICAgICAgICAgaWYgKGlkeDEgPT09ICdsZW5ndGgnKVxuICAgICAgICAgICAgICAgIHJldHVybiBzaXplO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm94eSh0YXJnZXQsIGlkeDJIYW5kbGVyKGlkeDEpKTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJveHkoY29uZGVuc2VkQXJyYXksIGlkeDFIYW5kbGVyKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkbUxpbmVhckluZGV4KHNpemUpIHtcbiAgICByZXR1cm4gKGksIGopID0+IHNpemUgKiBpICsgaiAtIE1hdGguZmxvb3IoKChpICsgMikgKiAoaSArIDEpKSAvIDIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pY0hKdmVIa3Vhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKd2NtOTRlUzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGRlFUczdPenM3TzBWQlRVVTdRVUZEUml4TlFVRk5MRlZCUVZVc2JVSkJRVzFDTEVOQlFVTXNZMEZCTkVJc1JVRkJSU3hKUVVGWk8wbEJRelZGTEUxQlFVMHNWVUZCVlN4SFFVRkhMR0ZCUVdFc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU4yUXl4VFFVRlRMRmRCUVZjc1EwRkJReXhEUVVGclFpeEZRVUZGTEVOQlFXdENPMUZCUTNwRUxFMUJRVTBzU1VGQlNTeEhRVUZITEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOMlFpeE5RVUZOTEVsQlFVa3NSMEZCUnl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGRrSXNUMEZCVHl4VlFVRlZMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzBsQlEyaERMRU5CUVVNN1NVRkZSQ3hUUVVGVExGZEJRVmNzUTBGQlF5eEpRVUZ4UWp0UlFVTjRReXhQUVVGUExFTkJRMHc3V1VGRFJTeEhRVUZITEVOQlFVTXNUVUZCVFN4RlFVRkZMRWxCUVVrc1JVRkJSU3hUUVVGVE8yZENRVU42UWl4SlFVRkpMRWxCUVVrc1MwRkJTeXhKUVVGSk8yOUNRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMmRDUVVNMVFpeE5RVUZOTEZOQlFWTXNSMEZCUnl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMmRDUVVOc1J5eFBRVUZQTEUxQlFVMHNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRaUVVNelFpeERRVUZETzFOQlEwWXNRMEZEUml4RFFVRkRPMGxCUTBvc1EwRkJRenRKUVVORUxFMUJRVTBzVjBGQlZ5eEhRVUVyUWp0UlFVTTVReXhIUVVGSExFTkJRVU1zVFVGQlRTeEZRVUZGTEVsQlFVa3NSVUZCUlN4VFFVRlRPMWxCUTNwQ0xFbEJRVWtzU1VGQlNTeExRVUZMTEZGQlFWRTdaMEpCUVVVc1QwRkJUeXhKUVVGSkxFTkJRVU03V1VGRGJrTXNUMEZCVHl4SlFVRkpMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRPVU1zUTBGQlF6dExRVU5HTEVOQlFVTTdTVUZGUml4UFFVRlBMRWxCUVVrc1MwRkJTeXhEUVVGRExHTkJRV01zUlVGQlJTeFhRVUZYTEVOQlFVTXNRMEZCUXp0QlFVTm9SQ3hEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEdGQlFXRXNRMEZCUXl4SlFVRlpPMGxCUTNoRExFOUJRVThzUTBGQlF5eERRVUZUTEVWQlFVVXNRMEZCVXl4RlFVRkZMRVZCUVVVc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOMFJpeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVhHNWNiaThxS2lCUWNtOTRlU0JtYjNJZ1JHbHpkR0Z1WTJWTllYUnlhWGdnWTJ4aGMzTXVJRUZzYkc5M2N5QjBieUJwYm1SbGVDQnRZWFJ5YVhnZ1lYTWdiV0YwY21sNFcybGRXMnBkWEc0Z0tpQk9iM1JsT2lCdGRXTm9JSE5zYjNkbGNpQjBhR0Z1SUdScGNtVmpkQ0JwYm1SbGVHbHVaeXdnWW5WMElITjBhV3hzSUcxMVkyZ2dabUZ6ZEdWeUlIUm9ZVzRnY21WallXeGpkV3hoZEdsdVp5QmthWE4wWVc1alpYTXVYRzRnS2lCM2FXeHNJR0psSUhWelpXUWdabTl5SUZRdFUwNUZJRzFoYVc1c2VTNWNiaUFxSUVCd1lYSmhiU0I3Um14dllYUXpNa0Z5Y21GNWZXTnZibVJsYm5ObFpFRnljbUY1SUMwZ1lYSnlZWGtnYjJZZ1pHbHpkR0Z1WTJWeklHSmxkSGRsWlc0Z1lXeHNJSEJoYVhKeklHOW1JRzlpYW1WamRITmNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlmWE5wZW1VZ0xTQnVkVzFpWlhJZ2IyWWdZMjl0Y0dGeVpXSnNaWE1nYVc0Z2JXRjBjbWw0WEc0Z0tpQkFjbVYwZFhKdUlIdEdiRzloZERNeVFYSnlZWGw5SUMwZ2NISnZlSGtnWm05eUlHTnZibVJsYm5ObFpFRnljbUY1WEc0cUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHUnBjM1JoYm1ObFRXRjBjbWw0VUhKdmVIa29ZMjl1WkdWdWMyVmtRWEp5WVhrNklFWnNiMkYwTXpKQmNuSmhlU3dnYzJsNlpUb2diblZ0WW1WeUtUb2dSbXh2WVhRek1rRnljbUY1SUh0Y2JpQWdZMjl1YzNRZ2JHbHVaV0Z5Um5WdVl5QTlJR1J0VEdsdVpXRnlTVzVrWlhnb2MybDZaU2s3WEc0Z0lHWjFibU4wYVc5dUlHeHBibVZoY2tsdVpHVjRLR2s2SUhONWJXSnZiQ0I4SUhOMGNtbHVaeXdnYWpvZ2MzbHRZbTlzSUh3Z2MzUnlhVzVuS1NCN1hHNGdJQ0FnWTI5dWMzUWdhVTUxYlNBOUlFNTFiV0psY2locEtUdGNiaUFnSUNCamIyNXpkQ0JxVG5WdElEMGdUblZ0WW1WeUtHb3BPMXh1SUNBZ0lISmxkSFZ5YmlCc2FXNWxZWEpHZFc1aktHbE9kVzBzSUdwT2RXMHBPMXh1SUNCOVhHNWNiaUFnWm5WdVkzUnBiMjRnYVdSNE1raGhibVJzWlhJb2FXUjRNVG9nYzNsdFltOXNJSHdnYzNSeWFXNW5LVHBRY205NGVVaGhibVJzWlhJOFJteHZZWFF6TWtGeWNtRjVQaUI3WEc0Z0lDQWdjbVYwZFhKdUlDaGNiaUFnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdaMlYwS0hSaGNtZGxkQ3dnYVdSNE1pd2dYM0psWTJWcGRtVnlLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR2xrZURFZ1BUMDlJR2xrZURJcElISmxkSFZ5YmlBd08xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElHeHBibVZoY2tsa2VDQTlJRTUxYldKbGNpaHBaSGd4S1NBK0lFNTFiV0psY2locFpIZ3lLU0EvSUd4cGJtVmhja2x1WkdWNEtHbGtlRElzSUdsa2VERXBJRG9nYkdsdVpXRnlTVzVrWlhnb2FXUjRNU3dnYVdSNE1pazdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSFJoY21kbGRGdHNhVzVsWVhKSlpIaGRPMXh1SUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnZlZ4dUlDQWdJQ2s3WEc0Z0lIMWNiaUFnWTI5dWMzUWdhV1I0TVVoaGJtUnNaWEk2SUZCeWIzaDVTR0Z1Wkd4bGNqeEdiRzloZERNeVFYSnlZWGsrSUQwZ2UxeHVJQ0FnSUdkbGRDaDBZWEpuWlhRc0lHbGtlREVzSUY5eVpXTmxhWFpsY2lrZ2UxeHVJQ0FnSUNBZ2FXWWdLR2xrZURFZ1BUMDlJQ2RzWlc1bmRHZ25LU0J5WlhSMWNtNGdjMmw2WlR0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZlSGtvZEdGeVoyVjBMQ0JwWkhneVNHRnVaR3hsY2locFpIZ3hLU2s3WEc0Z0lDQWdmU3hjYmlBZ2ZUdGNibHh1SUNCeVpYUjFjbTRnYm1WM0lGQnliM2g1S0dOdmJtUmxibk5sWkVGeWNtRjVMQ0JwWkhneFNHRnVaR3hsY2lrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJrYlV4cGJtVmhja2x1WkdWNEtITnBlbVU2SUc1MWJXSmxjaWs2SUNocE9pQnVkVzFpWlhJc0lHbzZJRzUxYldKbGNpa2dQVDRnYm5WdFltVnlJSHRjYmlBZ2NtVjBkWEp1SUNocE9pQnVkVzFpWlhJc0lHbzZJRzUxYldKbGNpa2dQVDRnYzJsNlpTQXFJR2tnS3lCcUlDMGdUV0YwYUM1bWJHOXZjaWdvS0drZ0t5QXlLU0FxSUNocElDc2dNU2twSUM4Z01pazdYRzU5WEc0aVhYMD0iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmxldCBncHVBZGFwdGVyID0gbnVsbDtcbmxldCBncHVEZXZpY2UgPSBudWxsO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdQVURldmljZSgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIWdwdUFkYXB0ZXIpIHtcbiAgICAgICAgICAgIC8vcmVhc29uOiBvbmx5IGhlcmUgd2UgZ2V0IHRoZSBncHVBZGFwdGVyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgICAgIGdwdUFkYXB0ZXIgPSB5aWVsZCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKHsgcG93ZXJQcmVmZXJlbmNlOiAnaGlnaC1wZXJmb3JtYW5jZScgfSk7XG4gICAgICAgICAgICBpZiAoZ3B1QWRhcHRlciA9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpc0xvc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGdwdURldmljZSkge1xuICAgICAgICAgICAgZ3B1RGV2aWNlLmxvc3QudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaXNMb3N0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgeWllbGQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgMTApKTsgLy8gd2FpdCB0byBzZWUgaWYgdGhlIGRldmljZSBpcyBsb3N0XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFncHVEZXZpY2UgfHwgaXNMb3N0KSB7XG4gICAgICAgICAgICBjb25zdCByZXF1aXJlZEJ1ZmZlclNpemUgPSAxMDAwMDAwMDAwOyAvLyB+MTAwME1CXG4gICAgICAgICAgICBjb25zdCBhZGFwdGVyTGltaXRzID0gZ3B1QWRhcHRlci5saW1pdHM7XG4gICAgICAgICAgICBjb25zdCBidWZmZmVyU2l6ZUxpbWl0ID0gYWRhcHRlckxpbWl0cy5tYXhCdWZmZXJTaXplO1xuICAgICAgICAgICAgY29uc3Qgc3RvcmFnZUJ1ZmZlclNpemVMaW1pdCA9IGFkYXB0ZXJMaW1pdHMubWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBncHVEZXZpY2UgPSB5aWVsZCBncHVBZGFwdGVyLnJlcXVlc3REZXZpY2UoeyByZXF1aXJlZExpbWl0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF4QnVmZmVyU2l6ZTogTWF0aC5taW4oYnVmZmZlclNpemVMaW1pdCwgcmVxdWlyZWRCdWZmZXJTaXplKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZTogTWF0aC5taW4oc3RvcmFnZUJ1ZmZlclNpemVMaW1pdCwgcmVxdWlyZWRCdWZmZXJTaXplKVxuICAgICAgICAgICAgICAgICAgICB9IH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBncHVEZXZpY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgZGV2aWNlIHdpdGggcmVxdWlyZWQgbGltaXRzJywgZSk7XG4gICAgICAgICAgICAgICAgZ3B1RGV2aWNlID0geWllbGQgZ3B1QWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdwdURldmljZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ3B1RGV2aWNlO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEdQVUFkYXB0ZXJEZXNjcmlwdGlvbigpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIWdwdUFkYXB0ZXIpIHtcbiAgICAgICAgICAgIC8vIHJlYXNvbjogb25seSBoZXJlIHdlIGdldCB0aGUgZ3B1QWRhcHRlclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgICAgICBncHVBZGFwdGVyID0geWllbGQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpO1xuICAgICAgICAgICAgaWYgKGdwdUFkYXB0ZXIgPT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmZvID0geWllbGQgZ3B1QWRhcHRlci5yZXF1ZXN0QWRhcHRlckluZm8oKTtcbiAgICAgICAgaWYgKCFpbmZvKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IG91dFN0cmluZyA9IHJlcGxhY2VFbXB0eVN0cmluZyhpbmZvLmRlc2NyaXB0aW9uLCByZXBsYWNlRW1wdHlTdHJpbmcoaW5mby52ZW5kb3IsICdObyBHUFUgZGVzY3JpcHRpb24gYXZhaWxhYmxlJykpO1xuICAgICAgICByZXR1cm4gb3V0U3RyaW5nO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gcmVwbGFjZUVtcHR5U3RyaW5nKHN0ciwgcmVwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gIXN0ciB8fCBzdHIgPT0gJycgPyByZXBsYWNlbWVudCA6IHN0cjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldEdQVURldmljZS5qcy5tYXAiLCJmdW5jdGlvbiBldWNsaWRlYW5BZ2dyZWdhdGlvbldnc2woYXJyYXlTaXplKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgdmFyIHN1bSA9IDAuMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHthcnJheVNpemV9OyBpID0gaSArIDF1KSB7XG4gICAgICAgICAgICBzdW0gPSBzdW0gKyBkaXN0YW5jZXNbaV0gKiBkaXN0YW5jZXNbaV0gKiBjb21wdXRlSW5mby53ZWlnaHRzW2ldICogY29tcHV0ZUluZm8ud2VpZ2h0c1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3FydChzdW0pO1xuICAgIGA7XG59XG47XG5mdW5jdGlvbiBtYW5oYXR0YW5BZ2dyZWdhdGlvbldnc2woYXJyYXlTaXplKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgdmFyIHN1bSA9IDAuMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHthcnJheVNpemV9OyBpID0gaSArIDF1KSB7XG4gICAgICAgICAgICBzdW0gPSBzdW0gKyBhYnMoZGlzdGFuY2VzW2ldKSAqIGNvbXB1dGVJbmZvLndlaWdodHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1bTtcbiAgICBgO1xufVxuZXhwb3J0IHZhciBXRUJHU0xBR0dSRUdBVElPTjtcbihmdW5jdGlvbiAoV0VCR1NMQUdHUkVHQVRJT04pIHtcbiAgICBXRUJHU0xBR0dSRUdBVElPTltcIkVVQ0xJREVBTlwiXSA9IFwiRVVDTElERUFOXCI7XG4gICAgV0VCR1NMQUdHUkVHQVRJT05bXCJNQU5IQVRUQU5cIl0gPSBcIk1BTkhBVFRBTlwiO1xufSkoV0VCR1NMQUdHUkVHQVRJT04gfHwgKFdFQkdTTEFHR1JFR0FUSU9OID0ge30pKTtcbmV4cG9ydCBjb25zdCBXRUJHU0xBR0dSRUdBVElPTkZVTkNUSU9OUyA9IHtcbiAgICBbV0VCR1NMQUdHUkVHQVRJT04uRVVDTElERUFOXTogZXVjbGlkZWFuQWdncmVnYXRpb25XZ3NsLFxuICAgIFtXRUJHU0xBR0dSRUdBVElPTi5NQU5IQVRUQU5dOiBtYW5oYXR0YW5BZ2dyZWdhdGlvbldnc2xcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD13ZWJHUFUtYWdncmVnYXRpb24uanMubWFwIiwiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuLy8gaW4gYWxsIHRoZSBmdW5jdGlvbnMgYmVsb3csIHRoZSB2YXJpYWJsZXMgYSBhbmQgYiBhcmUgYXNzdW1lZCB0byBiZSBhcnJheXMgb2YgdWludDMyL2YzMlxuLy92YWx1ZXMgd2hpY2ggYXJlIGluZmVyZWQgZnJvbSB0aGUgY29kZSB0aGlzIGNodW5rIGlzIGluamVjdGVkIGludG9cbi8vIGFsc28sIHdlIGhhdmUgYWNjZXNzIHRvIGNvbXB1dGVJbmZvIHN0cnVjdCwgd2hpY2ggY29udGFpbnMgdGhlIGZvbGxvd2luZyBmaWVsZHM6XG4vLyBjb21wdXRlSW5mby5lbnRyeVNpemVzOiBhcnJheSBvZiBhcnJheXMgb2YgdTMyIGNvbnRhaW5pbmcgdGhlIHNpemVzIG9mIHRoZSBlbnRyaWVzXG4vLyBvdGhlciBmaWVsZHMgYXJlIHNwZWNpZmljIHRvIHRoZSBkaXN0YW5jZSBmdW5jdGlvbiBzaG91bGQgYmUgaW5qZWN0ZWQgZnJvbSB0aGUgbWFpbiBzY3JpcHQgdGhhdCBjYWxscyB0aGlzIGZ1bmN0aW9uLFxuLy8gYW5kIHNob3VsZCBiZSBhdmFpbGFibGUgaW4gdGhlIHN1cHBsZW1lbnRhcnlJbmZvIHN0cnVjdFxuLy8gbGlrZSB0aGUgc2ltaWxhcml0eSBtYXRyaXggZm9yIG1vbm9tZXIgY2hlbWljYWwgZGlzdGFuY2UuXG4vLyB0aGUgZ2V0UHJvY2Vzc0luZm8gZnVuY3Rpb24gc2hvdWxkIHJldHVybiBjb3JyZWN0IGJ1ZmZlciBhbGxvY2F0aW9uIG1lY2hhbmlzbSBmb3IgdGhlIHN1cHBsZW1lbnRhcnlJbmZvLFxuLy8gZm9yIGV2ZXJ5IGVudHJ5IGxpc3Rcbi8vIHRoZSBtYXhEaXN0YW5jZSB2YXJpYWJsZSBpcyBhbHNvIGFzc3VtZWQgdG8gYmUgYXZhaWxhYmxlIGluIHRoZVxuLy8gc2NvcGUgb2YgdGhlIGZ1bmN0aW9uLCBpbiBjYXNlIG9mIGtubiBpdCBpcyB0aGUgZGlzdGFuY2UgaW4gdGhlIGxhc3QgcG9zdGlvbiBvZiBrbm4gb24gdGhpcyBpbmRleCxcbi8vIGluIGNhc2Ugb2Ygc3BhcnNlIG1hdHJpeCwgaXQgY2FuIGJlIGp1c3QgdGhlIHRocmVzaG9sZCBmb3IgdGhlIGRpc3RhbmNlLlxuLy8gaGFtbWluZyBkaXN0YW5jZSBmb3Igc2VxdW5lbmNlcyBvZiB1aW50MzIgYXJyYXlzIG9mIG1heCBsZW5ndGggJHttYXhBcnJheVNpemV9XG5leHBvcnQgZnVuY3Rpb24gd2ViR1BVSGFtbWluZyhfbWF4QXJyYXlTaXplLCBlbnRyeUluZGV4KSB7XG4gICAgcmV0dXJuIGBcbiAgbGV0IGFMZW5ndGg6IHUzMiA9IGNvbXB1dGVJbmZvLmVudHJ5U2l6ZXNbJHtlbnRyeUluZGV4fV1bYUluZGV4XTtcbiAgbGV0IGJMZW5ndGg6IHUzMiA9IGNvbXB1dGVJbmZvLmVudHJ5U2l6ZXNbJHtlbnRyeUluZGV4fV1bYkluZGV4XTtcbiAgbGV0IG1heExlbmd0aDogdTMyID0gbWF4KGFMZW5ndGgsIGJMZW5ndGgpO1xuICBsZXQgbWluTGVuZ3RoOiB1MzIgPSBtaW4oYUxlbmd0aCwgYkxlbmd0aCk7XG4gIGxldCBzaXplRGlmZjogdTMyID0gbWF4TGVuZ3RoIC0gbWluTGVuZ3RoO1xuICBcbiAgbGV0IG1heEludERpc3RhbmNlID0gY2VpbChtYXhEaXN0YW5jZSAqIGYzMihtYXhMZW5ndGgpKSAtIGYzMihzaXplRGlmZik7XG5cbiAgdmFyIGRpZmY6IGYzMiA9IDAuMDtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHtfbWF4QXJyYXlTaXplfTsgaSA9IGkgKyAxdSkge1xuICAgICAgZGlmZiA9IGRpZmYgKyBmMzIoYVtpXSAhPSBiW2ldKTtcbiAgICAgIGlmIChkaWZmID4gbWF4SW50RGlzdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybiAxLjA7XG4gICAgICAgIH1cbiAgfVxuICBkaWZmICs9IGYzMihzaXplRGlmZik7XG4gIHJldHVybiBkaWZmIC8gJHtfbWF4QXJyYXlTaXplfTtcbiAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVNb25vbWVyQ2hlbWljYWxEaXN0YW5jZShfbWF4QXJyYXlTaXplLCBlbnRyeUluZGV4KSB7XG4gICAgLy8gaXQgaXMgYXNzdW1ldCB0aGF0IHN1cHBJbmZvIHN0cnVjdCBjb250YWlucyBjb3JyZWN0IG1hdHJpeCBjYWxsZWQgc2ltaWxhcml0eU1hdHJpeCR7ZW50cnlJbmRleH0sIChzaW1pbGFyaXR5TWF0cml4MCwgc2ltaWxhcml0eU1hdHJpeDEsIGV0YylcbiAgICAvLyB0aGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IHRoZSBnZXRQcm9jZXNzSW5mbyBmdW5jdGlvbi5cbiAgICByZXR1cm4gYFxuICBsZXQgYUxlbmd0aDogdTMyID0gY29tcHV0ZUluZm8uZW50cnlTaXplc1ske2VudHJ5SW5kZXh9XVthSW5kZXhdO1xuICBsZXQgYkxlbmd0aDogdTMyID0gY29tcHV0ZUluZm8uZW50cnlTaXplc1ske2VudHJ5SW5kZXh9XVtiSW5kZXhdO1xuICBsZXQgbWF4TGVuZ3RoOiB1MzIgPSBtYXgoYUxlbmd0aCwgYkxlbmd0aCk7XG4gIGxldCBtaW5MZW5ndGg6IHUzMiA9IG1pbihhTGVuZ3RoLCBiTGVuZ3RoKTtcbiAgbGV0IHNpemVEaWZmOiB1MzIgPSBtYXhMZW5ndGggLSBtaW5MZW5ndGg7XG4gIFxuICBsZXQgbWF4SW50RGlzdGFuY2UgPSBjZWlsKG1heERpc3RhbmNlICogZjMyKG1heExlbmd0aCkpIC0gZjMyKHNpemVEaWZmKTtcblxuICBsZXQgc2ltTWF0cml4ID0gJihzdXBwSW5mby5zaW1pbGFyaXR5TWF0cml4JHtlbnRyeUluZGV4fSk7IC8vIHVzaW5nIHBvaW50ZXJzIG1ha2UgdGhpbmdzIGZhc3RlclxuICB2YXIgZGlmZjogZjMyID0gMC4wO1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke19tYXhBcnJheVNpemV9OyBpID0gaSArIDF1KSB7XG4gICAgICBkaWZmID0gZGlmZiArIDEuMCAtICgqc2ltTWF0cml4KVt1MzIoYVtpXSldW3UzMihiW2ldKV07XG4gICAgICBpZiAoZGlmZiA+IG1heEludERpc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm4gMS4wO1xuICAgICAgICB9XG4gIH1cbiAgZGlmZiArPSBmMzIoc2l6ZURpZmYpO1xuICByZXR1cm4gZGlmZiAvICR7X21heEFycmF5U2l6ZX07XG4gIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gd2ViR1BVTGV2ZW5zdGVpbihtYXhBcnJheVNpemUsIGVudHJ5SW5kZXgpIHtcbiAgICByZXR1cm4gYFxuICBsZXQgYUxlbmd0aDogdTMyID0gY29tcHV0ZUluZm8uZW50cnlTaXplc1ske2VudHJ5SW5kZXh9XVthSW5kZXhdO1xuICBsZXQgYkxlbmd0aDogdTMyID0gY29tcHV0ZUluZm8uZW50cnlTaXplc1ske2VudHJ5SW5kZXh9XVtiSW5kZXhdO1xuICBsZXQgbWF4TGVuZ3RoOiB1MzIgPSBtYXgoYUxlbmd0aCwgYkxlbmd0aCk7XG4gIGxldCBtaW5MZW5ndGg6IHUzMiA9IG1pbihhTGVuZ3RoLCBiTGVuZ3RoKTtcblxuICBsZXQgbWF4SW50RGlzdGFuY2UgPSBjZWlsKG1heERpc3RhbmNlICogZjMyKG1heExlbmd0aCkpO1xuXG4gIC8vIHdlIHdpbGwgc3RvcmUgdHdvIGFycmF5cyBhcyBtYXRyaXggYW5kIHN3YXAgdGhlIHdvcmtpbmcgaW5kaWNlcyBwZXIgcGFzcy5cbiAgLy8gdGhpcyB3YXkgd2UgY2FuIHJlZHVjZSBtZW1vcnkgdXNhZ2UgcGVyIGNvbXB1dGF0aW9uIHRvIGp1c3QgTyhhTGVuZ3RoKVxuICAvLyB0aGUgZ3JpZCB3aWxsIGhhdmUgYUxlbmd0aCArIDEgY29sdW1ucyBhbmQgYkxlbmd0aCArIDEgcm93c1xuICAvLyB0aGlzIHdpbGwgYmUgZ3VhcmFudGVlZCBieSBpdGVyYXRpb24sIGJ1dCB0aGUgYXJyYXkgc2l6ZXMgbXVzdCBiZSBrbm93biBhdCBjb21waWxlIHRpbWUsIHNvIHdlIHdpbGwgdXNlIGEgZml4ZWQgc2l6ZSBvZiBtYXhBcnJheVNpemVcbiAgdmFyIGR5bmFtaWNQYXNzTWF0OiBhcnJheTxhcnJheTxmMzIsICR7bWF4QXJyYXlTaXplICsgMX11PiwgMj47IC8vIGluaXRpYWxpemUgdG8gMFxuICBcbiAgdmFyIHByZXZJbmRleDogdTMyID0gMDtcbiAgdmFyIGN1ckluZGV4OiB1MzIgPSAxOyAvLyB3ZSB3aWxsIHN3YXAgdGhlc2UgaW5kaWNlcyBwZXIgcGFzc1xuXG4gIC8vIGluaXRpYWxpemUgdGhlIGZpcnN0IHJvd1xuICBmb3IgKHZhciBpID0gMHU7IGkgPD0gYUxlbmd0aDsgaSA9IGkgKyAxdSkge1xuICAgICAgZHluYW1pY1Bhc3NNYXRbcHJldkluZGV4XVtpXSA9IGYzMihpKTtcbiAgfVxuXG4gIC8vIGl0ZXJhdGUgb3ZlciB0aGUgcm93c1xuICBmb3IgKHZhciBpID0gMXU7IGkgPD0gYkxlbmd0aDsgaSA9IGkgKyAxdSkge1xuICAgICAgZHluYW1pY1Bhc3NNYXRbY3VySW5kZXhdWzBdID0gZjMyKGkpO1xuICAgICAgdmFyIG1pbkVudHJ5OiBmMzIgPSBmMzIobWF4TGVuZ3RoKTtcbiAgICAgIGxldCBwcmV2Um93ID0gJmR5bmFtaWNQYXNzTWF0W3ByZXZJbmRleF07XG4gICAgICBsZXQgY3VyUm93ID0gJmR5bmFtaWNQYXNzTWF0W2N1ckluZGV4XTtcbiAgICAgIGxldCBiTW9uID0gdTMyKGJbaSAtIDFdKTtcbiAgICAgIGZvciAodmFyIGogPSAxdTsgaiA8PSBhTGVuZ3RoOyBqID0gaiArIDF1KSB7XG4gICAgICAgICAgdmFyIGNvc3Q6IGYzMiA9IGYzMihhW2ogLSAxXSAhPSBiTW9uKTtcbiAgICAgICAgICB2YXIgcmVzOiBmMzIgPSBtaW4oXG4gICAgICAgICAgICAgIG1pbihcbiAgICAgICAgICAgICAgICAoKnByZXZSb3cpW2pdICsgMS4wLCAvLyBkZWxldGlvblxuICAgICAgICAgICAgICAgICgqY3VyUm93KVtqIC0gMV0gKyAxLjAsIC8vIGluc2VydGlvblxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAoKnByZXZSb3cpW2ogLSAxXSArIGNvc3QgLy8gc3Vic3RpdHV0aW9uXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICgqY3VyUm93KVtqXSA9IHJlcztcbiAgICAgICAgICBpZiAocmVzIDwgbWluRW50cnkpIHtcbiAgICAgICAgICAgICAgbWluRW50cnkgPSByZXM7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gc3dhcCB0aGUgaW5kaWNlc1xuICAgICAgbGV0IHRlbXA6IHUzMiA9IHByZXZJbmRleDtcbiAgICAgIHByZXZJbmRleCA9IGN1ckluZGV4O1xuICAgICAgY3VySW5kZXggPSB0ZW1wO1xuICAgICAgaWYgKG1pbkVudHJ5ID4gbWF4SW50RGlzdGFuY2UpIHtcbiAgICAgICAgICByZXR1cm4gMS4wO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIGR5bmFtaWNQYXNzTWF0W3ByZXZJbmRleF1bYUxlbmd0aF0gLyBmMzIobWF4TGVuZ3RoKTtcbiAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVOZWVkbGVtYW5XdW5zY2gobWF4QXJyYXlTaXplLCBlbnRyeUluZGV4KSB7XG4gICAgLy8gdmVyc2lvbiBvZiB0aGUgbGV2ZW5zaHRhaW4gd2hlcmUgdGhlIGNvc3Qgb2Ygc3Vic3RpdHV0aW9uIGlzIGN1c3RvbWl6YWJsZVxuICAgIC8vIGl0IGlzIGFzc3VtZXQgdGhhdCBzdXBwSW5mbyBzdHJ1Y3QgY29udGFpbnMgY29ycmVjdCBtYXRyaXggY2FsbGVkIHNpbWlsYXJpdHlNYXRyaXgke2VudHJ5SW5kZXh9LCAoc2ltaWxhcml0eU1hdHJpeDAsIHNpbWlsYXJpdHlNYXRyaXgxLCBldGMpXG4gICAgLy8gYW5kIGdhcE9wZW5QZW5hbHR5LCBnYXBFeHRlbnNpb25QZW5hbHR5XG4gICAgLy8gdGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSB0aGUgZ2V0UHJvY2Vzc0luZm8gZnVuY3Rpb24uXG4gICAgcmV0dXJuIGBcbiAgICAgIGxldCBhTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2FJbmRleF07XG4gICAgICBsZXQgYkxlbmd0aDogdTMyID0gY29tcHV0ZUluZm8uZW50cnlTaXplc1ske2VudHJ5SW5kZXh9XVtiSW5kZXhdO1xuICAgICAgbGV0IG1heExlbmd0aDogdTMyID0gbWF4KGFMZW5ndGgsIGJMZW5ndGgpO1xuICAgICAgbGV0IG1pbkxlbmd0aDogdTMyID0gbWluKGFMZW5ndGgsIGJMZW5ndGgpO1xuICBcbiAgICAgIGxldCBtYXhJbnREaXN0YW5jZSA9IGNlaWwobWF4RGlzdGFuY2UgKiBmMzIobWF4TGVuZ3RoKSk7XG4gICAgICAvLyB3ZSB3aWxsIHN0b3JlIHR3byBhcnJheXMgYXMgbWF0cml4IGFuZCBzd2FwIHRoZSB3b3JraW5nIGluZGljZXMgcGVyIHBhc3MuXG4gICAgICAvLyB0aGlzIHdheSB3ZSBjYW4gcmVkdWNlIG1lbW9yeSB1c2FnZSBwZXIgY29tcHV0YXRpb24gdG8ganVzdCBPKGFMZW5ndGgpXG4gICAgICAvLyB0aGUgZ3JpZCB3aWxsIGhhdmUgYUxlbmd0aCArIDEgY29sdW1ucyBhbmQgYkxlbmd0aCArIDEgcm93c1xuICAgICAgLy8gdGhpcyB3aWxsIGJlIGd1YXJhbnRlZWQgYnkgaXRlcmF0aW9uLCBidXQgdGhlIGFycmF5IHNpemVzIG11c3QgYmUga25vd24gYXQgY29tcGlsZSB0aW1lLCBzbyB3ZSB3aWxsIHVzZSBhIGZpeGVkIHNpemUgb2YgbWF4QXJyYXlTaXplXG4gICAgICB2YXIgZHluYW1pY1Bhc3NNYXQ6IGFycmF5PGFycmF5PGYzMiwgJHttYXhBcnJheVNpemUgKyAxfXU+LCAyPjsgLy8gaW5pdGlhbGl6ZSB0byAwXG4gICAgICBcbiAgICAgIC8vIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBvcGVyYXRpb24gbGVkIHRvIHRoZSBjdXJyZW50IGNlbGxcbiAgICAgIC8vIGkuZS4gd2hldGhlciB3ZSBjYW1lIGZyb20gdGhlIGxlZnQsIHRvcCBvciBkaWFnb25hbCB0byBhc3NpZ24gZ2FwIG9wZW4vZ2FwIGV4dGVuZCBwZW5hbHR5XG4gICAgICB2YXIgdmVydGljYWxHYXBzOiBhcnJheTx1MzIsICR7bWF4QXJyYXlTaXplICsgMX11PjtcbiAgICAgIHZhciBob3Jpem9udGFsR2FwczogYXJyYXk8dTMyLCAke21heEFycmF5U2l6ZSArIDF9dT47XG5cbiAgICAgIGxldCBnYXBPcGVuUGVuYWx0eTogZjMyID0gc3VwcEluZm8uZ2FwT3BlblBlbmFsdHkke2VudHJ5SW5kZXh9O1xuICAgICAgbGV0IGdhcEV4dGVuc2lvblBlbmFsdHk6IGYzMiA9IHN1cHBJbmZvLmdhcEV4dGVuc2lvblBlbmFsdHkke2VudHJ5SW5kZXh9O1xuICAgICAgdmFyIHByZXZJbmRleDogdTMyID0gMDtcbiAgICAgIHZhciBjdXJJbmRleDogdTMyID0gMTsgLy8gd2Ugd2lsbCBzd2FwIHRoZXNlIGluZGljZXMgcGVyIHBhc3NcbiAgICAgIC8vIGluaXRpYWxpemUgdGhlIGZpcnN0IHJvd1xuICAgICAgZm9yICh2YXIgaSA9IDB1OyBpIDw9IGFMZW5ndGg7IGkgPSBpICsgMXUpIHtcbiAgICAgICAgICBkeW5hbWljUGFzc01hdFtwcmV2SW5kZXhdW2ldID0gZ2FwT3BlblBlbmFsdHkgKyBmMzIoaSAtIDEpICogZ2FwRXh0ZW5zaW9uUGVuYWx0eTtcbiAgICAgICAgICBkeW5hbWljUGFzc01hdFtjdXJJbmRleF1baV0gPSAwLjA7XG4gICAgICB9XG4gICAgICBkeW5hbWljUGFzc01hdFswXVswXSA9IDAuMDtcblxuICAgICAgbGV0IHNpbU1hdHJpeCA9ICZzdXBwSW5mby5zaW1pbGFyaXR5TWF0cml4JHtlbnRyeUluZGV4fTsgLy8gdXNpbmcgcG9pbnRlcnMgbWFrZSB0aGluZ3MgZmFzdGVyXG4gICAgICAvLyBpdGVyYXRlIG92ZXIgdGhlIHJvd3NcbiAgICAgIGZvciAodmFyIGkgPSAxdTsgaSA8PSBiTGVuZ3RoOyBpID0gaSArIDF1KSB7XG4gICAgICAgICAgbGV0IHByZXZSb3cgPSAmZHluYW1pY1Bhc3NNYXRbcHJldkluZGV4XTtcbiAgICAgICAgICBsZXQgY3VyUm93ID0gJmR5bmFtaWNQYXNzTWF0W2N1ckluZGV4XTtcbiAgICAgICAgICAoKmN1clJvdylbMF0gPSBnYXBPcGVuUGVuYWx0eSArIGYzMihpIC0gMSkgKiBnYXBFeHRlbnNpb25QZW5hbHR5O1xuICAgICAgICAgIHZhciBtaW5FbnRyeTogZjMyID0gZjMyKG1heExlbmd0aCk7XG4gICAgICAgICAgbGV0IG1vbkIgPSB1MzIoYltpIC0gMV0pO1xuICAgICAgICAgIGZvciAodmFyIGogPSAxdTsgaiA8PSBhTGVuZ3RoOyBqID0gaiArIDF1KSB7XG4gICAgICAgICAgICAgIGxldCBtb25BID0gdTMyKGFbaiAtIDFdKTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIGxldCBjb3N0OiBmMzIgPSAoKnByZXZSb3cpW2ogLSAxXSArIDFmIC0gKCpzaW1NYXRyaXgpW21vbkFdW21vbkJdO1xuICAgICAgICAgICAgICB2YXIgdG9wID0gKCpwcmV2Um93KVtqXTsgLy8gZGVsZXRpb25cbiAgICAgICAgICAgICAgaWYgKHZlcnRpY2FsR2Fwc1tqXSA+IDApIHtcbiAgICAgICAgICAgICAgICAgIHRvcCA9IHRvcCArIGdhcEV4dGVuc2lvblBlbmFsdHk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0b3AgPSB0b3AgKyBnYXBPcGVuUGVuYWx0eTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgbGVmdCA9ICgqY3VyUm93KVtqIC0gMV07IC8vIGluc2VydGlvblxuICAgICAgICAgICAgICBpZiAoaG9yaXpvbnRhbEdhcHNbaiAtIDFdID4gMCkge1xuICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlZnQgKyBnYXBFeHRlbnNpb25QZW5hbHR5O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlZnQgKyBnYXBPcGVuUGVuYWx0eTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgcmVzOiBmMzIgPSBtaW4oXG4gICAgICAgICAgICAgICAgICBtaW4oXG4gICAgICAgICAgICAgICAgICAgICAgdG9wLCAvLyBkZWxldGlvblxuICAgICAgICAgICAgICAgICAgICAgIGxlZnQsIC8vIGluc2VydGlvblxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIGNvc3QgLy8gc3Vic3RpdHV0aW9uXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgKCpjdXJSb3cpW2pdID0gcmVzO1xuICAgICAgICAgICAgICBpZiAocmVzIDwgbWluRW50cnkpIHtcbiAgICAgICAgICAgICAgICAgIG1pbkVudHJ5ID0gcmVzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgZ2Fwc1xuICAgICAgICAgICAgICBpZiAocmVzID09IGNvc3QpIHtcbiAgICAgICAgICAgICAgICAgIHZlcnRpY2FsR2Fwc1tqXSA9IDA7XG4gICAgICAgICAgICAgICAgICBob3Jpem9udGFsR2Fwc1tqXSA9IDA7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IGxlZnQpIHtcbiAgICAgICAgICAgICAgICAgIHZlcnRpY2FsR2Fwc1tqXSA9IDA7XG4gICAgICAgICAgICAgICAgICBob3Jpem9udGFsR2Fwc1tqXSA9IDE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEdhcHNbal0gPSAxO1xuICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbEdhcHNbal0gPSAwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHN3YXAgdGhlIGluZGljZXNcbiAgICAgICAgICBsZXQgdGVtcDogdTMyID0gcHJldkluZGV4O1xuICAgICAgICAgIHByZXZJbmRleCA9IGN1ckluZGV4O1xuICAgICAgICAgIGN1ckluZGV4ID0gdGVtcDtcbiAgICAgICAgICBpZiAobWluRW50cnkgPiBtYXhJbnREaXN0YW5jZSkge1xuICAgICAgICAgICAgICByZXR1cm4gMS4wO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkeW5hbWljUGFzc01hdFtwcmV2SW5kZXhdW2FMZW5ndGhdIC8gZjMyKG1heExlbmd0aCk7XG4gIFxuICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVUV1Y2xpZGVhbihtYXhBcnJheVNpemUsIF9lbnRyeUluZGV4KSB7XG4gICAgcmV0dXJuIGBcbiAgdmFyIGRpc3Q6IGYzMiA9IDAuMDtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHttYXhBcnJheVNpemV9OyBpID0gaSArIDF1KSB7XG4gICAgZGlzdCA9IGRpc3QgKyBmMzIoYVtpXSAtIGJbaV0pICogZjMyKGFbaV0gLSBiW2ldKTtcbiAgfVxuICByZXR1cm4gc3FydChkaXN0KTtcbiAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVNYW5oYXR0YW4obWF4QXJyYXlTaXplLCBfZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIHZhciBkaXN0OiBmMzIgPSAwLjA7XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7bWF4QXJyYXlTaXplfTsgaSA9IGkgKyAxdSkge1xuICAgIGRpc3QgPSBkaXN0ICsgYWJzKGYzMihhW2ldIC0gYltpXSkpO1xuICB9XG4gIHJldHVybiBkaXN0O1xuICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVU9uZUhvdERpc3RhbmNlKF9tYXhBcnJheVNpemUsIGVudHJ5SW5kZXgpIHtcbiAgICByZXR1cm4gYFxuICBsZXQgYUxlbmd0aDogdTMyID0gY29tcHV0ZUluZm8uZW50cnlTaXplc1ske2VudHJ5SW5kZXh9XVthSW5kZXhdO1xuICBsZXQgYkxlbmd0aDogdTMyID0gY29tcHV0ZUluZm8uZW50cnlTaXplc1ske2VudHJ5SW5kZXh9XVtiSW5kZXhdO1xuICBpZiAoYUxlbmd0aCAhPSBiTGVuZ3RoKSB7XG4gICAgcmV0dXJuIDEuMDtcbiAgfVxuICBmb3IgKHZhciBpID0gMHU7IGkgPCBhTGVuZ3RoOyBpID0gaSArIDF1KSB7XG4gICAgaWYoYVtpXSAhPSBiW2ldKSB7XG4gICAgICByZXR1cm4gMS4wO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMC4wO1xuICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVU51bWVyaWNEaXN0YW5jZShfbWF4QXJyYXlTaXplLCBlbnRyeUluZGV4KSB7XG4gICAgLy8gd2UgYXNzdW1lIHRoYXQgcmFuZ2Uke2VudHJ5SW5kZXh9IGlzIGF2YWlsYWJsZSBpbiB0aGUgc3VwcGxlbWVudGFyeUluZm8gc3RydWN0XG4gICAgcmV0dXJuIGBcbiAgICBsZXQgcmFuZ2UgPSBzdXBwSW5mby5yYW5nZSR7ZW50cnlJbmRleH07XG4gICAgcmV0dXJuIGYzMihhYnMoZjMyKGFbMF0pIC0gZjMyKGJbMF0pKSAvIHJhbmdlKTtcbiAgYDtcbn1cbi8vIHRhbmltb3RvIGRpc3RhbmNlIGZvciB1aW50MzIgYXJyYXlzIG9mIGxlbmd0aCAke21heEFycmF5U2l6ZX1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVUYW5pbW90b0JpdEFycmF5KG1heEFycmF5U2l6ZSwgX2VudHJ5SW5kZXgpIHtcbiAgICByZXR1cm4gYFxuICB2YXIgb25CaXRzYTogdTMyID0gMHU7XG4gIHZhciBvbkJpdHNiOiB1MzIgPSAwdTtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHttYXhBcnJheVNpemV9dTsgaSA9IGkgKyAxdSkge1xuICAgICAgb25CaXRzYSA9IG9uQml0c2EgKyBjb3VudE9uZUJpdHMoYVtpXSk7XG4gICAgICBvbkJpdHNiID0gb25CaXRzYiArIGNvdW50T25lQml0cyhiW2ldKTtcbiAgfVxuXG4gIGlmIChvbkJpdHNhID09IDB1ICYmIG9uQml0c2IgPT0gMHUpIHtcbiAgICAgIHJldHVybiAwLjA7XG4gIH1cblxuICBsZXQgdG90YWxPbkJpdHMgPSBvbkJpdHNhICsgb25CaXRzYjtcbiAgdmFyIGNvbW1vbkJpdHM6IHUzMiA9IDB1O1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke21heEFycmF5U2l6ZX11OyBpID0gaSArIDF1KSB7XG4gICAgICBjb21tb25CaXRzID0gY29tbW9uQml0cyArIGNvdW50T25lQml0cyhhW2ldICYgYltpXSk7XG4gIH1cblxuICByZXR1cm4gMS4wIC0gZjMyKGNvbW1vbkJpdHMpIC8gZjMyKHRvdGFsT25CaXRzIC0gY29tbW9uQml0cyk7XG4gIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gd2ViR1BVQXN5bW1ldHJpY0JpdEFycmF5KG1heEFycmF5U2l6ZSwgX2VudHJ5SW5kZXgpIHtcbiAgICByZXR1cm4gYFxuICB2YXIgb25CaXRzYTogdTMyID0gMHU7XG4gIHZhciBvbkJpdHNiOiB1MzIgPSAwdTtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHttYXhBcnJheVNpemV9dTsgaSA9IGkgKyAxdSkge1xuICAgICAgb25CaXRzYSA9IG9uQml0c2EgKyBjb3VudE9uZUJpdHMoYVtpXSk7XG4gICAgICBvbkJpdHNiID0gb25CaXRzYiArIGNvdW50T25lQml0cyhiW2ldKTtcbiAgfVxuICBsZXQgbWluID0gbWluKG9uQml0c2EsIG9uQml0c2IpO1xuICBpZiAobWluID09IDB1KSB7XG4gICAgcmV0dXJuIDEuMDtcbiAgfVxuICB2YXIgY29tbW9uQml0czogdTMyID0gMHU7XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7bWF4QXJyYXlTaXplfXU7IGkgPSBpICsgMXUpIHtcbiAgICAgIGNvbW1vbkJpdHMgPSBjb21tb25CaXRzICsgY291bnRPbmVCaXRzKGFbaV0gJiBiW2ldKTtcbiAgfVxuICByZXR1cm4gMS4wIC0gZjMyKGNvbW1vbkJpdHMpIC8gZjMyKG1pbik7XG4gIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gd2ViR1BVQ29zaW5lQml0QXJyYXkobWF4QXJyYXlTaXplLCBfZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIHZhciBvbkJpdHNhOiB1MzIgPSAwdTtcbiAgdmFyIG9uQml0c2I6IHUzMiA9IDB1O1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke21heEFycmF5U2l6ZX11OyBpID0gaSArIDF1KSB7XG4gICAgICBvbkJpdHNhID0gb25CaXRzYSArIGNvdW50T25lQml0cyhhW2ldKTtcbiAgICAgIG9uQml0c2IgPSBvbkJpdHNiICsgY291bnRPbmVCaXRzKGJbaV0pO1xuICB9XG4gIGxldCB0b3RhbCA9IG9uQml0c2EgKiBvbkJpdHNiOyAvLyBwLnMuIGhlcmUgdG90YWwgaXMgdGFrZW4gYnkgbXVsdGlwbHlpbmdcbiAgaWYgKHRvdGFsID09IDB1KSB7XG4gICAgcmV0dXJuIDEuMDtcbiAgfVxuICB2YXIgY29tbW9uQml0czogdTMyID0gMHU7XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7bWF4QXJyYXlTaXplfXU7IGkgPSBpICsgMXUpIHtcbiAgICAgIGNvbW1vbkJpdHMgPSBjb21tb25CaXRzICsgY291bnRPbmVCaXRzKGFbaV0gJiBiW2ldKTtcbiAgfVxuICByZXR1cm4gMS4wIC0gZjMyKGNvbW1vbkJpdHMpIC8gc3FydChmMzIodG90YWwpKTtcbiAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVTb2thbEJpdEFycmF5KG1heEFycmF5U2l6ZSwgX2VudHJ5SW5kZXgpIHtcbiAgICByZXR1cm4gYFxuICB2YXIgb25CaXRzYTogdTMyID0gMHU7XG4gIHZhciBvbkJpdHNiOiB1MzIgPSAwdTtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHttYXhBcnJheVNpemV9dTsgaSA9IGkgKyAxdSkge1xuICAgICAgb25CaXRzYSA9IG9uQml0c2EgKyBjb3VudE9uZUJpdHMoYVtpXSk7XG4gICAgICBvbkJpdHNiID0gb25CaXRzYiArIGNvdW50T25lQml0cyhiW2ldKTtcbiAgfVxuICBsZXQgdG90YWwgPSBvbkJpdHNhICsgb25CaXRzYjtcbiAgaWYgKHRvdGFsID09IDB1KSB7XG4gICAgcmV0dXJuIDEuMDtcbiAgfVxuICB2YXIgY29tbW9uQml0czogdTMyID0gMHU7XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7bWF4QXJyYXlTaXplfXU7IGkgPSBpICsgMXUpIHtcbiAgICAgIGNvbW1vbkJpdHMgPSBjb21tb25CaXRzICsgY291bnRPbmVCaXRzKGFbaV0gJiBiW2ldKTtcbiAgfVxuICByZXR1cm4gMS4wIC0gZjMyKGNvbW1vbkJpdHMpIC8gZjMyKHRvdGFsICogMiAtIGNvbW1vbkJpdHMgKiAzKTtcbiAgYDtcbn1cbmV4cG9ydCB2YXIgV0VCR1BVRElTVEFOQ0U7XG4oZnVuY3Rpb24gKFdFQkdQVURJU1RBTkNFKSB7XG4gICAgV0VCR1BVRElTVEFOQ0VbXCJIQU1NSU5HXCJdID0gXCJIYW1taW5nXCI7XG4gICAgV0VCR1BVRElTVEFOQ0VbXCJFVUNMSURFQU5cIl0gPSBcIkV1Y2xpZGVhblwiO1xuICAgIFdFQkdQVURJU1RBTkNFW1wiTUFOSEFUVEFOXCJdID0gXCJNYW5oYXR0YW5cIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIlRBTklNT1RPXCJdID0gXCJUYW5pbW90b1wiO1xuICAgIFdFQkdQVURJU1RBTkNFW1wiTEVWRU5TVEVJTlwiXSA9IFwiTGV2ZW5zaHRlaW5cIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIk5FRURMRU1BTl9XVU5TQ0hcIl0gPSBcIk5lZWRsZW1hbm4tV3Vuc2NoXCI7XG4gICAgV0VCR1BVRElTVEFOQ0VbXCJNT05PTUVSX0NIRU1JQ0FMX0RJU1RBTkNFXCJdID0gXCJNb25vbWVyIGNoZW1pY2FsIGRpc3RhbmNlXCI7XG4gICAgV0VCR1BVRElTVEFOQ0VbXCJTT0tBTFwiXSA9IFwiU29rYWxcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIkNPU0lORVwiXSA9IFwiQ29zaW5lXCI7XG4gICAgV0VCR1BVRElTVEFOQ0VbXCJBU1lNTUVUUklDXCJdID0gXCJBc3ltbWV0cmljXCI7XG4gICAgV0VCR1BVRElTVEFOQ0VbXCJEaWZmZXJlbmNlXCJdID0gXCJEaWZmZXJlbmNlXCI7XG4gICAgV0VCR1BVRElTVEFOQ0VbXCJPbmVIb3RcIl0gPSBcIk9uZS1Ib3RcIjtcbn0pKFdFQkdQVURJU1RBTkNFIHx8IChXRUJHUFVESVNUQU5DRSA9IHt9KSk7XG5leHBvcnQgY29uc3Qgd2ViR1BVRnVuY3Rpb25zID0ge1xuICAgIFtXRUJHUFVESVNUQU5DRS5IQU1NSU5HXTogd2ViR1BVSGFtbWluZyxcbiAgICBbV0VCR1BVRElTVEFOQ0UuRVVDTElERUFOXTogd2ViR1BVRXVjbGlkZWFuLFxuICAgIFtXRUJHUFVESVNUQU5DRS5NQU5IQVRUQU5dOiB3ZWJHUFVNYW5oYXR0YW4sXG4gICAgW1dFQkdQVURJU1RBTkNFLlRBTklNT1RPXTogd2ViR1BVVGFuaW1vdG9CaXRBcnJheSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuTEVWRU5TVEVJTl06IHdlYkdQVUxldmVuc3RlaW4sXG4gICAgW1dFQkdQVURJU1RBTkNFLk5FRURMRU1BTl9XVU5TQ0hdOiB3ZWJHUFVOZWVkbGVtYW5XdW5zY2gsXG4gICAgW1dFQkdQVURJU1RBTkNFLk1PTk9NRVJfQ0hFTUlDQUxfRElTVEFOQ0VdOiB3ZWJHUFVNb25vbWVyQ2hlbWljYWxEaXN0YW5jZSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuU09LQUxdOiB3ZWJHUFVTb2thbEJpdEFycmF5LFxuICAgIFtXRUJHUFVESVNUQU5DRS5DT1NJTkVdOiB3ZWJHUFVDb3NpbmVCaXRBcnJheSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuQVNZTU1FVFJJQ106IHdlYkdQVUFzeW1tZXRyaWNCaXRBcnJheSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuRGlmZmVyZW5jZV06IHdlYkdQVU51bWVyaWNEaXN0YW5jZSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuT25lSG90XTogd2ViR1BVT25lSG90RGlzdGFuY2Vcbn07XG5leHBvcnQgY29uc3QgZGlzdGFuY2VGdW5jdGlvbkNvbXBsZXhpdHkgPSB7XG4gICAgW1dFQkdQVURJU1RBTkNFLkhBTU1JTkddOiAobWF4RW50cnlTaXplKSA9PiBNYXRoLmNlaWwobWF4RW50cnlTaXplIC8gMzApLFxuICAgIFtXRUJHUFVESVNUQU5DRS5FVUNMSURFQU5dOiAobWF4RW50cnlTaXplKSA9PiBNYXRoLmNlaWwobWF4RW50cnlTaXplIC8gMzApLFxuICAgIFtXRUJHUFVESVNUQU5DRS5NQU5IQVRUQU5dOiAobWF4RW50cnlTaXplKSA9PiBNYXRoLmNlaWwobWF4RW50cnlTaXplIC8gMzApLFxuICAgIFtXRUJHUFVESVNUQU5DRS5UQU5JTU9UT106IChtYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChtYXhFbnRyeVNpemUgLyA2MCksXG4gICAgW1dFQkdQVURJU1RBTkNFLlNPS0FMXTogKG1heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKG1heEVudHJ5U2l6ZSAvIDYwKSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuQ09TSU5FXTogKG1heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKG1heEVudHJ5U2l6ZSAvIDYwKSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuQVNZTU1FVFJJQ106IChtYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChtYXhFbnRyeVNpemUgLyA2MCksXG4gICAgW1dFQkdQVURJU1RBTkNFLkxFVkVOU1RFSU5dOiAobWF4RW50cnlTaXplKSA9PiBNYXRoLmNlaWwobWF4RW50cnlTaXplICogbWF4RW50cnlTaXplIC8gNjApLFxuICAgIFtXRUJHUFVESVNUQU5DRS5ORUVETEVNQU5fV1VOU0NIXTogKG1heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKG1heEVudHJ5U2l6ZSAqIG1heEVudHJ5U2l6ZSAvIDYwKSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuTU9OT01FUl9DSEVNSUNBTF9ESVNUQU5DRV06IChtYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChtYXhFbnRyeVNpemUgLyAyNSksXG4gICAgW1dFQkdQVURJU1RBTkNFLkRpZmZlcmVuY2VdOiAoX21heEVudHJ5U2l6ZSkgPT4gMSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuT25lSG90XTogKF9tYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChfbWF4RW50cnlTaXplIC8gNDApLFxufTtcbmV4cG9ydCBjb25zdCBUeXBlU3VwcG9ydGVkRGlzdGFuY2VzID0ge1xuICAgIFtcIlNUUklOR1wiIC8qIFdHUFVFTlRSWVRZUEUuU1RSSU5HICovXTogbmV3IFNldChbV0VCR1BVRElTVEFOQ0UuSEFNTUlORywgV0VCR1BVRElTVEFOQ0UuTEVWRU5TVEVJTiwgV0VCR1BVRElTVEFOQ0UuTkVFRExFTUFOX1dVTlNDSCwgV0VCR1BVRElTVEFOQ0UuTU9OT01FUl9DSEVNSUNBTF9ESVNUQU5DRSwgV0VCR1BVRElTVEFOQ0UuT25lSG90XSksXG4gICAgW1wiVUlOVDMyQVJSQVlcIiAvKiBXR1BVRU5UUllUWVBFLlVJTlQzMkFSUkFZICovXTogbmV3IFNldChbV0VCR1BVRElTVEFOQ0UuSEFNTUlORywgV0VCR1BVRElTVEFOQ0UuRVVDTElERUFOLCBXRUJHUFVESVNUQU5DRS5NQU5IQVRUQU4sIFdFQkdQVURJU1RBTkNFLk1PTk9NRVJfQ0hFTUlDQUxfRElTVEFOQ0UsIFdFQkdQVURJU1RBTkNFLkxFVkVOU1RFSU4sIFdFQkdQVURJU1RBTkNFLk5FRURMRU1BTl9XVU5TQ0gsIFdFQkdQVURJU1RBTkNFLlRBTklNT1RPLCBXRUJHUFVESVNUQU5DRS5DT1NJTkUsIFdFQkdQVURJU1RBTkNFLlNPS0FMLCBXRUJHUFVESVNUQU5DRS5BU1lNTUVUUklDLCBXRUJHUFVESVNUQU5DRS5PbmVIb3QsIFdFQkdQVURJU1RBTkNFLkRpZmZlcmVuY2VdKSxcbiAgICBbXCJJTlQzMkFSUkFZXCIgLyogV0dQVUVOVFJZVFlQRS5JTlQzMkFSUkFZICovXTogbmV3IFNldChbV0VCR1BVRElTVEFOQ0UuRVVDTElERUFOLCBXRUJHUFVESVNUQU5DRS5NQU5IQVRUQU4sIFdFQkdQVURJU1RBTkNFLk9uZUhvdCwgV0VCR1BVRElTVEFOQ0UuRGlmZmVyZW5jZV0pLFxuICAgIFtcIkZMT0FUMzJBUlJBWVwiIC8qIFdHUFVFTlRSWVRZUEUuRkxPQVQzMkFSUkFZICovXTogbmV3IFNldChbV0VCR1BVRElTVEFOQ0UuRVVDTElERUFOLCBXRUJHUFVESVNUQU5DRS5NQU5IQVRUQU4sIFdFQkdQVURJU1RBTkNFLkRpZmZlcmVuY2VdKSxcbiAgICBbXCJOVU1CRVJcIiAvKiBXR1BVRU5UUllUWVBFLk5VTUJFUiAqL106IG5ldyBTZXQoW1dFQkdQVURJU1RBTkNFLkVVQ0xJREVBTiwgV0VCR1BVRElTVEFOQ0UuTUFOSEFUVEFOLCBXRUJHUFVESVNUQU5DRS5EaWZmZXJlbmNlXSksXG4gICAgW1wiQklUQVJSQVlcIiAvKiBXR1BVRU5UUllUWVBFLkJJVEFSUkFZICovXTogbmV3IFNldChbV0VCR1BVRElTVEFOQ0UuVEFOSU1PVE8sIFdFQkdQVURJU1RBTkNFLkNPU0lORSwgV0VCR1BVRElTVEFOQ0UuU09LQUwsIFdFQkdQVURJU1RBTkNFLkFTWU1NRVRSSUNdKVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdlYkdQVS1tdWx0aWNvbC1kaXN0YW5jZXMuanMubWFwIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5pbXBvcnQgeyBnZXRHUFVEZXZpY2UgfSBmcm9tICcuLi9nZXRHUFVEZXZpY2UnO1xuaW1wb3J0IHsgV0VCR1NMQUdHUkVHQVRJT04sIFdFQkdTTEFHR1JFR0FUSU9ORlVOQ1RJT05TIH0gZnJvbSAnLi4vbXVsdGktY29sLWRpc3RhbmNlcy93ZWJHUFUtYWdncmVnYXRpb24nO1xuaW1wb3J0IHsgV0VCR1BVRElTVEFOQ0UsIHdlYkdQVUZ1bmN0aW9ucyB9IGZyb20gJy4uL211bHRpLWNvbC1kaXN0YW5jZXMvd2ViR1BVLW11bHRpY29sLWRpc3RhbmNlcyc7XG5pbXBvcnQgeyB3ZWJHUFVQcm9jZXNzSW5mbyB9IGZyb20gJy4uL3ByZXByb2Nlc3Npbmcvd2ViR1BVLXByb2Nlc3MtaW5mbyc7XG4vKiogZ2VuZXJhdGUgS05OIGJhc2VkIG9uIGxpc3Qgb2YgbGlzdHMgb2YgZW50cmllcy5cbiAqICB0aGVzZSBlbnRyaWVzIGFyZSBlYWNoIGVuY29kZWQgYXMgVWludDMyQXJyYXkgb3IgRkxPQVQzMkFycmF5IChkZXBlbmRpbmcgb24gdGhlaXIgdHlwZSkuXG4gKiBmb3IgZXhhbXBsZSwgc2VxdWVuY2VzIHdvdWxkIGJlIGVuY29kZWQgYXMgVWludDMyQXJyYXkgYmFzZWQgb24gY2hhciBjb2RlIG9mIHRoZSBsZXR0ZXIgYXQgZWFjaCBwb3NpdGlvbi5cbiAqIFs2NSwgNjYsIDY3LCA2OCwgNjldIHdvdWxkIGJlIGEgc2VxdWVuY2Ugb2YgNSBsZXR0ZXJzLlxuICogZm9yIGNoZW1pY2FsIGZpbmdlcnByaW50cywgaXQgd291bGQgYmUgYSBiaW5hcnkgYXJyYXkgb2YgMHMgYW5kIDFzLFxuICogcmVwcmVzZW50ZWQgYXMgVWludDMyQXJyYXkoX2RhdGEgcHJvcGVydHkgb2YgREcgYml0YXJyYXkpLlxuICpcbiAqIEJlIHdhcmUgdGhhdCBzaXplIG9mIGVudHJ5TGlzdCwgZGlzdGFuY2VNZXRyaWNzLCB3ZWlnaHRzIGFuZCBvcHRpb25zIG11c3QgYmUgdGhlIHNhbWUuXG4gKiBpZiB0aGVyZSBhcmUgbm8gb3B0aW9ucyBmb3IgZW50cmllcyBpLCBwYXNzIGFuIGVtcHR5IG9iamVjdC5cbiAqIGZvciBub3cgb3B0aW9ucyBhcmUgbmVlZGVkIGZvcjpcbiAqIG5lZWRsZW1hbi13dW5zY2ggYW5kIG1vbm9tZXIgY2hlbWljYWwgZGlzdGFuY2VzOiBzZWUge0BsaW5rIEJpb0Rpc3RhbmNlRm5PcHRpb25zfSBhcyBmb3IgaG93IGl0IHNob3VsZCBiZSBwYXNzZWRcbiAqIG51bWVyaWMgZGlzdGFuY2VzIChEaWZmZXJlbmNlKToge3JhbmdlOiBudW1iZXJ9IHdoZXJlIHJhbmdlIGlzIHRoZSByYW5nZSBvZiB0aGUgdmFsdWVzIGluIHRoZSBjb2x1bW4gKG1heCAtIG1pbikuXG4gKiBpbiBib3RoIGNhc2VzLCBpZiBvcHRpb25zIGFyZSBub3QgcHJvdmlkZWQsIHRoZXkgd2lsbCBiZSBjYWxjdWxhdGVkIGF1dG9tYXRpY2FsbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aUNvbFdlYkdQVUtOTihlbnRyeUxpc3QsIC8vIGxpc3Qgb2YgbGlzdHMgb2YgZW50cmllcywgZm9yIG11bHRpcGxlIGNvbHVtbnNcbmtublNpemUgPSAxNSwgLy8gc2l6ZSBvZiB0aGUgay1uZWFyZXN0IG5laWdoYm9yc1xuZGlzdGFuY2VNZXRyaWNzLCAvLyBkaXN0YW5jZSBtZXRyaWNzIGZvciBlYWNoIGNvbHVtblxuYWdncmVnYXRpb25GdW5jdGlvbiwgLy8gYWdncmVnYXRpb24gZnVuY3Rpb24gZm9yIHRoZSBkaXN0YW5jZXNcbndlaWdodHMsIC8vIHdlaWdodHMgZm9yIGVhY2ggY29sdW1uXG5vcHRpb25zIC8vIHN1cHBsZW1lbnRhcnkgb3B0aW9ucyBmb3IgZWFjaCBjb2x1bW5cbikge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIC8vIGZpcnN0LCBjaGVjayB0aGF0IGFsbCB0aGUgc3VwcGxlbWVudGFyeSBvcHRpb25zIGFyZSBwcm92aWRlZCBhbmQgYXJlIHRoZSBzYW1lIGxlbmd0aDpcbiAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoICE9PSBlbnRyeUxpc3QubGVuZ3RoIHx8XG4gICAgICAgICAgICBvcHRpb25zLmxlbmd0aCAhPT0gZGlzdGFuY2VNZXRyaWNzLmxlbmd0aCB8fCBvcHRpb25zLmxlbmd0aCAhPT0gd2VpZ2h0cy5sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09wdGlvbnMsIHdlaWd0aHMgYW5kIGRpc3RhbmNlIGZ1bmN0aW9ucyBtdXN0IGJlIHByb3ZpZGVkIGZvciBlYWNoIGNvbHVtbicpO1xuICAgICAgICAvLyBjaGVjayB0aGF0IGFsbCB0aGUgZW50cnkgbGlzdHMgYXJlIHRoZSBzYW1lIGxlbmd0aFxuICAgICAgICBpZiAoZW50cnlMaXN0LnNvbWUoKGxpc3QpID0+IGxpc3QubGVuZ3RoICE9PSBlbnRyeUxpc3RbMF0ubGVuZ3RoKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQWxsIGVudHJ5IGxpc3RzIG11c3QgYmUgdGhlIHNhbWUgbGVuZ3RoJyk7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZURpc3RhbmNlTWV0cmljcyA9IE9iamVjdC52YWx1ZXMoV0VCR1BVRElTVEFOQ0UpO1xuICAgICAgICBpZiAoZGlzdGFuY2VNZXRyaWNzLnNvbWUoKG1ldHJpYykgPT4gIWF2YWlsYWJsZURpc3RhbmNlTWV0cmljcy5pbmNsdWRlcyhtZXRyaWMpKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkaXN0YW5jZSBtZXRyaWNzIHByb3ZpZGVkOiAnICsgZGlzdGFuY2VNZXRyaWNzLmpvaW4oJywgJykpO1xuICAgICAgICBjb25zdCBhdmFpbGFibGVBZ2dyZWdhdGlvbkZ1bmN0aW9ucyA9IE9iamVjdC52YWx1ZXMoV0VCR1NMQUdHUkVHQVRJT04pO1xuICAgICAgICBpZiAoIWF2YWlsYWJsZUFnZ3JlZ2F0aW9uRnVuY3Rpb25zLmluY2x1ZGVzKGFnZ3JlZ2F0aW9uRnVuY3Rpb24pKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFnZ3JlZ2F0aW9uIGZ1bmN0aW9uIHByb3ZpZGVkOiAnICsgYWdncmVnYXRpb25GdW5jdGlvbik7XG4gICAgICAgIGNvbnN0IG51bU9mQ29sdW1ucyA9IGVudHJ5TGlzdC5sZW5ndGg7IC8vIG51bWJlciBvZiBjb2x1bW5zXG4gICAgICAgIGlmIChudW1PZkNvbHVtbnMgPT09IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbHVtbnMgcHJvdmlkZWQuIFBsZWFzZSBwcm92aWRlIGF0IGxlYXN0IG9uZSBjb2x1bW4gb2YgZGF0YS4nKTtcbiAgICAgICAgY29uc3QgZGV2aWNlID0geWllbGQgZ2V0R1BVRGV2aWNlKCk7XG4gICAgICAgIGlmICghZGV2aWNlKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIC8vIGRldmljZSBtYXkgYmUgbG9zdFxuICAgICAgICBsZXQgZGV2aWNlTG9zdCA9IGZhbHNlO1xuICAgICAgICBkZXZpY2UubG9zdC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRldmljZUxvc3QgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbGlzdFNpemUgPSBlbnRyeUxpc3RbMF0ubGVuZ3RoOyAvLyBzaXplIG9mIGVhY2ggbGlzdCAob3IgY29sdW1uKVxuICAgICAgICBjb25zdCBwcm9jZXNzSW5mbyA9IGVudHJ5TGlzdC5tYXAoKGVudHJ5LCBpKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gd2ViR1BVUHJvY2Vzc0luZm8oZW50cnksIGRpc3RhbmNlTWV0cmljc1tpXSwgaSwgb3B0aW9uc1tpXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobnVtT2ZDb2x1bW5zID09PSAxKVxuICAgICAgICAgICAgYWdncmVnYXRpb25GdW5jdGlvbiA9IFdFQkdTTEFHR1JFR0FUSU9OLk1BTkhBVFRBTjsgLy8gc2F2ZSBhIGJpdCBvZiB0aW1lXG4gICAgICAgIC8vIGNvbWJpbmUgYWxsIHN0cnVjdCB0eXBlcyBpbnRvIG9uZSB0byBwdXQgaW50byB0aGUgc3VwcEluZm8gc3RydWN0LlxuICAgICAgICBsZXQgc3VwcEluZm9XZ3NsID0gcHJvY2Vzc0luZm8ubWFwKChpbmZvKSA9PiBpbmZvLnN1cHBJbmZvU3RydWN0V2dzbClcbiAgICAgICAgICAgIC5maWx0ZXIoKHdnc2wpID0+ICEhd2dzbCAmJiB3Z3NsICE9ICcnKS5qb2luKCcsXFxuJyk7XG4gICAgICAgIC8vIHN0cnVjdHVyZXMgaW4gd2dzbCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIG1lbWJlciwgc28gaWYgd2UgaGF2ZSBubyBzdHJ1Y3R1cmVzLCB3ZSBuZWVkIHRvIGFkZCBhIGR1bW15IG9uZVxuICAgICAgICBsZXQgbmVlZHNEdW1teSA9IGZhbHNlO1xuICAgICAgICBpZiAoIXN1cHBJbmZvV2dzbCB8fCBzdXBwSW5mb1dnc2wudHJpbSgpID09ICcnKSB7XG4gICAgICAgICAgICBuZWVkc0R1bW15ID0gdHJ1ZTtcbiAgICAgICAgICAgIHN1cHBJbmZvV2dzbCA9ICdcXG5kdW1teTogZjMyXFxuJztcbiAgICAgICAgfVxuICAgICAgICAvLyBjb21iaW5lIGFsbCBjb21wbGV4aXRpZXMgaW50byBvbmVcbiAgICAgICAgY29uc3QgY29tYmluZWRDb21wbGV4aXR5ID0gcHJvY2Vzc0luZm8ucmVkdWNlKChhLCBiKSA9PiBhICsgYi5jb21wbGV4aXR5LCAwKTtcbiAgICAgICAgLy8gY29tYmluZSBhbGwgZGF0YSB3Z3NsIHN0cnVjdCBjb2RlIGludG8gb25lXG4gICAgICAgIGNvbnN0IGRhdGFXZ3NsID0gcHJvY2Vzc0luZm8ubWFwKChpbmZvKSA9PiBpbmZvLmRhdGFTdHJ1Y3RXZ3NsKS5maWx0ZXIoKHdnc2wpID0+ICEhd2dzbCAmJiB3Z3NsICE9ICcnKS5qb2luKCcsXFxuJyk7XG4gICAgICAgIC8vIGNvbWJpbmUgYWxsIGFycmF5IHNpemVzIGludG8gb25lIGFycmF5IChlYXNpZXIgZm9yIHNldHRpbmcpXG4gICAgICAgIGNvbnN0IGFycmF5U2l6ZXMgPSBuZXcgVWludDMyQXJyYXkobnVtT2ZDb2x1bW5zICogbGlzdFNpemUpO1xuICAgICAgICBwcm9jZXNzSW5mby5mb3JFYWNoKChpbmZvLCBpKSA9PiB7XG4gICAgICAgICAgICBhcnJheVNpemVzLnNldChpbmZvLmFycmF5U2l6ZXMsIGkgKiBsaXN0U2l6ZSk7XG4gICAgICAgIH0pOyAvLyBhcnJheS5mbGF0IGlzIG5vdCBhcyBvcHRpbWl6ZWQgYXMgdGhpc1xuICAgICAgICAvLyBpZiB3ZSB0cnkgdG8gbWFwIGxhcmdlIGtubiBkaXJlY3RseSBmcm9tIEdQVSwgc29tZXRpbWVzLCBkZXZpY2UgZGlzY29ubmVjdHMuIHNvIHdlIG5lZWQgdG8gZG8gaXQgaW4gY2h1bmtzLCBhIGdvb2QgbnVtYmVyXG4gICAgICAgIC8vIHdlIGZvdW5kIGlzIDEwMDAwLiBTbyB3ZSB3aWxsIHBlcmZvcm0gY29tcHV0YXRpb25zIGluIGNodW5rcyBvZiAxMDAwMC5cbiAgICAgICAgY29uc3QgY29tcHV0YXRpb25zUGVyUGFzcyA9IDEwMDAwO1xuICAgICAgICAvLyBhbHNvLCBhcyB0aGUgY29tcHV0YXRpb24gcGVyIHRocmVhZCB0YWtlcyBzb21lIHRpbWUsIHdlIGFsc28gbmVlZCB0byBkaXZpZGUgdGhlIHdvcmsgaW50byBzbWFsbGVyIGNodW5rcy4gbWVhbmluZ1xuICAgICAgICAvLyB0aGF0IHdlIHdpbGwgZGl2aWRlIG51bW1wZXIgb2YgcGFpciBjb21wdXRhdGlvbnMgcGVyIHBhc3MuIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHBhaXIgY29tcGFyaXNvbnMgd2lsbCBiZSBzdG9yZWQgaW4gc3RhcnRBdEVuZEF0IGJ1ZmZlciAodmVjNDx1MzI+KSBhcyB6IGFuZCB3IGNvb3JkaW5hdGVzLlxuICAgICAgICBjb25zdCBwYWlyQ29tcGFyaXNvbnNQZXJQYXNzID0gTWF0aC5jZWlsKDEwMDAwIC8gY29tYmluZWRDb21wbGV4aXR5KTtcbiAgICAgICAgY29uc3Qgd29ya0dyb3VwRGl2aXNpb24gPSAxMDsgLy8gaG93IG1hbnkgdGhyZWFkcyBpbnNpZGUgb2Ygb25lIHdvcmtncm91cCBkaW1lbnNpb24gKGluIHRoaXMgY2FzZSAxMCAqIDEwIHRocmVhZHMgcGVyIHdvcmtncm91cClcbiAgICAgICAgY29uc3QgdGhyZWFkc1Blcldvcmtncm91cCA9IHdvcmtHcm91cERpdmlzaW9uICogd29ya0dyb3VwRGl2aXNpb247XG4gICAgICAgIGNvbnN0IHdvcmtncm91cHNEaW0gPSBNYXRoLmNlaWwoTWF0aC5zcXJ0KE1hdGguY2VpbChjb21wdXRhdGlvbnNQZXJQYXNzIC8gdGhyZWFkc1Blcldvcmtncm91cCkpKTsgLy8gaG93IG1hbnkgd29ya2dyb3VwcyBwZXIgMmQgZGltZW5zaW9uXG4gICAgICAgIGNvbnN0IGdsb2JhbFRocmVhZERpbVNpemUgPSB3b3JrZ3JvdXBzRGltICogd29ya0dyb3VwRGl2aXNpb247IC8vIGhvdyBtYW55IHRocmVhZHMgcGVyIDJkIGRpbWVuc2lvblxuICAgICAgICAvLyBjb25zb2xlLmxvZyhnZXRDb21iaW5lZERpc3RhbmNlU2NyaXB0KGRpc3RhbmNlTWV0cmljcywgcHJvY2Vzc0luZm8ubWFwKChpbmZvKSA9PiBpbmZvLm1heEVudHJ5TGVuKSwga25uU2l6ZSwgYWdncmVnYXRpb25GdW5jdGlvbikpO1xuICAgICAgICAvLyByZXR1cm47XG4gICAgICAgIGNvbnN0IHJlc3VsdEluZGV4ZXMgPSBuZXcgQXJyYXkobGlzdFNpemUpXG4gICAgICAgICAgICAuZmlsbChudWxsKVxuICAgICAgICAgICAgLm1hcCgoKSA9PiBuZXcgVWludDMyQXJyYXkoa25uU2l6ZSkpO1xuICAgICAgICBjb25zdCByZXN1bHREaXN0YW5jZXMgPSBuZXcgQXJyYXkobGlzdFNpemUpXG4gICAgICAgICAgICAuZmlsbChudWxsKVxuICAgICAgICAgICAgLm1hcCgoKSA9PiBuZXcgRmxvYXQzMkFycmF5KGtublNpemUpKTtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7XG4gICAgICAgICAgICBsYWJlbDogJ0tOTiBjb21wdXRlIHNoYWRlcicsXG4gICAgICAgICAgICBjb2RlOiBgXG4gICAgICAgICAgLy8gdGhpcyBzdHJ1Y3Qgd2lsbCBjb250YWluIGFsbCB0aGUgaW5mbyBhYm91dCB0aGUgY29tcHV0YXRpb24sIHN0YXJ0QXRFbmRBdCB3aWxsIGNvbnRhaW4gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGtubkRpc3RhbmNlcyBhbmQga25uSW5kZXhlcy5cbiAgICAgICAgICAvLyBhcnJheSBvZiBzaXplcyBmb3IgZWFjaCBlbnRyaWVzLCBhbmQgdGhlIG1haW4gZGF0YSBhcyBhcnJheXMgb2YgYXJyYXlzIGNhbGxlZCBkYXRhMCwgZGF0YTEgYW5kIHNvIG9uLiBnb29kIHRoaW5nIGlzIHRoYXQgYmVjYXVzZSB0aGUgZmlyc3QgZW50cnkgaXMgdmVjNDx1MzI+LFxuICAgICAgICAgIC8vIHRoZXJlIHdpbGwgYmUgbm8gcGFkZGluZ3MsIHNvIG5vIG5lZWQgdG8gd29ycnkgYWJvdXQgcGFkZGluZyBkYXRhLiBhbHNvLCBhcnJheXMgYW5kIG1hdHJpY2VzIGdldCBzdHVja2VkIHRvZ2V0aGVyLCBzbyBubyBwYWRkaW5nIHRoZXJlIGFzIHdlbGwuXG4gICAgICAgICAgLy8gd2hhdCB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0IGlzIHRoZSBwYWRkaW5nIG9mIG92ZXJhbGwgc3RydWN0LiB0aGUgc2l6ZSBvZiBvdmVyYWxsIHN0cnVjdCB3aWxsIGJlIGZhY3RvciBvZiAxNiBieXRlcywgc28ga2VlcCB0aGF0IGluIG1pbmQuXG4gICAgICAgICAgc3RydWN0IENvbXB1dGVJbmZvIHtcbiAgICAgICAgICAgIC8vIHRoZSB4IGNvb3JkaW5hdGUgd2lsbCBjb250YWluIHRoZSBzdGFydCBpbmRleCBvZiB0aGUga25uRGlzdGFuY2VzIGFuZCBrbm5JbmRleGVzLCB3aGlsZSB5IHdpbGwgY29udGFpbiB0aGUgZW5kIGluZGV4ICAgXG4gICAgICAgICAgICAvLyB0aGUgeiBjb29yZGluYXRlIHdpbGwgY29udGFpbiB0aGUgc3RhcnQgb2YgdGhlIHBhaXIgY29tcGFyaXNvbnMsIHdoaWxlIHcgd2lsbCBjb250YWluIHRoZSBlbmQgb2YgdGhlIHBhaXIgY29tcGFyaXNvbnNcbiAgICAgICAgICAgIC8vIGp1c3Qga2VlcCBpbiBtaW5kIHRoYXQgdGhpcyB2ZWM0IHdpbGwgYmUgaW4gZmlyc3QgMTYgYnl0ZXMgb2YgY29ycmVzcG9uZGluZyBidWZmZXIuXG4gICAgICAgICAgICBzdGFydEF0RW5kQXQ6IHZlYzQ8dTMyPixcbiAgICAgICAgICAgIC8vIHRoZSBBQ1RVQUxMWSBzaXplcyBvZiBlYWNoIGVudHJ5XG4gICAgICAgICAgICBlbnRyeVNpemVzOiBhcnJheTxhcnJheTx1MzIsICR7bGlzdFNpemV9PiwgJHtudW1PZkNvbHVtbnN9PixcbiAgICAgICAgICAgIC8vIHRoZSB3ZWlnaHRzIGZvciBlYWNoIGVudHJ5XG4gICAgICAgICAgICB3ZWlnaHRzOiBhcnJheTxmMzIsICR7bnVtT2ZDb2x1bW5zfT4sXG4gICAgICAgICAgICAvLyB0aGUgZGF0YSBmb3IgZWFjaCBlbnRyeVxuICAgICAgICAgICAgJHtkYXRhV2dzbH0gLy8gYW4gZXhhbXBsZSBvZiB0aGUgZGF0YVdnc2wgd291bGQgYmU6XG4gICAgICAgICAgICAvL2RhdGEwOiBhcnJheTxhcnJheTx1MzIsMjA+LDEwMD4sXG4gICAgICAgICAgICAvL2RhdGExOiBhcnJheTxhcnJheTx1MzIsMjA+LDEwMD5cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgc3RydWN0IFN1cHBJbmZvIHtcbiAgICAgICAgICAgIC8vIHN0cnVjdCBjb250YWluaW5nIGFsbCB0aGUgc3VwcGxlbWVudGFyeSBpbmZvLCBsaWtlIHNjb3JpbmcgbWF0cml4LCBhbHBoYWJldCBpbmRleGVzLCByYW5nZSwgZXRjLlxuICAgICAgICAgICAgJHtzdXBwSW5mb1dnc2x9XG4gICAgICAgICAgfTtcbiAgICBcbiAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgdmFyPHN0b3JhZ2UsIHJlYWRfd3JpdGU+IGtubkluZGV4ZXM6IGFycmF5PGFycmF5PHUzMiwgJHtrbm5TaXplfT4sICR7Y29tcHV0YXRpb25zUGVyUGFzc30+O1xuICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygxKSB2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4ga25uRGlzdGFuY2VzOiBhcnJheTxhcnJheTxmMzIsICR7a25uU2l6ZX0+LCAke2NvbXB1dGF0aW9uc1BlclBhc3N9PjsgLy8gZWFjaCB0aW1lIGp1c3QgY29tcHV0ZSBmb3IgYSBzdWJzZXQgb2YgdGhlIGxpc3RcbiAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMikgdmFyPHN0b3JhZ2UsIHJlYWRfd3JpdGU+IGNvbXB1dGVJbmZvOiBDb21wdXRlSW5mbztcbiAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMykgdmFyPHN0b3JhZ2UsIHJlYWRfd3JpdGU+IHN1cHBJbmZvOiBTdXBwSW5mbztcbiAgICAgICAgICBcbiAgICAgICAgICBAY29tcHV0ZSBAd29ya2dyb3VwX3NpemUoJHt3b3JrR3JvdXBEaXZpc2lvbn0sICR7d29ya0dyb3VwRGl2aXNpb259KSBmbiBjYWxjS05OKFxuICAgICAgICAgICAgQGJ1aWx0aW4oZ2xvYmFsX2ludm9jYXRpb25faWQpIGlkOiB2ZWMzPHUzMj5cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgICR7bmVlZHNEdW1teSA/IGBsZXQgb3RoZXJEdW1teSA9IHN1cHBJbmZvLmR1bW15ICogMjtgIDogJyd9IC8vIGp1c3QgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHN1cHBJbmZvIGlzIG5vdCBvcHRpbWl6ZWQgb3V0XG4gICAgICAgICAgICBsZXQgY29sID0gaWQueDsgLy8qICR7d29ya0dyb3VwRGl2aXNpb259ICsgbG9jYWxJZC54O1xuICAgICAgICAgICAgbGV0IHJvdyA9IGlkLnk7IC8vKiAke3dvcmtHcm91cERpdmlzaW9ufSArIGxvY2FsSWQueTtcbiAgICAgICAgICAgIGxldCBncmFwaEluZGV4ID0gcm93ICogJHtnbG9iYWxUaHJlYWREaW1TaXplfSArIGNvbDtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IGdyYXBoSW5kZXggKyBjb21wdXRlSW5mby5zdGFydEF0RW5kQXQueDsgLy8gYWRkIHRoZSBzdGFydGluZyBpbmRleCBvZiB0aGUga25uRGlzdGFuY2VzIGFuZCBrbm5JbmRleGVzXG4gICAgXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gbWluKCR7bGlzdFNpemV9dSwgY29tcHV0ZUluZm8uc3RhcnRBdEVuZEF0LnkpKSB7cmV0dXJuO31cbiAgICBcbiAgICAgICAgICAgIGxldCBwYWlyQ29tcGFyaXNvblN0YXJ0QXQgPSBjb21wdXRlSW5mby5zdGFydEF0RW5kQXQuejtcbiAgICAgICAgICAgIGxldCBwYWlyQ29tcGFyaXNvbkVuZEF0ID0gbWluKGNvbXB1dGVJbmZvLnN0YXJ0QXRFbmRBdC53LCAke2xpc3RTaXplfXUpO1xuICAgIFxuICAgIFxuICAgICAgICAgICAgLy8gb25seSBjbGVhciB0aGUga25uRGlzdGFuY2VzIGFuZCBrbm5JbmRleGVzIGlmIHdlIGFyZSBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhaXIgY29tcGFyaXNvblxuICAgICAgICAgICAgaWYgKHBhaXJDb21wYXJpc29uU3RhcnRBdCA9PSAwdSkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke2tublNpemV9OyBpID0gaSArIDF1KSB7XG4gICAgICAgICAgICAgICAga25uRGlzdGFuY2VzW2dyYXBoSW5kZXhdW2ldID0gOTk5OTkuMDtcbiAgICAgICAgICAgICAgICBrbm5JbmRleGVzW2dyYXBoSW5kZXhdW2ldID0gMHU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIGZvciAodmFyIGk6IHUzMiA9IHBhaXJDb21wYXJpc29uU3RhcnRBdDsgaSA8IHBhaXJDb21wYXJpc29uRW5kQXQ7IGkgPSBpICsgMXUpIHtcbiAgICAgICAgICAgICAgaWYgKGkgPT0gaW5kZXgpIHtjb250aW51ZTt9XG4gICAgICAgICAgICAgIGxldCBkaXN0ID0gY29tYmluZWREaXN0YW5jZShpbmRleCwgaSk7XG4gICAgICAgICAgICAgIGluc2VydEtubihncmFwaEluZGV4LCBkaXN0LCBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzIHdpbGwgZ2VuZXJhdGUgdGhlIGRpc3RhbmNlIHNjcmlwdCBmb3IgZWFjaCBkaXN0YW5jZSBtZXRyaWMgYW5kIHRoZW4gY29tYmluZSB0aGVtIGludG8gb25lXG4gICAgICAgICAgJHtnZXRDb21iaW5lZERpc3RhbmNlU2NyaXB0KGRpc3RhbmNlTWV0cmljcywgcHJvY2Vzc0luZm8ubWFwKChpbmZvKSA9PiBpbmZvLm1heEVudHJ5TGVuKSwga25uU2l6ZSwgYWdncmVnYXRpb25GdW5jdGlvbil9XG4gICAgXG4gICAgICAgICAgZm4gaW5zZXJ0S25uKGtubkluZGV4OiB1MzIsIGRpc3Q6IGYzMiwgaW5kZXg6IHUzMikge1xuICAgICAgICAgICAgLy8gc21hbGwgb3B0aW1pemF0aW9uLCBpZiB0aGUgZGlzdGFuY2UgaXMgbGFyZ2VyIHRoYW4gdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUga25uRGlzdGFuY2VzLCB3ZSBjYW4gc2tpcFxuICAgICAgICAgICAgaWYgKGRpc3QgPj0ga25uRGlzdGFuY2VzW2tubkluZGV4XVske2tublNpemV9IC0gMXVdKSB7cmV0dXJuO31cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7a25uU2l6ZX07IGkgPSBpICsgMXUpIHtcbiAgICAgICAgICAgICAgaWYgKGRpc3QgPCBrbm5EaXN0YW5jZXNba25uSW5kZXhdW2ldKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9ICR7a25uU2l6ZX0gLSAxdTsgaiA+IGk7IGogPSBqIC0gMXUpIHtcbiAgICAgICAgICAgICAgICAgIGtubkRpc3RhbmNlc1trbm5JbmRleF1bal0gPSBrbm5EaXN0YW5jZXNba25uSW5kZXhdW2ogLSAxdV07XG4gICAgICAgICAgICAgICAgICBrbm5JbmRleGVzW2tubkluZGV4XVtqXSA9IGtubkluZGV4ZXNba25uSW5kZXhdW2ogLSAxdV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGtubkRpc3RhbmNlc1trbm5JbmRleF1baV0gPSBkaXN0O1xuICAgICAgICAgICAgICAgIGtubkluZGV4ZXNba25uSW5kZXhdW2ldID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBgLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKHtcbiAgICAgICAgICAgIGxhYmVsOiAnaGFtbWluZyBjb21wdXRlIHBpcGVsaW5lJyxcbiAgICAgICAgICAgIGxheW91dDogJ2F1dG8nLFxuICAgICAgICAgICAgY29tcHV0ZToge1xuICAgICAgICAgICAgICAgIG1vZHVsZSxcbiAgICAgICAgICAgICAgICBlbnRyeVBvaW50OiAnY2FsY0tOTicsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBzaXplIG9mIGNvbXB1dGVJbmZvIHN0cnVjdCBidWZmZXIgaW4gdGVybXMgb2YgMzJiaXQgdmFsdWVzXG4gICAgICAgIC8vICAgICAgICAgICBzdGFydEF0RW5kQXQ9NCwgICAgICAgICAgZW50cnlTaXplcywgICAgICAgIHdlaWdodHMsICAgICAgICAgIGRhdGEwICsgZGF0YTEgKyAuLi5cbiAgICAgICAgY29uc3QgY29tcHV0ZUluZm8zMlNpemUgPSA0ICsgbnVtT2ZDb2x1bW5zICogbGlzdFNpemUgKyBudW1PZkNvbHVtbnMgKyBwcm9jZXNzSW5mby5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLnNvdXJjZUFycmF5U2l6ZSwgMCk7XG4gICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBzdXBwSW5mbyBzdHJ1Y3QgYnVmZmVyIGluIHRlcm1zIG9mIDMyYml0IHZhbHVlc1xuICAgICAgICBjb25zdCBzdXBwSW5mbzMyU2l6ZSA9IHByb2Nlc3NJbmZvLnJlZHVjZSgoYSwgYikgPT4gYSArIGIuc3VwcEluZm9TaXplLCAwKTtcbiAgICAgICAgLy8gY3JlYXRlIGEgYnVmZmVyIG9uIHRoZSBHUFUgdG8gaG9sZCBjb21wdXRlSW5mb1xuICAgICAgICAvLyBiZXdhcmUgdGhhdCBzdHJ1Y3QgbXVzdCBiZSBwYWRkZWQgdG8gMTYgYnl0ZXMsIHNvIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3QgaW4gMzJiaXQgdmFsdWVzXG4gICAgICAgIGNvbnN0IGNvbXB1dGVJbmZvQnVmZmVyU2l6ZSA9IGNvbXB1dGVJbmZvMzJTaXplICogVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7XG4gICAgICAgIGxldCBwYWRkZWRDb21wdXRlSW5mb0J1ZmZlclNpemUgPSBjb21wdXRlSW5mb0J1ZmZlclNpemU7XG4gICAgICAgIGNvbnN0IHJlbWFpbmRlciA9IGNvbXB1dGVJbmZvQnVmZmVyU2l6ZSAmIDE1OyAvLyBjaGVjayBpZiB0aGUgc2l6ZSBpcyBhIG11bHRpcGxlIG9mIDE2XG4gICAgICAgIGlmIChyZW1haW5kZXIgIT09IDApXG4gICAgICAgICAgICBwYWRkZWRDb21wdXRlSW5mb0J1ZmZlclNpemUgKz0gMTYgLSByZW1haW5kZXI7IC8vIHBhZCB0aGUgc2l6ZSBhY2NvcmRpbmdseVxuICAgICAgICBjb25zdCBjb21wdXRlSW5mb0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xuICAgICAgICAgICAgbGFiZWw6ICdjb21wdXRlIGluZm8gYnVmZmVyJyxcbiAgICAgICAgICAgIHNpemU6IHBhZGRlZENvbXB1dGVJbmZvQnVmZmVyU2l6ZSxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QsXG4gICAgICAgICAgICBtYXBwZWRBdENyZWF0aW9uOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbWFwcGVkQ29tcHV0ZUluZm9BcnJheUJ1ZmZlciA9IGNvbXB1dGVJbmZvQnVmZmVyLmdldE1hcHBlZFJhbmdlKCk7IC8vIGdldCBmdWxsIGJ1ZmZlclxuICAgICAgICAvLyBjcmVhdGUgdmFycyB0byBob2xkIHN0YXJ0QXRFbmRBdFxuICAgICAgICBsZXQgc3RhcnRBdCA9IDA7XG4gICAgICAgIGxldCBlbmRBdCA9IGNvbXB1dGF0aW9uc1BlclBhc3M7XG4gICAgICAgIGxldCBwYWlyQ29tcGFyaXNvblN0YXJ0QXQgPSAwO1xuICAgICAgICBsZXQgcGFpckNvbXBhcmlzb25FbmRBdCA9IHBhaXJDb21wYXJpc29uc1BlclBhc3M7XG4gICAgICAgIGNvbnN0IHN0YXJ0QXRFbmRBdFNpemUgPSA0O1xuICAgICAgICAvLyBjb3B5IHRoZSBkYXRhIGludG8gdGhlIGJ1ZmZlciBhdCBjb3JyZWN0IHBsYWNlc1xuICAgICAgICBsZXQgY29tcHV0ZUluZm9PZmZTZXQgPSAwO1xuICAgICAgICBjb25zdCBzdGFydEF0RW5kQXRWaWV3ID0gbmV3IFVpbnQzMkFycmF5KG1hcHBlZENvbXB1dGVJbmZvQXJyYXlCdWZmZXIsIGNvbXB1dGVJbmZvT2ZmU2V0LCBzdGFydEF0RW5kQXRTaXplKTsgLy9uZXcgVWludDMyQXJyYXkoY29tcHV0ZUluZm9CdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoY29tcHV0ZUluZm9PZmZTZXQsIDQgKiBVaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCkpO1xuICAgICAgICBzdGFydEF0RW5kQXRWaWV3LnNldChbc3RhcnRBdCwgZW5kQXQsIHBhaXJDb21wYXJpc29uU3RhcnRBdCwgcGFpckNvbXBhcmlzb25FbmRBdF0pO1xuICAgICAgICAvLyB3cml0ZSBlbnRyeSBzaXplc1xuICAgICAgICBjb21wdXRlSW5mb09mZlNldCArPSBzdGFydEF0RW5kQXRTaXplICogVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7XG4gICAgICAgIGNvbnN0IGVudHJ5U2l6ZXNWaWV3ID0gbmV3IFVpbnQzMkFycmF5KG1hcHBlZENvbXB1dGVJbmZvQXJyYXlCdWZmZXIsIGNvbXB1dGVJbmZvT2ZmU2V0LCBhcnJheVNpemVzLmxlbmd0aCk7IC8vbmV3IFVpbnQzMkFycmF5KGNvbXB1dGVJbmZvQnVmZmVyLmdldE1hcHBlZFJhbmdlKGNvbXB1dGVJbmZvT2ZmU2V0LCBhcnJheVNpemVzLmJ5dGVMZW5ndGgpKTtcbiAgICAgICAgZW50cnlTaXplc1ZpZXcuc2V0KGFycmF5U2l6ZXMpO1xuICAgICAgICAvLyB3cml0ZSB3ZWlnaHRzXG4gICAgICAgIGNvbXB1dGVJbmZvT2ZmU2V0ICs9IGFycmF5U2l6ZXMuYnl0ZUxlbmd0aDsgLy8gYXJyYXlTaXplcy5sZW5ndGggKiBVaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtcbiAgICAgICAgY29uc3Qgd2VpZ2h0c1ZpZXcgPSBuZXcgRmxvYXQzMkFycmF5KG1hcHBlZENvbXB1dGVJbmZvQXJyYXlCdWZmZXIsIGNvbXB1dGVJbmZvT2ZmU2V0LCBudW1PZkNvbHVtbnMpOyAvL25ldyBGbG9hdDMyQXJyYXkoY29tcHV0ZUluZm9CdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoY29tcHV0ZUluZm9PZmZTZXQsIG51bU9mQ29sdW1ucyAqIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCkpO1xuICAgICAgICB3ZWlnaHRzVmlldy5zZXQod2VpZ2h0cyk7XG4gICAgICAgIC8vIHdyaXRlIGRhdGFcbiAgICAgICAgY29tcHV0ZUluZm9PZmZTZXQgKz0gbnVtT2ZDb2x1bW5zICogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICBmb3IgKGNvbnN0IGluZm8gb2YgcHJvY2Vzc0luZm8pIHtcbiAgICAgICAgICAgIC8vZGV2aWNlLnF1ZXVlLndyaXRlQnVmZmVyKGNvbXB1dGVJbmZvQnVmZmVyLCBjb21wdXRlSW5mb09mZlNldCwgaW5mby5mbGF0U291cmNlQXJyYXksIDAsIGNodW5rQnl0ZVNpemUpO1xuICAgICAgICAgICAgY29uc3QgQXJyYXlDb25zdHJ1Y3RvciA9IGluZm8uRW5jb2RlZEFycmF5Q29uc3RydWN0b3I7XG4gICAgICAgICAgICBjb25zdCBjaHVua1NpemUgPSBpbmZvLnNvdXJjZUFycmF5U2l6ZTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IEFycmF5Q29uc3RydWN0b3IobWFwcGVkQ29tcHV0ZUluZm9BcnJheUJ1ZmZlciwgY29tcHV0ZUluZm9PZmZTZXQsIGNodW5rU2l6ZSk7IC8vbmV3IEFycmF5Q29uc3RydWN0b3IoY29tcHV0ZUluZm9CdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoY29tcHV0ZUluZm9PZmZTZXQsIGNodW5rQnl0ZVNpemUpKTtcbiAgICAgICAgICAgIGRhdGFWaWV3LnNldChpbmZvLmZsYXRTb3VyY2VBcnJheSk7XG4gICAgICAgICAgICBjb21wdXRlSW5mb09mZlNldCArPSBjaHVua1NpemUgKiBBcnJheUNvbnN0cnVjdG9yLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdlIGFyZSBkb25lIGF0IHRoaXMgcG9pbnQuXG4gICAgICAgIGNvbXB1dGVJbmZvQnVmZmVyLnVubWFwKCk7XG4gICAgICAgIC8vIGNyZWF0ZSBhIGJ1ZmZlciBvbiB0aGUgR1BVIHRvIGhvbGQgc3VwcEluZm9cbiAgICAgICAgLy8gc2FtZSBoZXJlLCB3ZSBuZWVkIHRvIHBhZCB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0IHRvIDE2IGJ5dGVzXG4gICAgICAgIGNvbnN0IHN1cHBJbmZvQnVmZmVyU2l6ZSA9IHN1cHBJbmZvMzJTaXplICogVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7XG4gICAgICAgIGxldCBwYWRkZWRTdXBwSW5mb0J1ZmZlclNpemUgPSBzdXBwSW5mb0J1ZmZlclNpemU7XG4gICAgICAgIGNvbnN0IHN1cHBJbmZvUmVtYWluZGVyID0gc3VwcEluZm9CdWZmZXJTaXplICYgMTU7IC8vIGNoZWNrIGlmIHRoZSBzaXplIGlzIGEgbXVsdGlwbGUgb2YgMTZcbiAgICAgICAgaWYgKHN1cHBJbmZvUmVtYWluZGVyICE9PSAwKVxuICAgICAgICAgICAgcGFkZGVkU3VwcEluZm9CdWZmZXJTaXplICs9IDE2IC0gc3VwcEluZm9SZW1haW5kZXI7IC8vIHBhZCB0aGUgc2l6ZSBhY2NvcmRpbmdseVxuICAgICAgICBwYWRkZWRTdXBwSW5mb0J1ZmZlclNpemUgPSBNYXRoLm1heChwYWRkZWRTdXBwSW5mb0J1ZmZlclNpemUsIDE2KTtcbiAgICAgICAgY29uc3Qgc3VwcEluZm9CdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAnc3VwcCBpbmZvIGJ1ZmZlcicsXG4gICAgICAgICAgICBzaXplOiBwYWRkZWRTdXBwSW5mb0J1ZmZlclNpemUsXG4gICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkMgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNULFxuICAgICAgICAgICAgbWFwcGVkQXRDcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1hcHBlZFN1cHBJbmZvQXJyYXlCdWZmZXIgPSBzdXBwSW5mb0J1ZmZlci5nZXRNYXBwZWRSYW5nZSgpOyAvLyBnZXQgZnVsbCBidWZmZXJcbiAgICAgICAgbGV0IHN1cHBJbmZvT2ZmU2V0ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBpbmZvIG9mIHByb2Nlc3NJbmZvKSB7XG4gICAgICAgICAgICBpZiAoaW5mby5zdXBwSW5mb0J1ZmZlciAmJiBpbmZvLnN1cHBJbmZvQnVmZmVyLmJ5dGVMZW5ndGggPiAwICYmIGluZm8uc3VwcEluZm9TaXplID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IEFycmF5Q29uc3RydWN0b3IgPSBpbmZvLnN1cHBJbmZvVHlwZSA9PT0gXCJVSU5UMzJBUlJBWVwiIC8qIFdHUFVFTlRSWVRZUEUuVUlOVDMyQVJSQVkgKi8gPyBVaW50MzJBcnJheSA6IEZsb2F0MzJBcnJheTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdXBwSW5mb1ZpZXcgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihtYXBwZWRTdXBwSW5mb0FycmF5QnVmZmVyLCBzdXBwSW5mb09mZlNldCwgaW5mby5zdXBwSW5mb0J1ZmZlci5sZW5ndGgpOyAvL25ldyBBcnJheUNvbnN0cnVjdG9yKHN1cHBJbmZvQnVmZmVyLmdldE1hcHBlZFJhbmdlKHN1cHBJbmZvT2ZmU2V0LCBpbmZvLnN1cHBJbmZvQnVmZmVyLmJ5dGVMZW5ndGgpKTtcbiAgICAgICAgICAgICAgICBzdXBwSW5mb1ZpZXcuc2V0KGluZm8uc3VwcEluZm9CdWZmZXIpO1xuICAgICAgICAgICAgICAgIHN1cHBJbmZvT2ZmU2V0ICs9IGluZm8uc3VwcEluZm9CdWZmZXIuYnl0ZUxlbmd0aDsgLy8gaW5mby5zdXBwSW5mb0J1ZmZlci5sZW5ndGggKiBBcnJheUNvbnN0cnVjdG9yLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdXBwSW5mb09mZlNldCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgZHVtbXlWaWV3ID0gbmV3IFVpbnQzMkFycmF5KG1hcHBlZFN1cHBJbmZvQXJyYXlCdWZmZXIsIDAsIDQpOyAvL25ldyBVaW50MzJBcnJheShzdXBwSW5mb0J1ZmZlci5nZXRNYXBwZWRSYW5nZSgwLCAxNikpO1xuICAgICAgICAgICAgZHVtbXlWaWV3LnNldChbMSwgMSwgMSwgMV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1cHBJbmZvQnVmZmVyLnVubWFwKCk7XG4gICAgICAgIGNvbnN0IG91dEtubkFycmF5U2l6ZSA9IGtublNpemUgKiBVaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIGNvbXB1dGF0aW9uc1BlclBhc3M7IC8vIHNpemUgb2YgdGhlIHNsaWNlIG9mIHRoZSBrbm5JbmRleGVzIGFuZCBrbm5EaXN0YW5jZXNcbiAgICAgICAgLy8gY3JlYXRlIGEgYnVmZmVyIG9uIHRoZSBHUFUgdG8gaG9sZCBrbm5JbmRleGVzIGFuZCBrbm5EaXN0YW5jZXNcbiAgICAgICAgY29uc3QgYnVmZmVyRGlzdGFuY2VzID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG4gICAgICAgICAgICBsYWJlbDogJ2J1ZmZlciBkaXN0YW5jZXMnLFxuICAgICAgICAgICAgc2l6ZTogb3V0S25uQXJyYXlTaXplLFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJ1ZmZlckluZGV4ZXMgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAnYnVmZmVyIGluZGV4ZXMnLFxuICAgICAgICAgICAgc2l6ZTogb3V0S25uQXJyYXlTaXplLFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIG5vIG5lZWQgdG8gY29weSBhbnl0aGluZyB0byB0aGUga25uIGJ1ZmZlcnMuXG4gICAgICAgIGNvbnN0IGJ5dGVzUGVyT3V0QXJyYXlSb3cgPSBrbm5TaXplICogVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7IC8vIGhvdyBtYW55IGJ5dGVzIG9uZSByb3cgb2YgdGhlIGtubkRpc3RhbmNlcyBhbmQga25uSW5kZXhlcyB3aWxsIHRha2VcbiAgICAgICAgLy8gU2V0dXAgYSBiaW5kR3JvdXAgdG8gdGVsbCB0aGUgc2hhZGVyIHdoaWNoXG4gICAgICAgIC8vIGJ1ZmZlciB0byB1c2UgZm9yIHRoZSBjb21wdXRhdGlvblxuICAgICAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKHtcbiAgICAgICAgICAgIGxhYmVsOiAnYmluZEdyb3VwIGZvciBrbm4gYnVmZmVyJyxcbiAgICAgICAgICAgIGxheW91dDogcGlwZWxpbmUuZ2V0QmluZEdyb3VwTGF5b3V0KDApLFxuICAgICAgICAgICAgZW50cmllczogW1xuICAgICAgICAgICAgICAgIHsgYmluZGluZzogMCwgcmVzb3VyY2U6IHsgYnVmZmVyOiBidWZmZXJJbmRleGVzIH0gfSxcbiAgICAgICAgICAgICAgICB7IGJpbmRpbmc6IDEsIHJlc291cmNlOiB7IGJ1ZmZlcjogYnVmZmVyRGlzdGFuY2VzIH0gfSxcbiAgICAgICAgICAgICAgICB7IGJpbmRpbmc6IDIsIHJlc291cmNlOiB7IGJ1ZmZlcjogY29tcHV0ZUluZm9CdWZmZXIgfSB9LFxuICAgICAgICAgICAgICAgIHsgYmluZGluZzogMywgcmVzb3VyY2U6IHsgYnVmZmVyOiBzdXBwSW5mb0J1ZmZlciB9IH0sXG4gICAgICAgICAgICAgICAgLy8geyBiaW5kaW5nOiA0LCByZXNvdXJjZTogeyBidWZmZXI6IGFycmF5U2l6ZXNCdWZmZXIgfSB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vY3JlYXRlIGEgYnVmZmVyIG9uIHRoZSBHUFUgdG8gZ2V0IGEgY29weSBvZiB0aGUgcmVzdWx0c1xuICAgICAgICBjb25zdCByZXN1bHRCdWZmZXJEaXN0YW5jZXMgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAncmVzdWx0IGJ1ZmZlciBkaXN0YW5jZXMnLFxuICAgICAgICAgICAgc2l6ZTogYnVmZmVyRGlzdGFuY2VzLnNpemUsXG4gICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUQgfCBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdEJ1ZmZlckluZGV4ZXMgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAncmVzdWx0IGJ1ZmZlciBpbmRleGVzJyxcbiAgICAgICAgICAgIHNpemU6IGJ1ZmZlckluZGV4ZXMuc2l6ZSxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRCB8IEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNULFxuICAgICAgICB9KTtcbiAgICAgICAgZm9yIChsZXQgaXRlciA9IDA7IGl0ZXIgPCBNYXRoLmNlaWwobGlzdFNpemUgLyBjb21wdXRhdGlvbnNQZXJQYXNzKTsgaXRlcisrKSB7XG4gICAgICAgICAgICBzdGFydEF0ID0gaXRlciAqIGNvbXB1dGF0aW9uc1BlclBhc3M7XG4gICAgICAgICAgICBlbmRBdCA9IE1hdGgubWluKChpdGVyICsgMSkgKiBjb21wdXRhdGlvbnNQZXJQYXNzLCBsaXN0U2l6ZSk7XG4gICAgICAgICAgICBjb25zdCBwYWlyQ29tcGFyaXNvblBhc3NlcyA9IE1hdGguY2VpbChsaXN0U2l6ZSAvIHBhaXJDb21wYXJpc29uc1BlclBhc3MpO1xuICAgICAgICAgICAgZm9yIChsZXQgcGFpckl0ZXIgPSAwOyBwYWlySXRlciA8IHBhaXJDb21wYXJpc29uUGFzc2VzOyBwYWlySXRlcisrKSB7XG4gICAgICAgICAgICAgICAgcGFpckNvbXBhcmlzb25TdGFydEF0ID0gcGFpckl0ZXIgKiBwYWlyQ29tcGFyaXNvbnNQZXJQYXNzO1xuICAgICAgICAgICAgICAgIHBhaXJDb21wYXJpc29uRW5kQXQgPSBNYXRoLm1pbigocGFpckl0ZXIgKyAxKSAqIHBhaXJDb21wYXJpc29uc1BlclBhc3MsIGxpc3RTaXplKTtcbiAgICAgICAgICAgICAgICAvLyB3cml0ZSBvbmx5IGZvdXIgdmFsdWVzIHRvIHRoZSBidWZmZXIsIHN0YXJ0QXQsIGVuZEF0LCBwYWlyQ29tcGFyaXNvblN0YXJ0QXQsIHBhaXJDb21wYXJpc29uRW5kQXQsIGNvcnJlc3BvbmRpbmcgdG8gdmVjNDx1MzI+IGF0IHRoZSBzdGFydCBvZiBpbmZvIHN0cnVjdFxuICAgICAgICAgICAgICAgIGRldmljZS5xdWV1ZS53cml0ZUJ1ZmZlcihjb21wdXRlSW5mb0J1ZmZlciwgMCwgbmV3IFVpbnQzMkFycmF5KFtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRBdCxcbiAgICAgICAgICAgICAgICAgICAgZW5kQXQsXG4gICAgICAgICAgICAgICAgICAgIHBhaXJDb21wYXJpc29uU3RhcnRBdCxcbiAgICAgICAgICAgICAgICAgICAgcGFpckNvbXBhcmlzb25FbmRBdCxcbiAgICAgICAgICAgICAgICBdKSk7XG4gICAgICAgICAgICAgICAgLy8gRW5jb2RlIGNvbW1hbmRzIHRvIGRvIHRoZSBjb21wdXRhdGlvblxuICAgICAgICAgICAgICAgIGNvbnN0IGVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2Rpc3RhbmNlIGVuY29kZXInLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhc3MgPSBlbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3Moe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2Rpc3RhbmNlIGNvbXB1dGUgcGFzcycsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcGFzcy5zZXRQaXBlbGluZShwaXBlbGluZSk7XG4gICAgICAgICAgICAgICAgcGFzcy5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTtcbiAgICAgICAgICAgICAgICBwYXNzLmRpc3BhdGNoV29ya2dyb3Vwcyh3b3JrZ3JvdXBzRGltLCBcbiAgICAgICAgICAgICAgICAvL3dvcmtncm91cHNEaW0sXG4gICAgICAgICAgICAgICAgTWF0aC5jZWlsKGNvbXB1dGF0aW9uc1BlclBhc3MgLyB3b3JrZ3JvdXBzRGltIC8gdGhyZWFkc1Blcldvcmtncm91cCkpO1xuICAgICAgICAgICAgICAgIHBhc3MuZW5kKCk7XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UgYXJlIGF0IHRoZSBsYXN0IHBhaXIgY29tcGFyaXNvbiBwYXNzLCB3ZSBuZWVkIHRvIHJlYWQgdGhlIHJlc3VsdHNcbiAgICAgICAgICAgICAgICBpZiAocGFpckl0ZXIgPT09IHBhaXJDb21wYXJpc29uUGFzc2VzIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBFbmNvZGUgYSBjb21tYW5kIHRvIGNvcHkgdGhlIHJlc3VsdHMgdG8gYSBtYXBwYWJsZSBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlckRpc3RhbmNlcywgMCwgcmVzdWx0QnVmZmVyRGlzdGFuY2VzLCAwLCByZXN1bHRCdWZmZXJEaXN0YW5jZXMuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlckluZGV4ZXMsIDAsIHJlc3VsdEJ1ZmZlckluZGV4ZXMsIDAsIHJlc3VsdEJ1ZmZlckluZGV4ZXMuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZpbmlzaCBlbmNvZGluZyBhbmQgc3VibWl0IHRoZSBjb21tYW5kc1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gZW5jb2Rlci5maW5pc2goKTtcbiAgICAgICAgICAgICAgICAgICAgZGV2aWNlLnF1ZXVlLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBSZWFkIHRoZSByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS50aW1lKCdwYXNzIGVuZCcpO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBkZXZpY2UucXVldWUub25TdWJtaXR0ZWRXb3JrRG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLnRpbWVFbmQoJ3Bhc3MgZW5kJyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUudGltZShcInJlYWRcIik7XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc3Qgb2Zmc2V0Qnl0ZXMgPSBzdGFydEF0ICogYnl0ZXNQZXJPdXRBcnJheVJvdztcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zdCBzaXplQnl0ZXMgPSAoZW5kQXQgLSBzdGFydEF0KSAqIGJ5dGVzUGVyT3V0QXJyYXlSb3c7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHJlc3VsdEJ1ZmZlckRpc3RhbmNlcy5tYXBBc3luYyhHUFVNYXBNb2RlLlJFQUQpO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCByZXN1bHRCdWZmZXJJbmRleGVzLm1hcEFzeW5jKEdQVU1hcE1vZGUuUkVBRCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUudGltZUVuZChcInJlYWRcIik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ZXMgPSByZXN1bHRCdWZmZXJJbmRleGVzLmdldE1hcHBlZFJhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlcyA9IHJlc3VsdEJ1ZmZlckRpc3RhbmNlcy5nZXRNYXBwZWRSYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLnRpbWUoXCJkZWNvZGVcIik7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW5kQXQgLSBzdGFydEF0OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gbmV3IFVpbnQzMkFycmF5KGluZGV4ZXMsIGkgKiBieXRlc1Blck91dEFycmF5Um93LCBrbm5TaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gbmV3IEZsb2F0MzJBcnJheShkaXN0YW5jZXMsIGkgKiBieXRlc1Blck91dEFycmF5Um93LCBrbm5TaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEluZGV4ZXNbc3RhcnRBdCArIGldLnNldChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHREaXN0YW5jZXNbc3RhcnRBdCArIGldLnNldChkaXN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0QnVmZmVySW5kZXhlcy51bm1hcCgpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRCdWZmZXJEaXN0YW5jZXMudW5tYXAoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBlbmNvZGVyLmZpbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICBkZXZpY2UucXVldWUuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlYWQgdGhlIHJlc3VsdHNcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS50aW1lKCdwYXNzIGJldHdlZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgZGV2aWNlLnF1ZXVlLm9uU3VibWl0dGVkV29ya0RvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS50aW1lRW5kKCdwYXNzIGJldHdlZW4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZGV2aWNlIG1heSBnZXQgbG9zdCBkdXJpbmcgb3BwZXJhdGlvbiwgc28gaW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgaWYgKGRldmljZUxvc3QpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJ1ZmZlckRpc3RhbmNlcy5kZXN0cm95KCk7XG4gICAgICAgIGJ1ZmZlckluZGV4ZXMuZGVzdHJveSgpO1xuICAgICAgICBjb21wdXRlSW5mb0J1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHN1cHBJbmZvQnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgcmVzdWx0QnVmZmVyRGlzdGFuY2VzLmRlc3Ryb3koKTtcbiAgICAgICAgcmVzdWx0QnVmZmVySW5kZXhlcy5kZXN0cm95KCk7XG4gICAgICAgIGlmIChkZXZpY2VMb3N0KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiB7IGtubkluZGV4ZXM6IHJlc3VsdEluZGV4ZXMsIGtubkRpc3RhbmNlczogcmVzdWx0RGlzdGFuY2VzIH07XG4gICAgfSk7XG59XG5mdW5jdGlvbiBnZXRDb21iaW5lZERpc3RhbmNlU2NyaXB0KGRpc3RhbmNlTWV0cmljcywgbWF4RW50cnlMZW5zLCBrbm5TaXplLCBhZ2dyZWdhdGlvbikge1xuICAgIGNvbnN0IGRpc3RhbmNlV2dzbHMgPSBkaXN0YW5jZU1ldHJpY3MubWFwKChtZXRyaWMsIGkpID0+IHtcbiAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgZm4gZGlzdGFuY2VTY3JpcHQke2l9KGFJbmRleDogdTMyLCBiSW5kZXg6IHUzMikgLT4gZjMyIHtcbiAgICAgICAgICBsZXQgYSA9IGNvbXB1dGVJbmZvLmRhdGEke2l9W2FJbmRleF07XG4gICAgICAgICAgbGV0IGIgPSBjb21wdXRlSW5mby5kYXRhJHtpfVtiSW5kZXhdO1xuICAgICAgICAgIGxldCBtYXhEaXN0YW5jZTogZjMyID0ga25uRGlzdGFuY2VzW2FJbmRleCAtIGNvbXB1dGVJbmZvLnN0YXJ0QXRFbmRBdC54XVske2tublNpemV9IC0gMXVdO1xuICAgICAgICAgICR7d2ViR1BVRnVuY3Rpb25zW21ldHJpY10obWF4RW50cnlMZW5zW2ldLCBpKX1cbiAgICAgICAgfVxuICAgICAgYDtcbiAgICB9KTtcbiAgICBjb25zdCBhbGxEaXN0YW5jZVNjcmlwdHMgPSBkaXN0YW5jZVdnc2xzLmpvaW4oJ1xcbicpO1xuICAgIGNvbnN0IGNvbWJpbmVEaXN0YW5jZXNTY3JpcHQgPSBgXG4gICAgICBmbiBjb21iaW5lZERpc3RhbmNlKGFJbmRleDogdTMyLCBiSW5kZXg6IHUzMikgLT4gZjMyIHtcbiAgICAgICAgdmFyIGRpc3RhbmNlczogYXJyYXk8ZjMyLCAke2Rpc3RhbmNlTWV0cmljcy5sZW5ndGh9PjtcbiAgICAgICAgJHtkaXN0YW5jZU1ldHJpY3MubWFwKChfLCBpKSA9PiBgZGlzdGFuY2VzWyR7aX1dID0gZGlzdGFuY2VTY3JpcHQke2l9KGFJbmRleCwgYkluZGV4KTtgKS5qb2luKCdcXG4nKX1cbiAgICAgICAgJHtXRUJHU0xBR0dSRUdBVElPTkZVTkNUSU9OU1thZ2dyZWdhdGlvbl0oZGlzdGFuY2VNZXRyaWNzLmxlbmd0aCl9XG4gICAgICB9XG4gICAgXG4gICAgYDtcbiAgICByZXR1cm4gYWxsRGlzdGFuY2VTY3JpcHRzICsgJ1xcbicgKyBjb21iaW5lRGlzdGFuY2VzU2NyaXB0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bXVsdGlDb2wtS05OLmpzLm1hcCIsImV4cG9ydCB2YXIgTWF0cml4TWF0cml4T3BUeXBlO1xuKGZ1bmN0aW9uIChNYXRyaXhNYXRyaXhPcFR5cGUpIHtcbiAgICBNYXRyaXhNYXRyaXhPcFR5cGVbXCJBRERcIl0gPSBcIkFERFwiO1xuICAgIE1hdHJpeE1hdHJpeE9wVHlwZVtcIlNVQlwiXSA9IFwiU1VCXCI7XG4gICAgTWF0cml4TWF0cml4T3BUeXBlW1wiTVVMVFwiXSA9IFwiTVVMVFwiO1xufSkoTWF0cml4TWF0cml4T3BUeXBlIHx8IChNYXRyaXhNYXRyaXhPcFR5cGUgPSB7fSkpO1xuZXhwb3J0IHZhciBNYXRyaXhPcFR5cGU7XG4oZnVuY3Rpb24gKE1hdHJpeE9wVHlwZSkge1xuICAgIE1hdHJpeE9wVHlwZVtcIlNRVUFSRVwiXSA9IFwiU1FVQVJFXCI7XG4gICAgTWF0cml4T3BUeXBlW1wiSU5WRVJTRVwiXSA9IFwiSU5WRVJTRVwiO1xuICAgIE1hdHJpeE9wVHlwZVtcIlRSQU5TUE9TRVwiXSA9IFwiVFJBTlNQT1NFXCI7XG4gICAgTWF0cml4T3BUeXBlW1wiTk9STVwiXSA9IFwiTk9STVwiO1xuICAgIE1hdHJpeE9wVHlwZVtcIkNPTFVNTl9OT1JNXCJdID0gXCJDT0xVTU5fTk9STVwiO1xufSkoTWF0cml4T3BUeXBlIHx8IChNYXRyaXhPcFR5cGUgPSB7fSkpO1xuZXhwb3J0IHZhciBNYXRyaXhTY2FsYXJPcFR5cGU7XG4oZnVuY3Rpb24gKE1hdHJpeFNjYWxhck9wVHlwZSkge1xuICAgIE1hdHJpeFNjYWxhck9wVHlwZVtcIlNDQUxBUk1VTFRcIl0gPSBcIlNDQUxBUk1VTFRcIjtcbiAgICBNYXRyaXhTY2FsYXJPcFR5cGVbXCJTQ0FMQVJBRERcIl0gPSBcIlNDQUxBUkFERFwiO1xuICAgIE1hdHJpeFNjYWxhck9wVHlwZVtcIlNDQUxBUlBPV1wiXSA9IFwiU0NBTEFSUE9XXCI7XG59KShNYXRyaXhTY2FsYXJPcFR5cGUgfHwgKE1hdHJpeFNjYWxhck9wVHlwZSA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLCIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5pbXBvcnQgeyBkaXN0YW5jZUZ1bmN0aW9uQ29tcGxleGl0eSwgVHlwZVN1cHBvcnRlZERpc3RhbmNlcywgV0VCR1BVRElTVEFOQ0UgfSBmcm9tICcuLi9tdWx0aS1jb2wtZGlzdGFuY2VzL3dlYkdQVS1tdWx0aWNvbC1kaXN0YW5jZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVVByb2Nlc3NJbmZvKGVudHJ5TGlzdCwgZGlzdGFuY2VNZXRyaWMgPSBXRUJHUFVESVNUQU5DRS5IQU1NSU5HLCBlbnRyeUluZGV4LCAvLyBpbmRleCBvZiB0aGUgZW50cmllcyBpbiB0aGUgbGlzdCBvZiBsaXN0cyB0aGF0IHdlIHdhbnQgdG8gcHJvY2Vzc1xub3B0aW9ucyA9IHsgZ2FwT3BlblBlbmFsdHk6IDEuMCwgZ2FwRXh0ZW5zaW9uUGVuYWx0eTogMC42IH0pIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGxldCBlbnRyeVR5cGUgPSBudWxsO1xuICAgIGNvbnN0IGVuY29kZWRMaXN0ID0gKCgpID0+IHtcbiAgICAgICAgaWYgKGVudHJ5TGlzdC5zb21lKChlKSA9PiB0eXBlb2YgZSA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgICAgICBlbnRyeVR5cGUgPSBcIlNUUklOR1wiIC8qIFdHUFVFTlRSWVRZUEUuU1RSSU5HICovO1xuICAgICAgICAgICAgcmV0dXJuIGVudHJ5TGlzdC5tYXAoKGVudHJ5KSA9PiBuZXcgVWludDMyQXJyYXkoZW50cnkuc3BsaXQoJycpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyeUxpc3Quc29tZSgoZSkgPT4gdHlwZW9mIGUgPT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgZW50cnlUeXBlID0gXCJOVU1CRVJcIiAvKiBXR1BVRU5UUllUWVBFLk5VTUJFUiAqLztcbiAgICAgICAgICAgIHJldHVybiBlbnRyeUxpc3QubWFwKChlbnRyeSkgPT4gbmV3IEZsb2F0MzJBcnJheShbZW50cnldKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeUxpc3RbMF0gPT0gJ29iamVjdCcgJiYgZW50cnlMaXN0LnNvbWUoKGUpID0+ICdfZGF0YScgaW4gZSAmJiAnX2xlbmd0aCcgaW4gZSkpIHtcbiAgICAgICAgICAgIGVudHJ5VHlwZSA9IFwiQklUQVJSQVlcIiAvKiBXR1BVRU5UUllUWVBFLkJJVEFSUkFZICovO1xuICAgICAgICAgICAgcmV0dXJuIGVudHJ5TGlzdC5tYXAoKGVudHJ5KSA9PiBlbnRyeS5fZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJ5TGlzdC5zb21lKChlKSA9PiBlIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSkge1xuICAgICAgICAgICAgZW50cnlUeXBlID0gXCJGTE9BVDMyQVJSQVlcIiAvKiBXR1BVRU5UUllUWVBFLkZMT0FUMzJBUlJBWSAqLztcbiAgICAgICAgICAgIHJldHVybiBlbnRyeUxpc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJ5TGlzdC5zb21lKChlKSA9PiBlIGluc3RhbmNlb2YgVWludDMyQXJyYXkpKSB7XG4gICAgICAgICAgICBlbnRyeVR5cGUgPSBcIlVJTlQzMkFSUkFZXCIgLyogV0dQVUVOVFJZVFlQRS5VSU5UMzJBUlJBWSAqLztcbiAgICAgICAgICAgIHJldHVybiBlbnRyeUxpc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJ5TGlzdC5zb21lKChlKSA9PiBlIGluc3RhbmNlb2YgSW50MzJBcnJheSkpIHtcbiAgICAgICAgICAgIGVudHJ5VHlwZSA9IFwiSU5UMzJBUlJBWVwiIC8qIFdHUFVFTlRSWVRZUEUuSU5UMzJBUlJBWSAqLztcbiAgICAgICAgICAgIHJldHVybiBlbnRyeUxpc3Q7XG4gICAgICAgIH1cbiAgICAgICAgLy9yZXR1cm4gZW50cnlMaXN0IGFzIFVpbnQzMkFycmF5W107XG4gICAgfSkoKTtcbiAgICBpZiAoIWVuY29kZWRMaXN0IHx8ICFlbnRyeVR5cGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbnRyeSB0eXBlLCBjb3VsZCBub3QgZGV0ZXJtaW5lIGVudHJ5IHR5cGUgZnJvbSBpbnB1dCBsaXN0Jyk7XG4gICAgY29uc3QgZW5jb2RlZExpc3RUeXBlID0gZW5jb2RlZExpc3RbMF0gaW5zdGFuY2VvZiBJbnQzMkFycmF5ID8gXCJJTlQzMkFSUkFZXCIgLyogV0dQVUVOVFJZVFlQRS5JTlQzMkFSUkFZICovIDpcbiAgICAgICAgZW5jb2RlZExpc3RbMF0gaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgPyBcIkZMT0FUMzJBUlJBWVwiIC8qIFdHUFVFTlRSWVRZUEUuRkxPQVQzMkFSUkFZICovIDogXCJVSU5UMzJBUlJBWVwiIC8qIFdHUFVFTlRSWVRZUEUuVUlOVDMyQVJSQVkgKi87XG4gICAgLy8gc2l6ZXMgb2YgZWFjaCBlbnRyaWVzIG1pZ2h0IGRpZmZlciwgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoYXQgZm9yIHNvbWUgZGlzdGFuY2UgbWV0cmljcywgbGlrZSBoYW1taW5nIGZvciBleGFtcGxlXG4gICAgY29uc3QgYXJyYXlTaXplcyA9IG5ldyBVaW50MzJBcnJheShlbmNvZGVkTGlzdC5tYXAoKGFycikgPT4gYXJyLmxlbmd0aCkpO1xuICAgIGlmICghVHlwZVN1cHBvcnRlZERpc3RhbmNlc1tlbnRyeVR5cGVdIHx8ICFUeXBlU3VwcG9ydGVkRGlzdGFuY2VzW2VudHJ5VHlwZV0uaGFzKGRpc3RhbmNlTWV0cmljKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXN0YW5jZSBtZXRyaWMgJyR7ZGlzdGFuY2VNZXRyaWN9JyBub3Qgc3VwcG9ydGVkIGZvciBlbnRyeSB0eXBlICcke2VudHJ5VHlwZX0nYCk7XG4gICAgY29uc3QgbWF4RW50cnlMZW4gPSBhcnJheVNpemVzLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5tYXgoYSwgYiksIDApO1xuICAgIC8vIGdldCB0aGUgY29tcGxleGl0eSBvZiB1c2VkIGFsZ29yaXRobVxuICAgIGNvbnN0IGNvbXBsZXhpdHkgPSBkaXN0YW5jZUZ1bmN0aW9uQ29tcGxleGl0eVtkaXN0YW5jZU1ldHJpY10obWF4RW50cnlMZW4pO1xuICAgIGNvbnN0IEVuY29kZWRBcnJheUNvbnN0cnVjdG9yID0gZW5jb2RlZExpc3RUeXBlID09PSBcIklOVDMyQVJSQVlcIiAvKiBXR1BVRU5UUllUWVBFLklOVDMyQVJSQVkgKi8gPyBJbnQzMkFycmF5IDpcbiAgICAgICAgKGVuY29kZWRMaXN0VHlwZSA9PT0gXCJGTE9BVDMyQVJSQVlcIiAvKiBXR1BVRU5UUllUWVBFLkZMT0FUMzJBUlJBWSAqLyA/IEZsb2F0MzJBcnJheSA6IFVpbnQzMkFycmF5KTtcbiAgICBjb25zdCBmbGF0U291cmNlQXJyYXkgPSBuZXcgRW5jb2RlZEFycmF5Q29uc3RydWN0b3IoZW5jb2RlZExpc3QubGVuZ3RoICogbWF4RW50cnlMZW4pO1xuICAgIC8vIHdoZW4gc2V0dGluZywgd2UgbmVlZCB0byBzZXQgZWFjaCBhcnJheSBhdCBhIHNwZWNpZmljIG9mZnNldCwgd2hpY2ggaXMgY29udHJvbGxlZCBieSBtYXhBcnJheUxlbiBiZWNhdXNlIGVhY2ggYXJyYXkgbWlnaHQgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMuXG4gICAgLy8gdGhpcyB3YXkgd2Ugd2lsbCBnZXQgY29ycmVjdCBtYXRyaXggcmVwcmVzZW50YXRpb24gaW4gdGhlIGNvbXB1dGUgc2hhZGVyXG4gICAgZW5jb2RlZExpc3QuZm9yRWFjaCgoc2VxLCBpKSA9PiB7XG4gICAgICAgIGZsYXRTb3VyY2VBcnJheS5zZXQoc2VxLCBpICogbWF4RW50cnlMZW4pO1xuICAgIH0pO1xuICAgIC8vIE5CISBhbGwgdGhpcyBiZWZvcmUgdGhlIGxpbmUgd2FzIGdlbmVyaWMsIG5vdyB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBzb21lIHNwZWNpZmljIHRoaW5ncyBmb3Igc29tZSBzcGVjaWZpYyBkaXN0YW5jZSBtZXRyaWNzXG4gICAgLy8gaW5pdGlhbGl6ZSBzdXBwIGluZm8gbGluZSB0aGF0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHNoYWRlcjtcbiAgICBsZXQgc3VwcEluZm9TdHJ1Y3RXZ3NsID0gJyc7IC8vIHRoZSBjb2RlIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc3RydWN0IG9mIHN1cHBJbmZvXG4gICAgbGV0IHN1cHBJbmZvU2l6ZSA9IDA7XG4gICAgbGV0IHN1cHBJbmZvVHlwZSA9IFwiRkxPQVQzMkFSUkFZXCIgLyogV0dQVUVOVFJZVFlQRS5GTE9BVDMyQVJSQVkgKi87XG4gICAgbGV0IHN1cHBJbmZvQnVmZmVyID0gbnVsbDtcbiAgICBpZiAoZGlzdGFuY2VNZXRyaWMgPT09IFdFQkdQVURJU1RBTkNFLk5FRURMRU1BTl9XVU5TQ0ggfHwgZGlzdGFuY2VNZXRyaWMgPT09IFdFQkdQVURJU1RBTkNFLk1PTk9NRVJfQ0hFTUlDQUxfRElTVEFOQ0UpIHtcbiAgICAgICAgbGV0IG1heE1vbm9tZXJJbmRleCA9IG9wdGlvbnMuc2NvcmluZ01hdHJpeCAmJiBvcHRpb25zLmFscGhhYmV0SW5kZXhlcyA/XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25zLmFscGhhYmV0SW5kZXhlcykucmVkdWNlKChwcmV2LCBuKSA9PiBNYXRoLm1heChwcmV2LCBuLmNoYXJDb2RlQXQoMCkpLCAwKSA6IC0xO1xuICAgICAgICAvLyBnZW5lcmF0ZSBkZWZhdWx0IHNpbWlsYXJpdHkgbWF0cml4IGlmIGl0IGlzIG5vdCBwcm92aWRlZFxuICAgICAgICBpZiAoIW9wdGlvbnMuYWxwaGFiZXRJbmRleGVzIHx8ICFvcHRpb25zLnNjb3JpbmdNYXRyaXgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmxhdFNvdXJjZUFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZsYXRTb3VyY2VBcnJheVtpXSA+IG1heE1vbm9tZXJJbmRleClcbiAgICAgICAgICAgICAgICAgICAgbWF4TW9ub21lckluZGV4ID0gZmxhdFNvdXJjZUFycmF5W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9ucy5zY29yaW5nTWF0cml4ID1cbiAgICAgICAgICAgICAgICBuZXcgQXJyYXkobWF4TW9ub21lckluZGV4ICsgMSkuZmlsbChudWxsKS5tYXAoKCkgPT4gbmV3IEFycmF5KG1heE1vbm9tZXJJbmRleCArIDEpLmZpbGwoMCkpO1xuICAgICAgICAgICAgb3B0aW9ucy5hbHBoYWJldEluZGV4ZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5zY29yaW5nTWF0cml4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zY29yaW5nTWF0cml4W2ldW2ldID0gMTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmFscGhhYmV0SW5kZXhlc1tTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2ltaWxhcml0eU1hdHJpeFNpemUgPSAobWF4TW9ub21lckluZGV4ICsgMSkgKiAobWF4TW9ub21lckluZGV4ICsgMSk7XG4gICAgICAgIGNvbnN0IHRyYW5zZmVyZWRTaW1pbGFyaXR5TWF0cml4ID0gbmV3IEFycmF5KG1heE1vbm9tZXJJbmRleCArIDEpLmZpbGwobnVsbCkubWFwKCgpID0+IG5ldyBGbG9hdDMyQXJyYXkobWF4TW9ub21lckluZGV4ICsgMSkpO1xuICAgICAgICAvLyBzZXQgZGlhZ29uYWwgdG8gMVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heE1vbm9tZXJJbmRleCArIDE7IGkrKylcbiAgICAgICAgICAgIHRyYW5zZmVyZWRTaW1pbGFyaXR5TWF0cml4W2ldW2ldID0gMTtcbiAgICAgICAgY29uc3QgYWxwaGFiZXRJbmRleGVzID0gb3B0aW9ucy5hbHBoYWJldEluZGV4ZXM7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGFscGhhYmV0SW5kZXhlcykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBPYmplY3Qua2V5cyhhbHBoYWJldEluZGV4ZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0ga2V5MilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgdHJhbnNmZXJlZFNpbWlsYXJpdHlNYXRyaXhba2V5LmNoYXJDb2RlQXQoMCldW2tleTIuY2hhckNvZGVBdCgwKV0gPVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnNjb3JpbmdNYXRyaXhbYWxwaGFiZXRJbmRleGVzW2tleV1dW2FscGhhYmV0SW5kZXhlc1trZXkyXV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaW4gbWVtb3J5IGxheW91dCwgd2Ugd2lsbCBoYXZlIDIgZmxvYXQzMiBzIGZvciBnYXBPcGVuIGFuZCBnYXBFeHRlbnNpb24gcGVuYWx0aWVzLCBhbmQgdGhlbiBmMzIgYXJyYXk8YXJyYXk8ZjMyPj4gZm9yIHNpbWlsYXJpdHkgbWF0cml4LlxuICAgICAgICAvLyBiZWNhdXNlIG9mIHByaW1pdGl2ZXMsIHRoZXJlIHdpbGwgYmUgbm8gcGFkZGluZywgc28gd2UgY2FuIGNhbGN1bGF0ZSB0aGUgc2l6ZSBkaXJlY3RseVxuICAgICAgICBzdXBwSW5mb1NpemUgPSAyICsgc2ltaWxhcml0eU1hdHJpeFNpemU7XG4gICAgICAgIHN1cHBJbmZvVHlwZSA9IFwiRkxPQVQzMkFSUkFZXCIgLyogV0dQVUVOVFJZVFlQRS5GTE9BVDMyQVJSQVkgKi87XG4gICAgICAgIHN1cHBJbmZvQnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShzdXBwSW5mb1NpemUpO1xuICAgICAgICBzdXBwSW5mb0J1ZmZlclswXSA9IChfYSA9IG9wdGlvbnMuZ2FwT3BlblBlbmFsdHkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDEuMDtcbiAgICAgICAgc3VwcEluZm9CdWZmZXJbMV0gPSAoX2IgPSBvcHRpb25zLmdhcEV4dGVuc2lvblBlbmFsdHkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDAuNjtcbiAgICAgICAgbGV0IG9mZnNldCA9IDI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJhbnNmZXJlZFNpbWlsYXJpdHlNYXRyaXgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHN1cHBJbmZvQnVmZmVyLnNldCh0cmFuc2ZlcmVkU2ltaWxhcml0eU1hdHJpeFtpXSwgb2Zmc2V0KTtcbiAgICAgICAgICAgIG9mZnNldCArPSB0cmFuc2ZlcmVkU2ltaWxhcml0eU1hdHJpeFtpXS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgc3VwcEluZm9TdHJ1Y3RXZ3NsID0gYFxuICAgICAgICAgICAgZ2FwT3BlblBlbmFsdHkke2VudHJ5SW5kZXh9OiBmMzIsXG4gICAgICAgICAgICBnYXBFeHRlbnNpb25QZW5hbHR5JHtlbnRyeUluZGV4fTogZjMyLFxuICAgICAgICAgICAgc2ltaWxhcml0eU1hdHJpeCR7ZW50cnlJbmRleH06IGFycmF5PGFycmF5PGYzMiwgJHttYXhNb25vbWVySW5kZXggKyAxfT4sICR7bWF4TW9ub21lckluZGV4ICsgMX0+YDtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGlzdGFuY2VNZXRyaWMgPT09IFdFQkdQVURJU1RBTkNFLkRpZmZlcmVuY2UpIHtcbiAgICAgICAgLy8gZm9yIGRpZmZlcmVuY2UsIHdlIG5lZWQgcmFuZ2Ugb2YgdmFsdWVzIGZvciBub3JtYWxpemF0aW9uIG9mIHRoZSBkaWZmZXJlbmNlXG4gICAgICAgIGlmICghb3B0aW9ucy5yYW5nZSB8fCB0eXBlb2Ygb3B0aW9ucy5yYW5nZSAhPT0gJ251bWJlcicgfHwgb3B0aW9ucy5yYW5nZSA8PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBtaW4gPSBmbGF0U291cmNlQXJyYXkucmVkdWNlKChhLCBiKSA9PiBNYXRoLm1pbihhLCBiKSwgZmxhdFNvdXJjZUFycmF5WzBdKTtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IGZsYXRTb3VyY2VBcnJheS5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWF4KGEsIGIpLCBmbGF0U291cmNlQXJyYXlbMF0pO1xuICAgICAgICAgICAgb3B0aW9ucy5yYW5nZSA9IG1heCAtIG1pbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5yYW5nZSA8PSAwKVxuICAgICAgICAgICAgb3B0aW9ucy5yYW5nZSA9IDEuMDsgLy8gdGhpcyBtZWFucyB0aGF0IGFsbCB2YWx1ZXMgYXJlIHRoZSBzYW1lLCBhbmQgYWxsIGRpc3RhbmNlcyB3aWxsIHByb2R1Y2UgMC5cbiAgICAgICAgc3VwcEluZm9TaXplID0gMTtcbiAgICAgICAgc3VwcEluZm9UeXBlID0gXCJGTE9BVDMyQVJSQVlcIiAvKiBXR1BVRU5UUllUWVBFLkZMT0FUMzJBUlJBWSAqLztcbiAgICAgICAgc3VwcEluZm9CdWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KFtvcHRpb25zLnJhbmdlXSk7XG4gICAgICAgIHN1cHBJbmZvU3RydWN0V2dzbCA9IGBcbiAgICAgICAgICAgIHJhbmdlJHtlbnRyeUluZGV4fTogZjMyYDtcbiAgICB9XG4gICAgY29uc3QgZGF0YVR5cGVXR1NMID0gZmxhdFNvdXJjZUFycmF5IGluc3RhbmNlb2YgSW50MzJBcnJheSA/ICdpMzInIDogKGZsYXRTb3VyY2VBcnJheSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSA/ICdmMzInIDogJ3UzMicpO1xuICAgIGNvbnN0IGRhdGFTdHJ1Y3RXZ3NsID0gYGRhdGEke2VudHJ5SW5kZXh9OiBhcnJheTxhcnJheTwke2RhdGFUeXBlV0dTTH0sICR7bWF4RW50cnlMZW59PiwgJHtlbmNvZGVkTGlzdC5sZW5ndGh9PmA7XG4gICAgLy8gZm9yIG5vdywgb3RoZXIgZGlzdGFuY2VzIGRvIG5vdCByZXF1aXJlIGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBzbyB3ZSBjYW4gc2tpcCB0aGF0XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmxhdFNvdXJjZUFycmF5LFxuICAgICAgICBzb3VyY2VBcnJheVNpemU6IGZsYXRTb3VyY2VBcnJheS5sZW5ndGgsXG4gICAgICAgIG1heEVudHJ5TGVuLFxuICAgICAgICBhcnJheVNpemVzLFxuICAgICAgICBjb21wbGV4aXR5LFxuICAgICAgICBzdXBwSW5mb0J1ZmZlcixcbiAgICAgICAgc3VwcEluZm9TaXplLFxuICAgICAgICBzdXBwSW5mb1R5cGU6IHN1cHBJbmZvVHlwZSxcbiAgICAgICAgc3VwcEluZm9TdHJ1Y3RXZ3NsLFxuICAgICAgICBlbnRyeVR5cGUsXG4gICAgICAgIGRhdGFUeXBlV0dTTCxcbiAgICAgICAgZGF0YVN0cnVjdFdnc2wsXG4gICAgICAgIEVuY29kZWRBcnJheUNvbnN0cnVjdG9yXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdlYkdQVS1wcm9jZXNzLWluZm8uanMubWFwIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBnZXRHUFVEZXZpY2UgfSBmcm9tICcuLi9nZXRHUFVEZXZpY2UnO1xuaW1wb3J0IHsga25uTWF0cml4T3BJbmZvV0dTTCB9IGZyb20gJy4vd2dzbC9rbm4tc3BhcnNlLWluZm8ud2dzbCc7XG4vKipcbiAqIHRoaXMgd2lsbCBnZXQgYWxsIHRoZSBpbmZvIG5lZWRlZCBmb3Igc3Vic2VxdWVudCBvcGVyYXRpb24gaW4gdW1hcFxuICogbGlrZSBzaXplcyBvZiBlYWNoIGFycmF5IG9mIHRyYW5zcG9zZWQga25uIGFuZCBzaXplcyBvZiB1bmlvbiBvZiBrbm4gYW5kIGl0cyB0cmFuc3Bvc2Ugcm93cy5cbiAqIGFmdGVyIHRoaXMgcG9pbnQsIGFsbCBrbm4gc3RydWN0dXJlcyB3aWxsIGJlIGluIHNpbmdsZSBhcnJheSBmb3JtLCB3aXRoIGNvcnJlc3BvbmRpbmcgb2Zmc2V0cy5cbiAqIEBwYXJhbSBrbm5JbmRleGVzXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0S25uU3BhcnNlT3BJbmZvKGtubkluZGV4ZXMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCB0aHJlYWRzUGVyV29ya2dyb3VwRGltID0gMTA7XG4gICAgICAgIGNvbnN0IHRocmVhZHNQZXJXb3JrZ3JvdXAgPSB0aHJlYWRzUGVyV29ya2dyb3VwRGltICogdGhyZWFkc1Blcldvcmtncm91cERpbTtcbiAgICAgICAgY29uc3QgbnVtT2ZFbnRyaWVzID0ga25uSW5kZXhlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkV29ya2dyb3VwcyA9IE1hdGguY2VpbChudW1PZkVudHJpZXMgLyB0aHJlYWRzUGVyV29ya2dyb3VwKTtcbiAgICAgICAgY29uc3QgbnVtT2ZXb3JrZ3JvdXBzUGVyRGltID0gTWF0aC5jZWlsKE1hdGguc3FydChyZXF1aXJlZFdvcmtncm91cHMpKTtcbiAgICAgICAgY29uc3Qga25uU2l6ZSA9IGtubkluZGV4ZXNbMF0ubGVuZ3RoO1xuICAgICAgICBjb25zdCBwcm9jZXNzV2dzbCA9IGtubk1hdHJpeE9wSW5mb1dHU0wodGhyZWFkc1Blcldvcmtncm91cERpbSwgdGhyZWFkc1Blcldvcmtncm91cERpbSAqIG51bU9mV29ya2dyb3Vwc1BlckRpbSwgbnVtT2ZFbnRyaWVzLCBrbm5TaXplKTtcbiAgICAgICAgY29uc3QgaW5kZXhlc0J1ZmZlcjMyU2l6ZSA9IG51bU9mRW50cmllcyAqIGtubkluZGV4ZXNbMF0ubGVuZ3RoO1xuICAgICAgICBjb25zdCBkZXZpY2UgPSB5aWVsZCBnZXRHUFVEZXZpY2UoKTtcbiAgICAgICAgaWYgKGRldmljZSA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtcbiAgICAgICAgICAgIGxhYmVsOiAndHJhbnNwb3NlZFNpemVzQ2FsdWxhdGlvbicsXG4gICAgICAgICAgICBjb2RlOiBwcm9jZXNzV2dzbFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKHtcbiAgICAgICAgICAgIGxhYmVsOiAndHJhbnNwb3NlZFNpemVzUGlwZWxpbmUnLFxuICAgICAgICAgICAgbGF5b3V0OiAnYXV0bycsXG4gICAgICAgICAgICBjb21wdXRlOiB7XG4gICAgICAgICAgICAgICAgbW9kdWxlLFxuICAgICAgICAgICAgICAgIGVudHJ5UG9pbnQ6ICdjb3VudFRyYW5zcG9zZWRDb2xzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpbmRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xuICAgICAgICAgICAgbGFiZWw6ICdpbmRleGVzIGJ1ZmZlcicsXG4gICAgICAgICAgICBzaXplOiBpbmRleGVzQnVmZmVyMzJTaXplICogNCxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QsXG4gICAgICAgICAgICBtYXBwZWRBdENyZWF0aW9uOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbWFwcGVkSW5kZXhlc0J1ZmZlciA9IGluZGV4QnVmZmVyLmdldE1hcHBlZFJhbmdlKCk7XG4gICAgICAgIGNvbnN0IG1hcHBlZEluZGV4ZXNBcnJheSA9IG5ldyBJbnQzMkFycmF5KG1hcHBlZEluZGV4ZXNCdWZmZXIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtubkluZGV4ZXMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBtYXBwZWRJbmRleGVzQXJyYXkuc2V0KGtubkluZGV4ZXNbaV0sIGkgKiBrbm5JbmRleGVzW2ldLmxlbmd0aCk7XG4gICAgICAgIGluZGV4QnVmZmVyLnVubWFwKCk7XG4gICAgICAgIGNvbnN0IHNpemVzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG4gICAgICAgICAgICBsYWJlbDogJ3RyYW5zcG9zZSBzaXplcyBidWZmZXInLFxuICAgICAgICAgICAgc2l6ZToga25uSW5kZXhlcy5sZW5ndGggKiA0LFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfU1JDIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHVuaW9uU2l6ZXNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAndW5pb24gc2l6ZXMgYnVmZmVyJyxcbiAgICAgICAgICAgIHNpemU6IGtubkluZGV4ZXMubGVuZ3RoICogNCxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QsXG4gICAgICAgICAgICBtYXBwZWRBdENyZWF0aW9uOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbWFwcGVkVW5pb25TaXplc0J1ZmZlciA9IHVuaW9uU2l6ZXNCdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKTtcbiAgICAgICAgY29uc3QgbWFwcGVkVW5pb25TaXplc0FycmF5ID0gbmV3IFVpbnQzMkFycmF5KG1hcHBlZFVuaW9uU2l6ZXNCdWZmZXIpO1xuICAgICAgICBtYXBwZWRVbmlvblNpemVzQXJyYXkuZmlsbChrbm5TaXplKTtcbiAgICAgICAgdW5pb25TaXplc0J1ZmZlci51bm1hcCgpO1xuICAgICAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKHtcbiAgICAgICAgICAgIGxhYmVsOiAnYmluZEdyb3VwIGZvciBjb3VudCBvcHMnLFxuICAgICAgICAgICAgbGF5b3V0OiBwaXBlbGluZS5nZXRCaW5kR3JvdXBMYXlvdXQoMCksXG4gICAgICAgICAgICBlbnRyaWVzOiBbXG4gICAgICAgICAgICAgICAgeyBiaW5kaW5nOiAwLCByZXNvdXJjZTogeyBidWZmZXI6IGluZGV4QnVmZmVyIH0gfSxcbiAgICAgICAgICAgICAgICB7IGJpbmRpbmc6IDEsIHJlc291cmNlOiB7IGJ1ZmZlcjogc2l6ZXNCdWZmZXIgfSB9LFxuICAgICAgICAgICAgICAgIHsgYmluZGluZzogMiwgcmVzb3VyY2U6IHsgYnVmZmVyOiB1bmlvblNpemVzQnVmZmVyIH0gfVxuICAgICAgICAgICAgICAgIC8vIHsgYmluZGluZzogNCwgcmVzb3VyY2U6IHsgYnVmZmVyOiBhcnJheVNpemVzQnVmZmVyIH0gfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAnbWF0cml4IG9wcyBlbmNvZGVyJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhc3MgPSBlbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3Moe1xuICAgICAgICAgICAgbGFiZWw6ICdtYXRyaXggb3BzIGNvbXB1dGUgcGFzcycsXG4gICAgICAgIH0pO1xuICAgICAgICBwYXNzLnNldFBpcGVsaW5lKHBpcGVsaW5lKTtcbiAgICAgICAgcGFzcy5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTtcbiAgICAgICAgcGFzcy5kaXNwYXRjaFdvcmtncm91cHMobnVtT2ZXb3JrZ3JvdXBzUGVyRGltLCBudW1PZldvcmtncm91cHNQZXJEaW0pO1xuICAgICAgICBwYXNzLmVuZCgpO1xuICAgICAgICBjb25zdCByZXN1bHRUcmFuc3Bvc2VTaXplc0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xuICAgICAgICAgICAgbGFiZWw6ICdyZXN1bHQgdHJhbnNwb3NlIHNpemVzJyxcbiAgICAgICAgICAgIHNpemU6IHNpemVzQnVmZmVyLnNpemUsXG4gICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUQgfCBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdFVuaW9uU2l6ZXNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAncmVzdWx0IHVuaW9uIHNpemVzJyxcbiAgICAgICAgICAgIHNpemU6IHVuaW9uU2l6ZXNCdWZmZXIuc2l6ZSxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRCB8IEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNULFxuICAgICAgICB9KTtcbiAgICAgICAgZW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoc2l6ZXNCdWZmZXIsIDAsIHJlc3VsdFRyYW5zcG9zZVNpemVzQnVmZmVyLCAwLCByZXN1bHRUcmFuc3Bvc2VTaXplc0J1ZmZlci5zaXplKTtcbiAgICAgICAgZW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIodW5pb25TaXplc0J1ZmZlciwgMCwgcmVzdWx0VW5pb25TaXplc0J1ZmZlciwgMCwgcmVzdWx0VW5pb25TaXplc0J1ZmZlci5zaXplKTtcbiAgICAgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGVuY29kZXIuZmluaXNoKCk7XG4gICAgICAgIGRldmljZS5xdWV1ZS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTtcbiAgICAgICAgeWllbGQgZGV2aWNlLnF1ZXVlLm9uU3VibWl0dGVkV29ya0RvbmUoKTtcbiAgICAgICAgeWllbGQgcmVzdWx0VHJhbnNwb3NlU2l6ZXNCdWZmZXIubWFwQXN5bmMoR1BVTWFwTW9kZS5SRUFEKTtcbiAgICAgICAgeWllbGQgcmVzdWx0VW5pb25TaXplc0J1ZmZlci5tYXBBc3luYyhHUFVNYXBNb2RlLlJFQUQpO1xuICAgICAgICBjb25zdCByZXN1bHRUcmFuc3Bvc2VTaXplc0FycmF5QnVmZmVyID0gcmVzdWx0VHJhbnNwb3NlU2l6ZXNCdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0VW5pb25TaXplc0FycmF5QnVmZmVyID0gcmVzdWx0VW5pb25TaXplc0J1ZmZlci5nZXRNYXBwZWRSYW5nZSgpO1xuICAgICAgICBjb25zdCByZXN1bHRUcmFuc3Bvc2VTaXplc0FycmF5ID0gbmV3IFVpbnQzMkFycmF5KGtubkluZGV4ZXMubGVuZ3RoKTtcbiAgICAgICAgcmVzdWx0VHJhbnNwb3NlU2l6ZXNBcnJheS5zZXQobmV3IFVpbnQzMkFycmF5KHJlc3VsdFRyYW5zcG9zZVNpemVzQXJyYXlCdWZmZXIsIDAsIGtubkluZGV4ZXMubGVuZ3RoKSk7XG4gICAgICAgIHJlc3VsdFRyYW5zcG9zZVNpemVzQnVmZmVyLnVubWFwKCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdFVuaW9uU2l6ZXNBcnJheSA9IG5ldyBVaW50MzJBcnJheShrbm5JbmRleGVzLmxlbmd0aCk7XG4gICAgICAgIHJlc3VsdFVuaW9uU2l6ZXNBcnJheS5zZXQobmV3IFVpbnQzMkFycmF5KHJlc3VsdFVuaW9uU2l6ZXNBcnJheUJ1ZmZlciwgMCwga25uSW5kZXhlcy5sZW5ndGgpKTtcbiAgICAgICAgcmVzdWx0VW5pb25TaXplc0J1ZmZlci51bm1hcCgpO1xuICAgICAgICBjb25zdCB1bmlvbk1hdHJpeFNpemUgPSByZXN1bHRVbmlvblNpemVzQXJyYXkucmVkdWNlKChvbGQsIHZhbCkgPT4gb2xkICsgdmFsLCAwKTtcbiAgICAgICAgcmVzdWx0VW5pb25TaXplc0J1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHJlc3VsdFRyYW5zcG9zZVNpemVzQnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgc2l6ZXNCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICBpbmRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHVuaW9uU2l6ZXNCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICAvLyBzaXplcyBvZiBlYWNoIHRyYW5zcG9zZWQga25uIHJvdywgc2l6ZXMgb2YgZWFjaCB1bmlvbiBvZiBrbm4gYW5kIGl0cyB0cmFuc3Bvc2Ugcm93LCB0b3RhbCBzaXplIG9mIHVuaW9uIG1hdHJpeFxuICAgICAgICByZXR1cm4geyByZXN1bHRUcmFuc3Bvc2VTaXplc0FycmF5LCByZXN1bHRVbmlvblNpemVzQXJyYXksIHVuaW9uTWF0cml4U2l6ZSB9O1xuICAgICAgICAvL2NvdW50ZVRyYW5zcG9zZWRDb2xzXG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1rbm4tc3BhcnNlLWluZm8uanMubWFwIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBnZXRHUFVEZXZpY2UgfSBmcm9tICcuLi9nZXRHUFVEZXZpY2UnO1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuLyoqXG4gKiB3Z3NsIGNvZGUgZm9yIHBhaXJ3aXNlIG9wZXJhdGlvbiBvbiB0d28gc3BhcnNlIG1hdHJpY2VzLlxuICogQHBhcmFtIGluZGV4ZXMxIC0gaW5kZXhlcyBvZiBmaXJzdCBzcGFyc2UgbWF0cml4XG4gKiBAcGFyYW0gZGlzdGFuY2VzMSAtIHZhbHVlczEgb2YgZmlyc3Qgc3BhcnNlIG1hdHJpeFxuICogQHBhcmFtIG9mZnNldHMxIC0gMzIgYml0IG9mZnNldHMgb2YgZmlyc3Qgc3BhcnNlIG1hdHJpeFxuICogQHBhcmFtIGluZGV4ZXMyIC0gaW5kZXhlcyBvZiBzZWNvbmQgc3BhcnNlIG1hdHJpeFxuICogQHBhcmFtIGRpc3RhbmNlczIgLSB2YWx1ZXMgb2Ygc2Vjb25kIHNwYXJzZSBtYXRyaXhcbiAqIEBwYXJhbSBvZmZzZXRzMiAtIDMyIGJpdCBvZmZzZXRzIG9mIHNlY29uZCBzcGFyc2UgbWF0cml4XG4gKiBAcGFyYW0gbnVtT2ZFbnRyaWVzIC0gbnVtYmVyIG9mIGVudHJpZXMgaW4gb3JpZ2luYWwgZGF0YVxuICogQHBhcmFtIHVuaW9uTWF0cml4T2Zmc2V0cyAtIG9mZnNldHMgb2YgdW5pb24gbWF0cml4LCB1c2VkIHRvIHN0b3JlIHJlc3VsdFxuICogQHBhcmFtIG9wIC0gb3BlcmF0aW9uIHRvIHBlcmZvcm1cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYWlyd2lzZU9wU3BhcnNlKGluZGV4ZXMxLCBkaXN0YW5jZXMxLCBvZmZzZXRzMSwgaW5kZXhlczIsIGRpc3RhbmNlczIsIG9mZnNldHMyLCBudW1PZkVudHJpZXMsIHVuaW9uTWF0cml4T2Zmc2V0cywgLy8gYXJyYXkgb2Ygc2l6ZSBudW1PZkVudHJpZXMgKyAxXG5vcCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgb25seSBtZWFudCBmb3IgcmVndWxhciBrbm4gbWF0cml4LCBub3QgZm9yIHNwYXJzZSBtYXRyaXggZm9yIG9mIGtubi5cbiAgICAgICAgY29uc3QgdGhyZWFkc1Blcldvcmtncm91cERpbSA9IDEwO1xuICAgICAgICBjb25zdCB0aHJlYWRzUGVyV29ya2dyb3VwID0gdGhyZWFkc1Blcldvcmtncm91cERpbSAqIHRocmVhZHNQZXJXb3JrZ3JvdXBEaW07XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkV29ya2dyb3VwcyA9IE1hdGguY2VpbChudW1PZkVudHJpZXMgLyB0aHJlYWRzUGVyV29ya2dyb3VwKTtcbiAgICAgICAgY29uc3QgbnVtT2ZXb3JrZ3JvdXBzUGVyRGltID0gTWF0aC5jZWlsKE1hdGguc3FydChyZXF1aXJlZFdvcmtncm91cHMpKTtcbiAgICAgICAgY29uc3QgdGhyZWFkc1BlcllEaW1lbnNpb24gPSB0aHJlYWRzUGVyV29ya2dyb3VwRGltICogbnVtT2ZXb3JrZ3JvdXBzUGVyRGltO1xuICAgICAgICBjb25zdCBzcGFyc2VTaXplMSA9IG9mZnNldHMxW29mZnNldHMxLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBzcGFyc2VTaXplMiA9IG9mZnNldHMyW29mZnNldHMyLmxlbmd0aCAtIDFdO1xuICAgICAgICAvLyB0aGlzIGFycmF5IHdpbGwgaGF2ZSBvZmZzZXRzIG9mIGVhY2ggcm93IGluIHVuaW9uIG1hdHJpeCB3aXRoIGxlbmd0aCBvZiBudW1PZkVudHJpZXMgKyAxXG4gICAgICAgIGNvbnN0IHVuaW9uTWF0cml4U2l6ZSA9IHVuaW9uTWF0cml4T2Zmc2V0c1t1bmlvbk1hdHJpeE9mZnNldHMubGVuZ3RoIC0gMV07IC8vIGxhc3QgaW5kZXggd2lsbCBiZSBsYXN0IG9mZnNldCBpLmUuIGZ1bGwgc2l6ZVxuICAgICAgICBjb25zdCBwcm9jZXNzV2dzbCA9IGBcbiAgICAgICAgc3RydWN0IFNwYXJzZUtOTlN0b3JhZ2UxIHtcbiAgICAgICAgICAgIGluZGV4ZXM6YXJyYXk8aTMyLCAke3NwYXJzZVNpemUxfT4sXG4gICAgICAgICAgICBrbm5EaXN0YW5jZXM6IGFycmF5PGYzMiwgJHtzcGFyc2VTaXplMX0+LFxuICAgICAgICAgICAgb2Zmc2V0czogYXJyYXk8dTMyLCAke251bU9mRW50cmllcyArIDF9PlxuICAgICAgICB9XG5cbiAgICAgICAgc3RydWN0IFNwYXJzZUtOTlN0b3JhZ2UyIHtcbiAgICAgICAgICAgIGluZGV4ZXM6YXJyYXk8aTMyLCAke3NwYXJzZVNpemUyfT4sXG4gICAgICAgICAgICBrbm5EaXN0YW5jZXM6IGFycmF5PGYzMiwgJHtzcGFyc2VTaXplMn0+LFxuICAgICAgICAgICAgb2Zmc2V0czogYXJyYXk8dTMyLCAke251bU9mRW50cmllcyArIDF9PlxuICAgICAgICB9XG5cbiAgICAgICAgc3RydWN0IFJlc0tubiB7XG4gICAgICAgICAgICBrbm5JbmRleGVzOiBhcnJheTxpMzIsICR7dW5pb25NYXRyaXhTaXplfT4sXG4gICAgICAgICAgICBrbm5EaXN0YW5jZXM6IGFycmF5PGYzMiwgJHt1bmlvbk1hdHJpeFNpemV9PlxuICAgICAgICB9XG5cbiAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKDApIHZhcjxzdG9yYWdlLCByZWFkX3dyaXRlPiBzb3VyY2UxOiBTcGFyc2VLTk5TdG9yYWdlMTtcbiAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKDEpIHZhcjxzdG9yYWdlLCByZWFkX3dyaXRlPiBzb3VyY2UyOiBTcGFyc2VLTk5TdG9yYWdlMjtcbiAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKDIpIHZhcjxzdG9yYWdlLCByZWFkX3dyaXRlPiByZXN1bHQ6IFJlc0tubjtcbiAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKDMpIHZhcjxzdG9yYWdlLCByZWFkX3dyaXRlPiB1bmlvbk1hdHJpeE9mZnNldHM6IGFycmF5PHUzMiwgJHtudW1PZkVudHJpZXMgKyAxfT47XG4gICAgICAgIEBjb21wdXRlIEB3b3JrZ3JvdXBfc2l6ZSgke3RocmVhZHNQZXJXb3JrZ3JvdXBEaW19LCAke3RocmVhZHNQZXJXb3JrZ3JvdXBEaW19KSBmbiBwYWlyd2lzZU9wKFxuICAgICAgICAgICAgQGJ1aWx0aW4oZ2xvYmFsX2ludm9jYXRpb25faWQpIGlkOiB2ZWMzPHUzMj4sXG4gICAgICAgICkge1xuXG4gICAgICAgICAgICBsZXQgY29sOiB1MzIgPSBpZC54O1xuICAgICAgICAgICAgbGV0IHJvdzogdTMyID0gaWQueTtcbiAgICAgICAgICAgIGxldCB3b3JraW5nSW5kZXg6IHUzMiA9IHJvdyAqICR7dGhyZWFkc1BlcllEaW1lbnNpb259ICsgY29sO1xuXG4gICAgICAgICAgICBpZiAod29ya2luZ0luZGV4ID49ICR7bnVtT2ZFbnRyaWVzfSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjdXJVbmlvbk9mZnNldDogdTMyID0gdW5pb25NYXRyaXhPZmZzZXRzW3dvcmtpbmdJbmRleF07IC8vIG9mZnNldCBhdCB3aGljaCB0byBzdGFydCB3cml0aW5nIGluIHVuaW9uIG1hdHJpeFxuXG4gICAgICAgICAgICBsZXQgc3RhcnQxID0gc291cmNlMS5vZmZzZXRzW3dvcmtpbmdJbmRleF07XG4gICAgICAgICAgICBsZXQgZW5kMSA9IHNvdXJjZTEub2Zmc2V0c1t3b3JraW5nSW5kZXggKyAxXTtcbiAgICAgICAgICAgIGxldCBzdGFydDIgPSBzb3VyY2UyLm9mZnNldHNbd29ya2luZ0luZGV4XTtcbiAgICAgICAgICAgIGxldCBlbmQyID0gc291cmNlMi5vZmZzZXRzW3dvcmtpbmdJbmRleCArIDFdO1xuICAgICAgICAgICAgLy8gVE9ETzogc29ydCBhIGNvcHkgb2YgdGhlc2UgYXJyYXlzLCB3aWxsIG1ha2Ugb3BlcmF0aW9uIGZhc3RlclxuICAgICAgICAgICAgZm9yICh2YXIgaTogdTMyID0gc3RhcnQxOyBpIDwgZW5kMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbDE6IGYzMiA9IHNvdXJjZTEua25uRGlzdGFuY2VzW2ldO1xuICAgICAgICAgICAgICAgIHZhciB2YWwyOiBmMzIgPSAwLjA7XG4gICAgICAgICAgICAgICAgbGV0IGN1ckluZGV4OiBpMzIgPSBzb3VyY2UxLmluZGV4ZXNbaV07XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgajogdTMyID0gc3RhcnQyOyBqIDwgZW5kMjsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UyLmluZGV4ZXNbal0gPT0gY3VySW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbDIgPSBzb3VyY2UyLmtubkRpc3RhbmNlc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHJlc3VsdC5rbm5JbmRleGVzW2N1clVuaW9uT2Zmc2V0XSA9IGN1ckluZGV4O1xuICAgICAgICAgICAgICAgIHJlc3VsdC5rbm5EaXN0YW5jZXNbY3VyVW5pb25PZmZzZXRdID0gdmFsMSAke29wfSB2YWwyO1xuICAgICAgICAgICAgICAgIGN1clVuaW9uT2Zmc2V0ICs9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdXJVbmlvbk9mZnNldCA+PSB1bmlvbk1hdHJpeE9mZnNldHNbd29ya2luZ0luZGV4ICsgMV0pIHtcbiAgICAgICAgICAgICAgICAvLyBzbWFsbCBvcHRpbWl6YXRpb24gYXBwbGljYWJsZSBvbmx5IHRvIG91ciBjYXNlLCBidXQgc2F2ZXMgYSBnb29kIGFtb3VudCBvZiB0aW1lXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkbyB0aGUgc2FtZSBmb3Igc291cmNlMiBidXQgc2tpcCB0aGUgaW5kZXhlcyB3aGVyZSB0aGV5IGFyZSBhbHJlYWR5IHByZXNlbnQgaW4gc291cmNlMVxuICAgICAgICAgICAgZm9yICh2YXIgaTogdTMyID0gc3RhcnQyOyBpIDwgZW5kMjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbDE6IGYzMiA9IHNvdXJjZTIua25uRGlzdGFuY2VzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBjdXJJbmRleDogaTMyID0gc291cmNlMi5pbmRleGVzW2ldO1xuICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGo6IHUzMiA9IHN0YXJ0MTsgaiA8IGVuZDE7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlMS5pbmRleGVzW2pdID09IGN1ckluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5rbm5JbmRleGVzW2N1clVuaW9uT2Zmc2V0XSA9IGN1ckluZGV4O1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQua25uRGlzdGFuY2VzW2N1clVuaW9uT2Zmc2V0XSA9IHZhbDEgJHtvcH0gMC4wO1xuICAgICAgICAgICAgICAgICAgICBjdXJVbmlvbk9mZnNldCArPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuYDtcbiAgICAgICAgY29uc3Qgc3RvcmFnZTMyU2l6ZTEgPSBzcGFyc2VTaXplMSAqIDIgKyBudW1PZkVudHJpZXMgKyAxO1xuICAgICAgICBjb25zdCBzdG9yYWdlMzJTaXplMiA9IHNwYXJzZVNpemUyICogMiArIG51bU9mRW50cmllcyArIDE7XG4gICAgICAgIGNvbnN0IHJlc1N0b3JhZ2UzMlNpemUgPSB1bmlvbk1hdHJpeFNpemUgKiAyO1xuICAgICAgICAvLyBzdGFuZGFyZCBzdHVmZiB0byBwYWQgdGhlIHN0b3JhZ2Ugc2l6ZSB0byBtdWx0aXBsZSBvZiAxNiBieXRlc1xuICAgICAgICBsZXQgcGFkZGVkU3RvcmFnZTFCeXRlU2l6ZSA9IHN0b3JhZ2UzMlNpemUxICogNDtcbiAgICAgICAgY29uc3QgcmVtYWluZGVyMSA9IHBhZGRlZFN0b3JhZ2UxQnl0ZVNpemUgJiAxNTtcbiAgICAgICAgaWYgKHJlbWFpbmRlcjEgIT09IDApXG4gICAgICAgICAgICBwYWRkZWRTdG9yYWdlMUJ5dGVTaXplICs9IDE2IC0gcmVtYWluZGVyMTtcbiAgICAgICAgbGV0IHBhZGRlZFN0b3JhZ2UyQnl0ZVNpemUgPSBzdG9yYWdlMzJTaXplMiAqIDQ7XG4gICAgICAgIGNvbnN0IHJlbWFpbmRlcjIgPSBwYWRkZWRTdG9yYWdlMkJ5dGVTaXplICYgMTU7XG4gICAgICAgIGlmIChyZW1haW5kZXIyICE9PSAwKVxuICAgICAgICAgICAgcGFkZGVkU3RvcmFnZTJCeXRlU2l6ZSArPSAxNiAtIHJlbWFpbmRlcjI7XG4gICAgICAgIGxldCBwYWRkZWRSZXNTdG9yYWdlQnl0ZVNpemUgPSByZXNTdG9yYWdlMzJTaXplICogNDtcbiAgICAgICAgY29uc3QgcmVtYWluZGVyMyA9IHBhZGRlZFJlc1N0b3JhZ2VCeXRlU2l6ZSAmIDE1O1xuICAgICAgICBpZiAocmVtYWluZGVyMyAhPT0gMClcbiAgICAgICAgICAgIHBhZGRlZFJlc1N0b3JhZ2VCeXRlU2l6ZSArPSAxNiAtIHJlbWFpbmRlcjM7XG4gICAgICAgIGNvbnN0IGRldmljZSA9IHlpZWxkIGdldEdQVURldmljZSgpO1xuICAgICAgICBpZiAoZGV2aWNlID09IG51bGwpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe1xuICAgICAgICAgICAgbGFiZWw6ICdwYWlyd2lzZU9wU2hhZGVyJyxcbiAgICAgICAgICAgIGNvZGU6IHByb2Nlc3NXZ3NsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoe1xuICAgICAgICAgICAgbGFiZWw6ICdwYWlyd2lzZU9wUGlwZWxpbmUnLFxuICAgICAgICAgICAgbGF5b3V0OiAnYXV0bycsXG4gICAgICAgICAgICBjb21wdXRlOiB7XG4gICAgICAgICAgICAgICAgbW9kdWxlLFxuICAgICAgICAgICAgICAgIGVudHJ5UG9pbnQ6ICdwYWlyd2lzZU9wJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBpbnB1dCBwYXJhbXNcbiAgICAgICAgY29uc3Qgc291cmNlMUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xuICAgICAgICAgICAgbGFiZWw6ICdzb3VyY2UgMSBidWZmZXInLFxuICAgICAgICAgICAgc2l6ZTogcGFkZGVkU3RvcmFnZTFCeXRlU2l6ZSxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QsXG4gICAgICAgICAgICBtYXBwZWRBdENyZWF0aW9uOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbWFwcGVkU291cmNlMUJ1ZmZlciA9IHNvdXJjZTFCdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKTtcbiAgICAgICAgY29uc3Qgc291cmNlMUluZGV4ZXNBcnJheSA9IG5ldyBJbnQzMkFycmF5KG1hcHBlZFNvdXJjZTFCdWZmZXIsIDAsIHNwYXJzZVNpemUxKTtcbiAgICAgICAgc291cmNlMUluZGV4ZXNBcnJheS5zZXQoaW5kZXhlczEpO1xuICAgICAgICBjb25zdCBzb3VyY2UxRGlzdGFuY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KG1hcHBlZFNvdXJjZTFCdWZmZXIsIHNwYXJzZVNpemUxICogNCwgc3BhcnNlU2l6ZTEpO1xuICAgICAgICBzb3VyY2UxRGlzdGFuY2VzQXJyYXkuc2V0KGRpc3RhbmNlczEpO1xuICAgICAgICBjb25zdCBzb3VyY2UxT2Zmc2V0c0FycmF5ID0gbmV3IFVpbnQzMkFycmF5KG1hcHBlZFNvdXJjZTFCdWZmZXIsIHNwYXJzZVNpemUxICogOCwgbnVtT2ZFbnRyaWVzICsgMSk7XG4gICAgICAgIHNvdXJjZTFPZmZzZXRzQXJyYXkuc2V0KG9mZnNldHMxKTtcbiAgICAgICAgc291cmNlMUJ1ZmZlci51bm1hcCgpO1xuICAgICAgICBjb25zdCBzb3VyY2UyQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG4gICAgICAgICAgICBsYWJlbDogJ3NvdXJjZSAyIGJ1ZmZlcicsXG4gICAgICAgICAgICBzaXplOiBwYWRkZWRTdG9yYWdlMkJ5dGVTaXplLFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfU1JDIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCxcbiAgICAgICAgICAgIG1hcHBlZEF0Q3JlYXRpb246IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtYXBwZWRTb3VyY2UyQnVmZmVyID0gc291cmNlMkJ1ZmZlci5nZXRNYXBwZWRSYW5nZSgpO1xuICAgICAgICBjb25zdCBzb3VyY2UySW5kZXhlc0FycmF5ID0gbmV3IEludDMyQXJyYXkobWFwcGVkU291cmNlMkJ1ZmZlciwgMCwgc3BhcnNlU2l6ZTIpO1xuICAgICAgICBzb3VyY2UySW5kZXhlc0FycmF5LnNldChpbmRleGVzMik7XG4gICAgICAgIGNvbnN0IHNvdXJjZTJEaXN0YW5jZXNBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkobWFwcGVkU291cmNlMkJ1ZmZlciwgc3BhcnNlU2l6ZTIgKiA0LCBzcGFyc2VTaXplMik7XG4gICAgICAgIHNvdXJjZTJEaXN0YW5jZXNBcnJheS5zZXQoZGlzdGFuY2VzMik7XG4gICAgICAgIGNvbnN0IHNvdXJjZTJPZmZzZXRzQXJyYXkgPSBuZXcgVWludDMyQXJyYXkobWFwcGVkU291cmNlMkJ1ZmZlciwgc3BhcnNlU2l6ZTIgKiA4LCBudW1PZkVudHJpZXMgKyAxKTtcbiAgICAgICAgc291cmNlMk9mZnNldHNBcnJheS5zZXQob2Zmc2V0czIpO1xuICAgICAgICBzb3VyY2UyQnVmZmVyLnVubWFwKCk7XG4gICAgICAgIGNvbnN0IHJlc0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xuICAgICAgICAgICAgbGFiZWw6ICdyZXMgYnVmZmVyJyxcbiAgICAgICAgICAgIHNpemU6IHBhZGRlZFJlc1N0b3JhZ2VCeXRlU2l6ZSxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB1bmlvbk1hdHJpeE9mZnNldHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAndW5pb24gbWF0cml4IG9mZnNldHMgYnVmZmVyJyxcbiAgICAgICAgICAgIHNpemU6IChudW1PZkVudHJpZXMgKyAxKSAqIDQsXG4gICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkMgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNULFxuICAgICAgICAgICAgbWFwcGVkQXRDcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1hcHBlZFVuaW9uTWF0cml4T2Zmc2V0c0J1ZmZlciA9IHVuaW9uTWF0cml4T2Zmc2V0c0J1ZmZlci5nZXRNYXBwZWRSYW5nZSgpO1xuICAgICAgICBjb25zdCB1bmlvbk1hdHJpeE9mZnNldHNBcnJheSA9IG5ldyBVaW50MzJBcnJheShtYXBwZWRVbmlvbk1hdHJpeE9mZnNldHNCdWZmZXIpO1xuICAgICAgICB1bmlvbk1hdHJpeE9mZnNldHNBcnJheS5zZXQodW5pb25NYXRyaXhPZmZzZXRzKTtcbiAgICAgICAgdW5pb25NYXRyaXhPZmZzZXRzQnVmZmVyLnVubWFwKCk7XG4gICAgICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoe1xuICAgICAgICAgICAgbGFiZWw6ICdiaW5kR3JvdXAgZm9yIHBhaXJ3aXNlIG9wcycsXG4gICAgICAgICAgICBsYXlvdXQ6IHBpcGVsaW5lLmdldEJpbmRHcm91cExheW91dCgwKSxcbiAgICAgICAgICAgIGVudHJpZXM6IFtcbiAgICAgICAgICAgICAgICB7IGJpbmRpbmc6IDAsIHJlc291cmNlOiB7IGJ1ZmZlcjogc291cmNlMUJ1ZmZlciB9IH0sXG4gICAgICAgICAgICAgICAgeyBiaW5kaW5nOiAxLCByZXNvdXJjZTogeyBidWZmZXI6IHNvdXJjZTJCdWZmZXIgfSB9LFxuICAgICAgICAgICAgICAgIHsgYmluZGluZzogMiwgcmVzb3VyY2U6IHsgYnVmZmVyOiByZXNCdWZmZXIgfSB9LFxuICAgICAgICAgICAgICAgIHsgYmluZGluZzogMywgcmVzb3VyY2U6IHsgYnVmZmVyOiB1bmlvbk1hdHJpeE9mZnNldHNCdWZmZXIgfSB9XG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcih7XG4gICAgICAgICAgICBsYWJlbDogJ21hdHJpeCBvcHMgZW5jb2RlcicsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwYXNzID0gZW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKHtcbiAgICAgICAgICAgIGxhYmVsOiAnbWF0cml4IG9wcyBjb21wdXRlIHBhc3MnLFxuICAgICAgICB9KTtcbiAgICAgICAgcGFzcy5zZXRQaXBlbGluZShwaXBlbGluZSk7XG4gICAgICAgIHBhc3Muc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7XG4gICAgICAgIHBhc3MuZGlzcGF0Y2hXb3JrZ3JvdXBzKG51bU9mV29ya2dyb3Vwc1BlckRpbSwgbnVtT2ZXb3JrZ3JvdXBzUGVyRGltKTtcbiAgICAgICAgcGFzcy5lbmQoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG4gICAgICAgICAgICBsYWJlbDogJ3Jlc3VsdCBidWZmZXInLFxuICAgICAgICAgICAgc2l6ZTogcGFkZGVkUmVzU3RvcmFnZUJ5dGVTaXplLFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEIHwgR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QsXG4gICAgICAgIH0pO1xuICAgICAgICBlbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihyZXNCdWZmZXIsIDAsIHJlc3VsdEJ1ZmZlciwgMCwgcmVzdWx0QnVmZmVyLnNpemUpO1xuICAgICAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gZW5jb2Rlci5maW5pc2goKTtcbiAgICAgICAgZGV2aWNlLnF1ZXVlLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pO1xuICAgICAgICB5aWVsZCBkZXZpY2UucXVldWUub25TdWJtaXR0ZWRXb3JrRG9uZSgpO1xuICAgICAgICB5aWVsZCByZXN1bHRCdWZmZXIubWFwQXN5bmMoR1BVTWFwTW9kZS5SRUFEKTtcbiAgICAgICAgY29uc3QgcmVzdWx0QXJyYXlCdWZmZXIgPSByZXN1bHRCdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0S25uSW5kZXhlcyA9IG5ldyBJbnQzMkFycmF5KHVuaW9uTWF0cml4U2l6ZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdEtubkRpc3RhbmNlcyA9IG5ldyBGbG9hdDMyQXJyYXkodW5pb25NYXRyaXhTaXplKTtcbiAgICAgICAgLy8gaXRzIGFjdHVhbGx5IGEgc3BhcnNlIG1hdHJpeC5cbiAgICAgICAgcmVzdWx0S25uSW5kZXhlcy5zZXQobmV3IEludDMyQXJyYXkocmVzdWx0QXJyYXlCdWZmZXIsIDAsIHVuaW9uTWF0cml4U2l6ZSkpO1xuICAgICAgICByZXN1bHRLbm5EaXN0YW5jZXMuc2V0KG5ldyBGbG9hdDMyQXJyYXkocmVzdWx0QXJyYXlCdWZmZXIsIHVuaW9uTWF0cml4U2l6ZSAqIDQsIHVuaW9uTWF0cml4U2l6ZSkpO1xuICAgICAgICByZXN1bHRCdWZmZXIudW5tYXAoKTtcbiAgICAgICAgcmVzdWx0QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgc291cmNlMUJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHNvdXJjZTJCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICByZXNCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB1bmlvbk1hdHJpeE9mZnNldHNCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICByZXR1cm4geyByZXN1bHRLbm5JbmRleGVzLCByZXN1bHRLbm5EaXN0YW5jZXMgfTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhaXJ3aXNlLXNwYXJzZS1vcHMuanMubWFwIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGFuIEFycmF5IChhcnJheSBvciB0eXBlZCBhcnJheSwgZXhjZXB0IHRob3NlIHRoYXQgY29udGFpbiBiaWdpbnQgdmFsdWVzKS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBPYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSB0eXBlZCBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW55QXJyYXkodmFsdWUpIHtcbiAgICBjb25zdCB0YWcgPSB0b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICByZXR1cm4gdGFnLmVuZHNXaXRoKCdBcnJheV0nKSAmJiAhdGFnLmluY2x1ZGVzKCdCaWcnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qKlxuICogdGhlIHN1bSBvZiB0aGUgd2VpZ2h0ZWQgc3F1YXJlcyBvZiB0aGUgZXJyb3JzIChvciB3ZWlnaHRlZCByZXNpZHVhbHMpIGJldHdlZW4gdGhlIGRhdGEueVxuICogYW5kIHRoZSBjdXJ2ZS1maXQgZnVuY3Rpb24uXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge3t4OkFycmF5TGlrZTxudW1iZXI+LCB5OkFycmF5TGlrZTxudW1iZXI+fX0gZGF0YSAtIEFycmF5IG9mIHBvaW50cyB0byBmaXQgaW4gdGhlIGZvcm1hdCBbeDEsIHgyLCAuLi4gXSwgW3kxLCB5MiwgLi4uIF1cbiAqIEBwYXJhbSB7QXJyYXlMaWtlPG51bWJlcj59IHBhcmFtZXRlcnMgLSBBcnJheSBvZiBjdXJyZW50IHBhcmFtZXRlciB2YWx1ZXNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtZXRlcml6ZWRGdW5jdGlvbiAtIFRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gd2l0aCB0aGUgaW5kZXBlbmRlbnQgdmFyaWFibGUgYXMgYSBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7QXJyYXlMaWtlPG51bWJlcj59IHdlaWdodFNxdWFyZSAtIFNxdWFyZSBvZiB3ZWlnaHRzXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGVycm9yQ2FsY3VsYXRpb24oZGF0YSwgcGFyYW1ldGVycywgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLCB3ZWlnaHRTcXVhcmUpIHtcbiAgICBsZXQgZXJyb3IgPSAwO1xuICAgIGNvbnN0IGZ1bmMgPSBwYXJhbWV0ZXJpemVkRnVuY3Rpb24ocGFyYW1ldGVycyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZXJyb3IgKz0gTWF0aC5wb3coZGF0YS55W2ldIC0gZnVuYyhkYXRhLnhbaV0pLCAyKSAvIHdlaWdodFNxdWFyZVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9yO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXJyb3JDYWxjdWxhdGlvbi5qcy5tYXAiLCJpbXBvcnQgeyBpbnZlcnNlLCBNYXRyaXggfSBmcm9tICdtbC1tYXRyaXgnO1xuaW1wb3J0IGdyYWRpZW50RnVuY3Rpb24gZnJvbSAnLi9ncmFkaWVudEZ1bmN0aW9uJztcbi8qKlxuICogTWF0cml4IGZ1bmN0aW9uIG92ZXIgdGhlIHNhbXBsZXNcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7e3g6QXJyYXlMaWtlPG51bWJlcj4sIHk6QXJyYXlMaWtlPG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtBcnJheUxpa2U8bnVtYmVyPn0gZXZhbHVhdGVkRGF0YSAtIEFycmF5IG9mIHByZXZpb3VzIGV2YWx1YXRlZCBmdW5jdGlvbiB2YWx1ZXNcbiAqIEByZXR1cm4ge01hdHJpeH1cbiAqL1xuZnVuY3Rpb24gbWF0cml4RnVuY3Rpb24oZGF0YSwgZXZhbHVhdGVkRGF0YSkge1xuICAgIGNvbnN0IG0gPSBkYXRhLngubGVuZ3RoO1xuICAgIGxldCBhbnMgPSBuZXcgTWF0cml4KG0sIDEpO1xuICAgIGZvciAobGV0IHBvaW50ID0gMDsgcG9pbnQgPCBtOyBwb2ludCsrKSB7XG4gICAgICAgIGFucy5zZXQocG9pbnQsIDAsIGRhdGEueVtwb2ludF0gLSBldmFsdWF0ZWREYXRhW3BvaW50XSk7XG4gICAgfVxuICAgIHJldHVybiBhbnM7XG59XG4vKipcbiAqIEl0ZXJhdGlvbiBmb3IgTGV2ZW5iZXJnLU1hcnF1YXJkdFxuICogQGlnbm9yZVxuICogQHBhcmFtIHt7eDpBcnJheUxpa2U8bnVtYmVyPiwgeTpBcnJheUxpa2U8bnVtYmVyPn19IGRhdGEgLSBBcnJheSBvZiBwb2ludHMgdG8gZml0IGluIHRoZSBmb3JtYXQgW3gxLCB4MiwgLi4uIF0sIFt5MSwgeTIsIC4uLiBdXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IHBhcmFtcyAtIEFycmF5IG9mIHByZXZpb3VzIHBhcmFtZXRlciB2YWx1ZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkYW1waW5nIC0gTGV2ZW5iZXJnLU1hcnF1YXJkdCBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7bnVtYmVyfGFycmF5fSBncmFkaWVudERpZmZlcmVuY2UgLSBUaGUgc3RlcCBzaXplIHRvIGFwcHJveGltYXRlIHRoZSBqYWNvYmlhbiBtYXRyaXhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2VudHJhbERpZmZlcmVuY2UgLSBJZiB0cnVlIHRoZSBqYWNvYmlhbiBtYXRyaXggaXMgYXBwcm94aW1hdGVkIGJ5IGNlbnRyYWwgZGlmZmVyZW5jZXMgb3RoZXJ3aXNlIGJ5IGZvcndhcmQgZGlmZmVyZW5jZXNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtZXRlcml6ZWRGdW5jdGlvbiAtIFRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gd2l0aCB0aGUgaW5kZXBlbmRlbnQgdmFyaWFibGUgYXMgYSBwYXJhbWV0ZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RlcChkYXRhLCBwYXJhbXMsIGRhbXBpbmcsIGdyYWRpZW50RGlmZmVyZW5jZSwgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLCBjZW50cmFsRGlmZmVyZW5jZSwgd2VpZ2h0cykge1xuICAgIGxldCB2YWx1ZSA9IGRhbXBpbmc7XG4gICAgbGV0IGlkZW50aXR5ID0gTWF0cml4LmV5ZShwYXJhbXMubGVuZ3RoLCBwYXJhbXMubGVuZ3RoLCB2YWx1ZSk7XG4gICAgY29uc3QgZnVuYyA9IHBhcmFtZXRlcml6ZWRGdW5jdGlvbihwYXJhbXMpO1xuICAgIGxldCBldmFsdWF0ZWREYXRhID0gbmV3IEZsb2F0NjRBcnJheShkYXRhLngubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueC5sZW5ndGg7IGkrKykge1xuICAgICAgICBldmFsdWF0ZWREYXRhW2ldID0gZnVuYyhkYXRhLnhbaV0pO1xuICAgIH1cbiAgICBsZXQgZ3JhZGllbnRGdW5jID0gZ3JhZGllbnRGdW5jdGlvbihkYXRhLCBldmFsdWF0ZWREYXRhLCBwYXJhbXMsIGdyYWRpZW50RGlmZmVyZW5jZSwgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLCBjZW50cmFsRGlmZmVyZW5jZSk7XG4gICAgbGV0IHJlc2lkdWFsRXJyb3IgPSBtYXRyaXhGdW5jdGlvbihkYXRhLCBldmFsdWF0ZWREYXRhKTtcbiAgICBsZXQgaW52ZXJzZU1hdHJpeCA9IGludmVyc2UoaWRlbnRpdHkuYWRkKGdyYWRpZW50RnVuYy5tbXVsKGdyYWRpZW50RnVuYy50cmFuc3Bvc2UoKS5zY2FsZSgncm93JywgeyBzY2FsZTogd2VpZ2h0cyB9KSkpKTtcbiAgICBsZXQgamFjb2JpYW5XZWlnaHRSZXNpZHVhbEVycm9yID0gZ3JhZGllbnRGdW5jLm1tdWwocmVzaWR1YWxFcnJvci5zY2FsZSgncm93JywgeyBzY2FsZTogd2VpZ2h0cyB9KSk7XG4gICAgbGV0IHBlcnR1cmJhdGlvbnMgPSBpbnZlcnNlTWF0cml4Lm1tdWwoamFjb2JpYW5XZWlnaHRSZXNpZHVhbEVycm9yKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBwZXJ0dXJiYXRpb25zLFxuICAgICAgICBqYWNvYmlhbldlaWdodFJlc2lkdWFsRXJyb3IsXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0ZXAuanMubWFwIiwiaW1wb3J0IHsgTWF0cml4IH0gZnJvbSAnbWwtbWF0cml4Jztcbi8qKlxuICogRGlmZmVyZW5jZSBvZiB0aGUgbWF0cml4IGZ1bmN0aW9uIG92ZXIgdGhlIHBhcmFtZXRlcnNcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7e3g6QXJyYXlMaWtlPG51bWJlcj4sIHk6QXJyYXlMaWtlPG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtBcnJheUxpa2U8bnVtYmVyPn0gZXZhbHVhdGVkRGF0YSAtIEFycmF5IG9mIHByZXZpb3VzIGV2YWx1YXRlZCBmdW5jdGlvbiB2YWx1ZXNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gcGFyYW1zIC0gQXJyYXkgb2YgcHJldmlvdXMgcGFyYW1ldGVyIHZhbHVlc1xuICogQHBhcmFtIHtudW1iZXJ8YXJyYXl9IGdyYWRpZW50RGlmZmVyZW5jZSAtIFRoZSBzdGVwIHNpemUgdG8gYXBwcm94aW1hdGUgdGhlIGphY29iaWFuIG1hdHJpeFxuICogQHBhcmFtIHtib29sZWFufSBjZW50cmFsRGlmZmVyZW5jZSAtIElmIHRydWUgdGhlIGphY29iaWFuIG1hdHJpeCBpcyBhcHByb3hpbWF0ZWQgYnkgY2VudHJhbCBkaWZmZXJlbmNlcyBvdGhlcndpc2UgYnkgZm9yd2FyZCBkaWZmZXJlbmNlc1xuICogQHBhcmFtIHtmdW5jdGlvbn0gcGFyYW1GdW5jdGlvbiAtIFRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gd2l0aCB0aGUgaW5kZXBlbmRlbnQgdmFyaWFibGUgYXMgYSBwYXJhbWV0ZXJcbiAqIEByZXR1cm4ge01hdHJpeH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ3JhZGllbnRGdW5jdGlvbihkYXRhLCBldmFsdWF0ZWREYXRhLCBwYXJhbXMsIGdyYWRpZW50RGlmZmVyZW5jZSwgcGFyYW1GdW5jdGlvbiwgY2VudHJhbERpZmZlcmVuY2UpIHtcbiAgICBjb25zdCBuYlBhcmFtcyA9IHBhcmFtcy5sZW5ndGg7XG4gICAgY29uc3QgbmJQb2ludHMgPSBkYXRhLngubGVuZ3RoO1xuICAgIGxldCBhbnMgPSBNYXRyaXguemVyb3MobmJQYXJhbXMsIG5iUG9pbnRzKTtcbiAgICBsZXQgcm93SW5kZXggPSAwO1xuICAgIGZvciAobGV0IHBhcmFtID0gMDsgcGFyYW0gPCBuYlBhcmFtczsgcGFyYW0rKykge1xuICAgICAgICBpZiAoZ3JhZGllbnREaWZmZXJlbmNlW3BhcmFtXSA9PT0gMClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBsZXQgZGVsdGEgPSBncmFkaWVudERpZmZlcmVuY2VbcGFyYW1dO1xuICAgICAgICBsZXQgYXV4UGFyYW1zID0gcGFyYW1zLnNsaWNlKCk7XG4gICAgICAgIGF1eFBhcmFtc1twYXJhbV0gKz0gZGVsdGE7XG4gICAgICAgIGxldCBmdW5jUGFyYW0gPSBwYXJhbUZ1bmN0aW9uKGF1eFBhcmFtcyk7XG4gICAgICAgIGlmICghY2VudHJhbERpZmZlcmVuY2UpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHBvaW50ID0gMDsgcG9pbnQgPCBuYlBvaW50czsgcG9pbnQrKykge1xuICAgICAgICAgICAgICAgIGFucy5zZXQocm93SW5kZXgsIHBvaW50LCAoZXZhbHVhdGVkRGF0YVtwb2ludF0gLSBmdW5jUGFyYW0oZGF0YS54W3BvaW50XSkpIC8gZGVsdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXV4UGFyYW1zID0gcGFyYW1zLnNsaWNlKCk7XG4gICAgICAgICAgICBhdXhQYXJhbXNbcGFyYW1dIC09IGRlbHRhO1xuICAgICAgICAgICAgZGVsdGEgKj0gMjtcbiAgICAgICAgICAgIGxldCBmdW5jUGFyYW0yID0gcGFyYW1GdW5jdGlvbihhdXhQYXJhbXMpO1xuICAgICAgICAgICAgZm9yIChsZXQgcG9pbnQgPSAwOyBwb2ludCA8IG5iUG9pbnRzOyBwb2ludCsrKSB7XG4gICAgICAgICAgICAgICAgYW5zLnNldChyb3dJbmRleCwgcG9pbnQsIChmdW5jUGFyYW0yKGRhdGEueFtwb2ludF0pIC0gZnVuY1BhcmFtKGRhdGEueFtwb2ludF0pKSAvIGRlbHRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByb3dJbmRleCsrO1xuICAgIH1cbiAgICByZXR1cm4gYW5zO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z3JhZGllbnRGdW5jdGlvbi5qcy5tYXAiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGxldmVuYmVyZ01hcnF1YXJkdCB9IGZyb20gJ21sLWxldmVuYmVyZy1tYXJxdWFyZHQnO1xuZXhwb3J0IGZ1bmN0aW9uIGxpbmVhcih4MSwgeDIsIG4pIHtcbiAgICBjb25zdCBzdGVwID0gKHgyIC0geDEpIC8gKG4gLSAxKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogbiB9LCAoXywgaSkgPT4geDEgKyBzdGVwICogaSk7XG59XG4vKipcbiAqIEZpdCBhLCBiIHBhcmFtcyBmb3IgdGhlIGRpZmZlcmVudGlhYmxlIGN1cnZlIHVzZWQgaW4gbG93ZXJcbiAqIGRpbWVuc2lvbmFsIGZ1enp5IHNpbXBsaWNpYWwgY29tcGxleCBjb25zdHJ1Y3Rpb24uIFdlIHdhbnQgdGhlXG4gKiBzbW9vdGggY3VydmUgKGZyb20gYSBwcmUtZGVmaW5lZCBmYW1pbHkgd2l0aCBzaW1wbGUgZ3JhZGllbnQpIHRoYXRcbiAqIGJlc3QgbWF0Y2hlcyBhbiBvZmZzZXQgZXhwb25lbnRpYWwgZGVjYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQUJQYXJhbXMoc3ByZWFkLCBtaW5EaXN0KSB7XG4gICAgY29uc3QgY3VydmUgPSAoW2EsIGJdKSA9PiAoeCkgPT4ge1xuICAgICAgICByZXR1cm4gMS4wIC8gKDEuMCArIGEgKiBNYXRoLnBvdyh4LCAoMiAqIGIpKSk7XG4gICAgfTtcbiAgICBjb25zdCB4diA9IGxpbmVhcigwLCBzcHJlYWQgKiAzLCAzMDApXG4gICAgICAgIC5tYXAoKHZhbCkgPT4gKHZhbCA8IG1pbkRpc3QgPyAxLjAgOiB2YWwpKTtcbiAgICBjb25zdCB5diA9IG5ldyBBcnJheSh4di5sZW5ndGgpLmZpbGwoMCkubWFwKCh2YWwsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGd0ZSA9IHh2W2luZGV4XSA+PSBtaW5EaXN0O1xuICAgICAgICByZXR1cm4gZ3RlID8gTWF0aC5leHAoLSh4dltpbmRleF0gLSBtaW5EaXN0KSAvIHNwcmVhZCkgOiB2YWw7XG4gICAgfSk7XG4gICAgY29uc3QgaW5pdGlhbFZhbHVlcyA9IFswLjUsIDAuNV07XG4gICAgY29uc3QgZGF0YSA9IHsgeDogeHYsIHk6IHl2IH07XG4gICAgLy8gRGVmYXVsdCBvcHRpb25zIGZvciB0aGUgYWxnb3JpdGhtIChmcm9tIGdpdGh1YiBleGFtcGxlKVxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIGRhbXBpbmc6IDEuNSxcbiAgICAgICAgaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgZ3JhZGllbnREaWZmZXJlbmNlOiAxMGUtMixcbiAgICAgICAgbWF4SXRlcmF0aW9uczogMTAwLFxuICAgICAgICBlcnJvclRvbGVyYW5jZTogMTBlLTMsXG4gICAgfTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbmV3LWNhcFxuICAgIGNvbnN0IHsgcGFyYW1ldGVyVmFsdWVzIH0gPSBsZXZlbmJlcmdNYXJxdWFyZHQoZGF0YSwgY3VydmUsIG9wdGlvbnMpO1xuICAgIGNvbnN0IFthLCBiXSA9IHBhcmFtZXRlclZhbHVlcztcbiAgICByZXR1cm4geyBhLCBiIH07XG59XG4vKipcbiAqIGhldXJpc3RpYyBmb3IgbnVtYmVyIG9mIGVwb2NocyBvZiB1bWFwLCBkaWZmZXJzIGZyb20gY3B1IHZlcnNpb24sIGJlY2F1c2Ugb2YgdGhlIHdheSBncHUgcGFzc2VzIGRhdGFcbiAqIEBwYXJhbSBlbnRyeUxlbiBudW1iZXIgb2YgZW50cmllc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5FcG9jaHMoZW50cnlMZW4pIHtcbiAgICAvL1xuICAgIGNvbnN0IGxlbmd0aCA9IGVudHJ5TGVuO1xuICAgIGlmIChsZW5ndGggPD0gMjUwMClcbiAgICAgICAgcmV0dXJuIDEwMDA7XG4gICAgZWxzZSBpZiAobGVuZ3RoIDw9IDUwMDApXG4gICAgICAgIHJldHVybiA4MDA7XG4gICAgZWxzZSBpZiAobGVuZ3RoIDw9IDc1MDApXG4gICAgICAgIHJldHVybiA2NTA7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gNDAwO1xufVxuLyoqICBoZWxwZXIgZnVuY3Rpb24gdGhhdCB0cmFuc2Zvcm1zIGFycmF5IG9mIHNpemVzIHRvIG9mZnNldCBmb3JtICovXG5leHBvcnQgZnVuY3Rpb24gdG9PZmZzZXRGb3JtKGFyKSB7XG4gICAgY29uc3QgcmVzID0gbmV3IFVpbnQzMkFycmF5KGFyLmxlbmd0aCArIDEpO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzW2ldID0gb2Zmc2V0O1xuICAgICAgICBvZmZzZXQgKz0gYXJbaV07XG4gICAgfVxuICAgIHJlc1thci5sZW5ndGhdID0gb2Zmc2V0O1xuICAgIHJldHVybiByZXM7XG59XG4vKiogbXVsdGlwbGllcyBmbGF0IHJlcHJlc2VudGF0aW9uIG9mIHNwYXJzZSBrbm4gaW5mbyBieSBzY2FsYXIuXG4gKiBhbHNvIG5vIHBvaW50IG9mIGRvaW5nIHRoaXMgb24gZ3B1LCBjYW4gYmUgZG9uZSBvbiBjcHUgcHJldHR5IHF1aWNrbHkuXG4gKiBpZiB0aGVyZSB3aWxsIGJlIG5lZWQgZm9yIGl0LCBpdCBjYW4gYmUgZG9uZSBvbiBncHUgYXMgd2VsbCB2ZXJ5IHZlcnkgZWFzaWx5LlxuICogQHBhcmFtIHZhbHVlcyB2YWx1ZXMgYXJyYXlcbiAqIEBwYXJhbSBzY2FsYXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyKHZhbHVlcywgc2NhbGFyKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHZhbHVlc1tpXSA9IHZhbHVlc1tpXSAqIHNjYWxhcjtcbn1cbi8qKlxuICogZ2VuZXJhdGUgdHJhbnNwb3NlIG9mIGtubiBmcm9tIHRoZSB0cmFuc3Bvc2l0aW9uIGluZm8gdGFrZW4gZnJvbSBzcGFyc2Uga25uIGluZm9cbiAqIHVzaW5nIHRoaXMgaW5mb3JtYXRpb24gYXZvaWRzIGJpbGxpb25zIG9mIGFycmF5LnB1c2ggY2FsbHMsIGlzIG11Y2ggY2xlYW5lciwgYWxsb3dzIHR5cGVkIGFycmF5IHVzZSBhbmQgaXMgZmFzdGVyLlxuICogbm8gcG9pbnQgb2YgZG9pbmcgdGhpcyBvbiBncHUsIGNhbiBiZSBkb25lIG9uIGNwdSBhcyB3ZSBhbHJlYWR5IGhhdmUgYWxsIHRoZSBpbmZvIG5lZWRlZC5cbiAqIEBwYXJhbSBrbm5JbmRleGVzXG4gKiBAcGFyYW0ga25uRGlzdGFuY2VzXG4gKiBAcGFyYW0ga25uU3BhcnNlSW5mb1xuICogQHBhcmFtIGtublNpemVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc3Bvc2VLTk4oa25uSW5kZXhlcywga25uRGlzdGFuY2VzLCBrbm5TcGFyc2VJbmZvLCBrbm5TaXplID0gMTUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBudW1PZkVudHJpZXMgPSBrbm5JbmRleGVzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZnVsbEtubkVudHJ5U2l6ZSA9IGtublNpemUgKiBudW1PZkVudHJpZXM7XG4gICAgICAgIGNvbnN0IHRyYW5zcG9zZVNpemVzID0ga25uU3BhcnNlSW5mby5yZXN1bHRUcmFuc3Bvc2VTaXplc0FycmF5O1xuICAgICAgICBjb25zdCB0cmFuc3Bvc2VPZmZzZXRzID0gdG9PZmZzZXRGb3JtKHRyYW5zcG9zZVNpemVzKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0c0NvcHkgPSBuZXcgVWludDMyQXJyYXkodHJhbnNwb3NlT2Zmc2V0cy5sZW5ndGgpO1xuICAgICAgICBvZmZzZXRzQ29weS5zZXQodHJhbnNwb3NlT2Zmc2V0cyk7IC8vIHdpbGwgYmUgdXNlZCBmb3IgZHluYW1pYyBpbmRleGluZ1xuICAgICAgICBjb25zdCB0cmFuc3Bvc2VLTk5JbmRleGVzID0gbmV3IEludDMyQXJyYXkoZnVsbEtubkVudHJ5U2l6ZSkuZmlsbCgwKTtcbiAgICAgICAgY29uc3QgdHJhbnNwb3NlS05ORGlzdGFuY2VzID0gbmV3IEZsb2F0MzJBcnJheShmdWxsS25uRW50cnlTaXplKS5maWxsKDApO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU9mRW50cmllczsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGtublNpemU7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG90aGVySW5kZXggPSBrbm5JbmRleGVzW2ldW2pdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG90aGVySW5kZXhPZmZzZXQgPSBvZmZzZXRzQ29weVtvdGhlckluZGV4XTtcbiAgICAgICAgICAgICAgICB0cmFuc3Bvc2VLTk5JbmRleGVzW290aGVySW5kZXhPZmZzZXRdID0gaTtcbiAgICAgICAgICAgICAgICB0cmFuc3Bvc2VLTk5EaXN0YW5jZXNbb3RoZXJJbmRleE9mZnNldF0gPSBrbm5EaXN0YW5jZXNbaV1bal07XG4gICAgICAgICAgICAgICAgb2Zmc2V0c0NvcHlbb3RoZXJJbmRleF0gKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB0cmFuc3Bvc2VLTk5JbmRleGVzLCB0cmFuc3Bvc2VLTk5EaXN0YW5jZXMsIHRyYW5zcG9zZU9mZnNldHMgfTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsImltcG9ydCBjaGVja09wdGlvbnMgZnJvbSAnLi9jaGVja09wdGlvbnMnO1xuaW1wb3J0IGVycm9yQ2FsY3VsYXRpb24gZnJvbSAnLi9lcnJvckNhbGN1bGF0aW9uJztcbmltcG9ydCBzdGVwIGZyb20gJy4vc3RlcCc7XG4vKipcbiAqIEN1cnZlIGZpdHRpbmcgYWxnb3JpdGhtXG4gKiBAcGFyYW0ge3t4OkFycmF5TGlrZTxudW1iZXI+LCB5OkFycmF5TGlrZTxudW1iZXI+fX0gZGF0YSAtIEFycmF5IG9mIHBvaW50cyB0byBmaXQgaW4gdGhlIGZvcm1hdCBbeDEsIHgyLCAuLi4gXSwgW3kxLCB5MiwgLi4uIF1cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtZXRlcml6ZWRGdW5jdGlvbiAtIFRha2VzIGFuIGFycmF5IG9mIHBhcmFtZXRlcnMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB3aXRoIHRoZSBpbmRlcGVuZGVudCB2YXJpYWJsZSBhcyBpdHMgc29sZSBhcmd1bWVudFxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIG9iamVjdFxuICogQHBhcmFtIHtBcnJheUxpa2U8bnVtYmVyPn0gb3B0aW9ucy5pbml0aWFsVmFsdWVzIC0gQXJyYXkgb2YgaW5pdGlhbCBwYXJhbWV0ZXIgdmFsdWVzXG4gKiBAcGFyYW0ge251bWJlcnxBcnJheUxpa2U8bnVtYmVyPn0gW29wdGlvbnMud2VpZ2h0cyA9IDFdIC0gd2VpZ2h0aW5nIHZlY3RvciwgaWYgdGhlIGxlbmd0aCBkb2VzIG5vdCBtYXRjaCB3aXRoIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMsIHRoZSB2ZWN0b3IgaXMgcmVjb25zdHJ1Y3RlZCB3aXRoIGZpcnN0IHZhbHVlLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmRhbXBpbmcgPSAxZS0yXSAtIExldmVuYmVyZy1NYXJxdWFyZHQgcGFyYW1ldGVyLCBzbWFsbCB2YWx1ZXMgb2YgdGhlIGRhbXBpbmcgcGFyYW1ldGVyIM67IHJlc3VsdCBpbiBhIEdhdXNzLU5ld3RvbiB1cGRhdGUgYW5kIGxhcmdlXG52YWx1ZXMgb2YgzrsgcmVzdWx0IGluIGEgZ3JhZGllbnQgZGVzY2VudCB1cGRhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5kYW1waW5nU3RlcERvd24gPSA5XSAtIGZhY3RvciB0byByZWR1Y2UgdGhlIGRhbXBpbmcgKExldmVuYmVyZy1NYXJxdWFyZHQgcGFyYW1ldGVyKSB3aGVuIHRoZXJlIGlzIG5vdCBhbiBpbXByb3ZlbWVudCB3aGVuIHVwZGF0aW5nIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZGFtcGluZ1N0ZXBVcCA9IDExXSAtIGZhY3RvciB0byBpbmNyZWFzZSB0aGUgZGFtcGluZyAoTGV2ZW5iZXJnLU1hcnF1YXJkdCBwYXJhbWV0ZXIpIHdoZW4gdGhlcmUgaXMgYW4gaW1wcm92ZW1lbnQgd2hlbiB1cGRhdGluZyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmltcHJvdmVtZW50VGhyZXNob2xkID0gMWUtM10gLSB0aGUgdGhyZXNob2xkIHRvIGRlZmluZSBhbiBpbXByb3ZlbWVudCB0aHJvdWdoIGFuIHVwZGF0ZSBvZiBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge251bWJlcnxBcnJheUxpa2U8bnVtYmVyPn0gW29wdGlvbnMuZ3JhZGllbnREaWZmZXJlbmNlID0gMTBlLTJdIC0gVGhlIHN0ZXAgc2l6ZSB0byBhcHByb3hpbWF0ZSB0aGUgamFjb2JpYW4gbWF0cml4XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNlbnRyYWxEaWZmZXJlbmNlID0gZmFsc2VdIC0gSWYgdHJ1ZSB0aGUgamFjb2JpYW4gbWF0cml4IGlzIGFwcHJveGltYXRlZCBieSBjZW50cmFsIGRpZmZlcmVuY2VzIG90aGVyd2lzZSBieSBmb3J3YXJkIGRpZmZlcmVuY2VzXG4gKiBAcGFyYW0ge0FycmF5TGlrZTxudW1iZXI+fSBbb3B0aW9ucy5taW5WYWx1ZXNdIC0gTWluaW11bSBhbGxvd2VkIHZhbHVlcyBmb3IgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheUxpa2U8bnVtYmVyPn0gW29wdGlvbnMubWF4VmFsdWVzXSAtIE1heGltdW0gYWxsb3dlZCB2YWx1ZXMgZm9yIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhJdGVyYXRpb25zID0gMTAwXSAtIE1heGltdW0gb2YgYWxsb3dlZCBpdGVyYXRpb25zXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZXJyb3JUb2xlcmFuY2UgPSAxMGUtM10gLSBNaW5pbXVtIHVuY2VydGFpbnR5IGFsbG93ZWQgZm9yIGVhY2ggcG9pbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudGltZW91dF0gLSBtYXhpbXVtIHRpbWUgcnVubmluZyBiZWZvcmUgdGhyb3cgaW4gc2Vjb25kcy5cbiAqIEByZXR1cm4ge3twYXJhbWV0ZXJWYWx1ZXM6IEFycmF5PG51bWJlcj4sIHBhcmFtZXRlckVycm9yOiBudW1iZXIsIGl0ZXJhdGlvbnM6IG51bWJlcn19XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZXZlbmJlcmdNYXJxdWFyZHQoZGF0YSwgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gICAgbGV0IHsgY2hlY2tUaW1lb3V0LCBtaW5WYWx1ZXMsIG1heFZhbHVlcywgcGFyYW1ldGVycywgd2VpZ2h0U3F1YXJlLCBkYW1waW5nLCBkYW1waW5nU3RlcFVwLCBkYW1waW5nU3RlcERvd24sIG1heEl0ZXJhdGlvbnMsIGVycm9yVG9sZXJhbmNlLCBjZW50cmFsRGlmZmVyZW5jZSwgZ3JhZGllbnREaWZmZXJlbmNlLCBpbXByb3ZlbWVudFRocmVzaG9sZCwgfSA9IGNoZWNrT3B0aW9ucyhkYXRhLCBwYXJhbWV0ZXJpemVkRnVuY3Rpb24sIG9wdGlvbnMpO1xuICAgIGxldCBlcnJvciA9IGVycm9yQ2FsY3VsYXRpb24oZGF0YSwgcGFyYW1ldGVycywgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLCB3ZWlnaHRTcXVhcmUpO1xuICAgIGxldCBvcHRpbWFsRXJyb3IgPSBlcnJvcjtcbiAgICBsZXQgb3B0aW1hbFBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLnNsaWNlKCk7XG4gICAgbGV0IGNvbnZlcmdlZCA9IGVycm9yIDw9IGVycm9yVG9sZXJhbmNlO1xuICAgIGxldCBpdGVyYXRpb24gPSAwO1xuICAgIGZvciAoOyBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zICYmICFjb252ZXJnZWQ7IGl0ZXJhdGlvbisrKSB7XG4gICAgICAgIGxldCBwcmV2aW91c0Vycm9yID0gZXJyb3I7XG4gICAgICAgIGxldCB7IHBlcnR1cmJhdGlvbnMsIGphY29iaWFuV2VpZ2h0UmVzaWR1YWxFcnJvciB9ID0gc3RlcChkYXRhLCBwYXJhbWV0ZXJzLCBkYW1waW5nLCBncmFkaWVudERpZmZlcmVuY2UsIHBhcmFtZXRlcml6ZWRGdW5jdGlvbiwgY2VudHJhbERpZmZlcmVuY2UsIHdlaWdodFNxdWFyZSk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcGFyYW1ldGVycy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgcGFyYW1ldGVyc1trXSA9IE1hdGgubWluKE1hdGgubWF4KG1pblZhbHVlc1trXSwgcGFyYW1ldGVyc1trXSAtIHBlcnR1cmJhdGlvbnMuZ2V0KGssIDApKSwgbWF4VmFsdWVzW2tdKTtcbiAgICAgICAgfVxuICAgICAgICBlcnJvciA9IGVycm9yQ2FsY3VsYXRpb24oZGF0YSwgcGFyYW1ldGVycywgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLCB3ZWlnaHRTcXVhcmUpO1xuICAgICAgICBpZiAoaXNOYU4oZXJyb3IpKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGlmIChlcnJvciA8IG9wdGltYWxFcnJvciAtIGVycm9yVG9sZXJhbmNlKSB7XG4gICAgICAgICAgICBvcHRpbWFsRXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgIG9wdGltYWxQYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5zbGljZSgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbXByb3ZlbWVudE1ldHJpYyA9IChwcmV2aW91c0Vycm9yIC0gZXJyb3IpIC9cbiAgICAgICAgICAgIHBlcnR1cmJhdGlvbnNcbiAgICAgICAgICAgICAgICAudHJhbnNwb3NlKClcbiAgICAgICAgICAgICAgICAubW11bChwZXJ0dXJiYXRpb25zLm11bChkYW1waW5nKS5hZGQoamFjb2JpYW5XZWlnaHRSZXNpZHVhbEVycm9yKSlcbiAgICAgICAgICAgICAgICAuZ2V0KDAsIDApO1xuICAgICAgICBpZiAoaW1wcm92ZW1lbnRNZXRyaWMgPiBpbXByb3ZlbWVudFRocmVzaG9sZCkge1xuICAgICAgICAgICAgZGFtcGluZyA9IE1hdGgubWF4KGRhbXBpbmcgLyBkYW1waW5nU3RlcERvd24sIDFlLTcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGFtcGluZyA9IE1hdGgubWluKGRhbXBpbmcgKiBkYW1waW5nU3RlcFVwLCAxZTcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja1RpbWVvdXQoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZXhlY3V0aW9uIHRpbWUgaXMgb3ZlciB0byAke29wdGlvbnMudGltZW91dH0gc2Vjb25kc2ApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnZlcmdlZCA9IGVycm9yIDw9IGVycm9yVG9sZXJhbmNlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBwYXJhbWV0ZXJWYWx1ZXM6IG9wdGltYWxQYXJhbWV0ZXJzLFxuICAgICAgICBwYXJhbWV0ZXJFcnJvcjogb3B0aW1hbEVycm9yLFxuICAgICAgICBpdGVyYXRpb25zOiBpdGVyYXRpb24sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IGlzQW55QXJyYXkgfSBmcm9tICdpcy1hbnktYXJyYXknO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2hlY2tPcHRpb25zKGRhdGEsIHBhcmFtZXRlcml6ZWRGdW5jdGlvbiwgb3B0aW9ucykge1xuICAgIGxldCB7IHRpbWVvdXQsIG1pblZhbHVlcywgbWF4VmFsdWVzLCBpbml0aWFsVmFsdWVzLCB3ZWlnaHRzID0gMSwgZGFtcGluZyA9IDFlLTIsIGRhbXBpbmdTdGVwVXAgPSAxMSwgZGFtcGluZ1N0ZXBEb3duID0gOSwgbWF4SXRlcmF0aW9ucyA9IDEwMCwgZXJyb3JUb2xlcmFuY2UgPSAxZS03LCBjZW50cmFsRGlmZmVyZW5jZSA9IGZhbHNlLCBncmFkaWVudERpZmZlcmVuY2UgPSAxMGUtMiwgaW1wcm92ZW1lbnRUaHJlc2hvbGQgPSAxZS0zLCB9ID0gb3B0aW9ucztcbiAgICBpZiAoZGFtcGluZyA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGRhbXBpbmcgb3B0aW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWRhdGEueCB8fCAhZGF0YS55KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGRhdGEgcGFyYW1ldGVyIG11c3QgaGF2ZSB4IGFuZCB5IGVsZW1lbnRzJyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpc0FueUFycmF5KGRhdGEueCkgfHxcbiAgICAgICAgZGF0YS54Lmxlbmd0aCA8IDIgfHxcbiAgICAgICAgIWlzQW55QXJyYXkoZGF0YS55KSB8fFxuICAgICAgICBkYXRhLnkubGVuZ3RoIDwgMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkYXRhIHBhcmFtZXRlciBlbGVtZW50cyBtdXN0IGJlIGFuIGFycmF5IHdpdGggbW9yZSB0aGFuIDIgcG9pbnRzJyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGRhdGEueC5sZW5ndGggIT09IGRhdGEueS5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGF0YSBwYXJhbWV0ZXIgZWxlbWVudHMgbXVzdCBoYXZlIHRoZSBzYW1lIHNpemUnKTtcbiAgICB9XG4gICAgaWYgKCEoaW5pdGlhbFZhbHVlcyAmJiBpbml0aWFsVmFsdWVzLmxlbmd0aCA+IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGluaXRpYWxWYWx1ZXMgb3B0aW9uIGlzIG1hbmRhdG9yeSBhbmQgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIH1cbiAgICBsZXQgcGFyYW1ldGVycyA9IGluaXRpYWxWYWx1ZXM7XG4gICAgbGV0IG5iUG9pbnRzID0gZGF0YS55Lmxlbmd0aDtcbiAgICBsZXQgcGFyTGVuID0gcGFyYW1ldGVycy5sZW5ndGg7XG4gICAgbWF4VmFsdWVzID0gbWF4VmFsdWVzIHx8IG5ldyBBcnJheShwYXJMZW4pLmZpbGwoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuICAgIG1pblZhbHVlcyA9IG1pblZhbHVlcyB8fCBuZXcgQXJyYXkocGFyTGVuKS5maWxsKE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKTtcbiAgICBpZiAobWF4VmFsdWVzLmxlbmd0aCAhPT0gbWluVmFsdWVzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pblZhbHVlcyBhbmQgbWF4VmFsdWVzIG11c3QgYmUgdGhlIHNhbWUgc2l6ZScpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGdyYWRpZW50RGlmZmVyZW5jZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZ3JhZGllbnREaWZmZXJlbmNlID0gbmV3IEFycmF5KHBhcmFtZXRlcnMubGVuZ3RoKS5maWxsKGdyYWRpZW50RGlmZmVyZW5jZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQW55QXJyYXkoZ3JhZGllbnREaWZmZXJlbmNlKSkge1xuICAgICAgICBpZiAoZ3JhZGllbnREaWZmZXJlbmNlLmxlbmd0aCAhPT0gcGFyTGVuKSB7XG4gICAgICAgICAgICBncmFkaWVudERpZmZlcmVuY2UgPSBuZXcgQXJyYXkocGFyTGVuKS5maWxsKGdyYWRpZW50RGlmZmVyZW5jZVswXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ3JhZGllbnREaWZmZXJlbmNlIHNob3VsZCBiZSBhIG51bWJlciBvciBhcnJheSB3aXRoIGxlbmd0aCBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMnKTtcbiAgICB9XG4gICAgbGV0IGZpbGxlcjtcbiAgICBpZiAodHlwZW9mIHdlaWdodHMgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IDEgLyB3ZWlnaHRzICoqIDI7XG4gICAgICAgIGZpbGxlciA9ICgpID0+IHZhbHVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0FueUFycmF5KHdlaWdodHMpKSB7XG4gICAgICAgIGlmICh3ZWlnaHRzLmxlbmd0aCA8IGRhdGEueC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IDEgLyB3ZWlnaHRzWzBdICoqIDI7XG4gICAgICAgICAgICBmaWxsZXIgPSAoKSA9PiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZpbGxlciA9IChpKSA9PiAxIC8gd2VpZ2h0c1tpXSAqKiAyO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dlaWdodHMgc2hvdWxkIGJlIGEgbnVtYmVyIG9yIGFycmF5IHdpdGggbGVuZ3RoIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMnKTtcbiAgICB9XG4gICAgbGV0IGNoZWNrVGltZW91dDtcbiAgICBpZiAodGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGltZW91dCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGltZW91dCBzaG91bGQgYmUgYSBudW1iZXInKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZW5kVGltZSA9IERhdGUubm93KCkgKyB0aW1lb3V0ICogMTAwMDtcbiAgICAgICAgY2hlY2tUaW1lb3V0ID0gKCkgPT4gRGF0ZS5ub3coKSA+IGVuZFRpbWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjaGVja1RpbWVvdXQgPSAoKSA9PiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IHdlaWdodFNxdWFyZSA9IG5ldyBBcnJheShkYXRhLngubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5iUG9pbnRzOyBpKyspIHtcbiAgICAgICAgd2VpZ2h0U3F1YXJlW2ldID0gZmlsbGVyKGkpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjaGVja1RpbWVvdXQsXG4gICAgICAgIG1pblZhbHVlcyxcbiAgICAgICAgbWF4VmFsdWVzLFxuICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICB3ZWlnaHRTcXVhcmUsXG4gICAgICAgIGRhbXBpbmcsXG4gICAgICAgIGRhbXBpbmdTdGVwVXAsXG4gICAgICAgIGRhbXBpbmdTdGVwRG93bixcbiAgICAgICAgbWF4SXRlcmF0aW9ucyxcbiAgICAgICAgZXJyb3JUb2xlcmFuY2UsXG4gICAgICAgIGNlbnRyYWxEaWZmZXJlbmNlLFxuICAgICAgICBncmFkaWVudERpZmZlcmVuY2UsXG4gICAgICAgIGltcHJvdmVtZW50VGhyZXNob2xkLFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGVja09wdGlvbnMuanMubWFwIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBnZXRLbm5TcGFyc2VPcEluZm8gfSBmcm9tICcuL2tubi1zcGFyc2UtaW5mbyc7XG5pbXBvcnQgeyBwYWlyd2lzZU9wU3BhcnNlIH0gZnJvbSAnLi9wYWlyd2lzZS1zcGFyc2Utb3BzJztcbmltcG9ydCB7IG11bHRpcGx5U2NhbGFyLCB0b09mZnNldEZvcm0sIHRyYW5zcG9zZUtOTiB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBlcmZvcm1NYXRyaXhPcHMoa25uSW5kZXhlcywga25uRGlzdGFuY2VzLCBzZXRPcE1peFJhdGlvID0gMS4wKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmxhdEtubkluZGV4ZXMgPSBuZXcgSW50MzJBcnJheShrbm5JbmRleGVzLmxlbmd0aCAqIGtubkluZGV4ZXNbMF0ubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZmxhdEtubkRpc3RhbmNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoa25uRGlzdGFuY2VzLmxlbmd0aCAqIGtubkRpc3RhbmNlc1swXS5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtubkluZGV4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZsYXRLbm5JbmRleGVzLnNldChrbm5JbmRleGVzW2ldLCBpICoga25uSW5kZXhlc1tpXS5sZW5ndGgpO1xuICAgICAgICAgICAgZmxhdEtubkRpc3RhbmNlcy5zZXQoa25uRGlzdGFuY2VzW2ldLCBpICoga25uRGlzdGFuY2VzW2ldLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdW5pb25JbmZvID0geWllbGQgZ2V0S25uU3BhcnNlT3BJbmZvKGtubkluZGV4ZXMpO1xuICAgICAgICBjb25zdCBudW1PZkVudHJpZXMgPSBrbm5JbmRleGVzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdHJhbnNwb3NlZCA9IHlpZWxkIHRyYW5zcG9zZUtOTihrbm5JbmRleGVzLCBrbm5EaXN0YW5jZXMsIHVuaW9uSW5mbywga25uRGlzdGFuY2VzWzBdLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZU9mZnNldHMgPSB0b09mZnNldEZvcm0obmV3IFVpbnQzMkFycmF5KG51bU9mRW50cmllcykuZmlsbChrbm5JbmRleGVzWzBdLmxlbmd0aCkpO1xuICAgICAgICBjb25zdCB1bmlvbk1hdHJpeE9mZnNldHMgPSB0b09mZnNldEZvcm0odW5pb25JbmZvLnJlc3VsdFVuaW9uU2l6ZXNBcnJheSk7XG4gICAgICAgIGNvbnN0IHRyYW5zcG9zZU11bHRSZXMgPSB5aWVsZCBwYWlyd2lzZU9wU3BhcnNlKGZsYXRLbm5JbmRleGVzLCBmbGF0S25uRGlzdGFuY2VzLCBzb3VyY2VPZmZzZXRzLCB0cmFuc3Bvc2VkLnRyYW5zcG9zZUtOTkluZGV4ZXMsIHRyYW5zcG9zZWQudHJhbnNwb3NlS05ORGlzdGFuY2VzLCB0cmFuc3Bvc2VkLnRyYW5zcG9zZU9mZnNldHMsIG51bU9mRW50cmllcywgdW5pb25NYXRyaXhPZmZzZXRzLCAnKicpO1xuICAgICAgICBjb25zdCBhZGRSZXMgPSB5aWVsZCBwYWlyd2lzZU9wU3BhcnNlKGZsYXRLbm5JbmRleGVzLCBmbGF0S25uRGlzdGFuY2VzLCBzb3VyY2VPZmZzZXRzLCB0cmFuc3Bvc2VkLnRyYW5zcG9zZUtOTkluZGV4ZXMsIHRyYW5zcG9zZWQudHJhbnNwb3NlS05ORGlzdGFuY2VzLCB0cmFuc3Bvc2VkLnRyYW5zcG9zZU9mZnNldHMsIG51bU9mRW50cmllcywgdW5pb25NYXRyaXhPZmZzZXRzLCAnKycpO1xuICAgICAgICAvLyB0aGVzZSBvZmZzZXRzIHdpbGwgYmUgc2FtZSBhcyB1bmlvbiBtYXRyaXggb2Zmc2V0c1xuICAgICAgICBjb25zdCBzdWJ0UmVzID0geWllbGQgcGFpcndpc2VPcFNwYXJzZShhZGRSZXMucmVzdWx0S25uSW5kZXhlcywgYWRkUmVzLnJlc3VsdEtubkRpc3RhbmNlcywgdW5pb25NYXRyaXhPZmZzZXRzLCB0cmFuc3Bvc2VNdWx0UmVzLnJlc3VsdEtubkluZGV4ZXMsIHRyYW5zcG9zZU11bHRSZXMucmVzdWx0S25uRGlzdGFuY2VzLCB1bmlvbk1hdHJpeE9mZnNldHMsIG51bU9mRW50cmllcywgdW5pb25NYXRyaXhPZmZzZXRzLCAnLScpO1xuICAgICAgICBpZiAoc2V0T3BNaXhSYXRpbyAhPT0gMS4wKSB7XG4gICAgICAgICAgICBtdWx0aXBseVNjYWxhcihzdWJ0UmVzLnJlc3VsdEtubkRpc3RhbmNlcywgc2V0T3BNaXhSYXRpbyk7XG4gICAgICAgICAgICBtdWx0aXBseVNjYWxhcih0cmFuc3Bvc2VNdWx0UmVzLnJlc3VsdEtubkRpc3RhbmNlcywgMS4wIC0gc2V0T3BNaXhSYXRpbyk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBwYWlyd2lzZU9wU3BhcnNlKHN1YnRSZXMucmVzdWx0S25uSW5kZXhlcywgc3VidFJlcy5yZXN1bHRLbm5EaXN0YW5jZXMsIHVuaW9uTWF0cml4T2Zmc2V0cywgdHJhbnNwb3NlTXVsdFJlcy5yZXN1bHRLbm5JbmRleGVzLCB0cmFuc3Bvc2VNdWx0UmVzLnJlc3VsdEtubkRpc3RhbmNlcywgdW5pb25NYXRyaXhPZmZzZXRzLCBudW1PZkVudHJpZXMsIHVuaW9uTWF0cml4T2Zmc2V0cywgJysnKTtcbiAgICAgICAgICAgIHJldHVybiB7IHJlcywgdW5pb25NYXRyaXhPZmZzZXRzIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgcmVzOiBzdWJ0UmVzLCB1bmlvbk1hdHJpeE9mZnNldHMsIHVuaW9uU2l6ZXM6IHVuaW9uSW5mby5yZXN1bHRVbmlvblNpemVzQXJyYXkgfTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZ1enp5LXNpbXBsaWNhbC1zZXQuanMubWFwIiwiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtubk1hdHJpeE9wSW5mb1dHU0wodGhyZWFkc1Blcldvcmtncm91cERpbSwgdGhyZWFkc1BlcllEaW1lbnNpb24sIGVudHJ5TGVuLCBrbm5TaXplID0gMTUpIHtcbiAgICByZXR1cm4gYFxuXG4gICAgICAgIEBncm91cCgwKSBAYmluZGluZygwKSB2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4ga25uSW5kZXhlczogYXJyYXk8YXJyYXk8aTMyLCAke2tublNpemV9PiwgJHtlbnRyeUxlbn0+O1xuICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMSkgdmFyPHN0b3JhZ2UsIHJlYWRfd3JpdGU+IHJlc1RyYW5zcG9zZWRTaXplczogYXJyYXk8YXRvbWljPHUzMj4sICR7ZW50cnlMZW59PjtcbiAgICAgICAgLy8gdGhpcyBhcnJheSB3aWxsIHN0b3JlIHRoZSB1bmlvbiBvZiBrbm4gYW5kIGl0cyB0cmFuc3Bvc2Ugc2l6ZXMgcGVyIGluZGV4LiBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8ga25uU2l6ZSBlYWNoLlxuICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMikgdmFyPHN0b3JhZ2UsIHJlYWRfd3JpdGU+IHJlc1VuaW9uTWF0cml4U2l6ZXM6IGFycmF5PGF0b21pYzx1MzI+LCAke2VudHJ5TGVufT47XG5cbiAgICAgICAgQGNvbXB1dGUgQHdvcmtncm91cF9zaXplKCR7dGhyZWFkc1Blcldvcmtncm91cERpbX0sICR7dGhyZWFkc1Blcldvcmtncm91cERpbX0pIGZuIGNvdW50VHJhbnNwb3NlZENvbHMoXG4gICAgICAgICAgICBAYnVpbHRpbihnbG9iYWxfaW52b2NhdGlvbl9pZCkgaWQ6IHZlYzM8dTMyPixcbiAgICAgICAgICkge1xuICAgICAgICAgICAgbGV0IGNvbDogdTMyID0gaWQueDtcbiAgICAgICAgICAgIGxldCByb3c6IHUzMiA9IGlkLnk7XG4gICAgICAgICAgICBsZXQgd29ya2luZ0luZGV4OiB1MzIgPSByb3cgKiAke3RocmVhZHNQZXJZRGltZW5zaW9ufSArIGNvbDtcblxuICAgICAgICAgICAgaWYgKHdvcmtpbmdJbmRleCA+PSAke2VudHJ5TGVufSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHtrbm5TaXplfXU7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvdGhlckluZGV4OiBpMzIgPSBrbm5JbmRleGVzW3dvcmtpbmdJbmRleF1baV07XG4gICAgICAgICAgICAgICAgaWYgKG90aGVySW5kZXggIT0gLTEgJiYgb3RoZXJJbmRleCA8ICR7ZW50cnlMZW59KSB7XG4gICAgICAgICAgICAgICAgICAgIGF0b21pY0FkZCgmcmVzVHJhbnNwb3NlZFNpemVzW290aGVySW5kZXhdLCAxdSk7XG4gICAgICAgICAgICAgICAgICAgIGF0b21pY0FkZCgmcmVzVW5pb25NYXRyaXhTaXplc1tvdGhlckluZGV4XSwgMXUpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgb3RoZXJJbmRleGVzID0gJmtubkluZGV4ZXNbb3RoZXJJbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaiA9IDB1OyBqIDwgJHtrbm5TaXplfTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCpvdGhlckluZGV4ZXMpW2pdID09IGkzMih3b3JraW5nSW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRvbWljU3ViKCZyZXNVbmlvbk1hdHJpeFNpemVzW3dvcmtpbmdJbmRleF0sIDF1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBzYW1lIGlzIGZvdW5kIGluIG90aGVyIGFycmF5LCBkZWNyZW1lbnQgYnkgb25lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgICB9XG4gICAgYDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWtubi1zcGFyc2UtaW5mby53Z3NsLmpzLm1hcCIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgZ2V0R1BVRGV2aWNlIH0gZnJvbSAnLi4vZ2V0R1BVRGV2aWNlJztcbmltcG9ydCB7IHNtb290aEtOTkRpc3RhbmNlV0dTTCB9IGZyb20gJy4vd2dzbC9zbW9vdGgta25uLWRpc3RhbmNlLndnc2wnO1xuZXhwb3J0IGZ1bmN0aW9uIHNtb290aEtOTkRpc3RhbmNlKGtubkRpc3RhbmNlcywgbk5laWdoYm9ycyA9IDE1LCBsb2NhbENvbm5lY3Rpdml0eSA9IDEuMCwgbkl0ZXIgPSA2NCwgYmFuZHdpZHRoID0gMS4wKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdGhyZWFkc1Blcldvcmtncm91cERpbSA9IDEwO1xuICAgICAgICBjb25zdCB0aHJlYWRzUGVyV29ya2dyb3VwID0gdGhyZWFkc1Blcldvcmtncm91cERpbSAqIHRocmVhZHNQZXJXb3JrZ3JvdXBEaW07XG4gICAgICAgIGNvbnN0IG51bU9mRW50cmllcyA9IGtubkRpc3RhbmNlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkV29ya2dyb3VwcyA9IE1hdGguY2VpbChudW1PZkVudHJpZXMgLyB0aHJlYWRzUGVyV29ya2dyb3VwKTtcbiAgICAgICAgY29uc3QgbnVtT2ZXb3JrZ3JvdXBzUGVyRGltID0gTWF0aC5jZWlsKE1hdGguc3FydChyZXF1aXJlZFdvcmtncm91cHMpKTtcbiAgICAgICAgY29uc3QgcHJvY2Vzc1dnc2wgPSBzbW9vdGhLTk5EaXN0YW5jZVdHU0wodGhyZWFkc1Blcldvcmtncm91cERpbSwgdGhyZWFkc1Blcldvcmtncm91cERpbSAqIG51bU9mV29ya2dyb3Vwc1BlckRpbSwga25uRGlzdGFuY2VzLCBuTmVpZ2hib3JzLCBsb2NhbENvbm5lY3Rpdml0eSwgbkl0ZXIsIGJhbmR3aWR0aCk7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlQnVmZmVyMzJTaXplID0gbnVtT2ZFbnRyaWVzICoga25uRGlzdGFuY2VzWzBdLmxlbmd0aDtcbiAgICAgICAgLy8gY29uc3QgZmxhdERpc3RhbmNlQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGRpc3RhbmNlQnVmZmVyMzJTaXplKTtcbiAgICAgICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBrbm5EaXN0YW5jZXMubGVuZ3RoOyBpICsrKSB7XG4gICAgICAgIC8vICAgICBmbGF0RGlzdGFuY2VBcnJheS5zZXQoa25uRGlzdGFuY2VzW2ldLCBpICoga25uRGlzdGFuY2VzW2ldLmxlbmd0aCk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgY29uc3QgZGV2aWNlID0geWllbGQgZ2V0R1BVRGV2aWNlKCk7XG4gICAgICAgIGlmIChkZXZpY2UgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgcmVzdWx0U2lnbWFzID0gbmV3IEZsb2F0MzJBcnJheShudW1PZkVudHJpZXMpO1xuICAgICAgICBjb25zdCByZXN1bHRSaG9zID0gbmV3IEZsb2F0MzJBcnJheShudW1PZkVudHJpZXMpO1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtcbiAgICAgICAgICAgIGxhYmVsOiAnc2lnbWFSaG9DYWx1bGF0aW9uJyxcbiAgICAgICAgICAgIGNvZGU6IHByb2Nlc3NXZ3NsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoe1xuICAgICAgICAgICAgbGFiZWw6ICdzaWdtYVJob1BpcGVsaW5lJyxcbiAgICAgICAgICAgIGxheW91dDogJ2F1dG8nLFxuICAgICAgICAgICAgY29tcHV0ZToge1xuICAgICAgICAgICAgICAgIG1vZHVsZSxcbiAgICAgICAgICAgICAgICBlbnRyeVBvaW50OiAnc21vb3RoS05ORGlzdGFuY2UnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlc0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xuICAgICAgICAgICAgbGFiZWw6ICdkaXN0YW5jZSBidWZmZXInLFxuICAgICAgICAgICAgc2l6ZTogZGlzdGFuY2VCdWZmZXIzMlNpemUgKiA0LFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfU1JDIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCxcbiAgICAgICAgICAgIG1hcHBlZEF0Q3JlYXRpb246IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtYXBwZWREaXN0YW5jZUJ1ZmZlciA9IGRpc3RhbmNlc0J1ZmZlci5nZXRNYXBwZWRSYW5nZSgpO1xuICAgICAgICBjb25zdCBtYXBwZWREaXN0YW5jZUFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShtYXBwZWREaXN0YW5jZUJ1ZmZlcik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga25uRGlzdGFuY2VzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgbWFwcGVkRGlzdGFuY2VBcnJheS5zZXQoa25uRGlzdGFuY2VzW2ldLCBpICoga25uRGlzdGFuY2VzW2ldLmxlbmd0aCk7XG4gICAgICAgIGRpc3RhbmNlc0J1ZmZlci51bm1hcCgpO1xuICAgICAgICBjb25zdCBidWZmZXJTaWdtYXMgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAnYnVmZmVyIHNpZ21hcycsXG4gICAgICAgICAgICBzaXplOiBudW1PZkVudHJpZXMgKiA0LFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJ1ZmZlclJob3MgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAnYnVmZmVyIFJob3MnLFxuICAgICAgICAgICAgc2l6ZTogbnVtT2ZFbnRyaWVzICogNCxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkMsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKHtcbiAgICAgICAgICAgIGxhYmVsOiAnYmluZEdyb3VwIGZvciBzaWdtYXJobyBidWZmZXJzJyxcbiAgICAgICAgICAgIGxheW91dDogcGlwZWxpbmUuZ2V0QmluZEdyb3VwTGF5b3V0KDApLFxuICAgICAgICAgICAgZW50cmllczogW1xuICAgICAgICAgICAgICAgIHsgYmluZGluZzogMCwgcmVzb3VyY2U6IHsgYnVmZmVyOiBidWZmZXJTaWdtYXMgfSB9LFxuICAgICAgICAgICAgICAgIHsgYmluZGluZzogMSwgcmVzb3VyY2U6IHsgYnVmZmVyOiBidWZmZXJSaG9zIH0gfSxcbiAgICAgICAgICAgICAgICB7IGJpbmRpbmc6IDIsIHJlc291cmNlOiB7IGJ1ZmZlcjogZGlzdGFuY2VzQnVmZmVyIH0gfSxcbiAgICAgICAgICAgICAgICAvLyB7IGJpbmRpbmc6IDQsIHJlc291cmNlOiB7IGJ1ZmZlcjogYXJyYXlTaXplc0J1ZmZlciB9IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcih7XG4gICAgICAgICAgICBsYWJlbDogJ3NpZ21hcmhvIGVuY29kZXInLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFzcyA9IGVuY29kZXIuYmVnaW5Db21wdXRlUGFzcyh7XG4gICAgICAgICAgICBsYWJlbDogJ3NpZ21hcmhvIGNvbXB1dGUgcGFzcycsXG4gICAgICAgIH0pO1xuICAgICAgICBwYXNzLnNldFBpcGVsaW5lKHBpcGVsaW5lKTtcbiAgICAgICAgcGFzcy5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTtcbiAgICAgICAgcGFzcy5kaXNwYXRjaFdvcmtncm91cHMobnVtT2ZXb3JrZ3JvdXBzUGVyRGltLCBudW1PZldvcmtncm91cHNQZXJEaW0pO1xuICAgICAgICBwYXNzLmVuZCgpO1xuICAgICAgICBjb25zdCByZXN1bHRCdWZmZXJSaG9zID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG4gICAgICAgICAgICBsYWJlbDogJ3Jlc3VsdCBidWZmZXIgcmhvcycsXG4gICAgICAgICAgICBzaXplOiBidWZmZXJSaG9zLnNpemUsXG4gICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUQgfCBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdEJ1ZmZlclNpZ21hcyA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xuICAgICAgICAgICAgbGFiZWw6ICdyZXN1bHQgYnVmZmVyIHNpZ21hcycsXG4gICAgICAgICAgICBzaXplOiBidWZmZXJTaWdtYXMuc2l6ZSxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRCB8IEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNULFxuICAgICAgICB9KTtcbiAgICAgICAgZW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyUmhvcywgMCwgcmVzdWx0QnVmZmVyUmhvcywgMCwgcmVzdWx0QnVmZmVyUmhvcy5zaXplKTtcbiAgICAgICAgZW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyU2lnbWFzLCAwLCByZXN1bHRCdWZmZXJTaWdtYXMsIDAsIHJlc3VsdEJ1ZmZlclNpZ21hcy5zaXplKTtcbiAgICAgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGVuY29kZXIuZmluaXNoKCk7XG4gICAgICAgIGRldmljZS5xdWV1ZS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTtcbiAgICAgICAgeWllbGQgZGV2aWNlLnF1ZXVlLm9uU3VibWl0dGVkV29ya0RvbmUoKTtcbiAgICAgICAgeWllbGQgcmVzdWx0QnVmZmVyUmhvcy5tYXBBc3luYyhHUFVNYXBNb2RlLlJFQUQpO1xuICAgICAgICB5aWVsZCByZXN1bHRCdWZmZXJTaWdtYXMubWFwQXN5bmMoR1BVTWFwTW9kZS5SRUFEKTtcbiAgICAgICAgcmVzdWx0Umhvcy5zZXQobmV3IEZsb2F0MzJBcnJheShyZXN1bHRCdWZmZXJSaG9zLmdldE1hcHBlZFJhbmdlKCkpKTtcbiAgICAgICAgcmVzdWx0U2lnbWFzLnNldChuZXcgRmxvYXQzMkFycmF5KHJlc3VsdEJ1ZmZlclNpZ21hcy5nZXRNYXBwZWRSYW5nZSgpKSk7XG4gICAgICAgIHJlc3VsdEJ1ZmZlclJob3MudW5tYXAoKTtcbiAgICAgICAgcmVzdWx0QnVmZmVyU2lnbWFzLnVubWFwKCk7XG4gICAgICAgIGRpc3RhbmNlc0J1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIGJ1ZmZlclNpZ21hcy5kZXN0cm95KCk7XG4gICAgICAgIGJ1ZmZlclJob3MuZGVzdHJveSgpO1xuICAgICAgICByZXN1bHRCdWZmZXJSaG9zLmRlc3Ryb3koKTtcbiAgICAgICAgcmVzdWx0QnVmZmVyU2lnbWFzLmRlc3Ryb3koKTtcbiAgICAgICAgcmV0dXJuIHsgcmVzdWx0UmhvcywgcmVzdWx0U2lnbWFzIH07XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zbW9vdGgta25uLWRpc3RhbmNlLmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBzbW9vdGhLTk5EaXN0YW5jZVdHU0wodGhyZWFkc1Blcldvcmtncm91cERpbSA9IDEwLCB0aHJlYWRzUGVyWURpbWVuc2lvbiwga25uRGlzdGFuY2VzLCBuTmVpZ2hib3JzID0gMTUsIGxvY2FsQ29ubmVjdGl2aXR5ID0gMS4wLCBuSXRlciA9IDY0LCBiYW5kd2lkdGggPSAxLjApIHtcbiAgICBjb25zdCBudW1PZkVudHJpZXMgPSBrbm5EaXN0YW5jZXMubGVuZ3RoO1xuICAgIGxldCBtZWFuRGlzdGFuY2VzU3VtID0gMC4wO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtT2ZFbnRyaWVzOyBpKyspIHtcbiAgICAgICAgbGV0IGN1cnJlbnRNZWFuID0gMC4wO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG5OZWlnaGJvcnM7IGorKylcbiAgICAgICAgICAgIGN1cnJlbnRNZWFuICs9IGtubkRpc3RhbmNlc1tpXVtqXTtcbiAgICAgICAgbWVhbkRpc3RhbmNlc1N1bSArPSBjdXJyZW50TWVhbiAvIG5OZWlnaGJvcnM7XG4gICAgfVxuICAgIGNvbnN0IG1lYW5EaXN0YW5jZXMgPSBtZWFuRGlzdGFuY2VzU3VtIC8gbnVtT2ZFbnRyaWVzO1xuICAgIGNvbnN0IHRhcmdldCA9IE1hdGgubG9nKG5OZWlnaGJvcnMpIC8gTWF0aC5sb2coMikgKiBiYW5kd2lkdGg7XG4gICAgcmV0dXJuIGAgIFxuICAgICAgICB2YXI8cHJpdmF0ZT4gU01PT1RIX0tfVE9MRVJBTkNFOiBmMzIgPSAxZS01O1xuICAgICAgICB2YXI8cHJpdmF0ZT4gTUlOX0tfRElTVF9TQ0FMRTogZjMyID0gMWUtMztcbiAgICAgICAgdmFyPHByaXZhdGU+IG5OZWlnaGJvcnM6IHUzMiA9ICR7bk5laWdoYm9yc307XG4gICAgICAgIHZhcjxwcml2YXRlPiBsb2NhbENvbm5lY3Rpdml0eTogZjMyID0gJHtsb2NhbENvbm5lY3Rpdml0eX07IFxuICAgICAgICB2YXI8cHJpdmF0ZT4gbkl0ZXI6IHUzMiA9ICR7bkl0ZXJ9O1xuICAgICAgICB2YXI8cHJpdmF0ZT4gYmFuZHdpZHRoOiB1MzIgPSAke2JhbmR3aWR0aH07XG4gICAgICAgIHZhcjxwcml2YXRlPiBtZWFuRGlzdGFuY2VzOiBmMzIgPSAke21lYW5EaXN0YW5jZXN9O1xuICAgICAgICB2YXI8cHJpdmF0ZT4gdGFyZ2V0VmFsdWU6IGYzMiA9ICR7dGFyZ2V0fTtcbiAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKDApIHZhcjxzdG9yYWdlLCByZWFkX3dyaXRlPiBzaWdtYXM6IGFycmF5PGYzMiwgJHtudW1PZkVudHJpZXN9PjtcbiAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKDEpIHZhcjxzdG9yYWdlLCByZWFkX3dyaXRlPiByaG9zOiBhcnJheTxmMzIsICR7bnVtT2ZFbnRyaWVzfT47XG4gICAgICAgIEBncm91cCgwKSBAYmluZGluZygyKSB2YXI8c3RvcmFnZSwgcmVhZD4gZGlzdGFuY2VzOiBhcnJheTxhcnJheTxmMzIsICR7bk5laWdoYm9yc30+LCAke251bU9mRW50cmllc30+O1xuICAgICAgICBAY29tcHV0ZSBAd29ya2dyb3VwX3NpemUoJHt0aHJlYWRzUGVyV29ya2dyb3VwRGltfSwgJHt0aHJlYWRzUGVyV29ya2dyb3VwRGltfSkgZm4gc21vb3RoS05ORGlzdGFuY2UoXG4gICAgICAgICAgICBAYnVpbHRpbihnbG9iYWxfaW52b2NhdGlvbl9pZCkgaWQ6IHZlYzM8dTMyPixcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgY29sOiB1MzIgPSBpZC54O1xuICAgICAgICAgICAgbGV0IHJvdzogdTMyID0gaWQueTtcbiAgICAgICAgICAgIGxldCB3b3JraW5nSW5kZXg6IHUzMiA9IHJvdyAqICR7dGhyZWFkc1BlcllEaW1lbnNpb259ICsgY29sO1xuXG4gICAgICAgICAgICBpZiAod29ya2luZ0luZGV4ID49ICR7bnVtT2ZFbnRyaWVzfSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGxvOiBmMzIgPSAwLjA7XG4gICAgICAgICAgICB2YXIgaGk6IGYzMiA9IDEuMGUrMzA7IC8vIHRyZWF0ZWQgYXMgSW5maW5pdHlcbiAgICAgICAgICAgIHZhciBtaWQ6IGYzMiA9IDEuMDtcblxuICAgICAgICAgICAgdmFyIG5vblplcm9EaXN0czogYXJyYXk8ZjMyLCAke25OZWlnaGJvcnN9PjtcbiAgICAgICAgICAgIHZhciBub25aZXJvRGlzdHNTaXplOiB1MzIgPSAwO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDB1OyBqIDwgbk5laWdoYm9yczsgaiA9IGogKyAxdSkge1xuICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZXNbd29ya2luZ0luZGV4XVtqXSA+IDAuMCkge1xuICAgICAgICAgICAgICAgICAgICBub25aZXJvRGlzdHNbbm9uWmVyb0Rpc3RzU2l6ZV0gPSBkaXN0YW5jZXNbd29ya2luZ0luZGV4XVtqXTtcbiAgICAgICAgICAgICAgICAgICAgbm9uWmVyb0Rpc3RzU2l6ZSA9IG5vblplcm9EaXN0c1NpemUgKyAxdTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmMzIobm9uWmVyb0Rpc3RzU2l6ZSkgPj0gbG9jYWxDb25uZWN0aXZpdHkpIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5kZXg6IHUzMiA9IHUzMihmbG9vcihsb2NhbENvbm5lY3Rpdml0eSkpO1xuICAgICAgICAgICAgICAgIGxldCBpbnRlcnBvbGF0aW9uOiBmMzIgPSBsb2NhbENvbm5lY3Rpdml0eSAtIGYzMihpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByaG9zW3dvcmtpbmdJbmRleF0gPSBub25aZXJvRGlzdHNbaW5kZXggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGludGVycG9sYXRpb24gPiBTTU9PVEhfS19UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJob3Nbd29ya2luZ0luZGV4XSArPSBpbnRlcnBvbGF0aW9uICogKG5vblplcm9EaXN0c1tpbmRleF0gLSBub25aZXJvRGlzdHNbaW5kZXggLSAxXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJob3Nbd29ya2luZ0luZGV4XSA9IGludGVycG9sYXRpb24gKiBub25aZXJvRGlzdHNbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobm9uWmVyb0Rpc3RzU2l6ZSA+IDB1KSB7XG4gICAgICAgICAgICAgICAgdmFyIG1heERpc3Q6IGYzMiA9IDAuMDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMHU7IGogPCBub25aZXJvRGlzdHNTaXplOyBqID0gaiArIDF1KSB7XG4gICAgICAgICAgICAgICAgICAgIG1heERpc3QgPSBtYXgobm9uWmVyb0Rpc3RzW2pdLCBtYXhEaXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmhvc1t3b3JraW5nSW5kZXhdID0gbWF4RGlzdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgbiA9IDB1OyBuIDwgbkl0ZXI7IG4gPSBuICsgMXUpIHtcbiAgICAgICAgICAgICAgICB2YXIgcHN1bTogZjMyID0gMC4wO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAxdTsgaiA8ICR7bk5laWdoYm9yc307IGogPSBqICsgMXUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQ6IGYzMiA9IGRpc3RhbmNlc1t3b3JraW5nSW5kZXhdW2pdIC0gcmhvc1t3b3JraW5nSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZCA+IDAuMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHN1bSArPSBleHAoMC4wIC0gKGQgLyBtaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBzdW0gKz0gMS4wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGFicyhwc3VtIC0gdGFyZ2V0VmFsdWUpIDwgU01PT1RIX0tfVE9MRVJBTkNFKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwc3VtID4gdGFyZ2V0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaGkgPSBtaWQ7XG4gICAgICAgICAgICAgICAgICAgIG1pZCA9IChsbyArIGhpKSAvIDIuMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvID0gbWlkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGkgPT0gMS4wZSszMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWlkICo9IDIuMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pZCA9IChsbyArIGhpKSAvIDIuMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2lnbWFzW3dvcmtpbmdJbmRleF0gPSBtaWQ7XG5cbiAgICAgICAgICAgIGlmIChyaG9zW3dvcmtpbmdJbmRleF0gPiAwLjApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3VtOiBmMzIgPSAwLjA7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDB1OyBqIDwgJHtuTmVpZ2hib3JzfTsgaiA9IGogKyAxdSkge1xuICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZGlzdGFuY2VzW3dvcmtpbmdJbmRleF1bal07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBtZWFuSXRoRGlzdGFuY2VzOiBmMzIgPSBzdW0gLyAke25OZWlnaGJvcnN9LjA7XG4gICAgICAgICAgICAgICAgaWYgKHNpZ21hc1t3b3JraW5nSW5kZXhdIDwgTUlOX0tfRElTVF9TQ0FMRSAqIG1lYW5JdGhEaXN0YW5jZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2lnbWFzW3dvcmtpbmdJbmRleF0gPSBNSU5fS19ESVNUX1NDQUxFICogbWVhbkl0aERpc3RhbmNlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc2lnbWFzW3dvcmtpbmdJbmRleF0gPCBNSU5fS19ESVNUX1NDQUxFICogbWVhbkRpc3RhbmNlcykge1xuICAgICAgICAgICAgICAgICAgICBzaWdtYXNbd29ya2luZ0luZGV4XSA9IE1JTl9LX0RJU1RfU0NBTEUgKiBtZWFuRGlzdGFuY2VzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIGA7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zbW9vdGgta25uLWRpc3RhbmNlLndnc2wuanMubWFwIiwiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBwZXJmb3JtTWF0cml4T3BzIH0gZnJvbSAnLi9mdXp6eS1zaW1wbGljYWwtc2V0JztcbmltcG9ydCB7IGNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzIH0gZnJvbSAnLi9tZW1iZXJzaGlwLXN0cmVuZ3Rocyc7XG5pbXBvcnQgeyBvcHRpbWl6YXRpb25Mb29wIH0gZnJvbSAnLi9vcHRpbWl6YXRpb24tbG9vcCc7XG5pbXBvcnQgeyBpbml0aWFsaXplU2ltcGxpY2lhbFNldEVtYmVkZGluZyB9IGZyb20gJy4vc2ltcGxpY2FsLXNldC1lbWJlZGRpbmcnO1xuaW1wb3J0IHsgc21vb3RoS05ORGlzdGFuY2UgfSBmcm9tICcuL3Ntb290aC1rbm4tZGlzdGFuY2UnO1xuLy8gVE9ETzogRklUIEFTWU5DIE1FVEhPRCBXSVRIIENBTExCQUNLUyBvbiBlYWNoIHN0ZXBcbi8vIFRPRE86IHJhbmRvbSBmdW5jdGlvbiBwYXNzaW5nIGluIHBhcmFtc1xuZXhwb3J0IGNsYXNzIFVtYXBQYXJhbXMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm5Db21wb25lbnRzID0gMjtcbiAgICAgICAgdGhpcy5nYW1tYSA9IDE7XG4gICAgICAgIHRoaXMuYWxwaGEgPSAxO1xuICAgICAgICB0aGlzLmVudHJ5TGVuID0gMDtcbiAgICAgICAgdGhpcy5uTmVpZ2hib3VycyA9IDE1O1xuICAgICAgICB0aGlzLnNwcmVhZCA9IDE7XG4gICAgICAgIHRoaXMubWluRGlzdCA9IDAuMTtcbiAgICAgICAgdGhpcy5uZWdhdGl2ZVNhbXBsZVJhdGUgPSA1O1xuICAgICAgICB0aGlzLmxvY2FsQ29ubmVjdGl2aXR5ID0gMS4wO1xuICAgICAgICB0aGlzLnNldE9wTWl4UmF0aW8gPSAxLjA7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFdlYkdQVVVNQVAge1xuICAgIGNvbnN0cnVjdG9yKGVudHJ5TGVuLCBwYXJhbXMpIHtcbiAgICAgICAgdGhpcy5wYXJhbXMgPSBuZXcgVW1hcFBhcmFtcygpO1xuICAgICAgICB0aGlzLmtubkluZGV4ZXMgPSBudWxsO1xuICAgICAgICB0aGlzLmtubkRpc3RhbmNlcyA9IG51bGw7XG4gICAgICAgIHRoaXMucmhvcyA9IG51bGw7XG4gICAgICAgIHRoaXMuc2lnbWFzID0gbnVsbDtcbiAgICAgICAgdGhpcy5tZW1iZXJzaGlwU3RyZW5ndGhzID0gbnVsbDtcbiAgICAgICAgdGhpcy5wYXJhbXMuZW50cnlMZW4gPSBlbnRyeUxlbjtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnBhcmFtcywgcGFyYW1zKTtcbiAgICB9XG4gICAgc2V0UHJlY29tcHV0ZWRLTk4oa25uSW5kZXhlcywga25uRGlzdGFuY2VzKSB7XG4gICAgICAgIHRoaXMua25uSW5kZXhlcyA9IGtubkluZGV4ZXM7XG4gICAgICAgIHRoaXMua25uRGlzdGFuY2VzID0ga25uRGlzdGFuY2VzO1xuICAgIH1cbiAgICAvLyBmb3Igbm93LCBub3Qgc3VyZSBpZiB3ZSBzaG91bGQgaW5jbHVkZSB0aGlzLCBtYXliZSB3ZWJHUFUgVU1BUCBzaG91bGQgYmUgc3RhbmQgYWxvbmUuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAvLyAgIGFzeW5jIGNhbGNLTk4oZW50cnlMaXN0OiBTdXBwb3J0ZWRFbnRyeVR5cGVzW11bXSwgZGlzdGFuY2VNZXRyaWNzOiBXRUJHUFVESVNUQU5DRVtdLCBhZ2dyZWdhdGlvbkZ1bmN0aW9uOiBXRUJHU0xBR0dSRUdBVElPTiwgd2VpZ2h0czogbnVtYmVyW10sIG9wdGlvbnM6IHtcbiAgICAvLyAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAvLyAgICAgfVtdKSB7XG4gICAgLy8gICAgIHRyeSB7XG4gICAgLy8gICAgICAgY29uc3Qga25uUmVzID0gYXdhaXQgbXVsdGlDb2xXZWJHUFVLTk4oZW50cnlMaXN0LCB0aGlzLnBhcmFtcy5uTmVpZ2hib3VycywgZGlzdGFuY2VNZXRyaWNzLCBhZ2dyZWdhdGlvbkZ1bmN0aW9uLCB3ZWlnaHRzLCBvcHRpb25zKTtcbiAgICAvLyAgICAgICBpZiAoa25uUmVzKSB7XG4gICAgLy8gICAgICAgICB0aGlzLmtubkluZGV4ZXMgPSBrbm5SZXMua25uSW5kZXhlcztcbiAgICAvLyAgICAgICAgIHRoaXMua25uRGlzdGFuY2VzID0ga25uUmVzLmtubkRpc3RhbmNlcztcbiAgICAvLyAgICAgICB9XG4gICAgLy8gICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGlmICghdGhpcy5rbm5JbmRleGVzIHx8ICF0aGlzLmtubkRpc3RhbmNlcylcbiAgICAvLyAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBjb21wdXRlIGtubiBpbmRleGVzIGFuZCBkaXN0YW5jZXMnKTtcbiAgICAvLyAgIH1cbiAgICAvLyAgIGFzeW5jIGNhbGNLTk5TaW5nbGUoZW50cnlMaXN0OiBTdXBwb3J0ZWRFbnRyeVR5cGVzW10sIGRpc3RhbmNlTWV0cmljczogV0VCR1BVRElTVEFOQ0UsIG9wdGlvbnM/OiB7XG4gICAgLy8gICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgLy8gICAgIH0pIHtcbiAgICAvLyAgICAgaWYgKCFvcHRpb25zKVxuICAgIC8vICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAvLyAgICAgYXdhaXQgdGhpcy5jYWxjS05OKFtlbnRyeUxpc3RdLCBbZGlzdGFuY2VNZXRyaWNzXSwgV0VCR1NMQUdHUkVHQVRJT04uTUFOSEFUVEFOLCBbMV0sIFtvcHRpb25zXSk7XG4gICAgLy8gICB9XG4gICAgaW5pdGlhbGl6ZUZpdCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHlpZWxkIHRoaXMuY2FsY1Ntb290aEtOTkRpc3RhbmNlcygpO1xuICAgICAgICAgICAgeWllbGQgdGhpcy5jYWxjTWVtYmVyc2hpcFN0cmVuZ3RocygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZml0KCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgeWllbGQgdGhpcy5pbml0aWFsaXplRml0KCk7XG4gICAgICAgICAgICBjb25zdCB1bWFwUGFyYW1zID0geWllbGQgdGhpcy5pbml0aWFsaXplU2ltcGxpY2lhbFNldEVtYmVkZGluZygpO1xuICAgICAgICAgICAgaWYgKCF1bWFwUGFyYW1zKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGNvbXB1dGUgdW1hcCBzaW1wbGlzdGljYWwgc2V0IGVtYmVkZGluZ3MnKTtcbiAgICAgICAgICAgIGNvbnN0IHsgaGVhZCwgdGFpbCwgZXBvY2hzUGVyU2FtcGxlLCBlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZSwgYSwgYiwgZ2FtbWEsIGluaXRpYWxBbHBoYSwgbkNvbXBvbmVudHMsIG5FcG9jaHMsIGVudHJ5TGVuIH0gPSB1bWFwUGFyYW1zO1xuICAgICAgICAgICAgY29uc3QgcmVzRW1iZWRkaW5ncyA9IHlpZWxkIG9wdGltaXphdGlvbkxvb3AoaGVhZCwgdGFpbCwgZW50cnlMZW4sIGVwb2Noc1BlclNhbXBsZSwgZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGUsIGluaXRpYWxBbHBoYSwgZ2FtbWEsIGEsIGIsIG5Db21wb25lbnRzLCBuRXBvY2hzLCBlbnRyeUxlbik7XG4gICAgICAgICAgICByZXR1cm4gcmVzRW1iZWRkaW5ncztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNhbGNTbW9vdGhLTk5EaXN0YW5jZXMoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMua25uSW5kZXhlcyB8fCAhdGhpcy5rbm5EaXN0YW5jZXMpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdrbm4gaW5kZXhlcyBhbmQgZGlzdGFuY2VzIG11c3QgYmUgc2V0IGJlZm9yZSBjYWxsaW5nIGZpdCcpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0geWllbGQgc21vb3RoS05ORGlzdGFuY2UodGhpcy5rbm5EaXN0YW5jZXMsIHRoaXMucGFyYW1zLm5OZWlnaGJvdXJzLCB0aGlzLnBhcmFtcy5sb2NhbENvbm5lY3Rpdml0eSwgNjQpO1xuICAgICAgICAgICAgaWYgKCFyZXMpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gY29tcHV0ZSBzbW9vdGgga25uIGRpc3RhbmNlcycpO1xuICAgICAgICAgICAgdGhpcy5yaG9zID0gcmVzLnJlc3VsdFJob3M7XG4gICAgICAgICAgICB0aGlzLnNpZ21hcyA9IHJlcy5yZXN1bHRTaWdtYXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYWxjTWVtYmVyc2hpcFN0cmVuZ3RocygpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5rbm5JbmRleGVzIHx8ICF0aGlzLmtubkRpc3RhbmNlcyB8fCAhdGhpcy5yaG9zIHx8ICF0aGlzLnNpZ21hcylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tubiBpbmRleGVzLCBkaXN0YW5jZXMsIHJob3MsIGFuZCBzaWdtYXMgbXVzdCBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgZml0Jyk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBjb21wdXRlTWVtYmVyc2hpcFN0cmVuZ3Rocyh0aGlzLmtubkRpc3RhbmNlcywgdGhpcy5zaWdtYXMsIHRoaXMucmhvcyk7XG4gICAgICAgICAgICBpZiAoIXJlcylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBjb21wdXRlIG1lbWJlcnNoaXAgc3RyZW5ndGhzJyk7XG4gICAgICAgICAgICB0aGlzLm1lbWJlcnNoaXBTdHJlbmd0aHMgPSByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdXp6eVNpbXBsaWNpYWxTZXQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMua25uSW5kZXhlcyB8fCAhdGhpcy5rbm5EaXN0YW5jZXMgfHwgIXRoaXMucmhvcyB8fCAhdGhpcy5zaWdtYXMgfHwgIXRoaXMubWVtYmVyc2hpcFN0cmVuZ3RocylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tubiBpbmRleGVzLCBkaXN0YW5jZXMsIHJob3MsIHNpZ21hcywgYW5kIG1lbWJlcnNoaXAgc3RyZW5ndGhzIG11c3QgYmUgc2V0IGJlZm9yZSBjYWxsaW5nIGZpdCcpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0geWllbGQgcGVyZm9ybU1hdHJpeE9wcyh0aGlzLmtubkluZGV4ZXMsIHRoaXMubWVtYmVyc2hpcFN0cmVuZ3RocywgdGhpcy5wYXJhbXMuc2V0T3BNaXhSYXRpbyk7XG4gICAgICAgICAgICBpZiAoIXJlcylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBjb21wdXRlIHBhaXJ3aXNlIG11bHRpcGx5IHdpdGggdHJhbnNwb3NlJyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZVNpbXBsaWNpYWxTZXRFbWJlZGRpbmcoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBmdXp6eVNpbXBsaWNpYWxTZXRSZXMgPSB5aWVsZCB0aGlzLmZ1enp5U2ltcGxpY2lhbFNldCgpO1xuICAgICAgICAgICAgaWYgKCFmdXp6eVNpbXBsaWNpYWxTZXRSZXMgfHwgIWZ1enp5U2ltcGxpY2lhbFNldFJlcy5yZXMgfHwgIWZ1enp5U2ltcGxpY2lhbFNldFJlcy51bmlvbk1hdHJpeE9mZnNldHMgfHwgIWZ1enp5U2ltcGxpY2lhbFNldFJlcy51bmlvblNpemVzKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGNvbXB1dGUgZnV6enkgc2ltcGxpY2lhbCBzZXQnKTtcbiAgICAgICAgICAgIGNvbnN0IGVSZXMgPSB5aWVsZCBpbml0aWFsaXplU2ltcGxpY2lhbFNldEVtYmVkZGluZyhmdXp6eVNpbXBsaWNpYWxTZXRSZXMsIHRoaXMucGFyYW1zLmVudHJ5TGVuLCB0aGlzLnBhcmFtcy5zcHJlYWQsIHRoaXMucGFyYW1zLm1pbkRpc3QsIHRoaXMucGFyYW1zLm5lZ2F0aXZlU2FtcGxlUmF0ZSk7XG4gICAgICAgICAgICBpZiAoIWVSZXMpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gY29tcHV0ZSB1bWFwIHNpbXBsaXN0aWNhbCBzZXQgZW1iZWRkaW5ncycpO1xuICAgICAgICAgICAgcmV0dXJuIGVSZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVdFQkdQVS1VTUFQLmpzLm1hcCIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgZ2V0R1BVRGV2aWNlIH0gZnJvbSAnLi4vZ2V0R1BVRGV2aWNlJztcbmltcG9ydCB7IG9wdGltaXplTGF5b3V0V0dTTCB9IGZyb20gJy4vd2dzbC9vcHRpbWl6YXRpb24tbG9vcC53Z3NsJztcbmV4cG9ydCBmdW5jdGlvbiBvcHRpbWl6YXRpb25Mb29wKGhlYWQsIHRhaWwsIGVtYmVkZGluZ1NpemUsIGVwb2Noc1BlclNhbXBsZSwgZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGUsIGluaXRpYWxBbHBoYSwgZ2FtbWEsIGEsIGIsIGRpbSwgbkVwb2NocywgblZlcnRpY2VzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdGhyZWFkc1Blcldvcmtncm91cERpbSA9IDEwO1xuICAgICAgICBjb25zdCB0aHJlYWRzUGVyV29ya2dyb3VwID0gdGhyZWFkc1Blcldvcmtncm91cERpbSAqIHRocmVhZHNQZXJXb3JrZ3JvdXBEaW07XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkV29ya2dyb3VwcyA9IE1hdGguY2VpbChoZWFkLmxlbmd0aCAvIHRocmVhZHNQZXJXb3JrZ3JvdXApO1xuICAgICAgICBjb25zdCBudW1PZldvcmtncm91cHNQZXJEaW0gPSBNYXRoLmNlaWwoTWF0aC5zcXJ0KHJlcXVpcmVkV29ya2dyb3VwcykpO1xuICAgICAgICBjb25zdCB0aHJlYWRzUGVyWURpbWVuc2lvbiA9IHRocmVhZHNQZXJXb3JrZ3JvdXBEaW0gKiBudW1PZldvcmtncm91cHNQZXJEaW07XG4gICAgICAgIGNvbnN0IGRldmljZSA9IHlpZWxkIGdldEdQVURldmljZSgpO1xuICAgICAgICBpZiAoIWRldmljZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgZGl2aXNpb25GYWN0b3IgPSAxMDAwMDAwMDtcbiAgICAgICAgY29uc3QgaGVhZFNpemUgPSBoZWFkLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcHJvY2Vzc1dHU0wgPSBvcHRpbWl6ZUxheW91dFdHU0woaGVhZFNpemUsIGVtYmVkZGluZ1NpemUsIHRydWUsIGluaXRpYWxBbHBoYSwgZ2FtbWEsIGEsIGIsIGRpbSwgbkVwb2NocywgblZlcnRpY2VzLCB0aHJlYWRzUGVyV29ya2dyb3VwRGltLCB0aHJlYWRzUGVyWURpbWVuc2lvbiwgZGl2aXNpb25GYWN0b3IpO1xuICAgICAgICAvLyAgICAgICAgICBoZWFkL3RhaWxcbiAgICAgICAgY29uc3QgbWF0cml4U3RvcmFnZTMyU2l6ZSA9IGhlYWRTaXplICogMjtcbiAgICAgICAgbGV0IHBhZGRlZE1hdHJpeFN0b3JhZ2VTaXplID0gbWF0cml4U3RvcmFnZTMyU2l6ZSAqIDQ7XG4gICAgICAgIGNvbnN0IHJlbWFpbmRlcjEgPSBwYWRkZWRNYXRyaXhTdG9yYWdlU2l6ZSAmIDE1O1xuICAgICAgICBpZiAocmVtYWluZGVyMSAhPT0gMClcbiAgICAgICAgICAgIHBhZGRlZE1hdHJpeFN0b3JhZ2VTaXplICs9IDE2IC0gcmVtYWluZGVyMTtcbiAgICAgICAgY29uc3QgZXBvY2hTdG9yYWdlMzJTaXplID0gaGVhZFNpemUgKiA0O1xuICAgICAgICBsZXQgcGFkZGVkZXBvY2hTdG9yYWdlU2l6ZSA9IGVwb2NoU3RvcmFnZTMyU2l6ZSAqIDQ7XG4gICAgICAgIGNvbnN0IHJlbWFpbmRlcjIgPSBwYWRkZWRlcG9jaFN0b3JhZ2VTaXplICYgMTU7XG4gICAgICAgIGlmIChyZW1haW5kZXIyICE9PSAwKVxuICAgICAgICAgICAgcGFkZGVkZXBvY2hTdG9yYWdlU2l6ZSArPSAxNiAtIHJlbWFpbmRlcjI7XG4gICAgICAgIGNvbnN0IGVtYmVkU3RvcmFnZTMyU2l6ZSA9IGVtYmVkZGluZ1NpemUgKiAyICogMjtcbiAgICAgICAgbGV0IHBhZGRlZGVtYmVkU3RvcmFnZVNpemUgPSBlbWJlZFN0b3JhZ2UzMlNpemUgKiA0O1xuICAgICAgICBjb25zdCByZW1haW5kZXIzID0gcGFkZGVkZW1iZWRTdG9yYWdlU2l6ZSAmIDE1O1xuICAgICAgICBpZiAocmVtYWluZGVyMyAhPT0gMClcbiAgICAgICAgICAgIHBhZGRlZGVtYmVkU3RvcmFnZVNpemUgKz0gMTYgLSByZW1haW5kZXIzO1xuICAgICAgICBjb25zdCBjb211dGVJbmZvMzJTaXplID0gMiArIGhlYWRTaXplO1xuICAgICAgICBsZXQgcGFkZGVkQ29tcHV0ZUluZm9TaXplID0gY29tdXRlSW5mbzMyU2l6ZSAqIDQ7XG4gICAgICAgIGNvbnN0IHJlbWFpbmRlcjQgPSBwYWRkZWRDb21wdXRlSW5mb1NpemUgJiAxNTtcbiAgICAgICAgaWYgKHJlbWFpbmRlcjQgIT09IDApXG4gICAgICAgICAgICBwYWRkZWRDb21wdXRlSW5mb1NpemUgKz0gMTYgLSByZW1haW5kZXI0O1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtcbiAgICAgICAgICAgIGxhYmVsOiAnb3B0aW1pemVTaGFkZXInLFxuICAgICAgICAgICAgY29kZTogcHJvY2Vzc1dHU0xcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZSh7XG4gICAgICAgICAgICBsYWJlbDogJ29wdGltaXplUGlwZWxpbmUnLFxuICAgICAgICAgICAgbGF5b3V0OiAnYXV0bycsXG4gICAgICAgICAgICBjb21wdXRlOiB7XG4gICAgICAgICAgICAgICAgbW9kdWxlLFxuICAgICAgICAgICAgICAgIGVudHJ5UG9pbnQ6ICdvcHRpbWl6ZVN0ZXAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1hdHJpeFN0b3JhZ2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAnbWF0cml4IHN0b3JhZ2UgYnVmZmVyJyxcbiAgICAgICAgICAgIHNpemU6IHBhZGRlZE1hdHJpeFN0b3JhZ2VTaXplLFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfU1JDIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCxcbiAgICAgICAgICAgIG1hcHBlZEF0Q3JlYXRpb246IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtYXRyaXhTdG9yYWdlQXJyYXlCdWZmZXIgPSBtYXRyaXhTdG9yYWdlQnVmZmVyLmdldE1hcHBlZFJhbmdlKCk7XG4gICAgICAgIGNvbnN0IGhlYWRWaWV3ID0gbmV3IFVpbnQzMkFycmF5KG1hdHJpeFN0b3JhZ2VBcnJheUJ1ZmZlciwgMCwgaGVhZFNpemUpO1xuICAgICAgICBoZWFkVmlldy5zZXQoaGVhZCk7XG4gICAgICAgIGNvbnN0IHRhaWxWaWV3ID0gbmV3IFVpbnQzMkFycmF5KG1hdHJpeFN0b3JhZ2VBcnJheUJ1ZmZlciwgaGVhZFNpemUgKiA0LCBoZWFkU2l6ZSk7XG4gICAgICAgIHRhaWxWaWV3LnNldCh0YWlsKTtcbiAgICAgICAgbWF0cml4U3RvcmFnZUJ1ZmZlci51bm1hcCgpO1xuICAgICAgICBjb25zdCBlcG9jaFN0b3JhZ2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAnZXBvY2ggc3RvcmFnZSBidWZmZXInLFxuICAgICAgICAgICAgc2l6ZTogcGFkZGVkZXBvY2hTdG9yYWdlU2l6ZSxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QsXG4gICAgICAgICAgICBtYXBwZWRBdENyZWF0aW9uOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZXBvY2hTdG9yYWdlQXJyYXlCdWZmZXIgPSBlcG9jaFN0b3JhZ2VCdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKTtcbiAgICAgICAgLy8gYWxsIGFyZSBmbG9hdDMyIHNvIHdlIGdldCB0aGUgd2hvbGUgdmlld1xuICAgICAgICBjb25zdCBlcG9jaFN0b3JhZ2VBcnJheVZpZXcgPSBuZXcgRmxvYXQzMkFycmF5KGVwb2NoU3RvcmFnZUFycmF5QnVmZmVyKTtcbiAgICAgICAgLy8gZmlyc3QgZXBvY2hzUGVyU2FtcGxlXG4gICAgICAgIGVwb2NoU3RvcmFnZUFycmF5Vmlldy5zZXQoZXBvY2hzUGVyU2FtcGxlLCAwKTtcbiAgICAgICAgLy9lcG9jaE9mTmV4dFNhbXBsZSwgc2V0IHRvIHNhbWVcbiAgICAgICAgZXBvY2hTdG9yYWdlQXJyYXlWaWV3LnNldChlcG9jaHNQZXJTYW1wbGUsIGhlYWRTaXplKTtcbiAgICAgICAgLy9lcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZVxuICAgICAgICBlcG9jaFN0b3JhZ2VBcnJheVZpZXcuc2V0KGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlLCBoZWFkU2l6ZSAqIDIpO1xuICAgICAgICAvL2Vwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGVcbiAgICAgICAgZXBvY2hTdG9yYWdlQXJyYXlWaWV3LnNldChlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZSwgaGVhZFNpemUgKiAzKTtcbiAgICAgICAgZXBvY2hTdG9yYWdlQnVmZmVyLnVubWFwKCk7XG4gICAgICAgIGNvbnN0IGhlYWRFbWJlZGRpbmdzID0gbmV3IEludDMyQXJyYXkoZW1iZWRkaW5nU2l6ZSAqIGRpbSkubWFwKCgpID0+IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiAyIC0gMSkgKiBkaXZpc2lvbkZhY3RvcikpO1xuICAgICAgICBjb25zdCB0YWlsRW1iZWRkaW5ncyA9IG5ldyBJbnQzMkFycmF5KGVtYmVkZGluZ1NpemUgKiBkaW0pO1xuICAgICAgICB0YWlsRW1iZWRkaW5ncy5zZXQoaGVhZEVtYmVkZGluZ3MpO1xuICAgICAgICBjb25zdCBlbWJlZGRpbmdTdG9yYWdlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG4gICAgICAgICAgICBsYWJlbDogJ2VtYmVkZGluZyBzdG9yYWdlIGJ1ZmZlcicsXG4gICAgICAgICAgICBzaXplOiBwYWRkZWRlbWJlZFN0b3JhZ2VTaXplLFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfU1JDIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCxcbiAgICAgICAgICAgIG1hcHBlZEF0Q3JlYXRpb246IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtYXBwZWRFbWJlZGRpbmdTdG9yYWdlQnVmZmVyID0gZW1iZWRkaW5nU3RvcmFnZUJ1ZmZlci5nZXRNYXBwZWRSYW5nZSgpO1xuICAgICAgICBjb25zdCBtYXBwZWRFbWJlZGRpbmdTdG9yYWdlQXJyYXkgPSBuZXcgSW50MzJBcnJheShtYXBwZWRFbWJlZGRpbmdTdG9yYWdlQnVmZmVyKTtcbiAgICAgICAgbWFwcGVkRW1iZWRkaW5nU3RvcmFnZUFycmF5LnNldChoZWFkRW1iZWRkaW5ncywgMCk7XG4gICAgICAgIG1hcHBlZEVtYmVkZGluZ1N0b3JhZ2VBcnJheS5zZXQoaGVhZEVtYmVkZGluZ3MsIGhlYWRFbWJlZGRpbmdzLmxlbmd0aCk7XG4gICAgICAgIGVtYmVkZGluZ1N0b3JhZ2VCdWZmZXIudW5tYXAoKTtcbiAgICAgICAgY29uc3QgY29tcHV0ZUluZm9CdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAnY29tcHV0ZSBpbmZvIGJ1ZmZlcicsXG4gICAgICAgICAgICBzaXplOiBwYWRkZWRDb21wdXRlSW5mb1NpemUsXG4gICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkMgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNULFxuICAgICAgICAgICAgbWFwcGVkQXRDcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJhbmRvbU51bWJlcnMgPSBuZXcgVWludDMyQXJyYXkoaGVhZFNpemUpLm1hcCgoKSA9PiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBkaXZpc2lvbkZhY3RvcikpO1xuICAgICAgICBjb25zdCBjb21wdXRlSW5mb0FycmF5QnVmZmVyID0gY29tcHV0ZUluZm9CdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKTtcbiAgICAgICAgY29uc3QgY29tcHV0ZUluZm9NYXBwZWRBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoY29tcHV0ZUluZm9BcnJheUJ1ZmZlciwgMCwgMik7XG4gICAgICAgIGNvbXB1dGVJbmZvTWFwcGVkQXJyYXkuc2V0KFswLjAsIGluaXRpYWxBbHBoYV0pO1xuICAgICAgICBjb25zdCByYW5kb21OdW1iZXJzVmlldyA9IG5ldyBVaW50MzJBcnJheShjb21wdXRlSW5mb0FycmF5QnVmZmVyLCA4LCBoZWFkU2l6ZSk7XG4gICAgICAgIHJhbmRvbU51bWJlcnNWaWV3LnNldChyYW5kb21OdW1iZXJzKTtcbiAgICAgICAgY29tcHV0ZUluZm9CdWZmZXIudW5tYXAoKTtcbiAgICAgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cCh7XG4gICAgICAgICAgICBsYWJlbDogJ2JpbmRHcm91cCBmb3Igb3B0aW1pemUnLFxuICAgICAgICAgICAgbGF5b3V0OiBwaXBlbGluZS5nZXRCaW5kR3JvdXBMYXlvdXQoMCksXG4gICAgICAgICAgICBlbnRyaWVzOiBbXG4gICAgICAgICAgICAgICAgeyBiaW5kaW5nOiAwLCByZXNvdXJjZTogeyBidWZmZXI6IG1hdHJpeFN0b3JhZ2VCdWZmZXIgfSB9LFxuICAgICAgICAgICAgICAgIHsgYmluZGluZzogMSwgcmVzb3VyY2U6IHsgYnVmZmVyOiBlcG9jaFN0b3JhZ2VCdWZmZXIgfSB9LFxuICAgICAgICAgICAgICAgIHsgYmluZGluZzogMiwgcmVzb3VyY2U6IHsgYnVmZmVyOiBlbWJlZGRpbmdTdG9yYWdlQnVmZmVyIH0gfSxcbiAgICAgICAgICAgICAgICB7IGJpbmRpbmc6IDMsIHJlc291cmNlOiB7IGJ1ZmZlcjogY29tcHV0ZUluZm9CdWZmZXIgfSB9XG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGFscGhhID0gaW5pdGlhbEFscGhhO1xuICAgICAgICBjb25zdCBvdXRFbWJlZFZpZXdCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAncmVzdWx0IGJ1ZmZlcicsXG4gICAgICAgICAgICBzaXplOiBlbWJlZGRpbmdTdG9yYWdlQnVmZmVyLnNpemUsXG4gICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUQgfCBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCxcbiAgICAgICAgfSk7XG4gICAgICAgIGZvciAobGV0IGl0ZXIgPSAwOyBpdGVyIDwgbkVwb2NoczsgaXRlcisrKSB7XG4gICAgICAgICAgICAvLyB3cml0ZSBuIGFuZCBhbHBoYVxuICAgICAgICAgICAgZGV2aWNlLnF1ZXVlLndyaXRlQnVmZmVyKGNvbXB1dGVJbmZvQnVmZmVyLCAwLCBuZXcgRmxvYXQzMkFycmF5KFtpdGVyLCBhbHBoYV0pLCAwKTtcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnbWF0cml4IG9wcyBlbmNvZGVyJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgcGFzcyA9IGVuY29kZXIuYmVnaW5Db21wdXRlUGFzcyh7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdtYXRyaXggb3BzIGNvbXB1dGUgcGFzcycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBhc3Muc2V0UGlwZWxpbmUocGlwZWxpbmUpO1xuICAgICAgICAgICAgcGFzcy5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTtcbiAgICAgICAgICAgIHBhc3MuZGlzcGF0Y2hXb3JrZ3JvdXBzKG51bU9mV29ya2dyb3Vwc1BlckRpbSwgbnVtT2ZXb3JrZ3JvdXBzUGVyRGltKTtcbiAgICAgICAgICAgIHBhc3MuZW5kKCk7XG4gICAgICAgICAgICAvLyBoZXJlLCB3ZSBjb3B5IHRoZSBoZWFkL3RhaWwgdmlld3MgdG8gdGhlaXIgY29ycmVjdCBwbGFjZXMgaW4gZW1iZWRkaW5ncy5cbiAgICAgICAgICAgIGlmIChpdGVyID09PSBuRXBvY2hzIC0gMSlcbiAgICAgICAgICAgICAgICBlbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihlbWJlZGRpbmdTdG9yYWdlQnVmZmVyLCAwLCBvdXRFbWJlZFZpZXdCdWZmZXIsIDAsIG91dEVtYmVkVmlld0J1ZmZlci5zaXplKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBlbmNvZGVyLmZpbmlzaCgpO1xuICAgICAgICAgICAgZGV2aWNlLnF1ZXVlLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pO1xuICAgICAgICAgICAgeWllbGQgZGV2aWNlLnF1ZXVlLm9uU3VibWl0dGVkV29ya0RvbmUoKTtcbiAgICAgICAgICAgIGFscGhhID0gaW5pdGlhbEFscGhhICogKDEuMCAtIGl0ZXIgLyBuRXBvY2hzKTtcbiAgICAgICAgfVxuICAgICAgICB5aWVsZCBvdXRFbWJlZFZpZXdCdWZmZXIubWFwQXN5bmMoR1BVTWFwTW9kZS5SRUFEKTtcbiAgICAgICAgY29uc3QgcmVzQXJyYXlCdWZmZXIgPSBvdXRFbWJlZFZpZXdCdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKTtcbiAgICAgICAgY29uc3QgaGVhZEVtYmVkZGluZ3NWaWV3ID0gbmV3IEludDMyQXJyYXkocmVzQXJyYXlCdWZmZXIsIDAsIGhlYWRFbWJlZGRpbmdzLmxlbmd0aCk7XG4gICAgICAgIGhlYWRFbWJlZGRpbmdzLnNldChoZWFkRW1iZWRkaW5nc1ZpZXcpO1xuICAgICAgICBvdXRFbWJlZFZpZXdCdWZmZXIudW5tYXAoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGRpbSkuZmlsbChudWxsKS5tYXAoKF8pID0+IG5ldyBGbG9hdDMyQXJyYXkoZW1iZWRkaW5nU2l6ZSkpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVtYmVkZGluZ1NpemU7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkaW07IGorKylcbiAgICAgICAgICAgICAgICByZXN1bHRbal1baV0gPSBoZWFkRW1iZWRkaW5nc1tpICogZGltICsgal0gLyBkaXZpc2lvbkZhY3RvcjtcbiAgICAgICAgfVxuICAgICAgICBtYXRyaXhTdG9yYWdlQnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgZXBvY2hTdG9yYWdlQnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgZW1iZWRkaW5nU3RvcmFnZUJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIGNvbXB1dGVJbmZvQnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgb3V0RW1iZWRWaWV3QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9wdGltaXphdGlvbi1sb29wLmpzLm1hcCIsIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcHRpbWl6ZUxheW91dFdHU0woaGVhZFNpemUsIGVtYmVkU2l6ZSwgbW92ZU90aGVyLCBpbml0aWFsQWxwaGEsIGdhbW1hLCBhLCBiLCBkaW0sIG5FcG9jaHMsIG5WZXJ0aWNlcywgd29ya2dyb3VwRGltLCB0aHJlYWRzUGVyUm93LCBkaXZpc2lvbkZhY3RvciA9IDEwMDAwMCkge1xuICAgIHJldHVybiBgXG4vLyBmaXJzdCBkZWZpbmUgc29tZSBmdW5jdGlvbnNcblxuZm4gckRpc3QoYXIxOiBhcnJheTxmMzIsICR7ZGltfT4sIGFyMjogYXJyYXk8ZjMyLCAke2RpbX0+KSAtPiBmMzIge1xuICAgIHZhciByZXMgPSAwLjA7XG4gICAgZm9yICh2YXIgaTEgPSAwdTsgaTEgPCAke2RpbX07IGkxKyspIHtcbiAgICAgICAgbGV0IGRpZmYgPSBhcjFbaTFdIC0gYXIyW2kxXTtcbiAgICAgICAgcmVzICs9IHBvdyhkaWZmLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZm4gY2xpcCh4OiBmMzIsIGNsaXBWYWx1ZTogZjMyKSAtPiBmMzIge1xuICAgIGlmICh4ID4gY2xpcFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjbGlwVmFsdWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKHggPCAwLjAgLSBjbGlwVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIDAuMCAtIGNsaXBWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHg7XG59XG5cbnZhcjxwcml2YXRlPiByYW5kb21TZWVkSW50OiB1MzIgPSAwO1xudmFyPHByaXZhdGU+IG5WZXJ0aWNlczogdTMyID0gJHtuVmVydGljZXN9O1xudmFyPHByaXZhdGU+IGluaXRpYWxBbHBoYTogZjMyID0gJHtpbml0aWFsQWxwaGF9O1xudmFyPHByaXZhdGU+IGdhbW1hOiBmMzIgPSAke2dhbW1hfTtcbnZhcjxwcml2YXRlPiBhOiBmMzIgPSAke2F9O1xudmFyPHByaXZhdGU+IGI6IGYzMiA9ICR7Yn07XG52YXI8cHJpdmF0ZT4gZGltOiB1MzIgPSAke2RpbX07XG52YXI8cHJpdmF0ZT4gbkVwb2NoczogZjMyID0gJHtuRXBvY2hzfTtcbnZhcjxwcml2YXRlPiBtb3ZlT3RoZXI6IHUzMiAgPSAke21vdmVPdGhlciA9PT0gdHJ1ZSA/IDEgOiAwfTtcblxuZm4gcmFuZG9tKCkgLT4gdTMyIHtcbiAgICByYW5kb21TZWVkSW50ID0gKHJhbmRvbVNlZWRJbnQgXiA2MSkgXiAocmFuZG9tU2VlZEludCA+PiAxNik7XG4gICAgcmFuZG9tU2VlZEludCAqPSA5O1xuICAgIHJhbmRvbVNlZWRJbnQgPSByYW5kb21TZWVkSW50IF4gKHJhbmRvbVNlZWRJbnQgPj4gNCk7XG4gICAgcmFuZG9tU2VlZEludCAqPSAweDI3ZDRlYjJkO1xuICAgIHJhbmRvbVNlZWRJbnQgPSByYW5kb21TZWVkSW50IF4gKHJhbmRvbVNlZWRJbnQgPj4gMTUpO1xuICAgIHJldHVybiByYW5kb21TZWVkSW50O1xufVxuXG5mbiByYW5kSW50KG1heFZhbDogdTMyKSAtPiB1MzIge1xuICAgIGxldCBuZXh0UmFuZG9tTnVtID0gcmFuZG9tKCk7XG4gICAgcmV0dXJuIHUzMihmbG9vcigoZjMyKG5leHRSYW5kb21OdW0pICogKGYzMihtYXhWYWwpIC8gNDI5NDk2NzI5Ni4wKSkpKTtcbn1cblxuc3RydWN0IE1hdHJpeFN0b3JhZ2Uge1xuICAgIGhlYWQ6IGFycmF5PHUzMiwgJHtoZWFkU2l6ZX0+LFxuICAgIHRhaWw6IGFycmF5PHUzMiwgJHtoZWFkU2l6ZX0+LFxufVxuXG5zdHJ1Y3QgRXBvY2hTdG9yYWdlIHtcbiAgICBlcG9jaHNQZXJTYW1wbGU6IGFycmF5PGYzMiwgJHtoZWFkU2l6ZX0+LFxuICAgIGVwb2NoT2ZOZXh0U2FtcGxlOiBhcnJheTxmMzIsICR7aGVhZFNpemV9PixcbiAgICBlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZTogYXJyYXk8ZjMyLCAke2hlYWRTaXplfT4sXG4gICAgZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZTogYXJyYXk8ZjMyLCAke2hlYWRTaXplfT5cbn1cblxuc3RydWN0IEVtYmVkZGluZ1N0b3JhZ2Uge1xuICAgIC8vIGVtYmVkZGluZ3Mgd2lsbCBiZSBpbiByYW5nZSBvZiAtMTAgdG8gMTAsIGFzIGF0b21pY3Mgb25seSBjYW4gc3RvcmUgaTMyIG9yIHUzMiwgd2Ugd2lsbCBzdG9yZSB0aGVtIGFzIGZsb29yKGYzMiAqIDEwMF8wMDApXG4gICAgaGVhZEVtYmVkZGluZ3M6IGFycmF5PGFycmF5PGF0b21pYzxpMzI+LCAke2RpbX0+LCAke2VtYmVkU2l6ZX0+LFxuICAgIHRhaWxFbWJlZGRpbmdzOiBhcnJheTxhcnJheTxhdG9taWM8aTMyPiwgJHtkaW19PiwgJHtlbWJlZFNpemV9PlxufVxuXG5zdHJ1Y3QgQ29tcHV0ZUluZm8ge1xuICAgIG46IGYzMixcbiAgICBhbHBoYTogZjMyLFxuICAgIHJhbmRvbU51bWJlcnM6IGFycmF5PHUzMiwgJHtoZWFkU2l6ZX0+LFxuICAgIC8vdGFpbE9mZnNldHM6IGFycmF5PHUzMiwgJHtlbWJlZFNpemUgKyAxfT5cbn1cbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgdmFyPHN0b3JhZ2UsIHJlYWRfd3JpdGU+IG1hdHJpeFN0b3JhZ2U6IE1hdHJpeFN0b3JhZ2U7XG4gICAgQGdyb3VwKDApIEBiaW5kaW5nKDEpIHZhcjxzdG9yYWdlLCByZWFkX3dyaXRlPiBlcG9jaFN0b3JhZ2U6IEVwb2NoU3RvcmFnZTtcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMikgdmFyPHN0b3JhZ2UsIHJlYWRfd3JpdGU+IGVtYmVkU3RvcmFnZTogRW1iZWRkaW5nU3RvcmFnZTtcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMykgdmFyPHN0b3JhZ2UsIHJlYWRfd3JpdGU+IGNvbXB1dGVJbmZvOiBDb21wdXRlSW5mbztcbiAgICBAY29tcHV0ZSBAd29ya2dyb3VwX3NpemUoJHt3b3JrZ3JvdXBEaW19LCAke3dvcmtncm91cERpbX0pIGZuIG9wdGltaXplU3RlcChcbiAgICAgICAgQGJ1aWx0aW4oZ2xvYmFsX2ludm9jYXRpb25faWQpIGlkOiB2ZWMzPHUzMj4sXG4gICAgICkge1xuICAgICAgICBsZXQgZGl2aXNpb25GYWN0b3I6IGYzMiA9ICR7ZGl2aXNpb25GYWN0b3J9O1xuICAgICAgICBsZXQgY29sOiB1MzIgPSBpZC54O1xuICAgICAgICBsZXQgcm93OiB1MzIgPSBpZC55O1xuICAgICAgICBsZXQgdGhyZWFkSW5kZXg6IHUzMiA9IHJvdyAqICR7dGhyZWFkc1BlclJvd30gKyBjb2w7XG4gICAgICAgIGxldCBjbGlwVmFsdWU6IGYzMiA9IDQuMDtcblxuICAgICAgICBpZiAodGhyZWFkSW5kZXggPj0gJHtoZWFkU2l6ZX0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB3b3JraW5nSW5kZXggPSB0aHJlYWRJbmRleDtcbiAgICAgICAgLy9sZXQgc3RhcnRBdE9mZnNldCA9IGNvbXB1dGVJbmZvLnRhaWxPZmZzZXRzW3RocmVhZEluZGV4XTtcbiAgICAgICAgLy9sZXQgZW5kQXRPZmZzZXQgPSBjb21wdXRlSW5mby50YWlsT2Zmc2V0c1t0aHJlYWRJbmRleCArIDFdO1xuICAgICAgICAvL2ZvciAodmFyIHdvcmtpbmdJbmRleCA9IHN0YXJ0QXRPZmZzZXQ7IHdvcmtpbmdJbmRleCA8IGVuZEF0T2Zmc2V0OyB3b3JraW5nSW5kZXgrKykge1xuICAgICAgICAgICAgcmFuZG9tU2VlZEludCA9IGNvbXB1dGVJbmZvLnJhbmRvbU51bWJlcnNbd29ya2luZ0luZGV4XSAqIHUzMihjb21wdXRlSW5mby5uKTtcblxuICAgICAgICAgICAgbGV0IGVwb2NoT2ZOZXh0U2FtcGxlID0gZXBvY2hTdG9yYWdlLmVwb2NoT2ZOZXh0U2FtcGxlW3dvcmtpbmdJbmRleF07XG4gICAgICAgICAgICBpZiAoZXBvY2hPZk5leHRTYW1wbGUgPiBjb21wdXRlSW5mby5uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgaiA9IG1hdHJpeFN0b3JhZ2UuaGVhZFt3b3JraW5nSW5kZXhdO1xuICAgICAgICAgICAgbGV0IGsgPSBtYXRyaXhTdG9yYWdlLnRhaWxbd29ya2luZ0luZGV4XTtcblxuICAgICAgICAgICAgLy8gYXMgc2FpZCBiZWZvcmUsIHdlIHdpbGwgc3RvcmUgZW1iZWRkaW5ncyBhcyBmbG9vcihmMzIgKiAxMDBfMDAwKVxuICAgICAgICAgICAgdmFyIGN1cnJlbnQ6IGFycmF5PGYzMiwgJHtkaW19PjtcbiAgICAgICAgICAgIHZhciBvdGhlcjogYXJyYXk8ZjMyLCAke2RpbX0+O1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHtkaW19dTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFtpXSA9IGYzMihhdG9taWNMb2FkKCZlbWJlZFN0b3JhZ2UuaGVhZEVtYmVkZGluZ3Nbal1baV0pKSAvIGRpdmlzaW9uRmFjdG9yO1xuICAgICAgICAgICAgICAgIG90aGVyW2ldID0gZjMyKGF0b21pY0xvYWQoJmVtYmVkU3RvcmFnZS50YWlsRW1iZWRkaW5nc1trXVtpXSkpIC8gZGl2aXNpb25GYWN0b3I7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBkaXN0U3F1YXJlZCA9IHJEaXN0KGN1cnJlbnQsIG90aGVyKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGdyYWRDb2VmZjogZjMyID0gMC4wO1xuICAgICAgICAgICAgaWYgKGRpc3RTcXVhcmVkID4gMC4wKSB7XG4gICAgICAgICAgICAgICAgZ3JhZENvZWZmID0gKDAuMCAtIDIuMCkgKiAke2F9ICogJHtifSAqIHBvdyhkaXN0U3F1YXJlZCwgYiAtIDEuMCk7XG4gICAgICAgICAgICAgICAgZ3JhZENvZWZmIC89IChhICogcG93KGRpc3RTcXVhcmVkLCBiKSArIDEuMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBncmFkQnVmZjogYXJyYXk8aTMyLCAke2RpbX0+O1xuICAgICAgICAgICAgZm9yICh2YXIgZCA9IDB1OyBkIDwgJHtkaW19dTsgZCsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGdyYWREID0gY2xpcCgoZ3JhZENvZWZmICogKGN1cnJlbnRbZF0gLSBvdGhlcltkXSkpLCBjbGlwVmFsdWUpO1xuICAgICAgICAgICAgICAgIGxldCB0b0FkZCA9IGdyYWREICogY29tcHV0ZUluZm8uYWxwaGE7XG4gICAgICAgICAgICAgICAgZ3JhZEJ1ZmZbZF0gPSBpMzIoZmxvb3IodG9BZGQgKiBkaXZpc2lvbkZhY3RvcikpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRbZF0gKz0gdG9BZGQ7XG4gICAgICAgICAgICAgICAgb3RoZXJbZF0gLT0gdG9BZGQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAodmFyIGQgPSAwdTsgZCA8ICR7ZGltfXU7IGQrKykge1xuICAgICAgICAgICAgICAgIGF0b21pY0FkZCgmZW1iZWRTdG9yYWdlLmhlYWRFbWJlZGRpbmdzW2pdW2RdLCBncmFkQnVmZltkXSk7XG4gICAgICAgICAgICAgICAgYXRvbWljU3ViKCZlbWJlZFN0b3JhZ2UudGFpbEVtYmVkZGluZ3Nba11bZF0sIGdyYWRCdWZmW2RdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXBvY2hTdG9yYWdlLmVwb2NoT2ZOZXh0U2FtcGxlW3dvcmtpbmdJbmRleF0gKz0gZXBvY2hTdG9yYWdlLmVwb2Noc1BlclNhbXBsZVt3b3JraW5nSW5kZXhdO1xuICAgICAgICAgICAgdmFyIG5OZWdTYW1wbGVzOiBpMzIgPSBpMzIoZmxvb3IoKGNvbXB1dGVJbmZvLm4gLSBlcG9jaFN0b3JhZ2UuZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZVt3b3JraW5nSW5kZXhdKSAvIGVwb2NoU3RvcmFnZS5lcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZVt3b3JraW5nSW5kZXhdKSk7XG5cbiAgICAgICAgICAgIGZvciAodmFyIHAgPSAwaTsgcCA8IG5OZWdTYW1wbGVzOyBwKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgazEgPSByYW5kSW50KG5WZXJ0aWNlcyk7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyMTogYXJyYXk8ZjMyLCAke2RpbX0+O1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7ZGltfXU7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBvdGhlcjFbaV0gPSBmMzIoYXRvbWljTG9hZCgmZW1iZWRTdG9yYWdlLnRhaWxFbWJlZGRpbmdzW2sxXVtpXSkpIC8gZGl2aXNpb25GYWN0b3I7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGRpc3RTcXVhcmVkMSA9IHJEaXN0KGN1cnJlbnQsIG90aGVyMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ3JhZENvZWZmMTogZjMyID0gMC4wO1xuICAgICAgICAgICAgICAgIGlmIChkaXN0U3F1YXJlZDEgPiAwLjApIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JhZENvZWZmMSA9IDIuMCAqIGdhbW1hICogYjtcbiAgICAgICAgICAgICAgICAgICAgZ3JhZENvZWZmMSAvPSAoMC4wMDEgKyBkaXN0U3F1YXJlZDEpICogKGEgKiBwb3coZGlzdFNxdWFyZWQxLCBiKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChqID09IGsxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBncmFkREJ1ZmY6IGFycmF5PGkzMiwgJHtkaW19PjtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBkID0gMHU7IGQgPCAke2RpbX11OyBkKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdyYWREOiBmMzIgPSA0LjA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChncmFkQ29lZmYxID4gMC4wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncmFkRCA9IGNsaXAoZ3JhZENvZWZmMSAqIChjdXJyZW50W2RdIC0gb3RoZXIxW2RdKSwgY2xpcFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGdyYWREQnVmZltkXSA9IGkzMihmbG9vcihncmFkRCAqIGNvbXB1dGVJbmZvLmFscGhhICogZGl2aXNpb25GYWN0b3IpKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAodmFyIGQgPSAwdTsgZCA8ICR7ZGltfXU7IGQrKykge1xuICAgICAgICAgICAgICAgICAgICBhdG9taWNBZGQoJmVtYmVkU3RvcmFnZS5oZWFkRW1iZWRkaW5nc1tqXVtkXSwgZ3JhZERCdWZmW2RdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlcG9jaFN0b3JhZ2UuZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZVt3b3JraW5nSW5kZXhdICs9IGYzMihuTmVnU2FtcGxlcykgKiBlcG9jaFN0b3JhZ2UuZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGVbd29ya2luZ0luZGV4XTtcbiAgICAvL31cbiAgICB9XG5gO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3B0aW1pemF0aW9uLWxvb3Aud2dzbC5qcy5tYXAiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGdldEdQVURldmljZSB9IGZyb20gJy4uL2dldEdQVURldmljZSc7XG5pbXBvcnQgeyBjb21wdXRlTWVtYmVyc2hpcFN0cmVuZ3Roc1dHU0wgfSBmcm9tICcuL3dnc2wvbWVtYmVyc2hpcC1zdHJlbmd0aHMud2dzbCc7XG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU1lbWJlcnNoaXBTdHJlbmd0aHMoa25uRGlzdGFuY2VzLCBzaWdtYXMsIHJob3MpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCB0aHJlYWRzUGVyV29ya2dyb3VwRGltID0gMTA7XG4gICAgICAgIGNvbnN0IHRocmVhZHNQZXJXb3JrZ3JvdXAgPSB0aHJlYWRzUGVyV29ya2dyb3VwRGltICogdGhyZWFkc1Blcldvcmtncm91cERpbTtcbiAgICAgICAgY29uc3QgbnVtT2ZFbnRyaWVzID0ga25uRGlzdGFuY2VzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmVxdWlyZWRXb3JrZ3JvdXBzID0gTWF0aC5jZWlsKG51bU9mRW50cmllcyAvIHRocmVhZHNQZXJXb3JrZ3JvdXApO1xuICAgICAgICBjb25zdCBudW1PZldvcmtncm91cHNQZXJEaW0gPSBNYXRoLmNlaWwoTWF0aC5zcXJ0KHJlcXVpcmVkV29ya2dyb3VwcykpO1xuICAgICAgICBjb25zdCBwcm9jZXNzV2dzbCA9IGNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzV0dTTCh0aHJlYWRzUGVyV29ya2dyb3VwRGltLCB0aHJlYWRzUGVyV29ya2dyb3VwRGltICogbnVtT2ZXb3JrZ3JvdXBzUGVyRGltLCBrbm5EaXN0YW5jZXMsIHNpZ21hcywgcmhvcyk7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlQnVmZmVyMzJTaXplID0gbnVtT2ZFbnRyaWVzICoga25uRGlzdGFuY2VzWzBdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZGV2aWNlID0geWllbGQgZ2V0R1BVRGV2aWNlKCk7XG4gICAgICAgIGlmIChkZXZpY2UgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7XG4gICAgICAgICAgICBsYWJlbDogJ3Jvd3NDb2xzVmFsc0NhbHVsYXRpb24nLFxuICAgICAgICAgICAgY29kZTogcHJvY2Vzc1dnc2xcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZSh7XG4gICAgICAgICAgICBsYWJlbDogJ3Jvd3NDb2xzVmFsc1BpcGVsaW5lJyxcbiAgICAgICAgICAgIGxheW91dDogJ2F1dG8nLFxuICAgICAgICAgICAgY29tcHV0ZToge1xuICAgICAgICAgICAgICAgIG1vZHVsZSxcbiAgICAgICAgICAgICAgICBlbnRyeVBvaW50OiAnY29tcHV0ZU1lbWJlcnNoaXBTdHJlbmd0aHMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJob3MzMlNpemUgPSByaG9zLmxlbmd0aDtcbiAgICAgICAgY29uc3Qgc2lnbWFzMzJTaXplID0gc2lnbWFzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgY29tYmluZWRNZW1iZXJzaGlwU3RyZW5ndGhzSW5mbzMyU2l6ZSA9IHJob3MzMlNpemUgKyBzaWdtYXMzMlNpemUgKyBkaXN0YW5jZUJ1ZmZlcjMyU2l6ZTtcbiAgICAgICAgbGV0IHBhZGRlZENvbWJpbmVkTWVtYmVyc2hpcFN0cnVjdEJ5dGVTaXplID0gY29tYmluZWRNZW1iZXJzaGlwU3RyZW5ndGhzSW5mbzMyU2l6ZSAqIDQ7XG4gICAgICAgIGNvbnN0IHJlbWFpbmRlciA9IHBhZGRlZENvbWJpbmVkTWVtYmVyc2hpcFN0cnVjdEJ5dGVTaXplICYgMTU7XG4gICAgICAgIGlmIChyZW1haW5kZXIgIT0gMClcbiAgICAgICAgICAgIHBhZGRlZENvbWJpbmVkTWVtYmVyc2hpcFN0cnVjdEJ5dGVTaXplICs9IDE2IC0gcmVtYWluZGVyO1xuICAgICAgICAvLyBpbnB1dCBwYXJhbXNcbiAgICAgICAgY29uc3QgbWVtYmVyc2hpcFN0cmVuZ3Roc0luZm9CdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAnaW5mbyBidWZmZXInLFxuICAgICAgICAgICAgc2l6ZTogcGFkZGVkQ29tYmluZWRNZW1iZXJzaGlwU3RydWN0Qnl0ZVNpemUsXG4gICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkMgfFxuICAgICAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNULFxuICAgICAgICAgICAgbWFwcGVkQXRDcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1hcHBlZEluZm9CdWZmZXIgPSBtZW1iZXJzaGlwU3RyZW5ndGhzSW5mb0J1ZmZlci5nZXRNYXBwZWRSYW5nZSgpO1xuICAgICAgICBjb25zdCBtYXBwZWRJbmZvQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KG1hcHBlZEluZm9CdWZmZXIpO1xuICAgICAgICAvLyBmaXJzdCBzZXQga25uIGRpc3RhbmNlc1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtubkRpc3RhbmNlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIG1hcHBlZEluZm9BcnJheS5zZXQoa25uRGlzdGFuY2VzW2ldLCBpICoga25uRGlzdGFuY2VzW2ldLmxlbmd0aCk7XG4gICAgICAgIGxldCBvZmZzZXQgPSBrbm5EaXN0YW5jZXNbMF0ubGVuZ3RoICoga25uRGlzdGFuY2VzLmxlbmd0aDtcbiAgICAgICAgLy8gbm93IHNldCBzaWdtYXNcbiAgICAgICAgbWFwcGVkSW5mb0FycmF5LnNldChzaWdtYXMsIG9mZnNldCk7XG4gICAgICAgIG9mZnNldCArPSBzaWdtYXMubGVuZ3RoO1xuICAgICAgICAvLyBub3cgc2V0IHJob3NcbiAgICAgICAgbWFwcGVkSW5mb0FycmF5LnNldChyaG9zLCBvZmZzZXQpO1xuICAgICAgICBtZW1iZXJzaGlwU3RyZW5ndGhzSW5mb0J1ZmZlci51bm1hcCgpO1xuICAgICAgICBjb25zdCBrbm5EaXN0YW5jZXNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHtcbiAgICAgICAgICAgIGxhYmVsOiAna25uIGRpc3RhbmNlIGJ1ZmZlcicsXG4gICAgICAgICAgICBzaXplOiBrbm5EaXN0YW5jZXNbMF0ubGVuZ3RoICoga25uRGlzdGFuY2VzLmxlbmd0aCAqIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHxcbiAgICAgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyB8XG4gICAgICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKHtcbiAgICAgICAgICAgIGxhYmVsOiAnYmluZEdyb3VwIGZvciBtZW1iZXJzaGlwIHN0cmhlZ3RocyBidWZmZXJzJyxcbiAgICAgICAgICAgIGxheW91dDogcGlwZWxpbmUuZ2V0QmluZEdyb3VwTGF5b3V0KDApLFxuICAgICAgICAgICAgZW50cmllczogW1xuICAgICAgICAgICAgICAgIHsgYmluZGluZzogMCwgcmVzb3VyY2U6IHsgYnVmZmVyOiBtZW1iZXJzaGlwU3RyZW5ndGhzSW5mb0J1ZmZlciB9IH0sXG4gICAgICAgICAgICAgICAgeyBiaW5kaW5nOiAxLCByZXNvdXJjZTogeyBidWZmZXI6IGtubkRpc3RhbmNlc0J1ZmZlciB9IH0sXG4gICAgICAgICAgICAgICAgLy8geyBiaW5kaW5nOiA0LCByZXNvdXJjZTogeyBidWZmZXI6IGFycmF5U2l6ZXNCdWZmZXIgfSB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoe1xuICAgICAgICAgICAgbGFiZWw6ICdtZW1iZXJzaGlwIHN0cmVuZ3RocyBlbmNvZGVyJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhc3MgPSBlbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3Moe1xuICAgICAgICAgICAgbGFiZWw6ICdtZW1iZXJzaGlwIHN0cmVuZ3RocyBjb21wdXRlIHBhc3MnLFxuICAgICAgICB9KTtcbiAgICAgICAgcGFzcy5zZXRQaXBlbGluZShwaXBlbGluZSk7XG4gICAgICAgIHBhc3Muc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7XG4gICAgICAgIHBhc3MuZGlzcGF0Y2hXb3JrZ3JvdXBzKG51bU9mV29ya2dyb3Vwc1BlckRpbSwgbnVtT2ZXb3JrZ3JvdXBzUGVyRGltKTtcbiAgICAgICAgcGFzcy5lbmQoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0QnVmZmVyRGlzdGFuY2VzID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG4gICAgICAgICAgICBsYWJlbDogJ3Jlc3VsdCBidWZmZXIgZGlzdGFuY2VzJyxcbiAgICAgICAgICAgIHNpemU6IGtubkRpc3RhbmNlc0J1ZmZlci5zaXplLFxuICAgICAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEIHwgR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QsXG4gICAgICAgIH0pO1xuICAgICAgICBlbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihrbm5EaXN0YW5jZXNCdWZmZXIsIDAsIHJlc3VsdEJ1ZmZlckRpc3RhbmNlcywgMCwgcmVzdWx0QnVmZmVyRGlzdGFuY2VzLnNpemUpO1xuICAgICAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gZW5jb2Rlci5maW5pc2goKTtcbiAgICAgICAgZGV2aWNlLnF1ZXVlLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pO1xuICAgICAgICB5aWVsZCBkZXZpY2UucXVldWUub25TdWJtaXR0ZWRXb3JrRG9uZSgpO1xuICAgICAgICB5aWVsZCByZXN1bHRCdWZmZXJEaXN0YW5jZXMubWFwQXN5bmMoR1BVTWFwTW9kZS5SRUFEKTtcbiAgICAgICAgY29uc3QgcmVzdWx0S25uRGlzdGFuY2VzQXJyYXlCdWZmZXIgPSByZXN1bHRCdWZmZXJEaXN0YW5jZXMuZ2V0TWFwcGVkUmFuZ2UoKTtcbiAgICAgICAgY29uc3QgYnl0ZXNQZXJLbm5Sb3cgPSBrbm5EaXN0YW5jZXNbMF0ubGVuZ3RoICogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICBjb25zdCByZXNLbm5EaXN0YW5jZXMgPSBuZXcgQXJyYXkoa25uRGlzdGFuY2VzLmxlbmd0aCkuZmlsbChudWxsKS5tYXAoKF8sIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRLbm5EaXN0YW5jZXNBcnJheUJ1ZmZlciwgYnl0ZXNQZXJLbm5Sb3cgKiBpLCBrbm5EaXN0YW5jZXNbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IG91dCA9IG5ldyBGbG9hdDMyQXJyYXkoa25uRGlzdGFuY2VzWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBvdXQuc2V0KGRhdGFWaWV3KTtcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHRCdWZmZXJEaXN0YW5jZXMudW5tYXAoKTtcbiAgICAgICAgcmVzdWx0QnVmZmVyRGlzdGFuY2VzLmRlc3Ryb3koKTtcbiAgICAgICAga25uRGlzdGFuY2VzQnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgbWVtYmVyc2hpcFN0cmVuZ3Roc0luZm9CdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICByZXR1cm4gcmVzS25uRGlzdGFuY2VzO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVtYmVyc2hpcC1zdHJlbmd0aHMuanMubWFwIiwiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzV0dTTCh0aHJlYWRzUGVyV29ya2dyb3VwRGltID0gMTAsIHRocmVhZHNQZXJZRGltZW5zaW9uLCBrbm5EaXN0YW5jZXMsIHNpZ21hcywgcmhvcykge1xuICAgIGNvbnN0IG51bU9mRW50cmllcyA9IGtubkRpc3RhbmNlcy5sZW5ndGg7XG4gICAgY29uc3Qgc2lnbWFzTGVuZ3RoID0gc2lnbWFzLmxlbmd0aDtcbiAgICBjb25zdCByaG9zTGVuZ3RoID0gcmhvcy5sZW5ndGg7XG4gICAgLy8gVE9ETzogZG8gaXQgd2l0aCBzdHJ1Y3RzXG4gICAgcmV0dXJuIGBcbiAgICAgICAgICAgc3RydWN0IE1lbWJlcnNoaXBTdHJlbmd0aHNJbmZvIHtcbiAgICAgICAgICAgICAgIGtubkRpc3RhbmNlczogYXJyYXk8YXJyYXk8ZjMyLCAke2tubkRpc3RhbmNlc1swXS5sZW5ndGh9PiwgJHtudW1PZkVudHJpZXN9PixcbiAgICAgICAgICAgICAgIHNpZ21hczogYXJyYXk8ZjMyLCAke3NpZ21hc0xlbmd0aH0+LFxuICAgICAgICAgICAgICAgcmhvczogYXJyYXk8ZjMyLCAke3Job3NMZW5ndGh9PlxuICAgICAgICAgICB9O1xuICAgICAgICAgICB2YXI8cHJpdmF0ZT4gbk5laWdoYm9yczogdTMyID0gJHtrbm5EaXN0YW5jZXNbMF0ubGVuZ3RofTtcbiAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKDApIHZhcjxzdG9yYWdlLCByZWFkPiBtZW1iZXJzaGlwU3RyZW5ndGhzSW5mbzogTWVtYmVyc2hpcFN0cmVuZ3Roc0luZm87XG4gICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygxKSB2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4gcmVzdWx0S25uRGlzdGFuY2VzOiBhcnJheTxhcnJheTxmMzIsICR7a25uRGlzdGFuY2VzWzBdLmxlbmd0aH0+LCAke251bU9mRW50cmllc30+O1xuICAgICAgICAgICBAY29tcHV0ZSBAd29ya2dyb3VwX3NpemUoJHt0aHJlYWRzUGVyV29ya2dyb3VwRGltfSwgJHt0aHJlYWRzUGVyV29ya2dyb3VwRGltfSkgZm4gY29tcHV0ZU1lbWJlcnNoaXBTdHJlbmd0aHMoXG4gICAgICAgICAgICAgICBAYnVpbHRpbihnbG9iYWxfaW52b2NhdGlvbl9pZCkgaWQ6IHZlYzM8dTMyPixcbiAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICBsZXQgY29sOiB1MzIgPSBpZC54O1xuICAgICAgICAgICAgICAgbGV0IHJvdzogdTMyID0gaWQueTtcbiAgICAgICAgICAgICAgIGxldCB3b3JraW5nSW5kZXg6IHUzMiA9IHJvdyAqICR7dGhyZWFkc1BlcllEaW1lbnNpb259ICsgY29sO1xuXG4gICAgICAgICAgICAgICBpZiAod29ya2luZ0luZGV4ID49ICR7bnVtT2ZFbnRyaWVzfSkge1xuICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgbGV0IHdvcmtpbmdSZXNLbm5EaXN0YW5jZXMgPSAmcmVzdWx0S25uRGlzdGFuY2VzW3dvcmtpbmdJbmRleF07XG4gICAgICAgICAgICAgICBsZXQga25uRGlzdGFuY2VzID0gJm1lbWJlcnNoaXBTdHJlbmd0aHNJbmZvLmtubkRpc3RhbmNlc1t3b3JraW5nSW5kZXhdO1xuICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDB1OyBqIDwgbk5laWdoYm9yczsgaiA9IGogKyAxdSkge1xuICAgICAgICAgICAgICAgICAgIHZhciB2YWw6IGYzMiA9IDAuMDtcblxuICAgICAgICAgICAgICAgICAgIGlmICgoKmtubkRpc3RhbmNlcylbal0gLSBtZW1iZXJzaGlwU3RyZW5ndGhzSW5mby5yaG9zW3dvcmtpbmdJbmRleF0gPD0gMC4wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IDEuMDtcbiAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBleHAoMC4wIC0gKChrbm5EaXN0YW5jZXNbal0gLSBtZW1iZXJzaGlwU3RyZW5ndGhzSW5mby5yaG9zW3dvcmtpbmdJbmRleF0pIC8gbWVtYmVyc2hpcFN0cmVuZ3Roc0luZm8uc2lnbWFzW3dvcmtpbmdJbmRleF0pKTsgICBcbiAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAoKndvcmtpbmdSZXNLbm5EaXN0YW5jZXMpW2pdID0gdmFsO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICB9XG4gICBgO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVtYmVyc2hpcC1zdHJlbmd0aHMud2dzbC5qcy5tYXAiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGZpbmRBQlBhcmFtcywgZ2V0TkVwb2NocywgdG9PZmZzZXRGb3JtIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZVNpbXBsaWNpYWxTZXRFbWJlZGRpbmcoZ3JhcGgsIGVudHJ5TGVuLCBzcHJlYWQsIG1pbkRpc3QsIG5lZ2F0aXZlU2FtcGxlUmF0ZSA9IDUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIWdyYXBoLnVuaW9uU2l6ZXMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG5FcG9jaHMgPSBnZXRORXBvY2hzKGVudHJ5TGVuKTtcbiAgICAgICAgY29uc3QgbkNvbXBvbmVudHMgPSAyOyAvLyB0b2RvOiBzdXBwb3J0IG11bHQgZGltc1xuICAgICAgICAvLyBnZXQgbWF4IHZhbHVlOlxuICAgICAgICBjb25zdCBtYXhWYWwgPSBncmFwaC5yZXMucmVzdWx0S25uRGlzdGFuY2VzLnJlZHVjZSgocHJldiwgY3VyKSA9PiBNYXRoLm1heChwcmV2LCBjdXIpKTtcbiAgICAgICAgLy9sZXQgb2Zmc2V0QWNjdW0gPSAwO1xuICAgICAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IGdyYXBoLnVuaW9uU2l6ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gICAgIGZvciAobGV0IGogPSAwOyBqIDwgZ3JhcGgudW5pb25TaXplcylcbiAgICAgICAgLy8gfVxuICAgICAgICBjb25zdCBtaW5HcmFwaFZhbCA9IG1heFZhbCAvIG5FcG9jaHM7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBob2xkIHRoZSBzaXplcyBvZiBhcnJheXMgd2l0aCBhbGwgemVyb3MgcmVtb3ZlZC5cbiAgICAgICAgY29uc3QgdW5pb25TaXplc0NvcHkgPSBuZXcgVWludDMyQXJyYXkoZ3JhcGgudW5pb25TaXplcy5sZW5ndGgpO1xuICAgICAgICB1bmlvblNpemVzQ29weS5zZXQoZ3JhcGgudW5pb25TaXplcyk7XG4gICAgICAgIGxldCBvZmZzZXRBY2N1bSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JhcGgudW5pb25TaXplcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBncmFwaC51bmlvblNpemVzW2ldOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IG9mZnNldEFjY3VtICsgajtcbiAgICAgICAgICAgICAgICBpZiAoZ3JhcGgucmVzLnJlc3VsdEtubkRpc3RhbmNlc1tpbmRleF0gPCBtaW5HcmFwaFZhbCkge1xuICAgICAgICAgICAgICAgICAgICBncmFwaC5yZXMucmVzdWx0S25uRGlzdGFuY2VzW2luZGV4XSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHVuaW9uU2l6ZXNDb3B5W2ldLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2Zmc2V0QWNjdW0gKz0gZ3JhcGgudW5pb25TaXplc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub25aZXJvR3JhcGhPZmZzZXRzID0gdG9PZmZzZXRGb3JtKHVuaW9uU2l6ZXNDb3B5KTtcbiAgICAgICAgY29uc3Qgbm9uWmVyb0dyYXBoU2l6ZSA9IG5vblplcm9HcmFwaE9mZnNldHNbbm9uWmVyb0dyYXBoT2Zmc2V0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3Qgd2VpZ2h0cyA9IG5ldyBGbG9hdDMyQXJyYXkobm9uWmVyb0dyYXBoU2l6ZSk7XG4gICAgICAgIGNvbnN0IGhlYWQgPSBuZXcgVWludDMyQXJyYXkobm9uWmVyb0dyYXBoU2l6ZSk7XG4gICAgICAgIGNvbnN0IHRhaWwgPSBuZXcgVWludDMyQXJyYXkobm9uWmVyb0dyYXBoU2l6ZSk7XG4gICAgICAgIG9mZnNldEFjY3VtID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBncmFwaC51bmlvblNpemVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGdyYXBoLnVuaW9uU2l6ZXNbaV07IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZ3JhcGgudW5pb25NYXRyaXhPZmZzZXRzW2ldICsgajtcbiAgICAgICAgICAgICAgICBpZiAoZ3JhcGgucmVzLnJlc3VsdEtubkRpc3RhbmNlc1tpbmRleF0gIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB3ZWlnaHRzW29mZnNldEFjY3VtXSA9IGdyYXBoLnJlcy5yZXN1bHRLbm5EaXN0YW5jZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBoZWFkW29mZnNldEFjY3VtXSA9IGdyYXBoLnJlcy5yZXN1bHRLbm5JbmRleGVzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgdGFpbFtvZmZzZXRBY2N1bV0gPSBpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRBY2N1bSArPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlcG9jaHNQZXJTYW1wbGUgPSBuZXcgRmxvYXQzMkFycmF5KHdlaWdodHMubGVuZ3RoKS5maWxsKC0xKTtcbiAgICAgICAgY29uc3QgblNhbXBsZXMgPSB3ZWlnaHRzLm1hcCgodykgPT4gKHcgLyBtYXhWYWwpICogbkVwb2Nocyk7XG4gICAgICAgIG5TYW1wbGVzLmZvckVhY2goKG4sIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChuID4gMClcbiAgICAgICAgICAgICAgICBlcG9jaHNQZXJTYW1wbGVbaV0gPSBuRXBvY2hzIC8gblNhbXBsZXNbaV07XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB7IGEsIGIgfSA9IGZpbmRBQlBhcmFtcyhzcHJlYWQsIG1pbkRpc3QpO1xuICAgICAgICBjb25zdCBlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZSA9IGVwb2Noc1BlclNhbXBsZS5tYXAoKGUpID0+IGUgLyBuZWdhdGl2ZVNhbXBsZVJhdGUpO1xuICAgICAgICBjb25zdCBnYW1tYSA9IDEuMDtcbiAgICAgICAgY29uc3QgaW5pdGlhbEFscGhhID0gMS4wO1xuICAgICAgICByZXR1cm4geyBlcG9jaHNQZXJTYW1wbGUsIGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlLCBhLCBiLFxuICAgICAgICAgICAgaGVhZCwgdGFpbCwgZW50cnlMZW4sIG5FcG9jaHMsIG5Db21wb25lbnRzLCBpbml0aWFsQWxwaGEsIGdhbW1hIH07XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaW1wbGljYWwtc2V0LWVtYmVkZGluZy5qcy5tYXAiLCJpbXBvcnQgeyBWZWN0b3IgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90eXBlLWRlY2xhcmF0aW9ucyc7XG5pbXBvcnQgeyBBdmFpbGFibGVNZXRyaWNzLCBNZWFzdXJlLCBpc0JpdEFycmF5TWV0cmljIH0gZnJvbSAnLi4vdHlwZWQtbWV0cmljcyc7XG5pbXBvcnQgeyBEaXN0YW5jZU1hdHJpeFNlcnZpY2UgfSBmcm9tICcuLi9kaXN0YW5jZS1tYXRyaXgnO1xuaW1wb3J0IHsgVU1BUCB9IGZyb20gJy4uL3VtYXAnO1xuaW1wb3J0IHsgYXNzZXJ0LCB0cmFuc3Bvc2VNYXRyaXggfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy92ZWN0b3Itb3BlcmF0aW9ucyc7XG5pbXBvcnQgeyBTcGFyc2VNYXRyaXhTZXJ2aWNlIH0gZnJvbSAnLi4vZGlzdGFuY2UtbWF0cml4L3NwYXJzZS1tYXRyaXgtc2VydmljZSc7XG5pbXBvcnQgQml0QXJyYXkgZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvYml0LWFycmF5JztcbmltcG9ydCBzZWVkUmFuZG9tIGZyb20gJ3NlZWRyYW5kb20nO1xuLy9pbXBvcnQge1RTTkV9IGZyb20gJ0BrZWNrZWx0L3RzbmUnO1xuaW1wb3J0IHsgVFNORSB9IGZyb20gJy4uL3Qtc25lL3Qtc25lJztcbmltcG9ydCB7IG11bHRpQ29sV2ViR1BVS05OIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoJztcbmltcG9ydCB7IFdlYkdQVVVNQVAgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS91bWFwJztcbmNsYXNzIE11bHRpQ29sdW1uUmVkdWNlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLmRhdGEgPSBvcHRpb25zLmRhdGE7XG4gICAgICAgIHRoaXMud2VpZ2h0cyA9IG9wdGlvbnMud2VpZ2h0cztcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGlvbk1ldGhvZCA9IG9wdGlvbnMuYWdncmVnYXRpb25NZXRob2Q7XG4gICAgfVxufVxuY2xhc3MgVFNORVJlZHVjZXIgZXh0ZW5kcyBNdWx0aUNvbHVtblJlZHVjZXIge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgVFNORVJlZHVjZXIuXG4gICAgICogQHBhcmFtIHtPcHRpb25zfSBvcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgICogQG1lbWJlcm9mIFRTTkVSZWR1Y2VyXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgY29uc3QgcmFuZG9tU2VlZCA9IG9wdGlvbnMucmFuZG9tU2VlZCA/PyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IHJhbmRvbUZuID0gc2VlZFJhbmRvbShyYW5kb21TZWVkKTtcbiAgICAgICAgb3B0aW9ucy5kaW0gPSAyOyAvLyBUT0RPOiBtYWtlIGl0IGNvbmZpZ3VyYWJsZVxuICAgICAgICBvcHRpb25zLnJhbmRvbSA9IHJhbmRvbUZuO1xuICAgICAgICB0aGlzLnJlZHVjZXIgPSBuZXcgVFNORShvcHRpb25zKTtcbiAgICAgICAgdGhpcy5pdGVyYXRpb25zID0gb3B0aW9ucz8uaXRlcmF0aW9ucyA/PyB0aGlzLnJlZHVjZXIuZ2V0SXRlclNpemUodGhpcy5kYXRhWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuZGlzdGFuY2VGbmFtZXMgPSBvcHRpb25zLmRpc3RhbmNlRm5hbWVzO1xuICAgICAgICB0aGlzLmRpc3RhbmNlRm5zID0gb3B0aW9ucy5kaXN0YW5jZUZucztcbiAgICAgICAgdGhpcy5kaXN0YW5jZUZuQXJncyA9IG9wdGlvbnMuZGlzdGFuY2VGbkFyZ3M7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NGdW5jID0gb3B0aW9ucy5wcm9ncmVzc0Z1bmM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVtYmVkcyB0aGUgZGF0YSBnaXZlbiBpbnRvIHRoZSB0d28tZGltZW5zaW9uYWwgc3BhY2UgdXNpbmcgdC1TTkUgbWV0aG9kLlxcXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcGFyYWxsZWxEaXN0YW5jZVdvcmtlcnNdIFdoZXRoZXIgdG8gdXNlIHBhcmFsbGVsIGRpc3RhbmNlIHdvcmtlcnMuXG4gICAgICogQHJldHVybiB7YW55fSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBvZiB0aGlzIGVtYmVkZGluZyBhbmQgZGlzdGFuY2UgbWF0cml4IHdoZXJlIGFwcGxpY2FibGUuXG4gICAgICovXG4gICAgYXN5bmMgdHJhbnNmb3JtKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhWzBdLmxlbmd0aCA+IDEwMDAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXhpbXVtIG51bWJlciBvZiBzYW1wbGVzIGZvciBULVNORSBpcyAxMDAwMCcpO1xuICAgICAgICBjb25zdCBtYXRyaXhTZXJ2aWNlID0gbmV3IERpc3RhbmNlTWF0cml4U2VydmljZSh0cnVlLCBmYWxzZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBjb25zdCBhZ2dyZWdhdGUgPSBnZXRBZ2dyZWdhdGlvbkZ1bmN0aW9uKHRoaXMuYWdncmVnYXRpb25NZXRob2QsIHRoaXMud2VpZ2h0cyk7XG4gICAgICAgICAgICAvLyBjb25zdCBkaXN0YW5jZXM6IEFycmF5PEZsb2F0MzJBcnJheT4gPSBbXTtcbiAgICAgICAgICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAvLyAgIGNvbnN0IGRpc3QgPSBhd2FpdCBtYXRyaXhTZXJ2aWNlLmNhbGModGhpcy5kYXRhW2ldLCB0aGlzLmRpc3RhbmNlRm5hbWVzW2ldLCBmYWxzZSwgdGhpcy5kaXN0YW5jZUZuQXJnc1tpXSk7XG4gICAgICAgICAgICAvLyAgIGRpc3RhbmNlcy5wdXNoKGRpc3QpO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gY29uc3QgZGlzdGFuY2UgPSBuZXcgRmxvYXQzMkFycmF5KGRpc3RhbmNlc1swXS5sZW5ndGgpLmZpbGwoMCk7XG4gICAgICAgICAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IGRpc3RhbmNlc1swXS5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIC8vICAgZGlzdGFuY2VbaV0gPSBhZ2dyZWdhdGUoZGlzdGFuY2VzLm1hcCgoZCkgPT4gZFtpXSkpO1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBhd2FpdCBtYXRyaXhTZXJ2aWNlLmNhbGNNdWx0aSh0aGlzLmRhdGEsIHRoaXMuZGlzdGFuY2VGbmFtZXMsIGZhbHNlLCB0aGlzLmRpc3RhbmNlRm5BcmdzLCB0aGlzLndlaWdodHMsIHRoaXMuYWdncmVnYXRpb25NZXRob2QpO1xuICAgICAgICAgICAgbWF0cml4U2VydmljZS50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgIC8vIGNvbnN0IG1hdHJpeFByb3h5ID0gZGlzdGFuY2VNYXRyaXhQcm94eShkaXN0YW5jZSwgdGhpcy5kYXRhWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLnJlZHVjZXIuaW5pdERhdGFEaXN0KGRpc3RhbmNlLCB0aGlzLmRhdGFbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pdGVyYXRpb25zOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZHVjZXIuc3RlcCgpOyAvLyBldmVyeSB0aW1lIHlvdSBjYWxsIHRoaXMsIHNvbHV0aW9uIGdldHMgYmV0dGVyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NGdW5jKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzRnVuYyhpLCB0aGlzLml0ZXJhdGlvbnMsIFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZHVjZXIuZ2V0U29sdXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbWF0cml4U2VydmljZS50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG59XG5jbGFzcyBVTUFQUmVkdWNlciBleHRlbmRzIE11bHRpQ29sdW1uUmVkdWNlciB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBVTUFQUmVkdWNlci5cbiAgICAgKiBAcGFyYW0ge09wdGlvbnN9IG9wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgKiBAbWVtYmVyb2YgVU1BUFJlZHVjZXJcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHJhbmRvbVNlZWQgPSBvcHRpb25zLnJhbmRvbVNlZWQgPz8gRGF0ZSgpO1xuICAgICAgICBjb25zdCByYW5kb21GbiA9IHNlZWRSYW5kb20ocmFuZG9tU2VlZCk7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnVzZVdlYkdQVSA9IGZhbHNlO1xuICAgICAgICBhc3NlcnQoJ2Rpc3RhbmNlRm5hbWVzJyBpbiBvcHRpb25zKTtcbiAgICAgICAgYXNzZXJ0KCdkaXN0YW5jZUZucycgaW4gb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuZGlzdGFuY2VGbkFyZ3MgPSBvcHRpb25zLmRpc3RhbmNlRm5BcmdzO1xuICAgICAgICB0aGlzLmRpc3RhbmNlRm5zID0gb3B0aW9ucy5kaXN0YW5jZUZucztcbiAgICAgICAgdGhpcy5wcm9ncmVzc0Z1bmMgPSBvcHRpb25zLnByb2dyZXNzRnVuYztcbiAgICAgICAgdGhpcy51c2VXZWJHUFUgPSBvcHRpb25zLnVzZVdlYkdQVSA/PyBmYWxzZTtcbiAgICAgICAgdGhpcy5kaXN0YW5jZUZuYW1lcyA9IG9wdGlvbnMuZGlzdGFuY2VGbmFtZXM7XG4gICAgICAgIG9wdGlvbnMubkNvbXBvbmVudHMgPSAyOyAvLyBUT0RPOiBtYWtlIGl0IGNvbmZpZ3VyYWJsZVxuICAgICAgICAvL1VtYXAgdXNlcyB2ZWN0b3IgaW5kZXhpbmcsIHNvIHdlIG5lZWQgdG8gY3JlYXRlIGFuIGFycmF5IG9mIHZlY3RvcnMgYXMgaW5kZWNlcy5cbiAgICAgICAgdGhpcy52ZWN0b3JzID0gbmV3IEFycmF5KHRoaXMuZGF0YVswXS5sZW5ndGgpLmZpbGwoMCkubWFwKChfLCBpKSA9PiBpKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVswXS5sZW5ndGggPD0gKG9wdGlvbnMubk5laWdoYm9ycyA/PyAxNSkpXG4gICAgICAgICAgICBvcHRpb25zLm5OZWlnaGJvcnMgPSB0aGlzLmRhdGFbMF0ubGVuZ3RoIC0gMTtcbiAgICAgICAgb3B0aW9ucy5yYW5kb20gPSByYW5kb21GbjtcbiAgICAgICAgdGhpcy5yZWR1Y2VyID0gbmV3IFVNQVAob3B0aW9ucyk7XG4gICAgICAgIC8vIHRoaXMucmVkdWNlci5kaXN0YW5jZUZuID0gdGhpcy5fZW5jb2RlZERpc3RhbmNlLmJpbmQodGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVtYmVkcyB0aGUgZGF0YSBnaXZlbiBpbnRvIHRoZSB0d28tZGltZW5zaW9uYWwgc3BhY2UgdXNpbmcgVU1BUCBtZXRob2QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbX3BhcmFsbGVsRGlzdGFuY2VXb3JrZXJzXSBXaGV0aGVyIHRvIHVzZSBwYXJhbGxlbCBkaXN0YW5jZSBtYXRyaXggd29ya2Vycy5cbiAgICAgKiBAcmV0dXJuIHthbnl9IENhcnRlc2lhbiBjb29yZGluYXRlIG9mIHRoaXMgZW1iZWRkaW5nLlxuICAgICAqL1xuICAgIGFzeW5jIHRyYW5zZm9ybShfcGFyYWxsZWxEaXN0YW5jZVdvcmtlcnMpIHtcbiAgICAgICAgY29uc29sZS50aW1lKCdrbm4gZ3JhcGgnKTtcbiAgICAgICAgbGV0IGtubkdyYXBoID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy51c2VXZWJHUFUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAga25uR3JhcGggPSBhd2FpdCBtdWx0aUNvbFdlYkdQVUtOTih0aGlzLmRhdGEsIHRoaXMucmVkdWNlci5uZWlnaGJvcnMsIHRoaXMuZGlzdGFuY2VGbmFtZXMsIHRoaXMuYWdncmVnYXRpb25NZXRob2QsIHRoaXMud2VpZ2h0cywgdGhpcy5kaXN0YW5jZUZuQXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFrbm5HcmFwaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudXNlV2ViR1BVKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1dFQkdQVSBLTk4gZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gbXVsdGl0aHJlYWRlZCBDUFUgaW1wbGVtZW50YXRpb24nKTtcbiAgICAgICAgICAgIGtubkdyYXBoID0gYXdhaXQgbmV3IFNwYXJzZU1hdHJpeFNlcnZpY2UoKVxuICAgICAgICAgICAgICAgIC5tdWx0aUNvbHVtbktOTih0aGlzLmRhdGEsIHRoaXMuZGlzdGFuY2VGbmFtZXMsIHRoaXMucmVkdWNlci5uZWlnaGJvcnMsIHRoaXMuZGlzdGFuY2VGbkFyZ3MsIHRoaXMud2VpZ2h0cywgdGhpcy5hZ2dyZWdhdGlvbk1ldGhvZCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS50aW1lRW5kKCdrbm4gZ3JhcGgnKTtcbiAgICAgICAgaWYgKHRoaXMudXNlV2ViR1BVKSB7XG4gICAgICAgICAgICB0aGlzLndlYkdQVVJlZHVjZXIgPSBuZXcgV2ViR1BVVU1BUCh0aGlzLnZlY3RvcnMubGVuZ3RoLCB7XG4gICAgICAgICAgICAgICAgbkNvbXBvbmVudHM6IHRoaXMucmVkdWNlci5uQ29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICBnYW1tYTogdGhpcy5yZWR1Y2VyLnJlcHVsc2lvblN0cmVuZ3RoLFxuICAgICAgICAgICAgICAgIGFscGhhOiB0aGlzLnJlZHVjZXIubGVhcm5pbmdSYXRlLFxuICAgICAgICAgICAgICAgIG5OZWlnaGJvdXJzOiB0aGlzLnJlZHVjZXIubmVpZ2hib3JzLFxuICAgICAgICAgICAgICAgIHNwcmVhZDogdGhpcy5yZWR1Y2VyLnNwcmVhZCxcbiAgICAgICAgICAgICAgICBtaW5EaXN0OiB0aGlzLnJlZHVjZXIubWluRGlzdCxcbiAgICAgICAgICAgICAgICBuZWdhdGl2ZVNhbXBsZVJhdGU6IHRoaXMucmVkdWNlci5uZWdhdGl2ZVNhbXBsZVJhdGUsXG4gICAgICAgICAgICAgICAgbG9jYWxDb25uZWN0aXZpdHk6IHRoaXMucmVkdWNlci5sb2NhbENvbm5lY3Rpdml0eSxcbiAgICAgICAgICAgICAgICBzZXRPcE1peFJhdGlvOiB0aGlzLnJlZHVjZXIuc2V0T3BNaXhSYXRpbyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy53ZWJHUFVSZWR1Y2VyLnNldFByZWNvbXB1dGVkS05OKGtubkdyYXBoLmtubkluZGV4ZXMsIGtubkdyYXBoLmtubkRpc3RhbmNlcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlZHVjZXIuc2V0UHJlY29tcHV0ZWRLTk4oa25uR3JhcGgua25uSW5kZXhlcywga25uR3JhcGgua25uRGlzdGFuY2VzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBuZWVkZWQgc28gdGhhdCBnYXJiYWdlIGNvbGxlY3RvciBjYW4gZnJlZSBtZW1vcnkgZnJvbSBkaXN0YW5jZSBtYXRyaXhcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgZW1iZWRkaW5nID0gbnVsbDtcbiAgICAgICAgY29uc29sZS50aW1lKCdmaXQnKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZVdlYkdQVSAmJiB0aGlzLndlYkdQVVJlZHVjZXIpIHtcbiAgICAgICAgICAgICAgICBlbWJlZGRpbmcgPSBhd2FpdCB0aGlzLndlYkdQVVJlZHVjZXIuZml0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFlbWJlZGRpbmcpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGNvbXB1dGUgZW1iZWRkaW5nJyk7XG4gICAgICAgICAgICAgICAgZW1iZWRkaW5nID0gLy8gdHJhbnNwb3NlIFRPRE86IGRvIGEgYmV0dGVyIGpvYiBoZXJlXG4gICAgICAgICAgICAgICAgICAgIG5ldyBBcnJheShlbWJlZGRpbmdbMF0ubGVuZ3RoKS5maWxsKG51bGwpLm1hcCgoXywgaSkgPT4gbmV3IEZsb2F0MzJBcnJheShlbWJlZGRpbmcubWFwKCh2KSA9PiB2W2ldKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZW1iZWRkaW5nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy51c2VXZWJHUFUpXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignV0VCR1BVIFVNQVAgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gQ1BVIGltcGxlbWVudGF0aW9uJyk7XG4gICAgICAgICAgICBlbWJlZGRpbmcgPSBhd2FpdCB0aGlzLnJlZHVjZXIuZml0QXN5bmModGhpcy52ZWN0b3JzLCAoZXBvYykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb2dyZXNzRnVuYylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc0Z1bmMoZXBvYywgdGhpcy5yZWR1Y2VyLmdldE5FcG9jaHMoKSwgdGhpcy5yZWR1Y2VyLmdldEVtYmVkZGluZygpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUudGltZUVuZCgnZml0Jyk7XG4gICAgICAgIHJldHVybiBhcnJheUNhc3QyQ29vcmRpbmF0ZXMoZW1iZWRkaW5nKTtcbiAgICAgICAgZnVuY3Rpb24gYXJyYXlDYXN0MkNvb3JkaW5hdGVzKGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXkoZGF0YS5sZW5ndGgpLmZpbGwoMCkubWFwKChfLCBpKSA9PiAoVmVjdG9yLmZyb20oZGF0YVtpXSkpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmNvbnN0IEF2YWlsYWJsZVJlZHVjZXJzID0ge1xuICAgICdVTUFQJzogVU1BUFJlZHVjZXIsXG4gICAgJ3QtU05FJzogVFNORVJlZHVjZXIsXG59O1xuZXhwb3J0IGNsYXNzIE11bHRpQ29sRGltUmVkdWNlciB7XG4gICAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgRGltZW5zaW9uYWxpdHlSZWR1Y2VyLlxuICAgKiBAcGFyYW0ge2FueVtdfSBkYXRhIFZlY3RvcnMgdG8gZW1iZWQuXG4gICAqIEBwYXJhbSB7S25vd25NZXRob2RzfSBtZXRob2QgRW1iZWRkaW5nIG1ldGhvZCB0byBiZSBhcHBsaWVkXG4gICAqIEBwYXJhbSB7S25vd25NZXRyaWNzfSBtZXRyaWMgRGlzdGFuY2UgbWV0cmljIHRvIGJlIGNvbXB1dGVkIGJldHdlZW4gZWFjaCBvZiB0aGUgdmVjdG9ycy5cbiAgICogQHBhcmFtIHtPcHRpb25zfSBbb3B0aW9uc10gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBpbXBsZW1lbnRpbmcgZW1iZWRkZXJzLlxuICAgKiBAbWVtYmVyb2YgRGltZW5zaW9uYWxpdHlSZWR1Y2VyXG4gICAqL1xuICAgIGNvbnN0cnVjdG9yKGRhdGEsIG1ldGhvZCwgbWV0cmljcywgd2VpZ2h0cywgZGlzdGFuY2VBZ2dyZWdhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBtZWFzdXJlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBtZXRyaWNzLmxlbmd0aDsgKytpZHgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lYXN1cmUgPSBuZXcgTWVhc3VyZShtZXRyaWNzW2lkeF0pLmdldE1lYXN1cmUob3B0aW9ucy5kaXN0YW5jZUZuQXJnc1tpZHhdKTtcbiAgICAgICAgICAgIG1lYXN1cmVzLnB1c2gobWVhc3VyZSk7XG4gICAgICAgICAgICBsZXQgYml0QXJyYXlMZW5ndGggPSAyMDQ4O1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhW2lkeF0ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVtpZHhdW2ldICYmIGRhdGFbaWR4XVtpXS5fbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGJpdEFycmF5TGVuZ3RoID0gZGF0YVtpZHhdW2ldLl9sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0JpdEFycmF5TWV0cmljKG1ldHJpY3NbaWR4XSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFbaWR4XS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtpZHhdW2ldICYmIGRhdGFbaWR4XVtpXS5fZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaWR4XVtpXSA9IG5ldyBCaXRBcnJheShkYXRhW2lkeF1baV0uX2RhdGEsIGRhdGFbaWR4XVtpXS5fbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpZHhdW2ldID0gbmV3IEJpdEFycmF5KGJpdEFycmF5TGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGhvZCA9PSAnVU1BUCcpIHtcbiAgICAgICAgICAgIHRoaXMucmVkdWNlciA9IG5ldyBVTUFQUmVkdWNlcih7XG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICBkaXN0YW5jZUZuYW1lczogbWV0cmljcyxcbiAgICAgICAgICAgICAgICBkaXN0YW5jZUZuczogbWVhc3VyZXMsXG4gICAgICAgICAgICAgICAgZGlzdGFuY2VGbkFyZ3M6IG9wdGlvbnMuZGlzdGFuY2VGbkFyZ3MsXG4gICAgICAgICAgICAgICAgd2VpZ2h0czogd2VpZ2h0cyxcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbk1ldGhvZDogZGlzdGFuY2VBZ2dyZWdhdGlvbixcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtZXRob2QgPT0gJ3QtU05FJykge1xuICAgICAgICAgICAgdGhpcy5yZWR1Y2VyID0gbmV3IFRTTkVSZWR1Y2VyKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlRm5hbWVzOiBtZXRyaWNzLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlRm5zOiBtZWFzdXJlcyxcbiAgICAgICAgICAgICAgICBkaXN0YW5jZUZuQXJnczogb3B0aW9ucy5kaXN0YW5jZUZuQXJncyxcbiAgICAgICAgICAgICAgICB3ZWlnaHRzOiB3ZWlnaHRzLFxuICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uTWV0aG9kOiBkaXN0YW5jZUFnZ3JlZ2F0aW9uLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgKiBFbWJlZHMgdGhlIGRhdGEgZ2l2ZW4gaW50byB0aGUgdHdvLWRpbWVuc2lvbmFsIHNwYWNlIHVzaW5nIHRoZSBjaG9zZW4gbWV0aG9kLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHRyYW5zcG9zZSBXaGV0aGVyIHRvIHRyYW5zZm9ybSBjb29yZGluYXRlcyB0byBoYXZlIGNvbHVtbnMtZmlyc3Qgb3JpZW50YXRpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyYWxsZWxEaXN0YW5jZVdvcmtlcnMgV2hldGhlciB0byB1c2UgcGFyYWxsZWwgZGlzdGFuY2UgY29tcHV0YXRpb24uXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZW1iZWRkaW5nIG1ldGhvZCB3YXMgbm90IGZvdW5kLlxuICAgKiBAcmV0dXJuIHthbnl9IENhcnRlc2lhbiBjb29yZGluYXRlIG9mIHRoaXMgZW1iZWRkaW5nIGFuZCBkaXN0YW5jZSBtYXRyaXggd2hlcmUgYXBwbGljYWJsZS5cbiAgICogQG1lbWJlcm9mIERpbWVuc2lvbmFsaXR5UmVkdWNlclxuICAgKi9cbiAgICBhc3luYyB0cmFuc2Zvcm0odHJhbnNwb3NlID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMucmVkdWNlciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyIHdhcyBub3QgZGVmaW5lZC4nKTtcbiAgICAgICAgbGV0IGVtYmVkZGluZyA9IGF3YWl0IHRoaXMucmVkdWNlci50cmFuc2Zvcm0oKTtcbiAgICAgICAgaWYgKHRyYW5zcG9zZSlcbiAgICAgICAgICAgIGVtYmVkZGluZyA9IHRyYW5zcG9zZU1hdHJpeChlbWJlZGRpbmcpO1xuICAgICAgICByZXR1cm4gZW1iZWRkaW5nO1xuICAgIH1cbiAgICAvKipcbiAgICogUmV0dXJucyBtZXRyaWNzIGF2YWlsYWJsZSBieSB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge0F2YWlsYWJsZURhdGFUeXBlc30gdHlwZU5hbWUgdHlwZSBuYW1lXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfSBNZXRyaWMgbmFtZXMgd2hpY2ggZXhwZWN0cyB0aGUgZ2l2ZW4gZGF0YSB0eXBlXG4gICAqIEBtZW1iZXJvZiBEaW1lbnNpb25hbGl0eVJlZHVjZXJcbiAgICovXG4gICAgc3RhdGljIGF2YWlsYWJsZU1ldHJpY3NCeVR5cGUodHlwZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKEF2YWlsYWJsZU1ldHJpY3NbdHlwZU5hbWVdKTtcbiAgICB9XG4gICAgLyoqXG4gICAqIFJldHVybnMgZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uIG1ldGhvZHMgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQG1lbWJlcm9mIERpbWVuc2lvbmFsaXR5UmVkdWNlclxuICAgKi9cbiAgICBzdGF0aWMgZ2V0IGF2YWlsYWJsZU1ldGhvZHMoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhBdmFpbGFibGVSZWR1Y2Vycyk7XG4gICAgfVxuICAgIC8qKlxuICAgKiBSZXR1cm5zIG1ldHJpY3MgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQG1lbWJlcm9mIERpbWVuc2lvbmFsaXR5UmVkdWNlclxuICAgKi9cbiAgICBzdGF0aWMgZ2V0IGF2YWlsYWJsZU1ldHJpY3MoKSB7XG4gICAgICAgIGxldCBhbnMgPSBbXTtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhBdmFpbGFibGVNZXRyaWNzKS5mb3JFYWNoKChvYmopID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFycmF5ID0gT2JqZWN0LnZhbHVlcyhvYmopO1xuICAgICAgICAgICAgYW5zID0gWy4uLmFucywgLi4uYXJyYXldO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFucztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liWFZzZEdrdFkyOXNkVzF1TFdScGJTMXlaV1IxWTJWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpYlhWc2RHa3RZMjlzZFcxdUxXUnBiUzF5WldSMVkyVnlMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFOUJRVThzUlVGQkswTXNUVUZCVFN4RlFVRlZMRTFCUXk5RUxHbEVRVUZwUkN4RFFVRkRPMEZCUTNwRUxFOUJRVThzUlVGQmNVSXNaMEpCUVdkQ0xFVkJRV2RDTEU5QlFVOHNSVUZCUlN4blFrRkJaMElzUlVGQlF5eE5RVUZOTEd0Q1FVRnJRaXhEUVVGRE8wRkJReTlITEU5QlFVOHNSVUZCUXl4eFFrRkJjVUlzUlVGQlF5eE5RVUZOTEc5Q1FVRnZRaXhEUVVGRE8wRkJSWHBFTEU5QlFVOHNSVUZCUXl4SlFVRkpMRVZCUVVNc1RVRkJUU3hUUVVGVExFTkJRVU03UVVGRE4wSXNUMEZCVHl4RlFVRkRMRTFCUVUwc1JVRkJSU3hsUVVGbExFVkJRVU1zVFVGQlRTeHBSRUZCYVVRc1EwRkJRenRCUVVONFJpeFBRVUZQTEVWQlFWa3NiVUpCUVcxQ0xFVkJRVU1zVFVGQlRTd3dRMEZCTUVNc1EwRkJRenRCUVVWNFJpeFBRVUZQTEZGQlFWRXNUVUZCVFN4NVEwRkJlVU1zUTBGQlF6dEJRVU12UkN4UFFVRlBMRlZCUVZVc1RVRkJUU3haUVVGWkxFTkJRVU03UVVGRGNFTXNjVU5CUVhGRE8wRkJRM0pETEU5QlFVOHNSVUZCUXl4SlFVRkpMRVZCUVVNc1RVRkJUU3huUWtGQlowSXNRMEZCUXp0QlFVTndReXhQUVVGUExFVkJRVU1zYVVKQlFXbENMRVZCUVVNc1RVRkJUU3d3UWtGQk1FSXNRMEZCUXp0QlFVTXpSQ3hQUVVGUExFVkJRVU1zVlVGQlZTeEZRVUZETEUxQlFVMHNNRU5CUVRCRExFTkJRVU03UVVGcFEzQkZMRTFCUVdVc2EwSkJRV3RDTzBsQlNUZENMRmxCUVZrc1QwRkJaMEk3VVVGRE1VSXNTVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETzFGQlEzcENMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXp0UlFVTXZRaXhKUVVGSkxFTkJRVU1zYVVKQlFXbENMRWRCUVVjc1QwRkJUeXhEUVVGRExHbENRVUZwUWl4RFFVRkRPMGxCUTNKRUxFTkJRVU03UTBGTFNqdEJRVVZFTEUxQlFVMHNWMEZCV1N4VFFVRlJMR3RDUVVGclFqdEpRVTk0UXpzN096dFBRVWxITzBsQlEwZ3NXVUZCV1N4UFFVRm5RanRSUVVNeFFpeExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1VVRkRaaXhOUVVGTkxGVkJRVlVzUjBGQlZ5eFBRVUZQTEVOQlFVTXNWVUZCVlN4SlFVRkpMRWxCUVVrc1JVRkJSU3hEUVVGRE8xRkJRM2hFTEUxQlFVMHNVVUZCVVN4SFFVRkhMRlZCUVZVc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dFJRVU40UXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETERaQ1FVRTJRanRSUVVNNVF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4SFFVRkhMRkZCUVZFc1EwRkJRenRSUVVNeFFpeEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlEycERMRWxCUVVrc1EwRkJReXhWUVVGVkxFZEJRVWNzVDBGQlR5eEZRVUZGTEZWQlFWVXNTVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFGQlEzWkdMRWxCUVVrc1EwRkJReXhqUVVGakxFZEJRVWNzVDBGQlR5eERRVUZETEdOQlFXTXNRMEZCUXp0UlFVTTNReXhKUVVGSkxFTkJRVU1zVjBGQlZ5eEhRVUZITEU5QlFVOHNRMEZCUXl4WFFVRlhMRU5CUVVNN1VVRkRka01zU1VGQlNTeERRVUZETEdOQlFXTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1kwRkJZeXhEUVVGRE8xRkJRemRETEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF6dEpRVU16UXl4RFFVRkRPMGxCUlVRN096czdUMEZKUnp0SlFVTkpMRXRCUVVzc1EwRkJReXhUUVVGVE8xRkJRM0JDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVkQlFVY3NTMEZCU3p0WlFVTTNRaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETERoRFFVRTRReXhEUVVGRExFTkJRVU03VVVGRGJFVXNUVUZCVFN4aFFVRmhMRWRCUVVjc1NVRkJTU3h4UWtGQmNVSXNRMEZCUXl4SlFVRkpMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRE4wUXNTVUZCU1R0WlFVTkdMR3RHUVVGclJqdFpRVU5zUml3MlEwRkJOa003V1VGRE4wTXNLME5CUVN0RE8xbEJReTlETEdkSVFVRm5TRHRaUVVOb1NDd3dRa0ZCTUVJN1dVRkRNVUlzU1VGQlNUdFpRVU5LTEd0RlFVRnJSVHRaUVVOc1JTeG5SRUZCWjBRN1dVRkRhRVFzZVVSQlFYbEVPMWxCUTNwRUxFMUJRVTBzVVVGQlVTeEhRVUZITEUxQlFVMHNZVUZCWVN4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVsQlFVa3NRMEZCUXl4alFVRmpMRVZCUVVVc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eGpRVUZqTEVWQlEzWkhMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzU1VGQlNTeERRVUZETEdsQ1FVRnBRaXhEUVVGRExFTkJRVU03V1VGRGVFTXNZVUZCWVN4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8xbEJRekZDTERCRlFVRXdSVHRaUVVNeFJTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhSUVVGUkxFVkJRVVVzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFpRVVY2UkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRlZCUVZVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJUdG5Ra0ZEZUVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkRMR2xFUVVGcFJEdG5Ra0ZEZEVVc1NVRkJTU3hKUVVGSkxFTkJRVU1zV1VGQldUdHZRa0ZEYmtJc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRlZCUVZVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dGhRVU0zUXp0WlFVTkVMRTlCUVU4c1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXp0VFFVTnVRenRSUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTzFsQlExWXNZVUZCWVN4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8xbEJRekZDTEUxQlFVMHNRMEZCUXl4RFFVRkRPMU5CUTFRN1NVRkRTQ3hEUVVGRE8wTkJRMG83UVVGRlJDeE5RVUZOTEZkQlFWa3NVMEZCVVN4clFrRkJhMEk3U1VGVGVFTTdPenM3VDBGSlJ6dEpRVU5JTEZsQlFWa3NUMEZCWjBJN1VVRkRNVUlzVFVGQlRTeFZRVUZWTEVkQlFWY3NUMEZCVHl4RFFVRkRMRlZCUVZVc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF6dFJRVU40UkN4TlFVRk5MRkZCUVZFc1IwRkJSeXhWUVVGVkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTTdVVUZEZUVNc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlZsQXNZMEZCVXl4SFFVRlpMRXRCUVVzc1EwRkJRenRSUVZkdVF5eE5RVUZOTEVOQlFVTXNaMEpCUVdkQ0xFbEJRVWtzVDBGQlR5eERRVUZETEVOQlFVTTdVVUZEY0VNc1RVRkJUU3hEUVVGRExHRkJRV0VzU1VGQlNTeFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTnFReXhKUVVGSkxFTkJRVU1zWTBGQll5eEhRVUZITEU5QlFVOHNRMEZCUXl4alFVRmpMRU5CUVVNN1VVRkROME1zU1VGQlNTeERRVUZETEZkQlFWY3NSMEZCUnl4UFFVRlBMRU5CUVVNc1YwRkJXU3hEUVVGRE8xRkJRM2hETEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF6dFJRVU42UXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhIUVVGSExFOUJRVThzUTBGQlF5eFRRVUZUTEVsQlFVa3NTMEZCU3l4RFFVRkRPMUZCUXpWRExFbEJRVWtzUTBGQlF5eGpRVUZqTEVkQlFVY3NUMEZCVHl4RFFVRkRMR05CUVdVc1EwRkJRenRSUVVNNVF5eFBRVUZQTEVOQlFVTXNWMEZCVnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExEWkNRVUUyUWp0UlFVTjBSQ3hwUmtGQmFVWTdVVUZEYWtZc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEpRVUZKTEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVVjJSU3hKUVVGSkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZWQlFWVXNTVUZCU1N4RlFVRkZMRU5CUVVNN1dVRkRia1FzVDBGQlR5eERRVUZETEZWQlFWVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRMME1zVDBGQlR5eERRVUZETEUxQlFVMHNSMEZCUnl4UlFVRlJMRU5CUVVNN1VVRkRNVUlzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFJRVU5xUXl3NFJFRkJPRVE3U1VGRGFFVXNRMEZCUXp0SlFVVkVPenM3TzA5QlNVYzdTVUZEU1N4TFFVRkxMRU5CUVVNc1UwRkJVeXhEUVVGRExIZENRVUZyUXp0UlFVTjJSQ3hQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRPMUZCUXpGQ0xFbEJRVWtzVVVGQlVTeEhRVUV3UWl4VFFVRlRMRU5CUVVNN1VVRkRhRVFzU1VGQlNTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZPMWxCUTJ4Q0xFbEJRVWs3WjBKQlEwWXNVVUZCVVN4SFFVRkhMRTFCUVUwc2FVSkJRV2xDTEVOQlEyaERMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4VFFVRlRMRVZCUVVVc1NVRkJTU3hEUVVGRExHTkJRWEZDTEVWQlFVVXNTVUZCU1N4RFFVRkRMR2xDUVVGM1FpeEZRVU0xUml4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlExWXNRMEZCUXp0aFFVTXpRanRaUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTzJkQ1FVTldMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdZVUZEYkVJN1UwRkRSanRSUVVORUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVVTdXVUZEWWl4SlFVRkpMRWxCUVVrc1EwRkJReXhUUVVGVE8yZENRVU5vUWl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExIRkZRVUZ4UlN4RFFVRkRMRU5CUVVNN1dVRkRka1lzVVVGQlVTeEhRVUZITEUxQlFVMHNTVUZCU1N4dFFrRkJiVUlzUlVGQlJUdHBRa0ZEZGtNc1kwRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMR05CUVdNc1JVRkJSU3hKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZOQlFWTXNSVUZEY0VVc1NVRkJTU3hEUVVGRExHTkJRV01zUlVGQlJTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4RFFVRkRPMU5CUTJoRk8xRkJRMFFzVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRSUVVNM1FpeEpRVUZKTEVsQlFVa3NRMEZCUXl4VFFVRlRMRVZCUVVVN1dVRkRiRUlzU1VGQlNTeERRVUZETEdGQlFXRXNSMEZCUnl4SlFVRkpMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlR0blFrRkRka1FzVjBGQlZ5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1YwRkJWenRuUWtGRGNrTXNTMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zYVVKQlFXbENPMmRDUVVOeVF5eExRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWk8yZENRVU5vUXl4WFFVRlhMRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFRRVUZUTzJkQ1FVTnVReXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5PMmRDUVVNelFpeFBRVUZQTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhQUVVGUE8yZENRVU0zUWl4clFrRkJhMElzUlVGQlJTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMR3RDUVVGclFqdG5Ra0ZEYmtRc2FVSkJRV2xDTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhwUWtGQmFVSTdaMEpCUTJwRUxHRkJRV0VzUlVGQlJTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMR0ZCUVdFN1lVRkRNVU1zUTBGQlF5eERRVUZETzFsQlEwZ3NTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4UlFVRlJMRU5CUVVNc1ZVRkJWU3hGUVVGRkxGRkJRVkVzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXp0VFFVTnNSanRoUVVGTk8xbEJRMHdzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eFJRVUZSTEVOQlFVTXNWVUZCVlN4RlFVRkZMRkZCUVZFc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dFRRVU0xUlR0UlFVVkVMSGRGUVVGM1JUdFJRVU40UlN4TlFVRk5MRWxCUVVrc1QwRkJUeXhEUVVGUExFTkJRVU1zVDBGQlR5eEZRVUZGTEVWQlFVVTdXVUZEYkVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUlVGQlJUdG5Ra0ZEWkN4UFFVRlBMRVZCUVVVc1EwRkJRenRaUVVOYUxFTkJRVU1zUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTldMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSVWdzU1VGQlNTeFRRVUZUTEVkQlFXdEVMRWxCUVVrc1EwRkJRenRSUVVOd1JTeFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJRM0JDTEVsQlFVazdXVUZEUml4SlFVRkpMRWxCUVVrc1EwRkJReXhUUVVGVExFbEJRVWtzU1VGQlNTeERRVUZETEdGQlFXRXNSVUZCUlR0blFrRkRlRU1zVTBGQlV5eEhRVUZITEUxQlFVMHNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dG5Ra0ZETTBNc1NVRkJTU3hEUVVGRExGTkJRVk03YjBKQlExb3NUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXcyUWtGQk5rSXNRMEZCUXl4RFFVRkRPMmRDUVVOcVJDeFRRVUZUTEVkQlFVY3NkVU5CUVhWRE8yOUNRVU5xUkN4SlFVRkpMRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVsQlFVa3NXVUZCV1N4RFFVRkRMRk5CUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0aFFVTXhSenRUUVVOR08xRkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdXVUZEVml4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFOQlEyeENPMUZCUTBRc1NVRkJTU3hEUVVGRExGTkJRVk1zUlVGQlJUdFpRVU5rTEVsQlFVa3NTVUZCU1N4RFFVRkRMRk5CUVZNN1owSkJRMmhDTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc2QwUkJRWGRFTEVOQlFVTXNRMEZCUXp0WlFVTXhSU3hUUVVGVExFZEJRVWNzVFVGQlRTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RlFVRkZMRVZCUVVVN1owSkJRemRFTEVsQlFVa3NTVUZCU1N4RFFVRkRMRmxCUVZrN2IwSkJRMjVDTEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNWVUZCVlN4RlFVRkZMRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVWQlFVVXNRMEZCUXl4RFFVRkRPMWxCUTNCR0xFTkJRVU1zUTBGQlF5eERRVUZETzFOQlEwbzdVVUZEUkN4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFGQlEzWkNMRTlCUVU4c2NVSkJRWEZDTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNN1VVRkRlRU1zVTBGQlV5eHhRa0ZCY1VJc1EwRkJReXhKUVVGcFF6dFpRVU01UkN4UFFVRlBMRWxCUVVrc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTTVSU3hEUVVGRE8wbEJRMGdzUTBGQlF6dERRVU5LTzBGQlJVUXNUVUZCVFN4cFFrRkJhVUlzUjBGQlJ6dEpRVU40UWl4TlFVRk5MRVZCUVVVc1YwRkJWenRKUVVOdVFpeFBRVUZQTEVWQlFVVXNWMEZCVnp0RFFVTnlRaXhEUVVGRE8wRkJTVVlzVFVGQlRTeFBRVUZQTEd0Q1FVRnJRanRKUVVVelFqczdPenM3T3p0TFFVOURPMGxCUTBRc1dVRkJXU3hKUVVGclFpeEZRVUZGTEUxQlFUSkNMRVZCUVVVc1QwRkJkVUlzUlVGRGJFWXNUMEZCYVVJc1JVRkJSU3h0UWtGQk9FTXNSVUZCUlN4UFFVRm5RanRSUVVOdVJpeE5RVUZOTEZGQlFWRXNSMEZCY1VJc1JVRkJSU3hEUVVGRE8xRkJRM1JETEV0QlFVc3NTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhGUVVGRkxFZEJRVWNzUjBGQlJ5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkZMRVZCUVVVc1IwRkJSeXhGUVVGRk8xbEJRemRETEUxQlFVMHNUMEZCVHl4SFFVRkhMRWxCUVVrc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRlZCUVZVc1EwRkJReXhQUVVGUExFTkJRVU1zWTBGQll5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRiRVlzVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRaUVVOMlFpeEpRVUZKTEdOQlFXTXNSMEZCUnl4SlFVRkpMRU5CUVVNN1dVRkRNVUlzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3WjBKQlEzcERMRWxCUVVrc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVN2IwSkJRM2hETEdOQlFXTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRPMjlDUVVOMFF5eE5RVUZOTzJsQ1FVTlFPMkZCUTBZN1dVRkRSQ3hKUVVGSkxHZENRVUZuUWl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTzJkQ1FVTnNReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHR2UWtGRGVrTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVczdkMEpCUTNCRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXpzN2QwSkJSWFJGTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEZGQlFWRXNRMEZCUXl4alFVRmpMRU5CUVVNc1EwRkJRenRwUWtGREwwTTdZVUZEUmp0VFFVTkdPMUZCUlVRc1NVRkJTU3hOUVVGTkxFbEJRVWtzVFVGQlRTeEZRVUZGTzFsQlEzQkNMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeFhRVUZYTEVOQlFVTTdaMEpCUXpkQ0xFbEJRVWtzUlVGQlJTeEpRVUZKTzJkQ1FVTldMR05CUVdNc1JVRkJSU3hQUVVGUE8yZENRVU4yUWl4WFFVRlhMRVZCUVVVc1VVRkJVVHRuUWtGRGNrSXNZMEZCWXl4RlFVRkZMRTlCUVU4c1EwRkJReXhqUVVGak8yZENRVU4wUXl4UFFVRlBMRVZCUVVVc1QwRkJUenRuUWtGRGFFSXNhVUpCUVdsQ0xFVkJRVVVzYlVKQlFXMUNPMmRDUVVOMFF5eEhRVUZITEU5QlFVODdZVUZEV0N4RFFVRkRMRU5CUVVNN1UwRkRTanRoUVVGTkxFbEJRVWtzVFVGQlRTeEpRVUZKTEU5QlFVOHNSVUZCUlR0WlFVTTFRaXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NWMEZCVnl4RFFVRkRPMmRDUVVNM1FpeEpRVUZKTEVWQlFVVXNTVUZCU1R0blFrRkRWaXhqUVVGakxFVkJRVVVzVDBGQlR6dG5Ra0ZEZGtJc1YwRkJWeXhGUVVGRkxGRkJRVkU3WjBKQlEzSkNMR05CUVdNc1JVRkJSU3hQUVVGUExFTkJRVU1zWTBGQll6dG5Ra0ZEZEVNc1QwRkJUeXhGUVVGRkxFOUJRVTg3WjBKQlEyaENMR2xDUVVGcFFpeEZRVUZGTEcxQ1FVRnRRanRuUWtGRGRFTXNSMEZCUnl4UFFVRlBPMkZCUTFnc1EwRkJReXhEUVVGRE8xTkJRMG83U1VGRFNDeERRVUZETzBsQlJVUTdPenM3T3pzN08wdEJVVU03U1VGRFRTeExRVUZMTEVOQlFVTXNVMEZCVXl4RFFVRkRMRmxCUVhGQ0xFdEJRVXM3VVVGREwwTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhMUVVGTExGTkJRVk03V1VGRE5VSXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXd3UWtGQk1FSXNRMEZCUXl4RFFVRkRPMUZCUlRsRExFbEJRVWtzVTBGQlV5eEhRVUZITEUxQlFVMHNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFVkJRVVVzUTBGQlF6dFJRVVV2UXl4SlFVRkpMRk5CUVZNN1dVRkRXQ3hUUVVGVExFZEJRVWNzWlVGQlpTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUlhwRExFOUJRVThzVTBGQlV5eERRVUZETzBsQlEyNUNMRU5CUVVNN1NVRkZSRHM3T3pzN08wdEJUVU03U1VGRFJDeE5RVUZOTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU1zVVVGQk5FSTdVVUZEZUVRc1QwRkJUeXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEYWtRc1EwRkJRenRKUVVWRU96czdPenRMUVV0RE8wbEJRMFFzVFVGQlRTeExRVUZMTEdkQ1FVRm5RanRSUVVONlFpeFBRVUZQTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNRMEZCUXp0SlFVTjRReXhEUVVGRE8wbEJSVVE3T3pzN08wdEJTME03U1VGRFJDeE5RVUZOTEV0QlFVc3NaMEpCUVdkQ08xRkJRM3BDTEVsQlFVa3NSMEZCUnl4SFFVRmhMRVZCUVVVc1EwRkJRenRSUVVOMlFpeE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVVU3V1VGRE9VTXNUVUZCVFN4TFFVRkxMRWRCUVVjc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTnFReXhIUVVGSExFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NSVUZCUlN4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJRek5DTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTBnc1QwRkJUeXhIUVVGSExFTkJRVU03U1VGRFlpeERRVUZETzBOQlEwb2lMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdlME52YjNKa2FXNWhkR1Z6TENCRWFYTjBZVzVqWlUxbGRISnBZeXdnVFdGMGNtbDRMQ0JQY0hScGIyNXpMQ0JXWldOMGIzSXNJRlpsWTNSdmNuTjlYRzRnSUdaeWIyMGdKMEJrWVhSaFozSnZheTFzYVdKeVlYSnBaWE12ZFhScGJITXZjM0pqTDNSNWNHVXRaR1ZqYkdGeVlYUnBiMjV6Snp0Y2JtbHRjRzl5ZENCN1FYWmhhV3hoWW14bFJHRjBZVlI1Y0dWekxDQkJkbUZwYkdGaWJHVk5aWFJ5YVdOekxDQkxibTkzYmsxbGRISnBZM01zSUUxbFlYTjFjbVVzSUdselFtbDBRWEp5WVhsTlpYUnlhV045SUdaeWIyMGdKeTR1TDNSNWNHVmtMVzFsZEhKcFkzTW5PMXh1YVcxd2IzSjBJSHRFYVhOMFlXNWpaVTFoZEhKcGVGTmxjblpwWTJWOUlHWnliMjBnSnk0dUwyUnBjM1JoYm1ObExXMWhkSEpwZUNjN1hHNXBiWEJ2Y25RZ2UwUnBjM1JoYm1ObFFXZG5jbVZuWVhScGIyNU5aWFJvYjJSOUlHWnliMjBnSnk0dUwyUnBjM1JoYm1ObExXMWhkSEpwZUM5MGVYQmxjeWM3WEc1cGJYQnZjblFnZTFWTlFWQjlJR1p5YjIwZ0p5NHVMM1Z0WVhBbk8xeHVhVzF3YjNKMElIdGhjM05sY25Rc0lIUnlZVzV6Y0c5elpVMWhkSEpwZUgwZ1puSnZiU0FuUUdSaGRHRm5jbTlyTFd4cFluSmhjbWxsY3k5MWRHbHNjeTl6Y21NdmRtVmpkRzl5TFc5d1pYSmhkR2x2Ym5Nbk8xeHVhVzF3YjNKMElIdExibTVTWlhOMWJIUXNJRk53WVhKelpVMWhkSEpwZUZObGNuWnBZMlY5SUdaeWIyMGdKeTR1TDJScGMzUmhibU5sTFcxaGRISnBlQzl6Y0dGeWMyVXRiV0YwY21sNExYTmxjblpwWTJVbk8xeHVhVzF3YjNKMElIdEVhVzFTWldSMVkzUnBiMjVOWlhSb2IyUnpmU0JtY205dElDY3VMM1I1Y0dWekp6dGNibWx0Y0c5eWRDQkNhWFJCY25KaGVTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwzVjBhV3h6TDNOeVl5OWlhWFF0WVhKeVlYa25PMXh1YVcxd2IzSjBJSE5sWldSU1lXNWtiMjBnWm5KdmJTQW5jMlZsWkhKaGJtUnZiU2M3WEc0dkwybHRjRzl5ZENCN1ZGTk9SWDBnWm5KdmJTQW5RR3RsWTJ0bGJIUXZkSE51WlNjN1hHNXBiWEJ2Y25RZ2UxUlRUa1Y5SUdaeWIyMGdKeTR1TDNRdGMyNWxMM1F0YzI1bEp6dGNibWx0Y0c5eWRDQjdiWFZzZEdsRGIyeFhaV0pIVUZWTFRrNTlJR1p5YjIwZ0owQmtZWFJoWjNKdmF5MXNhV0p5WVhKcFpYTXZiV0YwYUNjN1hHNXBiWEJ2Y25RZ2UxZGxZa2RRVlZWTlFWQjlJR1p5YjIwZ0owQmtZWFJoWjNKdmF5MXNhV0p5WVhKcFpYTXZiV0YwYUM5emNtTXZkMlZpUjFCVkwzVnRZWEFuTzF4dVhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElFbFZUVUZRVDNCMGFXOXVjeUI3WEc0Z0lDQWdiR1ZoY201cGJtZFNZWFJsUHpvZ2JuVnRZbVZ5TzF4dUlDQWdJRzVEYjIxd2IyNWxiblJ6UHpvZ2JuVnRZbVZ5TzF4dUlDQWdJRzVGY0c5amFITS9PaUJ1ZFcxaVpYSTdYRzRnSUNBZ2JrNWxhV2RvWW05eWN6ODZJRzUxYldKbGNqdGNiaUFnSUNCemNISmxZV1EvT2lCdWRXMWlaWEk3WEc0Z0lDQWdiV2x1UkdsemREODZJRzUxYldKbGNqdGNiaUFnSUNCd2NtOW5jbVZ6YzBaMWJtTS9PaUFvWlhCdll6b2diblZ0WW1WeUxDQmxjRzlqYUhOTVpXNW5kR2c2SUc1MWJXSmxjaXdnWlcxaVpXUmthVzVuY3pvZ2JuVnRZbVZ5VzExYlhTa2dQVDRnZG05cFpEdGNiaUFnSUNCeVlXNWtiMjFUWldWa1B6b2djM1J5YVc1bk8xeHVJQ0FnSUhWelpWZGxZa2RRVlQ4NklHSnZiMnhsWVc0N1hHNTlYRzVjYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnU1ZSVFRrVlBjSFJwYjI1eklIdGNiaUFnSUNCbGNITnBiRzl1UHpvZ2JuVnRZbVZ5TzF4dUlDQWdJSEJsY25Cc1pYaHBkSGsvT2lCdWRXMWlaWEk3WEc0Z0lDQWdaR2x0UHpvZ2JuVnRZbVZ5TzF4dWZWeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRWxFYVcxU1pXUjFZM1JwYjI1UVlYSmhiVHhVSUdWNGRHVnVaSE1nYm5WdFltVnlJSHdnYzNSeWFXNW5JSHdnWW05dmJHVmhiaUE5SUc1MWJXSmxjajRnZTF4dUlDQWdJSFZwVG1GdFpUb2djM1J5YVc1bk8xeHVJQ0FnSUhaaGJIVmxPaUFvVkNCbGVIUmxibVJ6SUc1MWJXSmxjaUEvSUc1MWJXSmxjaUE2SUZRZ1pYaDBaVzVrY3lCemRISnBibWNnUHlCemRISnBibWNnT2lCaWIyOXNaV0Z1S1NCOElHNTFiR3c3WEc0Z0lDQWdkRzl2YkhScGNEb2djM1J5YVc1bk8xeHVJQ0FnSUhSNWNHVS9PaUJVSUdWNGRHVnVaSE1nYm5WdFltVnlJRDhnSjI1MWJXSmxjaWNnT2lCVUlHVjRkR1Z1WkhNZ2MzUnlhVzVuSUQ4Z0ozTjBjbWx1WnljZ09pQW5ZbTl2YkdWaGJpYzdYRzRnSUNBZ2NHeGhZMlZvYjJ4a1pYSS9PaUJ6ZEhKcGJtYzdYRzRnSUNBZ2JXbHVQem9nYm5WdFltVnlPMXh1SUNBZ0lHMWhlRDg2SUc1MWJXSmxjanRjYmlBZ0lDQnpkR1Z3UHpvZ2JuVnRZbVZ5TzF4dUlDQWdJR1JwYzJGaWJHVS9PaUJpYjI5c1pXRnVPMXh1SUNBZ0lHUnBjMkZpYkdWVWIyOXNkR2x3UHpvZ2MzUnlhVzVuTzF4dWZWeHVYRzVoWW5OMGNtRmpkQ0JqYkdGemN5Qk5kV3gwYVVOdmJIVnRibEpsWkhWalpYSWdlMXh1SUNBZ0lIQnliM1JsWTNSbFpDQmtZWFJoT2lCV1pXTjBiM0p6VzEwN1hHNGdJQ0FnY0hKdmRHVmpkR1ZrSUhkbGFXZG9kSE02SUc1MWJXSmxjbHRkTzF4dUlDQWdJSEJ5YjNSbFkzUmxaQ0JoWjJkeVpXZGhkR2x2YmsxbGRHaHZaRG9nUkdsemRHRnVZMlZCWjJkeVpXZGhkR2x2YmsxbGRHaHZaRHRjYmlBZ0lDQmpiMjV6ZEhKMVkzUnZjaWh2Y0hScGIyNXpPaUJQY0hScGIyNXpLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtUmhkR0VnUFNCdmNIUnBiMjV6TG1SaGRHRTdYRzRnSUNBZ0lDQjBhR2x6TG5kbGFXZG9kSE1nUFNCdmNIUnBiMjV6TG5kbGFXZG9kSE03WEc0Z0lDQWdJQ0IwYUdsekxtRm5aM0psWjJGMGFXOXVUV1YwYUc5a0lEMGdiM0IwYVc5dWN5NWhaMmR5WldkaGRHbHZiazFsZEdodlpEdGNiaUFnSUNCOVhHNWNiaUFnSUNBdktpb2dSVzFpWldSeklIUm9aU0JrWVhSaElHZHBkbVZ1SUdsdWRHOGdkR2hsSUhSM2J5MWthVzFsYm5OcGIyNWhiQ0J6Y0dGalpTNWNiaUFnSUNBZ0tpQkFjbVYwZFhKdUlIdGhibmw5SUVOaGNuUmxjMmxoYmlCamIyOXlaR2x1WVhSbElHOW1JSFJvYVhNZ1pXMWlaV1JrYVc1bklHRnVaQ0JrYVhOMFlXNWpaU0J0WVhSeWFYZ2dkMmhsY21VZ1lYQndiR2xqWVdKc1pTNGdLaTljYmlBZ0lDQmhZbk4wY21GamRDQjBjbUZ1YzJadmNtMG9LVG9nVUhKdmJXbHpaVHhOWVhSeWFYZytPMXh1ZlZ4dVhHNWpiR0Z6Y3lCVVUwNUZVbVZrZFdObGNpQmxlSFJsYm1SeklFMTFiSFJwUTI5c2RXMXVVbVZrZFdObGNpQjdYRzRnSUNBZ2NISnZkR1ZqZEdWa0lISmxaSFZqWlhJNklGUlRUa1U3WEc0Z0lDQWdjSEp2ZEdWamRHVmtJR2wwWlhKaGRHbHZibk02SUc1MWJXSmxjanRjYmlBZ0lDQndjbTkwWldOMFpXUWdaR2x6ZEdGdVkyVkdibUZ0WlhNNklFdHViM2R1VFdWMGNtbGpjMXRkTzF4dUlDQWdJSEJ5YjNSbFkzUmxaQ0JrYVhOMFlXNWpaVVp1Y3pvZ0tDaGhPaUJoYm5rc0lHSTZJR0Z1ZVNrZ1BUNGdiblZ0WW1WeUtWdGRPMXh1SUNBZ0lIQnliM1JsWTNSbFpDQmthWE4wWVc1alpVWnVRWEpuY3pvZ2UxdGZPaUJ6ZEhKcGJtZGRPaUJoYm5sOVcxMDdYRzRnSUNBZ2NISnZkR1ZqZEdWa0lIQnliMmR5WlhOelJuVnVZejg2SUNobGNHOWpPaUJ1ZFcxaVpYSXNJR1Z3YjJOb2MweGxibWQwYURvZ2JuVnRZbVZ5TENCbGJXSmxaR1JwYm1kelB6b2diblZ0WW1WeVcxMWJYU2tnUFQ0Z2RtOXBaRHRjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJEY21WaGRHVnpJR0Z1SUdsdWMzUmhibU5sSUc5bUlGUlRUa1ZTWldSMVkyVnlMbHh1SUNBZ0lDQXFJRUJ3WVhKaGJTQjdUM0IwYVc5dWMzMGdiM0IwYVc5dWN5QlBjSFJwYjI1eklIUnZJSEJoYzNNZ2RHOGdkR2hsSUdOdmJuTjBjblZqZEc5eUxseHVJQ0FnSUNBcUlFQnRaVzFpWlhKdlppQlVVMDVGVW1Wa2RXTmxjbHh1SUNBZ0lDQXFMMXh1SUNBZ0lHTnZibk4wY25WamRHOXlLRzl3ZEdsdmJuTTZJRTl3ZEdsdmJuTXBJSHRjYmlBZ0lDQWdJSE4xY0dWeUtHOXdkR2x2Ym5NcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnY21GdVpHOXRVMlZsWkRvZ2MzUnlhVzVuSUQwZ2IzQjBhVzl1Y3k1eVlXNWtiMjFUWldWa0lEOC9JRVJoZEdVb0tUdGNiaUFnSUNBZ0lHTnZibk4wSUhKaGJtUnZiVVp1SUQwZ2MyVmxaRkpoYm1SdmJTaHlZVzVrYjIxVFpXVmtLVHRjYmlBZ0lDQWdJRzl3ZEdsdmJuTXVaR2x0SUQwZ01qc2dMeThnVkU5RVR6b2diV0ZyWlNCcGRDQmpiMjVtYVdkMWNtRmliR1ZjYmlBZ0lDQWdJRzl3ZEdsdmJuTXVjbUZ1Wkc5dElEMGdjbUZ1Wkc5dFJtNDdYRzRnSUNBZ0lDQjBhR2x6TG5KbFpIVmpaWElnUFNCdVpYY2dWRk5PUlNodmNIUnBiMjV6S1R0Y2JpQWdJQ0FnSUhSb2FYTXVhWFJsY21GMGFXOXVjeUE5SUc5d2RHbHZibk0vTG1sMFpYSmhkR2x2Ym5NZ1B6OGdkR2hwY3k1eVpXUjFZMlZ5TG1kbGRFbDBaWEpUYVhwbEtIUm9hWE11WkdGMFlWc3dYUzVzWlc1bmRHZ3BPMXh1SUNBZ0lDQWdkR2hwY3k1a2FYTjBZVzVqWlVadVlXMWxjeUE5SUc5d2RHbHZibk11WkdsemRHRnVZMlZHYm1GdFpYTTdYRzRnSUNBZ0lDQjBhR2x6TG1ScGMzUmhibU5sUm01eklEMGdiM0IwYVc5dWN5NWthWE4wWVc1alpVWnVjenRjYmlBZ0lDQWdJSFJvYVhNdVpHbHpkR0Z1WTJWR2JrRnlaM01nUFNCdmNIUnBiMjV6TG1ScGMzUmhibU5sUm01QmNtZHpPMXh1SUNBZ0lDQWdkR2hwY3k1d2NtOW5jbVZ6YzBaMWJtTWdQU0J2Y0hScGIyNXpMbkJ5YjJkeVpYTnpSblZ1WXp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2S2lwY2JpQWdJQ0FnS2lCRmJXSmxaSE1nZEdobElHUmhkR0VnWjJsMlpXNGdhVzUwYnlCMGFHVWdkSGR2TFdScGJXVnVjMmx2Ym1Gc0lITndZV05sSUhWemFXNW5JSFF0VTA1RklHMWxkR2h2WkM1Y1hGeHVJQ0FnSUNBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm4wZ1czQmhjbUZzYkdWc1JHbHpkR0Z1WTJWWGIzSnJaWEp6WFNCWGFHVjBhR1Z5SUhSdklIVnpaU0J3WVhKaGJHeGxiQ0JrYVhOMFlXNWpaU0IzYjNKclpYSnpMbHh1SUNBZ0lDQXFJRUJ5WlhSMWNtNGdlMkZ1ZVgwZ1EyRnlkR1Z6YVdGdUlHTnZiM0prYVc1aGRHVWdiMllnZEdocGN5QmxiV0psWkdScGJtY2dZVzVrSUdScGMzUmhibU5sSUcxaGRISnBlQ0IzYUdWeVpTQmhjSEJzYVdOaFlteGxMbHh1SUNBZ0lDQXFMMXh1SUNBZ0lIQjFZbXhwWXlCaGMzbHVZeUIwY21GdWMyWnZjbTBvS1RvZ1VISnZiV2x6WlR4TllYUnlhWGcrSUh0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6TG1SaGRHRmJNRjB1YkdWdVozUm9JRDRnTVRBd01EQXBYRzRnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25UV0Y0YVcxMWJTQnVkVzFpWlhJZ2IyWWdjMkZ0Y0d4bGN5Qm1iM0lnVkMxVFRrVWdhWE1nTVRBd01EQW5LVHRjYmlBZ0lDQWdJR052Ym5OMElHMWhkSEpwZUZObGNuWnBZMlVnUFNCdVpYY2dSR2x6ZEdGdVkyVk5ZWFJ5YVhoVFpYSjJhV05sS0hSeWRXVXNJR1poYkhObEtUdGNiaUFnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUM4dklHTnZibk4wSUdGblozSmxaMkYwWlNBOUlHZGxkRUZuWjNKbFoyRjBhVzl1Um5WdVkzUnBiMjRvZEdocGN5NWhaMmR5WldkaGRHbHZiazFsZEdodlpDd2dkR2hwY3k1M1pXbG5hSFJ6S1R0Y2JpQWdJQ0FnSUNBZ0x5OGdZMjl1YzNRZ1pHbHpkR0Z1WTJWek9pQkJjbkpoZVR4R2JHOWhkRE15UVhKeVlYaytJRDBnVzEwN1hHNGdJQ0FnSUNBZ0lDOHZJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnZEdocGN5NWtZWFJoTG14bGJtZDBhRHNnS3l0cEtTQjdYRzRnSUNBZ0lDQWdJQzh2SUNBZ1kyOXVjM1FnWkdsemRDQTlJR0YzWVdsMElHMWhkSEpwZUZObGNuWnBZMlV1WTJGc1l5aDBhR2x6TG1SaGRHRmJhVjBzSUhSb2FYTXVaR2x6ZEdGdVkyVkdibUZ0WlhOYmFWMHNJR1poYkhObExDQjBhR2x6TG1ScGMzUmhibU5sUm01QmNtZHpXMmxkS1R0Y2JpQWdJQ0FnSUNBZ0x5OGdJQ0JrYVhOMFlXNWpaWE11Y0hWemFDaGthWE4wS1R0Y2JpQWdJQ0FnSUNBZ0x5OGdmVnh1SUNBZ0lDQWdJQ0F2THlCamIyNXpkQ0JrYVhOMFlXNWpaU0E5SUc1bGR5QkdiRzloZERNeVFYSnlZWGtvWkdsemRHRnVZMlZ6V3pCZExteGxibWQwYUNrdVptbHNiQ2d3S1R0Y2JpQWdJQ0FnSUNBZ0x5OGdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JrYVhOMFlXNWpaWE5iTUYwdWJHVnVaM1JvT3lBcksya3BYRzRnSUNBZ0lDQWdJQzh2SUNBZ1pHbHpkR0Z1WTJWYmFWMGdQU0JoWjJkeVpXZGhkR1VvWkdsemRHRnVZMlZ6TG0xaGNDZ29aQ2tnUFQ0Z1pGdHBYU2twTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JrYVhOMFlXNWpaU0E5SUdGM1lXbDBJRzFoZEhKcGVGTmxjblpwWTJVdVkyRnNZMDExYkhScEtIUm9hWE11WkdGMFlTd2dkR2hwY3k1a2FYTjBZVzVqWlVadVlXMWxjeXdnWm1Gc2MyVXNJSFJvYVhNdVpHbHpkR0Z1WTJWR2JrRnlaM01zWEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTUzWldsbmFIUnpMQ0IwYUdsekxtRm5aM0psWjJGMGFXOXVUV1YwYUc5a0tUdGNiaUFnSUNBZ0lDQWdiV0YwY21sNFUyVnlkbWxqWlM1MFpYSnRhVzVoZEdVb0tUdGNiaUFnSUNBZ0lDQWdMeThnWTI5dWMzUWdiV0YwY21sNFVISnZlSGtnUFNCa2FYTjBZVzVqWlUxaGRISnBlRkJ5YjNoNUtHUnBjM1JoYm1ObExDQjBhR2x6TG1SaGRHRmJNRjB1YkdWdVozUm9LVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXlaV1IxWTJWeUxtbHVhWFJFWVhSaFJHbHpkQ2hrYVhOMFlXNWpaU3dnZEdocGN5NWtZWFJoV3pCZExteGxibWQwYUNrN1hHNWNiaUFnSUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0IwYUdsekxtbDBaWEpoZEdsdmJuTTdJQ3NyYVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWNtVmtkV05sY2k1emRHVndLQ2s3SUM4dklHVjJaWEo1SUhScGJXVWdlVzkxSUdOaGJHd2dkR2hwY3l3Z2MyOXNkWFJwYjI0Z1oyVjBjeUJpWlhSMFpYSmNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTV3Y205bmNtVnpjMFoxYm1NcFhHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxuQnliMmR5WlhOelJuVnVZeWhwTENCMGFHbHpMbWwwWlhKaGRHbHZibk1zSUZ0ZEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1eVpXUjFZMlZ5TG1kbGRGTnZiSFYwYVc5dUtDazdYRzRnSUNBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0FnSUcxaGRISnBlRk5sY25acFkyVXVkR1Z5YldsdVlYUmxLQ2s3WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJR1U3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1ZlZ4dVhHNWpiR0Z6Y3lCVlRVRlFVbVZrZFdObGNpQmxlSFJsYm1SeklFMTFiSFJwUTI5c2RXMXVVbVZrZFdObGNpQjdYRzRnSUNBZ2NISnZkR1ZqZEdWa0lISmxaSFZqWlhJNklGVk5RVkE3WEc0Z0lDQWdjSEp2ZEdWamRHVmtJR1JwYzNSaGJtTmxSbTVoYldWek9pQkxibTkzYmsxbGRISnBZM05iWFR0Y2JpQWdJQ0J3Y205MFpXTjBaV1FnWkdsemRHRnVZMlZHYm5NNklFWjFibU4wYVc5dVcxMDdYRzRnSUNBZ2NISnZkR1ZqZEdWa0lIWmxZM1J2Y25NNklHNTFiV0psY2x0ZE8xeHVJQ0FnSUhCeWIzUmxZM1JsWkNCd2NtOW5jbVZ6YzBaMWJtTS9PaUFvWlhCdll6b2diblZ0WW1WeUxDQmxjRzlqYUhOTVpXNW5kR2c2SUc1MWJXSmxjaXdnWlcxaVpXUmthVzVuT2lCdWRXMWlaWEpiWFZ0ZEtTQTlQaUIyYjJsa08xeHVJQ0FnSUhCeWIzUmxZM1JsWkNCa2FYTjBZVzVqWlVadVFYSm5jem9nZTF0Zk9pQnpkSEpwYm1kZE9pQmhibmw5VzEwN1hHNGdJQ0FnY0hKdmRHVmpkR1ZrSUhWelpWZGxZa2RRVlRvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sTzF4dUlDQWdJSEJ5YjNSbFkzUmxaQ0IzWldKSFVGVlNaV1IxWTJWeU9pQlhaV0pIVUZWVlRVRlFJSHdnZFc1a1pXWnBibVZrTzF4dUlDQWdJQzhxS2x4dUlDQWdJQ0FxSUVOeVpXRjBaWE1nWVc0Z2FXNXpkR0Z1WTJVZ2IyWWdWVTFCVUZKbFpIVmpaWEl1WEc0Z0lDQWdJQ29nUUhCaGNtRnRJSHRQY0hScGIyNXpmU0J2Y0hScGIyNXpJRTl3ZEdsdmJuTWdkRzhnY0dGemN5QjBieUIwYUdVZ1kyOXVjM1J5ZFdOMGIzSXVYRzRnSUNBZ0lDb2dRRzFsYldKbGNtOW1JRlZOUVZCU1pXUjFZMlZ5WEc0Z0lDQWdJQ292WEc0Z0lDQWdZMjl1YzNSeWRXTjBiM0lvYjNCMGFXOXVjem9nVDNCMGFXOXVjeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjbUZ1Wkc5dFUyVmxaRG9nYzNSeWFXNW5JRDBnYjNCMGFXOXVjeTV5WVc1a2IyMVRaV1ZrSUQ4L0lFUmhkR1VvS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJSEpoYm1SdmJVWnVJRDBnYzJWbFpGSmhibVJ2YlNoeVlXNWtiMjFUWldWa0tUdGNiaUFnSUNBZ0lITjFjR1Z5S0c5d2RHbHZibk1wTzF4dUlDQWdJQ0FnWVhOelpYSjBLQ2RrYVhOMFlXNWpaVVp1WVcxbGN5Y2dhVzRnYjNCMGFXOXVjeWs3WEc0Z0lDQWdJQ0JoYzNObGNuUW9KMlJwYzNSaGJtTmxSbTV6SnlCcGJpQnZjSFJwYjI1ektUdGNiaUFnSUNBZ0lIUm9hWE11WkdsemRHRnVZMlZHYmtGeVozTWdQU0J2Y0hScGIyNXpMbVJwYzNSaGJtTmxSbTVCY21kek8xeHVJQ0FnSUNBZ2RHaHBjeTVrYVhOMFlXNWpaVVp1Y3lBOUlHOXdkR2x2Ym5NdVpHbHpkR0Z1WTJWR2JuTWhPMXh1SUNBZ0lDQWdkR2hwY3k1d2NtOW5jbVZ6YzBaMWJtTWdQU0J2Y0hScGIyNXpMbkJ5YjJkeVpYTnpSblZ1WXp0Y2JpQWdJQ0FnSUhSb2FYTXVkWE5sVjJWaVIxQlZJRDBnYjNCMGFXOXVjeTUxYzJWWFpXSkhVRlVnUHo4Z1ptRnNjMlU3WEc0Z0lDQWdJQ0IwYUdsekxtUnBjM1JoYm1ObFJtNWhiV1Z6SUQwZ2IzQjBhVzl1Y3k1a2FYTjBZVzVqWlVadVlXMWxjeUU3WEc0Z0lDQWdJQ0J2Y0hScGIyNXpMbTVEYjIxd2IyNWxiblJ6SUQwZ01qc2dMeThnVkU5RVR6b2diV0ZyWlNCcGRDQmpiMjVtYVdkMWNtRmliR1ZjYmlBZ0lDQWdJQzh2VlcxaGNDQjFjMlZ6SUhabFkzUnZjaUJwYm1SbGVHbHVaeXdnYzI4Z2QyVWdibVZsWkNCMGJ5QmpjbVZoZEdVZ1lXNGdZWEp5WVhrZ2IyWWdkbVZqZEc5eWN5QmhjeUJwYm1SbFkyVnpMbHh1SUNBZ0lDQWdkR2hwY3k1MlpXTjBiM0p6SUQwZ2JtVjNJRUZ5Y21GNUtIUm9hWE11WkdGMFlWc3dYUzVzWlc1bmRHZ3BMbVpwYkd3b01Da3ViV0Z3S0NoZkxDQnBLU0E5UGlCcEtUdGNibHh1SUNBZ0lDQWdhV1lnS0hSb2FYTXVaR0YwWVZzd1hTNXNaVzVuZEdnZ1BEMGdLRzl3ZEdsdmJuTXViazVsYVdkb1ltOXljeUEvUHlBeE5Ta3BYRzRnSUNBZ0lDQWdJRzl3ZEdsdmJuTXViazVsYVdkb1ltOXljeUE5SUhSb2FYTXVaR0YwWVZzd1hTNXNaVzVuZEdnZ0xTQXhPMXh1SUNBZ0lDQWdiM0IwYVc5dWN5NXlZVzVrYjIwZ1BTQnlZVzVrYjIxR2JqdGNiaUFnSUNBZ0lIUm9hWE11Y21Wa2RXTmxjaUE5SUc1bGR5QlZUVUZRS0c5d2RHbHZibk1wTzF4dUlDQWdJQ0FnTHk4Z2RHaHBjeTV5WldSMVkyVnlMbVJwYzNSaGJtTmxSbTRnUFNCMGFHbHpMbDlsYm1OdlpHVmtSR2x6ZEdGdVkyVXVZbWx1WkNoMGFHbHpLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJGYldKbFpITWdkR2hsSUdSaGRHRWdaMmwyWlc0Z2FXNTBieUIwYUdVZ2RIZHZMV1JwYldWdWMybHZibUZzSUhOd1lXTmxJSFZ6YVc1bklGVk5RVkFnYldWMGFHOWtMbHh1SUNBZ0lDQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdXMTl3WVhKaGJHeGxiRVJwYzNSaGJtTmxWMjl5YTJWeWMxMGdWMmhsZEdobGNpQjBieUIxYzJVZ2NHRnlZV3hzWld3Z1pHbHpkR0Z1WTJVZ2JXRjBjbWw0SUhkdmNtdGxjbk11WEc0Z0lDQWdJQ29nUUhKbGRIVnliaUI3WVc1NWZTQkRZWEowWlhOcFlXNGdZMjl2Y21ScGJtRjBaU0J2WmlCMGFHbHpJR1Z0WW1Wa1pHbHVaeTVjYmlBZ0lDQWdLaTljYmlBZ0lDQndkV0pzYVdNZ1lYTjVibU1nZEhKaGJuTm1iM0p0S0Y5d1lYSmhiR3hsYkVScGMzUmhibU5sVjI5eWEyVnljejg2SUdKdmIyeGxZVzRwT2lCUWNtOXRhWE5sUEUxaGRISnBlRDRnZTF4dUlDQWdJQ0FnWTI5dWMyOXNaUzUwYVcxbEtDZHJibTRnWjNKaGNHZ25LVHRjYmlBZ0lDQWdJR3hsZENCcmJtNUhjbUZ3YURvZ1MyNXVVbVZ6ZFd4MElId2dkVzVrWldacGJtVmtJRDBnZFc1a1pXWnBibVZrTzF4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11ZFhObFYyVmlSMUJWS1NCN1hHNGdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ2EyNXVSM0poY0dnZ1BTQmhkMkZwZENCdGRXeDBhVU52YkZkbFlrZFFWVXRPVGloY2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVpHRjBZU3dnZEdocGN5NXlaV1IxWTJWeUxtNWxhV2RvWW05eWN5d2dkR2hwY3k1a2FYTjBZVzVqWlVadVlXMWxjeUJoY3lCaGJua3NJSFJvYVhNdVlXZG5jbVZuWVhScGIyNU5aWFJvYjJRZ1lYTWdZVzU1TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1M1pXbG5hSFJ6TENCMGFHbHpMbVJwYzNSaGJtTmxSbTVCY21kelhHNGdJQ0FnSUNBZ0lDQWdLU0JoY3lCMWJtdHViM2R1SUdGeklFdHVibEpsYzNWc2REdGNiaUFnSUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZibk52YkdVdVpYSnliM0lvWlNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2doYTI1dVIzSmhjR2dwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWRYTmxWMlZpUjFCVktWeHVJQ0FnSUNBZ0lDQWdJR052Ym5OdmJHVXVaWEp5YjNJb0oxZEZRa2RRVlNCTFRrNGdabUZwYkdWa0xDQm1ZV3hzYVc1bklHSmhZMnNnZEc4Z2JYVnNkR2wwYUhKbFlXUmxaQ0JEVUZVZ2FXMXdiR1Z0Wlc1MFlYUnBiMjRuS1R0Y2JpQWdJQ0FnSUNBZ2EyNXVSM0poY0dnZ1BTQmhkMkZwZENCdVpYY2dVM0JoY25ObFRXRjBjbWw0VTJWeWRtbGpaU2dwWEc0Z0lDQWdJQ0FnSUNBZ0xtMTFiSFJwUTI5c2RXMXVTMDVPS0hSb2FYTXVaR0YwWVN3Z2RHaHBjeTVrYVhOMFlXNWpaVVp1WVcxbGN5d2dkR2hwY3k1eVpXUjFZMlZ5TG01bGFXZG9ZbTl5Y3l4Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVpHbHpkR0Z1WTJWR2JrRnlaM01zSUhSb2FYTXVkMlZwWjJoMGN5d2dkR2hwY3k1aFoyZHlaV2RoZEdsdmJrMWxkR2h2WkNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCamIyNXpiMnhsTG5ScGJXVkZibVFvSjJ0dWJpQm5jbUZ3YUNjcE8xeHVJQ0FnSUNBZ2FXWWdLSFJvYVhNdWRYTmxWMlZpUjFCVktTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWQyVmlSMUJWVW1Wa2RXTmxjaUE5SUc1bGR5QlhaV0pIVUZWVlRVRlFLSFJvYVhNdWRtVmpkRzl5Y3k1c1pXNW5kR2dzSUh0Y2JpQWdJQ0FnSUNBZ0lDQnVRMjl0Y0c5dVpXNTBjem9nZEdocGN5NXlaV1IxWTJWeUxtNURiMjF3YjI1bGJuUnpMRnh1SUNBZ0lDQWdJQ0FnSUdkaGJXMWhPaUIwYUdsekxuSmxaSFZqWlhJdWNtVndkV3h6YVc5dVUzUnlaVzVuZEdnc1hHNGdJQ0FnSUNBZ0lDQWdZV3h3YUdFNklIUm9hWE11Y21Wa2RXTmxjaTVzWldGeWJtbHVaMUpoZEdVc1hHNGdJQ0FnSUNBZ0lDQWdiazVsYVdkb1ltOTFjbk02SUhSb2FYTXVjbVZrZFdObGNpNXVaV2xuYUdKdmNuTXNYRzRnSUNBZ0lDQWdJQ0FnYzNCeVpXRmtPaUIwYUdsekxuSmxaSFZqWlhJdWMzQnlaV0ZrTEZ4dUlDQWdJQ0FnSUNBZ0lHMXBia1JwYzNRNklIUm9hWE11Y21Wa2RXTmxjaTV0YVc1RWFYTjBMRnh1SUNBZ0lDQWdJQ0FnSUc1bFoyRjBhWFpsVTJGdGNHeGxVbUYwWlRvZ2RHaHBjeTV5WldSMVkyVnlMbTVsWjJGMGFYWmxVMkZ0Y0d4bFVtRjBaU3hjYmlBZ0lDQWdJQ0FnSUNCc2IyTmhiRU52Ym01bFkzUnBkbWwwZVRvZ2RHaHBjeTV5WldSMVkyVnlMbXh2WTJGc1EyOXVibVZqZEdsMmFYUjVMRnh1SUNBZ0lDQWdJQ0FnSUhObGRFOXdUV2w0VW1GMGFXODZJSFJvYVhNdWNtVmtkV05sY2k1elpYUlBjRTFwZUZKaGRHbHZMRnh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUzWldKSFVGVlNaV1IxWTJWeUxuTmxkRkJ5WldOdmJYQjFkR1ZrUzA1T0tHdHVia2R5WVhCb0xtdHVia2x1WkdWNFpYTXNJR3R1YmtkeVlYQm9MbXR1YmtScGMzUmhibU5sY3lrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbkpsWkhWalpYSXVjMlYwVUhKbFkyOXRjSFYwWldSTFRrNG9hMjV1UjNKaGNHZ3VhMjV1U1c1a1pYaGxjeXdnYTI1dVIzSmhjR2d1YTI1dVJHbHpkR0Z1WTJWektUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdMeThnYm1WbFpHVmtJSE52SUhSb1lYUWdaMkZ5WW1GblpTQmpiMnhzWldOMGIzSWdZMkZ1SUdaeVpXVWdiV1Z0YjNKNUlHWnliMjBnWkdsemRHRnVZMlVnYldGMGNtbDRYRzRnSUNBZ0lDQmhkMkZwZENCdVpYY2dVSEp2YldselpUeDJiMmxrUGlnb2NtVnpiMngyWlNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0J6WlhSVWFXMWxiM1YwS0NncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYTnZiSFpsS0NrN1hHNGdJQ0FnSUNBZ0lIMHNJRE13TUNrN1hHNGdJQ0FnSUNCOUtUdGNibHh1SUNBZ0lDQWdiR1YwSUdWdFltVmtaR2x1WnpvZ2JuVnRZbVZ5VzExYlhTQjhJRVpzYjJGME16SkJjbkpoZVZ0ZElId2dkVzVrWldacGJtVmtJSHh1ZFd4c0lEMGdiblZzYkR0Y2JpQWdJQ0FnSUdOdmJuTnZiR1V1ZEdsdFpTZ25abWwwSnlrN1hHNGdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTUxYzJWWFpXSkhVRlVnSmlZZ2RHaHBjeTUzWldKSFVGVlNaV1IxWTJWeUtTQjdYRzRnSUNBZ0lDQWdJQ0FnWlcxaVpXUmthVzVuSUQwZ1lYZGhhWFFnZEdocGN5NTNaV0pIVUZWU1pXUjFZMlZ5TG1acGRDZ3BPMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDZ2haVzFpWldSa2FXNW5LVnh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkR1lXbHNaV1FnZEc4Z1kyOXRjSFYwWlNCbGJXSmxaR1JwYm1jbktUdGNiaUFnSUNBZ0lDQWdJQ0JsYldKbFpHUnBibWNnUFNBdkx5QjBjbUZ1YzNCdmMyVWdWRTlFVHpvZ1pHOGdZU0JpWlhSMFpYSWdhbTlpSUdobGNtVmNiaUFnSUNBZ0lDQWdJQ0FnSUc1bGR5QkJjbkpoZVNobGJXSmxaR1JwYm1kYk1GMHViR1Z1WjNSb0tTNW1hV3hzS0c1MWJHd3BMbTFoY0Nnb1h5d2dhU2tnUFQ0Z2JtVjNJRVpzYjJGME16SkJjbkpoZVNobGJXSmxaR1JwYm1jaExtMWhjQ2dvZGlrZ1BUNGdkbHRwWFNrcEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpiMnhsTG1WeWNtOXlLR1VwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYVdZZ0tDRmxiV0psWkdScGJtY3BJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11ZFhObFYyVmlSMUJWS1Z4dUlDQWdJQ0FnSUNBZ0lHTnZibk52YkdVdVpYSnliM0lvSjFkRlFrZFFWU0JWVFVGUUlHWmhhV3hsWkN3Z1ptRnNiR2x1WnlCaVlXTnJJSFJ2SUVOUVZTQnBiWEJzWlcxbGJuUmhkR2x2YmljcE8xeHVJQ0FnSUNBZ0lDQmxiV0psWkdScGJtY2dQU0JoZDJGcGRDQjBhR2x6TG5KbFpIVmpaWEl1Wm1sMFFYTjVibU1vZEdocGN5NTJaV04wYjNKekxDQW9aWEJ2WXlrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG5CeWIyZHlaWE56Um5WdVl5bGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVjSEp2WjNKbGMzTkdkVzVqS0dWd2IyTXNJSFJvYVhNdWNtVmtkV05sY2k1blpYUk9SWEJ2WTJoektDa3NJSFJvYVhNdWNtVmtkV05sY2k1blpYUkZiV0psWkdScGJtY29LU2s3WEc0Z0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ1kyOXVjMjlzWlM1MGFXMWxSVzVrS0NkbWFYUW5LVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmhjbkpoZVVOaGMzUXlRMjl2Y21ScGJtRjBaWE1vWlcxaVpXUmthVzVuS1R0Y2JpQWdJQ0FnSUdaMWJtTjBhVzl1SUdGeWNtRjVRMkZ6ZERKRGIyOXlaR2x1WVhSbGN5aGtZWFJoT2lCdWRXMWlaWEpiWFZ0ZElId2dSbXh2WVhRek1rRnljbUY1VzEwcE9pQkRiMjl5WkdsdVlYUmxjeUI3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1FYSnlZWGtvWkdGMFlTNXNaVzVuZEdncExtWnBiR3dvTUNrdWJXRndLQ2hmTENCcEtTQTlQaUFvVm1WamRHOXlMbVp5YjIwb1pHRjBZVnRwWFNrcEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNTlYRzVjYm1OdmJuTjBJRUYyWVdsc1lXSnNaVkpsWkhWalpYSnpJRDBnZTF4dUlDQW5WVTFCVUNjNklGVk5RVkJTWldSMVkyVnlMRnh1SUNBbmRDMVRUa1VuT2lCVVUwNUZVbVZrZFdObGNpeGNibjA3WEc1Y2JtVjRjRzl5ZENCMGVYQmxJRXR1YjNkdVRXVjBhRzlrY3lBOUlHdGxlVzltSUhSNWNHVnZaaUJCZG1GcGJHRmliR1ZTWldSMVkyVnljenRjYmx4dVpYaHdiM0owSUdOc1lYTnpJRTExYkhScFEyOXNSR2x0VW1Wa2RXTmxjaUI3WEc0Z0lDQWdjSEpwZG1GMFpTQnlaV1IxWTJWeU9pQk5kV3gwYVVOdmJIVnRibEpsWkhWalpYSWdmQ0IxYm1SbFptbHVaV1E3WEc0Z0lDQWdMeW9xWEc0Z0lDQXFJRU55WldGMFpYTWdZVzRnYVc1emRHRnVZMlVnYjJZZ1JHbHRaVzV6YVc5dVlXeHBkSGxTWldSMVkyVnlMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyRnVlVnRkZlNCa1lYUmhJRlpsWTNSdmNuTWdkRzhnWlcxaVpXUXVYRzRnSUNBcUlFQndZWEpoYlNCN1MyNXZkMjVOWlhSb2IyUnpmU0J0WlhSb2IyUWdSVzFpWldSa2FXNW5JRzFsZEdodlpDQjBieUJpWlNCaGNIQnNhV1ZrWEc0Z0lDQXFJRUJ3WVhKaGJTQjdTMjV2ZDI1TlpYUnlhV056ZlNCdFpYUnlhV01nUkdsemRHRnVZMlVnYldWMGNtbGpJSFJ2SUdKbElHTnZiWEIxZEdWa0lHSmxkSGRsWlc0Z1pXRmphQ0J2WmlCMGFHVWdkbVZqZEc5eWN5NWNiaUFnSUNvZ1FIQmhjbUZ0SUh0UGNIUnBiMjV6ZlNCYmIzQjBhVzl1YzEwZ1QzQjBhVzl1Y3lCMGJ5QndZWE56SUhSdklIUm9aU0JwYlhCc1pXMWxiblJwYm1jZ1pXMWlaV1JrWlhKekxseHVJQ0FnS2lCQWJXVnRZbVZ5YjJZZ1JHbHRaVzV6YVc5dVlXeHBkSGxTWldSMVkyVnlYRzRnSUNBcUwxeHVJQ0FnSUdOdmJuTjBjblZqZEc5eUtHUmhkR0U2SUVGeWNtRjVQR0Z1ZVZ0ZFBpd2diV1YwYUc5a09pQkVhVzFTWldSMVkzUnBiMjVOWlhSb2IyUnpMQ0J0WlhSeWFXTnpPaUJMYm05M2JrMWxkSEpwWTNOYlhTeGNiaUFnSUNBZ0lIZGxhV2RvZEhNNklHNTFiV0psY2x0ZExDQmthWE4wWVc1alpVRm5aM0psWjJGMGFXOXVPaUJFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtMQ0J2Y0hScGIyNXpPaUJQY0hScGIyNXpLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQnRaV0Z6ZFhKbGN6b2dSR2x6ZEdGdVkyVk5aWFJ5YVdOYlhTQTlJRnRkTzF4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYVdSNElEMGdNRHNnYVdSNElEd2diV1YwY21samN5NXNaVzVuZEdnN0lDc3JhV1I0S1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUcxbFlYTjFjbVVnUFNCdVpYY2dUV1ZoYzNWeVpTaHRaWFJ5YVdOelcybGtlRjBwTG1kbGRFMWxZWE4xY21Vb2IzQjBhVzl1Y3k1a2FYTjBZVzVqWlVadVFYSm5jMXRwWkhoZEtUdGNiaUFnSUNBZ0lDQWdiV1ZoYzNWeVpYTXVjSFZ6YUNodFpXRnpkWEpsS1R0Y2JpQWdJQ0FnSUNBZ2JHVjBJR0pwZEVGeWNtRjVUR1Z1WjNSb0lEMGdNakEwT0R0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQmtZWFJoVzJsa2VGMHViR1Z1WjNSb095QXJLMmtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvWkdGMFlWdHBaSGhkVzJsZElDWW1JR1JoZEdGYmFXUjRYVnRwWFM1ZmJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JpYVhSQmNuSmhlVXhsYm1kMGFDQTlJR1JoZEdGYmFXUjRYVnRwWFM1ZmJHVnVaM1JvTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdsbUlDaHBjMEpwZEVGeWNtRjVUV1YwY21saktHMWxkSEpwWTNOYmFXUjRYU2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR1JoZEdGYmFXUjRYUzVzWlc1bmRHZzdJQ3NyYVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHUmhkR0ZiYVdSNFhWdHBYU0FtSmlCa1lYUmhXMmxrZUYxYmFWMHVYMlJoZEdFcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdSaGRHRmJhV1I0WFZ0cFhTQTlJRzVsZHlCQ2FYUkJjbkpoZVNoa1lYUmhXMmxrZUYxYmFWMHVYMlJoZEdFc0lHUmhkR0ZiYVdSNFhWdHBYUzVmYkdWdVozUm9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHVnNjMlZjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdaR0YwWVZ0cFpIaGRXMmxkSUQwZ2JtVjNJRUpwZEVGeWNtRjVLR0pwZEVGeWNtRjVUR1Z1WjNSb0tUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ2FXWWdLRzFsZEdodlpDQTlQU0FuVlUxQlVDY3BJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXlaV1IxWTJWeUlEMGdibVYzSUZWTlFWQlNaV1IxWTJWeUtIdGNiaUFnSUNBZ0lDQWdJQ0JrWVhSaE9pQmtZWFJoTEZ4dUlDQWdJQ0FnSUNBZ0lHUnBjM1JoYm1ObFJtNWhiV1Z6T2lCdFpYUnlhV056TEZ4dUlDQWdJQ0FnSUNBZ0lHUnBjM1JoYm1ObFJtNXpPaUJ0WldGemRYSmxjeXhjYmlBZ0lDQWdJQ0FnSUNCa2FYTjBZVzVqWlVadVFYSm5jem9nYjNCMGFXOXVjeTVrYVhOMFlXNWpaVVp1UVhKbmN5eGNiaUFnSUNBZ0lDQWdJQ0IzWldsbmFIUnpPaUIzWldsbmFIUnpMRnh1SUNBZ0lDQWdJQ0FnSUdGblozSmxaMkYwYVc5dVRXVjBhRzlrT2lCa2FYTjBZVzVqWlVGblozSmxaMkYwYVc5dUxGeHVJQ0FnSUNBZ0lDQWdJQzR1TG05d2RHbHZibk5jYmlBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tHMWxkR2h2WkNBOVBTQW5kQzFUVGtVbktTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNtVmtkV05sY2lBOUlHNWxkeUJVVTA1RlVtVmtkV05sY2loN1hHNGdJQ0FnSUNBZ0lDQWdaR0YwWVRvZ1pHRjBZU3hjYmlBZ0lDQWdJQ0FnSUNCa2FYTjBZVzVqWlVadVlXMWxjem9nYldWMGNtbGpjeXhjYmlBZ0lDQWdJQ0FnSUNCa2FYTjBZVzVqWlVadWN6b2diV1ZoYzNWeVpYTXNYRzRnSUNBZ0lDQWdJQ0FnWkdsemRHRnVZMlZHYmtGeVozTTZJRzl3ZEdsdmJuTXVaR2x6ZEdGdVkyVkdia0Z5WjNNc1hHNGdJQ0FnSUNBZ0lDQWdkMlZwWjJoMGN6b2dkMlZwWjJoMGN5eGNiaUFnSUNBZ0lDQWdJQ0JoWjJkeVpXZGhkR2x2YmsxbGRHaHZaRG9nWkdsemRHRnVZMlZCWjJkeVpXZGhkR2x2Yml4Y2JpQWdJQ0FnSUNBZ0lDQXVMaTV2Y0hScGIyNXpYRzRnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJQzhxS2x4dUlDQWdLaUJGYldKbFpITWdkR2hsSUdSaGRHRWdaMmwyWlc0Z2FXNTBieUIwYUdVZ2RIZHZMV1JwYldWdWMybHZibUZzSUhOd1lXTmxJSFZ6YVc1bklIUm9aU0JqYUc5elpXNGdiV1YwYUc5a0xseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNTlJSFJ5WVc1emNHOXpaU0JYYUdWMGFHVnlJSFJ2SUhSeVlXNXpabTl5YlNCamIyOXlaR2x1WVhSbGN5QjBieUJvWVhabElHTnZiSFZ0Ym5NdFptbHljM1FnYjNKcFpXNTBZWFJwYjI0dVhHNGdJQ0FxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnY0dGeVlXeHNaV3hFYVhOMFlXNWpaVmR2Y210bGNuTWdWMmhsZEdobGNpQjBieUIxYzJVZ2NHRnlZV3hzWld3Z1pHbHpkR0Z1WTJVZ1kyOXRjSFYwWVhScGIyNHVYRzRnSUNBcUlFQjBhSEp2ZDNNZ2UwVnljbTl5ZlNCSlppQjBhR1VnWlcxaVpXUmthVzVuSUcxbGRHaHZaQ0IzWVhNZ2JtOTBJR1p2ZFc1a0xseHVJQ0FnS2lCQWNtVjBkWEp1SUh0aGJubDlJRU5oY25SbGMybGhiaUJqYjI5eVpHbHVZWFJsSUc5bUlIUm9hWE1nWlcxaVpXUmthVzVuSUdGdVpDQmthWE4wWVc1alpTQnRZWFJ5YVhnZ2QyaGxjbVVnWVhCd2JHbGpZV0pzWlM1Y2JpQWdJQ29nUUcxbGJXSmxjbTltSUVScGJXVnVjMmx2Ym1Gc2FYUjVVbVZrZFdObGNseHVJQ0FnS2k5Y2JpQWdJQ0J3ZFdKc2FXTWdZWE41Ym1NZ2RISmhibk5tYjNKdEtIUnlZVzV6Y0c5elpUb2dZbTl2YkdWaGJpQTlJR1poYkhObEtUb2dVSEp2YldselpUeE5ZWFJ5YVhnK0lIdGNiaUFnSUNBZ0lHbG1JQ2gwYUdsekxuSmxaSFZqWlhJZ1BUMDlJSFZ1WkdWbWFXNWxaQ2xjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RTWldSMVkyVnlJSGRoY3lCdWIzUWdaR1ZtYVc1bFpDNG5LVHRjYmx4dUlDQWdJQ0FnYkdWMElHVnRZbVZrWkdsdVp5QTlJR0YzWVdsMElIUm9hWE11Y21Wa2RXTmxjaTUwY21GdWMyWnZjbTBvS1R0Y2JseHVJQ0FnSUNBZ2FXWWdLSFJ5WVc1emNHOXpaU2xjYmlBZ0lDQWdJQ0FnWlcxaVpXUmthVzVuSUQwZ2RISmhibk53YjNObFRXRjBjbWw0S0dWdFltVmtaR2x1WnlrN1hHNWNiaUFnSUNBZ0lISmxkSFZ5YmlCbGJXSmxaR1JwYm1jN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHlvcVhHNGdJQ0FxSUZKbGRIVnlibk1nYldWMGNtbGpjeUJoZG1GcGJHRmliR1VnWW5rZ2RIbHdaUzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0QmRtRnBiR0ZpYkdWRVlYUmhWSGx3WlhOOUlIUjVjR1ZPWVcxbElIUjVjR1VnYm1GdFpWeHVJQ0FnS2lCQWNtVjBkWEp1SUh0emRISnBibWRiWFgwZ1RXVjBjbWxqSUc1aGJXVnpJSGRvYVdOb0lHVjRjR1ZqZEhNZ2RHaGxJR2RwZG1WdUlHUmhkR0VnZEhsd1pWeHVJQ0FnS2lCQWJXVnRZbVZ5YjJZZ1JHbHRaVzV6YVc5dVlXeHBkSGxTWldSMVkyVnlYRzRnSUNBcUwxeHVJQ0FnSUhOMFlYUnBZeUJoZG1GcGJHRmliR1ZOWlhSeWFXTnpRbmxVZVhCbEtIUjVjR1ZPWVcxbE9pQkJkbUZwYkdGaWJHVkVZWFJoVkhsd1pYTXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQlBZbXBsWTNRdWEyVjVjeWhCZG1GcGJHRmliR1ZOWlhSeWFXTnpXM1I1Y0dWT1lXMWxYU2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeW9xWEc0Z0lDQXFJRkpsZEhWeWJuTWdaR2x0Wlc1emFXOXVZV3hwZEhrZ2NtVmtkV04wYVc5dUlHMWxkR2h2WkhNZ1lYWmhhV3hoWW14bExseHVJQ0FnS2x4dUlDQWdLaUJBY21WaFpHOXViSGxjYmlBZ0lDb2dRRzFsYldKbGNtOW1JRVJwYldWdWMybHZibUZzYVhSNVVtVmtkV05sY2x4dUlDQWdLaTljYmlBZ0lDQnpkR0YwYVdNZ1oyVjBJR0YyWVdsc1lXSnNaVTFsZEdodlpITW9LU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdUMkpxWldOMExtdGxlWE1vUVhaaGFXeGhZbXhsVW1Wa2RXTmxjbk1wTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzhxS2x4dUlDQWdLaUJTWlhSMWNtNXpJRzFsZEhKcFkzTWdZWFpoYVd4aFlteGxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNtVmhaRzl1YkhsY2JpQWdJQ29nUUcxbGJXSmxjbTltSUVScGJXVnVjMmx2Ym1Gc2FYUjVVbVZrZFdObGNseHVJQ0FnS2k5Y2JpQWdJQ0J6ZEdGMGFXTWdaMlYwSUdGMllXbHNZV0pzWlUxbGRISnBZM01vS1NCN1hHNGdJQ0FnSUNCc1pYUWdZVzV6T2lCemRISnBibWRiWFNBOUlGdGRPMXh1SUNBZ0lDQWdUMkpxWldOMExuWmhiSFZsY3loQmRtRnBiR0ZpYkdWTlpYUnlhV056S1M1bWIzSkZZV05vS0Nodlltb3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWVhKeVlYa2dQU0JQWW1wbFkzUXVkbUZzZFdWektHOWlhaWs3WEc0Z0lDQWdJQ0FnSUdGdWN5QTlJRnN1TGk1aGJuTXNJQzR1TG1GeWNtRjVYVHRjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnY21WMGRYSnVJR0Z1Y3p0Y2JpQWdJQ0I5WEc1OVhHNGlYWDA9IiwiaW1wb3J0IHsgTXVsdGlDb2xEaW1SZWR1Y2VyIH0gZnJvbSAnLi9tdWx0aS1jb2x1bW4tZGltLXJlZHVjZXInO1xuLyoqXG4gKiBXb3JrZXIgdGhyZWFkIHJlY2VpdmluZyBkYXRhIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7YW55W119IGNvbHVtbkRhdGEgU2FtcGxlcyB0byBwcm9jZXNzLlxuICogQHBhcmFtIHtLbm93bk1ldGhvZHN9IG1ldGhvZCBFbWJlZGRpbmcgbWV0aG9kLlxuICogQHBhcmFtIHtLbm93bk1ldHJpY3N9IG1lYXN1cmUgRGlzdGFuY2UgbWV0cmljLlxuICogQHBhcmFtIHthbnl9IG9wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHRvIGFsZ29yaXRobS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyYWxsZWxEaXN0YW5jZVdvcmtlcnMgV2hldGhlciB0byB1c2UgcGFyYWxsZWwgZGlzdGFuY2Ugd29ya2Vycy5cbiAqIEByZXR1cm4ge2FueX0gRW1iZWRkaW5nIChhbmQgZGlzdGFuY2UgbWF0cml4IHdoZXJlIGFwcGxpY2FibGUpLlxuICovXG5hc3luYyBmdW5jdGlvbiBvbk1lc3NhZ2UoY29sdW1uc0RhdGEsIG1ldGhvZCwgbWV0cmljcywgd2VpZ2h0cywgYWdncmVnYXRpb25NZXRob2QsIG9wdGlvbnMpIHtcbiAgICBjb25zdCByZWR1Y2VyID0gbmV3IE11bHRpQ29sRGltUmVkdWNlcihjb2x1bW5zRGF0YSwgbWV0aG9kLCBtZXRyaWNzLCB3ZWlnaHRzLCBhZ2dyZWdhdGlvbk1ldGhvZCwgeyAuLi5vcHRpb25zLCBwcm9ncmVzc0Z1bmMgfSk7XG4gICAgcmV0dXJuIGF3YWl0IHJlZHVjZXIudHJhbnNmb3JtKHRydWUpO1xufVxuYXN5bmMgZnVuY3Rpb24gcHJvZ3Jlc3NGdW5jKGVwb2NoTnVtLCBlcG9jaHNMZW5ndGgsIGVtYmVkZGluZykge1xuICAgIGlmIChlcG9jaE51bSAlIDUgPT09IDApXG4gICAgICAgIHNlbGYucG9zdE1lc3NhZ2UoeyBlcG9jaE51bSwgZXBvY2hzTGVuZ3RoLCBlbWJlZGRpbmcgfSk7XG59XG5zZWxmLm9ubWVzc2FnZSA9IGFzeW5jICh7IGRhdGE6IHsgY29sdW1uc0RhdGEsIG1ldGhvZCwgZGlzdGFuY2VNZXRyaWNzLCBvcHRpb25zLCB3ZWlnaHRzLCBhZ2dyZWdhdGlvbk1ldGhvZCB9IH0pID0+IHtcbiAgICBsZXQgZGF0YTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBlbWJlZGRpbmcgPSBhd2FpdCBvbk1lc3NhZ2UoY29sdW1uc0RhdGEsIG1ldGhvZCwgZGlzdGFuY2VNZXRyaWNzLCB3ZWlnaHRzLCBhZ2dyZWdhdGlvbk1ldGhvZCwgb3B0aW9ucyk7XG4gICAgICAgIGRhdGEgPSB7IGVtYmVkZGluZyB9O1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBkYXRhID0geyBlcnJvcjogZSB9O1xuICAgIH1cbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgZXJyb3I6IGRhdGEuZXJyb3IsXG4gICAgICAgIGVtYmVkZGluZzogZGF0YS5lbWJlZGRpbmcsXG4gICAgfSk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYlhWc2FYUXRZMjlzZFcxdUxXUnBiUzF5WldSMVkyVnlMWGR2Y210bGNpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSW0xMWJHbDBMV052YkhWdGJpMWthVzB0Y21Wa2RXTmxjaTEzYjNKclpYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCU1VFc1QwRkJUeXhGUVVGRExHdENRVUZyUWl4RlFVRkRMRTFCUVUwc05FSkJRVFJDTEVOQlFVTTdRVUZGT1VRN096czdPenM3T3p0SFFWTkhPMEZCUTBnc1MwRkJTeXhWUVVGVkxGTkJRVk1zUTBGQlF5eFhRVUY1UWl4RlFVRkZMRTFCUVRKQ0xFVkJRVVVzVDBGQmRVSXNSVUZEZEVjc1QwRkJhVUlzUlVGQlJTeHBRa0ZCTkVNc1JVRkRMMFFzVDBGQldUdEpRVU5hTEUxQlFVMHNUMEZCVHl4SFFVRkhMRWxCUVVrc2EwSkJRV3RDTEVOQlEzQkRMRmRCUVZjc1JVRkRXQ3hOUVVGTkxFVkJRMDRzVDBGQlR5eEZRVU5RTEU5QlFVOHNSVUZEVUN4cFFrRkJhVUlzUlVGRGFrSXNSVUZCUXl4SFFVRkhMRTlCUVU4c1JVRkJSU3haUVVGWkxFVkJRVU1zUTBGRE0wSXNRMEZCUXp0SlFVTkdMRTlCUVU4c1RVRkJUU3hQUVVGUExFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTNaRExFTkJRVU03UVVGRlJDeExRVUZMTEZWQlFWVXNXVUZCV1N4RFFVRkRMRkZCUVdkQ0xFVkJRVVVzV1VGQmIwSXNSVUZCUlN4VFFVRnhRanRKUVVOMlJpeEpRVUZKTEZGQlFWRXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJRenRSUVVOd1FpeEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVNc1VVRkJVU3hGUVVGRkxGbEJRVmtzUlVGQlJTeFRRVUZUTEVWQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpGRUxFTkJRVU03UVVGRlJDeEpRVUZKTEVOQlFVTXNVMEZCVXl4SFFVRkhMRXRCUVVzc1JVRkJSU3hGUVVGRExFbEJRVWtzUlVGQlJTeEZRVUZETEZkQlFWY3NSVUZCUlN4TlFVRk5MRVZCUVVVc1pVRkJaU3hGUVVGRkxFOUJRVThzUlVGQlJTeFBRVUZQTEVWQlFVVXNhVUpCUVdsQ0xFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVVTdTVUZETjBjc1NVRkJTU3hKUVVGdlF5eERRVUZETzBsQlEzcERMRWxCUVVrN1VVRkRSaXhOUVVGTkxGTkJRVk1zUjBGQlJ5eE5RVUZOTEZOQlFWTXNRMEZCUXl4WFFVRlhMRVZCUVVVc1RVRkJUU3hGUVVGRkxHVkJRV1VzUlVGQlJTeFBRVUZQTEVWQlFVVXNhVUpCUVdsQ0xFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTTdVVUZETjBjc1NVRkJTU3hIUVVGSExFVkJRVU1zVTBGQlV5eEZRVUZETEVOQlFVTTdTMEZEY0VJN1NVRkJReXhQUVVGUExFTkJRVTBzUlVGQlJUdFJRVU5tTEVsQlFVa3NSMEZCUnl4RlFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRExFVkJRVU1zUTBGQlF6dExRVU51UWp0SlFVTkVMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU03VVVGRFppeExRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzN1VVRkRha0lzVTBGQlV5eEZRVUZGTEVsQlFVa3NRMEZCUXl4VFFVRlRPMHRCUXpGQ0xFTkJRVU1zUTBGQlF6dEJRVU5NTEVOQlFVTXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN1RXRjBjbWw0ZlNCbWNtOXRJQ2RBWkdGMFlXZHliMnN0YkdsaWNtRnlhV1Z6TDNWMGFXeHpMM055WXk5MGVYQmxMV1JsWTJ4aGNtRjBhVzl1Y3ljN1hHNXBiWEJ2Y25RZ2UwdHViM2R1VFdWMGNtbGpjMzBnWm5KdmJTQW5MaTR2ZEhsd1pXUXRiV1YwY21samN5OTBlWEJsWkMxdFpYUnlhV056Snp0Y2JtbHRjRzl5ZENCN1JHbHRVbVZrZFdOMGFXOXVUV1YwYUc5a2MzMGdabkp2YlNBbkxpOTBlWEJsY3ljN1hHNXBiWEJ2Y25RZ2UwUnBjM1JoYm1ObFFXZG5jbVZuWVhScGIyNU5aWFJvYjJSOUlHWnliMjBnSnk0dUwyUnBjM1JoYm1ObExXMWhkSEpwZUM5MGVYQmxjeWM3WEc1cGJYQnZjblFnZTAxMWJIUnBRMjlzUkdsdFVtVmtkV05sY24wZ1puSnZiU0FuTGk5dGRXeDBhUzFqYjJ4MWJXNHRaR2x0TFhKbFpIVmpaWEluTzF4dVhHNHZLaXBjYmlBcUlGZHZjbXRsY2lCMGFISmxZV1FnY21WalpXbDJhVzVuSUdSaGRHRWdablZ1WTNScGIyNHVYRzRnS2x4dUlDb2dRSEJoY21GdElIdGhibmxiWFgwZ1kyOXNkVzF1UkdGMFlTQlRZVzF3YkdWeklIUnZJSEJ5YjJObGMzTXVYRzRnS2lCQWNHRnlZVzBnZTB0dWIzZHVUV1YwYUc5a2MzMGdiV1YwYUc5a0lFVnRZbVZrWkdsdVp5QnRaWFJvYjJRdVhHNGdLaUJBY0dGeVlXMGdlMHR1YjNkdVRXVjBjbWxqYzMwZ2JXVmhjM1Z5WlNCRWFYTjBZVzVqWlNCdFpYUnlhV011WEc0Z0tpQkFjR0Z5WVcwZ2UyRnVlWDBnYjNCMGFXOXVjeUJQY0hScGIyNXpJSFJ2SUhCaGMzTWdkRzhnWVd4bmIzSnBkR2h0TGx4dUlDb2dRSEJoY21GdElIdGliMjlzWldGdWZTQndZWEpoYkd4bGJFUnBjM1JoYm1ObFYyOXlhMlZ5Y3lCWGFHVjBhR1Z5SUhSdklIVnpaU0J3WVhKaGJHeGxiQ0JrYVhOMFlXNWpaU0IzYjNKclpYSnpMbHh1SUNvZ1FISmxkSFZ5YmlCN1lXNTVmU0JGYldKbFpHUnBibWNnS0dGdVpDQmthWE4wWVc1alpTQnRZWFJ5YVhnZ2QyaGxjbVVnWVhCd2JHbGpZV0pzWlNrdVhHNGdLaTljYm1GemVXNWpJR1oxYm1OMGFXOXVJRzl1VFdWemMyRm5aU2hqYjJ4MWJXNXpSR0YwWVRvZ1FYSnlZWGs4WVc1NVcxMCtMQ0J0WlhSb2IyUTZJRVJwYlZKbFpIVmpkR2x2YmsxbGRHaHZaSE1zSUcxbGRISnBZM002SUV0dWIzZHVUV1YwY21samMxdGRMRnh1SUNCM1pXbG5hSFJ6T2lCdWRXMWlaWEpiWFN3Z1lXZG5jbVZuWVhScGIyNU5aWFJvYjJRNklFUnBjM1JoYm1ObFFXZG5jbVZuWVhScGIyNU5aWFJvYjJRc1hHNGdJRzl3ZEdsdmJuTTZJR0Z1ZVNrNklGQnliMjFwYzJVOFRXRjBjbWw0UGlCN1hHNGdJR052Ym5OMElISmxaSFZqWlhJZ1BTQnVaWGNnVFhWc2RHbERiMnhFYVcxU1pXUjFZMlZ5S0Z4dUlDQWdJR052YkhWdGJuTkVZWFJoTEZ4dUlDQWdJRzFsZEdodlpDeGNiaUFnSUNCdFpYUnlhV056TEZ4dUlDQWdJSGRsYVdkb2RITXNYRzRnSUNBZ1lXZG5jbVZuWVhScGIyNU5aWFJvYjJRc1hHNGdJQ0FnZXk0dUxtOXdkR2x2Ym5Nc0lIQnliMmR5WlhOelJuVnVZMzFjYmlBZ0tUdGNiaUFnY21WMGRYSnVJR0YzWVdsMElISmxaSFZqWlhJdWRISmhibk5tYjNKdEtIUnlkV1VwTzF4dWZWeHVYRzVoYzNsdVl5Qm1kVzVqZEdsdmJpQndjbTluY21WemMwWjFibU1vWlhCdlkyaE9kVzA2SUc1MWJXSmxjaXdnWlhCdlkyaHpUR1Z1WjNSb09pQnVkVzFpWlhJc0lHVnRZbVZrWkdsdVp6b2diblZ0WW1WeVcxMWJYU2tnZTF4dUlDQnBaaUFvWlhCdlkyaE9kVzBnSlNBMUlEMDlQU0F3S1Z4dUlDQWdJSE5sYkdZdWNHOXpkRTFsYzNOaFoyVW9lMlZ3YjJOb1RuVnRMQ0JsY0c5amFITk1aVzVuZEdnc0lHVnRZbVZrWkdsdVozMHBPMXh1ZlZ4dVhHNXpaV3htTG05dWJXVnpjMkZuWlNBOUlHRnplVzVqSUNoN1pHRjBZVG9nZTJOdmJIVnRibk5FWVhSaExDQnRaWFJvYjJRc0lHUnBjM1JoYm1ObFRXVjBjbWxqY3l3Z2IzQjBhVzl1Y3l3Z2QyVnBaMmgwY3l3Z1lXZG5jbVZuWVhScGIyNU5aWFJvYjJSOWZTa2dQVDRnZTF4dUlDQnNaWFFnWkdGMFlUb2dlMlZ5Y205eVB6b2dZVzU1TENCbGJXSmxaR1JwYm1jL09pQmhibmw5TzF4dUlDQjBjbmtnZTF4dUlDQWdJR052Ym5OMElHVnRZbVZrWkdsdVp5QTlJR0YzWVdsMElHOXVUV1Z6YzJGblpTaGpiMngxYlc1elJHRjBZU3dnYldWMGFHOWtMQ0JrYVhOMFlXNWpaVTFsZEhKcFkzTXNJSGRsYVdkb2RITXNJR0ZuWjNKbFoyRjBhVzl1VFdWMGFHOWtMQ0J2Y0hScGIyNXpLVHRjYmlBZ0lDQmtZWFJoSUQwZ2UyVnRZbVZrWkdsdVozMDdYRzRnSUgwZ1kyRjBZMmdnS0dVNklHRnVlU2tnZTF4dUlDQWdJR1JoZEdFZ1BTQjdaWEp5YjNJNklHVjlPMXh1SUNCOVhHNGdJSE5sYkdZdWNHOXpkRTFsYzNOaFoyVW9lMXh1SUNBZ0lHVnljbTl5T2lCa1lYUmhMbVZ5Y205eUxGeHVJQ0FnSUdWdFltVmtaR2x1WnpvZ1pHRjBZUzVsYldKbFpHUnBibWNzWEc0Z0lIMHBPMXh1ZlR0Y2JpSmRmUT09IiwiLy8gQSBsaWJyYXJ5IG9mIHNlZWRhYmxlIFJOR3MgaW1wbGVtZW50ZWQgaW4gSmF2YXNjcmlwdC5cbi8vXG4vLyBVc2FnZTpcbi8vXG4vLyB2YXIgc2VlZHJhbmRvbSA9IHJlcXVpcmUoJ3NlZWRyYW5kb20nKTtcbi8vIHZhciByYW5kb20gPSBzZWVkcmFuZG9tKDEpOyAvLyBvciBhbnkgc2VlZC5cbi8vIHZhciB4ID0gcmFuZG9tKCk7ICAgICAgIC8vIDAgPD0geCA8IDEuICBFdmVyeSBiaXQgaXMgcmFuZG9tLlxuLy8gdmFyIHggPSByYW5kb20ucXVpY2soKTsgLy8gMCA8PSB4IDwgMS4gIDMyIGJpdHMgb2YgcmFuZG9tbmVzcy5cblxuLy8gYWxlYSwgYSA1My1iaXQgbXVsdGlwbHktd2l0aC1jYXJyeSBnZW5lcmF0b3IgYnkgSm9oYW5uZXMgQmFhZ8O4ZS5cbi8vIFBlcmlvZDogfjJeMTE2XG4vLyBSZXBvcnRlZCB0byBwYXNzIGFsbCBCaWdDcnVzaCB0ZXN0cy5cbnZhciBhbGVhID0gcmVxdWlyZSgnLi9saWIvYWxlYScpO1xuXG4vLyB4b3IxMjgsIGEgcHVyZSB4b3Itc2hpZnQgZ2VuZXJhdG9yIGJ5IEdlb3JnZSBNYXJzYWdsaWEuXG4vLyBQZXJpb2Q6IDJeMTI4LTEuXG4vLyBSZXBvcnRlZCB0byBmYWlsOiBNYXRyaXhSYW5rIGFuZCBMaW5lYXJDb21wLlxudmFyIHhvcjEyOCA9IHJlcXVpcmUoJy4vbGliL3hvcjEyOCcpO1xuXG4vLyB4b3J3b3csIEdlb3JnZSBNYXJzYWdsaWEncyAxNjAtYml0IHhvci1zaGlmdCBjb21iaW5lZCBwbHVzIHdleWwuXG4vLyBQZXJpb2Q6IDJeMTkyLTJeMzJcbi8vIFJlcG9ydGVkIHRvIGZhaWw6IENvbGxpc2lvbk92ZXIsIFNpbXBQb2tlciwgYW5kIExpbmVhckNvbXAuXG52YXIgeG9yd293ID0gcmVxdWlyZSgnLi9saWIveG9yd293Jyk7XG5cbi8vIHhvcnNoaWZ0NywgYnkgRnJhbsOnb2lzIFBhbm5ldG9uIGFuZCBQaWVycmUgTCdlY3V5ZXIsIHRha2VzXG4vLyBhIGRpZmZlcmVudCBhcHByb2FjaDogaXQgYWRkcyByb2J1c3RuZXNzIGJ5IGFsbG93aW5nIG1vcmUgc2hpZnRzXG4vLyB0aGFuIE1hcnNhZ2xpYSdzIG9yaWdpbmFsIHRocmVlLiAgSXQgaXMgYSA3LXNoaWZ0IGdlbmVyYXRvclxuLy8gd2l0aCAyNTYgYml0cywgdGhhdCBwYXNzZXMgQmlnQ3J1c2ggd2l0aCBubyBzeXN0bWF0aWMgZmFpbHVyZXMuXG4vLyBQZXJpb2QgMl4yNTYtMS5cbi8vIE5vIHN5c3RlbWF0aWMgQmlnQ3J1c2ggZmFpbHVyZXMgcmVwb3J0ZWQuXG52YXIgeG9yc2hpZnQ3ID0gcmVxdWlyZSgnLi9saWIveG9yc2hpZnQ3Jyk7XG5cbi8vIHhvcjQwOTYsIGJ5IFJpY2hhcmQgQnJlbnQsIGlzIGEgNDA5Ni1iaXQgeG9yLXNoaWZ0IHdpdGggYVxuLy8gdmVyeSBsb25nIHBlcmlvZCB0aGF0IGFsc28gYWRkcyBhIFdleWwgZ2VuZXJhdG9yLiBJdCBhbHNvIHBhc3Nlc1xuLy8gQmlnQ3J1c2ggd2l0aCBubyBzeXN0ZW1hdGljIGZhaWx1cmVzLiAgSXRzIGxvbmcgcGVyaW9kIG1heVxuLy8gYmUgdXNlZnVsIGlmIHlvdSBoYXZlIG1hbnkgZ2VuZXJhdG9ycyBhbmQgbmVlZCB0byBhdm9pZFxuLy8gY29sbGlzaW9ucy5cbi8vIFBlcmlvZDogMl40MTI4LTJeMzIuXG4vLyBObyBzeXN0ZW1hdGljIEJpZ0NydXNoIGZhaWx1cmVzIHJlcG9ydGVkLlxudmFyIHhvcjQwOTYgPSByZXF1aXJlKCcuL2xpYi94b3I0MDk2Jyk7XG5cbi8vIFR5Y2hlLWksIGJ5IFNhbXVlbCBOZXZlcyBhbmQgRmlsaXBlIEFyYXVqbywgaXMgYSBiaXQtc2hpZnRpbmcgcmFuZG9tXG4vLyBudW1iZXIgZ2VuZXJhdG9yIGRlcml2ZWQgZnJvbSBDaGFDaGEsIGEgbW9kZXJuIHN0cmVhbSBjaXBoZXIuXG4vLyBodHRwczovL2VkZW4uZGVpLnVjLnB0L35zbmV2ZXMvcHVicy8yMDExLXNuZmEyLnBkZlxuLy8gUGVyaW9kOiB+Ml4xMjdcbi8vIE5vIHN5c3RlbWF0aWMgQmlnQ3J1c2ggZmFpbHVyZXMgcmVwb3J0ZWQuXG52YXIgdHljaGVpID0gcmVxdWlyZSgnLi9saWIvdHljaGVpJyk7XG5cbi8vIFRoZSBvcmlnaW5hbCBBUkM0LWJhc2VkIHBybmcgaW5jbHVkZWQgaW4gdGhpcyBsaWJyYXJ5LlxuLy8gUGVyaW9kOiB+Ml4xNjAwXG52YXIgc3IgPSByZXF1aXJlKCcuL3NlZWRyYW5kb20nKTtcblxuc3IuYWxlYSA9IGFsZWE7XG5zci54b3IxMjggPSB4b3IxMjg7XG5zci54b3J3b3cgPSB4b3J3b3c7XG5zci54b3JzaGlmdDcgPSB4b3JzaGlmdDc7XG5zci54b3I0MDk2ID0geG9yNDA5NjtcbnNyLnR5Y2hlaSA9IHR5Y2hlaTtcblxubW9kdWxlLmV4cG9ydHMgPSBzcjtcbiIsIi8vIEEgcG9ydCBvZiBhbiBhbGdvcml0aG0gYnkgSm9oYW5uZXMgQmFhZ8O4ZSA8YmFhZ29lQGJhYWdvZS5jb20+LCAyMDEwXG4vLyBodHRwOi8vYmFhZ29lLmNvbS9lbi9SYW5kb21NdXNpbmdzL2phdmFzY3JpcHQvXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbnF1aW5sYW4vYmV0dGVyLXJhbmRvbS1udW1iZXJzLWZvci1qYXZhc2NyaXB0LW1pcnJvclxuLy8gT3JpZ2luYWwgd29yayBpcyB1bmRlciBNSVQgbGljZW5zZSAtXG5cbi8vIENvcHlyaWdodCAoQykgMjAxMCBieSBKb2hhbm5lcyBCYWFnw7hlIDxiYWFnb2VAYmFhZ29lLm9yZz5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5cblxuKGZ1bmN0aW9uKGdsb2JhbCwgbW9kdWxlLCBkZWZpbmUpIHtcblxuZnVuY3Rpb24gQWxlYShzZWVkKSB7XG4gIHZhciBtZSA9IHRoaXMsIG1hc2ggPSBNYXNoKCk7XG5cbiAgbWUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gMjA5MTYzOSAqIG1lLnMwICsgbWUuYyAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIDJeLTMyXG4gICAgbWUuczAgPSBtZS5zMTtcbiAgICBtZS5zMSA9IG1lLnMyO1xuICAgIHJldHVybiBtZS5zMiA9IHQgLSAobWUuYyA9IHQgfCAwKTtcbiAgfTtcblxuICAvLyBBcHBseSB0aGUgc2VlZGluZyBhbGdvcml0aG0gZnJvbSBCYWFnb2UuXG4gIG1lLmMgPSAxO1xuICBtZS5zMCA9IG1hc2goJyAnKTtcbiAgbWUuczEgPSBtYXNoKCcgJyk7XG4gIG1lLnMyID0gbWFzaCgnICcpO1xuICBtZS5zMCAtPSBtYXNoKHNlZWQpO1xuICBpZiAobWUuczAgPCAwKSB7IG1lLnMwICs9IDE7IH1cbiAgbWUuczEgLT0gbWFzaChzZWVkKTtcbiAgaWYgKG1lLnMxIDwgMCkgeyBtZS5zMSArPSAxOyB9XG4gIG1lLnMyIC09IG1hc2goc2VlZCk7XG4gIGlmIChtZS5zMiA8IDApIHsgbWUuczIgKz0gMTsgfVxuICBtYXNoID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29weShmLCB0KSB7XG4gIHQuYyA9IGYuYztcbiAgdC5zMCA9IGYuczA7XG4gIHQuczEgPSBmLnMxO1xuICB0LnMyID0gZi5zMjtcbiAgcmV0dXJuIHQ7XG59XG5cbmZ1bmN0aW9uIGltcGwoc2VlZCwgb3B0cykge1xuICB2YXIgeGcgPSBuZXcgQWxlYShzZWVkKSxcbiAgICAgIHN0YXRlID0gb3B0cyAmJiBvcHRzLnN0YXRlLFxuICAgICAgcHJuZyA9IHhnLm5leHQ7XG4gIHBybmcuaW50MzIgPSBmdW5jdGlvbigpIHsgcmV0dXJuICh4Zy5uZXh0KCkgKiAweDEwMDAwMDAwMCkgfCAwOyB9XG4gIHBybmcuZG91YmxlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHBybmcoKSArIChwcm5nKCkgKiAweDIwMDAwMCB8IDApICogMS4xMTAyMjMwMjQ2MjUxNTY1ZS0xNjsgLy8gMl4tNTNcbiAgfTtcbiAgcHJuZy5xdWljayA9IHBybmc7XG4gIGlmIChzdGF0ZSkge1xuICAgIGlmICh0eXBlb2Yoc3RhdGUpID09ICdvYmplY3QnKSBjb3B5KHN0YXRlLCB4Zyk7XG4gICAgcHJuZy5zdGF0ZSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29weSh4Zywge30pOyB9XG4gIH1cbiAgcmV0dXJuIHBybmc7XG59XG5cbmZ1bmN0aW9uIE1hc2goKSB7XG4gIHZhciBuID0gMHhlZmM4MjQ5ZDtcblxuICB2YXIgbWFzaCA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICBkYXRhID0gU3RyaW5nKGRhdGEpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgbiArPSBkYXRhLmNoYXJDb2RlQXQoaSk7XG4gICAgICB2YXIgaCA9IDAuMDI1MTk2MDMyODI0MTY5MzggKiBuO1xuICAgICAgbiA9IGggPj4+IDA7XG4gICAgICBoIC09IG47XG4gICAgICBoICo9IG47XG4gICAgICBuID0gaCA+Pj4gMDtcbiAgICAgIGggLT0gbjtcbiAgICAgIG4gKz0gaCAqIDB4MTAwMDAwMDAwOyAvLyAyXjMyXG4gICAgfVxuICAgIHJldHVybiAobiA+Pj4gMCkgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxuICB9O1xuXG4gIHJldHVybiBtYXNoO1xufVxuXG5cbmlmIChtb2R1bGUgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBpbXBsO1xufSBlbHNlIGlmIChkZWZpbmUgJiYgZGVmaW5lLmFtZCkge1xuICBkZWZpbmUoZnVuY3Rpb24oKSB7IHJldHVybiBpbXBsOyB9KTtcbn0gZWxzZSB7XG4gIHRoaXMuYWxlYSA9IGltcGw7XG59XG5cbn0pKFxuICB0aGlzLFxuICAodHlwZW9mIG1vZHVsZSkgPT0gJ29iamVjdCcgJiYgbW9kdWxlLCAgICAvLyBwcmVzZW50IGluIG5vZGUuanNcbiAgKHR5cGVvZiBkZWZpbmUpID09ICdmdW5jdGlvbicgJiYgZGVmaW5lICAgLy8gcHJlc2VudCB3aXRoIGFuIEFNRCBsb2FkZXJcbik7XG5cblxuIiwiLy8gQSBKYXZhc2NyaXB0IGltcGxlbWVudGFpb24gb2YgdGhlIFwiVHljaGUtaVwiIHBybmcgYWxnb3JpdGhtIGJ5XG4vLyBTYW11ZWwgTmV2ZXMgYW5kIEZpbGlwZSBBcmF1am8uXG4vLyBTZWUgaHR0cHM6Ly9lZGVuLmRlaS51Yy5wdC9+c25ldmVzL3B1YnMvMjAxMS1zbmZhMi5wZGZcblxuKGZ1bmN0aW9uKGdsb2JhbCwgbW9kdWxlLCBkZWZpbmUpIHtcblxuZnVuY3Rpb24gWG9yR2VuKHNlZWQpIHtcbiAgdmFyIG1lID0gdGhpcywgc3Ryc2VlZCA9ICcnO1xuXG4gIC8vIFNldCB1cCBnZW5lcmF0b3IgZnVuY3Rpb24uXG4gIG1lLm5leHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYiA9IG1lLmIsIGMgPSBtZS5jLCBkID0gbWUuZCwgYSA9IG1lLmE7XG4gICAgYiA9IChiIDw8IDI1KSBeIChiID4+PiA3KSBeIGM7XG4gICAgYyA9IChjIC0gZCkgfCAwO1xuICAgIGQgPSAoZCA8PCAyNCkgXiAoZCA+Pj4gOCkgXiBhO1xuICAgIGEgPSAoYSAtIGIpIHwgMDtcbiAgICBtZS5iID0gYiA9IChiIDw8IDIwKSBeIChiID4+PiAxMikgXiBjO1xuICAgIG1lLmMgPSBjID0gKGMgLSBkKSB8IDA7XG4gICAgbWUuZCA9IChkIDw8IDE2KSBeIChjID4+PiAxNikgXiBhO1xuICAgIHJldHVybiBtZS5hID0gKGEgLSBiKSB8IDA7XG4gIH07XG5cbiAgLyogVGhlIGZvbGxvd2luZyBpcyBub24taW52ZXJ0ZWQgdHljaGUsIHdoaWNoIGhhcyBiZXR0ZXIgaW50ZXJuYWxcbiAgICogYml0IGRpZmZ1c2lvbiwgYnV0IHdoaWNoIGlzIGFib3V0IDI1JSBzbG93ZXIgdGhhbiB0eWNoZS1pIGluIEpTLlxuICBtZS5uZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGEgPSBtZS5hLCBiID0gbWUuYiwgYyA9IG1lLmMsIGQgPSBtZS5kO1xuICAgIGEgPSAobWUuYSArIG1lLmIgfCAwKSA+Pj4gMDtcbiAgICBkID0gbWUuZCBeIGE7IGQgPSBkIDw8IDE2IF4gZCA+Pj4gMTY7XG4gICAgYyA9IG1lLmMgKyBkIHwgMDtcbiAgICBiID0gbWUuYiBeIGM7IGIgPSBiIDw8IDEyIF4gZCA+Pj4gMjA7XG4gICAgbWUuYSA9IGEgPSBhICsgYiB8IDA7XG4gICAgZCA9IGQgXiBhOyBtZS5kID0gZCA9IGQgPDwgOCBeIGQgPj4+IDI0O1xuICAgIG1lLmMgPSBjID0gYyArIGQgfCAwO1xuICAgIGIgPSBiIF4gYztcbiAgICByZXR1cm4gbWUuYiA9IChiIDw8IDcgXiBiID4+PiAyNSk7XG4gIH1cbiAgKi9cblxuICBtZS5hID0gMDtcbiAgbWUuYiA9IDA7XG4gIG1lLmMgPSAyNjU0NDM1NzY5IHwgMDtcbiAgbWUuZCA9IDEzNjcxMzA1NTE7XG5cbiAgaWYgKHNlZWQgPT09IE1hdGguZmxvb3Ioc2VlZCkpIHtcbiAgICAvLyBJbnRlZ2VyIHNlZWQuXG4gICAgbWUuYSA9IChzZWVkIC8gMHgxMDAwMDAwMDApIHwgMDtcbiAgICBtZS5iID0gc2VlZCB8IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gU3RyaW5nIHNlZWQuXG4gICAgc3Ryc2VlZCArPSBzZWVkO1xuICB9XG5cbiAgLy8gTWl4IGluIHN0cmluZyBzZWVkLCB0aGVuIGRpc2NhcmQgYW4gaW5pdGlhbCBiYXRjaCBvZiA2NCB2YWx1ZXMuXG4gIGZvciAodmFyIGsgPSAwOyBrIDwgc3Ryc2VlZC5sZW5ndGggKyAyMDsgaysrKSB7XG4gICAgbWUuYiBePSBzdHJzZWVkLmNoYXJDb2RlQXQoaykgfCAwO1xuICAgIG1lLm5leHQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb3B5KGYsIHQpIHtcbiAgdC5hID0gZi5hO1xuICB0LmIgPSBmLmI7XG4gIHQuYyA9IGYuYztcbiAgdC5kID0gZi5kO1xuICByZXR1cm4gdDtcbn07XG5cbmZ1bmN0aW9uIGltcGwoc2VlZCwgb3B0cykge1xuICB2YXIgeGcgPSBuZXcgWG9yR2VuKHNlZWQpLFxuICAgICAgc3RhdGUgPSBvcHRzICYmIG9wdHMuc3RhdGUsXG4gICAgICBwcm5nID0gZnVuY3Rpb24oKSB7IHJldHVybiAoeGcubmV4dCgpID4+PiAwKSAvIDB4MTAwMDAwMDAwOyB9O1xuICBwcm5nLmRvdWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIGRvIHtcbiAgICAgIHZhciB0b3AgPSB4Zy5uZXh0KCkgPj4+IDExLFxuICAgICAgICAgIGJvdCA9ICh4Zy5uZXh0KCkgPj4+IDApIC8gMHgxMDAwMDAwMDAsXG4gICAgICAgICAgcmVzdWx0ID0gKHRvcCArIGJvdCkgLyAoMSA8PCAyMSk7XG4gICAgfSB3aGlsZSAocmVzdWx0ID09PSAwKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBwcm5nLmludDMyID0geGcubmV4dDtcbiAgcHJuZy5xdWljayA9IHBybmc7XG4gIGlmIChzdGF0ZSkge1xuICAgIGlmICh0eXBlb2Yoc3RhdGUpID09ICdvYmplY3QnKSBjb3B5KHN0YXRlLCB4Zyk7XG4gICAgcHJuZy5zdGF0ZSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29weSh4Zywge30pOyB9XG4gIH1cbiAgcmV0dXJuIHBybmc7XG59XG5cbmlmIChtb2R1bGUgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBpbXBsO1xufSBlbHNlIGlmIChkZWZpbmUgJiYgZGVmaW5lLmFtZCkge1xuICBkZWZpbmUoZnVuY3Rpb24oKSB7IHJldHVybiBpbXBsOyB9KTtcbn0gZWxzZSB7XG4gIHRoaXMudHljaGVpID0gaW1wbDtcbn1cblxufSkoXG4gIHRoaXMsXG4gICh0eXBlb2YgbW9kdWxlKSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUsICAgIC8vIHByZXNlbnQgaW4gbm9kZS5qc1xuICAodHlwZW9mIGRlZmluZSkgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUgICAvLyBwcmVzZW50IHdpdGggYW4gQU1EIGxvYWRlclxuKTtcblxuXG4iLCIvLyBBIEphdmFzY3JpcHQgaW1wbGVtZW50YWlvbiBvZiB0aGUgXCJ4b3IxMjhcIiBwcm5nIGFsZ29yaXRobSBieVxuLy8gR2VvcmdlIE1hcnNhZ2xpYS4gIFNlZSBodHRwOi8vd3d3LmpzdGF0c29mdC5vcmcvdjA4L2kxNC9wYXBlclxuXG4oZnVuY3Rpb24oZ2xvYmFsLCBtb2R1bGUsIGRlZmluZSkge1xuXG5mdW5jdGlvbiBYb3JHZW4oc2VlZCkge1xuICB2YXIgbWUgPSB0aGlzLCBzdHJzZWVkID0gJyc7XG5cbiAgbWUueCA9IDA7XG4gIG1lLnkgPSAwO1xuICBtZS56ID0gMDtcbiAgbWUudyA9IDA7XG5cbiAgLy8gU2V0IHVwIGdlbmVyYXRvciBmdW5jdGlvbi5cbiAgbWUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gbWUueCBeIChtZS54IDw8IDExKTtcbiAgICBtZS54ID0gbWUueTtcbiAgICBtZS55ID0gbWUuejtcbiAgICBtZS56ID0gbWUudztcbiAgICByZXR1cm4gbWUudyBePSAobWUudyA+Pj4gMTkpIF4gdCBeICh0ID4+PiA4KTtcbiAgfTtcblxuICBpZiAoc2VlZCA9PT0gKHNlZWQgfCAwKSkge1xuICAgIC8vIEludGVnZXIgc2VlZC5cbiAgICBtZS54ID0gc2VlZDtcbiAgfSBlbHNlIHtcbiAgICAvLyBTdHJpbmcgc2VlZC5cbiAgICBzdHJzZWVkICs9IHNlZWQ7XG4gIH1cblxuICAvLyBNaXggaW4gc3RyaW5nIHNlZWQsIHRoZW4gZGlzY2FyZCBhbiBpbml0aWFsIGJhdGNoIG9mIDY0IHZhbHVlcy5cbiAgZm9yICh2YXIgayA9IDA7IGsgPCBzdHJzZWVkLmxlbmd0aCArIDY0OyBrKyspIHtcbiAgICBtZS54IF49IHN0cnNlZWQuY2hhckNvZGVBdChrKSB8IDA7XG4gICAgbWUubmV4dCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHkoZiwgdCkge1xuICB0LnggPSBmLng7XG4gIHQueSA9IGYueTtcbiAgdC56ID0gZi56O1xuICB0LncgPSBmLnc7XG4gIHJldHVybiB0O1xufVxuXG5mdW5jdGlvbiBpbXBsKHNlZWQsIG9wdHMpIHtcbiAgdmFyIHhnID0gbmV3IFhvckdlbihzZWVkKSxcbiAgICAgIHN0YXRlID0gb3B0cyAmJiBvcHRzLnN0YXRlLFxuICAgICAgcHJuZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gKHhnLm5leHQoKSA+Pj4gMCkgLyAweDEwMDAwMDAwMDsgfTtcbiAgcHJuZy5kb3VibGUgPSBmdW5jdGlvbigpIHtcbiAgICBkbyB7XG4gICAgICB2YXIgdG9wID0geGcubmV4dCgpID4+PiAxMSxcbiAgICAgICAgICBib3QgPSAoeGcubmV4dCgpID4+PiAwKSAvIDB4MTAwMDAwMDAwLFxuICAgICAgICAgIHJlc3VsdCA9ICh0b3AgKyBib3QpIC8gKDEgPDwgMjEpO1xuICAgIH0gd2hpbGUgKHJlc3VsdCA9PT0gMCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgcHJuZy5pbnQzMiA9IHhnLm5leHQ7XG4gIHBybmcucXVpY2sgPSBwcm5nO1xuICBpZiAoc3RhdGUpIHtcbiAgICBpZiAodHlwZW9mKHN0YXRlKSA9PSAnb2JqZWN0JykgY29weShzdGF0ZSwgeGcpO1xuICAgIHBybmcuc3RhdGUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGNvcHkoeGcsIHt9KTsgfVxuICB9XG4gIHJldHVybiBwcm5nO1xufVxuXG5pZiAobW9kdWxlICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gaW1wbDtcbn0gZWxzZSBpZiAoZGVmaW5lICYmIGRlZmluZS5hbWQpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uKCkgeyByZXR1cm4gaW1wbDsgfSk7XG59IGVsc2Uge1xuICB0aGlzLnhvcjEyOCA9IGltcGw7XG59XG5cbn0pKFxuICB0aGlzLFxuICAodHlwZW9mIG1vZHVsZSkgPT0gJ29iamVjdCcgJiYgbW9kdWxlLCAgICAvLyBwcmVzZW50IGluIG5vZGUuanNcbiAgKHR5cGVvZiBkZWZpbmUpID09ICdmdW5jdGlvbicgJiYgZGVmaW5lICAgLy8gcHJlc2VudCB3aXRoIGFuIEFNRCBsb2FkZXJcbik7XG5cblxuIiwiLy8gQSBKYXZhc2NyaXB0IGltcGxlbWVudGFpb24gb2YgUmljaGFyZCBCcmVudCdzIFhvcmdlbnMgeG9yNDA5NiBhbGdvcml0aG0uXG4vL1xuLy8gVGhpcyBmYXN0IG5vbi1jcnlwdG9ncmFwaGljIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGlzIGRlc2lnbmVkIGZvclxuLy8gdXNlIGluIE1vbnRlLUNhcmxvIGFsZ29yaXRobXMuIEl0IGNvbWJpbmVzIGEgbG9uZy1wZXJpb2QgeG9yc2hpZnRcbi8vIGdlbmVyYXRvciB3aXRoIGEgV2V5bCBnZW5lcmF0b3IsIGFuZCBpdCBwYXNzZXMgYWxsIGNvbW1vbiBiYXR0ZXJpZXNcbi8vIG9mIHN0YXN0aWNpYWwgdGVzdHMgZm9yIHJhbmRvbW5lc3Mgd2hpbGUgY29uc3VtaW5nIG9ubHkgYSBmZXcgbmFub3NlY29uZHNcbi8vIGZvciBlYWNoIHBybmcgZ2VuZXJhdGVkLiAgRm9yIGJhY2tncm91bmQgb24gdGhlIGdlbmVyYXRvciwgc2VlIEJyZW50J3Ncbi8vIHBhcGVyOiBcIlNvbWUgbG9uZy1wZXJpb2QgcmFuZG9tIG51bWJlciBnZW5lcmF0b3JzIHVzaW5nIHNoaWZ0cyBhbmQgeG9ycy5cIlxuLy8gaHR0cDovL2FyeGl2Lm9yZy9wZGYvMTAwNC4zMTE1djEucGRmXG4vL1xuLy8gVXNhZ2U6XG4vL1xuLy8gdmFyIHhvcjQwOTYgPSByZXF1aXJlKCd4b3I0MDk2Jyk7XG4vLyByYW5kb20gPSB4b3I0MDk2KDEpOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlZWQgd2l0aCBpbnQzMiBvciBzdHJpbmcuXG4vLyBhc3NlcnQuZXF1YWwocmFuZG9tKCksIDAuMTUyMDQzNjQ1MDUzODU0Nyk7IC8vICgwLCAxKSByYW5nZSwgNTMgYml0cy5cbi8vIGFzc2VydC5lcXVhbChyYW5kb20uaW50MzIoKSwgMTgwNjUzNDg5Nyk7ICAgLy8gc2lnbmVkIGludDMyLCAzMiBiaXRzLlxuLy9cbi8vIEZvciBub256ZXJvIG51bWVyaWMga2V5cywgdGhpcyBpbXBlbGVtZW50YXRpb24gcHJvdmlkZXMgYSBzZXF1ZW5jZVxuLy8gaWRlbnRpY2FsIHRvIHRoYXQgYnkgQnJlbnQncyB4b3JnZW5zIDMgaW1wbGVtZW50YWlvbiBpbiBDLiAgVGhpc1xuLy8gaW1wbGVtZW50YXRpb24gYWxzbyBwcm92aWRlcyBmb3IgaW5pdGFsaXppbmcgdGhlIGdlbmVyYXRvciB3aXRoXG4vLyBzdHJpbmcgc2VlZHMsIG9yIGZvciBzYXZpbmcgYW5kIHJlc3RvcmluZyB0aGUgc3RhdGUgb2YgdGhlIGdlbmVyYXRvci5cbi8vXG4vLyBPbiBDaHJvbWUsIHRoaXMgcHJuZyBiZW5jaG1hcmtzIGFib3V0IDIuMSB0aW1lcyBzbG93ZXIgdGhhblxuLy8gSmF2YXNjcmlwdCdzIGJ1aWx0LWluIE1hdGgucmFuZG9tKCkuXG5cbihmdW5jdGlvbihnbG9iYWwsIG1vZHVsZSwgZGVmaW5lKSB7XG5cbmZ1bmN0aW9uIFhvckdlbihzZWVkKSB7XG4gIHZhciBtZSA9IHRoaXM7XG5cbiAgLy8gU2V0IHVwIGdlbmVyYXRvciBmdW5jdGlvbi5cbiAgbWUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB3ID0gbWUudyxcbiAgICAgICAgWCA9IG1lLlgsIGkgPSBtZS5pLCB0LCB2O1xuICAgIC8vIFVwZGF0ZSBXZXlsIGdlbmVyYXRvci5cbiAgICBtZS53ID0gdyA9ICh3ICsgMHg2MWM4ODY0NykgfCAwO1xuICAgIC8vIFVwZGF0ZSB4b3IgZ2VuZXJhdG9yLlxuICAgIHYgPSBYWyhpICsgMzQpICYgMTI3XTtcbiAgICB0ID0gWFtpID0gKChpICsgMSkgJiAxMjcpXTtcbiAgICB2IF49IHYgPDwgMTM7XG4gICAgdCBePSB0IDw8IDE3O1xuICAgIHYgXj0gdiA+Pj4gMTU7XG4gICAgdCBePSB0ID4+PiAxMjtcbiAgICAvLyBVcGRhdGUgWG9yIGdlbmVyYXRvciBhcnJheSBzdGF0ZS5cbiAgICB2ID0gWFtpXSA9IHYgXiB0O1xuICAgIG1lLmkgPSBpO1xuICAgIC8vIFJlc3VsdCBpcyB0aGUgY29tYmluYXRpb24uXG4gICAgcmV0dXJuICh2ICsgKHcgXiAodyA+Pj4gMTYpKSkgfCAwO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGluaXQobWUsIHNlZWQpIHtcbiAgICB2YXIgdCwgdiwgaSwgaiwgdywgWCA9IFtdLCBsaW1pdCA9IDEyODtcbiAgICBpZiAoc2VlZCA9PT0gKHNlZWQgfCAwKSkge1xuICAgICAgLy8gTnVtZXJpYyBzZWVkcyBpbml0aWFsaXplIHYsIHdoaWNoIGlzIHVzZWQgdG8gZ2VuZXJhdGVzIFguXG4gICAgICB2ID0gc2VlZDtcbiAgICAgIHNlZWQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdHJpbmcgc2VlZHMgYXJlIG1peGVkIGludG8gdiBhbmQgWCBvbmUgY2hhcmFjdGVyIGF0IGEgdGltZS5cbiAgICAgIHNlZWQgPSBzZWVkICsgJ1xcMCc7XG4gICAgICB2ID0gMDtcbiAgICAgIGxpbWl0ID0gTWF0aC5tYXgobGltaXQsIHNlZWQubGVuZ3RoKTtcbiAgICB9XG4gICAgLy8gSW5pdGlhbGl6ZSBjaXJjdWxhciBhcnJheSBhbmQgd2V5bCB2YWx1ZS5cbiAgICBmb3IgKGkgPSAwLCBqID0gLTMyOyBqIDwgbGltaXQ7ICsraikge1xuICAgICAgLy8gUHV0IHRoZSB1bmljb2RlIGNoYXJhY3RlcnMgaW50byB0aGUgYXJyYXksIGFuZCBzaHVmZmxlIHRoZW0uXG4gICAgICBpZiAoc2VlZCkgdiBePSBzZWVkLmNoYXJDb2RlQXQoKGogKyAzMikgJSBzZWVkLmxlbmd0aCk7XG4gICAgICAvLyBBZnRlciAzMiBzaHVmZmxlcywgdGFrZSB2IGFzIHRoZSBzdGFydGluZyB3IHZhbHVlLlxuICAgICAgaWYgKGogPT09IDApIHcgPSB2O1xuICAgICAgdiBePSB2IDw8IDEwO1xuICAgICAgdiBePSB2ID4+PiAxNTtcbiAgICAgIHYgXj0gdiA8PCA0O1xuICAgICAgdiBePSB2ID4+PiAxMztcbiAgICAgIGlmIChqID49IDApIHtcbiAgICAgICAgdyA9ICh3ICsgMHg2MWM4ODY0NykgfCAwOyAgICAgLy8gV2V5bC5cbiAgICAgICAgdCA9IChYW2ogJiAxMjddIF49ICh2ICsgdykpOyAgLy8gQ29tYmluZSB4b3IgYW5kIHdleWwgdG8gaW5pdCBhcnJheS5cbiAgICAgICAgaSA9ICgwID09IHQpID8gaSArIDEgOiAwOyAgICAgLy8gQ291bnQgemVyb2VzLlxuICAgICAgfVxuICAgIH1cbiAgICAvLyBXZSBoYXZlIGRldGVjdGVkIGFsbCB6ZXJvZXM7IG1ha2UgdGhlIGtleSBub256ZXJvLlxuICAgIGlmIChpID49IDEyOCkge1xuICAgICAgWFsoc2VlZCAmJiBzZWVkLmxlbmd0aCB8fCAwKSAmIDEyN10gPSAtMTtcbiAgICB9XG4gICAgLy8gUnVuIHRoZSBnZW5lcmF0b3IgNTEyIHRpbWVzIHRvIGZ1cnRoZXIgbWl4IHRoZSBzdGF0ZSBiZWZvcmUgdXNpbmcgaXQuXG4gICAgLy8gRmFjdG9yaW5nIHRoaXMgYXMgYSBmdW5jdGlvbiBzbG93cyB0aGUgbWFpbiBnZW5lcmF0b3IsIHNvIGl0IGlzIGp1c3RcbiAgICAvLyB1bnJvbGxlZCBoZXJlLiAgVGhlIHdleWwgZ2VuZXJhdG9yIGlzIG5vdCBhZHZhbmNlZCB3aGlsZSB3YXJtaW5nIHVwLlxuICAgIGkgPSAxMjc7XG4gICAgZm9yIChqID0gNCAqIDEyODsgaiA+IDA7IC0taikge1xuICAgICAgdiA9IFhbKGkgKyAzNCkgJiAxMjddO1xuICAgICAgdCA9IFhbaSA9ICgoaSArIDEpICYgMTI3KV07XG4gICAgICB2IF49IHYgPDwgMTM7XG4gICAgICB0IF49IHQgPDwgMTc7XG4gICAgICB2IF49IHYgPj4+IDE1O1xuICAgICAgdCBePSB0ID4+PiAxMjtcbiAgICAgIFhbaV0gPSB2IF4gdDtcbiAgICB9XG4gICAgLy8gU3RvcmluZyBzdGF0ZSBhcyBvYmplY3QgbWVtYmVycyBpcyBmYXN0ZXIgdGhhbiB1c2luZyBjbG9zdXJlIHZhcmlhYmxlcy5cbiAgICBtZS53ID0gdztcbiAgICBtZS5YID0gWDtcbiAgICBtZS5pID0gaTtcbiAgfVxuXG4gIGluaXQobWUsIHNlZWQpO1xufVxuXG5mdW5jdGlvbiBjb3B5KGYsIHQpIHtcbiAgdC5pID0gZi5pO1xuICB0LncgPSBmLnc7XG4gIHQuWCA9IGYuWC5zbGljZSgpO1xuICByZXR1cm4gdDtcbn07XG5cbmZ1bmN0aW9uIGltcGwoc2VlZCwgb3B0cykge1xuICBpZiAoc2VlZCA9PSBudWxsKSBzZWVkID0gKyhuZXcgRGF0ZSk7XG4gIHZhciB4ZyA9IG5ldyBYb3JHZW4oc2VlZCksXG4gICAgICBzdGF0ZSA9IG9wdHMgJiYgb3B0cy5zdGF0ZSxcbiAgICAgIHBybmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuICh4Zy5uZXh0KCkgPj4+IDApIC8gMHgxMDAwMDAwMDA7IH07XG4gIHBybmcuZG91YmxlID0gZnVuY3Rpb24oKSB7XG4gICAgZG8ge1xuICAgICAgdmFyIHRvcCA9IHhnLm5leHQoKSA+Pj4gMTEsXG4gICAgICAgICAgYm90ID0gKHhnLm5leHQoKSA+Pj4gMCkgLyAweDEwMDAwMDAwMCxcbiAgICAgICAgICByZXN1bHQgPSAodG9wICsgYm90KSAvICgxIDw8IDIxKTtcbiAgICB9IHdoaWxlIChyZXN1bHQgPT09IDApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHBybmcuaW50MzIgPSB4Zy5uZXh0O1xuICBwcm5nLnF1aWNrID0gcHJuZztcbiAgaWYgKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLlgpIGNvcHkoc3RhdGUsIHhnKTtcbiAgICBwcm5nLnN0YXRlID0gZnVuY3Rpb24oKSB7IHJldHVybiBjb3B5KHhnLCB7fSk7IH1cbiAgfVxuICByZXR1cm4gcHJuZztcbn1cblxuaWYgKG1vZHVsZSAmJiBtb2R1bGUuZXhwb3J0cykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGltcGw7XG59IGVsc2UgaWYgKGRlZmluZSAmJiBkZWZpbmUuYW1kKSB7XG4gIGRlZmluZShmdW5jdGlvbigpIHsgcmV0dXJuIGltcGw7IH0pO1xufSBlbHNlIHtcbiAgdGhpcy54b3I0MDk2ID0gaW1wbDtcbn1cblxufSkoXG4gIHRoaXMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbmRvdyBvYmplY3Qgb3IgZ2xvYmFsXG4gICh0eXBlb2YgbW9kdWxlKSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUsICAgIC8vIHByZXNlbnQgaW4gbm9kZS5qc1xuICAodHlwZW9mIGRlZmluZSkgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUgICAvLyBwcmVzZW50IHdpdGggYW4gQU1EIGxvYWRlclxuKTtcbiIsIi8vIEEgSmF2YXNjcmlwdCBpbXBsZW1lbnRhaW9uIG9mIHRoZSBcInhvcnNoaWZ0N1wiIGFsZ29yaXRobSBieVxuLy8gRnJhbsOnb2lzIFBhbm5ldG9uIGFuZCBQaWVycmUgTCdlY3V5ZXI6XG4vLyBcIk9uIHRoZSBYb3Jnc2hpZnQgUmFuZG9tIE51bWJlciBHZW5lcmF0b3JzXCJcbi8vIGh0dHA6Ly9zYWx1Yy5lbmdyLnVjb25uLmVkdS9yZWZzL2NyeXB0by9ybmcvcGFubmV0b24wNW9udGhleG9yc2hpZnQucGRmXG5cbihmdW5jdGlvbihnbG9iYWwsIG1vZHVsZSwgZGVmaW5lKSB7XG5cbmZ1bmN0aW9uIFhvckdlbihzZWVkKSB7XG4gIHZhciBtZSA9IHRoaXM7XG5cbiAgLy8gU2V0IHVwIGdlbmVyYXRvciBmdW5jdGlvbi5cbiAgbWUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIFVwZGF0ZSB4b3IgZ2VuZXJhdG9yLlxuICAgIHZhciBYID0gbWUueCwgaSA9IG1lLmksIHQsIHYsIHc7XG4gICAgdCA9IFhbaV07IHQgXj0gKHQgPj4+IDcpOyB2ID0gdCBeICh0IDw8IDI0KTtcbiAgICB0ID0gWFsoaSArIDEpICYgN107IHYgXj0gdCBeICh0ID4+PiAxMCk7XG4gICAgdCA9IFhbKGkgKyAzKSAmIDddOyB2IF49IHQgXiAodCA+Pj4gMyk7XG4gICAgdCA9IFhbKGkgKyA0KSAmIDddOyB2IF49IHQgXiAodCA8PCA3KTtcbiAgICB0ID0gWFsoaSArIDcpICYgN107IHQgPSB0IF4gKHQgPDwgMTMpOyB2IF49IHQgXiAodCA8PCA5KTtcbiAgICBYW2ldID0gdjtcbiAgICBtZS5pID0gKGkgKyAxKSAmIDc7XG4gICAgcmV0dXJuIHY7XG4gIH07XG5cbiAgZnVuY3Rpb24gaW5pdChtZSwgc2VlZCkge1xuICAgIHZhciBqLCB3LCBYID0gW107XG5cbiAgICBpZiAoc2VlZCA9PT0gKHNlZWQgfCAwKSkge1xuICAgICAgLy8gU2VlZCBzdGF0ZSBhcnJheSB1c2luZyBhIDMyLWJpdCBpbnRlZ2VyLlxuICAgICAgdyA9IFhbMF0gPSBzZWVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTZWVkIHN0YXRlIHVzaW5nIGEgc3RyaW5nLlxuICAgICAgc2VlZCA9ICcnICsgc2VlZDtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBzZWVkLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIFhbaiAmIDddID0gKFhbaiAmIDddIDw8IDE1KSBeXG4gICAgICAgICAgICAoc2VlZC5jaGFyQ29kZUF0KGopICsgWFsoaiArIDEpICYgN10gPDwgMTMpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBFbmZvcmNlIGFuIGFycmF5IGxlbmd0aCBvZiA4LCBub3QgYWxsIHplcm9lcy5cbiAgICB3aGlsZSAoWC5sZW5ndGggPCA4KSBYLnB1c2goMCk7XG4gICAgZm9yIChqID0gMDsgaiA8IDggJiYgWFtqXSA9PT0gMDsgKytqKTtcbiAgICBpZiAoaiA9PSA4KSB3ID0gWFs3XSA9IC0xOyBlbHNlIHcgPSBYW2pdO1xuXG4gICAgbWUueCA9IFg7XG4gICAgbWUuaSA9IDA7XG5cbiAgICAvLyBEaXNjYXJkIGFuIGluaXRpYWwgMjU2IHZhbHVlcy5cbiAgICBmb3IgKGogPSAyNTY7IGogPiAwOyAtLWopIHtcbiAgICAgIG1lLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBpbml0KG1lLCBzZWVkKTtcbn1cblxuZnVuY3Rpb24gY29weShmLCB0KSB7XG4gIHQueCA9IGYueC5zbGljZSgpO1xuICB0LmkgPSBmLmk7XG4gIHJldHVybiB0O1xufVxuXG5mdW5jdGlvbiBpbXBsKHNlZWQsIG9wdHMpIHtcbiAgaWYgKHNlZWQgPT0gbnVsbCkgc2VlZCA9ICsobmV3IERhdGUpO1xuICB2YXIgeGcgPSBuZXcgWG9yR2VuKHNlZWQpLFxuICAgICAgc3RhdGUgPSBvcHRzICYmIG9wdHMuc3RhdGUsXG4gICAgICBwcm5nID0gZnVuY3Rpb24oKSB7IHJldHVybiAoeGcubmV4dCgpID4+PiAwKSAvIDB4MTAwMDAwMDAwOyB9O1xuICBwcm5nLmRvdWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIGRvIHtcbiAgICAgIHZhciB0b3AgPSB4Zy5uZXh0KCkgPj4+IDExLFxuICAgICAgICAgIGJvdCA9ICh4Zy5uZXh0KCkgPj4+IDApIC8gMHgxMDAwMDAwMDAsXG4gICAgICAgICAgcmVzdWx0ID0gKHRvcCArIGJvdCkgLyAoMSA8PCAyMSk7XG4gICAgfSB3aGlsZSAocmVzdWx0ID09PSAwKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBwcm5nLmludDMyID0geGcubmV4dDtcbiAgcHJuZy5xdWljayA9IHBybmc7XG4gIGlmIChzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS54KSBjb3B5KHN0YXRlLCB4Zyk7XG4gICAgcHJuZy5zdGF0ZSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29weSh4Zywge30pOyB9XG4gIH1cbiAgcmV0dXJuIHBybmc7XG59XG5cbmlmIChtb2R1bGUgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBpbXBsO1xufSBlbHNlIGlmIChkZWZpbmUgJiYgZGVmaW5lLmFtZCkge1xuICBkZWZpbmUoZnVuY3Rpb24oKSB7IHJldHVybiBpbXBsOyB9KTtcbn0gZWxzZSB7XG4gIHRoaXMueG9yc2hpZnQ3ID0gaW1wbDtcbn1cblxufSkoXG4gIHRoaXMsXG4gICh0eXBlb2YgbW9kdWxlKSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUsICAgIC8vIHByZXNlbnQgaW4gbm9kZS5qc1xuICAodHlwZW9mIGRlZmluZSkgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUgICAvLyBwcmVzZW50IHdpdGggYW4gQU1EIGxvYWRlclxuKTtcblxuIiwiLy8gQSBKYXZhc2NyaXB0IGltcGxlbWVudGFpb24gb2YgdGhlIFwieG9yd293XCIgcHJuZyBhbGdvcml0aG0gYnlcbi8vIEdlb3JnZSBNYXJzYWdsaWEuICBTZWUgaHR0cDovL3d3dy5qc3RhdHNvZnQub3JnL3YwOC9pMTQvcGFwZXJcblxuKGZ1bmN0aW9uKGdsb2JhbCwgbW9kdWxlLCBkZWZpbmUpIHtcblxuZnVuY3Rpb24gWG9yR2VuKHNlZWQpIHtcbiAgdmFyIG1lID0gdGhpcywgc3Ryc2VlZCA9ICcnO1xuXG4gIC8vIFNldCB1cCBnZW5lcmF0b3IgZnVuY3Rpb24uXG4gIG1lLm5leHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IChtZS54IF4gKG1lLnggPj4+IDIpKTtcbiAgICBtZS54ID0gbWUueTsgbWUueSA9IG1lLno7IG1lLnogPSBtZS53OyBtZS53ID0gbWUudjtcbiAgICByZXR1cm4gKG1lLmQgPSAobWUuZCArIDM2MjQzNyB8IDApKSArXG4gICAgICAgKG1lLnYgPSAobWUudiBeIChtZS52IDw8IDQpKSBeICh0IF4gKHQgPDwgMSkpKSB8IDA7XG4gIH07XG5cbiAgbWUueCA9IDA7XG4gIG1lLnkgPSAwO1xuICBtZS56ID0gMDtcbiAgbWUudyA9IDA7XG4gIG1lLnYgPSAwO1xuXG4gIGlmIChzZWVkID09PSAoc2VlZCB8IDApKSB7XG4gICAgLy8gSW50ZWdlciBzZWVkLlxuICAgIG1lLnggPSBzZWVkO1xuICB9IGVsc2Uge1xuICAgIC8vIFN0cmluZyBzZWVkLlxuICAgIHN0cnNlZWQgKz0gc2VlZDtcbiAgfVxuXG4gIC8vIE1peCBpbiBzdHJpbmcgc2VlZCwgdGhlbiBkaXNjYXJkIGFuIGluaXRpYWwgYmF0Y2ggb2YgNjQgdmFsdWVzLlxuICBmb3IgKHZhciBrID0gMDsgayA8IHN0cnNlZWQubGVuZ3RoICsgNjQ7IGsrKykge1xuICAgIG1lLnggXj0gc3Ryc2VlZC5jaGFyQ29kZUF0KGspIHwgMDtcbiAgICBpZiAoayA9PSBzdHJzZWVkLmxlbmd0aCkge1xuICAgICAgbWUuZCA9IG1lLnggPDwgMTAgXiBtZS54ID4+PiA0O1xuICAgIH1cbiAgICBtZS5uZXh0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29weShmLCB0KSB7XG4gIHQueCA9IGYueDtcbiAgdC55ID0gZi55O1xuICB0LnogPSBmLno7XG4gIHQudyA9IGYudztcbiAgdC52ID0gZi52O1xuICB0LmQgPSBmLmQ7XG4gIHJldHVybiB0O1xufVxuXG5mdW5jdGlvbiBpbXBsKHNlZWQsIG9wdHMpIHtcbiAgdmFyIHhnID0gbmV3IFhvckdlbihzZWVkKSxcbiAgICAgIHN0YXRlID0gb3B0cyAmJiBvcHRzLnN0YXRlLFxuICAgICAgcHJuZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gKHhnLm5leHQoKSA+Pj4gMCkgLyAweDEwMDAwMDAwMDsgfTtcbiAgcHJuZy5kb3VibGUgPSBmdW5jdGlvbigpIHtcbiAgICBkbyB7XG4gICAgICB2YXIgdG9wID0geGcubmV4dCgpID4+PiAxMSxcbiAgICAgICAgICBib3QgPSAoeGcubmV4dCgpID4+PiAwKSAvIDB4MTAwMDAwMDAwLFxuICAgICAgICAgIHJlc3VsdCA9ICh0b3AgKyBib3QpIC8gKDEgPDwgMjEpO1xuICAgIH0gd2hpbGUgKHJlc3VsdCA9PT0gMCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgcHJuZy5pbnQzMiA9IHhnLm5leHQ7XG4gIHBybmcucXVpY2sgPSBwcm5nO1xuICBpZiAoc3RhdGUpIHtcbiAgICBpZiAodHlwZW9mKHN0YXRlKSA9PSAnb2JqZWN0JykgY29weShzdGF0ZSwgeGcpO1xuICAgIHBybmcuc3RhdGUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGNvcHkoeGcsIHt9KTsgfVxuICB9XG4gIHJldHVybiBwcm5nO1xufVxuXG5pZiAobW9kdWxlICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gaW1wbDtcbn0gZWxzZSBpZiAoZGVmaW5lICYmIGRlZmluZS5hbWQpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uKCkgeyByZXR1cm4gaW1wbDsgfSk7XG59IGVsc2Uge1xuICB0aGlzLnhvcndvdyA9IGltcGw7XG59XG5cbn0pKFxuICB0aGlzLFxuICAodHlwZW9mIG1vZHVsZSkgPT0gJ29iamVjdCcgJiYgbW9kdWxlLCAgICAvLyBwcmVzZW50IGluIG5vZGUuanNcbiAgKHR5cGVvZiBkZWZpbmUpID09ICdmdW5jdGlvbicgJiYgZGVmaW5lICAgLy8gcHJlc2VudCB3aXRoIGFuIEFNRCBsb2FkZXJcbik7XG5cblxuIiwiLypcbkNvcHlyaWdodCAyMDE5IERhdmlkIEJhdS5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG5hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcblwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xud2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbnRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbmluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG5NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuXG5JTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWVxuQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcblRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFXG5TT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIHBvb2wsIG1hdGgpIHtcbi8vXG4vLyBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVsYXRlZCB0byBJRUVFIDc1NCBsaW1pdHMuXG4vL1xuXG52YXIgd2lkdGggPSAyNTYsICAgICAgICAvLyBlYWNoIFJDNCBvdXRwdXQgaXMgMCA8PSB4IDwgMjU2XG4gICAgY2h1bmtzID0gNiwgICAgICAgICAvLyBhdCBsZWFzdCBzaXggUkM0IG91dHB1dHMgZm9yIGVhY2ggZG91YmxlXG4gICAgZGlnaXRzID0gNTIsICAgICAgICAvLyB0aGVyZSBhcmUgNTIgc2lnbmlmaWNhbnQgZGlnaXRzIGluIGEgZG91YmxlXG4gICAgcm5nbmFtZSA9ICdyYW5kb20nLCAvLyBybmduYW1lOiBuYW1lIGZvciBNYXRoLnJhbmRvbSBhbmQgTWF0aC5zZWVkcmFuZG9tXG4gICAgc3RhcnRkZW5vbSA9IG1hdGgucG93KHdpZHRoLCBjaHVua3MpLFxuICAgIHNpZ25pZmljYW5jZSA9IG1hdGgucG93KDIsIGRpZ2l0cyksXG4gICAgb3ZlcmZsb3cgPSBzaWduaWZpY2FuY2UgKiAyLFxuICAgIG1hc2sgPSB3aWR0aCAtIDEsXG4gICAgbm9kZWNyeXB0bzsgICAgICAgICAvLyBub2RlLmpzIGNyeXB0byBtb2R1bGUsIGluaXRpYWxpemVkIGF0IHRoZSBib3R0b20uXG5cbi8vXG4vLyBzZWVkcmFuZG9tKClcbi8vIFRoaXMgaXMgdGhlIHNlZWRyYW5kb20gZnVuY3Rpb24gZGVzY3JpYmVkIGFib3ZlLlxuLy9cbmZ1bmN0aW9uIHNlZWRyYW5kb20oc2VlZCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyIGtleSA9IFtdO1xuICBvcHRpb25zID0gKG9wdGlvbnMgPT0gdHJ1ZSkgPyB7IGVudHJvcHk6IHRydWUgfSA6IChvcHRpb25zIHx8IHt9KTtcblxuICAvLyBGbGF0dGVuIHRoZSBzZWVkIHN0cmluZyBvciBidWlsZCBvbmUgZnJvbSBsb2NhbCBlbnRyb3B5IGlmIG5lZWRlZC5cbiAgdmFyIHNob3J0c2VlZCA9IG1peGtleShmbGF0dGVuKFxuICAgIG9wdGlvbnMuZW50cm9weSA/IFtzZWVkLCB0b3N0cmluZyhwb29sKV0gOlxuICAgIChzZWVkID09IG51bGwpID8gYXV0b3NlZWQoKSA6IHNlZWQsIDMpLCBrZXkpO1xuXG4gIC8vIFVzZSB0aGUgc2VlZCB0byBpbml0aWFsaXplIGFuIEFSQzQgZ2VuZXJhdG9yLlxuICB2YXIgYXJjNCA9IG5ldyBBUkM0KGtleSk7XG5cbiAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcmFuZG9tIGRvdWJsZSBpbiBbMCwgMSkgdGhhdCBjb250YWluc1xuICAvLyByYW5kb21uZXNzIGluIGV2ZXJ5IGJpdCBvZiB0aGUgbWFudGlzc2Egb2YgdGhlIElFRUUgNzU0IHZhbHVlLlxuICB2YXIgcHJuZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuID0gYXJjNC5nKGNodW5rcyksICAgICAgICAgICAgIC8vIFN0YXJ0IHdpdGggYSBudW1lcmF0b3IgbiA8IDIgXiA0OFxuICAgICAgICBkID0gc3RhcnRkZW5vbSwgICAgICAgICAgICAgICAgIC8vICAgYW5kIGRlbm9taW5hdG9yIGQgPSAyIF4gNDguXG4gICAgICAgIHggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBhbmQgbm8gJ2V4dHJhIGxhc3QgYnl0ZScuXG4gICAgd2hpbGUgKG4gPCBzaWduaWZpY2FuY2UpIHsgICAgICAgICAgLy8gRmlsbCB1cCBhbGwgc2lnbmlmaWNhbnQgZGlnaXRzIGJ5XG4gICAgICBuID0gKG4gKyB4KSAqIHdpZHRoOyAgICAgICAgICAgICAgLy8gICBzaGlmdGluZyBudW1lcmF0b3IgYW5kXG4gICAgICBkICo9IHdpZHRoOyAgICAgICAgICAgICAgICAgICAgICAgLy8gICBkZW5vbWluYXRvciBhbmQgZ2VuZXJhdGluZyBhXG4gICAgICB4ID0gYXJjNC5nKDEpOyAgICAgICAgICAgICAgICAgICAgLy8gICBuZXcgbGVhc3Qtc2lnbmlmaWNhbnQtYnl0ZS5cbiAgICB9XG4gICAgd2hpbGUgKG4gPj0gb3ZlcmZsb3cpIHsgICAgICAgICAgICAgLy8gVG8gYXZvaWQgcm91bmRpbmcgdXAsIGJlZm9yZSBhZGRpbmdcbiAgICAgIG4gLz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGxhc3QgYnl0ZSwgc2hpZnQgZXZlcnl0aGluZ1xuICAgICAgZCAvPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgcmlnaHQgdXNpbmcgaW50ZWdlciBtYXRoIHVudGlsXG4gICAgICB4ID4+Pj0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3ZSBoYXZlIGV4YWN0bHkgdGhlIGRlc2lyZWQgYml0cy5cbiAgICB9XG4gICAgcmV0dXJuIChuICsgeCkgLyBkOyAgICAgICAgICAgICAgICAgLy8gRm9ybSB0aGUgbnVtYmVyIHdpdGhpbiBbMCwgMSkuXG4gIH07XG5cbiAgcHJuZy5pbnQzMiA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJjNC5nKDQpIHwgMDsgfVxuICBwcm5nLnF1aWNrID0gZnVuY3Rpb24oKSB7IHJldHVybiBhcmM0LmcoNCkgLyAweDEwMDAwMDAwMDsgfVxuICBwcm5nLmRvdWJsZSA9IHBybmc7XG5cbiAgLy8gTWl4IHRoZSByYW5kb21uZXNzIGludG8gYWNjdW11bGF0ZWQgZW50cm9weS5cbiAgbWl4a2V5KHRvc3RyaW5nKGFyYzQuUyksIHBvb2wpO1xuXG4gIC8vIENhbGxpbmcgY29udmVudGlvbjogd2hhdCB0byByZXR1cm4gYXMgYSBmdW5jdGlvbiBvZiBwcm5nLCBzZWVkLCBpc19tYXRoLlxuICByZXR1cm4gKG9wdGlvbnMucGFzcyB8fCBjYWxsYmFjayB8fFxuICAgICAgZnVuY3Rpb24ocHJuZywgc2VlZCwgaXNfbWF0aF9jYWxsLCBzdGF0ZSkge1xuICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICAvLyBMb2FkIHRoZSBhcmM0IHN0YXRlIGZyb20gdGhlIGdpdmVuIHN0YXRlIGlmIGl0IGhhcyBhbiBTIGFycmF5LlxuICAgICAgICAgIGlmIChzdGF0ZS5TKSB7IGNvcHkoc3RhdGUsIGFyYzQpOyB9XG4gICAgICAgICAgLy8gT25seSBwcm92aWRlIHRoZSAuc3RhdGUgbWV0aG9kIGlmIHJlcXVlc3RlZCB2aWEgb3B0aW9ucy5zdGF0ZS5cbiAgICAgICAgICBwcm5nLnN0YXRlID0gZnVuY3Rpb24oKSB7IHJldHVybiBjb3B5KGFyYzQsIHt9KTsgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgY2FsbGVkIGFzIGEgbWV0aG9kIG9mIE1hdGggKE1hdGguc2VlZHJhbmRvbSgpKSwgbXV0YXRlXG4gICAgICAgIC8vIE1hdGgucmFuZG9tIGJlY2F1c2UgdGhhdCBpcyBob3cgc2VlZHJhbmRvbS5qcyBoYXMgd29ya2VkIHNpbmNlIHYxLjAuXG4gICAgICAgIGlmIChpc19tYXRoX2NhbGwpIHsgbWF0aFtybmduYW1lXSA9IHBybmc7IHJldHVybiBzZWVkOyB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpdCBpcyBhIG5ld2VyIGNhbGxpbmcgY29udmVudGlvbiwgc28gcmV0dXJuIHRoZVxuICAgICAgICAvLyBwcm5nIGRpcmVjdGx5LlxuICAgICAgICBlbHNlIHJldHVybiBwcm5nO1xuICAgICAgfSkoXG4gIHBybmcsXG4gIHNob3J0c2VlZCxcbiAgJ2dsb2JhbCcgaW4gb3B0aW9ucyA/IG9wdGlvbnMuZ2xvYmFsIDogKHRoaXMgPT0gbWF0aCksXG4gIG9wdGlvbnMuc3RhdGUpO1xufVxuXG4vL1xuLy8gQVJDNFxuLy9cbi8vIEFuIEFSQzQgaW1wbGVtZW50YXRpb24uICBUaGUgY29uc3RydWN0b3IgdGFrZXMgYSBrZXkgaW4gdGhlIGZvcm0gb2Zcbi8vIGFuIGFycmF5IG9mIGF0IG1vc3QgKHdpZHRoKSBpbnRlZ2VycyB0aGF0IHNob3VsZCBiZSAwIDw9IHggPCAod2lkdGgpLlxuLy9cbi8vIFRoZSBnKGNvdW50KSBtZXRob2QgcmV0dXJucyBhIHBzZXVkb3JhbmRvbSBpbnRlZ2VyIHRoYXQgY29uY2F0ZW5hdGVzXG4vLyB0aGUgbmV4dCAoY291bnQpIG91dHB1dHMgZnJvbSBBUkM0LiAgSXRzIHJldHVybiB2YWx1ZSBpcyBhIG51bWJlciB4XG4vLyB0aGF0IGlzIGluIHRoZSByYW5nZSAwIDw9IHggPCAod2lkdGggXiBjb3VudCkuXG4vL1xuZnVuY3Rpb24gQVJDNChrZXkpIHtcbiAgdmFyIHQsIGtleWxlbiA9IGtleS5sZW5ndGgsXG4gICAgICBtZSA9IHRoaXMsIGkgPSAwLCBqID0gbWUuaSA9IG1lLmogPSAwLCBzID0gbWUuUyA9IFtdO1xuXG4gIC8vIFRoZSBlbXB0eSBrZXkgW10gaXMgdHJlYXRlZCBhcyBbMF0uXG4gIGlmICgha2V5bGVuKSB7IGtleSA9IFtrZXlsZW4rK107IH1cblxuICAvLyBTZXQgdXAgUyB1c2luZyB0aGUgc3RhbmRhcmQga2V5IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxuICB3aGlsZSAoaSA8IHdpZHRoKSB7XG4gICAgc1tpXSA9IGkrKztcbiAgfVxuICBmb3IgKGkgPSAwOyBpIDwgd2lkdGg7IGkrKykge1xuICAgIHNbaV0gPSBzW2ogPSBtYXNrICYgKGogKyBrZXlbaSAlIGtleWxlbl0gKyAodCA9IHNbaV0pKV07XG4gICAgc1tqXSA9IHQ7XG4gIH1cblxuICAvLyBUaGUgXCJnXCIgbWV0aG9kIHJldHVybnMgdGhlIG5leHQgKGNvdW50KSBvdXRwdXRzIGFzIG9uZSBudW1iZXIuXG4gIChtZS5nID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICAvLyBVc2luZyBpbnN0YW5jZSBtZW1iZXJzIGluc3RlYWQgb2YgY2xvc3VyZSBzdGF0ZSBuZWFybHkgZG91YmxlcyBzcGVlZC5cbiAgICB2YXIgdCwgciA9IDAsXG4gICAgICAgIGkgPSBtZS5pLCBqID0gbWUuaiwgcyA9IG1lLlM7XG4gICAgd2hpbGUgKGNvdW50LS0pIHtcbiAgICAgIHQgPSBzW2kgPSBtYXNrICYgKGkgKyAxKV07XG4gICAgICByID0gciAqIHdpZHRoICsgc1ttYXNrICYgKChzW2ldID0gc1tqID0gbWFzayAmIChqICsgdCldKSArIChzW2pdID0gdCkpXTtcbiAgICB9XG4gICAgbWUuaSA9IGk7IG1lLmogPSBqO1xuICAgIHJldHVybiByO1xuICAgIC8vIEZvciByb2J1c3QgdW5wcmVkaWN0YWJpbGl0eSwgdGhlIGZ1bmN0aW9uIGNhbGwgYmVsb3cgYXV0b21hdGljYWxseVxuICAgIC8vIGRpc2NhcmRzIGFuIGluaXRpYWwgYmF0Y2ggb2YgdmFsdWVzLiAgVGhpcyBpcyBjYWxsZWQgUkM0LWRyb3BbMjU2XS5cbiAgICAvLyBTZWUgaHR0cDovL2dvb2dsZS5jb20vc2VhcmNoP3E9cnNhK2ZsdWhyZXIrcmVzcG9uc2UmYnRuSVxuICB9KSh3aWR0aCk7XG59XG5cbi8vXG4vLyBjb3B5KClcbi8vIENvcGllcyBpbnRlcm5hbCBzdGF0ZSBvZiBBUkM0IHRvIG9yIGZyb20gYSBwbGFpbiBvYmplY3QuXG4vL1xuZnVuY3Rpb24gY29weShmLCB0KSB7XG4gIHQuaSA9IGYuaTtcbiAgdC5qID0gZi5qO1xuICB0LlMgPSBmLlMuc2xpY2UoKTtcbiAgcmV0dXJuIHQ7XG59O1xuXG4vL1xuLy8gZmxhdHRlbigpXG4vLyBDb252ZXJ0cyBhbiBvYmplY3QgdHJlZSB0byBuZXN0ZWQgYXJyYXlzIG9mIHN0cmluZ3MuXG4vL1xuZnVuY3Rpb24gZmxhdHRlbihvYmosIGRlcHRoKSB7XG4gIHZhciByZXN1bHQgPSBbXSwgdHlwID0gKHR5cGVvZiBvYmopLCBwcm9wO1xuICBpZiAoZGVwdGggJiYgdHlwID09ICdvYmplY3QnKSB7XG4gICAgZm9yIChwcm9wIGluIG9iaikge1xuICAgICAgdHJ5IHsgcmVzdWx0LnB1c2goZmxhdHRlbihvYmpbcHJvcF0sIGRlcHRoIC0gMSkpOyB9IGNhdGNoIChlKSB7fVxuICAgIH1cbiAgfVxuICByZXR1cm4gKHJlc3VsdC5sZW5ndGggPyByZXN1bHQgOiB0eXAgPT0gJ3N0cmluZycgPyBvYmogOiBvYmogKyAnXFwwJyk7XG59XG5cbi8vXG4vLyBtaXhrZXkoKVxuLy8gTWl4ZXMgYSBzdHJpbmcgc2VlZCBpbnRvIGEga2V5IHRoYXQgaXMgYW4gYXJyYXkgb2YgaW50ZWdlcnMsIGFuZFxuLy8gcmV0dXJucyBhIHNob3J0ZW5lZCBzdHJpbmcgc2VlZCB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIHJlc3VsdCBrZXkuXG4vL1xuZnVuY3Rpb24gbWl4a2V5KHNlZWQsIGtleSkge1xuICB2YXIgc3RyaW5nc2VlZCA9IHNlZWQgKyAnJywgc21lYXIsIGogPSAwO1xuICB3aGlsZSAoaiA8IHN0cmluZ3NlZWQubGVuZ3RoKSB7XG4gICAga2V5W21hc2sgJiBqXSA9XG4gICAgICBtYXNrICYgKChzbWVhciBePSBrZXlbbWFzayAmIGpdICogMTkpICsgc3RyaW5nc2VlZC5jaGFyQ29kZUF0KGorKykpO1xuICB9XG4gIHJldHVybiB0b3N0cmluZyhrZXkpO1xufVxuXG4vL1xuLy8gYXV0b3NlZWQoKVxuLy8gUmV0dXJucyBhbiBvYmplY3QgZm9yIGF1dG9zZWVkaW5nLCB1c2luZyB3aW5kb3cuY3J5cHRvIGFuZCBOb2RlIGNyeXB0b1xuLy8gbW9kdWxlIGlmIGF2YWlsYWJsZS5cbi8vXG5mdW5jdGlvbiBhdXRvc2VlZCgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgb3V0O1xuICAgIGlmIChub2RlY3J5cHRvICYmIChvdXQgPSBub2RlY3J5cHRvLnJhbmRvbUJ5dGVzKSkge1xuICAgICAgLy8gVGhlIHVzZSBvZiAnb3V0JyB0byByZW1lbWJlciByYW5kb21CeXRlcyBtYWtlcyB0aWdodCBtaW5pZmllZCBjb2RlLlxuICAgICAgb3V0ID0gb3V0KHdpZHRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpO1xuICAgICAgKGdsb2JhbC5jcnlwdG8gfHwgZ2xvYmFsLm1zQ3J5cHRvKS5nZXRSYW5kb21WYWx1ZXMob3V0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRvc3RyaW5nKG91dCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgYnJvd3NlciA9IGdsb2JhbC5uYXZpZ2F0b3IsXG4gICAgICAgIHBsdWdpbnMgPSBicm93c2VyICYmIGJyb3dzZXIucGx1Z2lucztcbiAgICByZXR1cm4gWytuZXcgRGF0ZSwgZ2xvYmFsLCBwbHVnaW5zLCBnbG9iYWwuc2NyZWVuLCB0b3N0cmluZyhwb29sKV07XG4gIH1cbn1cblxuLy9cbi8vIHRvc3RyaW5nKClcbi8vIENvbnZlcnRzIGFuIGFycmF5IG9mIGNoYXJjb2RlcyB0byBhIHN0cmluZ1xuLy9cbmZ1bmN0aW9uIHRvc3RyaW5nKGEpIHtcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoMCwgYSk7XG59XG5cbi8vXG4vLyBXaGVuIHNlZWRyYW5kb20uanMgaXMgbG9hZGVkLCB3ZSBpbW1lZGlhdGVseSBtaXggYSBmZXcgYml0c1xuLy8gZnJvbSB0aGUgYnVpbHQtaW4gUk5HIGludG8gdGhlIGVudHJvcHkgcG9vbC4gIEJlY2F1c2Ugd2UgZG9cbi8vIG5vdCB3YW50IHRvIGludGVyZmVyZSB3aXRoIGRldGVybWluaXN0aWMgUFJORyBzdGF0ZSBsYXRlcixcbi8vIHNlZWRyYW5kb20gd2lsbCBub3QgY2FsbCBtYXRoLnJhbmRvbSBvbiBpdHMgb3duIGFnYWluIGFmdGVyXG4vLyBpbml0aWFsaXphdGlvbi5cbi8vXG5taXhrZXkobWF0aC5yYW5kb20oKSwgcG9vbCk7XG5cbi8vXG4vLyBOb2RlanMgYW5kIEFNRCBzdXBwb3J0OiBleHBvcnQgdGhlIGltcGxlbWVudGF0aW9uIGFzIGEgbW9kdWxlIHVzaW5nXG4vLyBlaXRoZXIgY29udmVudGlvbi5cbi8vXG5pZiAoKHR5cGVvZiBtb2R1bGUpID09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gc2VlZHJhbmRvbTtcbiAgLy8gV2hlbiBpbiBub2RlLmpzLCB0cnkgdXNpbmcgY3J5cHRvIHBhY2thZ2UgZm9yIGF1dG9zZWVkaW5nLlxuICB0cnkge1xuICAgIG5vZGVjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbiAgfSBjYXRjaCAoZXgpIHt9XG59IGVsc2UgaWYgKCh0eXBlb2YgZGVmaW5lKSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uKCkgeyByZXR1cm4gc2VlZHJhbmRvbTsgfSk7XG59IGVsc2Uge1xuICAvLyBXaGVuIGluY2x1ZGVkIGFzIGEgcGxhaW4gc2NyaXB0LCBzZXQgdXAgTWF0aC5zZWVkcmFuZG9tIGdsb2JhbC5cbiAgbWF0aFsnc2VlZCcgKyBybmduYW1lXSA9IHNlZWRyYW5kb207XG59XG5cblxuLy8gRW5kIGFub255bW91cyBzY29wZSwgYW5kIHBhc3MgaW5pdGlhbCB2YWx1ZXMuXG59KShcbiAgLy8gZ2xvYmFsOiBgc2VsZmAgaW4gYnJvd3NlcnMgKGluY2x1ZGluZyBzdHJpY3QgbW9kZSBhbmQgd2ViIHdvcmtlcnMpLFxuICAvLyBvdGhlcndpc2UgYHRoaXNgIGluIE5vZGUgYW5kIG90aGVyIGVudmlyb25tZW50c1xuICAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSA/IHNlbGYgOiB0aGlzLFxuICBbXSwgICAgIC8vIHBvb2w6IGVudHJvcHkgcG9vbCBzdGFydHMgZW1wdHlcbiAgTWF0aCAgICAvLyBtYXRoOiBwYWNrYWdlIGNvbnRhaW5pbmcgcmFuZG9tLCBwb3csIGFuZCBzZWVkcmFuZG9tXG4pO1xuIl0sIm5hbWVzIjpbIl9zY3JpcHREaXIiLCJleHBvcnRDcHBEYnNjYW5MaWIiLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJ1bmRlZmluZWQiLCJyZWFkeVByb21pc2VSZXNvbHZlIiwicmVhZHlQcm9taXNlUmVqZWN0IiwiTW9kdWxlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZWFkQmluYXJ5IiwibW9kdWxlT3ZlcnJpZGVzIiwiT2JqZWN0IiwiYXNzaWduIiwiRU5WSVJPTk1FTlRfSVNfV0VCIiwid2luZG93IiwiRU5WSVJPTk1FTlRfSVNfV09SS0VSIiwiaW1wb3J0U2NyaXB0cyIsInNjcmlwdERpcmVjdG9yeSIsInByb2Nlc3MiLCJ2ZXJzaW9ucyIsIm5vZGUiLCJzZWxmIiwibG9jYXRpb24iLCJocmVmIiwiaW5kZXhPZiIsInN1YnN0ciIsInJlcGxhY2UiLCJsYXN0SW5kZXhPZiIsInVybCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInJlc3BvbnNlVHlwZSIsInNlbmQiLCJVaW50OEFycmF5IiwiY29uc29sZSIsImxvZyIsImJpbmQiLCJ3YXNtQmluYXJ5Iiwid2FzbU1lbW9yeSIsImVyciIsIndhcm4iLCJXZWJBc3NlbWJseSIsImFib3J0IiwiSEVBUDgiLCJIRUFQVTgiLCJIRUFQVTMyIiwiQUJPUlQiLCJ1cGRhdGVNZW1vcnlWaWV3cyIsImIiLCJidWZmZXIiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJfX0FUUFJFUlVOX18iLCJfX0FUSU5JVF9fIiwiX19BVFBPU1RSVU5fXyIsInJ1bkRlcGVuZGVuY2llcyIsInJ1bkRlcGVuZGVuY3lXYXRjaGVyIiwiZGVwZW5kZW5jaWVzRnVsZmlsbGVkIiwid2hhdCIsImUiLCJSdW50aW1lRXJyb3IiLCJ3YXNtQmluYXJ5RmlsZSIsInBhdGgiLCJpc0RhdGFVUkkiLCJmaWxlbmFtZSIsInN0YXJ0c1dpdGgiLCJnZXRCaW5hcnkiLCJmaWxlIiwiaW5zdGFudGlhdGVBcnJheUJ1ZmZlciIsImJpbmFyeUZpbGUiLCJpbXBvcnRzIiwicmVjZWl2ZXIiLCJmZXRjaCIsInRoZW4iLCJjcmVkZW50aWFscyIsInJlc3BvbnNlIiwiY2F0Y2giLCJnZXRCaW5hcnlQcm9taXNlIiwiYmluYXJ5IiwiaW5zdGFudGlhdGUiLCJpbnN0YW5jZSIsInJlYXNvbiIsImNhbGxSdW50aW1lQ2FsbGJhY2tzIiwiY2FsbGJhY2tzIiwibGVuZ3RoIiwic2hpZnQiLCJFeGNlcHRpb25JbmZvIiwiZXhjUHRyIiwidGhpcyIsInB0ciIsInNldF90eXBlIiwidHlwZSIsImdldF90eXBlIiwic2V0X2Rlc3RydWN0b3IiLCJkZXN0cnVjdG9yIiwiZ2V0X2Rlc3RydWN0b3IiLCJzZXRfY2F1Z2h0IiwiY2F1Z2h0IiwiZ2V0X2NhdWdodCIsInNldF9yZXRocm93biIsInJldGhyb3duIiwiZ2V0X3JldGhyb3duIiwiaW5pdCIsInNldF9hZGp1c3RlZF9wdHIiLCJhZGp1c3RlZFB0ciIsImdldF9hZGp1c3RlZF9wdHIiLCJnZXRfZXhjZXB0aW9uX3B0ciIsIl9fX2N4YV9pc19wb2ludGVyX3R5cGUiLCJhZGp1c3RlZCIsImVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIiLCJzaXplIiwiZ3JvdyIsImJ5dGVMZW5ndGgiLCJnZXRDRnVuYyIsImlkZW50IiwiVVRGOERlY29kZXIiLCJUZXh0RGVjb2RlciIsImNjYWxsIiwicmV0dXJuVHlwZSIsImFyZ1R5cGVzIiwiYXJncyIsIm9wdHMiLCJ0b0MiLCJzdHIiLCJyZXQiLCJsZW4iLCJpIiwiYyIsImNoYXJDb2RlQXQiLCJsZW5ndGhCeXRlc1VURjgiLCJzdGFja0FsbG9jIiwib3V0UHRyIiwibWF4Qnl0ZXNUb1dyaXRlIiwiaGVhcCIsIm91dElkeCIsImVuZElkeCIsInUiLCJzdHJpbmdUb1VURjhBcnJheSIsInN0cmluZ1RvVVRGOCIsInN0cmluZ1RvVVRGOE9uU3RhY2siLCJhcnIiLCJhcnJheSIsInNldCIsImZ1bmMiLCJjQXJncyIsInN0YWNrIiwiY29udmVydGVyIiwic3RhY2tTYXZlIiwiYXBwbHkiLCJzdGFja1Jlc3RvcmUiLCJoZWFwT3JBcnJheSIsImlkeCIsIm1heEJ5dGVzVG9SZWFkIiwiZW5kUHRyIiwiZGVjb2RlIiwic3ViYXJyYXkiLCJ1MCIsInUxIiwidTIiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJjaCIsIlVURjhBcnJheVRvU3RyaW5nIiwiQm9vbGVhbiIsImNvbnZlcnRSZXR1cm5WYWx1ZSIsIm9uRG9uZSIsImNhbGxlZFJ1biIsIndhc21JbXBvcnRzIiwiZGVzdCIsIm51bSIsImNvcHlXaXRoaW4iLCJyZXF1ZXN0ZWRTaXplIiwieCIsIm9sZFNpemUiLCJtYXhIZWFwU2l6ZSIsImN1dERvd24iLCJvdmVyR3Jvd25IZWFwU2l6ZSIsIk1hdGgiLCJtaW4iLCJtYXgiLCJjYWxsYmFjayIsImluZm8iLCJyZWNlaXZlSW5zdGFuY2UiLCJtb2R1bGUiLCJjYiIsImV4cG9ydHMiLCJ1bnNoaWZ0IiwiaWQiLCJjbGVhckludGVydmFsIiwicmVtb3ZlUnVuRGVwZW5kZW5jeSIsInJlc3VsdCIsImluc3RhbnRpYXRlU3RyZWFtaW5nIiwiY3JlYXRlV2FzbSIsImFyZ3VtZW50cyIsInJ1biIsImRvUnVuIiwicG9zdFJ1biIsInByZVJ1biIsInNldFRpbWVvdXQiLCJudW1lcmljQXJncyIsImV2ZXJ5IiwicnVuQ2FsbGVyIiwicG9wIiwicmVhZHkiLCJkZWZpbmUiLCJpc05pbCIsImluc2VydFNtYWxsZXIiLCJkaXN0YW5jZXNBciIsImluZGV4ZXMiLCJpbmRleCIsIm5ld1Bvc2l0aW9uIiwiZmluZEluZGV4IiwidiIsInNwbGljZSIsImFzc2VydCIsImNvbmRpdGlvbiIsIm1lc3NhZ2UiLCJFcnJvciIsInZlY3RvckRpc3RhbmNlTWV0cmljc01ldGhvZHMiLCJwIiwicSIsInBvdyIsInNxcnQiLCJzdHJpbmdEaXN0YW5jZU1ldHJpY3NNZXRob2RzIiwiczEiLCJzMiIsImRpc3QiLCJiaXRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHMiLCJpbnRBcnJheURpc3RhbmNlTWV0cmljc01ldGhvZHMiLCJudW1iZXJEaXN0YW5jZU1ldHJpY3NNZXRob2RzIiwibnVtYmVyQXJyYXlEaXN0YW5jZU1ldHJpY3MiLCJBdmFpbGFibGVNZXRyaWNzIiwiTWV0cmljVG9EYXRhVHlwZSIsImtleXMiLCJyZWR1Y2UiLCJrZXkiLCJ2YWwiLCJNZWFzdXJlIiwiY29uc3RydWN0b3IiLCJtZXRob2QiLCJkYXRhVHlwZSIsIm1ldHJpY05lZWRzQXJncyIsIm5hbWUiLCJpc051bWJlckFycmF5TWV0cmljIiwiZ2V0TWVhc3VyZSIsImRpY3QiLCJoYXNPd25Qcm9wZXJ0eSIsInN0YXRpYyIsImF2YWlsYWJsZU1lYXN1cmVzIiwiRGlzdGFuY2VNYXRyaXhTZXJ2aWNlIiwidXNlQ29uY3VycmVudFdvcmtlcnMiLCJ0ZXJtaW5hdGVPbkNvbXBsZXRlIiwidGhyZWFkQ291bnQiLCJuYXZpZ2F0b3IiLCJoYXJkd2FyZUNvbmN1cnJlbmN5IiwiX3dvcmtlckNvdW50IiwiX3dvcmtlcnMiLCJBcnJheSIsImZpbGwiLCJtYXAiLCJXb3JrZXIiLCJVUkwiLCJfdGVybWluYXRlT25Db21wbGV0ZSIsImFzeW5jIiwidmFsdWVzIiwiZm5OYW1lIiwibm9ybWFsaXplIiwiY2FsY011bHRpIiwiZm5OYW1lcyIsIndlaWdodHMiLCJhZ2dyZWdhdGlvbk1ldGhvZCIsInByb21pc2VzIiwidG90YWxMZW5ndGgiLCJjaHVua1NpemUiLCJkaXN0YW5jZU1hdHJpeCIsImVuZFJvdyIsImVuZENvbCIsImxtaW4iLCJsbWF4IiwiTnVtYmVyIiwiTUlOX1ZBTFVFIiwic3RhcnQiLCJmbG9vciIsImVuZCIsInN0YXJ0Um93Iiwic3RhcnRDb2wiLCJwb3N0TWVzc2FnZSIsImNodW5ja1NpemUiLCJyZXNvbHZlV29ya2VyIiwicmVqZWN0V29ya2VyIiwib25tZXNzYWdlIiwiZGF0YSIsImVycm9yIiwiZGlzdGFuY2VNYXRyaXhEYXRhIiwidGVybWluYXRlIiwiYWxsIiwiZm9yRWFjaCIsInZhbHVlIiwid29ya2VyIiwidGF1UmFuZEludCIsIm4iLCJyYW5kb20iLCJ0YXVSYW5kIiwiZW1wdHkiLCJvdXRwdXQiLCJwdXNoIiwicmFuZ2UiLCJfIiwiZmlsbGVkIiwiemVyb3MiLCJtZWFuIiwiaW5wdXQiLCJzdW0iLCJyZWplY3Rpb25TYW1wbGUiLCJuU2FtcGxlcyIsInBvb2xTaXplIiwicmVqZWN0U2FtcGxlIiwiaiIsImJyb2tlbiIsImsiLCJyZXNoYXBlMmQiLCJhIiwicm93cyIsImNvbCIsIm1ha2VIZWFwIiwiblBvaW50cyIsIm1ha2VBcnJheXMiLCJmaWxsVmFsdWUiLCJJbmZpbml0eSIsImhlYXBQdXNoIiwicm93Iiwid2VpZ2h0IiwiZmxhZyIsImluZGljZXMiLCJ1bmNoZWNrZWRIZWFwUHVzaCIsImlzTmV3IiwiaVN3YXAiLCJpYzEiLCJpYzIiLCJoZWFwU2hhcGUyIiwiYnVpbGRDYW5kaWRhdGVzIiwiY3VycmVudEdyYXBoIiwiblZlcnRpY2VzIiwibk5laWdoYm9ycyIsIm1heENhbmRpZGF0ZXMiLCJjYW5kaWRhdGVOZWlnaGJvcnMiLCJpc24iLCJkIiwiZGVoZWFwU29ydCIsImluZEhlYXAiLCJkaXN0SGVhcCIsImluZEhlYXBJbmRleCIsImRpc3RIZWFwSW5kZXgiLCJ0ZW1wMSIsInRlbXAyIiwic2lmdERvd24iLCJoZWFwMSIsImhlYXAyIiwiY2VpbGluZyIsImVsdCIsImxlZnRDaGlsZCIsInJpZ2h0Q2hpbGQiLCJzd2FwIiwic21hbGxlc3RGbGFnZ2VkIiwiaW5kIiwibWluRGlzdCIsInJlc3VsdEluZGV4IiwiU3BhcnNlTWF0cml4IiwiY29scyIsImRpbXMiLCJlbnRyaWVzIiwiTWFwIiwiblJvd3MiLCJuQ29scyIsImNoZWNrRGltcyIsIm1ha2VLZXkiLCJoYXMiLCJnZXQiLCJkZWZhdWx0VmFsdWUiLCJnZXRBbGwiLCJvcmRlcmVkIiwicm93Q29sVmFsdWVzIiwic29ydCIsImdldERpbXMiLCJnZXRSb3dzIiwiZnJvbSIsIl9rZXkiLCJnZXRDb2xzIiwiZ2V0VmFsdWVzIiwiZm4iLCJ2YWxzIiwidG9BcnJheSIsIm1hdHJpeCIsIm9sZFJvd3MiLCJvbGRDb2xzIiwib2xkVmFscyIsIm1hdGxlbiIsInBhaXJ3aXNlTXVsdGlwbHkiLCJlbGVtZW50V2lzZSIsInkiLCJhZGQiLCJzdWJ0cmFjdCIsIm11bHRpcGx5U2NhbGFyIiwic2NhbGFyIiwiZWxpbWluYXRlWmVyb3MiLCJtIiwiemVyb0luZGljZXMiLCJTZXQiLCJyZW1vdmVCeVplcm9JbmRleCIsIm5leHRWYWx1ZXMiLCJmaWx0ZXIiLCJuZXh0Um93cyIsIm5leHRDb2xzIiwibm9ybVR5cGUiLCJub3JtRm4iLCJub3JtRm5zIiwiY29sc0J5Um93IiwibmV4dE1hdHJpeCIsIm5vcm0iLCJ4cyIsIm9wIiwidmlzaXRlZCIsIm9wZXJhdGUiLCJuZXh0VmFsdWUiLCJ2YWx1ZXNBIiwicm93c0EiLCJjb2xzQSIsInZhbHVlc0IiLCJyb3dzQiIsImNvbHNCIiwiZ2V0Q1NSIiwiaW5kcHRyIiwiY3VycmVudFJvdyIsIkZsYXRUcmVlIiwiaHlwZXJwbGFuZXMiLCJvZmZzZXRzIiwiY2hpbGRyZW4iLCJtYWtlRm9yZXN0IiwiblRyZWVzIiwibGVhZlNpemUiLCJ0cmVlcyIsIm1ha2VFdWNsaWRlYW5UcmVlIiwibWFrZVRyZWUiLCJmb3Jlc3QiLCJ0cmVlIiwibk5vZGVzIiwibnVtTm9kZXMiLCJuTGVhdmVzIiwibnVtTGVhdmVzIiwiaHlwZXJwbGFuZSIsInJlY3Vyc2l2ZUZsYXR0ZW4iLCJmbGF0dGVuVHJlZSIsInNwbGl0UmVzdWx0cyIsImxlZnRJbmRleCIsInJpZ2h0SW5kZXgiLCJsZWZ0IiwicmlnaHQiLCJoeXBlcnBsYW5lT2Zmc2V0IiwiaHlwZXJwbGFuZVZlY3RvciIsIm5MZWZ0IiwiblJpZ2h0Iiwic2lkZSIsIm1hcmdpbiIsImluZGljZXNMZWZ0IiwiaW5kaWNlc1JpZ2h0Iiwib2Zmc2V0IiwiZXVjbGlkZWFuUmFuZG9tUHJvamVjdGlvblNwbGl0IiwiaXNMZWFmIiwibm9kZU51bSIsImxlYWZOdW0iLCJvbGROb2RlTnVtIiwicmVzIiwic2VsZWN0U2lkZSIsInBvaW50Iiwic2VhcmNoRmxhdFRyZWUiLCJTTU9PVEhfS19UT0xFUkFOQ0UiLCJNSU5fS19ESVNUX1NDQUxFIiwiVU1BUCIsIm5laWdoYm9ycyIsInBhcmFtcyIsImxlYXJuaW5nUmF0ZSIsImxvY2FsQ29ubmVjdGl2aXR5IiwibkNvbXBvbmVudHMiLCJuRXBvY2hzIiwibmVnYXRpdmVTYW1wbGVSYXRlIiwicmVwdWxzaW9uU3RyZW5ndGgiLCJzZXRPcE1peFJhdGlvIiwic3ByZWFkIiwidHJhbnNmb3JtUXVldWVTaXplIiwidGFyZ2V0TWV0cmljIiwidGFyZ2V0V2VpZ2h0IiwidGFyZ2V0Tk5laWdoYm9ycyIsImRpc3RhbmNlRm4iLCJudW1lcmljIiwiaXNJbml0aWFsaXplZCIsInJwRm9yZXN0IiwiZW1iZWRkaW5nIiwib3B0aW1pemF0aW9uU3RhdGUiLCJPcHRpbWl6YXRpb25TdGF0ZSIsInNldFBhcmFtIiwiZml0IiwiWCIsImluaXRpYWxpemVGaXQiLCJvcHRpbWl6ZUxheW91dCIsIm9wdGltaXplTGF5b3V0QXN5bmMiLCJzZXRTdXBlcnZpc2VkUHJvamVjdGlvbiIsIlkiLCJzZXRQcmVjb21wdXRlZEtOTiIsImtubkluZGljZXMiLCJrbm5EaXN0YW5jZXMiLCJnZXRORXBvY2hzIiwia25uUmVzdWx0cyIsIm5lYXJlc3ROZWlnaGJvcnMiLCJncmFwaCIsImZ1enp5U2ltcGxpY2lhbFNldCIsIm1ha2VTZWFyY2hGbnMiLCJzZWFyY2hHcmFwaCIsIm1ha2VTZWFyY2hHcmFwaCIsInByb2Nlc3NHcmFwaEZvclN1cGVydmlzZWRQcm9qZWN0aW9uIiwiaGVhZCIsInRhaWwiLCJlcG9jaHNQZXJTYW1wbGUiLCJpbml0aWFsaXplU2ltcGxpY2lhbFNldEVtYmVkZGluZyIsImluaXRpYWxpemVPcHRpbWl6YXRpb24iLCJwcmVwYXJlRm9yT3B0aW1pemF0aW9uTG9vcCIsImluaXRGcm9tVHJlZSIsImluaXRGcm9tUmFuZG9tIiwicXVlcnlQb2ludHMiLCJfaGVhcCIsIl90cmVlIiwic2VhcmNoIiwiaW5pdGlhbGl6YXRpb24iLCJ0cmllZCIsInZlcnRleCIsImNhbmRpZGF0ZXMiLCJzbGljZSIsImNhbmRpZGF0ZSIsImtubiIsImRpc3RhbmNlcyIsIm5laWdoYm9yIiwiZGlzdGFuY2UiLCJ0cmFuc2Zvcm0iLCJ0b1RyYW5zZm9ybSIsInJhd0RhdGEiLCJyZXN1bHRzIiwiYWRqdXN0ZWRMb2NhbENvbm5lY3Rpdml0eSIsInNpZ21hcyIsInJob3MiLCJzbW9vdGhLTk5EaXN0YW5jZSIsImNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzIiwiY3NyTWF0cml4IiwiX3oiLCJpbml0VHJhbnNmb3JtIiwiZ3JhcGhNYXgiLCJtYWtlRXBvY2hzUGVyU2FtcGxlIiwiYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzIiwiaGVhZEVtYmVkZGluZyIsInRhaWxFbWJlZGRpbmciLCJjdXJyZW50RXBvY2giLCJmYXJEaXN0IiwiY2F0ZWdvcmljYWxTaW1wbGljaWFsU2V0SW50ZXJzZWN0aW9uIiwic3RlcCIsIm9wdGltaXplTGF5b3V0U3RlcCIsImdldEVtYmVkZGluZyIsIm1ldHJpY05ORGVzY2VudCIsImxlYWZBcnJheSIsIm5JdGVycyIsImRlbHRhIiwicmhvIiwicnBUcmVlSW5pdCIsImNqIiwiY2siLCJyb3VuZCIsImxvZzIiLCJzcGFyc2VNYXRyaXgiLCJ0cmFuc3Bvc2UiLCJwcm9kTWF0cml4Iiwic2ltcGxpY2lhbFNldCIsInRhcmdldCIsInVua25vd25EaXN0IiwiaW50ZXJzZWN0aW9uIiwiZXhwIiwiZmFzdEludGVyc2VjdGlvbiIsInJlc2V0TG9jYWxDb25uZWN0aXZpdHkiLCJuSXRlciIsImJhbmR3aWR0aCIsImxvIiwiaGkiLCJtaWQiLCJpdGhEaXN0YW5jZXMiLCJub25aZXJvRGlzdHMiLCJpbnRlcnBvbGF0aW9uIiwicHN1bSIsImFicyIsIm1lYW5JdGhEaXN0YW5jZXMiLCJtZWFuRGlzdGFuY2VzIiwiZ3JhcGhWYWx1ZXMiLCJlbnRyeSIsInciLCJzdGF0ZSIsImRpbSIsIm1vdmVPdGhlciIsImVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlIiwiZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZSIsImVwb2NoT2ZOZXh0U2FtcGxlIiwiaW5pdGlhbEFscGhhIiwiYWxwaGEiLCJnYW1tYSIsInh2IiwieXYiLCJwYXJhbWV0ZXJWYWx1ZXMiLCJwYXJhbWV0ZXJpemVkRnVuY3Rpb24iLCJvcHRpb25zIiwibWF4SXRlcmF0aW9ucyIsImdyYWRpZW50RGlmZmVyZW5jZSIsImRhbXBpbmciLCJlcnJvclRvbGVyYW5jZSIsIm1pblZhbHVlcyIsIm1heFZhbHVlcyIsImluaXRpYWxWYWx1ZXMiLCJwYXJhbWV0ZXJzIiwicGFyTGVuIiwiTUFYX1NBRkVfSU5URUdFUiIsIk1JTl9TQUZFX0lOVEVHRVIiLCJpdGVyYXRpb24iLCJlcnJvckNhbGN1bGF0aW9uIiwiY29udmVyZ2VkIiwiaXNOYU4iLCJwYXJhbWV0ZXJFcnJvciIsIml0ZXJhdGlvbnMiLCJmaW5kQUJQYXJhbXMiLCJjdXJyZW50Iiwib3RoZXIiLCJkaXN0U3F1YXJlZCIsInJEaXN0IiwiZ3JhZENvZWZmIiwiZ3JhZEQiLCJjbGlwIiwibk5lZ1NhbXBsZXMiLCJlcG9jaENhbGxiYWNrIiwiZXBvY2hDb21wbGV0ZWQiLCJzaG91bGRTdG9wIiwiaXNGaW5pc2hlZCIsImNsaXBWYWx1ZSIsIlRTTkUiLCJnZXRvcHQiLCJvcHQiLCJmaWVsZCIsImRlZmF1bHR2YWwiLCJnYXVzc1JhbmRvbSIsInJldHVyblYiLCJ2VmFsdWUiLCJyIiwicmFuZG4iLCJtdSIsInN0ZCIsIkFycmF5QnVmZmVyIiwicmFuZG4yZCIsInMiLCJ1c2VzIiwibDIiLCJ4MSIsIngyIiwiRCIsIngxaSIsIngyaSIsInh0b2QiLCJOIiwiZ2V0SXRlclNpemUiLCJyb3dTaXplIiwiZDJwIiwicGVycGxleGl0eSIsInRvbCIsImluZGV4ZXIiLCJoVGFyZ2V0IiwiUCIsInByb3ciLCJiZXRhbWluIiwiYmV0YW1heCIsImJldGEiLCJkb25lIiwibWF4dHJpZXMiLCJwaiIsIm5IZXJlIiwicE91dCIsIk4yIiwic2lnbiIsIml0ZXIiLCJlcHNpbG9uIiwiaW5pdERhdGFSYXciLCJkaXN0cyIsImluaXRTb2x1dGlvbiIsImluaXREYXRhRGlzdCIsInRpbWUiLCJ0aW1lRW5kIiwiZ2FpbnMiLCJ5c3RlcCIsImdldFNvbHV0aW9uIiwiY2ciLCJjb3N0R3JhZCIsImNvc3QiLCJncmFkIiwieW1lYW4iLCJnaWQiLCJzaWQiLCJnYWluaWQiLCJuZXdnYWluIiwibmV3c2lkIiwiZGVidWdHcmFkIiwieW9sZCIsImNnMCIsImNnMSIsImFuYWx5dGljIiwibnVtZXJpY2FsIiwicG11bCIsInF1QXJyIiwicXN1bSIsInF1IiwicHJldiIsIlEiLCJwcmVtdWx0IiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJnZW5lcmF0b3IiLCJmdWxmaWxsZWQiLCJuZXh0IiwicmVqZWN0ZWQiLCJncHVBZGFwdGVyIiwiZ3B1RGV2aWNlIiwiZ3B1IiwicmVxdWVzdEFkYXB0ZXIiLCJwb3dlclByZWZlcmVuY2UiLCJpc0xvc3QiLCJsb3N0IiwicmVxdWlyZWRCdWZmZXJTaXplIiwiYWRhcHRlckxpbWl0cyIsImxpbWl0cyIsImJ1ZmZmZXJTaXplTGltaXQiLCJtYXhCdWZmZXJTaXplIiwic3RvcmFnZUJ1ZmZlclNpemVMaW1pdCIsIm1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSIsInJlcXVlc3REZXZpY2UiLCJyZXF1aXJlZExpbWl0cyIsIldFQkdTTEFHR1JFR0FUSU9OIiwiRVVDTElERUFOIiwiYXJyYXlTaXplIiwiTUFOSEFUVEFOIiwiV0VCR1BVRElTVEFOQ0UiLCJIQU1NSU5HIiwiX21heEFycmF5U2l6ZSIsImVudHJ5SW5kZXgiLCJtYXhBcnJheVNpemUiLCJfZW50cnlJbmRleCIsIlRBTklNT1RPIiwiTEVWRU5TVEVJTiIsIk5FRURMRU1BTl9XVU5TQ0giLCJNT05PTUVSX0NIRU1JQ0FMX0RJU1RBTkNFIiwiU09LQUwiLCJDT1NJTkUiLCJBU1lNTUVUUklDIiwiRGlmZmVyZW5jZSIsIk9uZUhvdCIsImRpc3RhbmNlRnVuY3Rpb25Db21wbGV4aXR5IiwibWF4RW50cnlTaXplIiwiY2VpbCIsIl9tYXhFbnRyeVNpemUiLCJUeXBlU3VwcG9ydGVkRGlzdGFuY2VzIiwiTWF0cml4TWF0cml4T3BUeXBlIiwiTWF0cml4T3BUeXBlIiwiTWF0cml4U2NhbGFyT3BUeXBlIiwibXVsdGlDb2xXZWJHUFVLTk4iLCJlbnRyeUxpc3QiLCJrbm5TaXplIiwiZGlzdGFuY2VNZXRyaWNzIiwiYWdncmVnYXRpb25GdW5jdGlvbiIsInNvbWUiLCJsaXN0IiwiYXZhaWxhYmxlRGlzdGFuY2VNZXRyaWNzIiwibWV0cmljIiwiaW5jbHVkZXMiLCJqb2luIiwibnVtT2ZDb2x1bW5zIiwiZGV2aWNlIiwiZGV2aWNlTG9zdCIsImxpc3RTaXplIiwicHJvY2Vzc0luZm8iLCJkaXN0YW5jZU1ldHJpYyIsImdhcE9wZW5QZW5hbHR5IiwiZ2FwRXh0ZW5zaW9uUGVuYWx0eSIsIl9hIiwiX2IiLCJlbnRyeVR5cGUiLCJlbmNvZGVkTGlzdCIsInNwbGl0IiwiX2RhdGEiLCJlbmNvZGVkTGlzdFR5cGUiLCJhcnJheVNpemVzIiwibWF4RW50cnlMZW4iLCJjb21wbGV4aXR5IiwiRW5jb2RlZEFycmF5Q29uc3RydWN0b3IiLCJmbGF0U291cmNlQXJyYXkiLCJzZXEiLCJzdXBwSW5mb1N0cnVjdFdnc2wiLCJzdXBwSW5mb1NpemUiLCJzdXBwSW5mb1R5cGUiLCJzdXBwSW5mb0J1ZmZlciIsIm1heE1vbm9tZXJJbmRleCIsInNjb3JpbmdNYXRyaXgiLCJhbHBoYWJldEluZGV4ZXMiLCJzaW1pbGFyaXR5TWF0cml4U2l6ZSIsInRyYW5zZmVyZWRTaW1pbGFyaXR5TWF0cml4Iiwia2V5MiIsImRhdGFUeXBlV0dTTCIsImRhdGFTdHJ1Y3RXZ3NsIiwic291cmNlQXJyYXlTaXplIiwic3VwcEluZm9XZ3NsIiwid2dzbCIsIm5lZWRzRHVtbXkiLCJ0cmltIiwiY29tYmluZWRDb21wbGV4aXR5IiwiZGF0YVdnc2wiLCJjb21wdXRhdGlvbnNQZXJQYXNzIiwicGFpckNvbXBhcmlzb25zUGVyUGFzcyIsIndvcmtncm91cHNEaW0iLCJnbG9iYWxUaHJlYWREaW1TaXplIiwicmVzdWx0SW5kZXhlcyIsInJlc3VsdERpc3RhbmNlcyIsImNyZWF0ZVNoYWRlck1vZHVsZSIsImxhYmVsIiwiY29kZSIsImdldENvbWJpbmVkRGlzdGFuY2VTY3JpcHQiLCJwaXBlbGluZSIsImNyZWF0ZUNvbXB1dGVQaXBlbGluZSIsImxheW91dCIsImNvbXB1dGUiLCJlbnRyeVBvaW50IiwiY29tcHV0ZUluZm8zMlNpemUiLCJzdXBwSW5mbzMyU2l6ZSIsImNvbXB1dGVJbmZvQnVmZmVyU2l6ZSIsIkJZVEVTX1BFUl9FTEVNRU5UIiwicGFkZGVkQ29tcHV0ZUluZm9CdWZmZXJTaXplIiwicmVtYWluZGVyIiwiY29tcHV0ZUluZm9CdWZmZXIiLCJjcmVhdGVCdWZmZXIiLCJ1c2FnZSIsIkdQVUJ1ZmZlclVzYWdlIiwiU1RPUkFHRSIsIkNPUFlfU1JDIiwiQ09QWV9EU1QiLCJtYXBwZWRBdENyZWF0aW9uIiwibWFwcGVkQ29tcHV0ZUluZm9BcnJheUJ1ZmZlciIsImdldE1hcHBlZFJhbmdlIiwic3RhcnRBdCIsImVuZEF0IiwicGFpckNvbXBhcmlzb25TdGFydEF0IiwicGFpckNvbXBhcmlzb25FbmRBdCIsImNvbXB1dGVJbmZvT2ZmU2V0IiwiQXJyYXlDb25zdHJ1Y3RvciIsInVubWFwIiwic3VwcEluZm9CdWZmZXJTaXplIiwicGFkZGVkU3VwcEluZm9CdWZmZXJTaXplIiwic3VwcEluZm9SZW1haW5kZXIiLCJtYXBwZWRTdXBwSW5mb0FycmF5QnVmZmVyIiwic3VwcEluZm9PZmZTZXQiLCJvdXRLbm5BcnJheVNpemUiLCJidWZmZXJEaXN0YW5jZXMiLCJidWZmZXJJbmRleGVzIiwiYnl0ZXNQZXJPdXRBcnJheVJvdyIsImJpbmRHcm91cCIsImNyZWF0ZUJpbmRHcm91cCIsImdldEJpbmRHcm91cExheW91dCIsImJpbmRpbmciLCJyZXNvdXJjZSIsInJlc3VsdEJ1ZmZlckRpc3RhbmNlcyIsIk1BUF9SRUFEIiwicmVzdWx0QnVmZmVySW5kZXhlcyIsInBhaXJDb21wYXJpc29uUGFzc2VzIiwicGFpckl0ZXIiLCJxdWV1ZSIsIndyaXRlQnVmZmVyIiwiZW5jb2RlciIsImNyZWF0ZUNvbW1hbmRFbmNvZGVyIiwicGFzcyIsImJlZ2luQ29tcHV0ZVBhc3MiLCJzZXRQaXBlbGluZSIsInNldEJpbmRHcm91cCIsImRpc3BhdGNoV29ya2dyb3VwcyIsIndvcmtHcm91cERpdmlzaW9uIiwiY29weUJ1ZmZlclRvQnVmZmVyIiwiY29tbWFuZEJ1ZmZlciIsImZpbmlzaCIsInN1Ym1pdCIsIm9uU3VibWl0dGVkV29ya0RvbmUiLCJtYXBBc3luYyIsIkdQVU1hcE1vZGUiLCJSRUFEIiwiZGVzdHJveSIsImtubkluZGV4ZXMiLCJtYXhFbnRyeUxlbnMiLCJhZ2dyZWdhdGlvbiIsInBhaXJ3aXNlT3BTcGFyc2UiLCJpbmRleGVzMSIsImRpc3RhbmNlczEiLCJvZmZzZXRzMSIsImluZGV4ZXMyIiwiZGlzdGFuY2VzMiIsIm9mZnNldHMyIiwibnVtT2ZFbnRyaWVzIiwidW5pb25NYXRyaXhPZmZzZXRzIiwicmVxdWlyZWRXb3JrZ3JvdXBzIiwidGhyZWFkc1Blcldvcmtncm91cERpbSIsIm51bU9mV29ya2dyb3Vwc1BlckRpbSIsInRocmVhZHNQZXJZRGltZW5zaW9uIiwic3BhcnNlU2l6ZTEiLCJzcGFyc2VTaXplMiIsInVuaW9uTWF0cml4U2l6ZSIsInByb2Nlc3NXZ3NsIiwicGFkZGVkU3RvcmFnZTFCeXRlU2l6ZSIsInJlbWFpbmRlcjEiLCJwYWRkZWRTdG9yYWdlMkJ5dGVTaXplIiwicmVtYWluZGVyMiIsInBhZGRlZFJlc1N0b3JhZ2VCeXRlU2l6ZSIsInJlbWFpbmRlcjMiLCJzb3VyY2UxQnVmZmVyIiwibWFwcGVkU291cmNlMUJ1ZmZlciIsInNvdXJjZTJCdWZmZXIiLCJtYXBwZWRTb3VyY2UyQnVmZmVyIiwicmVzQnVmZmVyIiwidW5pb25NYXRyaXhPZmZzZXRzQnVmZmVyIiwibWFwcGVkVW5pb25NYXRyaXhPZmZzZXRzQnVmZmVyIiwicmVzdWx0QnVmZmVyIiwicmVzdWx0QXJyYXlCdWZmZXIiLCJyZXN1bHRLbm5JbmRleGVzIiwicmVzdWx0S25uRGlzdGFuY2VzIiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJpc0FueUFycmF5IiwidGFnIiwiY2FsbCIsImVuZHNXaXRoIiwid2VpZ2h0U3F1YXJlIiwiY2VudHJhbERpZmZlcmVuY2UiLCJpZGVudGl0eSIsImV2YWx1YXRlZERhdGEiLCJncmFkaWVudEZ1bmMiLCJwYXJhbUZ1bmN0aW9uIiwibmJQYXJhbXMiLCJuYlBvaW50cyIsImFucyIsInJvd0luZGV4IiwicGFyYW0iLCJhdXhQYXJhbXMiLCJmdW5jUGFyYW0iLCJmdW5jUGFyYW0yIiwiZ3JhZGllbnRGdW5jdGlvbiIsInJlc2lkdWFsRXJyb3IiLCJtYXRyaXhGdW5jdGlvbiIsImludmVyc2VNYXRyaXgiLCJtbXVsIiwic2NhbGUiLCJqYWNvYmlhbldlaWdodFJlc2lkdWFsRXJyb3IiLCJwZXJ0dXJiYXRpb25zIiwiY2hlY2tUaW1lb3V0IiwiZGFtcGluZ1N0ZXBVcCIsImRhbXBpbmdTdGVwRG93biIsImltcHJvdmVtZW50VGhyZXNob2xkIiwidGltZW91dCIsImZpbGxlciIsImVuZFRpbWUiLCJEYXRlIiwibm93IiwiY2hlY2tPcHRpb25zIiwib3B0aW1hbEVycm9yIiwib3B0aW1hbFBhcmFtZXRlcnMiLCJwcmV2aW91c0Vycm9yIiwibXVsIiwidG9PZmZzZXRGb3JtIiwiYXIiLCJwZXJmb3JtTWF0cml4T3BzIiwiZmxhdEtubkluZGV4ZXMiLCJmbGF0S25uRGlzdGFuY2VzIiwidW5pb25JbmZvIiwiZW50cnlMZW4iLCJrbm5NYXRyaXhPcEluZm9XR1NMIiwiaW5kZXhlc0J1ZmZlcjMyU2l6ZSIsImluZGV4QnVmZmVyIiwibWFwcGVkSW5kZXhlc0J1ZmZlciIsIm1hcHBlZEluZGV4ZXNBcnJheSIsInNpemVzQnVmZmVyIiwidW5pb25TaXplc0J1ZmZlciIsIm1hcHBlZFVuaW9uU2l6ZXNCdWZmZXIiLCJyZXN1bHRUcmFuc3Bvc2VTaXplc0J1ZmZlciIsInJlc3VsdFVuaW9uU2l6ZXNCdWZmZXIiLCJyZXN1bHRUcmFuc3Bvc2VTaXplc0FycmF5QnVmZmVyIiwicmVzdWx0VW5pb25TaXplc0FycmF5QnVmZmVyIiwicmVzdWx0VHJhbnNwb3NlU2l6ZXNBcnJheSIsInJlc3VsdFVuaW9uU2l6ZXNBcnJheSIsIm9sZCIsImdldEtublNwYXJzZU9wSW5mbyIsInRyYW5zcG9zZWQiLCJrbm5TcGFyc2VJbmZvIiwiZnVsbEtubkVudHJ5U2l6ZSIsInRyYW5zcG9zZU9mZnNldHMiLCJvZmZzZXRzQ29weSIsInRyYW5zcG9zZUtOTkluZGV4ZXMiLCJ0cmFuc3Bvc2VLTk5EaXN0YW5jZXMiLCJvdGhlckluZGV4Iiwib3RoZXJJbmRleE9mZnNldCIsInRyYW5zcG9zZUtOTiIsInNvdXJjZU9mZnNldHMiLCJ0cmFuc3Bvc2VNdWx0UmVzIiwiYWRkUmVzIiwic3VidFJlcyIsInVuaW9uU2l6ZXMiLCJtZWFuRGlzdGFuY2VzU3VtIiwiY3VycmVudE1lYW4iLCJzbW9vdGhLTk5EaXN0YW5jZVdHU0wiLCJkaXN0YW5jZUJ1ZmZlcjMyU2l6ZSIsInJlc3VsdFNpZ21hcyIsInJlc3VsdFJob3MiLCJkaXN0YW5jZXNCdWZmZXIiLCJtYXBwZWREaXN0YW5jZUJ1ZmZlciIsIm1hcHBlZERpc3RhbmNlQXJyYXkiLCJidWZmZXJTaWdtYXMiLCJidWZmZXJSaG9zIiwicmVzdWx0QnVmZmVyUmhvcyIsInJlc3VsdEJ1ZmZlclNpZ21hcyIsIlVtYXBQYXJhbXMiLCJuTmVpZ2hib3VycyIsIldlYkdQVVVNQVAiLCJtZW1iZXJzaGlwU3RyZW5ndGhzIiwiY2FsY1Ntb290aEtOTkRpc3RhbmNlcyIsImNhbGNNZW1iZXJzaGlwU3RyZW5ndGhzIiwidW1hcFBhcmFtcyIsInJlc0VtYmVkZGluZ3MiLCJlbWJlZGRpbmdTaXplIiwiZGl2aXNpb25GYWN0b3IiLCJoZWFkU2l6ZSIsInByb2Nlc3NXR1NMIiwiZW1iZWRTaXplIiwid29ya2dyb3VwRGltIiwidGhyZWFkc1BlclJvdyIsIm9wdGltaXplTGF5b3V0V0dTTCIsInBhZGRlZE1hdHJpeFN0b3JhZ2VTaXplIiwicGFkZGVkZXBvY2hTdG9yYWdlU2l6ZSIsInBhZGRlZGVtYmVkU3RvcmFnZVNpemUiLCJwYWRkZWRDb21wdXRlSW5mb1NpemUiLCJyZW1haW5kZXI0IiwibWF0cml4U3RvcmFnZUJ1ZmZlciIsIm1hdHJpeFN0b3JhZ2VBcnJheUJ1ZmZlciIsImVwb2NoU3RvcmFnZUJ1ZmZlciIsImVwb2NoU3RvcmFnZUFycmF5QnVmZmVyIiwiZXBvY2hTdG9yYWdlQXJyYXlWaWV3IiwiaGVhZEVtYmVkZGluZ3MiLCJlbWJlZGRpbmdTdG9yYWdlQnVmZmVyIiwibWFwcGVkRW1iZWRkaW5nU3RvcmFnZUJ1ZmZlciIsIm1hcHBlZEVtYmVkZGluZ1N0b3JhZ2VBcnJheSIsInJhbmRvbU51bWJlcnMiLCJjb21wdXRlSW5mb0FycmF5QnVmZmVyIiwib3V0RW1iZWRWaWV3QnVmZmVyIiwicmVzQXJyYXlCdWZmZXIiLCJoZWFkRW1iZWRkaW5nc1ZpZXciLCJvcHRpbWl6YXRpb25Mb29wIiwic2lnbWFzTGVuZ3RoIiwicmhvc0xlbmd0aCIsImNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzV0dTTCIsInBhZGRlZENvbWJpbmVkTWVtYmVyc2hpcFN0cnVjdEJ5dGVTaXplIiwibWVtYmVyc2hpcFN0cmVuZ3Roc0luZm9CdWZmZXIiLCJtYXBwZWRJbmZvQnVmZmVyIiwibWFwcGVkSW5mb0FycmF5Iiwia25uRGlzdGFuY2VzQnVmZmVyIiwicmVzdWx0S25uRGlzdGFuY2VzQXJyYXlCdWZmZXIiLCJieXRlc1BlcktublJvdyIsInJlc0tubkRpc3RhbmNlcyIsImRhdGFWaWV3Iiwib3V0IiwiZnV6enlTaW1wbGljaWFsU2V0UmVzIiwiZVJlcyIsIm1heFZhbCIsImN1ciIsIm1pbkdyYXBoVmFsIiwidW5pb25TaXplc0NvcHkiLCJvZmZzZXRBY2N1bSIsIm5vblplcm9HcmFwaE9mZnNldHMiLCJub25aZXJvR3JhcGhTaXplIiwiTXVsdGlDb2x1bW5SZWR1Y2VyIiwiVFNORVJlZHVjZXIiLCJzdXBlciIsInJhbmRvbVNlZWQiLCJyYW5kb21GbiIsInJlZHVjZXIiLCJkaXN0YW5jZUZuYW1lcyIsImRpc3RhbmNlRm5zIiwiZGlzdGFuY2VGbkFyZ3MiLCJwcm9ncmVzc0Z1bmMiLCJtYXRyaXhTZXJ2aWNlIiwiVU1BUFJlZHVjZXIiLCJ1c2VXZWJHUFUiLCJ2ZWN0b3JzIiwiX3BhcmFsbGVsRGlzdGFuY2VXb3JrZXJzIiwia25uR3JhcGgiLCJtdWx0aUNvbHVtbktOTiIsIndlYkdQVVJlZHVjZXIiLCJmaXRBc3luYyIsImVwb2MiLCJBdmFpbGFibGVSZWR1Y2VycyIsIk11bHRpQ29sRGltUmVkdWNlciIsIm1ldHJpY3MiLCJkaXN0YW5jZUFnZ3JlZ2F0aW9uIiwibWVhc3VyZXMiLCJtZWFzdXJlIiwiYml0QXJyYXlMZW5ndGgiLCJfbGVuZ3RoIiwidHJhbnNwb3NlTWF0cml4IiwidHlwZU5hbWUiLCJhdmFpbGFibGVNZXRob2RzIiwiYXZhaWxhYmxlTWV0cmljcyIsIm9iaiIsImVwb2NoTnVtIiwiZXBvY2hzTGVuZ3RoIiwiY29sdW1uc0RhdGEiLCJvbk1lc3NhZ2UiLCJhbGVhIiwieG9yMTI4IiwieG9yd293IiwieG9yc2hpZnQ3IiwieG9yNDA5NiIsInR5Y2hlaSIsInNyIiwiZ2xvYmFsIiwiQWxlYSIsInNlZWQiLCJtZSIsIm1hc2giLCJoIiwidCIsInMwIiwiY29weSIsImYiLCJpbXBsIiwieGciLCJwcm5nIiwiaW50MzIiLCJkb3VibGUiLCJxdWljayIsIlhvckdlbiIsInN0cnNlZWQiLCJ6IiwibGltaXQiLCJwb29sIiwibWF0aCIsIm5vZGVjcnlwdG8iLCJ3aWR0aCIsInN0YXJ0ZGVub20iLCJzaWduaWZpY2FuY2UiLCJvdmVyZmxvdyIsIm1hc2siLCJzZWVkcmFuZG9tIiwic2hvcnRzZWVkIiwibWl4a2V5IiwiZmxhdHRlbiIsImVudHJvcHkiLCJ0b3N0cmluZyIsInJhbmRvbUJ5dGVzIiwiY3J5cHRvIiwibXNDcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJicm93c2VyIiwicGx1Z2lucyIsInNjcmVlbiIsImF1dG9zZWVkIiwiYXJjNCIsIkFSQzQiLCJnIiwiUyIsImlzX21hdGhfY2FsbCIsImtleWxlbiIsImNvdW50IiwiZGVwdGgiLCJwcm9wIiwidHlwIiwic21lYXIiLCJzdHJpbmdzZWVkIiwiZXgiXSwic291cmNlUm9vdCI6IiJ9
|